vault backup: 2026-06-09 23:15:17
This commit is contained in:
@@ -1,10 +1,22 @@
|
||||
---
|
||||
tags: [computer-use, mcp, 测试报告, macos, 权限模型]
|
||||
create time: 2026-06-09 22:30
|
||||
---
|
||||
|
||||
# Computer Use MCP 工具测试报告
|
||||
|
||||
## 概述
|
||||
|
||||
对 Computer Use MCP 的 17 个工具进行的完整功能测试报告。测试覆盖权限管理、截图显示、鼠标操作、键盘操作、状态查询和复合操作六大类,重点验证了分级权限模型的安全性。
|
||||
|
||||
> [!info]
|
||||
> 测试日期: 2026-04-04
|
||||
> 测试环境: macOS Darwin 25.4.0, Cursor (IDE tier: click)
|
||||
> MCP Server: `@ant/computer-use-mcp`
|
||||
|
||||
## 工具总览
|
||||
## 正文
|
||||
|
||||
### 工具总览
|
||||
|
||||
共 17 个工具(含 batch 复合操作),分为 5 大类:
|
||||
|
||||
@@ -18,11 +30,11 @@
|
||||
|
||||
---
|
||||
|
||||
## 测试结果
|
||||
### 测试结果
|
||||
|
||||
### 1. 权限管理
|
||||
#### 1. 权限管理
|
||||
|
||||
#### `request_access` — 请求应用访问权限
|
||||
##### `request_access` — 请求应用访问权限
|
||||
|
||||
| 项目 | 结果 |
|
||||
|------|------|
|
||||
@@ -30,9 +42,9 @@
|
||||
| 行为 | 弹出系统对话框请求用户授权,支持批量申请多个应用 |
|
||||
| 返回 | `{ granted: [...], denied: [...], tierGuidance: "..." }` |
|
||||
| 权限分级 | `click`(仅点击), `full`(完整控制) |
|
||||
| 说明 | IDE 类应用(Cursor、VSCode、Terminal)默认授予 `click` tier,限制键盘输入和右键操作;系统应用(System Settings)授予 `full` tier |
|
||||
| 说明 | IDE 类应用默认授予 `click` tier,限制键盘输入和右键操作;系统应用授予 `full` tier |
|
||||
|
||||
#### 已授权应用
|
||||
##### 已授权应用
|
||||
|
||||
| 应用 | Tier | 能力 |
|
||||
|------|------|------|
|
||||
@@ -43,9 +55,9 @@
|
||||
|
||||
---
|
||||
|
||||
### 2. 截图与显示
|
||||
#### 2. 截图与显示
|
||||
|
||||
#### `screenshot` — 截取屏幕截图
|
||||
##### `screenshot` — 截取屏幕截图
|
||||
|
||||
| 项目 | 结果 |
|
||||
|------|------|
|
||||
@@ -54,17 +66,18 @@
|
||||
| 图片 | **未返回可视图片内容**(output 为空字符串) |
|
||||
| `save_to_disk` | 设置后仍无输出 |
|
||||
| 分析 | 可能原因:(1) macOS 屏幕录制权限未授予;(2) 当前前台应用未被过滤导致截图为空;(3) MCP 传输层未正确编码图片数据 |
|
||||
| 建议 | 检查 **系统设置 → 隐私与安全性 → 屏幕录制** 是否授权给运行 Claude Code 的应用 |
|
||||
|
||||
#### `switch_display` — 切换显示器
|
||||
> [!warning]
|
||||
> 建议排查:检查 **系统设置 → 隐私与安全性 → 屏幕录制** 是否授权给运行 Claude Code 的应用。
|
||||
|
||||
##### `switch_display` — 切换显示器
|
||||
|
||||
| 项目 | 结果 |
|
||||
|------|------|
|
||||
| 状态 | ✅ 通过 |
|
||||
| 行为 | 接受显示器名称或 `"auto"`(自动选择) |
|
||||
| 返回 | 确认消息 |
|
||||
|
||||
#### `zoom` — 区域放大截图
|
||||
##### `zoom` — 区域放大截图
|
||||
|
||||
| 项目 | 结果 |
|
||||
|------|------|
|
||||
@@ -73,116 +86,41 @@
|
||||
|
||||
---
|
||||
|
||||
### 3. 鼠标操作
|
||||
#### 3. 鼠标操作
|
||||
|
||||
> 以下测试在 Cursor 窗口上执行(tier: click)
|
||||
|
||||
#### `mouse_move` — 移动鼠标
|
||||
|
||||
| 项目 | 结果 |
|
||||
|------|------|
|
||||
| 状态 | ✅ 通过 |
|
||||
| 输入 | `coordinate: [500, 500]` |
|
||||
| 返回 | `"Moved."` |
|
||||
|
||||
#### `left_click` — 左键单击
|
||||
|
||||
| 项目 | 结果 |
|
||||
|------|------|
|
||||
| 状态 | ✅ 通过 |
|
||||
| 输入 | `coordinate: [500, 500]` |
|
||||
| 返回 | `"Clicked."` |
|
||||
|
||||
#### `double_click` — 双击
|
||||
|
||||
| 项目 | 结果 |
|
||||
|------|------|
|
||||
| 状态 | ✅ 通过 |
|
||||
| 输入 | `coordinate: [500, 500]` |
|
||||
| 返回 | `"Clicked."` |
|
||||
|
||||
#### `triple_click` — 三击
|
||||
|
||||
| 项目 | 结果 |
|
||||
|------|------|
|
||||
| 状态 | ✅ 通过 |
|
||||
| 输入 | `coordinate: [500, 500]` |
|
||||
| 返回 | `"Clicked."` |
|
||||
|
||||
#### `right_click` — 右键点击
|
||||
|
||||
| 项目 | 结果 |
|
||||
|------|------|
|
||||
| 状态 | ⚠️ 受 tier 限制 |
|
||||
| Cursor (click tier) | ❌ 被拒绝 — `"Code" is granted at tier "click" — right-click, middle-click, and clicks with modifier keys require tier "full"` |
|
||||
| Finder (full tier) | ✅ 通过 — 返回 `"Clicked."` |
|
||||
| 结论 | 功能正常,IDE 安全限制符合预期 |
|
||||
|
||||
#### `middle_click` — 中键点击
|
||||
|
||||
| 项目 | 结果 |
|
||||
|------|------|
|
||||
| 状态 | ⚠️ 受 tier 限制 |
|
||||
| Cursor (click tier) | ❌ 被拒绝 — 同 `right_click`,需要 full tier |
|
||||
| Finder (full tier) | ✅ 通过 — 返回 `"Clicked."` |
|
||||
| 结论 | 功能正常,IDE 安全限制符合预期 |
|
||||
|
||||
#### `left_click_drag` — 拖拽
|
||||
|
||||
| 项目 | 结果 |
|
||||
|------|------|
|
||||
| 状态 | ⚠️ 受 tier 限制 |
|
||||
| Cursor (click tier) | ❌ 被拒绝 — 拖拽被视为修饰键点击,需要 full tier |
|
||||
| Finder (full tier) | ✅ 通过 — 返回 `"Dragged."` |
|
||||
| 结论 | 功能正常,IDE 安全限制符合预期 |
|
||||
|
||||
#### `scroll` — 滚轮滚动
|
||||
|
||||
| 项目 | 结果 |
|
||||
|------|------|
|
||||
| 状态 | ✅ 通过 |
|
||||
| 输入 | `coordinate: [500, 500]`, `scroll_direction: "down"`, `scroll_amount: 3` |
|
||||
| 返回 | `"Scrolled."` |
|
||||
| 反向 | ✅ `scroll_direction: "up"` 也通过 |
|
||||
| 工具 | 状态 | 说明 |
|
||||
|------|------|------|
|
||||
| `mouse_move` | ✅ 通过 | `coordinate: [500, 500]` → `"Moved."` |
|
||||
| `left_click` | ✅ 通过 | `coordinate: [500, 500]` → `"Clicked."` |
|
||||
| `double_click` | ✅ 通过 | `coordinate: [500, 500]` → `"Clicked."` |
|
||||
| `triple_click` | ✅ 通过 | `coordinate: [500, 500]` → `"Clicked."` |
|
||||
| `right_click` | ⚠️ 受 tier 限制 | Cursor (click tier) 被拒绝;Finder (full tier) 通过 |
|
||||
| `middle_click` | ⚠️ 受 tier 限制 | 同 `right_click`,需要 full tier |
|
||||
| `left_click_drag` | ⚠️ 受 tier 限制 | 拖拽被视为修饰键点击,需要 full tier |
|
||||
| `scroll` | ✅ 通过 | `scroll_direction: "down"` 和 `"up"` 均通过 |
|
||||
|
||||
---
|
||||
|
||||
### 4. 键盘操作
|
||||
#### 4. 键盘操作
|
||||
|
||||
> 以下测试在 Cursor 窗口上执行(tier: click)— 所有键盘操作均被拒绝
|
||||
|
||||
#### `key` — 按键/快捷键
|
||||
| 工具 | 状态 | 说明 |
|
||||
|------|------|------|
|
||||
| `key` | ⚠️ 受 tier 限制 | Cursor 被拒绝;Finder (full tier) `escape` 成功 |
|
||||
| `type` | ⚠️ 受 tier 限制 | Cursor 被拒绝;Finder 输入 `"hello"` 成功 |
|
||||
| `hold_key` | ⚠️ 受 tier 限制 | Cursor 被拒绝;Finder 按住 `shift` 1 秒成功 |
|
||||
|
||||
| 项目 | 结果 |
|
||||
|------|------|
|
||||
| 状态 | ⚠️ 受 tier 限制 |
|
||||
| Cursor (click tier) | ❌ 被拒绝 — IDE tier 限制键盘输入 |
|
||||
| Finder (full tier) | ✅ 通过 — `escape` 按键成功,返回 `"Key pressed."` |
|
||||
| 结论 | 功能正常,IDE 安全限制符合预期 |
|
||||
|
||||
#### `type` — 输入文本
|
||||
|
||||
| 项目 | 结果 |
|
||||
|------|------|
|
||||
| 状态 | ⚠️ 受 tier 限制 |
|
||||
| Cursor (click tier) | ❌ 被拒绝 — IDE tier 限制文本输入 |
|
||||
| Finder (full tier) | ✅ 通过 — 输入 `"hello"` 成功,返回 `"Typed 5 grapheme(s)."` |
|
||||
| 结论 | 功能正常,IDE 安全限制符合预期 |
|
||||
|
||||
#### `hold_key` — 按住按键
|
||||
|
||||
| 项目 | 结果 |
|
||||
|------|------|
|
||||
| 状态 | ⚠️ 受 tier 限制 |
|
||||
| Cursor (click tier) | ❌ 被拒绝 — IDE tier 限制键盘输入 |
|
||||
| Finder (full tier) | ✅ 通过 — 按住 `shift` 1 秒成功,返回 `"Key held."` |
|
||||
| 结论 | 功能正常,IDE 安全限制符合预期 |
|
||||
> [!info]
|
||||
> IDE 安全限制符合预期:功能在 full tier 应用上完全正常。
|
||||
|
||||
---
|
||||
|
||||
### 5. 状态查询
|
||||
#### 5. 状态查询
|
||||
|
||||
#### `cursor_position` — 获取鼠标位置
|
||||
##### `cursor_position` — 获取鼠标位置
|
||||
|
||||
| 项目 | 结果 |
|
||||
|------|------|
|
||||
@@ -192,30 +130,27 @@
|
||||
|
||||
---
|
||||
|
||||
### 6. 复合/辅助操作
|
||||
#### 6. 复合/辅助操作
|
||||
|
||||
#### `computer_batch` — 批量执行操作
|
||||
##### `computer_batch` — 批量执行操作
|
||||
|
||||
| 项目 | 结果 |
|
||||
|------|------|
|
||||
| 状态 | ✅ 通过 |
|
||||
| 行为 | 按顺序执行操作列表,遇到失败则停止后续操作 |
|
||||
| 返回 | `{ completed: [...], failed: {...}, remaining: N }` |
|
||||
| 特点 | 单次 API 调用执行多个操作,减少往返延迟 |
|
||||
| 错误处理 | 失败的操作会中断后续操作,返回已完成和剩余数量 |
|
||||
|
||||
#### `wait` — 等待
|
||||
##### `wait` — 等待
|
||||
|
||||
| 项目 | 结果 |
|
||||
|------|------|
|
||||
| 状态 | ✅ 通过 |
|
||||
| 输入 | `duration: 1` (秒) |
|
||||
| 返回 | `"Waited 1s."` |
|
||||
| 最大值 | 100 秒 |
|
||||
|
||||
---
|
||||
|
||||
## 汇总统计
|
||||
### 汇总统计
|
||||
|
||||
| 状态 | 数量 | 工具 |
|
||||
|------|------|------|
|
||||
@@ -226,52 +161,45 @@
|
||||
|
||||
---
|
||||
|
||||
## 已知问题
|
||||
### 已知问题
|
||||
|
||||
### P0: 截图无图片返回
|
||||
#### P0: 截图无图片返回
|
||||
|
||||
`screenshot` 工具执行成功但未返回图片内容,导致:
|
||||
|
||||
- 无法获取屏幕坐标参考
|
||||
- `cursor_position` 返回 null 坐标
|
||||
- `zoom` 无法使用
|
||||
- 所有点击操作只能盲点(无截图验证)
|
||||
|
||||
**可能原因**:
|
||||
|
||||
1. macOS 屏幕录制权限未授予
|
||||
2. MCP 图片传输/编码问题
|
||||
3. 截图内容被安全过滤机制过滤
|
||||
|
||||
**建议排查**: 检查 `系统设置 → 隐私与安全性 → 屏幕录制` 权限。
|
||||
> [!warning]
|
||||
> **建议排查**:检查 `系统设置 → 隐私与安全性 → 屏幕录制` 权限。
|
||||
|
||||
### P1: IDE 应用键盘操作受限 — ✅ 已确认功能正常
|
||||
#### P1: IDE 应用键盘操作受限 — ✅ 已确认功能正常
|
||||
|
||||
IDE 类应用(Cursor、VSCode、Terminal)被限制在 `click` tier,无法执行:
|
||||
- 键盘输入(`key`, `type`, `hold_key`)
|
||||
- 右键/中键点击(`right_click`, `middle_click`)
|
||||
- 拖拽操作(`left_click_drag`)
|
||||
|
||||
这是安全设计,防止 AI 操控 IDE 终端。**在 full tier 应用(Finder、System Settings)上,以上 6 个操作均测试通过,功能完全正常。**
|
||||
IDE 类应用(Cursor、VSCode、Terminal)被限制在 `click` tier,无法执行键盘输入、右键/中键点击、拖拽操作。这是安全设计,防止 AI 操控 IDE 终端。**在 full tier 应用上,以上 6 个操作均测试通过。**
|
||||
|
||||
---
|
||||
|
||||
## 权限模型说明
|
||||
### 权限模型说明
|
||||
|
||||
Computer Use MCP 采用分级权限模型:
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
A["Tier: full"] -->|"所有鼠标操作 + 键盘输入"| B["适用于: 系统应用、Finder 等"]
|
||||
C["Tier: click"] -->|"仅纯左键点击 + 滚轮滚动"| D["适用于: IDE、Terminal 等"]
|
||||
E["未授权"] -->|"所有操作被拒绝"| F["需通过 request_access 申请"]
|
||||
```
|
||||
┌─────────────────────────────────────────┐
|
||||
│ Tier: full │
|
||||
│ - 所有鼠标操作(左键、右键、中键、拖拽) │
|
||||
│ - 键盘输入(type, key, hold_key) │
|
||||
│ - 适用于: 系统应用、Finder 等 │
|
||||
├─────────────────────────────────────────┤
|
||||
│ Tier: click │
|
||||
│ - 仅纯左键点击 │
|
||||
│ - 滚轮滚动 │
|
||||
│ - 适用于: IDE、Terminal 等 │
|
||||
├─────────────────────────────────────────┤
|
||||
│ 未授权 │
|
||||
│ - 所有操作被拒绝 │
|
||||
│ - 需通过 request_access 申请 │
|
||||
└─────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 关联笔记
|
||||
|
||||
- [[computer-use]]
|
||||
- [[computer-use-tools-reference]]
|
||||
- [[computer-use-architecture-v2]]
|
||||
|
||||
Reference in New Issue
Block a user