Chrome DevTools MCP 配置与 WSL 连接
一份关于 Chrome DevTools MCP 配置,以及 WSL 中连接调试 Chrome 的工作记录。
MCP 配置
# Claude Code
claude mcp add chrome-devtools npx chrome-devtools-mcp@latest
# Codex
codex mcp add chrome-devtools -- npx chrome-devtools-mcp@latest
# Gemini CLI
# 编辑Gemini设置文件
nano ~/.gemini/settings.json
# 或者使用你喜欢的编辑器
code ~/.gemini/settings.json
# 添加Chrome DevTools MCP配置:在 settings.json 文件中添加以下配置:
{
"mcpServers": {
"chrome-devtools": {
"command": "npx",
"args": ["chrome-devtools-mcp@latest"]
}
}
}
# 带参数的高级配置
{
"mcpServers": {
"chrome-devtools": {
"command": "npx",
"args": [
"chrome-devtools-mcp@latest",
"--channel=canary",
"--headless=true",
"--isolated=true"
]
}
}
}
#验证配置,输入:Check the performance of <https://developers.chrome.com>
在wsl中使用codex时如何连接chrome
问题分析:
- 网络隔离:Windows 10 的 WSL2 采用 NAT 模式,
127.0.0.1在两个系统中不互通。 - 安全保护:Chrome 默认开启
Host Header Check,拒绝来自非本地(如 WSL 虚拟网段172.x.x.x)的调试请求。 - 代理冲突:开发者常用的
7890等代理端口会拦截调试流量,导致Empty reply。
获取宿主机ip
#
HOST_IP=$(ip route | awk '/default/ {print $3}'); echo $HOST_IP; curl -v "http://$HOST_IP:90/"
方案一:跨系统 SSH 隧道法 (推荐:资源占用低)
此方法通过 SSH 建立一个“加密管道”,将 WSL2 内部的请求伪装成 Windows 本地发起,从而欺骗 Chrome 的安全检查。
1.1 Windows 环境准备 (管理员 PowerShell)
安装并启动 SSH 服务:
# 安装 OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
# 启动服务并设为自启
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'
彻底清理残留进程:
taskkill /F /IM chrome.exe
启动调试版 Chrome:
& "C:\Program Files\Google\Chrome\Application\chrome.exe" `
--remote-debugging-port=9333 `
--remote-debugging-address=127.0.0.1 `
--remote-allow-origins=* `
--user-data-dir="D:\chrome_mcp_profile"
1.2 WSL2 隧道建立 (WSL 终端)
获取宿主机 IP:
# 通常是 nameserver 后面的地址
grep nameserver /etc/resolv.conf | awk '{print $2}'
建立持久隧道:
# -L 端口映射, -N 仅建立隧道不打开shell
ssh -L 9333:127.0.0.1:9333 [Windows用户名]@[宿主机IP] -N
# ssh -L 9333:127.0.0.1:9333 [Windows用户名]@[宿主机IP] -N
1.3 连通性校验
curl -v http://127.0.0.1:9333/json/version
启动顺序: ==先启动 Chrome (9333),再启动 SSH 隧道,最后启动 Codex/Cursor。==
方案二:WSL2 本地化部署法 (推荐:最稳健、支持脚本调试)
通过在 WSL2 内部安装 Linux 版 Chrome,彻底消除系统间障碍,且通过参数完美兼容 Manifest V2。
2.1 安装 Chrome (WSL 终端)
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt update && sudo apt install ./google-chrome-stable_current_amd64.deb -y
2.2 配置启动命令(推荐:函数 + alias,更稳健)
说明:bash 函数名不能包含
-,因此用mcp_chrome(下划线),再用 alias 暴露mcp-chrome(连字符)这个命令名。同时建议使用独立 Profile(
ChromeDataMCP),避免复用旧 Profile 中的代理/PAC/扩展配置导致ERR_TIMED_OUT。
将以下代码加入 ~/.bashrc(或 ~/.zshrc)末尾,然后 source ~/.bashrc 使其生效:
mcp_chrome () {
# 关键:清理代理环境变量,避免 Chrome 因环境变量间接走代理(WSL 里很常见)
env -u http_proxy -u https_proxy -u all_proxy -u HTTP_PROXY -u HTTPS_PROXY -u ALL_PROXY \
google-chrome \
--remote-debugging-port=9222 \
--acceptInsecureCerts=true \
--user-data-dir="$HOME/ChromeDataMCP" \
--no-first-run \
--no-default-browser-check \
--proxy-bypass-list="172.21.224.1,localhost,127.0.0.1,<local>,<-loopback>" \
--enable-features=AllowLegacyMV2Extensions \
--disable-features=ExtensionManifestV2Unsupported,ExtensionManifestV2Disabled,ExtensionsManifestV3Only \
"$@"
}
# 对外保持命令名习惯:mcp-chrome
alias mcp-chrome='mcp_chrome'
- 参数详解(补充版)
--remote-debugging-port=9222:开启 CDP 调试端口,供chrome-devtools-mcp连接。--acceptInsecureCerts=true:忽略证书错误,便于本地 https/自签名场景调试(生产不建议)。--user-data-dir="$HOME/ChromeDataMCP":独立 Profile,避免污染日常浏览器数据,也避免旧 Profile 的代理/PAC/扩展影响调试。--proxy-bypass-list="172.21.224.1,localhost,127.0.0.1,<local>,<-loopback>":对宿主机与本地地址强制直连(建议用英文逗号分隔)。env -u http_proxy ...:显式移除代理环境变量,防止 “WSL 里 curl 直连能通,但 Chrome 因代理配置超时”。--enable-features=AllowLegacyMV2Extensions+--disable-features=...V2...:MV2 兼容参数(按需保留)。
2.3 启动前检查(避免参数不生效)
Chrome 在 Linux 上有“单实例”行为:如果旧的 Chrome 主进程还在跑,再次执行 google-chrome ... 往往只是把请求转交给旧进程,新参数(例如 --user-data-dir、--proxy-bypass-list)不会生效。
建议启动前先彻底退出旧进程:
pkill -f "/opt/google/chrome/chrome" 2>/dev/null || true
启动后建议验证一次参数是否真正生效:
- 打开
chrome://version - 确认
Command Line里包含--proxy-bypass-list=...(或你手动加的--no-proxy-server) - 确认
Profile Path位于.../ChromeDataMCP/...(而不是旧的ChromeData)
2.4 启动与 MCP 接入
- 启动:输入
mcp-chrome(窗口不要关闭) - MCP 配置(TOML):
[mcp_servers.chrome-devtools]
command = "npx"
args = ["-y", "chrome-devtools-mcp@latest", "--browserUrl=http://127.0.0.1:9222"]
- 去另外一个 WSL 终端启动 Codex,并通过 MCP 控制该 Chrome。
2.5 访问宿主机服务(例如 90 端口)
如果 WSL 里 curl --noproxy '*' http://172.21.224.1:90/ 能通,但 Chrome 访问 http://172.21.224.1:90/ 超时,优先按以下顺序排查:
chrome://version是否真的带上了--proxy-bypass-list且 Profile 是ChromeDataMCP- 用
mcp-chrome --no-proxy-server强制直连验证是否为代理问题 - Windows 侧确认服务是否允许从 WSL 网段访问(监听地址/防火墙规则)