An MCP server and importable Python module that wraps Facebook IDB to control iOS simulators for automation. Implemented by AskUI.
The server has 17 tools, all with explicit registration via @app.tool() decorators and present descriptions. However, significant quality gaps reduce the score: (1) Most parameter descriptions lack detail about constraints, formats, and usage context. (2) Output schemas are entirely undocumented, tools return strings but no structured field definitions are provided. (3) Error handling is minimal; tools don't guide recovery or categorize failures. (4) Several tools combine related concerns (e.g., multiple coordinate systems for tap/swipe create cognitive overhead rather than clear single responsibility). (5) Tool names are generally clear (e.g., ios_select_device_by_udid), but descriptions are brief and lack context about when to use each variant. Baseline: 549 production tools average 194 chars per description; these average ~120 chars. Parameters lack type suffixes (e.g., 'udid' vs 'device_udid') which would disambiguate IDs from names.
Boot the selected device.
Get the currently selected device.
Kill the IDB server and reset state. Useful in case of persistent issues.
List available iOS devices (simulators and devices). that can be selected and used for actions.
Manually connect to IDB companion by tapping the device. In case the device is hosted on a different machine than the one running the controller mcp
Take a screenshot of the selected device.
Select a device by name, to be used for actions.
Output schemas completely undocumented. Tools return strings or images but no formal schema defines return fields, types, or structure.
Parameter constraints missing: no range limits for x/y coordinates, no validation for string lengths, no character set restrictions, no enum definitions for key codes or button names in JSON Schema.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | C | 60 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 58 | - | v1 |
Select a device by UDID, to be used for actions.
Shutdown the selected device.
Swipes from the specified start point to the end. The coordinates are in the screen coordinate system. Must be used, if the coordinates are extracted from the screen screenshot.
Swipes from the specified start point to the end. The coordinates are in the viewport coordinate system. Must be used, if the coordinates are not extracted from the screen screenshot but from the device.
Tap a button on the selected device.
Tap a key on the selected device.
Inputs multiple key events sequentially.
Tap on the selected device. The coordinates are in the screen coordinate system. Use this tool, if the coordinates are extracted from the screen screenshot.
Tap on the selected device. The coordinates are in the viewport coordinate system. Use this tool, if the coordinates are not extracted from the screen screenshot but from the device.
Type text on the selected device.
Parameter descriptions are generic or missing guidance on format, units, and valid ranges. E.g., 'duration_in_milliseconds' lacks typical range (1-5000?) or clarification on what 'duration' means for a tap (press-and-hold duration?).
Parallel tool variants (tap_with_viewport_coordinates vs tap_with_screen_coordinates, swipe_with_viewport vs swipe_with_screen) create naming burden and cognitive overhead. Should consolidate into single tools with a coordinate_system enum parameter.
Error handling absent. Tools do not document failure modes, recovery guidance, or error messages. E.g., what happens if device is not selected? If coordinates are out of bounds? If key code is invalid?
Irreversible operations (ios_idb_kill) lack explicit warnings and confirmation patterns. Description should prominently state 'DESTRUCTIVE: This operation cannot be undone.'
Tool composition: Multiple tap/swipe tools operate on the same logical action (tap, swipe) but with different coordinate systems. Should be consolidated to reduce tool proliferation and improve discoverability.