TabGeckoDocs
Website
Documentation / MCP HTTP and stdio

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.

JSON
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-11-25",
    "capabilities": {},
    "clientInfo": {
      "name": "example-local-client",
      "version": "1.0"
    }
  }
}
Three separate HTTP requests, or three stdio lines
{"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.js 22+
node tabgecko.mjs mcp

Download 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.

Process configuration fragment, client-specific wrapper omitted
{
  "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.

JSON
{
  "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.