ios-agent-driver
Allows an AI agent to control the iOS Simulator, performing actions such as tapping, typing, swiping, and reading the accessibility tree to test iOS apps programmatically.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ios-agent-driverOpen Settings and confirm Notifications is enabled"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ios-agent-driver
An MCP server that lets an AI agent drive the iOS Simulator in a loop — so an agent can actually use your app: tap, type, swipe, read the screen, and verify what happened.
It bridges the gap between iOS development and agentic testing. The primitives to
control a simulator exist (xcrun simctl, Meta's idb), but
nothing packages them into tools an agent can call to close the
perceive → decide → act → observe loop. This does.
Accessibility-tree-first perception. The agent reasons over labeled UI elements (
describe_ui) and taps by label, not by guessing pixel coordinates — far more robust to layout changes.Screenshot fallback. For custom-drawn views that don't expose accessibility,
screenshotgives a vision fallback and a way to verify state.Loud failures. A tap on a missing label returns the nearest labels on screen, not a silent no-op.
How it works
Agent (Claude / any MCP client)
goal: "log a leg workout, confirm it appears in History"
observe → decide → act → observe (loop)
│ MCP (stdio)
ios-agent-driver
│ │
xcrun simctl idb (+ companion)
lifecycle, screenshots accessibility tree,
deeplinks, permissions tap / type / swipe by elementRelated MCP server: iOS Automation MCP Server
Requirements
macOS with Xcode (provides
xcrun simctl)idb for UI perception and actions:
brew install idb-companion pip3 install fb-idb idb list-targets # confirm it sees your booted simLifecycle tools work without idb;
describe_ui/tap/type_text/swiperequire it and will tell you how to install it if it's missing.Node.js ≥ 18
Install
git clone https://github.com/CodeJonesW/ios-agent-driver.git
cd ios-agent-driver
npm install # builds via the prepare scriptRegister with Claude Code
Add to your MCP config (user-level ~/.claude.json, or a project .mcp.json):
{
"mcpServers": {
"ios-agent-driver": {
"command": "node",
"args": ["/absolute/path/to/ios-agent-driver/dist/server.js"]
}
}
}Or with the Claude Code CLI:
claude mcp add ios-agent-driver -- node /absolute/path/to/ios-agent-driver/dist/server.jsTools
Tool | Backend | Purpose |
| simctl | List devices (udid, name, state, runtime). |
| simctl | Boot a sim (defaults to booted, else first iPhone). |
| simctl | Install a built |
| simctl | Launch an app by bundle id. |
| simctl | Terminate a running app. |
| simctl | Uninstall + reinstall for a clean state. |
| simctl | Open a URL / universal link. |
| simctl | Grant/revoke/reset a privacy permission. |
| idb | Primary perception — accessibility tree as JSON. |
| simctl | PNG of the current screen (vision fallback). |
| idb | Tap by accessibility label (preferred) or x,y. |
| idb | Type into the focused field. |
| idb | Swipe/scroll by direction or coordinates. |
| idb | Hardware buttons (HOME, LOCK, …). |
The loop, by example
A typical agent goal runs as a bounded loop:
GOAL: "open Settings and confirm Notifications is enabled"
1. boot_sim
2. launch { bundle_id: "com.apple.Preferences" }
3. describe_ui → see "Notifications" cell
4. tap { label: "Notifications" }
5. describe_ui → assert the toggle state
(re-read after each action; stop when the goal predicate holds
or a step budget is exhausted)The agent owns the loop and the success predicate; this server provides the primitives. That keeps the tool simple and the test logic where it belongs.
Development
npm run build # compile TypeScript → dist/
npm start # run the server on stdioLicense
MIT © Will Jones (CodeJonesW)
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/CodeJonesW/ios-agent-driver'
If you have feedback or need assistance with the MCP directory API, please join our Discord server