MCP server for searching and downloading Android apps from Google Play Store
Four tools with clear verb-noun naming (search_apps, get_app_info, list_splits, download_apk). Descriptions present and reasonably detailed (60-150 chars each). Input schemas visible with type definitions and descriptions for all parameters. However, output schemas are NOT documented, LLMs cannot predict response structure. Error handling is minimal; no recovery guidance or actionable error messages. Missing tool annotations (readOnlyHint/destructiveHint). Parameter descriptions lack format constraints and ranges. No pagination support despite search_apps returning lists.
Download APK files for an Android app from Google Play. Downloads the base APK and optionally splits and OBB files.
Get metadata for a specific Android app: title, developer, version, rating, and Play Store URL.
List available split APK names for an Android app.
Search Google Play for Android apps. Returns package names, titles, and developers.
Output schemas not documented. LLMs cannot predict response structure for search_apps, get_app_info, list_splits, or download_apk. Code shows structJSON() helper but no schema definition visible.
search_apps returns list results but lacks pagination (limit parameter exists but no offset/cursor, no total_count in response). Large result sets will blow context window.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). download_apk is destructive (WRITE risk) but LLM has no signal to treat it carefully.
Error handling lacks recovery guidance. searchApps() returns generic 'search %q: %w' errors; getAppInfo() returns bare 'not found' text. No actionable next steps for LLM.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
Parameter descriptions lack format constraints. 'limit' has no min/max bounds (could accept 0 or 999999). 'version_code' has no range. 'output_dir' has no path validation rules.