Skip to main content
Glama

Chrome Debug MCP Server

by Rainmen-xia
ARCHITECTURE.md8.56 kB
# MCP浏览器自动化服务器 - 技术架构 ## 概述 本项目将原有的VSCode扩展中的浏览器自动化功能抽象成了一个独立的MCP (Model Context Protocol) 服务器,实现了真正的"带登录态"浏览器自动化。 ## 核心设计理念 ### 1. 登录态保持 (Session Persistence) - **问题**: 传统浏览器自动化工具每次启动都是全新会话,无法保持登录状态 - **解决方案**: 连接现有Chrome实例的调试端口,复用用户已登录的会话 - **技术实现**: Chrome DevTools Protocol + WebSocket连接 ### 2. 智能浏览器发现 (Smart Browser Discovery) - **本地发现**: 自动检测localhost:9222等常见端口 - **Docker支持**: 通过host.docker.internal发现容器中的Chrome - **网络扫描**: 在特定网络范围内查找可用Chrome实例 - **连接缓存**: 记住成功的连接端点,加快后续连接 ### 3. MCP协议集成 (MCP Protocol Integration) - **stdio传输**: 使用标准输入输出与外部程序通信 - **工具化接口**: 将浏览器操作封装成标准MCP工具 - **类型安全**: 基于JSON Schema的参数验证 ## 架构组件 ``` ┌─────────────────┐ stdio ┌──────────────────┐ WebSocket ┌─────────────────┐ │ MCP Client │◄──────────►│ MCP Server │◄───────────────►│ Chrome Browser │ │ (AI Assistant) │ │ (This Project) │ │ (Debug Mode) │ └─────────────────┘ └──────────────────┘ └─────────────────┘ │ ▼ ┌──────────────────┐ │ Browser Session │ │ Manager │ └──────────────────┘ │ ▼ ┌──────────────────┐ │ Browser Discovery│ │ Service │ └──────────────────┘ ``` ## 文件结构说明 ### 核心模块 #### `src/index.ts` - MCP服务器主控制器 - **职责**: MCP协议处理、工具注册、请求路由 - **关键特性**: - 实现标准MCP服务器接口 - 定义10个浏览器自动化工具 - 错误处理和优雅关闭 - 支持图像和文本响应 #### `src/browserSession.ts` - 浏览器会话管理器 - **职责**: 浏览器连接管理、页面操作执行 - **关键特性**: - Chrome调试端口连接 - 智能标签页管理(同域名复用) - 自动等待页面加载完成 - 网络活动监控 - 实时截图和日志收集 #### `src/browserDiscovery.ts` - 浏览器发现服务 - **职责**: 自动发现可用的Chrome实例 - **关键特性**: - 多环境支持(本地、Docker、远程) - 端口可用性检测 - DNS解析(host.docker.internal) - 网络范围扫描 ### 配置文件 #### `package.json` - **运行时**: Node.js ESM模块 - **核心依赖**: - `@modelcontextprotocol/sdk`: MCP协议实现 - `puppeteer-core`: Chrome DevTools Protocol客户端 - `axios`: HTTP请求处理 - `p-wait-for`: 异步等待工具 #### `tsconfig.json` - **目标**: ES2022 + ESNext模块 - **输出**: build/目录,包含类型定义和源码映射 ## 工具API设计 ### 连接管理工具 - `launch_browser`: 建立与Chrome的连接 - `close_browser`: 断开连接并清理资源 ### 导航控制工具 - `navigate_to`: 智能URL导航(同域名标签页复用) ### 交互操作工具 - `click`: 坐标点击(支持网络活动监控) - `type_text`: 文本输入 - `hover`: 鼠标悬停 ### 页面控制工具 - `scroll_up/scroll_down`: 页面滚动 - `resize_browser`: 窗口大小调整 - `get_page_content`: HTML内容获取 ## 技术实现细节 ### 1. Chrome调试端口连接机制 ```typescript // 连接到Chrome调试端口 const browser = await connect({ browserURL: chromeHostUrl, // http://localhost:9222 defaultViewport: { width: 1200, height: 800 } }); ``` **关键点**: - 使用WebSocket协议通信 - 支持远程Chrome实例 - 保持现有用户会话 ### 2. 智能标签页管理 ```typescript // 域名提取和比较 private getRootDomain(url: string): string { return new URL(url).host.replace(/^www\./, ""); } // 标签页复用逻辑 if (existingPage && sameDomain) { this.page = existingPage; // 复用现有标签页 } else { this.page = await browser.newPage(); // 创建新标签页 } ``` **优势**: - 避免重复打开相同网站 - 保持网站内导航的连续性 - 减少资源消耗 ### 3. 页面加载等待策略 ```typescript // 多重等待机制 await page.goto(url, { waitUntil: ["domcontentloaded", "networkidle2"] }); await this.waitTillHTMLStable(page); // HTML大小稳定检测 ``` **实现原理**: - DOM内容加载完成 - 网络请求静默2秒 - HTML内容大小连续3次检查相同 ### 4. 网络活动监控 ```typescript // 监控网络请求 page.on("request", () => { hasNetworkActivity = true }); // 操作后检查网络活动 if (hasNetworkActivity) { await page.waitForNavigation({ waitUntil: "networkidle2" }); } ``` **应用场景**: - 点击按钮触发AJAX请求 - 表单提交导致页面跳转 - 动态内容加载 ## 安全考虑 ### 1. Chrome启动参数 ```bash --remote-debugging-port=9222 # 启用调试端口 --user-data-dir=/tmp/chrome-debug # 独立用户数据目录 --disable-web-security # 禁用同源策略(仅开发环境) ``` ### 2. 网络访问控制 - 仅连接本地Chrome实例(默认) - Docker环境需要明确配置 - 不支持未授权的远程连接 ### 3. 数据隔离 - 使用临时用户数据目录 - 不影响用户正常的Chrome配置 - 调试会话与正常会话分离 ## 性能优化 ### 1. 连接复用 - 缓存成功的Chrome连接端点 - 避免重复发现过程 - 连接保持时间:1小时 ### 2. 截图优化 - WebP格式优先(更小体积) - PNG格式备用(兼容性) - Base64编码传输 ### 3. 内存管理 - 及时清理事件监听器 - 页面关闭时释放资源 - 浏览器连接优雅断开 ## 扩展性设计 ### 1. 新工具添加 ```typescript // 在src/index.ts中添加工具定义 { name: "new_tool", description: "新工具描述", inputSchema: { /* JSON Schema */ } } // 在src/browserSession.ts中添加实现 async newTool(params: any): Promise<BrowserActionResult> { // 实现逻辑 } ``` ### 2. 多浏览器支持 - 抽象浏览器接口 - 支持Firefox、Safari等 - 统一的工具API ### 3. 云端部署 - Docker容器化 - Kubernetes集群部署 - 负载均衡和高可用 ## 故障排除指南 ### 常见问题 1. **连接失败** - 检查Chrome是否以调试模式启动 - 验证端口9222可访问性 - 确认防火墙设置 2. **操作超时** - 检查网络连接稳定性 - 增加页面加载超时时间 - 确认目标元素可见性 3. **截图失败** - 确认页面完全加载 - 检查浏览器窗口大小 - 尝试刷新页面 ### 调试方法 1. **启用详细日志** ```bash DEBUG=mcp* npm start ``` 2. **Chrome调试检查** ```bash curl -s http://localhost:9222/json/version ``` 3. **MCP通信测试** ```bash echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | node build/index.js ``` ## 未来发展方向 ### 短期目标 - [ ] 增加元素选择器支持(CSS Selector、XPath) - [ ] 添加表单填写快捷工具 - [ ] 支持文件上传/下载操作 ### 中期目标 - [ ] 多浏览器引擎支持 - [ ] 分布式部署方案 - [ ] 操作录制和回放功能 ### 长期目标 - [ ] AI驱动的智能操作 - [ ] 可视化操作编辑器 - [ ] 企业级权限管理 --- **技术栈总结**: - **语言**: TypeScript + Node.js - **协议**: MCP (Model Context Protocol) - **浏览器**: Chrome DevTools Protocol - **传输**: stdio + WebSocket - **构建**: tsc + npm scripts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Rainmen-xia/chrome-debug-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server