Mobile MCP server for controlling Android and iOS mobile devices through the Model Context Protocol
mobile-mcp demonstrates solid tool quality with comprehensive mobile device automation capabilities. All 24 tools have explicit names, descriptions, and input schemas defined via Zod. However, several patterns from the rubric are not fully implemented: output schemas are not documented (only text responses shown), error handling lacks recovery guidance, and descriptions could be more actionable for LLM selection. The tool naming is consistent and verb-driven (mobile_*, get_*, list_*, set_*). Most parameters have type definitions and descriptions, though some are minimal. Risk annotations (READ_ONLY vs WRITE) are present, aiding LLM decision-making.
Double tap on the screen at the specified coordinates
Get logs from the device
Get list of interactive elements on the screen
Get the current screen orientation of the device
Get the screen size of the device
Take a screenshot of the current device screen
Install an application on the device
Launch an application on the device
mobile_list_remote_devices has no visible input schema definition (appears to accept no parameters but schema is not shown).
Output schemas are not documented in source code. The tool() registration function returns only text responses (content[0].type = 'text'), but LLMs need explicit structured output documentation. Pattern tool-description and response-shaper require documenting return types.
Error handling returns generic error messages without recovery guidance. The catch block returns 'Error: {error.message}' for exceptions, and ActionableError messages lack guidance like 'Try X instead'. Pattern recovery-guide requires telling the LLM what to do next.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 79 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
List installed applications on the device
List all available devices. This includes both physical mobile devices and mobile simulators and emulators. It returns both Android and iOS devices. These are local devices already connected to this machine, ready to use immediately at no cost - for devices from the shared remote cloud fleet, use mobile_list_remote_devices instead.
List devices from the shared remote cloud fleet
Long press on the screen at the specified coordinates
Open a URL on the device
Press a physical button on the device
Record the device screen
Save device logs to a file
Send keyboard input to the device
Set the screen orientation of the device
Stop recording the device screen
Swipe on the screen in the specified direction
Swipe from a specified coordinate in the specified direction
Tap on the screen at the specified coordinates
Terminate a running application on the device
Uninstall an application from the device
Tool descriptions are concise but lack actionable selection context. Many descriptions (e.g., mobile_swipe, mobile_press_button) do not explain WHEN to use them versus similar tools or what prerequisites exist. Pattern tool-description requires explicit WHAT/WHEN/prerequisites.
Parameter descriptions are present but minimal. E.g., 'Direction to swipe (up, down, left, right)' in mobile_swipe lacks format details. Pattern constrained-input requires enums for known value sets; these should be declared in schema, not just text.
No pagination support documented for list tools returning potentially large datasets (mobile_list_apps, mobile_list_available_devices, mobile_get_elements_on_screen). Pattern paginated-result requires limit, offset/cursor, and total count.
No dry-run or confirmation step for destructive operations (mobile_uninstall_app, mobile_terminate_app, mobile_save_device_logs which overwrites). Pattern confirmation-request recommends gating irreversible operations.