# Multi-Browser MCP Proxies — Arc Browser & Chrome Beta Variants > Companion to 'Chrome MCP Background Proxy' for running parallel, isolated MCP fleets against Arc Browser and Chrome Beta on top of the same cdp-proxy.mjs. Arc-specific proxy auto-discovers the WebSocket path from /json/version (Arc doesn't write a DevToolsActivePort file in the standard location); Chrome Beta proxy points at Beta's own DevToolsActivePort. Lets you run mcp__chrome__*, mcp__beta__*, and mcp__arc__* side-by-side with independent client state and no cross-talk. ## Install Merge the JSON below into your `.mcp.json`: # Multi-Browser MCP Proxies — Arc & Chrome Beta Companion bundle to **Chrome MCP Background Proxy**. Same `cdp-proxy.mjs` backbone, repointed at Arc Browser and Chrome Beta so you can run independent, isolated MCP fleets for each browser without losing focus protection or popup suppression. ## Why a separate proxy per browser - **Independent login state** — your work Chrome stays untouched while Arc drives experiments, or vice versa. - **Independent debug ports** — Arc and Chrome Beta both write their own `DevToolsActivePort` files; the proxy reads each browser's file via `--devtools-port-file`. - **No cross-talk** — each proxy has its own `clientState`, `sessionOwners`, and `pendingRequests` map. A Chrome Beta sub-agent can't accidentally hijack Arc tabs. ## Files | File | Default ports | Reads DevToolsActivePort from | |------|---------------|-------------------------------| | `arc-mcp-proxy.sh` | proxy `9501` → Arc `9223` | `~/chrome-profiles/arc-DevToolsActivePort` (auto-built from `/json/version` on each launch) | | `chrome-beta-mcp-proxy.sh` | proxy `9402` → Chrome Beta `9222` | `~/Library/Application Support/Google Chrome Beta/DevToolsActivePort` | Both wrap the same `cdp-proxy.mjs` from the parent bundle (`Chrome MCP Background Proxy`). Drop that file into `~/scripts/` first. ## Arc setup Arc doesn't write `DevToolsActivePort` to a standard location. Launch it with an explicit debug port and the proxy script will discover the WebSocket path on its own: ```bash open -a "Arc" --args --remote-debugging-port=9223 bash ~/scripts/arc-mcp-proxy.sh # proxy :9501 → Arc :9223 ``` `.mcp.json`: ```json "arc": { "command": "bash", "args": ["/Users//scripts/arc-mcp-proxy.sh", "9501", "9223"] } ``` ## Chrome Beta setup Chrome Beta writes its own `DevToolsActivePort` file under `~/Library/Application Support/Google Chrome Beta/`. Once Beta is running with remote debugging enabled (`chrome://inspect/#remote-debugging` → Allow), the proxy auto-discovers it. ```json "beta": { "command": "bash", "args": ["/Users//scripts/chrome-beta-mcp-proxy.sh", "9402", "9222"] } ``` ## Running all three side by side ``` Claude Code window A → mcp__chrome__* → :9401 → Chrome stable :9222 Claude Code window B → mcp__beta__* → :9402 → Chrome Beta :9222 Claude Code window C → mcp__arc__* → :9501 → Arc :9223 ``` Three independent proxies, three independent browsers, three sets of MCP tool namespaces. They never collide. ## Caveat — don't kill cross-session Heuristics like "kill 9401/9402 because they're not LISTEN" will tear down a sibling session's MCP. Always check `lsof -nP -p ` for live stdio before killing anything. See the `Chrome MCP Operations Runbook` skill for the full cleanup protocol. --- Source: https://tokrepo.com/en/workflows/multi-browser-mcp-proxies-arc-browser-chrome-beta-variants-deaee53e Author: henuwangkai