---
title: "iOS Simulator MCP Server: Tap, Type and Screenshot in Simulator"
url: "https://mcpshelf.co/servers/ios-simulator"
description: "Let an agent drive Apple's iOS Simulator: read the accessibility tree, tap, swipe, type, take screenshots and install apps. macOS, Xcode and IDB setup."
updated: "2026-10-27"
site: "MCP Shelf"
---

# iOS Simulator MCP

> Lets an agent tap, type, swipe and screenshot its way through the iOS Simulator.

## At a glance

Joshua Yoes's server lets a coding agent check its own iOS work. It reads the accessibility tree of the screen in a booted simulator, finds elements by label, taps, swipes and types, and takes a screenshot or records a video. It can also install, launch and stop apps and open URLs, which is handy for jumping straight to a deep link.

It works through Apple's simctl and Meta's IDB tool, so it only runs on a Mac with Xcode. Update to version 1.3.3 or later, which fixed command injection bugs in older releases.

|  |  |
| --- | --- |
| Made by | Joshua Yoes and contributors |
| GitHub | https://github.com/joshuayoes/ios-simulator-mcp |
| Licence | MIT |
| npm package | [ios-simulator-mcp](https://www.npmjs.com/package/ios-simulator-mcp) 2.1.0 (13 Aug 2026) |
| GitHub stars | 2.2K |
| Downloads | 4.8K a week |
| Last commit | 23 Oct 2026 |
| Tools | 17 |
| Runs on | Your computer |
| Install check | Started in our test |
| Category | [Developer tools](https://mcpshelf.co/categories/developer-tools) |

**Our check:** We ran this exact config on 27 Oct 2026: it started and answered with 17 tools.

## Tools

We listed 17 tools on 27 Oct 2026. 6 only read; the rest can change things or run commands.

| Tool | Kind | What it is for |
| --- | --- | --- |
| `get_booted_sim_id` | reads | Returns the ID of the simulator that is running. |
| `open_simulator` | changes | Opens the Simulator app. |
| `ui_describe_all` | reads | Returns the accessibility tree of the whole screen. |
| `ui_tap` | changes | Taps a point on the screen, with an optional press duration. |
| `ui_type` | changes | Types text into the focused field. |
| `ui_swipe` | changes | Swipes from one point to another. |
| `ui_describe_point` | reads | Returns the element at given screen coordinates. |
| `ui_find_element` | reads | Finds elements by label or ID, optionally by type. |
| `ui_view` | reads | Returns a compressed screenshot for the model to look at. |
| `screenshot` | changes | Saves a full screenshot to a file. |
| `record_video` | changes | Starts recording the screen to a video file. |
| `stop_recording` | changes | Stops the recording. |
| `install_app` | changes | Installs a .app or .ipa on the simulator. |
| `launch_app` | changes | Launches an app by bundle ID, with optional environment variables. |
| `terminate_app` | changes | Stops a running app. |
| `open_url` | changes | Opens a URL or deep link in the simulator. |
| `list_apps` | reads | Lists the apps installed on the simulator. |

### How clearly it describes its tools

17 of 17 tools have a description and 17 of 17 say whether they change things. The tool list takes at least ~700 tokens of context. Every tool says whether it only reads or can change things, so a client can ask before the risky ones.

## Set it up

1. Install IDB: brew tap facebook/fb, brew install idb-companion, then pip install fb-idb for the idb command.
2. Boot a simulator from Xcode or with xcrun simctl boot.
3. Add the config below to your client.

### Claude Desktop

Where: claude_desktop_config.json (Settings → Developer → Edit Config)

```json
{
  "mcpServers": {
    "ios-simulator": {
      "command": "npx",
      "args": [
        "-y",
        "ios-simulator-mcp"
      ]
    }
  }
}
```

### Claude Code

Where: Your terminal, in the project folder

```bash
claude mcp add-json ios-simulator '{"command":"npx","args":["-y","ios-simulator-mcp"]}'
```

### Cursor

Where: ~/.cursor/mcp.json, or .cursor/mcp.json in a project

```json
{
  "mcpServers": {
    "ios-simulator": {
      "command": "npx",
      "args": [
        "-y",
        "ios-simulator-mcp"
      ]
    }
  }
}
```

### VS Code

Where: .vscode/mcp.json in your project

```json
{
  "servers": {
    "ios-simulator": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "ios-simulator-mcp"
      ]
    }
  }
}
```

### Windsurf

Where: ~/.codeium/windsurf/mcp_config.json

```json
{
  "mcpServers": {
    "ios-simulator": {
      "command": "npx",
      "args": [
        "-y",
        "ios-simulator-mcp"
      ]
    }
  }
}
```

### ChatGPT

Where: Not supported

ChatGPT only connects to remote servers by URL. This one runs on your computer, so use Claude, Cursor or VS Code.

Set IOS_SIMULATOR_MCP_FILTERED_TOOLS in env to hide tools you do not want, IOS_SIMULATOR_MCP_DEFAULT_OUTPUT_DIR to choose where screenshots go, and IOS_SIMULATOR_MCP_IDB_PATH if idb is not on your PATH.

## Settings

| Setting | Kind | Required | What it does |
| --- | --- | --- | --- |
| `IOS_SIMULATOR_MCP_FILTERED_TOOLS` | env | no | A comma-separated list of tools to hide. Example: `screenshot,record_video,stop_recording` |
| `IOS_SIMULATOR_MCP_DEFAULT_OUTPUT_DIR` | env | no | Where screenshots and videos go. Defaults to ~/Downloads. Example: `~/Code/my-app/tmp` |
| `IOS_SIMULATOR_MCP_IDB_PATH` | env | no | The path to idb, if it is not on your PATH. Example: `/usr/local/bin/idb` |
| `IDB_UDID` | env | no | Targets a specific simulator by UDID instead of the booted one. |

## What it can touch

**It can read**

- The simulator screen and its accessibility tree
- The list of installed apps

**It can change**

- Taps, swipes and text in the simulator
- Installs, launches and stops apps
- Screenshot and video files on your Mac

**Safer setup:** It only acts on simulators, never on a real device. Hide install_app or record_video with IOS_SIMULATOR_MCP_FILTERED_TOOLS if you do not want the model using them.

## Before you start

- macOS with Xcode and an iOS simulator
- Meta's IDB tool (idb-companion and the idb client)
- Node.js 20 or newer

## Good for

- A quick QA pass after an agent changes an iOS or React Native screen
- Checking accessibility labels on every element
- Capturing screenshots and screen recordings for a pull request

## If it does not work

**Tools fail with idb: command not found**
Install idb-companion with Homebrew and the idb client with pip, or point IOS_SIMULATOR_MCP_IDB_PATH at it.

**It says no simulator is booted**
Boot one from Xcode or with xcrun simctl boot, or call open_simulator.

**Screenshots land somewhere unexpected**
Relative paths go to ~/Downloads. Set IOS_SIMULATOR_MCP_DEFAULT_OUTPUT_DIR to your project folder.

**It will not start on Windows or Linux**
iOS simulators only run on macOS, so neither does this server.

## Similar servers

| Server | Tools | Runs on | Stars |
| --- | --- | --- | --- |
| [Grounded Docs (docs-mcp-server)](https://mcpshelf.co/servers/grounded-docs) | 12 | Your computer | 1.8K |
| [MCP Server for WinDbg](https://mcpshelf.co/servers/windbg) | 12 | Your computer | 1.6K |
| [MCP Language Server](https://mcpshelf.co/servers/mcp-language-server) | 6 | Your computer | 1.6K |
| [Nx MCP](https://mcpshelf.co/servers/nx) | 13 | Your computer | 1.4K |

## Questions

### Which version should I use?

Version 1.3.3 or later; earlier releases had command injection bugs. npx -y fetches the latest.

### Does it work with React Native and Flutter apps?

Yes. It works at the simulator level, so any app running there can be inspected and driven.

### How does it compare with XcodeBuildMCP?

XcodeBuildMCP builds and runs Xcode projects. This server focuses on driving and checking the simulator UI, and the two are often used together.

### Does it cost anything?

No. It is MIT licensed, and IDB and Xcode are free.

Full docs on GitHub: https://github.com/joshuayoes/ios-simulator-mcp

---

From [MCP Shelf](https://mcpshelf.co/): A short shelf of MCP servers that are worth installing. Index for agents: https://mcpshelf.co/llms.txt

