|
| 1 | +# Claude in Chrome MCP — 恢复计划 |
| 2 | + |
| 3 | +更新时间:2026-04-03 |
| 4 | +参考项目:`E:\源码\claude-code-source-main\claude-code-source-main` |
| 5 | + |
| 6 | +## 1. 功能概述 |
| 7 | + |
| 8 | +Claude in Chrome 让 Claude Code CLI 通过 MCP 协议控制用户的 Chrome 浏览器:导航网页、填写表单、截图、录制 GIF、读取 DOM、执行 JS、监控网络请求和控制台日志。 |
| 9 | + |
| 10 | +通信方式有两种: |
| 11 | +- **本地 Socket**:Chrome 扩展通过 Native Messaging Host 与 CLI 建立 Unix socket 连接 |
| 12 | +- **Bridge WebSocket**:通过 Anthropic 的 bridge 服务中转,支持远程浏览器 |
| 13 | + |
| 14 | +## 2. 完整加载链路 |
| 15 | + |
| 16 | +``` |
| 17 | +CLI 启动 |
| 18 | + │ |
| 19 | + ▼ |
| 20 | +src/main.tsx:1003 |
| 21 | + .option('--chrome', 'Enable Claude in Chrome integration') |
| 22 | + │ |
| 23 | + ▼ |
| 24 | +src/main.tsx:1522-1527 |
| 25 | + setChromeFlagOverride(chromeOpts.chrome) |
| 26 | + │ |
| 27 | + ▼ |
| 28 | +src/utils/claudeInChrome/setup.ts |
| 29 | + shouldEnableClaudeInChrome() |
| 30 | + ├── --chrome flag → true |
| 31 | + ├── --no-chrome flag → false |
| 32 | + ├── 非交互模式 → false |
| 33 | + ├── 环境变量 CLAUDE_CODE_DISABLE_CHROME → false |
| 34 | + ├── 配置 claudeInChromeDefaultEnabled → true/false |
| 35 | + └── Chrome 扩展已安装 + GrowthBook tengu_chrome_auto_enable → auto |
| 36 | + │ |
| 37 | + ▼ |
| 38 | +src/utils/claudeInChrome/setup.ts |
| 39 | + setupClaudeInChrome() |
| 40 | + ├── 生成 MCP server 配置 |
| 41 | + └── 返回 mcpConfig + allowedTools |
| 42 | + │ |
| 43 | + ▼ |
| 44 | +src/utils/claudeInChrome/mcpServer.ts |
| 45 | + import { createClaudeForChromeMcpServer } from '@ant/claude-for-chrome-mcp' |
| 46 | + │ |
| 47 | + ▼ |
| 48 | +packages/@ant/claude-for-chrome-mcp/src/index.ts ← 当前是 STUB |
| 49 | + export function createClaudeForChromeMcpServer() { return null } |
| 50 | + export const BROWSER_TOOLS = [] |
| 51 | +``` |
| 52 | + |
| 53 | +## 3. 阻塞点清单 |
| 54 | + |
| 55 | +| # | 阻塞点 | 位置 | 状态 | |
| 56 | +|---|--------|------|------| |
| 57 | +| ① | `@ant/claude-for-chrome-mcp` 是 stub | `packages/@ant/claude-for-chrome-mcp/src/index.ts` | **6 行空壳,返回 null** | |
| 58 | +| ② | 缺少完整实现(7 个文件,3038 行) | `packages/@ant/claude-for-chrome-mcp/src/` | 只有 1 个 stub 文件 | |
| 59 | + |
| 60 | +**不需要任何 feature flag** — `/chrome` 命令无条件注册在 `src/commands.ts:264`。 |
| 61 | + |
| 62 | +**不需要改 `src/` 下任何文件** — 以下文件全部与参考项目 0 行差异: |
| 63 | +- `src/utils/claudeInChrome/setup.ts` |
| 64 | +- `src/utils/claudeInChrome/mcpServer.ts` |
| 65 | +- `src/utils/claudeInChrome/common.ts` |
| 66 | +- `src/utils/claudeInChrome/chromeNativeHost.ts` |
| 67 | +- `src/utils/claudeInChrome/prompt.ts` |
| 68 | +- `src/utils/claudeInChrome/setupPortable.ts` |
| 69 | +- `src/utils/claudeInChrome/toolRendering.tsx` |
| 70 | +- `src/commands/chrome/index.ts` |
| 71 | +- `src/commands/chrome/chrome.tsx`(仅 sourcemap 差异) |
| 72 | +- `src/skills/bundled/claudeInChrome.ts` |
| 73 | + |
| 74 | +## 4. 参考项目完整实现清单 |
| 75 | + |
| 76 | +参考项目路径:`deps/@ant/claude-for-chrome-mcp/src/` |
| 77 | + |
| 78 | +| 文件 | 行数 | 职责 | |
| 79 | +|------|------|------| |
| 80 | +| `index.ts` | 15 | 导出入口:`createBridgeClient`、`BROWSER_TOOLS`、`createChromeSocketClient`、`createClaudeForChromeMcpServer`、`localPlatformLabel` + 类型导出 | |
| 81 | +| `types.ts` | 134 | 类型定义:`Logger`、`PermissionMode`、`BridgeConfig`、`ChromeExtensionInfo`、`ClaudeForChromeContext`、`SocketClient`、`BridgePermissionRequest/Response`、`PermissionOverrides` | |
| 82 | +| `browserTools.ts` | 546 | 17 个浏览器工具定义(MCP tool schema) | |
| 83 | +| `mcpServer.ts` | 96 | MCP Server 创建:注册 `ListTools`/`CallTool` handler,选择 socket/bridge 传输 | |
| 84 | +| `mcpSocketClient.ts` | 493 | Unix Socket 客户端:连接 Chrome Native Messaging Host,JSON-RPC 通信 | |
| 85 | +| `mcpSocketPool.ts` | 327 | Socket 连接池:多 Chrome profile 支持,按 tabId 路由 | |
| 86 | +| `bridgeClient.ts` | 1126 | Bridge WebSocket 客户端:连接 Anthropic bridge 服务,扩展发现、设备配对、权限管理 | |
| 87 | +| `toolCalls.ts` | 301 | 工具调用路由:连接状态处理、结果转换、权限模式切换、浏览器切换 | |
| 88 | + |
| 89 | +### 17 个浏览器工具 |
| 90 | + |
| 91 | +| 工具名 | 功能 | |
| 92 | +|--------|------| |
| 93 | +| `javascript_tool` | 在页面上下文执行 JavaScript | |
| 94 | +| `read_page` | 获取页面可访问性树(DOM) | |
| 95 | +| `find` | 自然语言搜索页面元素 | |
| 96 | +| `form_input` | 填写表单字段 | |
| 97 | +| `computer` | 鼠标键盘操作 + 截图(13 种 action) | |
| 98 | +| `navigate` | URL 导航 / 前进后退 | |
| 99 | +| `resize_window` | 调整浏览器窗口尺寸 | |
| 100 | +| `gif_creator` | GIF 录制和导出 | |
| 101 | +| `upload_image` | 图片上传到文件输入框或拖拽区域 | |
| 102 | +| `get_page_text` | 提取页面纯文本 | |
| 103 | +| `tabs_context_mcp` | 获取当前标签组信息 | |
| 104 | +| `tabs_create_mcp` | 创建新标签页 | |
| 105 | +| `update_plan` | 向用户提交操作计划供审批 | |
| 106 | +| `read_console_messages` | 读取浏览器控制台日志 | |
| 107 | +| `read_network_requests` | 读取网络请求 | |
| 108 | +| `shortcuts_list` | 列出可用快捷方式 | |
| 109 | +| `shortcuts_execute` | 执行快捷方式 | |
| 110 | +| `switch_browser` | 切换到其他 Chrome 浏览器(仅 bridge 模式) | |
| 111 | + |
| 112 | +### 外部依赖 |
| 113 | + |
| 114 | +| 依赖 | 用途 | 我们项目是否已有 | |
| 115 | +|------|------|----------------| |
| 116 | +| `ws` | WebSocket 客户端(bridge 模式) | ✅ 有 | |
| 117 | +| `@modelcontextprotocol/sdk` | MCP Server + 类型 | ✅ 有 | |
| 118 | +| `fs`/`net`/`os`/`path` | Node.js 内置 | ✅ | |
| 119 | + |
| 120 | +## 5. 修复步骤 |
| 121 | + |
| 122 | +### 步骤 1:复制完整实现到 stub 包目录 |
| 123 | + |
| 124 | +```bash |
| 125 | +# 从参考项目复制 7 个文件(覆盖现有的 1 个 stub) |
| 126 | +cp "E:/源码/claude-code-source-main/claude-code-source-main/deps/@ant/claude-for-chrome-mcp/src/"*.ts \ |
| 127 | + "E:/源码/Claude-code-bast/packages/@ant/claude-for-chrome-mcp/src/" |
| 128 | +``` |
| 129 | + |
| 130 | +复制后 `packages/@ant/claude-for-chrome-mcp/src/` 应包含 8 个文件: |
| 131 | + |
| 132 | +``` |
| 133 | +packages/@ant/claude-for-chrome-mcp/src/ |
| 134 | +├── index.ts ← 覆盖 stub(15 行,导出入口) |
| 135 | +├── types.ts ← 新增(134 行) |
| 136 | +├── browserTools.ts ← 新增(546 行) |
| 137 | +├── mcpServer.ts ← 新增(96 行) |
| 138 | +├── mcpSocketClient.ts ← 新增(493 行) |
| 139 | +├── mcpSocketPool.ts ← 新增(327 行) |
| 140 | +├── bridgeClient.ts ← 新增(1126 行) |
| 141 | +└── toolCalls.ts ← 新增(301 行) |
| 142 | +``` |
| 143 | + |
| 144 | +### 步骤 2:验证构建 |
| 145 | + |
| 146 | +```bash |
| 147 | +bun run build |
| 148 | +``` |
| 149 | + |
| 150 | +不需要改 `scripts/dev.ts` 或 `build.ts`(无 feature flag)。 |
| 151 | + |
| 152 | +### 步骤 3:功能验证 |
| 153 | + |
| 154 | +```bash |
| 155 | +# 启动(手动启用 chrome) |
| 156 | +bun run dev -- --chrome |
| 157 | + |
| 158 | +# 在 REPL 中: |
| 159 | +# 1. /chrome 命令应显示 Chrome 设置菜单 |
| 160 | +# 2. 如果 Chrome 扩展已安装 → 状态显示 "Enabled" |
| 161 | +# 3. 如果未安装 → 提示安装扩展链接 |
| 162 | +``` |
| 163 | + |
| 164 | +## 6. 验证测试项 |
| 165 | + |
| 166 | +### 6.1 构建验证 |
| 167 | + |
| 168 | +| 测试项 | 预期结果 | 验证命令 | |
| 169 | +|--------|---------|---------| |
| 170 | +| build 成功 | 无报错 | `bun run build` | |
| 171 | +| BROWSER_TOOLS 非空 | 产物中包含 17 个工具定义 | `grep "javascript_tool" dist/*.js` | |
| 172 | +| createClaudeForChromeMcpServer 非 null | 产物中包含 MCP Server 创建逻辑 | `grep "ListToolsRequestSchema" dist/*.js` | |
| 173 | +| Bridge WebSocket 逻辑在产物中 | 包含 bridge 连接代码 | `grep "bridge.claudeusercontent.com" dist/*.js` | |
| 174 | + |
| 175 | +### 6.2 命令注册验证 |
| 176 | + |
| 177 | +| 测试项 | 预期结果 | |
| 178 | +|--------|---------| |
| 179 | +| `/chrome` 命令可见 | REPL 中输入 `/chrome` 显示设置菜单 | |
| 180 | +| `--chrome` 参数可用 | `bun run dev -- --chrome` 不报错 | |
| 181 | +| `--no-chrome` 参数可用 | `bun run dev -- --no-chrome` 不报错 | |
| 182 | + |
| 183 | +### 6.3 MCP Server 验证(需要 Chrome 扩展) |
| 184 | + |
| 185 | +| 测试项 | 预期结果 | |
| 186 | +|--------|---------| |
| 187 | +| Chrome 扩展检测 | 已安装扩展时 `/chrome` 显示 "Extension: Installed" | |
| 188 | +| Socket 连接 | 扩展连接后 MCP tools 可用 | |
| 189 | +| BROWSER_TOOLS 注册 | `tabs_context_mcp` 等 17 个工具在 MCP 工具列表中可见 | |
| 190 | + |
| 191 | +### 6.4 工具功能验证(需要 Chrome 扩展 + 连接) |
| 192 | + |
| 193 | +| 测试项 | 预期结果 | |
| 194 | +|--------|---------| |
| 195 | +| `tabs_context_mcp` | 返回当前标签组信息 | |
| 196 | +| `navigate` | 能导航到指定 URL | |
| 197 | +| `computer` + `screenshot` | 返回页面截图 | |
| 198 | +| `read_page` | 返回 DOM 可访问性树 | |
| 199 | +| `javascript_tool` | 执行 JS 并返回结果 | |
| 200 | + |
| 201 | +### 6.5 不影响现有功能 |
| 202 | + |
| 203 | +| 测试项 | 预期结果 | |
| 204 | +|--------|---------| |
| 205 | +| 不带 `--chrome` 启动 | 正常运行,无 chrome 相关报错 | |
| 206 | +| `/voice` 命令 | 不受影响 | |
| 207 | +| `/schedule` 命令 | 不受影响 | |
| 208 | +| `bun test` | 现有测试全部通过 | |
| 209 | + |
| 210 | +## 7. 改动总结 |
| 211 | + |
| 212 | +| 操作 | 文件 | 说明 | |
| 213 | +|------|------|------| |
| 214 | +| 覆盖 stub | `packages/@ant/claude-for-chrome-mcp/src/index.ts` | 6 行 stub → 15 行完整导出 | |
| 215 | +| 新增 | `packages/@ant/claude-for-chrome-mcp/src/types.ts` | 134 行类型定义 | |
| 216 | +| 新增 | `packages/@ant/claude-for-chrome-mcp/src/browserTools.ts` | 546 行,17 个工具定义 | |
| 217 | +| 新增 | `packages/@ant/claude-for-chrome-mcp/src/mcpServer.ts` | 96 行 MCP Server | |
| 218 | +| 新增 | `packages/@ant/claude-for-chrome-mcp/src/mcpSocketClient.ts` | 493 行 Socket 客户端 | |
| 219 | +| 新增 | `packages/@ant/claude-for-chrome-mcp/src/mcpSocketPool.ts` | 327 行连接池 | |
| 220 | +| 新增 | `packages/@ant/claude-for-chrome-mcp/src/bridgeClient.ts` | 1126 行 Bridge 客户端 | |
| 221 | +| 新增 | `packages/@ant/claude-for-chrome-mcp/src/toolCalls.ts` | 301 行工具调用路由 | |
| 222 | + |
| 223 | +**不改动**:`src/` 下所有文件(已与参考项目一致)、`scripts/dev.ts`、`build.ts`。 |
| 224 | + |
| 225 | +## 8. 运行时依赖 |
| 226 | + |
| 227 | +| 依赖 | 必需? | 说明 | |
| 228 | +|------|--------|------| |
| 229 | +| Chrome 浏览器 | 是 | 需安装 Chrome | |
| 230 | +| Claude in Chrome 扩展 | 是 | 从 https://claude.ai/chrome 安装 | |
| 231 | +| claude.ai OAuth 登录 | Bridge 模式需要 | 本地 Socket 模式不需要 | |
| 232 | +| Native Messaging Host | 本地 Socket 需要 | 扩展安装时自动注册 | |
| 233 | + |
| 234 | +## 9. 与 /voice、/schedule 恢复方式对比 |
| 235 | + |
| 236 | +| 项 | `/schedule` | `/voice` | Claude in Chrome | |
| 237 | +|---|---|---|---| |
| 238 | +| 编译开关 | `AGENT_TRIGGERS_REMOTE` | `VOICE_MODE` | **无需** | |
| 239 | +| 改 dev.ts/build.ts | ✅ | ✅ | **不需要** | |
| 240 | +| 缺失的 vendor 二进制 | 无 | `.node` 文件 | 无 | |
| 241 | +| 需要替换的 stub | 无 | `audio-capture-napi` | `@ant/claude-for-chrome-mcp`(7 个文件) | |
| 242 | +| 改动 src/ 源码 | 无 | 无 | 无 | |
| 243 | +| 平台限制 | 无 | 需原生 `.node` | 需 Chrome 浏览器 | |
0 commit comments