An MCP proxy for Xcode MCP (mcpbridge).
Designed so the Xcode permission dialog appears once when the proxy starts.
- Start the proxy
xcode-mcp-proxy-server
- Click Allow in Xcode’s permission dialog
See Architecture for the process overview.
swift run -c release xcode-mcp-proxy-installReplace xcrun mcpbridge with xcode-mcp-proxy:
Codex
codex mcp remove xcode
codex mcp add xcode -- xcode-mcp-proxy --stdioClaude Code
claude mcp remove xcode
claude mcp add --transport stdio xcode -- xcode-mcp-proxy --stdioBy default, xcode-mcp-proxy and xcode-mcp-proxy-server are installed to ~/.local/bin. Add it to your PATH if needed.
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrcTo change the destination:
./.build/release/xcode-mcp-proxy-install --prefix "$HOME/.local"
# or
./.build/release/xcode-mcp-proxy-install --bindir "$HOME/bin"See Quick Start for how to launch.
- command:
xcrun - args:
mcpbridge - upstream processes:
1(spawns multiplemcpbridgeprocesses when increased) - listen:
localhost:0(auto-assign port) - request timeout:
300seconds (0disables) - max body size:
1048576bytes - initialization: eager at startup
- mode: HTTP by default; STDIO adapter when
--stdiois set
MCP_XCODE_PID(alternative to--xcode-pid)MCP_XCODE_SESSION_ID(fixes the Xcode MCP session ID; usually not needed)MCP_LOG_LEVEL(log level: trace|debug|info|notice|warning|error|critical)
Logs are written to stderr.
Note: when using --upstream-processes > 1, fixing the session id via --session-id / MCP_XCODE_SESSION_ID can help reduce permission dialog prompts in Xcode.
| Option | Description |
|---|---|
--upstream-command cmd |
mcpbridge command |
--upstream-args a,b,c |
mcpbridge args (comma-separated) |
--upstream-arg value |
Append a single mcpbridge arg |
--upstream-processes n |
Spawn n upstream mcpbridge processes (default: 1, max: 10) |
--xcode-pid pid |
Xcode PID |
--session-id id |
Xcode MCP session ID (usually not needed) |
--max-body-bytes n |
Max request body size |
--request-timeout seconds |
Request timeout (0 disables) |
--lazy-init |
Delay initialization until first request |
--stdio |
Run in STDIO mode |