camofox-浏览器 MCP 服务器
一个独立的 示范背景协议 服务器将相机-浏览器暴露于任何MCP相容的主机——克洛德码(Claude Code),Cursor等,而不需要OpenClaw.
它映射出现有的 OpenClaw 插件 1:1 (中文(简体) ):相同的11个工具名,相同的JSON-Schema参数,以及相同的REST路由. 无论是代理通过OpenClaw还是MCP到达相模克,行为都是一样的.
MCP服务器的初始实施由下列因素促成: @epicagas (西班牙语)。 。 。 .
建筑
MCP服务器是Camofox REST服务器上的一个瘦小的stdio客户端. 两块:
- REST 服务器 (单位:千美元)
server.js)——发射Camoufox,曝光HTTP API上:9377运行 一次它会保持上升. - MCP 服务器 (单位:千美元)
mcp/server.mjs,暴露为camofox-browser-mcpbin)——将MCP工具调用翻译为REST调用. 克劳德代码产出一个 每届会议。 。 。 .
注册 MCP 服务器 没有 需要进入相机浏览器的检查。 下面的例子从任何目录中都可以找到.
mcp/ 也是一个 可独立安装的软件包 (单位:千美元)@askjo/camofox-browser-mcp本身 package.json) (中文(简体) ). 只能靠什么 @modelcontextprotocol/sdk 没有 camoufox-js, (中文(简体) ), playwright-core, (中文(简体) ), express,或核心服务器所拉入的~300MB浏览器二进制下载. 工具名、 JSON-Schema 参数、 REST 路由和响应形状定义 mcp/lib/tool-contracts.mjs单人包里装的 OpenClaw 插件 (PDF)plugin.ts)导入同一种犬形模块,因此两个主机无法漂移. 见 备选案文D 下方仅需要MCP适配器(例如指向) CAMOFOX_BASE_URL 在 REST 服务器运行到其他地方.
1. 启动REST服务器
克隆回波并启动服务器( 第一次运行时一次性二进制下载) :
git clone https://github.com/jo-inc/camofox-browser && cd camofox-browser
npm install # downloads Camoufox (~300MB) on first run
npm start # → http://localhost:9377
这仍然在背景中运行。 之后就不用你来管了.
2. 安装 camofox-browser-mcp 选项
MCP服务器对每个主机都是一样的——不同之处只是您粘贴的配置文件. 首先,让 camofox-browser-mcp 在您的路径上可用 bin 。 选一:
# Option A — npm link (if you have the source checkout; picks up local edits)
cd camofox-browser && npm link
# Option B — global install (no source checkout needed)
npm install -g @askjo/camofox-browser
# Option C — npx (no install; runs the published standalone adapter)
# Use this wherever a command is expected below.
npx -y @askjo/camofox-browser-mcp
# Option D — MCP adapter only, no core server deps (lightest footprint)
# Skips camoufox-js/playwright-core/express and the browser binary download —
# use this if a camofox-browser REST server is already running (locally or
# remotely) and you only need the stdio adapter.
git clone https://github.com/jo-inc/camofox-browser && cd camofox-browser/mcp
npm install # installs only @modelcontextprotocol/sdk (~24MB, no postinstall)
npm link # camofox-browser-mcp now resolves from any directory
从任何目录校验本解析 :
which camofox-browser-mcp # → .../bin/camofox-browser-mcp
3. 与东道国登记
所有5个主机都说标准MCP,所以都运行相同 camofox-browser-mcp 宾. 在下面选择您的主机配置片段 .
克劳德代码
# CLI (user scope = available in every project)
claude mcp add camofox-browser -s user -- camofox-browser-mcp
或进入 ~/.claude.json (用户)/ .mcp.json (项目,入帐):
{
"mcpServers": {
"camofox-browser": {
"command": "camofox-browser-mcp"
}
}
}
代码 CLI
~/.codex/config.toml (用户)或 .codex/config.toml (项目,只信任的迪尔斯):
[mcp_servers.camofox-browser]
command = "camofox-browser-mcp"
env = { CAMOFOX_BASE_URL = "http://localhost:9377" }
反重力/ 阳性
全球 ~/.gemini/config/mcp_config.json 或工作空间 .agents/mcp_config.json数字 :
{
"mcpServers": {
"camofox-browser": {
"command": "camofox-browser-mcp"
}
}
}
光标
全球 ~/.cursor/mcp.json 或项目 .cursor/mcp.json (填写如下):
{
"mcpServers": {
"camofox-browser": {
"command": "camofox-browser-mcp"
}
}
}
(或取自UI:设置 光标设置 MCP 添加新MCP服务器
打开代码
opencode.json 项目根,或全局 ~/.config/opencode/opencode.json数字 :
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"camofox-browser": {
"type": "local",
"command": ["camofox-browser-mcp"]
}
}
}
常见: env vars 从源回落
如果您需要 cookie 导入或非默认的 REST URL, 请添加 env 。 Claude 代码示例:
claude mcp add camofox-browser -s user \
--env CAMOFOX_BASE_URL=http://localhost:9377 \
--env CAMOFOX_API_KEY=<key> \
-- camofox-browser-mcp
对于其他主机,请在 env 编号 : environment 该主机的片段.
从源回落 (除非你进入了出票环节 且没有链接到本站):
# Replace `camofox-browser-mcp` with `node /absolute/path/to/mcp/server.mjs`
claude mcp add camofox-browser -- node /Users/you/src/camofox-browser/mcp/server.mjs
总是喜欢
camofox-browser-mcpbin(以上选项A/B/C/D)。 这个node ./mcp/server.mjs窗体为 路径依赖 ——取出外的相对路径中断.
4. 核实
| 东道主 | 如何核实 |
|---|---|
| 克劳德代码 | /mcp —— 说 camofox-browser 显示已连接 |
| 代码 CLI | codex 然后检查 MCP 服务器列表 |
| 不错 | /mcp 覆盖在 agy 国 际 |
| 光标 | 设置 — MCP — 服务器显示绿色 |
| 打开代码 | opencode mcp list |
您应该看到11个工具 : camofox_create_tab, (中文(简体) ), camofox_snapshot, (中文(简体) ), camofox_click, (中文(简体) ), camofox_type, (中文(简体) ), camofox_navigate, (中文(简体) ), camofox_scroll, (中文(简体) ), camofox_screenshot, (中文(简体) ), camofox_evaluate, (中文(简体) ), camofox_list_tabs, (中文(简体) ), camofox_close_tab, (中文(简体) ), camofox_import_cookies。 。 。 .
工具
| 工具 | 目的 |
|---|---|
camofox_create_tab | 打开 URL = 返回 tabId |
camofox_snapshot | 无障碍快照 + 元素 refs (e1, (中文(简体) ), e2,.) + 截图 |
camofox_navigate | 转到 URL 或者说 使用搜索宏( e)@google_search, (中文(简体) ), @reddit_search, (...) (中文(简体) ) |
camofox_click | 按元素 ref 点击 (e1)或 CSS 选择器 |
camofox_type | 将文本输入参考/选择器, 可选 pressEnter |
camofox_scroll | 按像素滚动(在懒惰的页面上不可靠——偏好) camofox_evaluate(中文(简体) ) |
camofox_screenshot | 独立截图 |
camofox_evaluate | 在页面背景中运行JS——提取数据,调用页面API,滚动通过 window.scrollTo |
camofox_list_tabs | 在此会话中列出打开的标签 |
camofox_close_tab | 关闭标签 |
camofox_import_cookies | 导入 Netscape cookie 文件( 需要) CAMOFOX_API_KEY(中文(简体) ) |
工作流程
每一次互动都遵循同样的形状—— 动作前的快照数字 :
create_tab({ url })→tabIdsnapshot({ tabId })− 元素参考(e1, (中文(简体) ),e2, (...) (中文(简体) )click编号 :type使用这些参考文献snapshot再次读取新状态close_tab完成时
元素 refs 清晰且首选于 CSS 选择器 — 一个匹配多个元素返回的选取器 422 strict mode violation,在此情况下重拍并点击 ref.
环境变量
| 瓦尔 | 默认 | 目的 |
|---|---|---|
CAMOFOX_BASE_URL | http://localhost:9377 | REST 服务器 URL |
CAMOFOX_USER_ID | mcp-<random> | 会话隔离( 一个 MCP 服务器 = 一个相片会话) |
CAMOFOX_SESSION_KEY | default | 用户内的标签分区 |
CAMOFOX_ACCESS_KEY | (未设定) | 全球无记名符号 给 REST 服务器( 超级密钥) 配角 。 如果设定,转发为 Authorization: Bearer <key> 打开 每个 自动调用工具 —— 必须匹配 REST 服务器本身 CAMOFOX_ACCESS_KEY。如果没有此选项, 全球认证的 REST 服务器将拒绝除 cookie 导入以外的所有工具调用 . |
CAMOFOX_API_KEY | (未设定) | 自选的秘方小饼干导入. 可选择本地主机; 远程/ 生产时需要, 必须匹配 REST 服务器的 CAMOFOX_API_KEY。只影响 camofox_import_cookies。 。 。 . |
解决问题
503 session_expired编号 :tab create timed out—— REST 服务器的浏览器会话已死(往往是在先前的失败的呼叫使其不稳定后). 重新开始npm start。 。 。 .camofox_scroll返回时{ok:true}但页面不动 — 期望在懒惰负载/ 虚拟滚动页面上; 服务器的mouse.wheel那边没有 使用camofox_evaluate与window.scrollTo编号 :scrollBy。 。 。 .422 strict mode violation ... resolved to N elements打开click—— CSS 选择器匹配多个元素. 重拍并点击元素 ref.403 Forbidden打开camofox_import_cookies—— REST 服务器和 MCP 服务器之间的密钥不匹配, 或点击远程服务器而不CAMOFOX_API_KEY。 。 。 .401编号 :403每个工具调用, 不仅仅是 cookie 导入 ——REST服务器已经CAMOFOX_ACCESS_KEY设置。 设置相同CAMOFOX_ACCESS_KEY在 MCP 服务器的嵌入( 见上文表格) 中—— 它自动转发为Authorization: Bearer一旦设定.
测试(开发者)
两层,涵盖不同的东西:
# 1. `test:mcp` installs the standalone adapter's locked dependencies, then
# runs the in-repository and packed-tarball handshake tests. Neither needs
# a REST server.
npm run test:mcp
# 2. Mock-HTTP contract tests — verifies the actual REST traffic each tool
# produces: routes, methods, request bodies, CAMOFOX_ACCESS_KEY/CAMOFOX_API_KEY
# auth headers, cookie parsing (Netscape file → `{ cookies }` body, never a
# path), screenshot decoding, and error handling. Mocked REST server — no
# live camofox-browser process needed. This is what makes the "OpenClaw and
# MCP send identical requests" claim verifiable, not just asserted.
NODE_OPTIONS='--experimental-vm-modules' npx jest tests/unit/mcp-contracts.test.js
装入的tarball 检查安装生成的 @askjo/camofox-browser-mcp 握手前在空目录中放入焦油. 它捕捉到的进口量在独立包件之外.