home / mcp / mcp server for ios simulator mcp server

MCP Server for iOS Simulator MCP Server

Model Context Protocol (MCP) implementation for iOS simulators

Installation
Add the following to your MCP client configuration file.

Configuration

View docs
{
  "mcpServers": {
    "atom2ueki-mcp-server-ios-simulator": {
      "command": "node",
      "args": [
        "/path/to/your/mcp-server-ios-simulator/dist/index.js"
      ],
      "env": {
        "SIMULATOR_TIMEOUT": "30000",
        "SIMULATOR_DEFAULT_OS": "18.2",
        "SIMULATOR_DEFAULT_DEVICE": "iPhone 16"
      }
    }
  }
}

You can manage iOS simulators programmatically using a dedicated MCP server that implements the Model Context Protocol over a stdio transport. This lets you boot, control, and interact with iOS simulators from MCP clients in a consistent, scriptable way, while keeping logs separate from the transport channel for reliability and debugging.

How to use

Use an MCP client to connect to the local MCP server over stdio. The server exposes a set of MCP tools that let you list, boot, shut down, and manage simulators, as well as install and launch apps, take screenshots, and simulate taps. For example, you can boot a simulator by its UDID, then perform actions on it or start applications. If you want to run multiple simulators concurrently, you can create and manage separate sessions.

To integrate with an MCP client such as Claude Desktop, configure the client to launch the MCP server as a local process. The server is started via a standard Node.js command that points to the built entry file.

How to install

Prerequisites you need before installing and running the server:

• Node.js v16 or later

• macOS with Xcode installed and iOS simulators available

• TypeScript 4.5+ if you build from source

Step-by-step installation and setup:

1) Install via package manager (example shown) – you can also clone and install locally if you prefer.

2) Build the project to generate the runtime artifacts.

3) Start the MCP server so it can accept MCP client connections.

Configuration

const config = {
  simulator: {
    defaultDevice: process.env.SIMULATOR_DEFAULT_DEVICE || 'iPhone 16',
    defaultOS: process.env.SIMULATOR_DEFAULT_OS || '18.2',
    timeout: parseInt(process.env.SIMULATOR_TIMEOUT || '30000', 10),
  }
};

Environment variables you can set to customize behavior include SIMULATOR_DEFAULT_DEVICE for the default device, SIMULATOR_DEFAULT_OS for the OS version, and SIMULATOR_TIMEOUT for operation timeouts. These are read by the server at startup.

Example usage with Claude Desktop

{
  "mcpServers": {
    "simulator": {
      "command": "node",
      "args": [
        "/path/to/your/mcp-server-ios-simulator/dist/index.js"
      ]
    }
  }
}

Development

This server is structured to separate concerns: a simulator management layer, an MCP protocol implementation, a stdio transport bridge, and a file-based logger. This modular design helps you scale to multiple concurrent simulator sessions without transport interference.

Notes and considerations

- The server uses stdio as its transport, which is ideal for Claude Desktop and other MCP clients that support the MCP protocol over a local process bridge.

- Logging is performed to files to avoid cluttering the stdio stream and to provide reliable post-run diagnostics.

Available tools

list-available-simulators

List all available iOS simulators along with their UDIDs so you can reference them for direct management.

boot-simulator-by-udid

Boot a specific simulator by its UDID to start interacting with it.

shutdown-simulator-by-udid

Shut down a specific simulator using its UDID.

list-booted-simulators

Show all simulators currently booted and ready for app operations.

list-simulator-sessions

List all active simulator sessions tracked by the server.

create-simulator-session

Create a new simulator session and begin tracking it with a session ID.

terminate-simulator-session

Terminate a simulator session, shutting down the associated simulator and cleaning up session state.

create-and-boot-simulator

Create a new simulator session and boot the corresponding simulator in one step.

boot-simulator

Boot a simulator that is associated with an existing session.

shutdown-simulator

Shutdown the simulator associated with an existing session.

install-app

Install an application on a target simulator.

launch-app

Launch an installed application on a target simulator.

terminate-app

Terminate a running application on a simulator.

take-screenshot

Capture a screenshot of the current simulator screen.

tap-coordinate

Perform a tap at specified screen coordinates on the simulator.