@blitzdev/iphone-mcp
MCP server for controlling iOS simulators and physical iPhones
Versions
0.1.18latest0.1.170.1.160.1.150.1.14+ show 7 moreshow less
0.1.130.1.120.1.110.1.100.1.90.1.80.1.7Tools 10
describe_screen Get the full UI element hierarchy of the current screen. Returns ALL element types (buttons, text, images, containers, etc.) that are currently visible on screen. Filters applied automatically: - Off-screen elements are excluded - Generic unlabeled container nodes are excluded For finding tappable elements specifically, prefer scan_ui instead.
device_action Execute a single device action on the iPhone. Actions available: - tap: Tap at coordinates { x, y, duration? } - swipe: Swipe gesture { fromX, fromY, toX, toY, duration?, delta? } - button: Press button { button: 'HOME'|'LOCK'|'SIDE_BUTTON'|'APPLE_PAY'|'SIRI', duration? } - input-text: Type text { text } - key: Press key { key: number (HID keycode) | string (character), duration? } - key-sequence: Press key sequence { keySequence: (number|string)[] } Use describe_after to see the screen state after the action.
device_actions Execute multiple device actions in sequence on the iPhone. Each action in the array should have: - action: 'tap' | 'swipe' | 'button' | 'input-text' | 'key' | 'key-sequence' - params: Action-specific parameters Use describe_after to see the screen state after all actions complete.
get_screenshot Capture a screenshot of the current iPhone screen. Returns the file path to a PNG image.
scan_ui Find interactive UI elements (buttons, links, text fields, switches, icons, etc.) on the current screen. Returns only tappable/interactive elements with their coordinates. Use the "query" parameter to search for a specific element by label (e.g. "Add to Cart", "Settings"). When a query is provided: - First searches visible interactive elements matching the query - If not found on-screen, searches off-screen elements and warns you to scroll - If no interactive match, falls back to all visible interactive elements Without a query, returns all visible interactive elements on screen. Region options optimize scan time: - "top-left" / "top-right" / "bottom-left" / "bottom-right": ~250ms - "top-half" / "bottom-half": ~500ms - "full": ~1s (entire screen) For the complete element tree (all types), use describe_screen instead.
list_devices List all available iPhones and simulators.
get_execution_context Get the current execution context — which iPhone(s) or simulators are available. Call this first to discover available devices. Returns: - target: 'simulator' — one simulator booted, use the returned udid - target: 'device' — one physical device connected, use the returned udid. Inform user about viewer_url for screen viewing. - target: 'ambiguous' — multiple devices found. Ask the user which one to use. - target: 'none' — no devices. Tell user to boot a simulator or connect an iPhone. Pass the returned udid to all subsequent tool calls.
setup_device Build, install, and launch WebDriverAgent on a physical iPhone. This is required before any other tool can interact with a physical device. Call this when get_execution_context shows a physical device with wdaRunning: false. The process takes 1-3 minutes (building WDA, installing on device, establishing connection). Prerequisites: - iPhone connected via USB and trusted - Developer Mode enabled on iPhone (Settings > Privacy & Security > Developer Mode) - Apple ID signed into Xcode (Xcode > Settings > Accounts) After setup completes, use the returned udid for all subsequent tool calls. Also inform the user about the viewer_url where they can see the device screen.
launch_app Launch an app on the iPhone by bundle ID.
list_apps List installed apps on the iPhone.
Permissions 4
network medium filesystem low shell high env_vars low