Labsco
kevinswint logo

Xcode-Studio-MCP

β˜… 7

from kevinswint

Unified MCP server for Xcode + iOS Simulator β€” build, deploy, screenshot, and interact with your iOS app from Claude Code, Cursor, or any MCP client. Built in Swift. Single binary. No Node/Python runtime required.

πŸ”₯πŸ”₯πŸ”₯πŸ”₯βœ“ VerifiedFreeQuick setup

xcode-studio-mcp

Unified MCP server for Xcode + iOS Simulator β€” build, deploy, screenshot, and interact with your iOS app from Claude Code, Codex, Cursor, or any MCP client.

Built in Swift. Single binary. No Node/Python runtime required.

Why This Exists

Today you need 2-3 separate tools to do the full iOS dev loop with an AI agent. xcode-studio-mcp combines them into one:

Write code β†’ Build β†’ Deploy to Simulator β†’ Screenshot β†’ Tap/Type β†’ Verify

Tools

ToolDescription
xcode_buildBuild an Xcode project with structured error output (file, line, column, severity, message)
xcode_runBuild and launch an app in the iOS Simulator
simulator_screenshotCapture the Simulator screen as a PNG image
simulator_tapTap at x,y coordinates on the Simulator screen
simulator_typeType text into the currently focused field
simulator_describeGet the accessibility tree of the current screen (JSON)

Tool Parameters

xcode_build

ParameterRequiredDescription
project_pathYesPath to Xcode project directory, .xcodeproj, or .xcworkspace
schemeNoBuild scheme (auto-detected if omitted)
configurationNoDebug (default) or Release
destinationNoBuild destination (defaults to booted simulator)

xcode_run

ParameterRequiredDescription
project_pathYesPath to Xcode project
bundle_identifierYesApp bundle ID (e.g. com.example.MyApp)
schemeNoBuild scheme (auto-detected)
simulator_udidNoTarget simulator (defaults to booted)

simulator_screenshot

ParameterRequiredDescription
simulator_udidNoTarget simulator (defaults to booted)

simulator_tap

ParameterRequiredDescription
xYesX coordinate
yYesY coordinate
durationNoHold duration in seconds (for long press)
simulator_udidNoTarget simulator

simulator_type

ParameterRequiredDescription
textYesText to type
simulator_udidNoTarget simulator

simulator_describe

ParameterRequiredDescription
simulator_udidNoTarget simulator

Example Workflow

You: Build and run my app at ~/Projects/MyApp
Claude: [calls xcode_build] Build succeeded with 0 errors
        [calls xcode_run] App launched (PID 12345)
        [calls simulator_screenshot] Here's what the app looks like...
        [calls simulator_describe] I can see a "Sign In" button and email/password fields
        [calls simulator_tap] Tapped the email field
        [calls simulator_type] Typed "test@example.com"
        [calls simulator_screenshot] Here's the current state...

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚     MCP Protocol Layer      β”‚  stdio transport (Swift MCP SDK)
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   Tool Implementations      β”‚  6 tools, structured error output
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ xcodebuildβ”‚  simctl  β”‚  idb β”‚  native process calls
β”‚  wrapper  β”‚  wrapper β”‚ CLI  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”˜

Built in Swift with zero Node/Python runtime dependencies (idb CLI is only needed for UI interaction tools).

Roadmap

  • v0.1 (current): Core build + simulator tools
  • v1.0: Semantic UI navigation ("tap the Sign In button"), visual diff, Xcode project file manipulation, compound operations, SwiftUI preview capture
ProjectWhat It DoesDifference
XcodeBuildMCPBuild + test onlyNo simulator UI interaction
mobile-mcpCross-platform simulator UINo Xcode build support
ios-simulator-mcpSimulator via IDBNo build, depends on IDB for everything

xcode-studio-mcp combines build and interact into a single server.