browser-bridge
Provides remote control of the Firefox browser, enabling navigation, tab management, element interaction, screenshots, and JavaScript execution through MCP.
Click on "Deploy 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., "@browser-bridgeOpen example.com and take a screenshot"
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.
browser-bridge
远程 Agent ↔ 本地浏览器桥:Chrome/Edge (MV3) 扩展 + MCP gateway。 你的 Agent 跑在远程机器上,经标准 MCP 操控你本地浏览器:导航、快照、点击输入、截图、执行脚本。
📖 文档站:https://jeffkit.github.io/browser-bridge/(安装 / 配置 / 中转部署 / 使用 / 安全 / FAQ 完整指南)
v0.3+ 能力(当前 0.4.0):远程 Agent 经标准 MCP 操控本地真实浏览器;多浏览器会话(browserId 路由,/mcp/<浏览器ID> 指定目标);公网 relay 模式(双方都在 NAT 后时中转,多 token 注册表 + MCP 强制 Bearer);Firefox 支持(与 Chromium 版同源构建)。
与 web-bridge 呼应成对:web-bridge 注入操控桌面应用 WebView;browser-bridge 操控真实浏览器。协议形状一致({id, method, params} 请求 / {id, ok, result|error} 应答),@s<gen>:e<N> 元素引用心智相同。
架构
本地机器(可在 NAT 后) 远程 agent 机器
┌─ Chrome/Edge (≥116) ─────────┐ ┌──────────────────────────┐
│ browser-bridge 扩展 │ │ Agent (recursive/claude- │
│ ├ service worker │ wss 出站 │ code/codex… 的 MCP 客户端)│
│ │ └ WS 长连接 ━━━━━━━━━━━│━━━━━━━━━━━━━━▶│ browser-bridge-gateway │
│ ├ content script(按需注入) │ │ ├ WS server(接扩展) │
│ └ popup / options │ │ └ MCP server │
└──────────────────────────────┘ │ ├ streamable HTTP /mcp│
│ └ stdio(同机模式) │
└──────────────────────────┘扩展只出站连接(浏览器扩展无法监听端口),本地无需开放任何入站端口。
唯一前提:本地浏览器能访问 agent 机器上的 gateway 端口(公网 IP / 端口转发 / Tailscale 皆可)。
Related MCP server: chrome-mcp
快速开始
组件跑在哪? 你的本地机器只装浏览器扩展、不跑任何服务——扩展只发出站连接。gateway 跑在 Agent 所在的远程机器上(下文所有
npx/node命令都在 Agent 机器执行);仅当双方都在 NAT 后时,才额外需要一台你的公网 VPS 跑 relay。
1. 起 gateway(在 Agent 机器上)
# npx(推荐);或 clone 源码后 node packages/gateway/dist/cli.js
npx browser-bridge-gateway@latest serve --token <你的token>
# 或用环境变量:BROWSER_BRIDGE_TOKEN=<token> npx browser-bridge-gateway@latest serve输出(日志在 stderr):
gateway 监听 ws://0.0.0.0:17833(/healthz、/mcp)
MCP(streamable HTTP) 端点:http://0.0.0.0:17833/mcp
扩展 options 里填:ws://<本机可达地址>:17833 + 上述 token2. 装扩展(本地浏览器)
方式 A:从 Releases 下载 browser-bridge-extension-chromium-v*.zip 解压 → chrome://extensions 开发者模式 → 「加载已解压的扩展程序」选解压目录(Firefox 下载 firefox 包后经 about:debugging 临时载入)。
方式 B:源码构建:
git clone git@github.com:jeffkit/browser-bridge.git && cd browser-bridge
pnpm install && pnpm build
# 产物在 packages/extension/dist-extension/(Chromium)与 dist-extension-firefox/(Firefox)打开扩展「选项」页,填:
Gateway 地址:
ws://<gateway 机器 IP>:17833(有 TLS 时用wss://)Pairing Token:与 gateway
--token一致
保存后扩展立即重连;popup 图标显示连接状态(绿色 = 已连接)。
3. 接入 Agent
远程 agent(streamable HTTP):
{
"mcpServers": {
"browser-bridge": {
"type": "http",
"url": "http://<gateway 机器>:17833/mcp"
}
}
}同机 agent(stdio,gateway 由 agent 拉起):
{
"mcpServers": {
"browser-bridge": {
"command": "npx",
"args": ["browser-bridge-gateway@latest", "mcp", "--token", "<token>"]
}
}
}MCP 工具面
工具分三档(--permission,默认最窄 read-only):read-only = status/tab_list/snapshot/screenshot/scroll;navigate-allowlist = 追加 navigate/tab_open/close/select/click/fill/type/press;full = 再追加 evaluate。
工具 | 说明 |
| 连接状态 / 版本 / 生效权限档 / 允许列表 / 导航拦截记录( |
| 标签页管理(默认只列/只动本会话创建或导航过的 tab) |
| 导航并等待( |
| 可访问性快照:缩进文本骨架 + |
| 页面交互(按 |
| 页面内执行 JS(需 |
| 可见区域截图(PNG / JPEG),返回图片内容 |
推荐流程:browser_snapshot → 读 @s<gen>:e<N> → browser_click/fill/...。引用带快照代次:新快照或页面跳转后旧引用一律 stale_ref(即使元素还在同序号上也不会静默错点),重新快照即可。
安全模型
token 鉴权:扩展 hello 握手携带,不匹配即断(WS close 4003)。
relay模式支持多浏览器绑定(token 形如<browserId>=<token>),且 MCP 每请求强制Authorization: Bearer,槽位与 Bearer 均按此绑定(含离线)。动作面权限档:
--permission read-only|navigate-allowlist|full(默认read-only,最窄)。档位不足返回permission_denied;非法取值直接启动失败,不静默回退。会话归属(owner):默认只能读写本会话创建/导航过的标签页,非 owner 的
tabId返回tab_not_owned,browser_tab_list只列 owner(附hiddenNonOwned计数);确需操作既有标签页用--allow-foreign-tabs。多浏览器会话:扩展以
browserId标识设备,同一 gateway/relay 可并存多台浏览器;MCP 经/mcp/<浏览器ID>绑定目标。同一槽位只有持同一 token 的连接才能顶替。传输加密:gateway 不做 TLS 终结。公网部署请前置 caddy/nginx 提供
wss://,或走 Tailscale 等加密网络;ws://仅限可信内网。URL 允许列表(可选):
--allow-url <regex>(可多次)既校验navigate/tab_open的入参,也下发给扩展做导航兜底——点链接/表单提交/JS 跳转越界会被回退并上报url_not_allowed(见browser_status.navBlocked)。缺省不限制;兜底仅作用于 gateway 驱动过的 tab、且仅连接期间生效。页面内容不可信:
browser_snapshot的text用<untrusted-page-content>界出且结果带untrusted: true;browser_evaluate结果同样带untrusted: true——页面里的「指令」不得当作 Agent 指令。权限:扩展申请
tabs/scripting/storage+<all_urls>(全操控与截图所需,导航兜底复用tabs),安装时浏览器会提示「读取和更改您在所有网站上的数据」。Firefox 版host_permissions为可选权限,需在 about:addons 手动授予。单浏览器会话:新扩展连接顶替旧连接;MCP 调用期间扩展断开会返回
browser_disconnected。两侧需同版本:协议 v3(
@s<gen>:e<N>代次引用)起,旧扩展连新版 gateway 会被 close4002拒绝。
验收清单(手工,扩展端)
默认档
read-only下browser_tab_open/browser_navigate/browser_click会被permission_denied拒绝——按下面步骤做手工验收时请显式开档:npx browser-bridge-gateway serve --token <t> --permission full --allow-foreign-tabs
加载
dist-extension→ options 配置地址 + token → popup 变绿。agent 侧
browser_status→connected: true,并显示当前permission档。browser_tab_open新开https://example.com→ 本地浏览器出现新标签页。browser_navigate到带图页面 →browser_snapshot输出含@s<gen>:e<N>的文本骨架(外层被<untrusted-page-content>包裹)。browser_click点击某@s<gen>:e<N>→ 页面响应。再拍一次快照后用旧 ref 点击 → 报stale_ref。browser_screenshot→ agent 收到图片。断开网络 → popup 变灰 → 恢复网络 → 自动重连变绿。
错误 token → 扩展 30s 慢退避;改正后保存 → 立即重连成功。
反向验收:默认档启动(不加
--permission)→browser_evaluate返回permission_denied;--permission navigate-allowlist --allow-url '^https://example\.com/'下在 example.com 页面点站外链接 → 页面被回退,browser_status.navBlocked出现记录。
开发
pnpm install
pnpm build # protocol(tsc) → gateway(tsc) → extension(esbuild)
pnpm test # gateway 46 项单测/集成测(7 个文件,先 build)
pnpm typecheck # 三包类型检查
node scripts/smoke.mjs # 端到端冒烟:gateway serve + 假扩展 + MCP HTTP 全链路
pnpm --filter @browser-bridge/docs dev # 文档站本地预览(localhost:5173)文档站部署:push 到 main 且改动 docs/** 时,deploy-docs workflow 自动构建并发到 GitHub Pages。
需要 Chrome ≥ 116(依赖 WS 活动重置 service worker idle timer 的保活语义)。
仓库结构
路径 | 说明 |
| 线协议:消息、方法常量、错误码、参数/结果类型 |
|
|
| 浏览器扩展:service worker / content script / popup / options(browser.* 适配层同源构建 Chromium + Firefox) |
| ZCode/AI Skill:教 Agent 用 |
| 端到端冒烟脚本(含双浏览器路由验证) |
详见 ARCHITECTURE.md(仓内设计)与 AGENTS.md(AI 协作导航)。
This server cannot be deployed
Maintenance
Related MCP Connectors
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
Stealth web browser for agents: search, fetch, click, download and type in persistent MCP sessions.
Browserless MCP — wraps the Browserless headless-Chromium REST API (browserless.io)
- TabfleetOAuthcom.tabfleet
Launch, inspect, control, and share isolated cloud browsers for your agents.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables MCP clients to control a real local browser window for web automation tasks such as clicking, typing, scrolling, and taking screenshots.16 npm-
- FlicenseNot gradedqualityDmaintenanceDrive your real, signed-in Chrome browser from any MCP client, enabling browser automation such as navigation, clicking, typing, and screenshots through standard MCP tools.1-
- AlicenseNot gradedqualityAmaintenanceEnables local opencode agents to control a live Chrome browser via MCP tools, including tab management, JavaScript execution, clicking, form filling, page reading, screenshots, and console log retrieval.MIT
- AlicenseBqualityAmaintenanceEnables MCP agents to drive an already signed-in Chrome or Edge browser through a local extension bridge, controlling existing tabs and opening task-related HTTP(S) tabs without remote debugging or profile copying.23MIT