AI PLATE/ DocsBack to AI Plate
Documentation / Connectors
YOUR AI PLATE HANDBOOK

Your first connector

Connect a working local read-only notes service.

Desktop source reviewed October 5, 2026

1. Define connector.json

Create a notes-bridge folder with connector.json and server.mjs. Keep host separate from protocol and path. The manifest declares tools; the companion process supplies their implementation.

connector.json
{
  "manifest_type": "connector",
  "id": "notes_bridge",
  "name": "Notes Bridge",
  "version": "1.0.0",
  "description": "Read a sample note from a local service.",
  "type": "custom_rest",
  "connection": {
    "protocol": "http",
    "host": "127.0.0.1",
    "port": 8787,
    "authType": "none"
  },
  "options": {
    "test_path": "/health"
  },
  "companion_script": "server.mjs",
  "endpoints": [
    {
      "name": "get_note",
      "description": "Read a note by ID; use demo for the sample note.",
      "method": "GET",
      "path": "/notes/{id}",
      "parametersJsonSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Note ID"
          }
        },
        "required": [
          "id"
        ]
      }
    }
  ]
}
json

2. Start the companion service

server.mjs — Node.js built-ins only
import { createServer } from 'node:http';

const server = createServer((request, response) => {
  const url = new URL(request.url, 'http://127.0.0.1:8787');
  response.setHeader('Content-Type', 'application/json');
  if (request.method !== 'GET') {
    response.writeHead(405);
    return response.end(JSON.stringify({ error: 'Read-only example' }));
  }
  if (url.pathname === '/health') {
    return response.end(JSON.stringify({ ok: true }));
  }
  if (url.pathname === '/notes/demo') {
    return response.end(JSON.stringify({ id: 'demo', text: 'Your connector works.' }));
  }
  response.writeHead(404);
  response.end(JSON.stringify({ error: 'Note not found' }));
});
server.listen(8787, '127.0.0.1', () => console.log('Notes bridge: http://127.0.0.1:8787'));
javascript
Terminal — inside notes-bridge
node server.mjs
shell

This fixture binds only to loopback, performs no file access, and exposes GET /health and GET /notes/demo. Start it yourself: companion_script is package metadata, not an automatic process launcher.

3. Package, test, and enable

PowerShell — from the parent directory
Compress-Archive -Path .\notes-bridge\* -DestinationPath .\notes-bridge.connector.zip
powershell
  • Import the ZIP in Settings → App Connectors, not Plugins.
  • Use Test connection; /health should respond with HTTP 200.
  • Enable the connector and ask: “Use notes_bridge_get_note with id demo.”
  • Expected result: { "id": "demo", "text": "Your connector works." }.
Implementation sources

Paths in your AI Plate source checkout:

  • core/connector-manager.ts
  • electron/preload.cjs
AI Plate product & developer documentation · Static reference, no API keys collected.