xcode-mcp-bridge
Bridges Xcode's mcpbridge to MCP clients via SSE, maintaining a single persistent process to eliminate repeated authorization prompts.
README
Xcode MCP Bridge
让 Xcode 的 mcpbridge 以唯一进程长期稳定驻留,通过 HTTP/SSE 暴露给任意 MCP 客户端(如 WorkBuddy、Claude 等),消除反复授权弹窗。
背景:解决的两个问题
Xcode 自带的 mcpbridge 有两个缺陷,本桥针对性地修复:
| # | mcpbridge 缺陷 | 桥的解法 |
|---|---|---|
| 1 | 对 2025-06-18 协议的 initialize 响应后会主动退出(exit 0) |
桥启动时用 2024-11-05 协议自初始化并缓存能力;客户端发来的 initialize 由桥本地应答(回显客户端协议版本),mcpbridge 进程永不退出 |
| 2 | 不认识 ping(返回 unknown method 'ping') |
桥本地应答 ping,不转发 |
效果:mcpbridge 进程永不换 PID → Xcode 只授权一次 → 不再反复弹窗。
特性
- 🔌 单例 SSE 桥:一个
mcpbridge子进程服务多个 SSE 客户端连接 - 🪶 零依赖:仅使用 Node 内置模块(
http/child_process/crypto) - 🔁 常驻自愈:launchd
KeepAlive自动重启;手动模式可搭配 watchdog - 📍 位置自适应:所有脚本路径由自身位置推导,clone 到任意目录直接可用
工作原理
MCP 客户端 (WorkBuddy / Claude / 其他)
│ HTTP + SSE (127.0.0.1:3811)
▼
┌──────────────────────────────────────┐
│ single-sse-bridge.js │ ← 本地应答 initialize / ping
│ (Node,零第三方依赖) │ 转发其余 JSON-RPC
└──────────────────┬───────────────────┘
│ stdio (JSON-RPC 2.0, 协议 2024-11-05)
▼
┌──────────────────────────────────────┐
│ Xcode mcpbridge 子进程(唯一) │ ← 永不换 PID
└──────────────────────────────────────┘
握手流程:
- 桥启动 → 用
2024-11-05协议向mcpbridge发送initialize并缓存能力/服务信息 - 桥向
mcpbridge发送notifications/initialized(协议要求,否则它不处理请求) - 客户端连上
/sse→ 客户端发initialize→ 桥本地应答(回显客户端协议版本) - 客户端发
ping→ 桥本地应答{} - 其余请求(
tools/list等)→ 转发mcpbridge,响应按 JSON-RPC id 回路由到对应会话
目录结构
xcode-mcp-bridge/
├── src/
│ └── single-sse-bridge.js # 桥主程序(零依赖)
├── scripts/
│ ├── install.sh # 注册 launchd 常驻服务(推荐)
│ ├── start.sh # 手动启动(nohup 后台)
│ ├── stop.sh # 停止
│ ├── status.sh # 健康检查
│ └── xcode-mcp-bridge-watchdog.sh # 手动模式看门狗(每 8s 自愈)
├── launchd/
│ └── com.user.xcode-mcp-bridge.plist # launchd 模板(占位符,install.sh 渲染)
├── logs/ # 运行日志(已被 .gitignore 忽略)
├── package.json # 元数据 + npm scripts(无第三方依赖)
├── CHANGELOG.md
└── README.md
环境要求
- macOS(需 Xcode,含
Contents/Developer/usr/bin/mcpbridge) - Node.js >= 18(推荐 LTS 20;脚本自动探测
node,兼容 nvm)
快速开始
0. 获取代码
git clone git@github.com:qianshang/xcode-mcp-bridge.git
cd xcode-mcp-bridge
1. 安装(launchd 常驻模式,推荐)
bash scripts/install.sh
脚本会自动完成:探测 node 绝对路径 → 渲染 plist 到 ~/Library/LaunchAgents/ → launchctl bootstrap → 健康检查。
2. 验证
curl http://127.0.0.1:3811/healthz # 期望输出: ok
bash scripts/status.sh # 期望输出: bridge OK
3. Xcode 侧配置(两步 GUI)
- Xcode > Settings > Intelligence > Model Context Protocol,打开 "Allow external agents to use Xcode tools"
- 首次连接时,Xcode 弹出的权限对话框点 Allow(之后不再反复弹窗)
4. 在 MCP 客户端中接入
SSE 端点:http://127.0.0.1:3811/sse
常用命令
| 命令 | 说明 |
|---|---|
bash scripts/install.sh |
注册 / 重装 launchd 常驻服务 |
bash scripts/start.sh |
手动启动(后台 nohup) |
bash scripts/stop.sh |
停止 |
bash scripts/status.sh |
健康检查 |
nohup bash scripts/xcode-mcp-bridge-watchdog.sh & |
手动模式自愈看门狗 |
说明:
start.sh/watchdog.sh通过NODE=/path/to/node环境变量可指定 Node 可执行文件。
常见问题
Q: healthz 返回 DOWN?
A: 先确认 Xcode 已打开;再查看 logs/bridge.log。launchd 模式下若持续失败可运行 bash scripts/start.sh 观察输出。
Q: 端口被占用?
A: lsof -i :3811 查看占用进程,确认没有旧桥进程残留后重启。
Q: 仍反复弹授权框?
A: 确认只有一个桥进程(bash scripts/status.sh 正常 + pgrep -f single-sse-bridge 仅 1 个)。多个桥进程会导致 mcpbridge 换 PID。
开源许可
贡献
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。