Tool for controlling a remote Android emulator over adb: list devices, open an app, visit a URL in the browser, insect current foreground window, press a hardware button, and wait for a number of seconds between steps.
android-mcp has 6 tools with basic HTTP transport via fastmcp. Tool naming follows verb_noun convention (list_devices, open_app, visit, current_window, press_button, wait), which is correct. However, descriptions are generic and parameter documentation is severely deficient. None of the 6 tools provide descriptions for their input parameters, only the tools themselves have descriptions. Input schemas exist but lack parameter-level documentation critical for LLM reasoning. Error handling is minimal (basic input validation on visit() and wait(), but no recovery guidance). No output schemas are documented. The codebase shows input validation (url stripping, seconds negativity check), but this is defensive rather than guidance-forward. Compared to production baselines (194 char avg description, 72 char avg param description, 100% A+ tools have param docs), this server underperforms significantly. The tools themselves are well-named but the supporting schema and documentation infrastructure is incomplete.
Get the current foreground window on the Android emulator
List connected Android devices via adb
Open an application on the connected Android emulator
Press a hardware button on the Android emulator
Visit a URL in the browser on the connected Android emulator
Wait for a specified number of seconds
Zero parameter-level descriptions across all 6 tools. Input parameters lack documentation explaining what they control, valid ranges, formats, or constraints.
No output schemas documented. Tools return structured dicts (e.g., {"devices": ..., "status": "ok", "app_name": ...}) but LLMs have no contract showing what fields to expect or their types.
Parameter 'button' in press_button lacks an enum constraint or format description. LLMs cannot infer valid hardware button names (power, volume_up, volume_down, home, back, etc.). Will hallucinate invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Parameter 'app_name' in open_app lacks guidance on valid app names or how to discover them. LLMs cannot know whether to pass 'com.example.app', 'Gmail', 'Chrome', or 'example-app'. Missing dependency hint to list_devices or equivalent.
Error responses provide minimal recovery guidance. visit() raises ValueError on empty/invalid URL, but no hint to the LLM about retry strategy or fallback. Same for wait() with negative seconds.
No documentation of pagination, rate limits, or result caps. If list_devices returns 50+ device entries, the response bloats without guidance on limits or batching.