MCP server for end-to-end Android debug sessions on an emulator.
Server has 13 tools with mostly complete schemas and descriptions. Naming follows verb_noun convention (precheck, start_debug_session, observe_screen, tap, long_press, type_text, scroll_dir, scroll_to_text_tool, press_home, press_back, wait, finish_test, abort_session). Descriptions are present and substantive (100-400 chars typical), explaining WHAT and WHEN. However, several tools lack output schema documentation, parameter descriptions are sometimes generic, and error handling guidance is minimal. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. start_debug_session has 14 parameters but some lack actionable constraints (e.g., 'report_format' has no enum). Output structures (images, UI elements, reports) are mentioned in descriptions but not formally documented.
Stop logcat and release the session without writing a verdict report.
Write report.md and timeline.md, stop logcat, and release the session.
Long press at the specified coordinates on the device screen.
Re-capture the current screen for a live session.
Return a JSON readiness report — AVDs, devices, SDK paths, config. Call this before ``start_debug_session`` to resolve which AVD and which adb serial to use without guessing.
Press the back button on the device.
Press the home button on the device.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint) despite clear risk levels. Tools are marked READ_ONLY or WRITE in metadata but not exposed to LLM via schema annotations.
Output schemas not documented. Tools return complex structures (images, UI element lists, reports, timelines) but descriptions do not specify field names, types, or structure. LLM cannot plan downstream calls or extract data reliably.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Scroll in the specified direction.
Scroll until the specified text is visible on screen.
Build, install, launch, and start a fresh debug session. Returns the first screen observation (text + raw + annotated images). Only one session may be active at a time; call ``finish_test`` or ``abort_session`` first if another session is already running. Hard caps ``max_steps`` at 20. ``skip_build`` (default false) runs no Gradle build and skips the Gradle-project check on ``project_root`` — use it to drive an app you don't build here (e.g. boot the AVD and exercise an already-installed Chrome to test a website). In this mode ``project_root`` only has to be an existing directory (any folder, even a tmp dir) and is used solely as the run-dir parent; ``gradle_task`` is ignored. Combine with ``skip_install`` (no ``apk_path`` needed) to drive an already-installed package, or pass ``apk_path`` to install a prebuilt APK without building.
Tap at the specified coordinates on the device screen.
Type text into the currently focused input field.
Wait for the specified duration.
start_debug_session has 14 parameters; several lack actionable constraints. 'report_format' has no enum; 'gradle_task' defaults to 'assembleDebug' but no validation; 'max_steps' hard-capped at 20 but constraint not in schema. Parameters should declare min/max, enums, or patterns.
Error handling lacks recovery guidance. Code shows RuntimeError and CommandError exceptions but no tool-level error responses documented. LLM cannot determine if errors are retryable, user-fixable, or fatal.
Tool name 'scroll_to_text_tool' violates naming convention. Should be 'scroll_to_text' (verb_noun). '_tool' suffix is redundant and non-standard.