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.
{
"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"
]
}
}
]
}json2. Start the companion service
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'));
javascriptnode server.mjsshellThis 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
Compress-Archive -Path .\notes-bridge\* -DestinationPath .\notes-bridge.connector.zippowershell- 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.tselectron/preload.cjs
