MCP HTTP and stdio
MCP exposes scoped native API tools and page tools from the local application. Discover the actual names and schemas through tools/list.
HTTP transport
Use the displayed native base address plus /mcp. Send Authorization: Bearer and Content-Type: application/json. Advertise Accept: application/json, text/event-stream. Initialize with your supported protocol version, clientInfo and capabilities; follow with notifications/initialized. After negotiation send MCP-Protocol-Version with subsequent HTTP requests.
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-11-25",
"capabilities": {},
"clientInfo": {
"name": "example-local-client",
"version": "1.0"
}
}
}{"jsonrpc":"2.0","method":"notifications/initialized"}
{"jsonrpc":"2.0","id":2,"method":"tools/list"}
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_profiles","arguments":{"limit":1}}}Supported protocol versions in this implementation are 2025-11-25, 2025-06-18, 2025-03-26 and 2024-11-05. Inspect the server’s initialize result; do not assume your requested version was selected. Use single messages rather than HTTP batches for current clients.
Node.js stdio bridge
node tabgecko.mjs mcpDownload tabgecko.mjs, configure your MCP client to execute Node.js with the absolute path to that file and argument mcp. Supply ADBR_API_TOKEN and optionally ADBR_API_URL in the child process environment. Do not paste a shell command into a JSON args entry. Standard output is reserved for newline-delimited JSON-RPC.
{
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_tabgecko.mjs>",
"mcp"
],
"env": {
"ADBR_API_URL": "http://127.0.0.1:47300",
"ADBR_API_TOKEN": "<LOCAL_MCP_TOKEN>"
}
}Client configuration formats differ. Map this process definition to your client’s documented MCP configuration. The CLI does not start the desktop or install a kernel. An explicit URL selects the intended instance; otherwise local runtime metadata is used.
API tools and page tools
Generated API tools use a method prefix, such as get_profiles and post_profiles_id_start. Path/query arguments are direct properties; a JSON request body is nested under body. tools/list only includes tools allowed by the token. Do not infer permissions from a tool name or readOnlyHint alone.
{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "post_profiles_id_start",
"arguments": {
"id": "PROFILE_ID",
"body": {}
}
}
}page_list, page_open, page_navigate, page_text, page_html, page_screenshot, page_click, page_type, page_press_key and page_evaluate act on a running profile. Resolve profile_id (or supported profile_no) and target_id explicitly. Read the returned schema before each new tool family; page_evaluate executes code in the page and is not a read-only promise.
Errors and lifecycle limits
The downloadable stdio bridge accepts one message per line, up to 1 MiB, and limits responses to 20 MiB. It allows eight concurrent requests with a 30-second request deadline. EOF and blocked output have bounded shutdown handling. Initialize finishes before subsequent messages are forwarded; the negotiated version header is added automatically.
This local server uses stateless JSON HTTP responses. It has no SSE subscription, resumable session or server-push channel; GET and DELETE /mcp return 405. Notifications have no JSON-RPC response and are acknowledged with HTTP 202. Inspect both JSON-RPC error and tool result.isError even when HTTP is 200. A transport disconnect does not roll back a started tool, and cancellation is not an undo operation. Re-read state after uncertain mutations instead of blindly retrying.