The official page of chrome-bridge is now at francescosorrentino.com/plugins/chrome-bridge.

MCP server + Chrome extension

Claude Code drives the Chrome you are already logged into.

No robot browser, no empty profile, no paid plan: your real tabs, sessions and extensions, through a WebSocket bridge that never leaves your machine.

67 tools · Chrome 135+ · Node 18+ · Windows, macOS, Linux, ChromeOS · MIT

Claude Code stdio local WebSocket :8765 you, already logged in tabs · cookies · extensions

The same form, in 3 turns instead of 14.

Paired runs against the official “Claude in Chrome” extension — same model, same morning, n=5 per task (29/09/2026). On a form it wins on round trips: navigate already returns element refs, and fill_form fills N fields, submits and reports the result in one call. On a 1,500-row table the turns are about even (6 against 7) and it wins on payload: extract_table filters server-side and returns 0.2 KB instead of 40 KB of page text.

Claude in Chrome 14 turns · $0.428 Chrome Bridge 3 turns · $0.155

turns

4.7× fewer

Round trips between the model and the browser, on the form. Debugging a broken page: 9.3×; table lookup: 2.3×.

cost

2.8-4.3× lower

Per task: 2.8× on the form, 3.4× on the table, 4.3× debugging. Correct answers 15/15, against 12/15.

Method, every raw run including the unfavourable ones, and what the harness cannot measure: docs/EFFICIENCY.md. Competitor figures measured on 2026-09-01 and 2026-09-11.

67 tools, in eight groups

core (44 tools, every tool used in 101 real sessions) loads by default; the other 23 are switched on mid-session with get_status({enable}), so the schema you pay for stays small.

GroupNWhat’s in it
Core & Navigation13tabs, windows, navigate, screenshot, tile_windows
Interaction11click, fill_form, upload_file, dialogs, clipboard
DOM & Inspection12read_page, extract, extract_table, query_dom, get_css_styles, watch_dom
Debugging & Network8execute_js, console, network log, mocking, track_events
Visual & Responsive5screenshot_diff, viewport and zoom, media emulation
Audits2audit (a11y, keyboard, SEO, security, links, vitals, css, resources, cache in one call), cookie_audit
State, Storage & Files9storage, fixtures, MHTML, recording, assert
Motion & Performance6animations, frames (long frames, CLS, INP), perf_trace, screencast, lighthouse and heap_snapshot (launch mode)

Some jobs never touch the model

The same tools run from your shell at zero tokens, piped through grep or jq before anything reaches the context. Pair session_record with replay for smoke tests with no model in the loop.

chrome-bridge navigate --url https://example.com
chrome-bridge read_console --level error | head -20
chrome-bridge assert --selector "#success" --text "Done"
chrome-bridge replay --file ./recordings/login.jsonl

Launch mode gives you a dedicated Chromium with an ephemeral profile, for isolated sessions or CI: node server/index.js --launch --headless.

your shell Claude Code 0 tokens tools + refs bridge:8765

Against the alternatives

Figures measured on 2026-09-01 and 2026-09-11. Codex for Chrome (OpenAI) sits in the Claude in Chrome column: official extension, macOS and Windows only.

Chrome BridgeClaude in ChromeDevTools MCPPlaywright MCP
ChromeOS / CrostiniYes (real host)NoContainer onlyContainer only
Tools60 (43 core)2229 default24 core
Requires paid planNoYes (Pro+)NoNo
Network mockingYesNoNoYes
Visual regressionYesNoNoNo
Audits (a11y/SEO/sec)Yes, one callNoLighthouseNo
Headless / CIYesNoYesYes

Install it in three steps

Requires Node.js 18+ and Chrome 135+.

  1. Install the extension from the Chrome Web Store.
    git clone https://github.com/frsorrentino/chrome-bridge.git
    cd chrome-bridge && ./install.sh
  2. Restart Claude Code. install.sh registers the MCP server with --scope user; by hand it is claude mcp add --scope user chrome-bridge node /path/to/server/index.js.
  3. Ask for something real: “open localhost:3000, run an accessibility audit and find the Sign Up button”.

Without a clone: inside a Claude Code session, /plugin install chrome-bridge --marketplace frsorrentino/chrome-bridge (one command, Claude Code 2.1.275+; on older versions /plugin marketplace add frsorrentino/chrome-bridge then /plugin install chrome-bridge@chrome-bridge). From a shell, claude plugin install has no --marketplace option: run claude plugin marketplace add frsorrentino/chrome-bridge, then claude plugin install chrome-bridge@chrome-bridge. Either way the plugin registers the MCP server from npm (all capabilities) together with the recipes skill. The extension still comes from the Web Store. Pick one path: the plugin and install.sh would register the same server twice, and so would a plugin added from the Anthropic directory on claude.ai next to a marketplace install. In claude.ai chat the plugin loads only the recipes skill: the tools need Claude Code, or Cowork running on your computer.

On ChromeOS/Crostini install from the Web Store rather than Load unpacked: an unpacked extension is dropped on every reboot, because the container is not mounted when Chrome starts.

What it does not protect

The bridge binds loopback, accepts connections only from a chrome-extension:// origin, and requires a token on both handshakes when one is set. Beyond that, be deliberate:

Page content is untrusted

Whatever a page says reaches the model unfiltered. A hostile page’s text is input, never instructions.

Exports are not redacted

get_storage, fixtures, HAR exports and screenshots may carry cookies, tokens or personal data.

Two switches worth knowing

--no-js refuses arbitrary JavaScript in the page; --write-root confines every path the model chooses.