内容
# 代码索引计算机使用MCP
版本0.3.0公开了官方签名的macOS计算机使用能力,作为Pi和MCP客户端的直接类型化工具。调用代理自行选择每个工具和参数。
主要路径:
- 没有嵌套模型调用;
- 没有模型生成的行动计划;
- 没有子代理;
- 没有发送到Codex的提示;
- 没有单独的模型令牌使用。
它使用OpenAI的签名`codex app-server`作为捆绑计算机使用MCP客户端的官方主机。当前的官方`mcpServer/tool/call` API需要一个加载的线程标识符,因此桥接器创建一个空的、内存中的、零回合上下文(`ephemeral: true`,`turns: []`,`path: null`)。它永远不会调用`turn/start`,如果出现任何`turn/*`或`item/*`模型活动,则会失败并关闭。
> **独立项目。** 本项目不是OpenAI的产品,也不受OpenAI的认可。app-server API被标记为实验性,固定的ChatGPT捆绑路径可能会更改。
## 直接工具
Pi注册命名空间工具以避免与Pi内置工具发生冲突。MCP服务器公开上游方法名称。
| Pi工具 | MCP方法 | 无权限 | 目的 |
| --- | --- | ---: | --- |
| `computer_use_list_apps` | `list_apps` | 是 | 列出正在运行和最近使用的应用程序 |
| `computer_use_get_app_state` | `get_app_state` | 是 | 读取关键窗口截图和可访问性树 |
| `computer_use_click` | `click` | 是 | 点击元素或截图坐标 |
| `computer_use_perform_secondary_action` | `perform_secondary_action` | 是 | 调用命名可访问性操作 |
| `computer_use_set_value` | `set_value` | 是 | 分配可访问性值 |
| `computer_use_select_text` | `select_text` | 是 | 选择文本或放置光标 |
| `computer_use_scroll` | `scroll` | 是 | 滚动元素 |
| `computer_use_drag` | `drag` | 是 | 在截图坐标之间拖动 |
| `computer_use_press_key` | `press_key` | 是 | 发送键或键组合 |
| `computer_use_type_text` | `type_text` | 是 | 输入文字 |
MCP外观保留官方签名帮助程序的工具描述、输入模式和注释。Pi外观保留其描述和输入模式;Pi的工具API不公开MCP注释。特别是,所有十个MCP方法都有`destructiveHint: false`;包装器不会混淆更改UI状态与破坏性行为或添加官方模式中不存在的参数限制。
Pi 0.80.7及更新版本注册了所有十个定义,但最初只激活`computer_use_list_apps`和`computer_use_get_app_state`。成功的`get_app_state`调用会累加激活其他八个交互定义,以便进行后续模型请求。其他活动Pi和扩展工具保持活动。延迟激活的工具省略`promptSnippet`和`promptGuidelines`,允许Pi的原生延迟加载路径保留稳定的系统提示前缀。
根据官方合同,Pi(而非嵌套规划器)在与应用程序交互之前每次调用`computer_use_get_app_state`,然后自行选择并执行操作。
## 授权策略:持久无权限
`no-permissions`在这里有一个确切的含义:**包装器不询问权限问题,并公开所有十个官方操作**。它是唯一的模式和持久的默认值。没有安全/完整性选择器、配置文件、环境覆盖、斜杠命令、CLI开关、每次调用的提升、应用程序允许列表、意图分类器、任务模式、每次操作的确认、特殊情况应用程序策略或方法门控。
app-server运行时使用官方的完全访问组合:`approvalPolicy: "never"`和`sandbox: "danger-full-access"`。在固定的Codex主机中,这映射到禁用的权限配置文件,并自动接受空模式MCP批准询问。因此,正常的计算机使用应用程序访问检查在没有每次应用程序提示的情况下继续进行,就像在Codex完全访问中一样。桥接器不会编辑服务的持久每个捆绑批准文件。如果app-server发出询问而不是在完全访问下解决它,桥接器仍然会忠实地将其转发给调用客户端;不支持的客户端返回`cancel`,而不是伪造的`accept`或`decline`。
无权限不绕过:
- macOS屏幕录制、可访问性或TCC控件;
- 严格的OpenAI团队ID和代码签名检查;
- 确切的上游十工具模式验证;
- 规范的应用程序身份解析和每个用户/每个应用程序的内核锁,跨Pi和MCP状态根共享;
- 焦点遥测、超时、验证的过程树清理或私有审计日志。
## 为什么需要签名的app-server
直接从普通的Pi/Node父级调用签名的`SkyComputerUseClient mcp`二进制文件可以成功初始化并列出所有十个模式,但实际调用会被拒绝,错误为:
```text
计算机使用服务器错误-10000:发送者进程未通过身份验证
```
OpenAI的app-server公开了一个记录的`mcpServer/tool/call`端点。该端点直接调用配置的MCP工具;不需要模型回合。从签名的应用程序捆绑二进制文件运行它在不注入、重新签名、TCC更改、私有套接字仿真或凭证提取的情况下保留官方的负责进程/身份验证链。
参见 [`ARCHITECTURE.md`](ARCHITECTURE.md) 获取源链接和完整的限制清单。
## 要求
- macOS
- Node.js 22 或更新版本
- Pi 0.80.7 或更新版本,用于原生渐进式工具披露
- 官方的ChatGPT macOS应用程序,位于 `/Applications/ChatGPT.app`
- 官方的计算机使用组件已安装
直接桥接器使用新的私有`CODEX_HOME`启动app-server,其中不包含帐户凭证,并且只有一个配置的MCP服务器:官方计算机使用。它不继承用户的Codex MCP服务器、插件、历史记录、记忆、API密钥或身份验证文件。它选择一个非WebSocket虚拟模型提供程序,绑定到无法访问的环回地址,禁用插件/远程控制功能,并且永远不会启动一个回合;这可以防止app-server模型预热或响应API流量。
### 锁定屏幕限制
版本0.3.0支持直接本地调用在解锁的macOS会话中。它不支持Mac锁定后的窗口或可访问性操作。
OpenAI的 [锁定计算机使用](https://developers.openai.com/codex/app/computer-use#use-computer-use-while-your-mac-is-locked)仅限于从连接的设备启动的活动、受信任的ChatGPT回合。它不授权其他应用程序或本地进程解锁Mac。此软件包使用本地零回合调度,因此目标调用在Mac锁定后可能会失败,出现官方错误`-10005`。对锁定本地使用的支持仍然是一个后续工作,不包含在版本0.3.0中。
## Pi集成
从npm安装确切的版本:
```bash
pi install npm:codex-computer-use-mcp@0.3.0
```
要评估源代码检查:
```bash
npm ci
npm run build
pi -ne -e /absolute/path/to/codex-computer-use-mcp/integrations/pi/index.ts
```
命令:
```text
/computer-use-status
```
原生Pi适配器是主要的产物路径。它直接注册所有十个类型化工具,每个会话都以两个检查工具激活,并累加激活八个交互工具,以便进行后续应用程序检查。它不公开模式更改命令或包装器生成的批准UI。官方应用程序访问批准询问由Codex完全访问解决后才到达Pi。app-server发出的任何询问都通过Pi的UI显示,并且只有用户的选择返回给服务。
## MCP服务器
在没有参数的情况下运行二进制文件会启动一个stdio MCP服务器,公开相同的十个直接方法以及`computer_use_status`:
```bash
node dist/mcp-server.js
```
对于Pi的通用MCP网关,请保持`directTools: false`,以便此强大的表面保持有意:
```json
{
"mcpServers": {
"computer-use": {
"command": "node",
"args": ["/absolute/path/to/codex-computer-use-mcp/dist/mcp-server.js"],
"lifecycle": "lazy",
"requestTimeoutMs": 180000,
"directTools": false
}
}
}
```
通用MCP服务器公开相同的无权限行为:官方Codex完全访问,无包装器权限门控,以及所有十个方法。应用程序访问批准在官方主机内解决。app-server发出的任何标准表单或URL询问都作为MCP `elicitation/create`请求转发。上游客户端响应不变;不支持或无头客户端取消而不是伪造决策。
## 安全性和隐私
每次调用:
1. 验证类型化参数;
2. 应用具有无模式或提示分支的单个持久无权限策略;
3. 将目标解析为规范的已安装捆绑ID;
4. 获取跨所有支持的客户端和状态根共享的固定每个用户/每个应用程序的内核锁;
5. 启动全局焦点遥测;
6. 验证固定的OpenAI签名代理/客户端二进制文件;
7. 启动无凭证隔离的app-server进程树,禁用模型传输;
8. 需要明确的`ephemeral: true`、`turns: []`和`path: null`证明;
9. 验证确切的上游十工具清单和模式;
10. 发出确切的`mcpServer/tool/call`;
11. 拒绝任何模型回合通知,包括在拆除期间;
12. 结合部分保留的祖先枚举和私有工作目录所有权恢复,然后冻结、终止和验证app-server以及单独分组或重新分组的帮助程序;最后,它删除临时状态、释放锁并写入具有单独代理/租赁清理证据的内容安全审计。
焦点检查是检测/完成标准,而不是预防性macOS沙盒。如果目标变为最前面的,调用报告为失败,即使单个官方操作可能已经完成。
工具结果可能包含可见的目标应用程序文本或截图,因为这是计算机使用的目的。它们仅返回给调用的Pi/MCP客户端。审计永远不会保留参数、类型化值、截图、应用程序状态有效载荷、结果文本、提示、凭证或令牌 - 只有诸如方法、规范/哈希应用程序标识、字节数、内容类型、结果、焦点、代理版本和零回合证据等有界元数据。
## 状态和迁移
审计状态默认为`~/.direct-computer-use`;使用`CODEX_COMPUTER_USE_HOME`覆盖。权限策略不从该代理可写路径读取:无权限编译为唯一接口。遗留`config.json`文件被忽略。
参见 [`MIGRATION.md`](MIGRATION.md) 获取版本0.1迁移、源代码验收、回滚和冲突避免。
## 开发
```bash
npm ci
npm run check
npm run check:pi
npm test
npm run build
npm audit --omit=dev
npm pack --dry-run
```
注册表依赖项tarball使用完整性精确固定,软件包包括`npm-shrinkwrap.json`。
参见 [`PROOF.md`](PROOF.md)、 [`SECURITY.md`](SECURITY.md)和 [`CONTRIBUTING.md`](CONTRIBUTING.md)。
## 许可证
MIT