Mmcp.market

chrome-mcp server

by Mehmoodqureshi·io.github.Mehmoodqureshi/chrome-mcp·v0.9.11

Drive your real Chrome over MCP: real logins and cookies, multi-tab automation, deny-all by default.

A85/100grade A
What users say
No reviews yet
Be the first
Safety scan
A85/100

full report

Adoption
Growing

6 stars639 downloads/wk

Reviews

Write one

Nobody has reviewed chrome-mcp yet.

If you have run it, two minutes of your experience saves the next person an afternoon.

chrome-mcp tools (40, 2 write)

write = sends, deletes, buys or posts

Read from the package source without running it. The installed server may list more.

  • auth_check

    Is the tab sitting on a sign-in wall? Reads the page (URL, title, password fields, sign-in controls) and returns { authRequired, confidence, signals }. Use it after a navigate, or whenever a step fails unexpectedly, to tell "the session expired" apart from "the agent got lost". Pass failOnAuthWall:true to get an [AUTH_REQUIRED] error instead of a verdict, so a harness can bucket the run as an auth

  • back

    Go back in history.

  • batchwrite action

    Run multiple tool calls in one request — parallel (default) or serial. Each op is { tool, args } and goes through the same policy gate, rate limit, and error handling as a direct call. In parallel mode, tab-scoped ops MUST pass an explicit tabId (the active-tab default is unsafe under concurrency). Use to drive several tabs at once (e.g. open tabs, then batch get_text across them). Cannot be neste

  • chrome_status

    Report backend/session status: paired browser profiles and how each was named, and flags for switched-off capabilities.

  • click

    Click an element. Target by selector, a snapshot ref, or role+name (e.g. role:"button", name:"Sign in") - the locator needs no snapshot first. trusted=true uses real OS-level input.

  • console_logs

    Console output and uncaught errors recorded on the page (requires --enable-observers). This is how you find out WHY a page misbehaved rather than only what it looks like afterwards. Pass sinceSeq to poll for what is new, clear:true to drain.

  • dialogs

    Native dialogs (alert/confirm/prompt/beforeunload) the page raised, and how they were answered (requires --enable-observers). With observers on, dialogs are intercepted rather than left to block the renderer - which is what otherwise turns a click that opens a confirm() into a mystery TIMEOUT. Set policy:'accept' to answer confirms with true.

  • download_file

    Download a file by URL or from a link element.

  • eval

    Evaluate JavaScript in the page (disabled in safe-mode).

  • extract_links

    Extract anchors from the page or a subtree. dedupe=true collapses links sharing an href (nav/footer noise); limit caps the count.

  • fill_form

    Fill multiple fields (keyed by selector) and optionally submit.

  • forward

    Go forward in history.

  • frames_list

    List the tab's frames (the top document plus every iframe the extension can reach), with each frame's id and URL. Use it when a selector that should match does not: the element is probably in one of these frames, and you can then pass frameId (or allFrames:true) to act inside it.

  • get_cookies

    Read cookies visible to the tab's URL (or a given url).

  • get_html

    Get HTML of the page or an element. Output is capped (see maxBytes) and cut at a tag boundary; narrow it with `selector` rather than raising the cap when you can. Password field values are always blanked.

  • get_text

    Get visible text of the page or an element.

  • hover

    Hover over an element.

  • navigate

    Navigate a tab to a URL, REPLACING its current page. Acts on the active tab unless tabId is given — to open a site without losing the current page, use `tab_new` instead.

  • network_log

    Requests the page made - fetch and XMLHttpRequest with method, URL, status and duration (requires --enable-observers). Set includeResources:true to also list scripts/images/styles from Resource Timing (those carry timing and size but no status). Does not include the document request or headers.

  • press

    Press a key (with optional modifiers).

  • print_pdf

    Render the page to PDF through Chrome's own print pipeline and save it to the task's results/ dir. Returns the path and size, not the bytes - a PDF is not something to spend context on.

  • profile_rename

    Rename an automatically named browser profile (e.g. "profile-2" -> "work"). The name sticks across restarts; its saved artifacts move with it.

  • profile_use

    Switch the active browser profile (identity). Subsequent downloads, results, screenshots, and the action log are stored under profiles/<name>/. Resets the active task to "default" unless you then call task_new.

  • read_as_markdown

    Read the page (or subtree) as readable markdown.

  • reload

    Reload the active (or given) tab.

  • screenshot

    Capture a screenshot (page or element). Default is JPEG (quality 70) at CSS-pixel size, which is several times smaller than PNG and reads fine. Pass format:"png" for lossless, quality 1-100 for JPEG, scale 2 for device pixels on a Retina display or 0.5 to shrink.

  • scroll

    Scroll the page or to an element.

  • select_option

    Select option(s) of a <select> by value or visible label.

  • snapshot

    Accessibility snapshot: interactive elements with refs to target by `ref` (more reliable than guessing CSS selectors). Pass diff:true to get only what changed since the last snapshot of this tab - far cheaper in a click/read loop. Password fields appear as secret:true with no value.

  • storage

    Read/write localStorage (or sessionStorage). op: get|set|remove|clear.

  • tab_close

    Close a tab by tabId.

  • tab_new

    Open a NEW tab (optionally at a URL) and focus it. Prefer this over `navigate` when the user says "open"/"go to" a site — `navigate` REPLACES the current tab. Pass active:false to open in the background (used by parallel batches).

  • tab_select

    Make a tab active by tabId.

  • tabs_list

    List open browser tabs.

  • task_new

    Start a new task (run) under the active profile. Creates profiles/<profile>/tasks/<name>/ with downloads/, results/, screenshots/ and makes it the active task so all captured artifacts land there.

  • task_status

    Report the active profile/task and the folder paths where this run's artifacts are stored.

  • tasks_list

    List every task across all profiles under the data dir, with sizes and download counts.

  • type

    Type text into an element (target by selector, ref, or role+name). trusted=true sends real keystrokes (works on React/Vue controlled inputs).

  • upload_filewrite action

    Set local file(s) on a file <input> (target by selector or ref) — uploads without the OS dialog. Requires --enable-uploads. `files` are absolute local paths.

  • wait_for

    Wait for a selector or text to appear/disappear.

