chrome-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@chrome-mcpGo to Hacker News and show me the top 3 stories"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
chrome-mcp
让任何 MCP 客户端驱动你真实的、已登录的 Chrome。在官方 Claude-in-Chrome 集成不可用的环境下,用标准 MCP 提供同等的浏览器自动化能力。
Drive your real, signed-in Chrome from any MCP client. Provides browser automation over standard MCP where the official Claude-in-Chrome integration is unavailable.
MCP client A ─┐
MCP client B ─┼─ HTTP MCP (http://127.0.0.1:8770/mcp) ─▶ RESIDENT chrome-mcp server ─┐
MCP client C ─┘ │
hosts WS bridge (ws://:8765/bridge) │
┌─────────────────────────────────────────────────────────────────────────────────────────┘
▼
Chrome extension (MV3) ──chrome.debugger (CDP)──▶ your real, signed-in Chromechrome-mcp (中文)
从任何会说 MCP 的客户端(Claude Code、Cursor 等)驱动你真实的、已登录的 Chrome。
在某些环境下,官方的 Claude-in-Chrome 集成可能不可用;此时 chrome-mcp 用标准 MCP 的方式提供同类的浏览器自动化能力——它只是一个普通的自定义 MCP server。
一个常驻 server,服务多个会话。 server 作为独立守护进程运行,通过 HTTP 同时服务每一个 MCP 会话,同时只维持一条到扩展的 WebSocket bridge。于是多个会话共享同一个浏览器——不会出现每个会话各起一个进程、争抢 bridge 端口的问题(这是 stdio 型 MCP server 的坑)。
因为它驱动的是你真实的 Chrome 配置文件,所有已登录的站点(Gmail、小红书、内部看板)都直接可用——无需重新登录,也不用一次性的临时配置文件。
工具
工具 | 作用 |
| 扩展是否已连接? |
| 打开一个 URL |
| 按 CSS selector 或 x/y 坐标点击 |
| 输入文本(可选地回车提交) |
| 读取页面文本或 HTML(文本上限 5 万字符,超出时带 |
| PNG 截图(以 MCP image 返回) |
| 执行一段 JS 表达式并返回其值 |
| 在 Claude Code 标签组里 list / open / close / select 标签页 |
每个驱动页面的工具还接受一个可选的 tab 标签——见并行会话与子代理。
Related MCP server: cdp-bridge
并行会话与子代理
每个受控标签页都带有一个 key,使并发的调用方不会互相覆盖对方的页面:
不同的 Claude Code 会话会自动隔离——每条 MCP 连接拿到自己的标签页,key 来自传输层的
mcp-session-id。同一个会话里的并行子代理共享同一条 MCP 连接,因此不会自动隔离——不加处理的话它们会同时驱动同一个标签页。给每个子代理传一个不同的
tab标签,让它们各自拥有独立的标签页:Agent A → navigate(url=…, tab="a") Agent B → navigate(url=…, tab="b") # 独立标签页,并发运行显式的
tab会覆盖按连接派生的 key;不传则保持默认(按连接)的行为。扩展为每个标签页持有独立的chrome.debugger连接,因此多个标签页可以同时运行而不会相互抢占。注意:每个带标签的标签页都在它自己的 "Claude Code" 标签组里,所以
tabs action=list只会显示当前这个标签的页面,而不是所有会话的页面。
安装
1. 安装依赖
cd ~/codes/chrome-mcp
uv sync2. 启动常驻 server
./run-server.sh # HTTP MCP 在 :8770,WS bridge 在 :8765(幂等)让它一直运行(这是共享的守护进程)。日志:/tmp/chrome-mcp-server.log。
或者自动启动——用 Claude Code 的 SessionStart hook,这样每次开会话时它都已经在跑。ensure-daemon.sh 是幂等的,并以**脱离会话(detached)**的方式启动守护进程(它会比启动它的那个会话活得更久):
// .claude/settings.json
{ "hooks": { "SessionStart": [{ "hooks": [
{ "type": "command", "command": "./ensure-daemon.sh" }
] }] } }3. 在客户端里注册
Claude Code(user 作用域,HTTP 传输,在 Bedrock 下可用):
claude mcp add --transport http --scope user chrome-mcp http://127.0.0.1:8770/mcp验证:claude mcp list 应显示 chrome-mcp … ✔ Connected。
4. 加载 Chrome 扩展
打开
chrome://extensions,启用开发者模式。加载已解压的扩展程序 → 选择
~/codes/chrome-mcp/extension/。点击 Chrome MCP 工具栏图标 → Connect(圆点变绿)。
第一次浏览器操作会弹出 Chrome 的"已开始调试此浏览器"横幅——这是正常的,留着别关。
5. 使用
在 Claude Code 里(Bedrock 认证没问题):
打开 https://news.ycombinator.com,告诉我前 3 条新闻标题。Claude 会调用 mcp__chrome-mcp__navigate / read_page,在你真实的 Chrome 里、一个专用的蓝色 Claude Code 标签组中执行操作。
配置(环境变量)
变量 | 默认值 | 用途 |
|
| bridge 绑定的 host |
|
| bridge 端口(若修改,需同步更新 |
|
| bridge 的 WS 路径 |
说明与限制
同一时刻只有一条连接。 扩展只维持一条 WS 链接(新连接获胜)。不要同时跑两个指向同一扩展的 MCP server。
安全。 扩展拥有很大的权限,并在已登录站点上以你的身份操作。bridge 只监听 loopback。请审视你让它做的事情;页面有可能尝试提示词注入(prompt injection)。
MV3 worker 挂起。 重连由
chrome.alarms保活(~24s)驱动,能在 service worker 被挂起后存活——无需手动重连。改完扩展需要重新加载。 Chrome 不会热重载 service worker,重新加载时其内存中的标签映射也会被清空。改完
extension/background.js后,到chrome://extensions点扩展上的 ↻。与 Anthropic 无关联,是独立项目。
chrome-mcp (English)
Drive your real, signed-in Chrome from any MCP client — Claude Code, Cursor, or anything that speaks MCP. In environments where the official Claude-in-Chrome integration is unavailable, chrome-mcp provides equivalent browser automation over standard MCP — it's just a plain custom MCP server.
One resident server, many sessions. The server runs as a standalone daemon and serves every MCP session over HTTP, while holding a single WebSocket bridge to the extension. So multiple sessions share one browser — no per-session process racing for the bridge port (the trap with stdio MCP servers).
Because it drives your actual Chrome profile, logged-in sites (Gmail, Xiaohongshu, internal dashboards) just work — no re-auth, no throwaway profile.
Tools
Tool | Action |
| Is the extension connected? |
| Open a URL |
| Click by CSS selector or x/y |
| Type text (optionally submit) |
| Read page text or HTML (text capped at 50k chars, with a |
| PNG screenshot (returned as an MCP image) |
| Run a JS expression, return its value |
| list / open / close / select tabs in the Claude Code group |
Every page-driving tool also takes an optional tab label — see Parallel sessions & subagents.
Parallel sessions & subagents
Each controlled tab is keyed so concurrent callers don't clobber each other's page:
Separate Claude Code sessions are isolated automatically — each MCP connection gets its own tab, derived from the transport's
mcp-session-id.Parallel subagents inside one session share a single MCP connection, so they are not isolated automatically — without help they'd all drive the same tab. Pass a distinct
tablabel per subagent to give each its own tab:Agent A → navigate(url=…, tab="a") Agent B → navigate(url=…, tab="b") # independent tab, runs concurrentlyAn explicit
taboverrides the per-connection key. Omit it for the default (per-connection) behavior. The extension holds an independentchrome.debuggerattachment per tab, so many tabs run at once without thrashing.Note: each labelled tab lives in its own "Claude Code" tab group, so
tabs action=listshows only the calling label's tab — not every session's.
Setup
1. Install deps
cd ~/codes/chrome-mcp
uv sync2. Start the resident server
./run-server.sh # HTTP MCP on :8770, WS bridge on :8765 (idempotent)Leave it running (it's the shared daemon). Logs: /tmp/chrome-mcp-server.log.
Or auto-start it from a Claude Code SessionStart hook so it's always up when you open a session. ensure-daemon.sh is idempotent and launches the daemon detached (it outlives the session that started it):
// .claude/settings.json
{ "hooks": { "SessionStart": [{ "hooks": [
{ "type": "command", "command": "./ensure-daemon.sh" }
] }] } }3. Register with your client
Claude Code (user scope, HTTP transport, works under Bedrock):
claude mcp add --transport http --scope user chrome-mcp http://127.0.0.1:8770/mcpVerify: claude mcp list should show chrome-mcp … ✔ Connected.
4. Load the Chrome extension
Open
chrome://extensions, enable Developer mode.Load unpacked → select
~/codes/chrome-mcp/extension/.Click the Chrome MCP toolbar icon → Connect (dot turns green).
The first browser action shows Chrome's "started debugging this browser" banner — that's expected; leave it.
5. Use it
In Claude Code (Bedrock auth is fine):
Open https://news.ycombinator.com and tell me the top 3 story titles.Claude will call mcp__chrome-mcp__navigate / read_page and act inside your real Chrome, in a dedicated blue Claude Code tab group.
Config (env vars)
Var | Default | Purpose |
|
| bridge bind host |
|
| bridge port (also update |
|
| bridge WS path |
Notes & limits
One connection at a time. The extension holds a single WS link (newest wins). Don't run two MCP servers pointing at the same extension.
Security. The extension has broad permissions and acts as you on logged-in sites. The bridge listens on loopback only. Review what you ask it to do; pages can attempt prompt injection.
MV3 worker suspension. Reconnect is driven by a
chrome.alarmskeepalive (~24s), which survives service-worker suspension — no manual reconnect needed.Editing the extension needs a reload. Chrome does not hot-reload the service worker, and its in-memory tab map is wiped on reload. After changing
extension/background.js, click ↻ on the extension atchrome://extensions.Not affiliated with Anthropic. Independent project.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/dawei008/chrome-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server