Skip to main content
Glama

chrome-mcp

English | 简体中文

A Model Context Protocol server for browser automation, powered by DrissionPage.

Lets MCP clients (Claude Desktop, Claude Code, Cursor, etc.) drive a real Chromium browser through a minimal 7-tool surface — all sharing one "current tab" pointer.

Why

  • Zero learning curve for agents. Facade tools (execute_js, run_cdp, navigate, capture) speak only universal knowledge — JavaScript, the CDP protocol, URLs. No niche-library syntax required for the 90% cases.

  • Full power underneath. run_drission_code is the complete-capability base: execute DrissionPage Python code in-process with page / browser / context (persistent dict) / switch_tab() / tabs() / relaunch() injected — loops, waits, multi-tab orchestration, anything one tool call can't express.

  • One pointer, always in sync. Switch tabs via DrissionPage code or Target.createTarget/Target.activateTarget CDP commands — every tool follows. (Call tools serially per session; the shared pointer is not concurrency-safe.)

  • Multi-instance safe. Per-process isolation (atomic port allocation via socket.bind + PID/UUID private user-data dirs) — spawn N servers, zero conflicts.

  • Self-documenting. get_manual returns a compact built-in cheat sheet (DrissionPage locator syntax, error-prone CDP recipes, capture workflow, launch options) — agents fetch it on demand, zero token cost otherwise.

Related MCP server: monkeysee

Installation

uv tool install chrome-mcp
# or
uvx chrome-mcp
# or
pip install chrome-mcp

Requires Python ≥ 3.10 and a local Chromium-based browser.

Usage

Add to your MCP client config (e.g. claude_desktop_config.json). Two equivalent forms:

{
  "mcpServers": {
    "chrome": {
      "command": "chrome-mcp"
    }
  }
}

Or run on the fly with uvx (no install needed):

{
  "mcpServers": {
    "chrome": {
      "command": "uvx",
      "args": ["chrome-mcp"]
    }
  }
}

A typical agent flow:

navigate("https://httpbin.org/get")                  → returns tab list
execute_js("return document.body.innerText")         → page data as JSON
capture(action="start", url_filter="api/")
... trigger requests ...
capture(action="get")                                → overview inline,
                                                       full bodies in $TMPDIR/chrome-mcp-captures/*.json

Tools

Tool

Description

navigate

Navigate in current tab, or open a new tab (new_tab) and switch the pointer to it. Returns the full tab list

execute_js

Run JavaScript in the current tab (must return the result). preset: "dom_tree" outputs a DOM structure tree without writing the template

run_cdp

Raw CDP passthrough to the current tab. Target.createTarget / activateTarget auto-switch the pointer — no attachToTarget needed

run_drission_code

Full-capability base: execute DrissionPage Python code with injected page/browser/context/switch_tab()/tabs()/relaunch()

capture

Network capture in one tool: action = start / get / stop. Overview returned inline; full data (with bodies) saved to $TMPDIR/chrome-mcp-captures/capture_*.json

get_manual

Return the built-in authoring manual (locator syntax, CDP recipes, capture workflow, launch options)

close_browser

Close the browser instance

Launch options

Customize browser startup via command-line args:

{
  "mcpServers": {
    "chrome": {
      "command": "chrome-mcp",
      "args": ["--headless", "--proxy", "http://127.0.0.1:7890", "--arg", "--lang=zh-CN"]
    }
  }
}

Arg

Description

--headless

Run browser headless

--proxy URL

Proxy server

--user-agent UA

Custom User-Agent

--user-data PATH

User data dir to reuse login state. ⚠️ Conflicts if your system Chrome is using the same profile

--browser-path PATH

Path to a specific browser binary

--incognito

Incognito mode

--no-imgs

Don't load images. ⚠️ May be ignored by recent Chrome versions — reliable alternative: run_cdp("Network.setBlockedURLs", {"urls": ["*.png", "*.jpg"]})

--arg ARG

Pass through any Chrome flag (repeatable)

Options can also be changed mid-session (destructive, restarts the browser) from inside run_drission_code:

return relaunch(headless=True, user_agent="Mozilla/5.0 ...")

Testing

8 scenario suites run against the real MCP stdio protocol (each spawns an independent server + headless browser — itself a multi-instance concurrency test):

uv run python tests/run_all.py            # full regression
uv run python tests/run_all.py --only smoke,c

Covers: data extraction (DOM tree/pagination/iframes), form interaction (DP actions + CDP input sequences), network capture (filters/timing traps/body fidelity), multi-tab pointer consistency, CDP capabilities (screenshots/emulation/cookies), lifecycle (relaunch/kill-recovery), and real-site scenarios (httpbin/TLS).

License

GPL-3.0-only

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables MCP clients to drive a real, logged-in Chrome browser for web automation tasks like navigation, clicking, typing, and screenshotting.
    10
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables browser automation over MCP using a real Chrome browser with existing profile, supporting real tabs, downloads, cookies, and RPA workflows.
    104
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables MCP clients to control a real local browser window for web automation tasks such as clicking, typing, scrolling, and taking screenshots.
    51
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/xiyiyiru/chrome-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server