开源 Mac MCP:让 ChatGPT 和 Claude 直接操作你的 Mac,原生 Swift + 52 个工具

当 ChatGPT 和 Claude 不再只负责“告诉你怎么做”,而是真的能读取项目、检查 Git、运行任务、修改文件时,Agent 才算真正进入了本地工作流。
但问题也随之而来:怎样让云端 AI 操作真实 Mac,同时避免把一个无限制 Shell 直接暴露到公网?
最近我把自己一直在用的工具整理成了一个完整项目,并正式开源:Mac MCP v3.0.0。
它是一个原生 SwiftUI 菜单栏应用,通过标准 MCP(Model Context Protocol)同时连接 ChatGPT 和 Claude。应用内置本地 Runtime、权限策略、审计、持久任务、PTY、Keychain 和 frpc 隧道。用户不需要额外安装 Python、Node.js,也不是在脚本外面简单套一个 GUI。
项目地址:https://github.com/zhaoxinyi02/MY_GPT
首个 Release:https://github.com/zhaoxinyi02/MY_GPT/releases/tag/v3.0.0
一、为什么要做 Mac MCP?
云端大模型默认看不到你的本地项目、文件系统和运行环境。常见解决方案通常有两个极端:
- 继续复制粘贴代码、日志和命令结果,安全但效率低;
- 直接开放 SSH 或无限制 Shell,能力很强,但风险不可接受。
我希望获得的是中间那一层:
- 能力必须是真实的,而不是界面上的假开关;
- 文件读写和命令执行必须有工作区边界;
- AI 的每次敏感操作都应该被审计;
- 长任务不能因为一次请求结束就消失;
- 编码 Agent 修改代码时,应该先隔离、看 diff,再批准应用;
- ChatGPT 和 Claude 应该共用同一个标准接口,而不是维护两套插件。
这就是 Mac MCP 的设计目标。
二、整体架构:云端 AI 怎么连到家里的 Mac?
ChatGPT 和 Claude 都运行在云端,它们无法访问 localhost,也无法直接访问家庭局域网地址。因此完整链路中必须有一个具备公网 IPv4 的服务器。
ChatGPT / Claude
│
│ HTTPS + Streamable HTTP MCP
▼
你的域名 + Nginx(公网服务器)
│
▼
frps :7000 ────── 127.0.0.1:18080
▲
│ TCP + TLS 反向隧道
│
Mac MCP 内置 frpc
│
▼
原生 Swift MCP Runtime :8765
│
├─ Policy / Audit / SQLite / Keychain
├─ Files / Git / Workspace / Assets
├─ Job Manager / PTY Broker
└─ Isolated Codex Agent Worktree
这里有一个容易误解的点:公网服务器不是在远程执行 Mac 命令。它只负责 HTTPS 和反向转发,真正的 Runtime 始终监听在 Mac 的 127.0.0.1:8765。
三、不是 Python 套壳:原生 macOS Runtime
Mac MCP v3 的桌面界面、菜单栏生命周期、MCP Server、策略层、Job Manager、PTY Broker、SQLite、Keychain 和 Agent 编排都使用 Swift 实现。
关闭窗口以后,菜单栏、Runtime 和隧道继续后台运行;只有明确退出应用才会停止本地服务。

