Skip to main content
Glama

xcode-mcp

MCP server for Xcode developer tools.

Installation

npm install
npm run build

Usage

Claude Desktop Configuration

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "xcode": {
      "command": "node",
      "args": ["/Users/YOUR_USERNAME/Projects/xcode-mcp/dist/index.js"]
    }
  }
}

Available Tools

iOS Simulator (simctl)

Control iOS Simulators via xcrun simctl.

Tool

Description

simctl_list

List available simulators, device types, runtimes, or device pairs

simctl_boot

Boot a simulator device

simctl_shutdown

Shutdown a simulator device or all simulators

simctl_install

Install an app bundle on a simulator

simctl_launch

Launch an app on a simulator

simctl_terminate

Terminate a running app without shutting down the simulator

simctl_uninstall

Uninstall an app from a simulator

simctl_openurl

Open a URL or deep link on a simulator

simctl_push

Send a push notification to an app

simctl_location

Set or clear the simulated GPS location

simctl_privacy

Grant, revoke, or reset privacy permissions for an app

simctl_io_screenshot

Capture a screenshot from a simulator

Device Identification

All simulator tools that require a device accept:

  • Device UDID (e.g., "3A8C9B5F-1234-5678-9ABC-DEF012345678")

  • Device name (e.g., "iPhone 16 Pro")

  • Special value "booted" for the currently booted simulator

Examples

List all devices:

{"name": "simctl_list", "arguments": {"filter": "devices"}}

Boot a simulator:

{"name": "simctl_boot", "arguments": {"device": "iPhone 16 Pro"}}

Take a screenshot:

{"name": "simctl_io_screenshot", "arguments": {"device": "booted"}}

Send a push notification:

{
  "name": "simctl_push",
  "arguments": {
    "device": "booted",
    "bundle_id": "com.example.app",
    "payload": {
      "aps": {
        "alert": {
          "title": "Test",
          "body": "Hello from MCP!"
        }
      }
    }
  }
}

Set location:

{
  "name": "simctl_location",
  "arguments": {
    "device": "booted",
    "action": "set",
    "latitude": 37.7749,
    "longitude": -122.4194
  }
}

Grant camera permission:

{
  "name": "simctl_privacy",
  "arguments": {
    "device": "booted",
    "action": "grant",
    "service": "camera",
    "bundle_id": "com.example.app"
  }
}

WebDriverAgent (wda)

UI automation for iOS Simulator apps via WebDriverAgent. Enables tapping, swiping, typing, and finding UI elements.

Tool

Description

wda_status

Check WebDriverAgent server connectivity

wda_tap

Tap at coordinates, by accessibility ID, or element ID

wda_type

Type text into the currently focused text field

wda_swipe

Perform a swipe gesture from start to end coordinates

wda_find

Find UI elements by accessibility ID, class name, or predicate

wda_source

Get the UI hierarchy (accessibility tree) as XML

wda_home

Press the home button

wda_alert

Accept or dismiss system alerts

Prerequisites

  1. Clone WebDriverAgent (one-time):

    git clone https://github.com/appium/WebDriverAgent.git
    cd WebDriverAgent
  2. Start WDA on a simulator (keep running in a terminal):

    xcodebuild test -project WebDriverAgent.xcodeproj \
      -scheme WebDriverAgentRunner \
      -destination 'platform=iOS Simulator,name=iPhone 16 Pro'
  3. Verify WDA is running:

    curl http://localhost:8100/status

Coordinate System

All coordinates are in points (logical pixels), not physical pixels. Use wda_source to see element positions in the UI hierarchy XML.

Common Parameters

All WDA tools accept these optional parameters:

  • bundle_id: Activate a specific app before the action

  • port: WDA server port (default: 8100)

Examples

Check WDA status:

{"name": "wda_status", "arguments": {}}

Tap at coordinates:

{"name": "wda_tap", "arguments": {"x": 200, "y": 400}}

Tap by accessibility ID:

{"name": "wda_tap", "arguments": {"accessibility_id": "login_button"}}

Tap with app activation:

{"name": "wda_tap", "arguments": {"accessibility_id": "login", "bundle_id": "com.example.app"}}

Type text:

{"name": "wda_type", "arguments": {"text": "hello@example.com"}}

Swipe down (scroll up):

{
  "name": "wda_swipe",
  "arguments": {
    "start_x": 200,
    "start_y": 400,
    "end_x": 200,
    "end_y": 200,
    "duration": 500
  }
}

Find elements:

{"name": "wda_find", "arguments": {"strategy": "accessibility id", "value": "submit_button"}}

Get UI hierarchy:

{"name": "wda_source", "arguments": {}}

Handle alert:

{"name": "wda_alert", "arguments": {"action": "accept"}}

Xcode Build (xcodebuild)

Build, test, and manage Xcode projects via xcodebuild.

Tool

Description

xcodebuild_list

List schemes, targets, and configurations for a project or workspace

xcodebuild_build

Build a scheme for a destination with structured result parsing

xcodebuild_test

Run tests and return structured results with pass/fail counts

xcodebuild_clean

Clean build artifacts for a scheme

xcodebuild_show_build_settings

Show build configuration settings

Project Auto-Detection

All xcodebuild tools can automatically detect the project or workspace in the current directory. They prefer .xcworkspace over .xcodeproj. You can also specify explicit paths:

  • workspace: Path to a .xcworkspace file

  • project: Path to a .xcodeproj file

  • directory: Directory to search for projects (defaults to cwd)

Destination Handling

The destination parameter accepts:

  • Device names (e.g., "iPhone 16 Pro") - automatically resolved to simulator UDID

  • Full destination strings (e.g., "platform=iOS Simulator,name=iPhone 16 Pro")

Examples

List schemes:

{"name": "xcodebuild_list", "arguments": {}}

Build a scheme:

{
  "name": "xcodebuild_build",
  "arguments": {
    "scheme": "MyApp",
    "destination": "iPhone 16 Pro",
    "configuration": "Debug"
  }
}

Run tests:

{
  "name": "xcodebuild_test",
  "arguments": {
    "scheme": "MyApp",
    "destination": "iPhone 16 Pro",
    "only_testing": ["MyAppTests/testLogin"]
  }
}

Clean build:

{
  "name": "xcodebuild_clean",
  "arguments": {
    "scheme": "MyApp"
  }
}

Show build settings:

{
  "name": "xcodebuild_show_build_settings",
  "arguments": {
    "scheme": "MyApp",
    "configuration": "Release"
  }
}

Development

# Run in development mode
npm run dev

# Build
npm run build

# Test
npm test

License

MIT

Install Server
F
license - not found
A
quality
C
maintenance

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Create App Store screenshots, icons, ASO copy, localization, and revisions via hosted MCP.

  • Control Unreal Engine to browse assets, import content, and manage levels and sequences. Automate…

  • MCP connector that lets ChatGPT list, search, and run your Apple Shortcuts via a local Mac agent

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/obj-p/xcode-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server