WSL Chrome MCP
Chrome DevTools协议(CDP)服务器 模型上下文协议,专为WSL设计。每个MCP会话在Windows上都有自己的隔离Chrome实例——没有标签冲突,会话之间没有数据泄漏。
主要特点
- 每会话Chrome隔离 --每个MCP客户端会话都会使用临时配置文件启动自己的Chrome进程。会话不能相互干扰或干扰您的个人浏览器。
- 配置文件模式 --您可以选择使用窗口范围的选项卡隔离在会话之间共享单个Chrome实例,从而保留您的登录状态和书签。
- 33个浏览器自动化工具 --导航、输入、屏幕截图、可访问性快照、JavaScript执行、网络监控、性能跟踪、设备仿真。
- 持久CDP连接 --使用自动重试(3次尝试)、PowerShell中继回退和HTTP代理作为最后手段的直接WebSocket连接。
- TUI配置仪表板 --交互式终端用户界面(
wsl-chrome-mcp config)用于管理所有设置。 - WSL2镜像网络 --本地支持WSL2的镜像网络模式(本地主机访问Windows)。
- 始终在CDP上 --可选模式,通过注入永久启用Chrome的调试端口
--remote-debugging-port进入Windows快捷方式和注册表协议处理程序。
安装
# Clone the repository
git clone https://github.com/477174/wsl-chrome-mcp.git
cd wsl-chrome-mcp
# Install with uv (recommended)
uv pip install -e .添加到您的MCP客户端
克劳德代码:
claude mcp add wsl-chrome-mcp -- uv run wsl-chrome-mcp手动配置 (~/.config/claude-code/mcp.json 或同等):
{
"mcpServers": {
"wsl-chrome-mcp": {
"command": "uv",
"args": ["run", "--directory", "/path/to/wsl-chrome-mcp", "wsl-chrome-mcp"]
}
}
}可用工具(33)
会话管理(3)
| 工具 | 说明 |
|---|---|
chrome_session_start | 使用可选URL启动Chrome会话 |
chrome_session_list | 列出所有活动会话 |
chrome_session_end | 结束会话并清理其Chrome实例 |
导航(7)
| 工具 | 说明 |
|---|---|
navigate_page | 导航到URL并等待加载 |
list_pages | 列出所有打开的页面/选项卡 |
select_page | 切换到其他页面/选项卡 |
new_page | 打开新页面/选项卡 |
close_page | 关闭页面/选项卡 |
resize_page | 调整浏览器视口大小 |
handle_dialog | 接受或关闭JavaScript对话框(警报、确认、提示) |
输入(8)
| 工具 | 说明 |
|---|---|
click | 按可访问性UID单击元素 |
click_at | 单击特定的x、y坐标 |
fill | 按UID在输入字段中键入文本 |
fill_form | 一次填写多个表单字段 |
hover | 按UID将鼠标悬停在元素上 |
drag | 从一个元素拖动到另一个元素 |
press_key | 按键盘键(Enter、Tab、快捷键) |
upload_file | 将文件上传到文件输入元素 |
快照和等待(2)
| 工具 | 说明 |
|---|---|
take_snapshot | 使用UID将可访问性树捕获为结构化文本,用于元素定位 |
wait_for | 等待与文本/角色匹配的元素出现 |
屏幕截图和PDF(2)
| 工具 | 说明 |
|---|---|
take_screenshot | 截图(视口、整页或特定元素) |
generate_pdf | 生成当前页面的PDF |
脚本(3)
| 工具 | 说明 |
|---|---|
evaluate | 在页面上下文中执行JavaScript表达式或函数 |
get_html | 获取页面或特定元素的HTML内容 |
scroll | 滚动页面或特定元素 |
监控(4)
| 工具 | 说明 |
|---|---|
get_console | 通过筛选获取控制台消息(日志、警告、错误) |
get_console_message | 按索引获取特定的控制台消息 |
get_network | 通过URL、方法、状态过滤获取网络请求 |
get_network_request | 获取特定网络请求的详细信息 |
仿真(1)
| 工具 | 说明 |
|---|---|
emulate | 模拟设备、视口、暗模式、地理位置、网络限制(慢速3G、快速3G、离线)、CPU限制和自定义用户代理 |
性能(3)
| 工具 | 说明 |
|---|---|
performance_start_trace | 启动Chrome性能跟踪 |
performance_stop_trace | 停止跟踪并返回记录的数据 |
performance_analyze_insight | 分析跟踪数据以获得性能见解 |
建筑
┌──────────────────────────────────────────────────────────────────────┐
│ WSL Linux │
│ │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ wsl-chrome-mcp │ │
│ │ │ │
│ │ ┌──────────────┐ ┌──────────────────┐ ┌─────────────┐ │ │
│ │ │ MCP Server │───>│ Pool Manager │───>│ Persistent │ │ │
│ │ │ (FastMCP) │ │ (chrome_pool) │ │ CDP Client │ │ │
│ │ └──────────────┘ └──────────────────┘ └──────┬──────┘ │ │
│ │ │ │ │
│ │ ┌──────────────┐ ┌──────────────────┐ │ │ │
│ │ │ 33 Tools │ │ Config Manager │ │ │ │
│ │ │ (modular) │ │ (TOML) │ │ │ │
│ │ └──────────────┘ └──────────────────┘ │ │ │
│ └──────────────────────────────────────────────────────┼─────────┘ │
│ │ │
│ CDP over WebSocket │ │
│ (port 9222) │ │
└─────────────────────────────────────────────────────────┼────────────┘
│
┌─────────────────────────────────────────────────────────┼────────────┐
│ Windows Host │ │
│ │ │
│ Isolated Mode (default): Profile Mode: │ │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │ │
│ │ Chrome 1 │ │ Chrome 2 │ │ Shared Chrome │<─┘ │
│ │ (temp │ │ (temp │ │ (your profile) │ │
│ │ profile) │ │ profile) │ │ window-scoped │ │
│ └──────────┘ └──────────┘ └──────────────────┘ │
└──────────────────────────────────────────────────────────────────────┘会话模式
隔离模式(默认)
每个MCP会话都会启动一个 单独的Chrome进程 具有临时用户数据目录。会话是完全独立的——不同的Cookie、存储和历史记录。会话结束后,临时配置文件将被删除。
- 不会干扰您的个人Chrome浏览器
- 并发MCP会话之间没有干扰
- 每次清洁状态
[chrome]
profile_mode = "isolated"配置文件模式
所有会话共享一个 单个Chrome实例 使用您现有的Chrome个人资料。每个会话都有自己的窗口,只跟踪它创建的选项卡。您的登录会话、书签和扩展都可用。
- 跨会话保留登录状态
- 访问您的书签和扩展
- 按窗口隔离的会话(不是按进程隔离的会话)
[chrome]
profile_mode = "profile"
profile_name = "Profile 1"连接策略
服务器使用具有自动回退的多层连接策略:
- 直接WebSocket --直接连接到Chrome的CDP WebSocket端点(重试3次,两次尝试之间延迟1秒)
- PowerShell中继 --如果直接连接失败,则在Windows上使用PowerShell作为WebSocket中继
- HTTP 代理 --最后,通过HTTP代理CDP命令
连接状态在工具响应中报告(Connected: True/False).即使有 Connected: False (代理模式),所有工具仍能正常工作。
配置
设置存储在 ~/.config/wsl-chrome-mcp/config.toml:
[chrome]
debug_port = 9222 # CDP debugging port
headless = false # Run Chrome headless
profile_mode = "isolated" # "isolated" or "profile"
profile_name = "" # Chrome profile name (profile mode only)
[network]
mirrored_networking = true # WSL2 mirrored networking mode
[cdp]
always_on = false # Keep CDP enabled permanently via registry
[plugin]
installed = true # Whether OpenCode plugin is installed交互式配置
运行TUI仪表板以交互方式配置所有设置:
wsl-chrome-mcp configTUI提供切换开关、下拉选择器和配置文件检测,并实时预览您的配置。
发展
# Install dev dependencies
uv pip install -e ".[dev]"
# Run tests (98 unit tests)
uv run pytest
# Run E2E concurrency test (requires Windows Chrome)
uv run pytest tests/test_isolated_concurrency.py -v
# Lint and format
uv run ruff check .
uv run ruff format .
# Type check
uv run mypy src故障排除
未找到Chrome
确保Chrome已安装在Windows的以下位置之一:
C:\Program Files\Google\Chrome\Application\chrome.exeC:\Program Files (x86)\Google\Chrome\Application\chrome.exe%LOCALAPPDATA%\Google\Chrome\Application\chrome.exe
连接被拒绝
- 检查Chrome是否正在进行远程调试:
curl http://localhost:9222/json/version- Windows防火墙可能正在阻止端口9222。添加入站规则。
- 如果使用WSL2而不使用镜像网络,请尝试Windows主机IP:
curl http://$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):9222/json/version已连接:False(代理回退)
这意味着直接WebSocket连接失败,但HTTP代理正在工作。所有工具仍正常工作。要恢复直接连接,请执行以下操作:
- 确保Chrome正在运行
--remote-debugging-port=9222 - 检查是否没有其他进程正在使用端口9222
- 重新启动MCP服务器以重试连接
WSL1与WSL2
此MCP针对WSL2进行了优化。对于WSL1,您可能需要使用 localhost 而不是Windows主机IP:
export WSL_HOST_IP=127.0.0.1许可证
麻省理工学院
学分
受...启发 chrome开发工具mcp 来自Chrome DevTools团队。
