/plugin marketplace add conorluddy/xclaude-plugin
Modular iOS development automation for Claude Code
Build, test, and automate iOS apps through natural conversation with Claude. 8 workflow-specific MCP servers with 24 tools across Xcode, Simulator, and IDB.
Enable only what you need. Each MCP is purpose-built for specific workflows, keeping your context window lean. Plus, our tools intelligently encapsulate Xcode output (errors, test results, build logs) so Claude processes structured JSON instead of raw 50+ line logs—saving significant tokens and enabling faster feedback loops.
- 8 workflow-specific MCP servers (600-3500 tokens each)
- Enable only what you need - Ultra-minimal to full-featured
- 23 shared tools across Xcode, Simulator, and IDB
- Single source of truth - tools defined once, imported by MCPs
- xc-build (~600 tokens) - Build validation, errors, clean, list schemes
- xc-launch (~400 tokens) - Simulator app lifecycle: install and launch
- xc-interact (~900 tokens) - Pure UI interaction, no build
- xc-ai-assist (~1400 tokens) - Build + UI automation + screenshots
- xc-setup (~800 tokens) - Environment configuration and validation
- xc-testing (~1200 tokens) - Test execution + UI flows
- xc-meta (~700 tokens) - Project maintenance and housekeeping
- xc-all (~3500 tokens) - All 24 tools for complex workflows
- xcode-workflows - Build system guidance and result analysis
- simulator-workflows - Device and app lifecycle patterns
- ui-automation-workflows - Accessibility-first automation
- accessibility-testing - WCAG compliance and quality checks
- ios-testing-patterns - Test execution and flaky test detection
- crash-debugging - Crash log analysis and symbolication
- performance-profiling - Instruments integration
- state-management - Cache and configuration management
/plugin marketplace add conorluddy/xclaude-plugin
/plugin install xclaude-plugin/plugin marketplace add /path/to/xclaude-plugin
/plugin install xclaude-pluginJust installed? Enable xc-build and xc-launch for rapid development:
1. In Claude settings, enable "xc-build" and "xc-launch" MCPs
2. Ask Claude: "Build and run MyApp on iPhone 15"
3. Done! ✨
That's it. xc-build + xc-launch gives you a composable development loop: build with xc-build, then install & launch with xc-launch. Claude orchestrates the two-step workflow. If you need other workflows (testing, setup, UI automation), see Choosing the Right MCP below.
- macOS 13.0+ or Linux
- Xcode 15.0+ (macOS only, for iOS development)
- Node.js 18+
- Optional: IDB (Facebook iOS Development Bridge) for advanced UI automation
If you're upgrading from an earlier version, note these breaking changes:
What changed:
- Server renamed from xc-build-and-launch to xc-launch for clarity
- Removed:
xcode_build_and_launchmonolithic tool (withskip_buildflag), plusxcode_build,xcode_clean,xcode_list(moved to xc-build) - Now contains: Only
simulator_install_appandsimulator_launch_app - Philosophy: Use xc-build + xc-launch together for development loop
Why: The monolithic xcode_build_and_launch tool coupled build, install, and launch into a single operation. The new architecture separates build concerns (xc-build) from simulator lifecycle (xc-launch), enabling:
- Better error recovery (retry individual steps)
- Clearer mental model (build → install → launch)
- No
skip_buildcode smell - Follows Single Responsibility Principle
Action required:
- Update your
.mcp.jsonconfiguration:- "xc-build-and-launch": { - "command": "node", - "args": ["${CLAUDE_PLUGIN_ROOT}/mcp-servers/xc-build-and-launch/dist/index.js"] + "xc-launch": { + "command": "node", + "args": ["${CLAUDE_PLUGIN_ROOT}/mcp-servers/xc-launch/dist/index.js"]
- In Claude settings, enable "xc-launch" instead of "xc-build-and-launch"
Previous versions:
v0.3.0:xc-run→xc-build-and-launchv0.3.0:xc-compile→xc-build,xc-hybrid→xc-all
See .mcp.json.example for the current configuration.
IMPORTANT: Enable ONE MCP at a time for optimal token efficiency. Choose based on your current workflow:
☐ xc-build # Build validation, errors, clean? (~600 tokens)
☐ xc-launch # Simulator lifecycle: install + launch? (~400 tokens)
☐ xc-interact # Testing UI with app already built? (~900 tokens)
☐ xc-ai-assist # AI-driven UI iteration? (~1400 tokens)
☐ xc-setup # First time setup? (~800 tokens)
☐ xc-testing # Running test suites? (~1200 tokens)
☐ xc-meta # Maintenance tasks? (~700 tokens)
☐ xc-all # Complex workflow needing everything? (~3500 tokens)
💡 Tip: Enable xc-build + xc-launch together for development loop (~1000 tokens total)
Scenario 1: Build and fix errors
Enable: xc-build (~600 tokens)
"Build the project and show me the errors"
→ Uses xcode_build with automatic error extraction
→ Returns up to 10 errors for quick fixes
→ 87% less tokens than old architecture!
Scenario 2: Rapid development - build and run
Enable: xc-build + xc-launch (~1000 tokens)
"Build and run MyApp on iPhone 15"
→ Claude orchestrates: build (xc-build) → install & launch (xc-launch)
→ Composable two-server workflow
→ Better error recovery (retry individual steps)
→ Perfect for iterative development
Scenario 3: Testing UI flows (app already built)
Enable: xc-interact (~900 tokens)
"Tap the Login button, then check if the profile screen appears"
→ Queries accessibility tree (3-4x faster than screenshots)
→ Taps elements by coordinates
→ Validates UI state without rebuilding
Scenario 4: AI-driven UI iteration
Enable: xc-ai-assist (~1400 tokens)
"Update the button color to blue, rebuild, and show me a screenshot"
→ Modifies code, builds, captures screenshot
→ Complete workflow in one MCP
→ Includes visual feedback (screenshots)
┌─────────────────────────────────────────────────────┐
│ Shared Tool Library (24 tools) │
│ ├─ Xcode (6): build, build+run, clean, test, list, version │
│ ├─ Simulator (12): boot, install, screenshot, etc.│
│ └─ IDB (6): describe, tap, input, gesture, etc. │
└─────────────────────────────────────────────────────┘
↓ Tools imported by MCP servers ↓
┌─────────────────────────────────────────────────────┐
│ 8 Workflow-Specific MCP Servers │
│ ├─ xc-build: 3 tools (~600 tokens) │
│ ├─ xc-launch: 2 tools (~400 tokens) │
│ ├─ xc-interact: 6 tools (~900 tokens) │
│ ├─ xc-ai-assist: 7 tools (~1400 tokens) │
│ ├─ xc-setup: 5 tools (~800 tokens) │
│ ├─ xc-testing: 6 tools (~1200 tokens) │
│ ├─ xc-meta: 6 tools (~700 tokens) │
│ └─ xc-all: 24 tools (~3500 tokens) │
└─────────────────────────────────────────────────────┘
For Users:
- Enable only what you need (300-3500 tokens)
- Clear mental model (workflow-based naming)
- No tool duplication confusion
- Easy to toggle on/off in Claude settings
For Developers:
- Single source of truth (shared tools)
- Easy testing (isolated functions)
- Simple maintenance (update once)
- Type-safe throughout (zero
anyusage)
| MCP | Tools | Token Cost | Use When |
|---|---|---|---|
| xc-build | 3 | ~600 | Build validation with clean/scheme discovery |
| xc-launch | 2 | ~400 | Simulator lifecycle: install and launch app |
| xc-interact | 6 | ~900 | Testing UI flows with app already built |
| MCP | Tools | Token Cost | Use When |
|---|---|---|---|
| xc-ai-assist | 7 | ~1400 | AI UI iteration with visual feedback |
| xc-setup | 5 | ~800 | Initial setup, environment validation |
| xc-testing | 6 | ~1200 | Running test suites + UI automation |
| xc-meta | 6 | ~700 | Maintenance, housekeeping, environment checks |
| MCP | Tools | Token Cost | Use When |
|---|---|---|---|
| xc-all | 23 | ~3500 | Complex workflows needing everything |
Pro tip: Don't enable multiple MCPs simultaneously - tool duplication will increase token usage! Use xc-all instead for multi-workflow sessions.
Quick reference to find which MCP has the tools you need:
| Tool | xc-build | xc-launch | xc-interact | xc-ai-assist | xc-setup | xc-testing | xc-meta | xc-all |
|---|---|---|---|---|---|---|---|---|
xcode_build |
✅ | ✅ | ✅ | |||||
xcode_build_and_launch |
✅ | |||||||
xcode_clean |
✅ | ✅ | ✅ | |||||
xcode_test |
✅ | ✅ | ||||||
xcode_list |
✅ | ✅ | ✅ | |||||
xcode_version |
✅ | ✅ | ✅ |
| Tool | xc-build | xc-launch | xc-interact | xc-ai-assist | xc-setup | xc-testing | xc-meta | xc-all |
|---|---|---|---|---|---|---|---|---|
simulator_list |
✅ | ✅ | ||||||
simulator_boot |
✅ | ✅ | ||||||
simulator_shutdown |
✅ | ✅ | ||||||
simulator_create |
✅ | ✅ | ||||||
simulator_delete |
✅ | ✅ | ||||||
simulator_install_app |
✅ | ✅ | ||||||
simulator_launch_app |
✅ | ✅ | ||||||
simulator_terminate_app |
✅ | |||||||
simulator_screenshot |
✅ | ✅ | ✅ | |||||
simulator_openurl |
✅ | |||||||
simulator_get_app_container |
✅ | |||||||
simulator_health_check |
✅ | ✅ | ✅ |
| Tool | xc-build | xc-launch | xc-interact | xc-ai-assist | xc-setup | xc-testing | xc-meta | xc-all |
|---|---|---|---|---|---|---|---|---|
idb_describe |
✅ | ✅ | ✅ | ✅ | ||||
idb_tap |
✅ | ✅ | ✅ | ✅ | ||||
idb_input |
✅ | ✅ | ✅ | ✅ | ||||
idb_gesture |
✅ | ✅ | ✅ | |||||
idb_find_element |
✅ | ✅ | ✅ | |||||
idb_check_quality |
✅ | ✅ | ✅ |
xcode_build- Build with automatic error extractionxcode_build_and_launch- Build, install, and launch on simulatorxcode_clean- Clean build artifactsxcode_test- Run XCTest suitesxcode_list- List schemes/targetsxcode_version- Check Xcode installation
simulator_list- Enumerate simulatorssimulator_boot- Boot devicesimulator_shutdown- Shutdown devicesimulator_create- Create new simulatorsimulator_delete- Delete simulatorsimulator_install_app- Install appsimulator_launch_app- Launch appsimulator_terminate_app- Terminate appsimulator_screenshot- Capture screenshotsimulator_openurl- Open URL/deep linksimulator_get_app_container- Get app container pathsimulator_health_check- Validate environment
idb_describe- Query accessibility tree (accessibility-first!)idb_tap- Tap coordinatesidb_input- Type text or press keysidb_gesture- Swipes and hardware buttonsidb_find_element- Search by label (semantic)idb_check_quality- Assess accessibility data richness
Add this section to your project's .claude/CLAUDE.md file. This guides Claude on when and why to use the xclaude-plugin tools instead of directly calling Xcode or shell commands:
## xclaude-plugin: Why and When to Use These Tools
The xclaude-plugin provides 8 modular MCPs with 24 specialized iOS tools. **Always prefer these over raw `xcodebuild` or shell commands** for iOS development tasks. Here's why:
### Why These Tools Trump Raw Commands
| Task | Direct Bash | xclaude-plugin | Why Plugin Wins |
| -------------------- | -------------------------------------------------------------- | -------------------------------- | ------------------------------------------------------------------------- |
| Build + get errors | `xcodebuild -scheme Foo 2>&1` (50+ lines of parsing) | `xcode_build` tool | Auto-extracts up to 10 errors, structured JSON, 87% fewer tokens |
| Test suite execution | `xcodebuild test` + manual parsing | `xcode_test` tool | Parses results, reports failures, timing, code coverage |
| Simulator screenshot | `xcrun simctl io booted screenshot /tmp/x.png` + file handling | `simulator_screenshot` tool | Auto-saves, encoded output, accessible in response |
| UI automation | Manual coordinate finding + shell taps | `idb_describe` + `idb_tap` tools | Queries accessibility tree (120ms), semantic element finding, 3-4x faster |
| App installation | `xcrun simctl install booted App.app` | `simulator_install_app` tool | Builds, finds app, installs, validates—one command |
### When to Use Each MCP
**Use `xc-build`** (~600 tokens) when:
- Building and fixing errors
- Need to clean build artifacts
- Discovering schemes/targets in project
- Build validation and configuration
**Use `xc-interact`** (~900 tokens) when:
- Testing UI flows with app already built
- Automating screen validation without code changes
- Need accessibility-first element querying
**Use `xc-ai-assist`** (~1400 tokens) when:
- Iterating on UI with live feedback (code change → screenshot)
- Need visual validation of changes
- Combining code modification with testing
**Use `xc-testing`** (~1200 tokens) when:
- Running test suites and analyzing results
- Need both unit tests and UI automation
- Debugging test failures
**Use `xc-setup`** (~800 tokens) when:
- First-time environment validation
- Checking Xcode/simulator health
- Discovering project structure (schemes, targets)
**Use `xc-meta`** (~700 tokens) when:
- Maintenance tasks (clearing derived data, managing simulators)
- Non-coding iOS project operations
- Environment housekeeping
**Use `xc-all`** (~3500 tokens) when:
- Complex workflows requiring multiple tool categories
- Don't know which single MCP fits the task
- Need flexibility to pivot between workflows
### Critical: Prefer Plugin Tools Over Bash
When you encounter a task that could use either approach, **always choose the plugin tool**.
**Don't do this:**
# Manual build parsing
> `xcodebuild -scheme MyApp 2>&1 | grep -A5 "error:" | sed ...`
**Do this instead:** Use the `xcode_build` tool from `xc-build` MCP.
---
**Don't do this:**
# Manual screenshot saving
> `xcrun simctl io booted screenshot /tmp/screenshot.png`
> `cat /tmp/screenshot.png | base64`
**Do this instead:** Use the `simulator_screenshot` tool from `xc-interact` MCP.
---
**Don't do this:**
# Finding UI elements by trial and error
> `xcrun simctl spawn booted launchctl list | grep bundleid`
**Do this instead:** Use `idb_describe` tool to query accessibility tree, then `idb_tap` to interact.
### When Bash IS Still Appropriate
Use Bash for tasks outside iOS development:
- File operations: `mkdir`, `cp`, `rm`, `ls`
- Version control: `git status`, `git diff`, `git commit`
- General scripting: `jq`, `sed`, `awk`
- Environment setup: `npm install`, `brew install`
**Never use Bash for iOS-specific tasks** when a plugin tool exists.xclaude-plugin automatically tracks your simulator usage and supports configuration files for default simulators.
Project-level (recommended for team consistency):
# .xcplugin in your project root
{
"defaultSimulator": "platform=iOS Simulator,name=iPhone 15",
"maxRecentHistory": 10
}User-level (personal defaults across all projects):
# ~/.xcplugin/config.json
{
"defaultSimulator": "platform=iOS Simulator,name=iPhone 15 Pro",
"maxRecentHistory": 10
}Precedence: Project config overrides user config.
- Auto-resolution: Partial destinations like
"platform=iOS Simulator,name=iPhone 15"automatically resolve to the latest OS version available - Usage tracking: Every build/test automatically tracks which simulators you use
- Smart defaults: When no config exists, the plugin remembers your most recent simulator
The xcode_build and xcode_test tools accept three destination formats:
# 1. Auto-resolve (recommended) - finds latest OS automatically
"platform=iOS Simulator,name=iPhone 15"
# 2. Explicit - specify exact OS version
"platform=iOS Simulator,name=iPhone 15,OS=18.0"
# 3. UDID - direct device identifier
"id=ABC-123-DEF-456"-
Create a config file (choose one):
# Project-level echo '{"defaultSimulator": "platform=iOS Simulator,name=iPhone 15"}' > .xcplugin # User-level mkdir -p ~/.xcplugin echo '{"defaultSimulator": "platform=iOS Simulator,name=iPhone 15"}' > ~/.xcplugin/config.json
-
Find your available simulators:
xcrun simctl list devices available
-
Use the
simulator_listtool to see your devices:Ask Claude: "Show me available simulators"
See .xcplugin.example in the plugin directory for a complete example.
- Token efficiency: xc-build (~600 tokens) is 83% cheaper than xc-all (3500 tokens)
- Mental clarity: Focused tools per workflow phase
- Composable workflows: Enable xc-build + xc-launch together (~1000 tokens) for development loop
Guidelines:
- Single workflow: Enable one focused MCP (e.g., xc-interact for UI testing only)
- Development loop: Enable xc-build + xc-launch together for build → install → launch
- Complex workflows: Enable xc-all when you need multiple capabilities simultaneously
# Clone repository
git clone https://github.com/conorluddy/xclaude-plugin.git
cd xclaude-plugin
# Install dependencies
npm install
# Build MCP server
npm run build
# Test locally
/plugin marketplace add /path/to/xclaude-plugin
/plugin install xclaude-pluginxclaude-plugin/
├── .claude-plugin/
│ ├── plugin.json # Plugin manifest (8 MCP servers)
│ └── marketplace.json # Marketplace configuration
├── mcp-servers/ # 8 modular MCP servers
│ ├── shared/ # Shared tool library (24 tools)
│ │ ├── tools/ # Tool implementations
│ │ ├── types/ # Shared type definitions
│ │ └── utils/ # Command execution utilities
│ ├── xc-build/ # MCP 1: Build validation
│ ├── xc-launch/ # MCP 2: Simulator lifecycle (install + launch)
│ ├── xc-interact/ # MCP 3: Pure UI interaction
│ ├── xc-ai-assist/ # MCP 4: AI UI automation
│ ├── xc-setup/ # MCP 5: Environment setup
│ ├── xc-testing/ # MCP 6: Test execution
│ ├── xc-meta/ # MCP 7: Maintenance
│ └── xc-all/ # MCP 8: Full toolkit
├── skills/ # 8 Skills (markdown + YAML)
│ ├── xcode-workflows/
│ ├── simulator-workflows/
│ ├── ui-automation-workflows/
│ ├── accessibility-testing/
│ ├── ios-testing-patterns/
│ ├── crash-debugging/
│ ├── performance-profiling/
│ └── state-management/
└── README.md
Enable only what you need. Ultra-minimal MCPs (300 tokens) for focused tasks, comprehensive MCPs (3500 tokens) for complex workflows. 87% token reduction for surgical operations.
Query accessibility tree (120ms, ~50 tokens) before screenshots (2000ms, ~170 tokens). 3-4x faster, 80% cheaper, more reliable across theme changes.
24 tools defined once in shared library, imported by 8 MCPs. Update once, benefit everywhere. Type-safe with zero any usage.
MCPs named by developer workflow phase, not technology domain. xc-build for build validation, xc-setup for environment, xc-all for complex sessions.
Contributions welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
MIT License - See LICENSE for details
Complete iOS development automation for Claude Code 🚀