Mac MCP:ChatGPT + Claude 控制你的 Mac

当 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?

云端大模型默认看不到你的本地项目、文件系统和运行环境。常见解决方案通常有两个极端:

  1. 继续复制粘贴代码、日志和命令结果,安全但效率低;
  2. 直接开放 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 和隧道继续后台运行;只有明确退出应用才会停止本地服务。

Mac MCP 原生状态总览

在开启写入与命令权限后,目前 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 80443 和 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。

MCPChatGPTClaudeAI AgentmacOSSwiftUI开源

Logo

AtomGit AI 社区提供模型库、数据集、Agent、Token等资源

更多推荐