iOS Simulator control server for MCP. Provides tools to interact with iOS simulators: tap, swipe, type, pinch, rotate, take screenshots, install/launch apps, and query accessibility trees.
iosef demonstrates solid tool design with clear naming conventions (verb_noun pattern), comprehensive parameter schemas, and detailed descriptions. All 13 tools are explicitly registered with input schemas and descriptions. However, output schemas are not documented, and error handling guidance is minimal. Parameter descriptions are generally strong (72-150 chars), but some tools lack clarity on mutual exclusivity (e.g., tap's coordinate vs selector modes). No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications. Composition is excellent, tools are single-responsibility and chainable.
Describe accessibility elements in the iOS Simulator. Two modes: (1) Tree mode (default): dumps the full accessibility tree. Supports optional depth limit. (2) Point mode: pass x and y to get the element at those coordinates. Coordinates are (center±half-size) in iOS points — the center value is the tap target.
Get the ID of the currently booted iOS simulator
Installs an app bundle (.app or .ipa) on the iOS Simulator
Dismiss the on-screen keyboard in the iOS Simulator
Launches an app on the iOS Simulator by bundle ID
Two-finger pinch in the iOS Simulator, for zooming maps, photos, canvases. Two modes: (1) Selector mode: finds an element by role/name/identifier and pinches about its center. (2) Coordinate mode: pass x and y for the center. Fingers move symmetrically along a horizontal line.
Output schemas not documented. LLMs cannot plan downstream calls or extract required fields (e.g., what does describe() return? Is it a tree structure, flat list, or object?). Agents must guess or fail.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications (READ_ONLY vs WRITE). Agents cannot determine which tools are safe to retry or have side effects.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2026-07-28+ | v2 |
Press a hardware button on the iOS Simulator
Two-finger rotate in the iOS Simulator. Two modes: (1) Selector mode: finds an element by role/name/identifier and rotates about its center. (2) Coordinate mode: pass x and y for the center. Fingers sit on opposite sides of the center and sweep around it.
Swipe on the screen in the iOS Simulator
Tap on the screen in the iOS Simulator. Two modes: (1) Bare mode (no selectors): taps at the given coordinates. (2) Selector mode: finds an element by role/name/identifier and taps its center.
Play raw finger paths in the iOS Simulator: the escape hatch for gestures that tap, swipe, pinch and rotate don't cover (two-finger pan, curved drags). Each finger is a path of points in iOS points; paths are interpolated along their length and the fingers advance in lockstep.
Type text in the iOS Simulator. Two modes: (1) Bare mode (no selectors): types into the currently focused field. (2) Selector mode: finds an element by role/name/identifier, taps it to focus, then types. Combines find + tap + type in one step.
Get the image content of a compressed screenshot of the current simulator view
Mutual exclusivity not documented. Tools like tap, pinch, rotate, and touch support two modes (selector vs coordinate) but descriptions don't explicitly state 'provide either (role/name/identifier) OR (x/y), not both'. LLMs may pass conflicting parameters.
Error handling guidance absent. No recovery hints (e.g., 'If simulator not found, call get_booted_sim_id first'). Agents cannot self-correct on failures.
type tool's text parameter restricts to ASCII (pattern ^[\x20-\x7E]+$) but description doesn't explain this constraint. LLMs may attempt Unicode input and fail silently.