使用说明
浏览器多合作平台
MCP服务器+Chrome扩展程序,使编码代理(Claude Code等)能够完全控制真正的Chrome浏览器。多个Claude Code会话可以同时共享同一浏览器。
建筑
Claude Code #1 → MCP Server #1 ──┐
Claude Code #2 → MCP Server #2 ──┤ (pipe clients)
Claude Code #3 → MCP Server #3 ──┘
│ Named pipe
▼
relay.js (pipe server, spawned by Chrome)
│ Chrome Native Messaging
▼
background.js (Chrome Extension Service Worker)
│ Chrome Extension APIs
▼
Web Pages
中继充当命名管道服务器。每个Claude Code会话都会生成自己的MCP服务器进程,该进程作为管道客户端连接到中继。中继器对请求进行多路复用,并通过匹配请求ID将响应路由回正确的MCP客户端。
先决条件
- Node.js 18+(必须在您的系统PATH中)
- 铬 或 边缘 浏览器
- 克劳德代码 (或任何兼容MCP的客户端)
设置
步骤1:安装依赖项并构建
cd /path/to/browser-mcp
npm install
npm run build
这将安装MCP SDK并将TypeScript服务器编译为 dist/mcp-server.js.
macOS注意事项: 做 不 将此项目保留在
~/Downloads/文件夹。macOS系统策略阻止Chrome启动位于~/Downloads/.先将项目转移到其他地方(例如。~/browser-mcp或~/Projects/browser-mcp).
步骤2:加载Chrome扩展程序
- 打开Chrome浏览器并导航到
chrome://extensions - 启用 开发者模式 使用右上角的切换按钮
- 点击 装载时未包装
- 选择
extension/此项目中的文件夹(例如。C:\Browser MCP\extension) - 扩展 “浏览器MCP桥” 将出现--复制 扩展ID 如下图所示
- 它看起来像:
abcdefghijklmnopqrstuvwxyz012345
- 它看起来像:
步骤3:注册本机消息主机
运行安装程序脚本,传递上一步中的扩展ID:
node install.js <your-extension-id>
例如:
node install.js abcdefghijklmnopqrstuvwxyz012345
这做了两件事:
- 将本机消息主机清单文件写入每个受支持浏览器的相应目录(macOS上的Chrome、Chrome Canary、Edge、Edge Canary;Windows/Linux上的Chrome和Edge)
- 在Windows上,在Windows注册表中注册清单路径
- 清除以前安装的任何过时的中继进程或套接字文件
重要提示: 如果重新安装扩展并获得新的扩展ID,请使用新ID重新运行此命令。
步骤4:重新加载扩展
运行安装程序后,返回 chrome://extensions 然后单击 重新加载 浏览器MCP桥扩展上的按钮(圆形箭头)。这允许扩展程序获取新注册的本机消息传递主机。
步骤5:将MCP服务器添加到Claude Code
选项A--CLI命令:
claude mcp add browser-mcp -- node "C:/Browser MCP/dist/mcp-server.js"
选项B——手动添加到Claude Code配置文件中(.claude.json 在您的项目根目录或全局 claude_desktop_config.json):
{
"mcpServers": {
"browser-mcp": {
"command": "node",
"args": ["C:/Browser MCP/dist/mcp-server.js"]
}
}
}
步骤6:验证它是否有效
启动一个新的Claude Code会话,并问它这样的问题:
“打开https://example.com在浏览器中获取页面文本”
您应该看到Chrome中打开了一个新选项卡,Claude返回了页面内容。
安装后
设置完成后,您通常 不需要做任何事情 开始新会话时:
| 场景 | 需要采取行动吗? |
|---|---|
| 打开新的Claude Code终端 | 否——新的MCP服务器自动连接到现有的中继 |
| 打开多个Claude Code终端 | 否——所有会话共享中继,可以使用浏览器 |
| 重新启动Chrome | 否--扩展程序和中继自动启动 |
| 重新启动计算机 | 否--Chrome在启动时加载扩展程序,Claude Code根据需要生成MCP服务器 |
| 重新安装/更新扩展 | 重新运行 node install.js <new-extension-id> 如果ID更改,则重新加载 |
可用工具
| 工具 | 说明 |
|---|---|
browser_open |
导航到一个URL。返回最终URL和页面标题。 |
browser_back |
返回上一页。 |
browser_scroll |
按像素量向上或向下滚动页面。 |
browser_state |
获取页面URL、标题、滚动位置和所有交互元素的索引列表。 每次导航后调用此功能。 |
browser_screenshot |
捕获可见页面的PNG屏幕截图。 |
browser_click |
按索引单击元素 browser_state. |
browser_type |
在当前聚焦的输入元素中键入文本。 |
browser_input |
按索引单击元素,然后在其中键入(组合单击+键入)。 |
browser_keys |
发送键盘按键(例如。 Enter, Tab, Ctrl+A). |
browser_select |
选择下拉列表 <select> 按索引和选项文本选择。 |
browser_eval |
在页面中执行JavaScript并返回结果。 |
browser_get_text |
获取元素的文本内容(按索引)或整个页面。 |
browser_get_html |
通过元素索引、CSS选择器或全文获取HTML内容。 |
browser_wait |
等待CSS选择器或文本出现在页面上。 |
browser_close |
关闭一个选项卡(或所有托管选项卡 all: true). |
browser_sessions |
列出由扩展管理的所有打开的选项卡。 |
使用模式
网络搜索
1. browser_open → navigate to https://www.bing.com
2. browser_state → find the search input element index
3. browser_input → type the search query into the input
4. browser_keys → press Enter to submit
5. browser_state → read the search result links and snippets
6. browser_open → navigate to a promising result URL
7. browser_get_text → extract the page content
阅读网页
1. browser_open → navigate to the URL
2. browser_get_text → extract readable text content
填写表格
1. browser_open → navigate to the form page
2. browser_state → get element indices for all form fields
3. browser_input → fill each field by its index
4. browser_click → click the submit button
运作原理
-
Chrome 扩展 (
extension/background.js)-使用扩展API控制Chrome选项卡的Manifest V3服务工作者。它在加载时连接到本地消息主机,并执行通过该通道接收到的浏览器命令(打开、单击、键入等)。 -
中继 (
relay/relay.js)——Chrome作为原生消息主机生成的一个小型Node.js进程。它创造了一个 命名管道服务器 (\\.\pipe\browser-mcp-bridge在Windows上)以及Chrome的本机消息传递协议(stdin/stdout上的长度前缀JSON)和命名管道(换行符分隔的JSON)之间的桥梁。它跟踪哪个管道客户端发送了每个请求,并正确路由响应。 -
MCP 服务器 (
dist/mcp-server.js)--Claude Code为每个会话生成的Node.js进程。它连接到继电器的命名管道作为 客户端,通过stdio上的MCP协议注册16个浏览器工具,并将MCP工具调用转换为中继请求。多个MCP服务器实例可以同时连接。 -
请求流程: MCP客户端→ MCP 服务器→ 命名管道→ 中继→ Chrome原生消息→ 扩展→ Chrome浏览器→ 响应返回相同的路径。
故障排除
“浏览器扩展未连接”
这意味着MCP服务器无法连接到中继的命名管道。可能的原因:
- 扩展未加载 首选
chrome://extensions并验证“浏览器MCP桥”是否已列出并启用 - 本地消息主机未注册 --重新运行
node install.js <extension-id> - 扩展需要重新加载 --点击扩展卡上的重新加载按钮
chrome://extensions - Chrome未运行 --中继仅在Chrome运行并加载扩展程序时存在
扩展负载,但工具不起作用
- 点击 “检查视图:服务人员” 在扩展卡上
chrome://extensions打开控制台 - 寻找
[BMCP-Bridge]记录消息以诊断连接问题
本机消息传递错误
- 验证Node.js是否在您的系统PATH中:运行
node --version从终端 - 在Windows上,验证注册表项是否存在:
HKCU\Software\Google\Chrome\NativeMessagingHosts\com.browser.mcp.relayHKCU\Software\Microsoft\Edge\NativeMessagingHosts\com.browser.mcp.relay
- 重新运行
node install.js <extension-id>重新生成清单和注册表项
macOS特定问题
- 连接后立即“本机主机已退出” --检查项目是否位于
~/Downloads/.MOSX系统策略阻止Chrome的本机消息传递子进程读取中的文件~/Downloads/.将项目移动到另一个位置(例如。~/browser-mcp)并重新运行node install.js. - 隔离属性 --从互联网下载的文件具有隔离扩展属性,可能会阻止执行。用以下方式删除它们:
xattr -dr com.apple.quarantine /path/to/browser-mcp/ - Chrome找不到Node.js --Chrome以最小的PATH启动本机消息主机(
/usr/bin:/bin:/usr/sbin:/sbin)这不包括自制啤酒(/opt/homebrew/bin)或nvm目录。安装程序会自动将绝对路径解析为node并将其写入relay.sh.如果您更改了Node.js安装,请重新运行node install.js. - 检查继电器日志 --继电器将诊断日志写入
/tmp/browser-mcp-relay.log(或$TMPDIR/browser-mcp-relay.log).检查此文件是否有错误:cat /tmp/browser-mcp-relay.log - 中继过程陈旧 --如果之前的中继进程仍在运行,则新的中继进程将与EADDRINUSE一起退出。重新
node install.js自动清理过时的进程,或手动:pkill -f relay.js rm -f /tmp/browser-mcp-bridge.sock
多个Claude Code会话
所有会话共享同一浏览器。一个会话打开的选项卡通过以下方式对其他会话可见 browser_sessions。如果两个会话试图同时与同一选项卡交互,结果可能无法预测——每个会话都应该使用自己的选项卡。
项目结构
Browser MCP/
├── src/
│ └── mcp-server.ts # MCP server (pipe client + tool definitions)
├── dist/
│ └── mcp-server.js # Compiled server (this is what Claude Code runs)
├── extension/
│ ├── manifest.json # Chrome MV3 extension manifest
│ ├── background.js # Service worker — executes browser commands
│ └── content.js # Fallback content extraction script
├── relay/
│ ├── relay.js # Native messaging relay (pipe server + request router)
│ ├── relay.bat # Windows wrapper for relay.js
│ └── relay.sh # macOS/Linux wrapper for relay.js (generated by install.js)
├── install.js # One-time setup: registers native messaging host
├── package.json
└── tsconfig.json