XcodeMCPKit
Xcode MCP的MCP代理(mcpbridge)。\ 设计为当代理启动时,Xcode权限对话框会出现一次。
快速开始
- 启动代理服务器
xcode-mcp-proxy-server --auto-approve- 授予自动批准所需的macOS辅助功能权限。
当你使用 --auto-approve 选项,服务器会监视Xcode的权限对话框并自动单击 允许.
此功能需要macOS辅助功能权限,因此默认情况下会被禁用并选择加入。如果您不想授予该权限,请在不启用的情况下启动服务器 --auto-approve 然后单击 允许 在Xcode中手动。
建筑
看 建筑 关于流程概述。 看 维护者架构 用于模块边界和本地验证命令。
安装
1.安装二进制文件
从源代码构建
swift run -c release xcode-mcp-proxy-install从GitHub版本安装
每个发布标签(v*)出版:
xcode-mcp-proxy.tar.gz(通用二进制)xcode-mcp-proxy-darwin-arm64.tar.gzxcode-mcp-proxy-darwin-x86_64.tar.gzSHA256SUMS.txt
例子:
VERSION=v0.1.0
BASE_URL="https://github.com/lynnswap/XcodeMCPKit/releases/download/${VERSION}"
ARCHIVE="xcode-mcp-proxy.tar.gz"
curl -fL -O "${BASE_URL}/${ARCHIVE}"
curl -fL -O "${BASE_URL}/SHA256SUMS.txt"
grep " ${ARCHIVE}\$" SHA256SUMS.txt | shasum -a 256 -c
tar -xzf "${ARCHIVE}"
mkdir -p "${HOME}/.local/bin"
cp bin/* "${HOME}/.local/bin/"
chmod +x "${HOME}/.local/bin/xcode-mcp-proxy" \
"${HOME}/.local/bin/xcode-mcp-proxy-server" \
"${HOME}/.local/bin/xcode-mcp-proxy-install"如果您更喜欢特定于平台的存档,请选择以下选项之一:
xcode-mcp-proxy.tar.gz:通用二进制xcode-mcp-proxy-darwin-arm64.tar.gz:苹果硅xcode-mcp-proxy-darwin-x86_64.tar.gz:英特尔
可选:更改安装目标
./.build/release/xcode-mcp-proxy-install --prefix "$HOME/.local"
# or
./.build/release/xcode-mcp-proxy-install --bindir "$HOME/bin"2.将安装目录添加到您的 PATH
默认情况下, xcode-mcp-proxy 和 xcode-mcp-proxy-server 安装到 ~/.local/bin.
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc3.在您的MCP客户端中注册代理
替换 xcrun mcpbridge 具有以下之一:
法典
codex mcp remove xcode
# Recommended: Streamable HTTP
codex mcp add xcode --url http://localhost:8765/mcp
# Alternative: STDIO
codex mcp add xcode -- xcode-mcp-proxy克劳德代码
claude mcp remove xcode
claude mcp add --transport stdio xcode -- xcode-mcp-proxy用法
代理服务器: xcode-mcp-proxy-server
有关如何启动,请参阅快速入门。
默认值
- 命令:
xcrun - args:
mcpbridge - 上游工艺:
1(生成多个mcpbridge增加时的过程) - 听:
localhost:8765 - 请求超时:
300秒数(0禁用) - 共享同一MCP会话的请求被FIFO转发,一次一个
- 最大车身尺寸:
1048576字节 - 初始化:如果需要,启动Xcode,在Xcode可用时立即启动,并在Xcode准备就绪后附加
- 发现:
~/Library/Caches/XcodeMCPProxy/endpoint.json
选项
| 选项 | 描述 |
|---|---|
--upstream-command cmd | mcpbridge 命令 |
--upstream-args a,b,c | mcpbridge args(逗号分隔) |
--upstream-arg value | 添加单个 mcpbridge arg |
--upstream-processes n | Spawn n 上游 mcpbridge 进程(默认值:1,最大值:10) |
--session-id id | 显式Xcode MCP会话ID |
--max-body-bytes n | 最大请求正文大小 |
--request-timeout seconds | 请求超时(0 禁用非初始化超时; initialize 仍然使用有界握手超时) |
--config path | 用于覆盖上游握手的代理配置TOML的路径 |
--auto-approve | 选择加入以自动批准Xcode权限对话框 |
--refresh-code-issues-mode mode | 服务 XcodeRefreshCodeIssuesInFile 通过代理导航器问题(proxy,默认)或传递到Xcode实时诊断(upstream) |
--force-restart | 如果侦听端口正在使用中,请终止现有的 xcode-mcp-proxy-server 并重新启动 |
环境变量
| 变量 | 描述 |
|---|---|
LISTEN | 听地址;例子: 127.0.0.1:8765 |
HOST | 听主持人;与...一起使用 PORT 当 LISTEN 未设置 |
PORT | 监听端口;与...一起使用 HOST 当 LISTEN 未设置 |
MCP_XCODE_PID | 穿过上游 mcpbridge;代理本身不会解析它 |
MCP_XCODE_SESSION_ID | 可选的显式上游会话ID |
MCP_XCODE_CONFIG | 代理配置TOML路径; --config 优先 |
MCP_XCODE_REFRESH_CODE_ISSUES_MODE | proxy 或 upstream |
MCP_LOG_LEVEL | 日志级别: trace, debug, info, notice, warning, error, critical |
XCODE_MCP_PROXY_DISCOVERY_FILE | 覆盖隔离的本地/实时测试运行的发现文件路径 |
XCODE_MCP_PROXY_CACHE_ROOT | 在以下情况下覆盖用于导出发现路径的缓存根 XCODE_MCP_PROXY_DISCOVERY_FILE 未设置 |
日志被写入stderr。
维护人员命令
swift test -Xswiftc -strict-concurrency=minimal
XCODE_MCP_RUN_PROCESS_TESTS=1 swift test --no-parallel --filter ProxyProcessTests -Xswiftc -strict-concurrency=minimal
scripts/check.sh
XCODE_MCP_RUN_LIVE_MCPBRIDGE_TESTS=1 swift test --no-parallel --filter ProxyLiveMCPBridgeTests -Xswiftc -strict-concurrency=minimal
XCODE_MCP_RUN_STRESS_TESTS=1 swift test --no-parallel --filter ProxyStressTests -Xswiftc -strict-concurrency=minimal
python3 scripts/benchmark-live-server.py --agents 4 --requests-per-agent 100scripts/check.sh运行默认套件和opt-in流程/管道套件。- 现场直播
mcpbridge套件仅限于本地,故意排除在CI之外。 - live套件使用当前正在运行的Xcode会话,只需要一个Xcode进程,使用
127.0.0.1:0,并在临时路径下写入发现输出。 - 压力套件仅可选择加入,并故意排除在外
scripts/check.sh;它运行高容量HTTP/会话多路复用检查。 scripts/benchmark-live-server.py以已经运行的代理服务器为目标,默认情况下从不运行,scripts/check.sh,或CI。它从以下位置解析终结点--endpoint,XCODE_MCP_PROXY_ENDPOINT,发现文件,然后http://localhost:8765/mcp;非环回端点需要--allow-non-loopback。它将四个代理建模为四个持久HTTP连接/MCP会话,发送100个DocumentationSearch闭环中每个代理的请求,报告吞吐量加上每个请求的延迟百分比,并在退出前删除基准会话。
代理配置
| 键 | 类型 | 默认值 |
|---|---|---|
upstream_handshake.protocolVersion | 字符串 | "2025-03-26" |
upstream_handshake.clientName | 字符串 | "XcodeMCPKit" |
upstream_handshake.clientVersion | 字符串 | "dev" |
upstream_handshake.capabilities | 桌子 | {} |
tools.disabled | 字符串数组 | [] |
如果 clientVersion 如果省略,代理会自动从Xcode解析它 IDEChat*Version 条目匹配 clientName 如果可用。
例子:
[upstream_handshake]
clientName = "XcodeMCPKit"
[tools]
disabled = ["RunAllTests", "RunSomeTests"]禁用的工具已从中删除 tools/list 并被直接拒绝 tools/call 带有工具错误的请求。代理启动时加载配置;重新启动 xcode-mcp-proxy-server 编辑文件后。
适配器: xcode-mcp-proxy
选项
| 选项 | 描述 |
|---|---|
--request-timeout seconds | HTTP请求超时(0 禁用) |
--url url | 显式上游URL(示例: http://localhost:9000/mcp) |
环境变量
| 变量 | 描述 |
|---|---|
XCODE_MCP_PROXY_ENDPOINT | 覆盖上游URL; --url 优先 |
