The most comprehensive MCP (Model Context Protocol) server for iOS Simulator automation. Gives AI agents like Claude, ChatGPT, Cursor, Windsurf, and any MCP-compatible tool full control over iOS Simulators — tap, swipe, type, read accessibility trees, inspect app data, capture screenshots, record video, manage devices, and debug apps in real time.
82 tools across 14 categories. Zero cursor interference — works silently in the background while you use your Mac.
57 tools for AI-powered iOS Simulator automation — tap, swipe, type, screenshots, and more.
2026-11-09
ดาว
—
เครื่องมือ
—
อัปไทม์
—
Inspired by Playwright MCP for web automation — Preflight brings the same structured accessibility-first approach to iOS.
Why Preflight?
No disk clutter — Screenshots and video frames return directly in chat. No folders filling up.
AI-optimized — Images compressed for minimal token usage. Video → key frames (most AI models can't view video files).
Accessibility-first — Like Playwright's browser_snapshot, use simulator_snapshot to understand the screen without vision models.
Cursor-free — Touch injection via idb (IndigoHID) — your Mac cursor stays put.
82 tools — From basic tap/swipe to StoreKit testing, network conditioning, memory profiling, and crash log analysis.
Quick Start
Prerequisites
macOS with Xcode and iOS Simulator installed
Node.js 18+
Facebook idb (recommended for cursor-free operation)
Install idb (recommended)
brew tap facebook/fb
brew install idb-companion
pip3 install fb-idb
Without idb, the server falls back to CGEvent mouse injection (works but briefly moves your cursor).
Install via npm (recommended)
npm install -g preflight-ios-mcp
Build from Source
git clone https://github.com/EthanAckerman-git/Preflight.git
cd Preflight
npm install
npm run build
Setup by IDE / AI Tool
Add your Python bin directory to PATH if idb was installed via pip (e.g., ~/Library/Python/3.x/bin).
Preflight uses the standard MCP stdio transport. Configure your client to run:
npx preflight-ios-mcp
Set the PATH environment variable to include idb's location for cursor-free touch injection.
Tools Reference
Observation (6 tools)
Tool
Description
simulator_screenshot
Take a JPEG screenshot optimized for AI chat (~200-400KB). Returns image inline.
simulator_list_devices
List simulators with name, UDID, state, runtime. Filter: booted, available, all.
simulator_list_apps
List installed apps with bundle IDs. Toggle includeSystem for system apps.
simulator_app_info
Get app metadata: name, version, bundle path, data path, type.
simulator_get_clipboard
Read the simulator's clipboard text.
simulator_get_screen_info
Window geometry, coordinate mapping, scale factor. Debug tap accuracy.
User Interaction (6 tools)
Tool
Description
simulator_tap
Tap at (x, y) in simulator screen points. Cursor-free via idb.
simulator_swipe
Swipe between two points. Supports edge-swipe-back from x=1.
simulator_long_press
Long press with configurable duration. Context menus, drag initiation.
simulator_type_text
Type text into the focused field.
simulator_press_key
Press special keys (return, escape, arrows, F-keys) with modifiers.
simulator_navigate_back
Navigate back via Cmd+[. Workaround for edge-swipe limitations.
Playwright-Inspired (3 tools)
Tool
Description
simulator_snapshot
Preferred over screenshots. Structured accessibility tree — roles, labels, values, positions. No vision model needed. Like Playwright's browser_snapshot.
simulator_wait_for_element
Wait for an element to appear (by label, role, or text). Polls with configurable timeout. Like Playwright's browser_wait_for.
simulator_element_exists
Quick boolean check: does an element matching criteria exist on screen right now?
Device Management (6 tools)
Tool
Description
simulator_boot
Boot a device by name or UDID. Optional waitForBoot polling.
simulator_shutdown
Shut down a running simulator.
simulator_erase
Factory reset — erases all content and settings.
simulator_open_url
Open URLs or deep links (e.g., myapp://screen).
simulator_open_simulator
Open the Simulator.app application.
simulator_get_booted_sim_id
Get the UDID of the currently booted simulator.
App Management (4 tools)
Tool
Description
simulator_launch_app
Launch by bundle ID with optional args and env vars.
simulator_terminate_app
Force-terminate a running app.
simulator_install_app
Install a .app bundle or .ipa from a local path.
simulator_uninstall_app
Uninstall by bundle ID.
Debugging & Diagnostics (9 tools)
Tool
Description
simulator_get_logs
Query device logs. Filter by process, subsystem, level, time range, message content.
simulator_stream_logs
Live log streaming with start/read/stop lifecycle. Configurable buffer.
simulator_get_app_container
Get filesystem path to app's bundle, data, or shared group container.
simulator_list_app_files
Browse an app's Documents/, Library/, Caches/, tmp/ directories.
simulator_read_app_file
Read plists (→JSON), SQLite (→schema), and text files from app data.
simulator_get_crash_logs
Retrieve crash reports with stack traces and thread states.
simulator_diagnose
Xcode version, disk usage, booted devices, system info.
simulator_accessibility_audit
Full iOS accessibility tree — real UIButton/UILabel elements with labels, frames, roles.
simulator_describe_point
Returns the accessibility element at given coordinates.
System Simulation (5 tools)
Tool
Description
simulator_set_location
Set GPS coordinates (lat/lng). Test location-based features.
simulator_send_push
Send push notifications with full APNs payload JSON.
simulator_set_clipboard
Set the simulator clipboard text.
simulator_add_media
Add photos/videos to the camera roll from local files.
"Boot the iPhone 16 Pro simulator, install my app at ./build/MyApp.app, launch it, and take a screenshot of the home screen. Then tap the login button, type [email protected] in the email field, and verify the form validation works."
Accessibility-First Workflow (Playwright-style)
"Take a snapshot of the current screen to see what elements are available. Then tap the button labeled 'Sign In' and wait for the email text field to appear."
Debugging
"My app is crashing on launch. Check the crash logs for MyApp, then get the last 5 minutes of device logs filtered to the MyApp process."
Dark Mode Testing
"Switch to dark mode, take a screenshot, then switch to light mode and screenshot again."
Troubleshooting
idb not detected
If tools show [CGEvent fallback] instead of [cursor-free]:
Verify idb is installed: which idb or check ~/Library/Python/3.x/bin/idb
Add the idb path to your MCP config's PATH env var
Or set PREFLIGHT_IDB_PATH directly
Simulator not found
Open Simulator.app: open -a Simulator
Boot a device: use simulator_boot or xcrun simctl boot "iPhone 16 Pro"
Accessibility permission errors
Go to System Settings → Privacy & Security → Accessibility
Add your terminal app (Terminal.app, iTerm, Claude Code, Cursor, Windsurf, etc.)
Development
npm run dev # Watch mode (TypeScript only)
npm run build # Full rebuild (TypeScript + Swift binary)
node dist/index.js # Run directly