Helm浏览器
通过MCP对AI编码助手进行浏览器控制。你真正的Chrome,而不是无头实例。
 
npx skills add jfikrat/helm-browser亮点
- 约57个工具,涵盖导航、阅读、交互、脚本编写、状态和多目标控制
- 用于调试器变异命令的具有每个选项卡序列化的持久调试器会话
- 语义定位器通过
browser_get_snapshot()和locator支持稳定元素瞄准 - 对iframe、弹出窗口和对话框的多目标支持
为什么是Helm?
大多数浏览器自动化工具都会启动一个单独的无头Chromium。Helm采用了一种不同的方法:它控制 您的实际Chrome 通过轻量级的扩展。
| Helm浏览器 | 无头(剧作家/木偶师) | |
|---|---|---|
| 浏览器 | 您的真实Chrome | 单独的Chromium实例 |
| 身份验证 | 已登录 | 每次都必须进行身份验证 |
| 扩展 | 您的扩展有效 | 没有扩展 |
| 机器人检测 | 未检测到 | 经常被阻止 |
| 二进制大小 | 0 MB(使用您的Chrome) | ~200 MB Chromium下载 |
| 协议 | MCP本机 | 自定义API |
支持的客户
- 克劳德代码 -Anthropic的CLI
- Codex CLI -OpenAI
- Gemini CLI 谷歌
- 帮助 -AI配对编程
- 任何兼容MCP的客户端
建筑
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ AI Client │────▶│ Helm Daemon │────▶│ Chrome Extension│
│ (Claude, etc.) │ WS │ (Port 9876) │ WS │ (Side Panel) │
└─────────────────┘ └─────────────────┘ └─────────────────┘- 扩展:带侧面板UI的Chrome扩展程序
- 守护进程:端口9876上的WebSocket协调器
- 服务器:MCP服务器公开浏览器工具
- 客户:用于AI助手的MCP客户端
快速开始
先决条件
- 铬或铬
1.安装
git clone https://github.com/jfikrat/helm-browser.git
cd helm-browser
./install.sh2.加载Chrome扩展程序
- 首选
chrome://extensions - 启用 开发人员模式
- 点击 装载时未包装 → 选择
extension/文件夹
install.sh 如果需要,安装Bun,运行 bun install 在 daemon/, server/,以及 client/,并将守护进程注册为用户服务(systemd 在Linux上, launchd 在macOS上)。重新运行是安全的。
要稍后删除服务和已安装的依赖项,请执行以下操作:
./uninstall.sh3.配置MCP
添加到您的MCP配置中(例如。, ~/.claude/claude.json):
{
"mcpServers": {
"helm": {
"command": "bun",
"args": ["run", "/path/to/helm-browser/client/index.ts"]
}
}
}工具
导航
| 工具 | 说明 |
|---|---|
browser_navigate(url) | 导航到URL |
browser_get_url() | 获取当前URL和标题 |
browser_get_tabs() | 列出所有打开的选项卡 |
browser_switch_tab(tabId) | 切换到选项卡 |
browser_new_tab(url?) | 打开新选项卡 |
browser_close_tab(tabId?) | 关闭选项卡 |
阅读
| 工具 | 说明 |
|---|---|
browser_screenshot(selector?) | 屏幕截图(整页或元素) |
browser_get_element_text(selector) | 获取元素的文本内容 |
browser_get_snapshot() | 使用稳定的引用快照交互式元素 |
browser_find_text(text, click?) | 在页面上查找文本,可选择单击它 |
browser_wait_for_function(expression, timeout?, interval?) | 轮询JS表达式直到为真 |
browser_get_cookies(url?, name?) | 获取Cookie |
交互
| 工具 | 说明 |
|---|---|
browser_click(selector) | 按CSS选择器单击 |
browser_right_click(selector) | 在图元上单击鼠标右键 |
browser_double_click(selector) | 双击元素 |
browser_click_at(x, y) | 点击坐标 |
browser_type(selector, text) | 在输入中键入 |
browser_paste(text, selector?) | 粘贴文本(用于长内容) |
browser_hover(selector) | 将鼠标悬停在元素上 |
browser_scroll(direction, amount?) | 滚动页面或元素 |
browser_press_key(key) | 按键盘键 |
browser_press_keys(keys) | 按下和弦键 |
browser_select(selector, value) | 选择下拉选项 |
browser_set_cookie(...) | 设置浏览器cookie |
browser_clear_cookies(...) | 清除URL的Cookie |
目标与调试
| 工具 | 说明 |
|---|---|
browser_list_targets() | 列出当前会话中的选项卡及其iframe |
browser_wait_for_popup(timeout?, tabId?) | 等待新标签或弹出窗口 |
browser_wait_for_dialog(timeout?, tabId?) | 等待警报/确认/提示对话框 |
browser_handle_dialog(accept?, promptText?, tabId?) | 接受或取消对话 |
browser_debug_status() | 检查调试器会话、观察程序和记录 |
高级
| 工具 | 说明 |
|---|---|
browser_execute(code) | 在页面中运行JavaScript |
browser_record(execute, duration?) | 将选项卡录制为视频 |
browser_status() | 检查分机连接 |
例子
Web剪贴
> Navigate to Hacker News, get the top 3 story titles
browser_navigate("https://news.ycombinator.com")
browser_get_element_text(".titleline > a")表单自动化
> Log into my dashboard
browser_navigate("https://app.example.com/login")
browser_type("[name='email']", "user@example.com")
browser_type("[name='password']", "secret")
browser_click("[type='submit']")多标签研究
> Open GitHub trending and compare top 2 repos
browser_navigate("https://github.com/trending")
browser_get_element_text("article.Box-row:first-child h2 a")
browser_click("article.Box-row:first-child h2 a")
browser_screenshot()语义定位
> Use stable refs instead of brittle selectors
browser_get_snapshot()
browser_click({ "ref": "e42" })
browser_type({ "label": "Email address" }, "user@example.com")会话隔离
每个MCP客户端都有自己的隔离浏览器窗口。侧面板显示活动会话,并允许手动选项卡布线。
发展
cd daemon && bun run --watch start # Daemon with hot reload
cd server && bun run --watch start # Server with hot reload
cd client && bun run --watch start # Client with hot reload许可证
麻省理工学院-见 许可证
