simulator-use vs Xcode MCP
Pick Xcode MCP if you work in Xcode 27 and want Apple's own agent tools: they come with Xcode and reach its build settings, schemes, previews and debugger as well as the Simulator. (Apple: Giving external agents access to Xcode, Xcode MCP's tool list, as the benchmark recorded it)
Pick simulator-use if the agent should get the screen as text in each answer and tap by label or id rather than at coordinates, from any MCP client, without turning on Xcode's agent access. (simulator-use README, Xcode MCP's tool list, as the benchmark recorded it, Apple: Xcode 27 release notes)
Measured on one Mac: simulator-use read 194 tokens per sign-in, Xcode MCP 12,732 (est.).
Measured side by side
From the one-Mac benchmark of November 1, 2026: the same app and iPhone 17 Pro Simulator, one tool at a time, each through its own MCP server. Times are medians; tokens are estimates (characters / 4).
| Xcode MCP | simulator-use | |
|---|---|---|
| Signing in, step by step | 3.58 s | 3.50 s |
| Tokens read per sign-in (est.) | 12,732 | 194 |
| Sign-ins completed | 10 of 10 | 10 of 10 |
| Signing in, batched | no batched run | 2.87 s |
| Tokens read, batched (est.) | 179 | |
| Batched sign-ins completed | 10 of 10 | |
| Reading the screen (median) | 0.09 s | 0.19 s |
| Tapping a button (median) | 0.71 s | 0.68 s |
| Typing into a field (median) | 1.13 s | 1.14 s |
| Tool list in context (est.) | 19,620 | 2,443 |
| Setup its docs ask for | 4.21 s | 0.12 s |
Xcode MCP 27.0 (27A266a), simulator-use 0.15.0. Every call is in bench/results/2026-11-01.
What each does
From each tool's own README, license and docs, read on October 31, 2026.
| Xcode MCP | simulator-use | |
|---|---|---|
| License | Part of Xcode (Apple: Giving external agents access to Xcode) | MIT (simulator-use LICENSE) |
| Builds the app | Yes: BuildProject, and DeviceInteractionInstallAndRun builds, installs and launches (Xcode MCP's tool list, as the benchmark recorded it) | Yes: builds the Xcode project, installs and launches it (app_run) (simulator-use README) |
| Runs tests | Yes: RunAllTests and RunSomeTests (Xcode MCP's tool list, as the benchmark recorded it) | XCTest and XCUITest, case by case (tests_run) (simulator-use README) |
| Screen as text | A UI hierarchy file and a screenshot per interaction, answered as file paths (Xcode MCP's tool list, as the benchmark recorded it) | One line per element: kind, label, #id, state and position (simulator-use README) |
| How it taps | At coordinates (t x y), taken from the hierarchy's hit points (Xcode MCP's tool list, as the benchmark recorded it) | By #id or label, or at @x,y (simulator-use README) |
| Cloud option | None in Apple's docs (Apple: Giving external agents access to Xcode) | A NoMac cloud iPhone (simulator-use cloud start), billed per minute (simulator-use README) |
| Needs besides Xcode | Xcode 27, with sudo xcrun mcp-server enable, or Xcode open with "Allow external agents to use Xcode tools" turned on (Apple: Xcode 27 release notes, Apple: Giving external agents access to Xcode) | Node 20. Its engine is built on AXe's frameworks, which it bundles (simulator-use README) |
Where simulator-use is better
- The screen comes back as text in the answer; Xcode MCP answers with paths to a hierarchy file and a screenshot that the agent opens. (simulator-use README, Xcode MCP's tool list, as the benchmark recorded it)
- Taps go to an element by #id or label; Xcode MCP taps at coordinates from the last hierarchy it read. (simulator-use README, Xcode MCP's tool list, as the benchmark recorded it)
- Tokens read per sign-in (est.): 194 tokens against Xcode MCP's 12,732 tokens.
- Tokens per screen read (est.): 72 tokens against Xcode MCP's 2,410 tokens.
- Tool list in the agent's context (est.): 2,443 tokens against Xcode MCP's 19,620 tokens.
- Setup its docs ask for: 0.12 s against Xcode MCP's 4.21 s.
A measured difference is listed when it is 5% or more.
Switching
Add simulator-use to Claude Code with one line (other clients: install):
The calls each made in the benchmark, step for step:
| Xcode MCP | simulator-use | |
|---|---|---|
| Setup | DeviceInteractionStartSession {"deviceIdentifier":"<udid>","sessionIdentifier":"<session key>"} | device_use {"device":"<udid>"} |
| Read the screen | DeviceInteractionSynthesize {"interactSessionKey":"<session key>"} | ui_look {} |
| Tap a button | DeviceInteractionSynthesize {"interactSessionKey":"<session key>","interactionCommand":"t 201 350"} | ui_act {"steps":["tap #signIn"]} |
| Type into a field | DeviceInteractionSynthesize {"interactSessionKey":"<session key>","interactionCommand":"t 201 194 sender keyboard kbd gary@example.com"} | ui_act {"steps":["fill #email gary@example.com"]} |
| Several steps in one call | none | ui_act {"steps":["fill #email gary@example.com","fill #password secret1","tap #signIn"]} |
| Build, install and launch | BuildProject, or DeviceInteractionInstallAndRun (Xcode MCP's tool list, as the benchmark recorded it) | app_run (simulator-use README) |
| Run the tests | RunAllTests or RunSomeTests (Xcode MCP's tool list, as the benchmark recorded it) | tests_run (simulator-use README) |
Sources
Read on October 31, 2026. The measured numbers: benchmarks and the raw results.