Give Xcode's AI agent a brain that remembers.
Xcode 26.3 supports agentic coding with full MCP (Model Context Protocol) integration. Vestige plugs directly into Xcode's Claude Agent, giving it persistent memory across every coding session.
Vestige is the first cognitive memory server for Xcode.
curl -L https://github.com/samvallad33/vestige/releases/latest/download/vestige-mcp-aarch64-apple-darwin.tar.gz | tar -xz
sudo mv vestige-mcp vestige vestige-restore /usr/local/bin/Create a .mcp.json file in your project root:
cat > /path/to/your/project/.mcp.json << 'EOF'
{
"mcpServers": {
"vestige": {
"type": "stdio",
"command": "/usr/local/bin/vestige-mcp",
"args": [],
"env": {
"PATH": "/usr/local/bin:/usr/bin:/bin"
}
}
}
}
EOFOr use the setup script:
curl -sSL https://raw.githubusercontent.com/samvallad33/vestige/main/scripts/xcode-setup.sh -o xcode-setup.sh
bash xcode-setup.shQuit Xcode completely (Cmd+Q) and reopen your project.
Type /context in the Agent panel. You should see vestige listed with 19 tools.
Xcode 26.3's Claude Agent has a feature gate (claudeai-mcp) that blocks custom MCP servers configured in the global config at ~/Library/Developer/Xcode/CodingAssistant/ClaudeAgentConfig/.claude.
Project-level .mcp.json files bypass this gate entirely. This is the method that actually works. Drop the file in your project root and Xcode loads it on the next session.
Important: Xcode runs agents in a sandboxed environment that does not inherit your shell configuration (
.zshrc,.bashrc, etc.). You must use absolute paths for thecommandfield.
| Without Vestige | With Vestige |
|---|---|
| Every session starts from zero | Agent recalls your architecture, patterns, and preferences |
| Re-explain SwiftUI conventions each time | Agent knows your conventions from day one |
| Bug fixes are forgotten | Agent remembers past fixes and avoids regressions |
| No context between Xcode and other IDEs | Shared memory across Xcode, Cursor, VS Code, and more |
| AI hallucinations persist forever | Agent detects and self-corrects bad memories |
Architecture decisions:
"Remember: we chose Observation framework over Combine for state management because it's simpler and Apple-recommended for iOS 17+."
Bug documentation:
The agent fixes a Core Data migration crash? Vestige automatically stores the fix. Next time it encounters a migration issue, it remembers the solution.
Proactive reminders:
The agent surfaces your pending deadlines, hackathon dates, and concert tickets — right inside Xcode's Agent panel.
Self-correcting memory:
The agent traces a hallucinated detail back to a specific memory, identifies it as wrong, and deletes it autonomously.
Cross-IDE memory:
Fix a backend bug in VS Code. Open the iOS app in Xcode. The agent already knows about the API change because Vestige shares memory across all your tools.
Run the setup script with a to install into all detected projects:
curl -sSL https://raw.githubusercontent.com/samvallad33/vestige/main/scripts/xcode-setup.sh -o xcode-setup.sh
bash xcode-setup.shOr manually drop .mcp.json into any project:
# From inside your project directory
cat > .mcp.json << 'EOF'
{
"mcpServers": {
"vestige": {
"type": "stdio",
"command": "/usr/local/bin/vestige-mcp",
"args": [],
"env": {
"PATH": "/usr/local/bin:/usr/bin:/bin"
}
}
}
}
EOFTo give each project its own memory database:
{
"mcpServers": {
"vestige": {
"type": "stdio",
"command": "/usr/local/bin/vestige-mcp",
"args": ["--data-dir", "/Users/you/Developer/MyApp/.vestige"],
"env": {
"PATH": "/usr/local/bin:/usr/bin:/bin"
}
}
}
}Place a CLAUDE.md in your project root to make the agent use Vestige automatically:
## Memory
At the start of every session:
1. Search Vestige for this project's context
2. Recall architecture decisions and coding patterns
3. Save important decisions and bug fixes without being askedSee CLAUDE.md templates for a full setup.
The first time Vestige runs, it downloads the embedding model (~130MB). In Xcode's sandboxed environment, the cache location is:
~/Library/Caches/com.vestige.core/fastembed
If the download fails behind a corporate proxy, pre-download by running vestige-mcp once from your terminal.
"vestige" not showing in /context
-
Make sure
.mcp.jsonis in your project root (same directory as.xcodeprojorPackage.swift):ls -la /path/to/project/.mcp.json
-
Verify the binary path is correct and absolute:
ls -la /usr/local/bin/vestige-mcp
-
Check that
.mcp.jsonis valid JSON:cat /path/to/project/.mcp.json | python3 -m json.tool -
Fully quit and restart Xcode (Cmd+Q, not just close window).
-
Check debug logs:
cat ~/Library/Developer/Xcode/CodingAssistant/ClaudeAgentConfig/debug/latest | grep -i vestige
"Agent has been closed" or "Your request couldn't be completed"
This is a known issue with Xcode 26.3's Claude Agent that can happen independently of MCP configuration.
Nuclear fix: Delete the agent config and let Xcode recreate it:
mv ~/Library/Developer/Xcode/CodingAssistant/ClaudeAgentConfig \
~/Library/Developer/Xcode/CodingAssistant/ClaudeAgentConfig.bakThen restart Xcode and sign back into Claude in Settings > Intelligence.
Global .claude config not loading MCP servers
Xcode 26.3 has a feature gate (claudeai-mcp) that may block custom MCP servers from the global config file at ~/Library/Developer/Xcode/CodingAssistant/ClaudeAgentConfig/.claude.
Solution: Use project-level .mcp.json instead. This bypasses the gate. See the Quick Start above.
Embedding model fails to download
The first run downloads ~130MB. If Xcode's sandbox blocks the download:
- Run
vestige-mcponce from your terminal to cache the model - The cache at
~/Library/Caches/com.vestige.core/fastembedwill be available to the sandboxed instance
Behind a proxy:
HTTPS_PROXY=your-proxy:port vestige-mcpVestige uses the MCP standard — the same memory works across all your tools:
| IDE | Guide |
|---|---|
| Claude Code | Setup |
| Claude Desktop | Setup |
| Cursor | Setup |
| VS Code (Copilot) | Setup |
| JetBrains | Setup |
| Windsurf | Setup |
Your AI remembers everything, everywhere.