Public scan report

scanner v0.1.9 · 2026-09-23 · same rubric, same numbers if you re-run it

1 medium
  • Code scan91 source files scanned20/25
  • Live reliabilityno gateway calls yet and no remote to proben/a
  • Tool poisoningtools not inspected (local package is not executed); not countedn/a
  • Auth qualitylocal package, no credentials required12/15
  • Maintenancelast push 0 days ago15/15
  • Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10

Findings (1)

  • mediumeval / new Function usedexec.eval
    dist/src/executor/cdp-executor.js: … }; }); } async eval(expression, opts) { return this.…
Overall 85/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

What the publisher says

From the chrome-mcp repository's README, as published. We do not edit it. Read it on GitHub

chrome-mcp

Let Claude use the Chrome you are already logged into. Not a fresh automated browser that greets every site as a stranger — your Chrome, with your sessions, your cookies, your 2FA already done. If you can see a page in your browser, your agent can read it, without logging in again and without pasting credentials anywhere.

Most browser MCP servers launch their own Chromium and hand your agent a signed-out window. chrome-mcp does the opposite: an MV3 extension dials into a localhost WebSocket server and drives the browser you already have open, through chrome.scripting/chrome.tabs. Works with Claude Code, Claude Desktop, and any other MCP host.

Distributed as an npx CLI (the MCP server) plus a load-unpacked extension.

This build is extension-only. It never launches or attaches a Chromium of

its own, so the extension is required, not optional — without it, no tool

can run. The CDP flags (--cdp-fallback, --no-cdp-fallback, --cdp-endpoint,

--prefer) are still accepted for back-compat but are ignored.

Full design: docs/BLUEPRINT.md — architecture, wire

protocol, the complete tool surface, the extension manifest, the security

model, and the phased build plan.

Quickstart

Up and running in one paste

Hand this to your AI agent (Claude Code, Cursor, Windsurf, anything MCP) and it installs the server, wires it into the client, and walks you through the two steps that must happen inside Chrome:

Set up chrome-mcp on this machine by fetching and following
https://raw.githubusercontent.com/Mehmoodqureshi/chrome-mcp/main/SETUP.md
exactly, step by step. Work autonomously and verify each step.

Prefer to read before you run an agent on your machine? SETUP.md is the exact file the agent follows. The manual steps are below.

1. Register the MCP server with your host.

Claude Code (terminal) — one command, no config file to find

claude mcp add chrome-mcp -s user -- \
  npx -y @mehmoodqureshi/chrome-mcp \
  --allow-domain example.com --enable-mutations --persist-token

Everything before -- belongs to Claude Code; everything after it is this server's command and flags. Keep the -- or --allow-domain gets read as a Claude Code option.

-s user registers it for every project on your machine. Use -s local (the default) for just the current project, or -s project to write a .mcp.json your team can commit.

Check it came up with claude mcp list. After upgrading the server, reconnect it with /mcp inside a session — no restart needed.

Claude Desktop and other MCP hosts — JSON config

{
  "mcpServers": {
    "chrome-mcp": {
      "command": "npx",
      "args": ["-y", "@mehmoodqureshi/chrome-mcp",
               "--allow-domain", "example.com", "--enable-mutations",
               "--persist-token"]
    }
  }
}

By default everything is deny-all (no domains, no eval, no mutations). Grant exactly what you need with --allow-domain (repeatable), --enable-mutations, --enable-downloads, --enable-uploads, --unsafe-enable-eval, or --unsafe-all-domains.

Shortened. The full README is on GitHub.

Nothing above is checked by us. What we check is on the safety report.

Install directly

Runs npx -y @mehmoodqureshi/chrome-mcp on your machine. Read the scan report first; the gateway never runs local packages.

claude mcp add chrome-mcp -- npx -y @mehmoodqureshi/chrome-mcp
Add to Cursor

chrome-mcp: common questions

Is chrome-mcp server safe?
Yes, by our scan: it is graded A (85/100). Read the chrome-mcp safety report
How do I install chrome-mcp?
It runs on your machine. Copy the Claude Code, Claude Desktop or Cursor config from the install section.
Does chrome-mcp need an API key?
Not as far as the registry entry and our scan can tell: no credentials are declared or required.
Is chrome-mcp maintained?
The last commit was in the last day (2026-09-23). The latest release is v0.9.11.
What can I use instead of chrome-mcp?
Servers from other publishers that do the same job: DOMShell MCP server, Smart Connections MCP server and Ridealong MCP server. Compare all chrome-mcp alternatives.

Alternatives to chrome-mcp

Same job from other publishers: the closest match first, then the best rated.

All chrome-mcp alternatives →
  • DOMShell
    Drive Chrome with filesystem commands (ls, cd, grep, click, type). One MCP tool, multi-agent.
    A
  • Smart Connections
    Local semantic search over Obsidian vaults via Smart Connections embeddings. Multi-vault, private.
    A
  • Ridealong
    Watch your AI drive a real Chrome live, point, approve, or take the wheel from your phone.
    A
  • Argent
    Drive iOS Simulators, Android emulators, TVs and Electron/web apps from your coding agent
    A
  • Mindwtr
    Task and project automation for local and self-hosted Mindwtr Cloud data; read-only by default.
    A

More from Mehmoodqureshi