|
| 1 | +# Computer Use MCP 工具测试报告 |
| 2 | + |
| 3 | +> 测试日期: 2026-04-04 |
| 4 | +> 测试环境: macOS Darwin 25.4.0, Cursor (IDE tier: click) |
| 5 | +> MCP Server: `@ant/computer-use-mcp` |
| 6 | +
|
| 7 | +## 工具总览 |
| 8 | + |
| 9 | +共 17 个工具(含 batch 复合操作),分为 5 大类: |
| 10 | + |
| 11 | +| 类别 | 工具 | 数量 | |
| 12 | +|------|------|------| |
| 13 | +| 截图/显示 | `screenshot`, `switch_display`, `zoom` | 3 | |
| 14 | +| 鼠标操作 | `left_click`, `right_click`, `double_click`, `triple_click`, `middle_click`, `left_click_drag`, `mouse_move` | 7 | |
| 15 | +| 键盘操作 | `key`, `type`, `hold_key` | 3 | |
| 16 | +| 状态查询 | `cursor_position`, `request_access` | 2 | |
| 17 | +| 复合/辅助 | `computer_batch`, `wait` | 2 | |
| 18 | + |
| 19 | +--- |
| 20 | + |
| 21 | +## 测试结果 |
| 22 | + |
| 23 | +### 1. 权限管理 |
| 24 | + |
| 25 | +#### `request_access` — 请求应用访问权限 |
| 26 | + |
| 27 | +| 项目 | 结果 | |
| 28 | +|------|------| |
| 29 | +| 状态 | ✅ 通过 | |
| 30 | +| 行为 | 弹出系统对话框请求用户授权,支持批量申请多个应用 | |
| 31 | +| 返回 | `{ granted: [...], denied: [...], tierGuidance: "..." }` | |
| 32 | +| 权限分级 | `click`(仅点击), `full`(完整控制) | |
| 33 | +| 说明 | IDE 类应用(Cursor、VSCode、Terminal)默认授予 `click` tier,限制键盘输入和右键操作;系统应用(System Settings)授予 `full` tier | |
| 34 | + |
| 35 | +#### 已授权应用 |
| 36 | + |
| 37 | +| 应用 | Tier | 能力 | |
| 38 | +|------|------|------| |
| 39 | +| Cursor | click | 可见 + 纯左键点击(无键盘输入、右键、修饰键点击、拖拽) | |
| 40 | +| Terminal | click | 同上 | |
| 41 | +| System Settings | full | 完整控制(键鼠、拖拽等) | |
| 42 | +| Finder | — | 已授权 | |
| 43 | + |
| 44 | +--- |
| 45 | + |
| 46 | +### 2. 截图与显示 |
| 47 | + |
| 48 | +#### `screenshot` — 截取屏幕截图 |
| 49 | + |
| 50 | +| 项目 | 结果 | |
| 51 | +|------|------| |
| 52 | +| 状态 | ⚠️ 部分通过 | |
| 53 | +| 执行 | 工具成功执行,返回 `ok: true` | |
| 54 | +| 图片 | **未返回可视图片内容**(output 为空字符串) | |
| 55 | +| `save_to_disk` | 设置后仍无输出 | |
| 56 | +| 分析 | 可能原因:(1) macOS 屏幕录制权限未授予;(2) 当前前台应用未被过滤导致截图为空;(3) MCP 传输层未正确编码图片数据 | |
| 57 | +| 建议 | 检查 **系统设置 → 隐私与安全性 → 屏幕录制** 是否授权给运行 Claude Code 的应用 | |
| 58 | + |
| 59 | +#### `switch_display` — 切换显示器 |
| 60 | + |
| 61 | +| 项目 | 结果 | |
| 62 | +|------|------| |
| 63 | +| 状态 | ✅ 通过 | |
| 64 | +| 行为 | 接受显示器名称或 `"auto"`(自动选择) | |
| 65 | +| 返回 | 确认消息 | |
| 66 | + |
| 67 | +#### `zoom` — 区域放大截图 |
| 68 | + |
| 69 | +| 项目 | 结果 | |
| 70 | +|------|------| |
| 71 | +| 状态 | ⏭️ 跳过 | |
| 72 | +| 原因 | 依赖 `screenshot` 返回的图片坐标,截图未返回图片无法测试 | |
| 73 | + |
| 74 | +--- |
| 75 | + |
| 76 | +### 3. 鼠标操作 |
| 77 | + |
| 78 | +> 以下测试在 Cursor 窗口上执行(tier: click) |
| 79 | +
|
| 80 | +#### `mouse_move` — 移动鼠标 |
| 81 | + |
| 82 | +| 项目 | 结果 | |
| 83 | +|------|------| |
| 84 | +| 状态 | ✅ 通过 | |
| 85 | +| 输入 | `coordinate: [500, 500]` | |
| 86 | +| 返回 | `"Moved."` | |
| 87 | + |
| 88 | +#### `left_click` — 左键单击 |
| 89 | + |
| 90 | +| 项目 | 结果 | |
| 91 | +|------|------| |
| 92 | +| 状态 | ✅ 通过 | |
| 93 | +| 输入 | `coordinate: [500, 500]` | |
| 94 | +| 返回 | `"Clicked."` | |
| 95 | + |
| 96 | +#### `double_click` — 双击 |
| 97 | + |
| 98 | +| 项目 | 结果 | |
| 99 | +|------|------| |
| 100 | +| 状态 | ✅ 通过 | |
| 101 | +| 输入 | `coordinate: [500, 500]` | |
| 102 | +| 返回 | `"Clicked."` | |
| 103 | + |
| 104 | +#### `triple_click` — 三击 |
| 105 | + |
| 106 | +| 项目 | 结果 | |
| 107 | +|------|------| |
| 108 | +| 状态 | ✅ 通过 | |
| 109 | +| 输入 | `coordinate: [500, 500]` | |
| 110 | +| 返回 | `"Clicked."` | |
| 111 | + |
| 112 | +#### `right_click` — 右键点击 |
| 113 | + |
| 114 | +| 项目 | 结果 | |
| 115 | +|------|------| |
| 116 | +| 状态 | ⚠️ 受 tier 限制 | |
| 117 | +| Cursor (click tier) | ❌ 被拒绝 — `"Code" is granted at tier "click" — right-click, middle-click, and clicks with modifier keys require tier "full"` | |
| 118 | +| Finder (full tier) | ✅ 通过 — 返回 `"Clicked."` | |
| 119 | +| 结论 | 功能正常,IDE 安全限制符合预期 | |
| 120 | + |
| 121 | +#### `middle_click` — 中键点击 |
| 122 | + |
| 123 | +| 项目 | 结果 | |
| 124 | +|------|------| |
| 125 | +| 状态 | ⚠️ 受 tier 限制 | |
| 126 | +| Cursor (click tier) | ❌ 被拒绝 — 同 `right_click`,需要 full tier | |
| 127 | +| Finder (full tier) | ✅ 通过 — 返回 `"Clicked."` | |
| 128 | +| 结论 | 功能正常,IDE 安全限制符合预期 | |
| 129 | + |
| 130 | +#### `left_click_drag` — 拖拽 |
| 131 | + |
| 132 | +| 项目 | 结果 | |
| 133 | +|------|------| |
| 134 | +| 状态 | ⚠️ 受 tier 限制 | |
| 135 | +| Cursor (click tier) | ❌ 被拒绝 — 拖拽被视为修饰键点击,需要 full tier | |
| 136 | +| Finder (full tier) | ✅ 通过 — 返回 `"Dragged."` | |
| 137 | +| 结论 | 功能正常,IDE 安全限制符合预期 | |
| 138 | + |
| 139 | +#### `scroll` — 滚轮滚动 |
| 140 | + |
| 141 | +| 项目 | 结果 | |
| 142 | +|------|------| |
| 143 | +| 状态 | ✅ 通过 | |
| 144 | +| 输入 | `coordinate: [500, 500]`, `scroll_direction: "down"`, `scroll_amount: 3` | |
| 145 | +| 返回 | `"Scrolled."` | |
| 146 | +| 反向 | ✅ `scroll_direction: "up"` 也通过 | |
| 147 | + |
| 148 | +--- |
| 149 | + |
| 150 | +### 4. 键盘操作 |
| 151 | + |
| 152 | +> 以下测试在 Cursor 窗口上执行(tier: click)— 所有键盘操作均被拒绝 |
| 153 | +
|
| 154 | +#### `key` — 按键/快捷键 |
| 155 | + |
| 156 | +| 项目 | 结果 | |
| 157 | +|------|------| |
| 158 | +| 状态 | ⚠️ 受 tier 限制 | |
| 159 | +| Cursor (click tier) | ❌ 被拒绝 — IDE tier 限制键盘输入 | |
| 160 | +| Finder (full tier) | ✅ 通过 — `escape` 按键成功,返回 `"Key pressed."` | |
| 161 | +| 结论 | 功能正常,IDE 安全限制符合预期 | |
| 162 | + |
| 163 | +#### `type` — 输入文本 |
| 164 | + |
| 165 | +| 项目 | 结果 | |
| 166 | +|------|------| |
| 167 | +| 状态 | ⚠️ 受 tier 限制 | |
| 168 | +| Cursor (click tier) | ❌ 被拒绝 — IDE tier 限制文本输入 | |
| 169 | +| Finder (full tier) | ✅ 通过 — 输入 `"hello"` 成功,返回 `"Typed 5 grapheme(s)."` | |
| 170 | +| 结论 | 功能正常,IDE 安全限制符合预期 | |
| 171 | + |
| 172 | +#### `hold_key` — 按住按键 |
| 173 | + |
| 174 | +| 项目 | 结果 | |
| 175 | +|------|------| |
| 176 | +| 状态 | ⚠️ 受 tier 限制 | |
| 177 | +| Cursor (click tier) | ❌ 被拒绝 — IDE tier 限制键盘输入 | |
| 178 | +| Finder (full tier) | ✅ 通过 — 按住 `shift` 1 秒成功,返回 `"Key held."` | |
| 179 | +| 结论 | 功能正常,IDE 安全限制符合预期 | |
| 180 | + |
| 181 | +--- |
| 182 | + |
| 183 | +### 5. 状态查询 |
| 184 | + |
| 185 | +#### `cursor_position` — 获取鼠标位置 |
| 186 | + |
| 187 | +| 项目 | 结果 | |
| 188 | +|------|------| |
| 189 | +| 状态 | ✅ 通过 | |
| 190 | +| 返回 | `{"x": null, "y": null, "coordinateSpace": "image_pixels"}` | |
| 191 | +| 说明 | 坐标为 null 是因为没有成功截图,无参考坐标系 | |
| 192 | + |
| 193 | +--- |
| 194 | + |
| 195 | +### 6. 复合/辅助操作 |
| 196 | + |
| 197 | +#### `computer_batch` — 批量执行操作 |
| 198 | + |
| 199 | +| 项目 | 结果 | |
| 200 | +|------|------| |
| 201 | +| 状态 | ✅ 通过 | |
| 202 | +| 行为 | 按顺序执行操作列表,遇到失败则停止后续操作 | |
| 203 | +| 返回 | `{ completed: [...], failed: {...}, remaining: N }` | |
| 204 | +| 特点 | 单次 API 调用执行多个操作,减少往返延迟 | |
| 205 | +| 错误处理 | 失败的操作会中断后续操作,返回已完成和剩余数量 | |
| 206 | + |
| 207 | +#### `wait` — 等待 |
| 208 | + |
| 209 | +| 项目 | 结果 | |
| 210 | +|------|------| |
| 211 | +| 状态 | ✅ 通过 | |
| 212 | +| 输入 | `duration: 1` (秒) | |
| 213 | +| 返回 | `"Waited 1s."` | |
| 214 | +| 最大值 | 100 秒 | |
| 215 | + |
| 216 | +--- |
| 217 | + |
| 218 | +## 汇总统计 |
| 219 | + |
| 220 | +| 状态 | 数量 | 工具 | |
| 221 | +|------|------|------| |
| 222 | +| ✅ 通过 | 10 | `request_access`, `switch_display`, `mouse_move`, `left_click`, `double_click`, `triple_click`, `scroll`, `cursor_position`, `computer_batch`, `wait` | |
| 223 | +| ⚠️ 部分通过 | 7 | `screenshot`(执行成功但无图片返回), `right_click`, `middle_click`, `left_click_drag`, `key`, `type`, `hold_key`(均在 full tier 应用上通过,IDE click tier 限制是预期行为) | |
| 224 | +| ❌ 被拒绝 | 0 | — | |
| 225 | +| ⏭️ 跳过 | 1 | `zoom`(依赖截图) | |
| 226 | + |
| 227 | +--- |
| 228 | + |
| 229 | +## 已知问题 |
| 230 | + |
| 231 | +### P0: 截图无图片返回 |
| 232 | + |
| 233 | +`screenshot` 工具执行成功但未返回图片内容,导致: |
| 234 | +- 无法获取屏幕坐标参考 |
| 235 | +- `cursor_position` 返回 null 坐标 |
| 236 | +- `zoom` 无法使用 |
| 237 | +- 所有点击操作只能盲点(无截图验证) |
| 238 | + |
| 239 | +**可能原因**: |
| 240 | +1. macOS 屏幕录制权限未授予 |
| 241 | +2. MCP 图片传输/编码问题 |
| 242 | +3. 截图内容被安全过滤机制过滤 |
| 243 | + |
| 244 | +**建议排查**: 检查 `系统设置 → 隐私与安全性 → 屏幕录制` 权限。 |
| 245 | + |
| 246 | +### P1: IDE 应用键盘操作受限 — ✅ 已确认功能正常 |
| 247 | + |
| 248 | +IDE 类应用(Cursor、VSCode、Terminal)被限制在 `click` tier,无法执行: |
| 249 | +- 键盘输入(`key`, `type`, `hold_key`) |
| 250 | +- 右键/中键点击(`right_click`, `middle_click`) |
| 251 | +- 拖拽操作(`left_click_drag`) |
| 252 | + |
| 253 | +这是安全设计,防止 AI 操控 IDE 终端。**在 full tier 应用(Finder、System Settings)上,以上 6 个操作均测试通过,功能完全正常。** |
| 254 | + |
| 255 | +--- |
| 256 | + |
| 257 | +## 权限模型说明 |
| 258 | + |
| 259 | +Computer Use MCP 采用分级权限模型: |
| 260 | + |
| 261 | +``` |
| 262 | +┌─────────────────────────────────────────┐ |
| 263 | +│ Tier: full │ |
| 264 | +│ - 所有鼠标操作(左键、右键、中键、拖拽) │ |
| 265 | +│ - 键盘输入(type, key, hold_key) │ |
| 266 | +│ - 适用于: 系统应用、Finder 等 │ |
| 267 | +├─────────────────────────────────────────┤ |
| 268 | +│ Tier: click │ |
| 269 | +│ - 仅纯左键点击 │ |
| 270 | +│ - 滚轮滚动 │ |
| 271 | +│ - 适用于: IDE、Terminal 等 │ |
| 272 | +├─────────────────────────────────────────┤ |
| 273 | +│ 未授权 │ |
| 274 | +│ - 所有操作被拒绝 │ |
| 275 | +│ - 需通过 request_access 申请 │ |
| 276 | +└─────────────────────────────────────────┘ |
| 277 | +``` |
0 commit comments