Drive your real Chrome browser from any MCP client — Claude Desktop, Cursor, Cline, Claude Code — with no custom backend. This is the turnkey way to use the Browser Operator extension.
AI client ──MCP (stdio)──► this server ──WS + token──► extension ──CDP──► page
The server plays two roles in one process: it exposes the protocol tool catalog as MCP tools to your AI client, and it runs a local WebSocket endpoint the extension connects to with a shared token.
-
Build + load the extension (from the repo root):
pnpm install && pnpm build, then loaddist/atchrome://extensions(Developer mode → Load unpacked). That single root install also installs this server's deps — it's part of the pnpm workspace, so there's no separatenpm installhere. -
Add it to your MCP client. Once published to npm, the simplest config needs nothing checked out —
npxfetches and runs the server:{ "mcpServers": { "browser-operator": { "command": "npx", "args": ["-y", "cereon-browser-operator-mcp"], "env": { "OPERATOR_TOKEN": "dev-token" } } } }Developing against a local checkout instead? Point at the file directly:
{ "mcpServers": { "browser-operator": { "command": "node", "args": ["/absolute/path/to/cereon-browser-operator/mcp-server/server.mjs"], "env": { "OPERATOR_TOKEN": "dev-token" } } } } -
Connect the extension. Two ways:
- One-click (recommended): open
http://localhost:8787/pair. The page hands this server's token to the extension; click the extension's toolbar icon and press Connect to approve. No copy/paste. - Manual: popup → Configure… → transport WebSocket, auth Token,
server URL
ws://localhost:8787, tokendev-token. Save, then Connect.
- One-click (recommended): open
Now ask your AI client to use the browser — e.g. "open example.com and screenshot
it." It calls tabs_context_mcp → navigate → computer under the hood.
| Env var | Default | Purpose |
|---|---|---|
OPERATOR_TOKEN |
required | Explicit 32-512 character shared secret. There is no development fallback. |
OPERATOR_WS_PORT |
8787 |
Local WebSocket port the extension connects to. |
OPERATOR_WS_HOST |
127.0.0.1 |
Loopback listener; non-loopback values are rejected. |
OPERATOR_TOOL_PROFILE |
observe |
observe, interact, or full; JavaScript requires full. |
OPERATOR_PAIRING_ENABLED |
false |
Set true only while explicitly pairing the local extension. |
OPERATOR_TIMEOUT_MS |
30000 |
Per-command timeout. |
Each MCP tool name and its arguments mirror PROTOCOL.md exactly,
so the MCP surface is the protocol surface. Tool results (text / image
content blocks) pass straight through to MCP content. If no browser is connected,
tool calls return an error telling you to Connect the extension.
Single-instance, local stdio bridge — the right shape for a developer driving their own browser. The WebSocket link is held for the life of the process, so the extension stays connected across MCP client tool calls.