Chrome DevTools MCP Server
使用 Chrome DevTools Protocol (CDP) 通过 MCP 协议控制浏览器的完整指南。
什么是 Chrome DevTools MCP Server?
Chrome DevTools MCP Server 是一个基于 Model Context Protocol (MCP) 的浏览器自动化工具。它允许 AI 通过标准化的 MCP 接口控制 Chrome 浏览器,执行导航、点击、输入、截图等操作。
与 lsbot 内置浏览器的区别
| Chrome DevTools MCP | lsbot 内置浏览器 | |
|---|---|---|
| 协议 | MCP (Model Context Protocol) | 直接 CDP + go-rod |
| 安装 | 需要单独安装 MCP server | 开箱即用 |
| 适用范围 | 任何 MCP 兼容的 AI 客户端 | lsbot 专用 |
| 连接方式 | 连接已运行的 Chrome | 可启动新实例或连接 |
安装
前置条件
- Node.js 18+
- Chrome/Brave/Edge 浏览器
安装 MCP Server
配置
方式一:自动启动 Chrome(推荐)
chrome-devtools-mcp 可以自动启动 Chrome,无需手动配置调试端口:
常用选项:
| 参数 | 说明 |
|---|---|
--headless | 无头模式运行 |
--viewport 1280x720 | 设置视口大小 |
--channel stable | 使用稳定版 Chrome(默认) |
--channel canary | 使用 Chrome Canary |
--user-data-dir | 指定用户数据目录 |
--autoConnect | 连接到正在运行的 Chrome(Chrome 144+) |
完整配置选项
| 参数 | 缩写 | 说明 | 默认值 |
|---|---|---|---|
--browserUrl | -u | 连接已运行的 Chrome(如 http://127.0.0.1:9222) | - |
--wsEndpoint | -w | WebSocket 端点连接 | - |
--wsHeaders | - | WebSocket 自定义请求头(JSON 格式) | - |
--headless | - | 无头模式运行 | false |
--executablePath | -e | 指定 Chrome 可执行文件路径 | 自动检测 |
--isolated | - | 创建临时用户数据目录,关闭后自动清理 | false |
--userDataDir | - | 用户数据目录路径 | ~/.cache/chrome-devtools-mcp/chrome-profile |
--channel | - | Chrome 渠道:stable, canary, beta, dev | stable |
--viewport | - | 视口大小(如 1280x720) | - |
--proxyServer | - | 代理服务器配置 | - |
--acceptInsecureCerts | - | 忽略自签名证书错误 | false |
--chromeArg | - | 额外 Chrome 参数(可多次使用) | - |
--ignoreDefaultChromeArg | - | 禁用默认 Chrome 参数 | - |
--categoryEmulation | - | 启用模拟工具 | true |
--categoryPerformance | - | 启用性能工具 | true |
--categoryNetwork | - | 启用网络工具 | true |
--performanceCrux | - | 启用 CrUX 性能数据 | true |
--usageStatistics | - | 发送使用统计 | true |
--autoConnect | - | 自动连接到运行中的 Chrome(Chrome 144+) | false |
--logFile | - | 日志文件路径 | - |
方式二:连接已有 Chrome
如果你已有运行中的 Chrome,可以用调试端口连接:
1. 启动 Chrome(带调试端口):
2. 验证端口:
3. 配置 MCP 客户端:
配置示例
Cursor / Claude Code 设置:
在 ~/.cursor/user/settings.json 或 ~/.claude/settings.json 中添加:
无头模式:
连接到已有 Chrome(需先手动启动):
使用 Chrome Canary:
使用自定义用户数据目录:
忽略证书错误(自签名证书):
自动连接 Chrome 144+(无需调试端口):
禁用默认 Chrome 参数:
使用自定义 Chrome 路径:
重启 MCP 客户端
重启 Cursor/Claude Code 后,MCP 工具即可使用。
工具完整参考
页面管理
list_pages — 列出所有标签页
返回浏览器中所有打开的页面:
new_page — 打开新标签页
| 参数 | 类型 | 说明 |
|---|---|---|
url | string | 打开的 URL(可选) |
background | bool | 是否在后台打开,默认 false |
select_page — 切换标签页
| 参数 | 类型 | 说明 |
|---|---|---|
pageId | number | 页面 ID(从 list_pages 获取) |
bringToFront | bool | 是否聚焦到该页面 |
close_page — 关闭标签页
navigate_page — 导航到 URL
| 参数 | 类型 | 说明 |
|---|---|---|
url | string | 目标 URL |
type | string | 类型:url(默认), back, forward, reload |
ignoreCache | bool | 忽略缓存(reload 时) |
timeout | number | 超时毫秒数 |
元素交互
所有交互工具都需要先执行
take_snapshot获取元素的uid。
take_snapshot — 获取页面快照
返回页面的可访问性树,每个元素带唯一标识符(uid):
参数:
| 参数 | 类型 | 说明 |
|---|---|---|
verbose | bool | 是否包含完整信息,默认 false |
click — 点击元素
hover — 悬停元素
fill — 输入文本
| 参数 | 类型 | 说明 |
|---|---|---|
uid | string | 元素 uid |
value | string | 输入的文本 |
fill_form — 填写表单
press_key — 按键
支持的按键组合:
- 单键:
Enter,Tab,Escape,Backspace,Delete,Space - 方向键:
ArrowUp,ArrowDown,ArrowLeft,ArrowRight - 修饰键:
Control,Shift,Alt,Meta
drag — 拖拽
upload_file — 上传文件
内容获取
screenshot — 截图
| 参数 | 类型 | 说明 |
|---|---|---|
uid | string | 元素 uid(可选,截图特定元素) |
fullPage | bool | 是否截取整页 |
format | string | 格式:png(默认), jpeg, webp |
quality | number | 质量 0-100(仅 jpeg/webp) |
filePath | string | 保存路径 |
evaluate_script — 执行 JavaScript
等待与同步
wait_for — 等待文本出现
网络请求
list_network_requests — 列出网络请求
get_network_request — 获取请求详情
浏览器设置
emulate — 模拟设备和网络
| 参数 | 类型 | 说明 |
|---|---|---|
viewport | object | 视口设置 |
userAgent | string | 用户代理 |
colorScheme | string | 颜色方案:dark, light, auto |
networkConditions | string | 网络节流:Slow 3G, Fast 3G, Offline 等 |
geolocation | object | 地理位置 |
resize_page — 调整窗口大小
典型使用场景
场景一:信息查询
场景二:登录操作
场景三:表单填写
场景四:批量操作
故障排除
连接失败
解决:
- 确认 Chrome 以调试端口运行:
curl http://localhost:9222/json/version - 如果未运行,重新启动 Chrome:
uid 无效
原因: 页面已导航或刷新,uid 已失效。
解决: 重新执行 take_snapshot 获取新的 uid。
页面加载超时
解决:
无头模式
如果需要无头模式(服务器环境),使用 Chrome 的无头模式:
快速命令参考
| 操作 | 命令 |
|---|---|
| 打开页面 | navigate_page url="..." |
| 获取元素 | take_snapshot |
| 点击 | click uid=... |
| 输入 | fill uid=... value="..." |
| 截图 | screenshot |
| 执行 JS | evaluate_script function="..." |
| 后退/前进 | navigate_page type="back" / type="forward" |
| 刷新 | navigate_page type="reload" |
| 等待 | wait_for text="..." |