agent-browser-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., "@agent-browser-mcp Go to news.ycombinator.com and click the top story"
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.
agent-browser-mcp
给 AI agent 用的可靠浏览器控制 MCP server。针对现有浏览器工具的两大痛点专门设计:
点不了网页内容 → 语义快照 + ref 编号定位 + 多级兜底(见下文"点击是怎么解决的")
频繁断联出错 → 常驻进程 + 崩溃懒重启 + 会话恢复(见下文"断联是怎么解决的")
技术栈:Node + TypeScript + playwright-core(免下载浏览器,直接驱动系统已装的 Chrome/Edge)。
接入 MCP 客户端
server 走 stdio,任何支持 stdio MCP 的客户端都能接。先 npm install && npm run build,再把 dist/index.js 的绝对路径填进客户端配置(GUI 应用常不继承 shell 的工作目录,相对路径容易解析失败)。
通用配置
{
"mcpServers": {
"agent-browser-mcp": {
"command": "node",
"args": ["/absolute/path/to/agent-browser-mcp/dist/index.js"]
}
}
}若客户端启动时拿不到 shell 的 PATH,把 command 换成 node 可执行文件的完整路径,如 /usr/local/bin/node 或 C:\\Program Files\\nodejs\\node.exe。
Claude Desktop
配置文件位置:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"agent-browser-mcp": {
"command": "node",
"args": ["C:\\path\\to\\agent-browser-mcp\\dist\\index.js"]
}
}
}写完后完全退出并重启客户端(macOS 需从菜单栏退出,只关窗口不会重载配置)。Claude Code / Cline / Cursor / OpenClaw 等同样用这份 mcpServers 结构,只是配置文件位置不同。
启动参数
需要调整浏览器行为时,直接往 args 追加命令行参数:
"args": ["/absolute/path/to/dist/index.js", "--headless", "--channels", "msedge"]完整参数见 node dist/index.js --help。更推荐把常用项固化到 ~/.browser-mcp/config.json(见下文「配置」),这样多个客户端共用一份配置。
Related MCP server: ecobrowser MCP server
构建
npm install
npm run build # 产物在 dist/
npm run smoke # 冒烟测试(40 项,会真实启动 Chrome)
npm run serve:fixtures # 本地测试页(手动调试用)工具集(14 个)
工具 | 说明 |
| 导航,自动附交互元素快照 |
| 语义快照; |
| 点击;点击后自动附新快照;失效 ref 自动重解析 |
| 输入(先清空); |
| 按键,如 |
| 下拉选择,value/label 自动两轮匹配 |
| 悬停(触发悬浮菜单) |
| 滚动页面或指定滚动容器 |
| 截屏,返回图片 + 落盘 |
| 逃生舱:页面内执行 JS |
| 等待:时长 / 文本出现 / 元素出现 / URL 变化 / 网络空闲 |
| 多标签管理:list / new / select / close |
| 健康状态、标签列表、重启次数、最近错误 |
| 关闭浏览器(profile 登录态保留) |
ref 的用法:快照里每个可交互元素带 [eN] 编号,browser_click({ ref: "e42" }) 直接引用。iframe 内元素拍平进同一棵树,编号同样可用。
点击是怎么解决的
语义快照:in-page DOM 遍历(无障碍角色 + 可访问名 + cursor:pointer 启发式),穿透 open shadow DOM,跨源 iframe 内容拍平进同一棵树;
ref → 定位配方:每个 ref 同时记录 css 路径(有 id 锚定 + nth-of-type,frame 内唯一)和 role+name 语义描述;
解析兜底链:cssPath → getByRole 精确 → getByRole 模糊 → getByText,任何一层命中都验证后使用;
绝不死路:ref 彻底失效时报错信息里直接给出行动建议(重新快照 / 先等待),不会让 agent 卡死。
断联是怎么解决的
进程模型:MCP server 本身就是常驻 daemon(stdio 客户端会长期持有),浏览器经 CDP pipe(非 websocket 端口)启动,无端口冲突;
懒重启:每次工具调用前健康检查(
browser.isConnected());浏览器被手动关闭/崩溃后,下一次调用自动重启并恢复所有标签页,结果中明确提示"旧 ref 已失效";孤儿清理:profile 被残留进程占用时,启动前按 profile 路径定向 taskkill,再重试;
悬挂护栏:所有 Playwright 调用套
withTimeout,浏览器僵死时调用能超时返回而不是永久卡住;全链路日志:
~/.browser-mcp/logs/server-YYYYMMDD.log(2MB 轮转,保留 3 份),browser_get_info可查最近错误与重启次数。
浏览器来源(双模式)
launch 模式(默认):启动专用 Chrome,profile 在
~/.browser-mcp/profile—— 登录态持久保存,重启不丢。首次用某网站需在此 profile 登录一次。connect 模式:接管已开调试端口的现有浏览器,退出时不杀它:
# 先手动带调试端口启动 Chrome
chrome.exe --remote-debugging-port=9222
# server 端
node dist/index.js --connect # 默认 http://127.0.0.1:9222
node dist/index.js --cdp-url http://127.0.0.1:9223配置
优先级:命令行参数 > 环境变量(BROWSER_MCP_*)> ~/.browser-mcp/config.json > 内置默认。
常用参数:--headless(无头)/ --profile <dir> / --channels chrome,msedge / --executable <path> / --viewport 1440x900 / --start-url <url> / --dialogs accept|dismiss(对话框自动处理策略,默认 accept)。
完整参数见 node dist/index.js --help。
目录结构
src/
index.ts 入口:stdio server、优雅退出
config.ts 配置解析(文件/环境变量/命令行)
browserManager.ts 浏览器生命周期:启动/健康检查/懒重启/会话恢复/弹窗对话框下载
session.ts 标签页登记与持久化(原子写)
snapshot.ts in-page DOM walker + ref 注册表 + frame 拼接 + 渲染
actions.ts ref 解析兜底链 + 各类动作实现
tools.ts 14 个 MCP 工具定义与接线
errors.ts 错误整形(结构化 code + 行动建议)
util.ts 日志(轮转)/超时护栏/截断
test/
fixtures/ 本地测试页(基础/shadow/跨源iframe/对话框/懒加载)
serve.mjs fixture 服务器
smoke.mjs 40 项冒烟测试(含杀进程恢复、server 重启恢复)
e2e-baidu.mjs 真实互联网端到端(百度搜索全流程)安全提示
专用 profile 存有登录态(Cookies),等同于你的浏览器身份,注意不要把
~/.browser-mcp/profile提交到任何仓库;工具会自动接受页面对话框(默认策略),agent 无法处理验证码/支付类强交互,这些仍需人工;
日志可能包含页面 URL(含查询参数),排查问题后注意清理。
二期 backlog
文件上传、下载管理增强、请求拦截、Cookie/存储管理、PDF 导出、CLI 前端。
许可证
Apache-2.0,见 LICENSE。
Available Tools
14 toolsbrowser_clickA
点击元素(优先用快照里的 ref)。自动等待可操作、自动重解析失效 ref、点击后自动附最新快照。特殊对话框会自动处理并上报。
Inputs: ref, text, button, selector, +3 more.
browser_closeA
关闭浏览器(launch 模式下整个浏览器退出,profile 登录态保留;connect 模式只断开连接)。下次工具调用会自动重启。
Inputs: no named parameters.
browser_evaluateA
逃生舱:在页面里执行 JS 并返回 JSON 可序列化结果。传函数字符串如 () => document.title 或 () => {...};带 ref 时在该元素上执行((el, ) => el.value)。
Inputs: js (required), ref.
browser_get_infoA
查询浏览器健康状态:模式、标签列表、重启次数、最近错误/对话框/下载。不会启动浏览器。
Inputs: no named parameters.
browser_hoverC
鼠标悬停到元素上(触发悬浮菜单/tooltip)。
Inputs: ref, selector, timeoutMs.
browser_press_keyC
按下键盘按键,如 Enter / Tab / ArrowDown / "Control+a"。带 ref 时先聚焦该元素。
Inputs: key (required), ref.
browser_screenshotA
截屏并保存到本地,返回图片(供多模态查看)。可整页、可视区或单元素(ref)。
Inputs: ref, filename, fullPage.
browser_scrollB
滚动页面或指定滚动容器(带 ref 时滚动该容器)。方向 + 像素量。
Inputs: direction (required), ref, amount.
browser_select_optionB
在下拉框(select)中选中选项。values 可为 value 或可见 label,自动两轮匹配。
Inputs: values (required), ref, selector, timeoutMs.
browser_snapshotB
获取当前页面语义快照:交互元素带 [eN] ref 编号(iframe 内容已拍平)。支持 rootRef(只看某元素子树)、selector、filter:"interactive" 只看交互元素。
Inputs: filter, rootRef, selector, maxElements.
browser_tabsB
多标签管理:list 列出 / new 新建 / select 切换(按 list 显示的 index 或 id)/ close 关闭。
Inputs: action (required), id, url, index.
browser_typeB
向输入框输入文本(先清空再输入)。submit:true 时回车提交。适用于 input/textarea/contenteditable。
Inputs: text (required), ref, clear, submit, +2 more.
browser_waitA
等待条件成立:timeMs 固定时长 / text 文本出现 / selector 元素出现 / url 跳转 / idle 网络空闲。可组合。
Inputs: url, idle, text, timeMs, +2 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 14 tools
Every tool targets a distinct action: navigate loads URLs, snapshot reads structure, wait blocks on conditions, and click/type/press_key/select_option/hover/scroll each map to a unique interaction primitive. The only mild overlap (navigate also returns a snapshot) is resolved by navigate requiring a URL, so an agent can always pick correctly. browser_evaluate is clearly labeled as an escape hatch rather than a duplicate of any other tool.
All 14 tools share a consistent `browser_` prefix and snake_case, with most following a verb or verb_noun form (navigate, click, press_key, select_option, get_info). Minor deviations exist: `browser_tabs` is a noun with a mode argument, and several actions are bare verbs without an object, but the set remains highly predictable.
14 tools is well-scoped for a browser automation server: one tool per core primitive (navigate, snapshot, wait, interact, screenshot, evaluate) plus tabs and lifecycle management. Nothing feels padded, and no obvious primitive is split into multiple redundant tools.
The surface covers the full browse-inspect-interact loop plus lifecycle, tabs, JS evaluation, and health diagnostics, which handles nearly all agent workflows. Gaps remain for history navigation (back/forward), file upload/download interaction, and drag-and-drop, though evaluate provides a viable workaround.
Maintenance
Related MCP Connectors
Web scraping, browser automation, screenshots and AI data extraction for AI agents via MCP.
Control a real browser from AI agents: navigate, click, type, screenshot, read the page.
Browz hosted MCP (free public beta): let an AI app drive your own Browz browser profiles from anywhere. Connect https://mcp.gobrowz.com/mcp and sign in with your Browz account (OAuth) or an agent token. Each call is relayed to the Browz app on your computer, which must be online with Remote control on and have a hardware security chip (Mac Secure Enclave or TPM 2.0). 17 tools: profiles, tabs, navigate, snapshot, act, wait, screenshot. Cookies, downloads and stored sign-ins stay on your computer.
Cloud browsers for AI agents: saved logins, residential IPs, live human takeover, 57 browser tools.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables browser automation through the MCP protocol, allowing AI agents to control a real browser using accessibility snapshots and natural language commands.-
- AlicenseAqualityCmaintenanceEnables AI agents to control a browser via MCP with structured perception, verified actions, and self-healing capabilities.1314 npm1MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to operate an isolated local Chromium browser through MCP, with semantic snapshots, ref-based actions, search, research, crawling, and CDP access.Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables browser automation through MCP with native Playwright operations, deterministic assertions, and natural-language grounded actions, structured extraction, and bounded agent workflows over live page elements.13Apache 2.0