MCP server for iOS device control and automation via Objective-C/C implementation
31 tools with inconsistent quality. Most have basic descriptions (50-150 chars) and partial schemas. Critical gaps: no tool annotations (destructiveHint/readOnlyHint/idempotentHint), no output schemas documented, no error recovery guidance, no parameter validation rules stated. Naming is verb-noun compliant but descriptions lack LLM-optimization (missing WHEN/WHY context). Parameters present but many lack format constraints (e.g., hid_send_key 'key' param accepts arbitrary strings; should enumerate valid keys). No evidence of input validation or error categorization in source.
Get detailed accessibility information for a specific UI element
Query accessibility tree for UI elements matching criteria
Get frontmost app info
Detailed info for a single installed app: bundle/data/group container paths, executable path, version, entitlements, and signing identity. Returns nil with *error when the app is not found.
Install an IPA or DEB package from the given path on device
Kill app by bundle ID
Launch app by bundle ID (brings to foreground if already running)
List installed apps. type: 'user', 'system', or 'all'
No tool annotations (destructiveHint, readOnlyHint, idempotentHint) declared. LLMs cannot distinguish safe reads from destructive writes without explicit hints. All 31 tools lack this critical metadata.
No output schemas documented. LLMs cannot plan downstream tool calls or extract required fields (e.g., bundleId from app_list_installed). Agents must guess response structure.
Parameter constraints missing. hid_send_key 'key' param accepts arbitrary strings (should enumerate valid keys like 'a', 'Return', 'Space'). accessibility_query 'predicate' lacks format guidance. No regex patterns, enums, or length limits stated.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | <=2025-11-25 | v2 |
List currently running apps
Open a URL (supports URL schemes like http://, tel://, etc.)
Uninstall an app by bundle identifier or a DEB package by package identifier
Get current clipboard content
Set clipboard content
Get device information (model, OS version, storage, etc.)
Delete a file or directory
List files and directories at a given path
Create a directory
Read file contents
Write content to a file
Send keyboard key press/release events
Send swipe gesture with multiple touch points
Send text input via keyboard simulation
Send touch/tap events to screen coordinates
Read system logs
Perform OCR on screen or image to extract text
Kill a process by PID
List running processes
Capture screenshot of the current screen
Get the screen dimensions
Clear the currently focused text field
Type text into the currently focused text field
No error recovery guidance. Descriptions do not explain what to do on failure (e.g., 'If app not found, try app_list_installed first'). No categorization of errors as retryable vs fatal.
Descriptions lack LLM-optimization context. Missing WHEN/WHY guidance. E.g., 'Send keyboard key press/release events' does not explain when to use hid_send_key vs text_input_type, or what happens on repeated calls (idempotency).