awesome-ios-sim
Manages iOS Simulator state, enabling snapshot capture, diffing, planning, and applying of simulator configurations.
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., "@awesome-ios-simcapture the current state of my iPhone 17 Pro simulator"
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.
awesome-ios-sim
简体中文 · MCP guide · DeepSeek Harness · Architecture
Simulator State as Code for iOS developers, CI pipelines, and AI agents.
awesome-ios-sim turns an iOS Simulator setup into a versioned profile that can be captured, diffed,
planned, reviewed, and safely applied. It provides both a deterministic CLI and an MCP stdio server.
It is also installable as a dsh-plugin bundle for DeepSeek Harness.
Project status: alpha. The state schema is
v1alpha1. Review generated plans before applying them, especially plans containingeraseor app removal operations.
Why this exists
Simulator automation is usually spread across shell scripts, undocumented defaults, and manual setup. That makes test environments difficult to reproduce and gives AI agents an unsafe, untyped shell surface.
This project introduces one workflow:
profile + current snapshot -> diff -> deterministic plan -> explicit confirmation -> audited applyDeclarative: commit simulator profiles next to tests and application code.
Reviewable: inspect the exact ordered operation plan before mutation.
Agent-safe: MCP tools use JSON Schema and
simulator_applydefaults to dry-run.Capability-aware: exact, best-effort, and unsupported state are reported explicitly.
Public API only: mutations go through Apple's
xcrun simctl; no private CoreSimulator frameworks.Local-first: no daemon, cloud account, telemetry, or API key.
Related MCP server: Shotter
Architecture
flowchart LR
P[State profile] --> E[Pure Swift state engine]
S[Live or saved snapshot] --> E
E --> D[Diff]
E --> PL[Ordered plan]
PL --> C{Explicit confirm?}
C -- No --> DR[Dry-run report]
C -- Yes --> X[Typed simctl driver]
X --> J[Execution receipts]
CLI[CLI] --> E
MCP[MCP stdio server] --> EThe state engine has no Xcode dependency and is tested with fixtures. Only SimctlDriver touches the
host process boundary. The CLI and MCP server share the same planner, validation, and apply gates.
Requirements
macOS 13 or later.
Swift 6.
Full Xcode with an iOS Simulator runtime for live inventory, snapshot, or apply operations.
xcode-selectconfigured to the intended Xcode installation.
Command Line Tools alone can build the package, but they do not provide CoreSimulator or simctl.
Install
git clone https://github.com/qubyyang/awesome-ios-sim.git
cd awesome-ios-sim
swift build -c releaseThe executables are produced at:
.build/release/ios-sim-state
.build/release/ios-sim-state-mcpHomebrew distribution and signed release artifacts are planned after the schema stabilizes.
Quick start
List available simulators:
swift run ios-sim-state inventoryCapture one simulator:
swift run ios-sim-state snapshot --device <UDID> > simulator.snapshot.jsonGenerate an offline plan from the included example:
swift run ios-sim-state plan \
--profile Examples/ui-tests.profile.json \
--snapshot Examples/ui-tests.snapshot.json > simulator.plan.jsonPreview apply behavior without mutation (the default):
swift run ios-sim-state apply --plan simulator.plan.jsonApply a reviewed plan and retain an execution journal:
swift run ios-sim-state apply \
--plan simulator.plan.json \
--confirm \
--journal simulator.report.jsonapply stops at the first failing operation. Each receipt contains the executed argument arrays, exit
code, stdout, stderr, and timestamps.
State profile
Profiles are JSON documents validated against
schemas/v1alpha1/simulator-state.schema.json.
Fields with safe defaults may be omitted.
{
"apiVersion": "awesome-ios-sim/v1alpha1",
"kind": "SimulatorState",
"metadata": { "name": "ui-tests" },
"target": {
"name": "iPhone 17 Pro",
"runtime": "com.apple.CoreSimulator.SimRuntime.iOS-27-0"
},
"spec": {
"power": "shutdown",
"applications": [
{
"bundleIdentifier": "com.example.app",
"sourcePath": "/absolute/path/to/Example.app",
"running": true,
"launchArguments": ["--uitesting"]
}
],
"preferences": [
{
"domain": "com.example.app",
"key": "hasSeenOnboarding",
"value": false
}
],
"statusBar": { "time": "09:41", "batteryLevel": 100 }
}
}power: "unchanged" restores the original power state after temporary work. When an erase is planned,
a booted device is shut down first. Boot operations wait for simctl bootstatus -b before dependent work.
CLI
Command | Mutation | Purpose |
| No | List runtimes and simulators as stable JSON. |
| No | Capture managed state and capability metadata. |
| No | Show desired/current differences. |
| No | Produce an ordered operation plan. |
| No | Return a dry-run report. |
| Yes | Execute the reviewed plan serially. |
All machine-facing output is JSON. Use --compact for one-line output.
MCP for AI agents
Build the MCP executable and point any stdio-capable MCP client at its absolute path:
{
"mcpServers": {
"awesome-ios-sim": {
"command": "/absolute/path/awesome-ios-sim/.build/release/ios-sim-state-mcp"
}
}
}The server exposes five tools:
Tool | Behavior |
| Read simulator inventory. |
| Capture one simulator. |
| Compare a profile with saved or live state. |
| Generate a typed, ordered plan. |
| Dry-run by default; mutates only with |
The stdio server implements the MCP 2026-07-28 stateless request model, including
server/discover, per-request _meta, cacheable tool lists, resultType, and JSON Schema 2020-12.
It also accepts the legacy initialize handshake used by 2025-11-25, 2025-06-18, and 2024-11-05
tool clients. See the MCP guide for wire examples and the exact supported subset.
DeepSeek Harness plugin
Install the repository as a DSH bundle and start the Web profile:
dsh plugin --profile web add github:qubyyang/awesome-ios-sim
dsh webHarness bridges the existing MCP server and exposes namespaced tools such as
mcp__ios_sim__simulator_inventory and mcp__ios_sim__simulator_plan. The adapter is currently tested
against @deepseek-ai/dsh 0.1.0-rc.7. Pin a tag or commit in reproducible environments because Harness
is still in developer preview.
See the DeepSeek Harness guide for configuration, development, tool names, uninstall steps, and the host-process security boundary.
State coverage
State | Read | Write | Support |
Power | Yes | Yes | Exact |
Installed apps | Yes when | Yes | Best effort |
App running state | Not completely exposed by | Launch/terminate | Best effort |
Managed preference keys | No general readback | Scalar values and scalar arrays | Best effort |
Status bar overrides | No complete readback | Yes, runtime-dependent | Best effort |
Erase | N/A | Yes, explicit destructive operation | Exact mutation |
The planner never silently upgrades best-effort data to exact state. Missing readback produces capability metadata, repeated idempotent writes, or a warning rather than a false claim of convergence.
Safety model
No shell is invoked; executable and arguments are passed separately.
diff,plan, and defaultapplycannot mutate a simulator.CLI apply requires
--confirm; MCP apply requires booleanconfirm: true.Operations are serialized and stop on first failure.
A booted simulator is shut down before erase.
Temporary boots restore the requested or original final power state.
Tool schemas disallow unknown top-level arguments.
No private framework loading, orphan-directory deletion, or filesystem cleanup is performed.
Treat plan files as executable intent. Review changes to target UDIDs, app paths, erase operations, and preference domains before confirmation.
Why Swift
Simulator work is dominated by Xcode and CoreSimulator process latency, not language-level CPU time.
Swift provides native macOS distribution, strong Codable models, and direct alignment with iOS tooling
without adding a runtime. Rust would be a strong choice for a portable, CPU-heavy indexer, but it would
not materially accelerate simctl boot, install, or erase. The package keeps the pure state engine and
process boundary separate so a specialized helper can be introduced later if profiling justifies it.
Development
swift build
swift test
npm ci
npm test
npm run pack:check
swift run ios-sim-state plan \
--profile Examples/ui-tests.profile.json \
--snapshot Examples/ui-tests.snapshot.jsonSee CONTRIBUTING.md, SECURITY.md, and the architecture notes. Please do not add private CoreSimulator APIs.
Roadmap
Stabilize the profile schema and publish tagged binaries.
Add Homebrew distribution and signed universal artifacts.
Add reusable profile layers and presets.
Expand capability-aware settings without private frameworks.
Build a native SwiftUI companion app on top of the same state engine.
License
MIT. See LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables interaction with iOS simulators by providing tools to inspect UI elements, control UI interactions, and manage simulators through natural language commands.179,7002,136MIT
- Alicense-qualityDmaintenanceEnables AI assistants to automate iOS Simulator interactions including device management, UI element interaction (tap, swipe, type), screenshot capture, and execution of YAML-defined navigation workflows.2MIT
- Alicense-qualityFmaintenanceAn MCP server that provides comprehensive tools for managing iOS simulators, including device control, app lifecycle management, and UI automation. It enables developers to boot devices, install apps, capture screenshots, and simulate user interactions through natural language commands.3MIT
- Flicense-qualityDmaintenanceEnables AI to control iOS simulators through the MCP protocol. Supports device management, UI automation, and network interception including screenshot capture, text input, and HTTP request mocking.
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Control plane for autonomous software labor. Agents claim objectives over MCP with audit trail.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/qubyyang/awesome-ios-sim'
If you have feedback or need assistance with the MCP directory API, please join our Discord server