MCP server for Android device automation over ADB — screenshots, UI hierarchy, taps, swipes, app management, logcat, and screen recording
Server has 9 tools with consistent naming (verb_noun pattern: android_list_*, android_connect_*, android_device_*, android_launch_*, android_terminate_*, android_install_*, android_uninstall_*, android_take_*). All tools have descriptions (avg ~120 chars, within baseline 34-392). Input schemas are present with Zod validation and descriptions. However, output schemas are NOT documented, responses are JSON stringified but structure is not formally declared. Error handling uses ActionableError for user-fixable issues but lacks recovery guidance. Tool annotations (readOnlyHint, destructiveHint) are present for 6/9 tools but missing for android_connect_wifi, android_install_app, android_uninstall_app. Parameter descriptions are adequate but some lack format/constraint details (e.g., 'host' param in android_connect_wifi lacks port range or format spec). No pagination support despite tools that could return large lists (android_list_apps, android_list_devices).
Connect to an Android device over WiFi ADB. Accepts HOST or HOST:PORT (port defaults to 5555). The device must have wireless debugging or 'adb tcpip 5555' enabled.
Get details of a device: model, Android version, SDK level, screen size, orientation, battery level, and the current foreground app.
Install an APK file on the device.
Launch an app by package name. Use android_list_apps to find package names.
List installed apps that have a launcher activity (package names).
List connected Android devices and emulators with name, Android version, and connection type. Auto-discovers wireless-debugging devices via mDNS when the list is empty.
Output schemas not documented. Tools return JSON-stringified objects (device info, app lists, screenshots) but structure is not formally declared. LLMs cannot plan downstream calls or extract fields reliably.
Missing tool annotations. android_connect_wifi, android_install_app, and android_uninstall_app lack destructiveHint/readOnlyHint annotations. Agents cannot infer safety/idempotency without explicit hints.
No pagination support. android_list_devices and android_list_apps could return large result sets but lack limit/offset/cursor parameters. Large responses blow context window.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Take a screenshot of the device screen and return it as an image. Use android_list_elements first when you need coordinates of UI elements. Do not cache this result.
Force-stop a running app by package name.
Uninstall an app from the device by package name.
Parameter format constraints missing. android_connect_wifi 'host' param lacks port range (5555 default) or format spec. android_install_app 'apkPath' lacks validation that file exists or is readable.
Error recovery guidance incomplete. ActionableError messages are user-friendly but lack next-step hints. E.g., 'Device not found' should suggest 'Use android_list_devices to see available devices.'