Let Claude use the Chrome you are already logged into.

Not a fresh browser that greets every site as a stranger. Your Chrome, your sessions, your 2FA already done. An MCP server plus an extension, 40 tools, deny-all until you say otherwise.

claude mcp add chrome-mcp -s user -- \
  npx -y @mehmoodqureshi/chrome-mcp \
  --allow-domain example.com --enable-mutations --persist-token
  • Works with
  • Claude Code
  • Claude Desktop
  • Cursor
  • Windsurf
  • any MCP host
paired/profile: workhistory.jsonl
  1. tabs_list
  2. 4 tabsadmin.shop.example is already signed in
  3. snapshot { diff: true }
  4. 12 interactive nodesbutton "Export CSV" ref=e7
  5. click { ref: "e7" }
  6. okdownload saved to results/orders.csv
  7. batch { ops: [tab_new, tab_new, tab_new] }
  8. 3 tabs opened418 ms, policy: allowed
  9. batch { ops: [read_as_markdown x3] }
  10. 3 pages41 KB, 0 secrets scrubbed

Why

Why a real browser

Most browser MCP servers launch their own Chromium and hand your agent a signed-out window. chrome-mcp does the opposite.

Your sessions, not a stranger’s

Drives the Chrome you already have open. Logged-in dashboards, admin panels and CRMs work with no credentials in any config file and no 2FA to redo.

Deny-all by default

Empty domain allowlist, eval off, downloads off, mutations off. You name the domains and the capabilities; everything else is refused before it reaches the page.

Real multi-tab concurrency

One batch call fans out across tabs, in parallel or in series, with per-tab serialisation so nothing races. Wall-clock is the slowest tab, not the sum.

Snapshots the model can act on

An accessibility snapshot with stable refs, or a diff of what changed since the last one. Target elements by role and name without guessing CSS selectors.

See why a page broke

Console output, network requests and native dialogs are captured, so the agent learns what happened rather than only what the page looks like afterwards.

An audit trail you can read

Every call lands in history.jsonl with the URL, the policy verdict, duration, bytes returned and secrets scrubbed. Password values are always blanked.

Real run, 14 September 2026. 7,298 reviews from 10 sources, 30 tabs at a time.

See it run

A real run, not a demo reel

One task folder, ten review sites, thirty tabs at a time. Every page it reads lands in results/ with its URL, every action lands in the log, and nothing was typed by hand. Recorded on a normal Chrome window with the extension paired.

Read the guides

Batch

Thirty tabs, one call

Open the pages in the background, then read them all at once. Each sub-op goes through the same policy gate, rate limit and error envelope as a direct call. Parallel ops must name their tab, so nothing is ever mis-routed.

Read the batch guide
two batch calls
{ "name": "batch", "arguments": { "ops": [
  { "tool": "tab_new", "args": { "url": "https://a.example/p" } },
  { "tool": "tab_new", "args": { "url": "https://b.example/p" } },
  { "tool": "tab_new", "args": { "url": "https://c.example/p" } }
]}}

{ "name": "batch", "arguments": { "ops": [
  { "tool": "read_as_markdown", "args": { "tabId": "<a>" } },
  { "tool": "read_as_markdown", "args": { "tabId": "<b>" } },
  { "tool": "read_as_markdown", "args": { "tabId": "<c>" } }
]}}

Setup

Three steps, then it stays paired

  1. 01

    Register the server

    One command in Claude Code, or a five-line JSON block in any other MCP host. npx fetches the package; nothing else to install.

  2. 02

    Add the extension

    Install it from the Chrome Web Store in one click, or load the plain folder the server drops in your home directory via chrome://extensions.

  3. 03

    It pairs itself

    The server writes a 0600 pairing file into that folder. The badge turns green. Your agent now has the tools.

MCP host (Claude Code / Desktop / Cursor)
    |  JSON-RPC over stdio
    v
npx @mehmoodqureshi/chrome-mcp        policy gate, rate limit, audit log
    |  localhost WebSocket, per-boot 256-bit token
    v
MV3 extension                            chrome.scripting / chrome.tabs
    |
    v
your Chrome, your sessions

Tools

40 tools, generated from the source

The reference is built from the same catalog the server advertises, so it cannot drift from what your agent sees.

Full reference

Security

Nothing is allowed until you allow it

The allowlist decides which pages may be read. Password values are always blanked. --redact scrubs JWTs, cloud keys and bearer tokens before the output cap, so a truncated read cannot leak what a full one would hide. The pairing token is 0600 on disk and the server fails closed if it is not.

Read the security model