光标浏览器桥
从Claude Code(或任何MCP客户端)控制Cursor IDE的嵌入式浏览器。
这有什么作用
Cursor有一个内置的浏览器(简单浏览器),它自己的AI代理可以使用。该项目通过以下方式将浏览器连接到Claude Code 模型上下文协议,为Claude Code提供相同的浏览器自动化功能。
架构:
Claude Code ←stdio/MCP→ mcp-bridge.js ←HTTP→ VS Code extension ←commands→ cursor.browserView.* → Cursor's browser可用工具(18)
| 工具 | 说明 |
|---|---|
browser_navigate | 导航到URL,返回页面快照 |
browser_snapshot | 带有元素引用的页面的可访问性树 |
browser_click | 按ref单击元素 |
browser_type | 在元素中键入文本(附加) |
browser_fill | 清除并填充元素的值 |
browser_screenshot | 截图 |
browser_tabs | 列出打开的浏览器选项卡 |
browser_evaluate | 执行任意JavaScript |
browser_console_messages | 获取控制台日志输出 |
browser_network_requests | 获取网络请求日志 |
browser_press_key | 按键盘键 |
browser_hover | 将鼠标悬停在元素上 |
browser_resize | 调整浏览器视口大小 |
browser_lock / browser_unlock | 锁定/解锁浏览器以实现自动化 |
browser_navigate_back / browser_navigate_forward | 历史导航 |
browser_reload | 重新加载当前页面 |
安装
git clone https://github.com/VectorlyApp/cursor-browser-bridge.git
cd cursor-browser-bridge
chmod +x install.sh uninstall.sh
./install.sh然后:
- 重新加载光标窗口 —
Ctrl+Shift+P→ “开发人员:重新加载窗口” - 验证扩展名 --检查输出面板(
Ctrl+Shift+U) → 从下拉列表中选择“浏览器桥” - 重新启动Claude代码 --因此,它选择了新的MCP服务器
提示: 您需要重新加载光标窗口(Ctrl+Shift+P → “开发人员:重新加载窗口”),扩展文件随时更新。卸载
./uninstall.sh然后重新加载光标窗口(Ctrl+Shift+P → “开发人员:重新加载窗口”)。
运作原理
该项目有两个组成部分:
1.VS代码扩展(extension/)
在随机本地端口上启动HTTP服务器的工作区扩展 cursor.browserView.* 命令(Cursor用于控制嵌入式浏览器的内部API)作为HTTP端点。
该扩展在工作区主机(可以是远程SSH服务器)上运行。VS代码/光标透明地代理 cursor.browserView.* 命令发送到实际浏览器所在的UI主机。这是使整个事情发挥作用的关键见解。
端口被写入 /tmp/cursor-browser-bridge-port 因此MCP桥可以找到它。
2.MCP桥(mcp-bridge.js)
一个Node.js脚本,它使用MCP(通过stdio的JSON-RPC 2.0)并将工具调用转换为对扩展服务器的HTTP请求。Claude Code将此作为子流程启动。
需求
- 光标IDE (扩展名使用特定于游标的
cursor.browserView.*命令) - Node.js (适用于MCP电桥)
- 克劳德代码 (或任何兼容MCP的客户端)
故障排除
扩展未激活:
- 检查输出面板→ “浏览器桥”频道错误
- 确保在安装后重新加载了Cursor窗口
- 验证扩展是否存在:
ls ~/.cursor-server/extensions/local.cursor-browser-bridge-*
MCP网桥无法连接:
- 检查一下
/tmp/cursor-browser-bridge-port存在并包含端口号 - 尝试
curl http://127.0.0.1:$(cat /tmp/cursor-browser-bridge-port)/health--应该回来{"ok":true}
克劳德代码中未显示的工具:
- 运行后重新启动Claude代码
install.sh - 检查
claude mcp list验证服务器是否已注册
browser_fill 或 browser_click 不工作:
- 首先拍摄一个新的快照——当页面更改时,元素引用会过时
- 使用
browser_evaluate使用自定义JS作为复杂交互的可靠后备方案
