MCP that makes Xcode 26.3's MCP compatible with Cursor and other strict MCP-spec-compliant clients
- ✓Open-source license (MIT)
- ✓Actively maintained (<30d)
- ✓Clear description
- ✓Topics declared
- ✓Documented (README)
claude mcp add xcodemcpwrapper -- uvx --from{
"mcpServers": {
"xcodemcpwrapper": {
"command": "uvx",
"args": ["--from"]
}
}
}Resumen de MCP Servers
# XcodeMCPWrapper - mcpbridge-wrapper
<!-- mcp-name: io.github.SoundBlaster/xcode-mcpbridge-wrapper -->
<!-- version-badge:start -->
[](https://github.com/SoundBlaster/XcodeMCPWrapper/releases/tag/v0.5.0)
<!-- version-badge:end -->
[](https://www.python.org/downloads/)
[](https://opensource.org/licenses/MIT)
[](./SPECS/ARCHIVE/P5-T14_Code_Coverage/)
<!-- coverage-sync: keep README and DocC coverage metrics aligned -->
[](https://registry.modelcontextprotocol.io)
A Python wrapper that makes Xcode 26.3's MCP bridge compatible with Cursor and
other strict MCP-spec-compliant clients.
Version `0.5.x` uses the legacy MCP `initialize` handshake. It is intended for
clients that still use that protocol; it does not implement the sessionless
MCP 2026-07-28 wire format. The experimental modern implementation is kept on
a separate branch. Pin `mcpbridge-wrapper==0.5.0` in `uvx --from` if your client
must stay on this protocol when newer major versions become available.
## The Problem
Xcode's `mcpbridge` returns tool responses in the `content` field but omits the required `structuredContent` field when a tool declares an `outputSchema`. According to the MCP specification, when `outputSchema` is declared, responses **must** include `structuredContent`.
- ✅ Claude Code and Codex CLI work (they have special handling for Apple's responses)
- ❌ Cursor strictly follows the spec and rejects non-compliant responses
## The Solution
`mcpbridge-wrapper` intercepts responses from `xcrun mcpbridge` and copies the data from `content` into `structuredContent`, making Xcode's MCP tools fully compatible with all MCP clients.
```
┌─────────────┐ MCP Protocol ┌──────────────────┐ MCP Protocol ┌────────────┐ XPC ┌─────────┐
│ Cursor │ ◄────────────────► │ mcpbridge-wrapper│ ◄──────────────► │ mcpbridge │ ◄───────► │ Xcode │
│ (MCP Client)│ │ (This Project) │ │ (Bridge) │ │ (IDE) │
└─────────────┘ └──────────────────┘ └────────────┘ └─────────┘
```
## Quick Start
### Prerequisites
- macOS with Xcode 26.3+
- Python 3.9+
- **Xcode Tools MCP Server enabled** (see below)
> ⚠️ **Important:** You MUST enable Xcode Tools MCP in Xcode settings:
> 1. Open **Xcode** > **Settings** (⌘,)
> 2. Select **Intelligence** in the sidebar
> 3. Under **Model Context Protocol**, toggle **Xcode Tools** ON
>
> If you see "Found 0 tools" in your MCP client logs, this setting is not enabled.
### Cursor Quick Setup
If you use **Cursor**, no installation is needed — just add this to `~/.cursor/mcp.json`:
**Broker mode (Recommended):**
```json
{
"mcpServers": {
"xcode-tools": {
"command": "uvx",
"args": ["--from", "mcpbridge-wrapper", "mcpbridge-wrapper", "--broker"]
}
}
}
```
With Web UI dashboard (optional — adds real-time monitoring at http://localhost:8080):
```json
{
"mcpServers": {
"xcode-tools": {
"command": "uvx",
"args": [
"--from",
"mcpbridge-wrapper[webui]",
"mcpbridge-wrapper",
"--broker",
"--web-ui",
"--web-ui-config",
"/Users/YOUR_USERNAME/.mcpbridge_wrapper/webui.json"
]
}
}
}
```
**Direct mode (Alternative):**
```json
{
"mcpServers": {
"xcode-tools": {
"command": "uvx",
"args": ["--from", "mcpbridge-wrapper", "mcpbridge-wrapper"]
}
}
}
```
If you upgrade and want to confirm the currently running dashboard process version:
```bash
PORT=8080
PID=$(lsof -tiTCP:$PORT -sTCP:LISTEN | head -n1)
PY=$(ps -p "$PID" -o command= | awk '{print $1}')
"$PY" -c 'import importlib.metadata as m; print(m.version("mcpbridge-wrapper"))'
```
If needed, do a one-time refresh start:
```bash
uvx --refresh --from 'mcpbridge-wrapper[webui]' mcpbridge-wrapper --web-ui --web-ui-port 8080
```
Restart Cursor and you're done. For other clients or installation methods, read on.
### Broker Mode
Broker mode lets multiple short-lived MCP client sessions share one persistent
upstream bridge session.
- **Why this mode exists:** Apple documents a Coding Intelligence known issue in Xcode 26.4 where external development tools may trigger repeated "Allow Connection?" dialogs during normal usage (`170721057`). Reusing one long-lived upstream session via broker mode can reduce reconnect churn that surfaces this prompt pattern. See Apple's official [Xcode 26.4 release notes](https://developer.apple.com/documentation/xcode-release-notes/xcode-26_4-release-notes).
- Use `--broker` to auto-detect — connect if daemon is alive, spawn otherwise (recommended).
- Add `--web-ui` (plus optional `--web-ui-config`) when you want the spawned or daemon host to own one shared dashboard endpoint.
- If you want one explicit daemon owner plus one visible monitoring surface across multiple editors, prefer a dedicated host: start `--broker-daemon --web-ui` once, keep clients on `--broker`, and attach the browser dashboard and/or `--tui` to that host.
Quick migration examples:
```bash
# Claude Code
claude mcp add --transport stdio xcode -- uvx --from mcpbridge-wrapper mcpbridge-wrapper --broker
# Codex CLI
codex mcp add xcode -- uvx --from mcpbridge-wrapper mcpbridge-wrapper --broker
```
After upgrading, stop the old singleton daemon once so the next `--broker` client
starts the new package version:
```bash
uvx --from mcpbridge-wrapper mcpbridge-wrapper --broker-stop
```
For full start/stop/status commands, Cursor JSON snippets, troubleshooting, and
rollback to direct mode, see [Broker Mode Guide](docs/broker-mode.md).
#### Multi-Agent Guidance
When you run multiple MCP client processes at the same time:
- **Dedicated host frontend workflow (recommended when visibility matters):** start one `--broker-daemon --web-ui` process, keep every editor/client on `--broker`, and attach the browser dashboard and/or `mcpbridge-wrapper --tui` to the same host.
- **Unified single-config auto-spawn:** configure each client with `--broker --web-ui --web-ui-config <shared-path>` when you want less setup and can accept implicit host ownership.
- **Runtime expectation:** a dedicated host is the clearest way to control lifecycle; in unified auto-spawn, the first client that must spawn the broker starts the broker host and dashboard and later clients reuse it.
- **Ownership rule:** only one process can bind a given Web UI `host:port` (for example `127.0.0.1:8080`).
- **Connection behavior:** when a broker is already running, `--broker` reuses it and does not retrofit dashboard settings onto that existing host.
- **Fallback behavior:** if dashboard bind fails (port already in use), broker MCP transport continues and only dashboard startup is skipped.
- **Verification flow:** use `mcpbridge-wrapper --broker-status`, the files under `~/.mcpbridge_wrapper/`, and the shared dashboard/TUI state to verify that both editors are attached to one daemon.
See [Broker Mode Guide](docs/broker-mode.md#dedicated-host-frontend-workflow), [Web UI Setup Guide](docs/webui-setup.md#multi-agent-web-ui-ownership-model), and [Troubleshooting](docs/troubleshooting.md#how-do-i-confirm-two-editors-share-one-broker-daemon).
### Python Environment Setup (Development)
If you plan to run `make install`, `pytest`, or other development commands, create and activate a virtual environment first. This avoids Homebrew Python's `externally-managed-environment` (PEP 668) error.
```bash
cd XcodeMCPWrapper
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install --upgrade pip
make install
```
Quick checks:
```bash
which python3
which pip
```
Both should point to `.venv/bin/...` while the environment is active.
### Installation
#### Option 1: Using uvx (Recommended - Easiest)
The fastest way to install is using [uvx](https://github.com/astral-sh/uv) (requires `uv` to be installed):
```bash
# No manual installation needed - uvx will automatically download and run
uvx --from mcpbridge-wrapper mcpbridge-wrapper
```
Or add to your MCP client configuration directly (see configuration sections below).
#### Option 2: Via MCP Registry
If your MCP client supports the MCP Registry:
**Server name:** `io.github.SoundBlaster/xcode-mcpbridge-wrapper`
```bash
# Using mcp-publisher CLI
mcp-publisher install io.github.SoundBlaster/xcode-mcpbridge-wrapper
```
#### Option 3: Using pip
```bash
python3 -m pip install mcpbridge-wrapper
```
Then use `mcpbridge-wrapper` or `xcodemcpwrapper` command.
#### Option 4: Manual Installation (via install script)
```bash
git clone https://github.com/SoundBlaster/XcodeMCPWrapper.git
cd XcodeMCPWrapper
./scripts/install.sh
```
The install script creates a virtual environment, installs the package, and places a wrapper at `~/bin/xcodemcpwrapper`.
If you plan to use `--web-ui` MCP args, install Web UI extras explicitly:
```bash
./scripts/install.sh --webui
```
Add the following to your `~/.bashrc` or `~/.zshrc`:
```bash
export PATH="$HOME/bin:$PATH"
```
Then reload:
```bash
source ~/.zshrc
# or
. ~/.zshrc
```
#### Option 5: Local Development (venv)
For development or if you want to run directly from the cloned repository:
```bash
git clone https://github.com/SoundBlaster/XcodeMCPWrapper.git
cd XcodeMCPWrapper
python3 -m venv .venv
source .venv/bin/activate
make install # or: make install-webui (for Web UI support)
```
The entry point is `.venv/bin/mcpbridge-wrapper`. Use the **full absolute path** when configuring MCP clients (see configuration sections below).
### Uninstallation
To remove xcodemcpwrapper from your system:
```bash
./scripts/uniLo que la gente pregunta sobre XcodeMCPWrapper
¿Qué es SoundBlaster/XcodeMCPWrapper?
+
SoundBlaster/XcodeMCPWrapper es mcp servers para el ecosistema de Claude AI. MCP that makes Xcode 26.3's MCP compatible with Cursor and other strict MCP-spec-compliant clients Tiene 20 estrellas en GitHub y su última actualización registrada es del 2026-09-22.
¿Cómo se instala XcodeMCPWrapper?
+
Puedes instalar XcodeMCPWrapper clonando el repositorio (https://github.com/SoundBlaster/XcodeMCPWrapper) o siguiendo las instrucciones del README en GitHub. ClaudeWave también te ofrece bloques de instalación rápida en esta misma página.
¿Es seguro usar SoundBlaster/XcodeMCPWrapper?
+
Nuestro agente de seguridad ha analizado SoundBlaster/XcodeMCPWrapper y le ha asignado un Trust Score de 95/100 (tier: Verified). Revisa el desglose completo de comprobaciones superadas y flags en esta página.
¿Quién mantiene SoundBlaster/XcodeMCPWrapper?
+
SoundBlaster/XcodeMCPWrapper es mantenido por SoundBlaster. La última actividad registrada en GitHub es del 2026-09-22, con 2 issues abiertos.
¿Hay alternativas a XcodeMCPWrapper?
+
Sí. En ClaudeWave puedes explorar mcp servers similares en /categories/mcp, ordenados por popularidad o actividad reciente.
Despliega XcodeMCPWrapper en tu cloud
Lleva este repo a producción en minutos. Cada plataforma genera su propio entorno con variables de entorno editables.
¿Mantienes este repo? Añade un badge a tu README
Pega el badge en tu README de GitHub para mostrar que está auditado por ClaudeWave. Cada badge enlaza de vuelta a esta página y muestra el Trust Score actual.
[](https://claudewave.com/repo/soundblaster-xcodemcpwrapper)<a href="https://claudewave.com/repo/soundblaster-xcodemcpwrapper"><img src="https://claudewave.com/api/badge/soundblaster-xcodemcpwrapper" alt="Featured on ClaudeWave: SoundBlaster/XcodeMCPWrapper" width="320" height="64" /></a>Más MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scrapling_dev
The fastest path to AI-powered full stack observability, even for lean teams.