CDP Bridge MCP Browser Control

CDP Bridge MCP 浏览器控制:通过浏览器插件远程控制真实浏览器。适用于已安装 CDP Bridge 插件的浏览器,可获取标签页、扫描页面、执行JS、截图、导航、读取Cookie等操作。当用户说要控制浏览器、操作真实浏览器、读取网页内容、执行浏览器操作时调用本skill。

Audits

Pending

Install

openclaw skills install cdp-bridge

CDP Bridge MCP 浏览器控制

前置条件: 浏览器已安装 CDP Bridge 插件,且 MCP 服务已启动。

快速判断

  • 用户说"控制浏览器"、"操作真实浏览器"、"读取网页" → 调用本 skill
  • 用户说"用CDP"、"连接浏览器插件" → 调用本 skill
  • 用户要操作已登录的真实浏览器会话 → 调用本 skill

架构原理

┌────────────────┐     ┌──────────────────────┐     ┌───────────────────┐
│   OpenClaw     │ ←── │  CDP Bridge MCP      │ ←── │  浏览器插件        │
│   (调用skill)  │ HTTP│  服务端              │ WS  │  (tmwd_cdp_bridge)│
│                │     │ 127.0.0.1:8000/mcp   │     │ 127.0.0.1:18765   │
└────────────────┘     └──────────────────────┘     └───────────────────┘

关键端口:

  • 8000/mcp:HTTP MCP 端点(Agent 调用)
  • 18765:WebSocket 端点(浏览器插件连接)

Agent 执行流程

  1. 检查服务状态 → 调用 cdp-bridge/scripts/check-service.ps1
  2. 初始化 MCP 会话 → 获取 session-id
  3. 选择工具 → 根据用户意图选择对应工具
  4. 调用工具 → 通过 HTTP POST 调用 MCP

可用工具

工具功能参数
browser_get_tabs获取所有标签页列表
browser_scan扫描页面内容tabs_only, switch_tab_id, text_only
browser_execute_js执行 JavaScriptscript, switch_tab_id, no_monitor
browser_switch_tab切换活动标签页tab_id
browser_navigate跳转到 URLurl
browser_screenshot截图tab_id
browser_cookies读取 Cookieurl
browser_wait等待条件condition_js, timeout, interval
browser_batch批量执行 CDP 命令commands, tab_id, timeout

意图 → 工具索引

意图工具示例参数
查看有哪些标签页browser_get_tabs无参数
读取页面内容browser_scan{"text_only": true}
执行 JS / 点击按钮browser_execute_js{"script": "document.querySelector('button').click()"}
切换到某个标签页browser_switch_tab{"tab_id": "123456"}
打开新网址browser_navigate{"url": "https://example.com"}
截图browser_screenshot无参数或 {"tab_id": "xxx"}
读取 Cookiebrowser_cookies无参数或 {"url": "https://xxx.com"}
等待元素出现browser_wait{"condition_js": "document.querySelector('.result')", "timeout": 10}

调用方式

本 skill 通过 PowerShell 调用 MCP HTTP API:

# 1. 初始化会话
$headers = @{
    "Accept" = "application/json, text/event-stream"
    "Content-Type" = "application/json"
}
$body = '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"openclaw","version":"1.0"}}}'
$response = Invoke-WebRequest -Uri 'http://127.0.0.1:8000/mcp' -Method POST -Headers $headers -Body $body
$sessionId = $response.Headers["mcp-session-id"]

# 2. 调用工具
$headers["mcp-session-id"] = $sessionId
$body = '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"browser_get_tabs","arguments":{}}}'
$response = Invoke-WebRequest -Uri 'http://127.0.0.1:8000/mcp' -Method POST -Headers $headers -Body $body

核心规则

  1. 每次调用必须带上 session-id — 初始化后获取的 session-id 需要在后续所有请求的 header 中传递
  2. 先获取标签页,再操作 — 操作前先 browser_get_tabs 确认目标 tab_id
  3. 避免操作 DevTools 端点页面 — URL 为 127.0.0.1:9222/json 的标签页可能有其他调试器附加,会报错
  4. 扫描页面用 text_only 节省 token — 大页面建议 text_only: true
  5. 截图返回 base64 PNG — 结果是图片数据,需要时可以保存或展示

常见错误处理

错误原因解决方案
Missing session ID未传递 session-id header初始化后保存 session-id,后续请求带上
Another debugger is already attached目标标签页已有其他调试器切换到其他标签页操作
ERR_CONNECTION_REFUSEDMCP 服务未启动启动 CDP Bridge MCP 服务
Tool execution failed参数错误或页面不支持检查参数,尝试简化操作

启动 MCP 服务

如果 MCP 服务未启动,执行:

$env:Path = "C:\Users\Administrator\.local\bin;$env:Path"
$env:UV_HTTP_TIMEOUT = "600"
Start-Process -NoNewWindow -FilePath "uvx" -ArgumentList "cdp-bridge@latest","--transport","streamable-http","--port","8000","--ws-port","18765"

参考文档

插件安装指引

插件文件位于:cdp-bridge-tutorial/extension/tmwd_cdp_bridge/

安装步骤:

  1. 打开浏览器扩展页面(Chrome: chrome://extensions/,Edge: edge://extensions/
  2. 开启「开发者模式」
  3. 点击「加载已解压的扩展程序」
  4. 选择 tmwd_cdp_bridge 文件夹
  5. 配置 Bridge Host = 127.0.0.1,Port = 18765