在开启写入与命令权限后,目前 Runtime 会动态暴露 52 个 MCP 工具,主要分为以下几组:
| 工具组 | 主要能力 |
|---|---|
| Runtime 与策略 | 健康检查、客户端身份、ABAC 策略、事件、审计 |
| 文件与项目 | 文件读取、检索、元数据、项目发现、Git 状态 |
| 安全写入 | SHA-256 并发校验、dry-run、自动备份、补丁应用 |
| Secret | macOS Keychain 存储,元数据和真实值分离 |
| Job Manager | 启动、日志、输入、暂停、恢复、取消、结果、产物 |
| PTY Broker | 持久终端、读写、expect、resize、signal、GC |
| Agent Runner | 临时 Git worktree、Codex sandbox、diff、审批 |
工具列表不是固定写死的。关闭“允许写入文件”或“允许运行命令”以后,相应工具会直接从 tools/list 消失,而不是按钮关了但后台仍然能调用。
四、安全设计:给 Agent 能力,也给它边界
Mac MCP 的核心不是“能执行命令”,而是把真实能力放进可见、可审计的边界中。
1. 四档权限
safe:优先只读与诊断;workspace:限制在指定工作区;trusted:适合明确受信任的自动化;unrestricted:只允许限时开启,默认 1 小时后回退。
2. 文件并发安全
写入工具支持 expectedSha256。当文件在 Agent 读取后被其他程序修改,写入会因为哈希不一致而失败,避免静默覆盖用户的新内容。
同时支持:
dryRun:先预览,不落盘;- 时间戳备份;
- 工作区逃逸检查;
.env、SSH、Git 内部文件等保护路径。
3. Secret 与审计
Secret 的真实值保存在 macOS Keychain。SQLite 只保存名称、用途等元数据,审计内容在写入数据库前完成脱敏。
4. Agent 代码隔离
编码 Agent 不会直接在原项目里边跑边改。它会创建临时 Git worktree,并使用 Codex 的 workspace-write sandbox。任务完成后先读取完整 diff,再通过 agent_task_approve 应用回原工作区。
项目明确不提供通用 root shell,也没有 force-push 工具。
五、部署前必须具备的条件
这部分不能省略。要让云端 ChatGPT/Claude 访问你的 Mac,需要:
- Apple Silicon Mac,macOS 13 或更高版本;
- 一台具有公网 IPv4 的 Linux 服务器;
- 一个域名或独立子域名,A 记录指向服务器;
- 受公开信任的 HTTPS 证书;
- 服务器放行 TCP
80、443和 frps 端口(例如7000); - ChatGPT 或 Claude 账号支持自定义远程 MCP Connector。
不要把 Mac 的 8765 端口直接映射到公网。正确方式是:Nginx 终止 HTTPS,frps/frpc 建立 TCP+TLS 隧道,本地 Runtime 继续只监听回环地址。
六、推荐安装方式:让 Agent 阅读教程后帮你部署
项目提供了适合 Agent 直接阅读的中英文教程。推荐把下面这段提示词发给 Codex、Claude Code 或其他你信任的编码 Agent:
请阅读 https://raw.githubusercontent.com/zhaoxinyi02/MY_GPT/master/docs/SETUP.zh-CN.md
并帮我从零部署 Mac MCP。任何修改前先向我询问缺少的参数;不要输出、提交或上传
我的 SSH 私钥、frp Token 和 MCP 路径密钥;修改服务器配置前先备份,并逐层验证部署结果。
Agent 接下来应该向你询问,而不是自行编造以下内容:
- 公网服务器 IP;
- SSH 用户、端口和私钥路径;
- MCP 域名;
- frps 端口和远端转发端口;
- Mac 工作区路径;
- 期望使用的权限档位。
完整中文教程:https://github.com/zhaoxinyi02/MY_GPT/blob/master/docs/SETUP.zh-CN.md
七、连接 ChatGPT 和 Claude
应用四项状态全部变绿后,点击“复制”获取完整 MCP 地址:
https://mcp.example.com/mcp/<private-secret>
随机路径本身相当于 Bearer 凭据,不能出现在公开截图、Issue 或日志中。应用界面默认将其显示为 <private-secret>,复制按钮仍会复制真实地址。
ChatGPT
进入:
Settings → Apps & Connectors → Advanced settings → Developer mode
创建新 App,将 Server URL 设置为完整地址,Authentication 选择 None。
Claude
进入:
Settings → Connectors → Add custom connector
名称填写 Mac MCP,粘贴完整地址,OAuth Client ID 和 Secret 留空。Claude 还需要在实际会话中启用这个 Connector。
首次连接建议让模型执行:
请调用 runtime_diagnostics,报告 apiVersion、schemaVersion 和 rootShell 状态。
确认成功以后,再测试只读文件工具,最后才考虑开启写入和命令权限。
八、从源码构建
需要 Xcode Command Line Tools。构建脚本会自动下载固定版本的 frpc v0.70.0 并校验 SHA-256,不会把开发者本机 .env、服务器 IP 或 Token 打进安装包。
git clone https://github.com/zhaoxinyi02/MY_GPT.git
cd MY_GPT
bash scripts/build-native-app.sh
ditto "dist/Mac MCP.app" "/Applications/Mac MCP.app"
首个公开版本使用 ad-hoc 签名,暂时还没有 Apple Notarization。核对 Release 的 SHA-256 后,如果 Gatekeeper 阻止启动:
xattr -dr com.apple.quarantine "/Applications/Mac MCP.app"
open "/Applications/Mac MCP.app"
九、开源仓库里已经配置了什么?
为了让项目适合社区协作,仓库已经配置:
- 中英文 README 与部署教程;
- Bug、Feature、Setup Issue Form;
- Pull Request 模板和 CODEOWNERS;
- CI 原生 macOS 构建与 Bundle 安全检查;
- Gitleaks 历史 Secret Scan;
- Dependabot、自动标签和 Release Drafter;
- Release 自动构建、ZIP 打包与 SHA-256;
- Branch Protection、Review、禁止强推与私密漏洞报告。
真实 .env、SSH 私钥、frpc Token、日志和本机配置从未进入公开仓库。
十、总结
我并不想再做一个聊天窗口。Mac MCP 更关心的是:怎样给 AI 一双真正能工作的手,同时让这双手可控、可审计、可撤回。
如果你也在研究 MCP、本地 Agent、Claude/ChatGPT 工具调用或 macOS 自动化,欢迎试用、提 Issue 或提交 PR。
- GitHub:https://github.com/zhaoxinyi02/MY_GPT
- v3.0.0 Release:https://github.com/zhaoxinyi02/MY_GPT/releases/tag/v3.0.0
- 中文教程:https://github.com/zhaoxinyi02/MY_GPT/blob/master/docs/SETUP.zh-CN.md
MCP、ChatGPT、Claude、AI Agent、macOS、SwiftUI、开源
更多推荐




所有评论(0)