返回文章列表
833 字 · 4 分钟

Claude Code 连接本机 Chrome(chrome-devtools MCP)

更新于:
· 编辑文章

结论先行

本机 Chrome 是 151,远程调试通过 chrome://inspect/#remote-debugging 开启, 走的是 M144+ 受控流程,必须给 MCP 服务器配 --autoConnect, 老式 --browserUrl http://127.0.0.1:9222 连不上。


两种连接模式(选错就是本次踩坑的根因)

模式MCP 参数Chrome 侧要求/json/version
老式直连--browserUrl http://127.0.0.1:9222启动时带 --remote-debugging-port=9222返回 JSON
受控自动连接(M144+)--autoConnectchrome://inspect/#remote-debugging 开关 + 弹框授权404

关键区别:受控模式下 9222 端口虽然 LISTENING,但 /json/* 全部返回 404, 必须由 MCP 侧发起握手、用户在 Chrome 弹框点「允许」后才放行。 用老式 --browserUrl 去打就是 404,且报错文案是 Failed to fetch browser webSocket URL ... HTTP Not Found,很容易误判成「Chrome 没开」。


错误信息对照表(一眼定位)

报错含义处理
fetch failed9222 压根没监听,Chrome 未开远程调试去 chrome://inspect/#remote-debugging 打开开关
HTTP Not Found(404)端口开着,但模式不匹配MCP 参数换成 --autoConnect
正常返回页面列表已连通—

fetch failed → HTTP Not Found 的变化本身就是进度信号:说明端口起来了,只剩模式问题。


正确配置

配置文件:C:\Users\Administrator\.claude.json 的 mcpServers.chrome-devtools

{
  "type": "stdio",
  "command": "npx",
  "args": ["-y", "chrome-devtools-mcp@latest", "--autoConnect"],
  "env": {}
}

坑:文档示例里带 --channel=beta,那是因为发文时 M144 还在 Beta。 本机是正式版 151,加了反而会去找 Chrome Beta 安装,必须去掉。

坑:改完必须重启 Claude Code。MCP 服务器只在启动时读配置, 当前会话里跑的仍是旧参数的进程。重启后首次调用工具时 Chrome 弹授权框,点「允许」。 连通后浏览器顶部挂「Chrome 正受到自动测试软件的控制」横幅。

修改前先备份:cp .claude.json .claude.json.bak-<日期>


排查命令

# ① 端口是否监听 + 归属进程
netstat -ano | grep ":9222"
powershell -NoProfile -Command "Get-Process -Id <PID> | Select Id,ProcessName,Path"

# ② 探测端点(404 = 受控模式,JSON = 老式模式)
curl -s -i http://127.0.0.1:9222/json/version

# ③ Chrome 版本(>=144 才支持 --autoConnect)
powershell -NoProfile -Command "(Get-Item 'C:\Program Files\Google\Chrome\Application\chrome.exe').VersionInfo.ProductVersion"

# ④ 确认启动参数里有没有 --remote-debugging-port
powershell -NoProfile -Command "Get-CimInstance Win32_Process -Filter \"Name='chrome.exe'\" | Where-Object { \$_.CommandLine -match 'remote-debugging' } | Select -Expand CommandLine"

第 ④ 步若查不到 --remote-debugging-port 但端口确实在监听 → 一定是受控模式。


关于 9222 端口常开的安全性

当前配置下风险很低,可以一直开着。 理由:

  1. 只绑 127.0.0.1,外网和局域网都够不到(netstat 已确认,不是 0.0.0.0)
  2. 受控模式有二次授权:/json/* 默认 404,任何客户端要拿调试会话都得弹框经你点「允许」, 不像老式 --remote-debugging-port 那样端口一开就裸奔
  3. 会话激活时有顶部横幅提示,被偷偷接管能看出来

仍需注意的:

  • 本机上的其他本地程序(任意进程、恶意脚本)理论上可以发起连接请求 —— 挡它的只有那个授权弹框。 所以看到没主动触发的授权框,一律点拒绝
  • 一旦授权,对方能读取当前 profile 的全部登录态、Cookie、页面内容,等同完整账号权限
  • 绝不要给 Chrome 加 --remote-debugging-address=0.0.0.0,那才是真正的高危裸奔
  • 长期不用时去 chrome://inspect/#remote-debugging 把开关关掉最干净

对比老式模式:--remote-debugging-port=9222 启动的 Chrome 没有授权环节, 本机任何进程直接 curl 就能全量控制浏览器,那个才应该用完即关。


参考

https://developer.chrome.com/blog/chrome-devtools-mcp-debug-your-browser-session?hl=zh-

标签: #AI

评论

无需注册,填写昵称即可评论 阅读 — 次