Skip to content
Download Longwave

iOS Simulator

iOS Simulator is an MCP server for controlling Apple's iOS Simulator. Its connected implementation exposes 17 tools for booting a simulator, inspecting the screen and sending device actions.

Add to Longwave Source

Install elsewhere

Install iOS Simulator

Choose a harness. These instructions start the same local MCP server shown on this page.

Claude Code

Run this in your terminal. It adds a user-scoped server; use --scope project instead if it should apply only to the current project.

terminal
claude mcp add --scope user --transport stdio ios-simulator -- npx -y ios-simulator-mcp

What it does

iOS Simulator MCP gives an agent a direct connection to an iOS Simulator on a Mac. It can inspect the running app and perform simulator actions without turning every check into a manual Xcode session.

  • Boot and manage an iOS Simulator.
  • Inspect the current simulator screen and app state.
  • Tap, type and send device actions.
  • Capture screenshots while an agent tests an app.
  • Use the live function schemas instead of guessing simulator commands.

Available functions

get_booted_sim_id Get the ID of the currently booted iOS simulator
install_app Installs an app bundle (.app or .ipa) on the iOS Simulator

Arguments

app_path required
string Path to the app bundle (.app directory or .ipa file) to install
udid
string Udid of target, can also be set with the IDB_UDID env var
launch_app Launches an app on the iOS Simulator by bundle identifier

Arguments

bundle_id required
string Bundle identifier of the app to launch (e.g., com.apple.mobilesafari)
env
object Environment variables to pass to simctl launch
terminate_running
boolean Terminate the app if it is already running before launching
udid
string Udid of target, can also be set with the IDB_UDID env var
list_apps Lists all installed apps on the iOS Simulator with their bundle identifiers and display names

Arguments

udid
string Udid of target, can also be set with the IDB_UDID env var
open_simulator Opens the iOS Simulator application
open_url Opens a URL in the iOS Simulator, useful for testing deep links and universal links

Arguments

udid
string Udid of target, can also be set with the IDB_UDID env var
url required
string The URL or deep link to open (e.g., https://example.com or myapp://screen/detail)
record_video Records a video of the iOS Simulator using simctl directly

Arguments

codec
string Specifies the codec type: "h264" or "hevc". Default is "hevc". Allowed values: h264, hevc
display
string Display to capture: "internal" or "external". Default depends on device type. Allowed values: internal, external
force
boolean Force the output file to be written to, even if the file already exists.
mask
string For non-rectangular displays, handle the mask by policy: "ignored", "alpha", or "black". Allowed values: ignored, alpha, black
output_path
string 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.
udid
string Udid of target, can also be set with the IDB_UDID env var
screenshot Takes a screenshot of the iOS Simulator

Arguments

display
string Display to capture (internal or external). Default depends on device type. Allowed values: internal, external
mask
string For non-rectangular displays, handle the mask by policy (ignored, alpha, or black) Allowed values: ignored, alpha, black
output_path required
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.
type
string Image format (png, tiff, bmp, gif, or jpeg). Default is png. Allowed values: png, tiff, bmp, gif, jpeg
udid
string Udid of target, can also be set with the IDB_UDID env var
stop_recording Stops the simulator video recording using killall
terminate_app Terminates a running app on the iOS Simulator by bundle identifier

Arguments

bundle_id required
string Bundle identifier of the app to terminate (e.g., com.apple.mobilesafari)
udid
string Udid of target, can also be set with the IDB_UDID env var
ui_describe_all Describes accessibility information for the entire screen in the iOS Simulator

Arguments

udid
string Udid of target, can also be set with the IDB_UDID env var
ui_describe_point Returns the accessibility element at given co-ordinates on the iOS Simulator's screen

Arguments

udid
string Udid of target, can also be set with the IDB_UDID env var
x required
number The x-coordinate
y required
number The y-coordinate
ui_find_element Searches the accessibility tree and returns elements matching the given criteria

Arguments

caseSensitive
boolean Whether search matching is case-sensitive (default: false) Default: false
matchMode
string Match mode for search strings: 'substring' (default) or 'exact' Allowed values: substring, exact Default: substring
search required
array Array of search strings. An element matches if ANY string matches against its AXLabel or AXUniqueId
type
string Filter by element type (e.g. 'Button', 'StaticText', 'Group'). Case-insensitive exact match
udid
string Udid of target, can also be set with the IDB_UDID env var
ui_swipe Swipe on the screen in the iOS Simulator

Arguments

delta
number The size of each step in the swipe (default is 1) Default: 1
duration
string Swipe duration in seconds (e.g., 0.1)
udid
string Udid of target, can also be set with the IDB_UDID env var
x_end required
number The ending x-coordinate
x_start required
number The starting x-coordinate
y_end required
number The ending y-coordinate
y_start required
number The starting y-coordinate
ui_tap Tap on the screen in the iOS Simulator

Arguments

duration
string Press duration
udid
string Udid of target, can also be set with the IDB_UDID env var
x required
number The x-coordinate
y required
number The x-coordinate
ui_type Input text into the iOS Simulator

Arguments

text required
string Text to input
udid
string Udid of target, can also be set with the IDB_UDID env var
ui_view Get the image content of a compressed screenshot of the current simulator view

Arguments

udid
string Udid of target, can also be set with the IDB_UDID env var

Questions people ask

Does iOS Simulator MCP require Xcode?

Yes. The server controls Apple's iOS Simulator, so the Mac running it needs Xcode's simulator tooling and an available simulator device.

How do I use iOS Simulator MCP with Claude Code?

Add the server to Claude Code on the Mac that has Xcode and the simulator. Claude Code can use the simulator functions after the local MCP process connects.

Can iOS Simulator MCP take screenshots?

Screenshot support depends on the functions advertised by the connected version. When the server exposes it, the function and its arguments appear in the generated list on this page.

How do I set up iOS Simulator MCP on a Mac?

Install Xcode and boot an iOS Simulator first. Then add the catalog-backed server to an MCP client on that Mac so it can reach the simulator process.

What is the difference between iOS Simulator MCP and XcodeBuildMCP?

iOS Simulator MCP is for controlling a running simulator and app. XcodeBuildMCP targets project builds and Xcode workflows. They solve different parts of iOS development.

Test the iPhone flow without leaving the thread.

Give the agent the simulator instead of asking it to guess what the app did.