mcp铬cdp
模型上下文协议(MCP)服务器,用于通过Chrome DevTools协议控制Chromium/Chrome。具有自动重新连接支持的跨平台。
✨ 主要特点
- ✅ 跨平台:适用于macOS、Linux和Windows
- ✅ 铬优先:检测并启动Chromium,退回Chrome
- ✅ 自动重新连接:如果浏览器崩溃或重新启动,则自动重新连接(最多重试5次)
- ✅ 自动启动:如果未运行,则自动启动浏览器
- ✅ 自定义配置文件:支持通过环境变量自定义浏览器配置文件
- ✅ 标准运输:与Claude Desktop和Claude Code的原生集成
安装
全球安装
npm install -g mcp-chromium-cdp本地安装
npm install mcp-chromium-cdp来源
git clone https://github.com/duquesnay/mcp-chromium-cdp.git
cd mcp-chromium-cdp
npm install
npm run build配置
克劳德桌面(macOS)
增添 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"chromium": {
"command": "npx",
"args": ["-y", "mcp-chromium-cdp"]
}
}
}克劳德代码
claude mcp add chromium -- npx -y mcp-chromium-cdp或者使用本地构建:
claude mcp add chromium -- node /path/to/mcp-chromium-cdp/build/index.js环境变量
CHROMIUM_PATH
覆盖Chromium二进制路径:
CHROMIUM_PATH=/usr/bin/chromium-browser mcp-chromium-cdpCHROMIUM_USER_DATA_DIR
使用自定义浏览器配置文件:
CHROMIUM_USER_DATA_DIR=~/.config/chromium-mcp mcp-chromium-cdp可用工具
| 工具 | 说明 |
|---|---|
chrome_navigate | 导航到特定URL |
chrome_get_current_url | 获取当前页面URL |
chrome_get_title | 获取页面标题 |
chrome_get_content | 获取页面HTML内容 |
chrome_get_visible_text | 从页面获取可见文本 |
chrome_execute_script | 在页面中执行JavaScript |
chrome_click | 通过CSS选择器单击元素 |
chrome_type | 在输入框中键入文本 |
chrome_screenshot | 截图(base64) |
chrome_open_new_tab | 打开新选项卡 |
chrome_close_tab | 关闭当前选项卡 |
chrome_list_tabs | 列出所有打开的选项卡 |
chrome_reload | 重新加载当前页面 |
chrome_go_back | 返回历史记录 |
chrome_go_forward | 在历史中向前导航 |
用法示例
与克劳德
Using chromium tools, navigate to https://example.com and get the page title程序化使用
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
const transport = new StdioClientTransport({
command: 'npx',
args: ['-y', 'mcp-chromium-cdp']
});
const client = new Client({
name: 'my-client',
version: '1.0.0'
}, {
capabilities: {}
});
await client.connect(transport);
// Navigate to URL
await client.callTool({
name: 'chrome_navigate',
arguments: { url: 'https://example.com' }
});
// Get page title
const result = await client.callTool({
name: 'chrome_get_title',
arguments: {}
});
console.log(result.content[0].text);自动重新连接
如果Chromium崩溃或重新启动,服务器将自动尝试重新连接:
- 最大重试次数:5次尝试
- 重试延迟:两次尝试之间间隔2秒
- 日志:记录到stderr的重新连接尝试
日志输出示例:
[Connection] Chromium disconnected
[Reconnect] Attempting to reconnect to Chromium...
[Reconnect] Successfully reconnected to Chromium铬检测
服务器在标准位置自动检测Chromium:
macOS:
/Applications/Chromium.app/Contents/MacOS/Chromium~/Applications/Chromium.app/Contents/MacOS/Chromium
Linux:
/usr/bin/chromium/usr/bin/chromium-browser/snap/bin/chromium
窗户:
%LOCALAPPDATA%\Chromium\Application\chrome.exe%PROGRAMFILES%\Chromium\Application\chrome.exe%PROGRAMFILES(X86)%\Chromium\Application\chrome.exe
如果找不到Chromium,服务器将通过以下方式回退到Chrome chrome-launcher.
发展
# Install dependencies
npm install
# Build
npm run build
# Watch mode
npm run watch建筑
该项目由两个主要部分组成:
- ChromeController (
src/chrome-controller.ts):
- 管理Chrome DevTools协议(CDP)连接 - 实现浏览器自动化方法 - 处理自动启动和重新连接逻辑 - 跨平台铬检测
- MCP服务器 (
src/index.ts):
- 实现模型上下文协议服务器 - 将Chrome控制方法作为MCP工具公开 - 通过stdio处理通信
故障排除
未找到铬
如果服务器找不到Chromium:
- 从安装Chromium chromium.org
- 或者手动指定路径:
CHROMIUM_PATH=/path/to/chromium mcp-chromium-cdp连接问题
如果服务器无法连接:
- 检查是否有其他进程正在使用端口9222:
lsof -i :9222- 如果未运行,服务器将自动启动Chromium
- 检查重新连接尝试的日志
MCP服务器未在Claude中显示
- 验证Claude桌面/代码中的配置
- 检查一下
build/index.js存在 - 查看克劳德日志中的错误
与铬mcp的区别
该项目基于原始 chrome-mcp 包裹由 @月3日 具有以下增强功能:
- ✅ 铬优先 检测(而不仅仅是Chrome)
- ✅ 自动重新连接 断开连接时
- ✅ 跨平台 铬路径检测
- ✅ 环境变量 配置
- ✅ TypeScript源代码 代码包括
- ✅ 改进了错误处理 以及日志记录
鸣谢
原始代码 通过 @月3日 (铬mcp封装)。
增强 通过自动重新连接和跨平台支持 @杜魁奈.
构建使用:
- @模型上下文协议/sdk -MCP-SDK
- 铬发射器 -Chrome启动器
- chrome远程接口 -Chrome DevTools协议客户端
许可证
麻省理工学院
贡献
欢迎投稿!请在上打开问题或PR .
支持
- 问题:
- 讨论:
