Track MCP LogoTrack MCP
Track MCP LogoTrack MCP

The world's largest repository of Model Context Protocol servers. Discover, explore, and submit MCP tools.

Product

  • Categories
  • Top MCP
  • New & Updated

Company

  • About

Legal

  • Privacy Policy
  • Terms of Service
  • Cookie Policy

© 2025 TrackMCP. All rights reserved.

Built with ❤️ by Krishna Goyal

    Ios Simulator Mcp

    MCP server for interacting with the iOS simulator JavaScript-based implementation. Trusted by 1200+ developers. Trusted by 1200+ developers.

    1,205 stars
    JavaScript
    Updated Nov 4, 2025

    Documentation

    iOS Simulator MCP Server

    Install MCP Server NPM Version

    A Model Context Protocol (MCP) server for interacting with iOS simulators. This server allows you to interact with iOS simulators by getting information about them, controlling UI interactions, and inspecting UI elements.

    Security Notice: Command injection vulnerabilities present in versions < 1.3.3 have been fixed. Please update to v1.3.3 or later. See SECURITY.md for details.

    https://github.com/user-attachments/assets/453ebe7b-cc93-4ac2-b08d-0f8ac8339ad3

    🌟 Featured In

    This project has been featured and mentioned in various publications and resources:

    • Claude Code Best Practices article - Anthropic's engineering blog showcasing best practices
    • React Native Newsletter Issue 187 - Featured in the most popular React Native community newsletter
    • Mobile Automation Newsletter - #56 - Featured a long running newsletter about mobile testing and automation resources
    • punkeye/awesome-mcp-server listing - Listed in one of the most popular curated awesome MCP servers collection

    Tools

    get_booted_sim_id

    Description: Get the ID of the currently booted iOS simulator

    Parameters: No Parameters

    open_simulator

    Description: Opens the iOS Simulator application

    Parameters: No Parameters

    ui_describe_all

    Description: Describes accessibility information for the entire screen in the iOS Simulator

    Parameters:

    typescript
    {
      /**
       * Udid of target, can also be set with the IDB_UDID env var
       * Format: UUID (8-4-4-4-12 hexadecimal characters)
       */
      udid?: string;
    }

    ui_tap

    Description: Tap on the screen in the iOS Simulator

    Parameters:

    typescript
    {
      /**
       * Press duration in seconds (decimal numbers allowed)
       */
      duration?: string;
      /**
       * Udid of target, can also be set with the IDB_UDID env var
       * Format: UUID (8-4-4-4-12 hexadecimal characters)
       */
      udid?: string;
      /** The x-coordinate */
      x: number;
      /** The y-coordinate */
      y: number;
    }

    ui_type

    Description: Input text into the iOS Simulator

    Parameters:

    typescript
    {
      /**
       * Udid of target, can also be set with the IDB_UDID env var
       * Format: UUID (8-4-4-4-12 hexadecimal characters)
       */
      udid?: string;
      /**
       * Text to input
       * Format: ASCII printable characters only
       */
      text: string;
    }

    ui_swipe

    Description: Swipe on the screen in the iOS Simulator

    Parameters:

    typescript
    {
      /**
       * Swipe duration in seconds (decimal numbers allowed)
       */
      duration?: string;
      /**
       * Udid of target, can also be set with the IDB_UDID env var
       * Format: UUID (8-4-4-4-12 hexadecimal characters)
       */
      udid?: string;
      /** The starting x-coordinate */
      x_start: number;
      /** The starting y-coordinate */
      y_start: number;
      /** The ending x-coordinate */
      x_end: number;
      /** The ending y-coordinate */
      y_end: number;
      /** The size of each step in the swipe (default is 1) */
      delta?: number;
    }

    ui_describe_point

    Description: Returns the accessibility element at given co-ordinates on the iOS Simulator's screen

    Parameters:

    typescript
    {
      /**
       * Udid of target, can also be set with the IDB_UDID env var
       * Format: UUID (8-4-4-4-12 hexadecimal characters)
       */
      udid?: string;
      /** The x-coordinate */
      x: number;
      /** The y-coordinate */
      y: number;
    }

    ui_view

    Description: Get the image content of a compressed screenshot of the current simulator view

    Parameters:

    typescript
    {
      /**
       * Udid of target, can also be set with the IDB_UDID env var
       * Format: UUID (8-4-4-4-12 hexadecimal characters)
       */
      udid?: string;
    }

    screenshot

    Description: Takes a screenshot of the iOS Simulator

    Parameters:

    typescript
    {
      /**
       * Udid of target, can also be set with the IDB_UDID env var
       * Format: UUID (8-4-4-4-12 hexadecimal characters)
       */
      udid?: string;
      /** File path where the screenshot will be saved. If relative, it uses the directory specified by the `IOS_SIMULATOR_MCP_DEFAULT_OUTPUT_DIR` env var, or `~/Downloads` if not set. */
      output_path: string;
      /** Image format (png, tiff, bmp, gif, or jpeg). Default is png. */
      type?: "png" | "tiff" | "bmp" | "gif" | "jpeg";
      /** Display to capture (internal or external). Default depends on device type. */
      display?: "internal" | "external";
      /** For non-rectangular displays, handle the mask by policy (ignored, alpha, or black) */
      mask?: "ignored" | "alpha" | "black";
    }

    record_video

    Description: Records a video of the iOS Simulator using simctl directly

    Parameters:

    typescript
    {
      /** Optional output path. If not provided, a default name will be used. The file will be saved in the directory specified by `IOS_SIMULATOR_MCP_DEFAULT_OUTPUT_DIR` or in `~/Downloads` if the environment variable is not set. */
      output_path?: string;
      /** Specifies the codec type: "h264" or "hevc". Default is "hevc". */
      codec?: "h264" | "hevc";
      /** Display to capture: "internal" or "external". Default depends on device type. */
      display?: "internal" | "external";
      /** For non-rectangular displays, handle the mask by policy: "ignored", "alpha", or "black". */
      mask?: "ignored" | "alpha" | "black";
      /** Force the output file to be written to, even if the file already exists. */
      force?: boolean;
    }

    stop_recording

    Description: Stops the simulator video recording using killall

    Parameters: No Parameters

    install_app

    Description: Installs an app bundle (.app or .ipa) on the iOS Simulator

    Parameters:

    typescript
    {
      /**
       * Udid of target, can also be set with the IDB_UDID env var
       * Format: UUID (8-4-4-4-12 hexadecimal characters)
       */
      udid?: string;
      /** Path to the app bundle (.app directory or .ipa file) to install */
      app_path: string;
    }

    launch_app

    Description: Launches an app on the iOS Simulator by bundle identifier

    Parameters:

    typescript
    {
      /**
       * Udid of target, can also be set with the IDB_UDID env var
       * Format: UUID (8-4-4-4-12 hexadecimal characters)
       */
      udid?: string;
      /** Bundle identifier of the app to launch (e.g., com.apple.mobilesafari) */
      bundle_id: string;
      /** Terminate the app if it is already running before launching */
      terminate_running?: boolean;
    }

    💡 Use Case: QA Step via MCP Tool Calls

    This MCP server allows AI assistants integrated with a Model Context Protocol (MCP) client to perform Quality Assurance tasks by making tool calls. This is useful immediately after implementing features to help ensure UI consistency and correct behavior.

    How to Use

    After a feature implementation, instruct your AI assistant within its MCP client environment to use the available tools. For example, in Cursor's agent mode, you could use the prompts below to quickly validate and document UI interactions.

    Example Prompts

    • Verify UI Elements:
    code
    Verify all accessibility elements on the current screen
    • Confirm Text Input:
    code
    Enter "QA Test" into the text input field and confirm the input is correct
    • Check Tap Response:
    code
    Tap on coordinates x=250, y=400 and verify the expected element is triggered
    • Validate Swipe Action:
    code
    Swipe from x=150, y=600 to x=150, y=100 and confirm correct behavior
    • Detailed Element Check:
    code
    Describe the UI element at position x=300, y=350 to ensure proper labeling and functionality
    • Show Your AI Agent the Simulator Screen:
    code
    View the current simulator screen
    • Take Screenshot:
    code
    Take a screenshot of the current simulator screen and save it to my_screenshot.png
    • Record Video:
    code
    Start recording a video of the simulator screen (saves to the default output directory, which is `~/Downloads` unless overridden by `IOS_SIMULATOR_MCP_DEFAULT_OUTPUT_DIR`)
    • Stop Recording:
    code
    Stop the current simulator screen recording
    • Install App:
    code
    Install the app at path/to/MyApp.app on the simulator
    • Launch App:
    code
    Launch the Safari app (com.apple.mobilesafari) on the simulator

    Prerequisites

    • Node.js
    • macOS (as iOS simulators are only available on macOS)
    • Xcode and iOS simulators installed
    • Facebook IDB tool (see install guide)

    Installation

    This section provides instructions for integrating the iOS Simulator MCP server with different Model Context Protocol (MCP) clients.

    Installation with Cursor

    Cursor manages MCP servers through its configuration file located at ~/.cursor/mcp.json.

    Option 1: Using NPX (Recommended)

    1. Edit your Cursor MCP configuration file. You can often open it directly from Cursor or use a command like:

    bash
    # Open with your default editor (or use 'code', 'vim', etc.)
        open ~/.cursor/mcp.json
        # Or use Cursor's command if available
        # cursor ~/.cursor/mcp.json

    2. Add or update the mcpServers section with the iOS simulator server configuration:

    json
    {
          "mcpServers": {
            // ... other servers might be listed here ...
            "ios-simulator": {
              "command": "npx",
              "args": ["-y", "ios-simulator-mcp"]
            }
          }
        }

    Ensure the JSON structure is valid, especially if mcpServers already exists.

    3. Restart Cursor for the changes to take effect.

    Option 2: Local Development

    1. Clone this repository:

    bash
    git clone https://github.com/joshuayoes/ios-simulator-mcp
        cd ios-simulator-mcp

    2. Install dependencies:

    bash
    npm install

    3. Build the project:

    bash
    npm run build

    4. Edit your Cursor MCP configuration file (as shown in Option 1).

    5. Add or update the mcpServers section, pointing to your local build:

    json
    {
          "mcpServers": {
            // ... other servers might be listed here ...
            "ios-simulator": {
              "command": "node",
              "args": ["/full/path/to/your/ios-simulator-mcp/build/index.js"]
            }
          }
        }

    Important: Replace /full/path/to/your/ with the absolute path to where you cloned the ios-simulator-mcp repository.

    6. Restart Cursor for the changes to take effect.

    Installation with Claude Code

    Claude Code CLI can manage MCP servers using the claude mcp commands or by editing its configuration files directly. For more details on Claude Code MCP configuration, refer to the official documentation.

    Option 1: Using NPX (Recommended)

    1. Add the server using the claude mcp add command:

    bash
    claude mcp add ios-simulator npx ios-simulator-mcp

    2. Restart any running Claude Code sessions if necessary.

    Option 2: Local Development

    1. Clone this repository, install dependencies, and build the project as described in the Cursor "Local Development" steps 1-3.

    2. Add the server using the claude mcp add command, pointing to your local build:

    bash
    claude mcp add ios-simulator --command node --args "/full/path/to/your/ios-simulator-mcp/build/index.js"

    Important: Replace /full/path/to/your/ with the absolute path to where you cloned the ios-simulator-mcp repository.

    3. Restart any running Claude Code sessions if necessary.

    Configuration

    Environment Variables

    VariableDescriptionExample
    IOS_SIMULATOR_MCP_FILTERED_TOOLSA comma-separated list of tool names to filter out from being registered.screenshot,record_video,stop_recording
    IOS_SIMULATOR_MCP_DEFAULT_OUTPUT_DIRSpecifies a default directory for output files like screenshots and video recordings. If not set, ~/Downloads will be used. This can be handy if your agent has limited access to the file system.~/Code/awesome-project/tmp
    IOS_SIMULATOR_MCP_IDB_PATHSpecifies a custom path to the IDB executable. If not set, idb will be used (assuming it's in your PATH). Useful if IDB is installed in a non-standard location.~/bin/idb or /usr/local/bin/idb

    Configuration Example

    json
    {
      "mcpServers": {
        "ios-simulator": {
          "command": "npx",
          "args": ["-y", "ios-simulator-mcp"],
          "env": {
            "IOS_SIMULATOR_MCP_FILTERED_TOOLS": "screenshot,record_video,stop_recording",
            "IOS_SIMULATOR_MCP_DEFAULT_OUTPUT_DIR": "~/Code/awesome-project/tmp",
            "IOS_SIMULATOR_MCP_IDB_PATH": "~/bin/idb"
          }
        }
      }
    }

    MCP Registry Server Listings

    MseeP.ai Security Assessment Badge

    License

    MIT

    Similar MCP

    Based on tags & features

    • WA

      Waha Mcp

      JavaScript00
    • WI

      Wizzy Mcp Tmdb

      JavaScript00
    • RI

      Rijksmuseum Mcp

      JavaScript·
      59
    • MC

      Mcp Server Playwright

      JavaScript·
      262

    Trending MCP

    Most active this week

    • PL

      Playwright Mcp

      TypeScript·
      22.1k
    • SE

      Serena

      Python·
      14.5k
    • MC

      Mcp Playwright

      TypeScript·
      4.9k
    • MC

      Mcp Server Cloudflare

      TypeScript·
      3.0k
    View All MCP Servers

    Similar MCP

    Based on tags & features

    • WA

      Waha Mcp

      JavaScript00
    • WI

      Wizzy Mcp Tmdb

      JavaScript00
    • RI

      Rijksmuseum Mcp

      JavaScript·
      59
    • MC

      Mcp Server Playwright

      JavaScript·
      262

    Trending MCP

    Most active this week

    • PL

      Playwright Mcp

      TypeScript·
      22.1k
    • SE

      Serena

      Python·
      14.5k
    • MC

      Mcp Playwright

      TypeScript·
      4.9k
    • MC

      Mcp Server Cloudflare

      TypeScript·
      3.0k