MCP server for fetching Google Play Store reviews
Three tools with basic schemas and descriptions, but significant gaps in parameter documentation and error handling. health_check and get_app_metadata have minimal descriptions (under 50 chars). fetch_reviews has a longer description but lacks parameter-level guidance on date format validation, error recovery, and output structure. No tool documents its return schema explicitly. Error handling is generic (returns dict with 'error' or 'status' keys) without actionable recovery guidance. No tool annotations (readOnlyHint/destructiveHint) despite clear risk profiles. Parameter descriptions exist but are sparse, e.g., 'lang' and 'country' lack examples or constraints. Overall: functional but below production baseline.
Fetch reviews from the Play Store and cache them locally. Dates must be in ISO format (YYYY-MM-DDTHH:MM:SS) or just YYYY-MM-DD. Returns the path to the cache directory and fetch statistics.
Get metadata for a specific Play Store app.
Return server status.
health_check description is 20 chars ('Return server status.'), below 34-char baseline. Lacks context on when/why to call it or what 'phase' field means.
fetch_reviews lacks documented output schema. Returns dict with 'status', 'cache_dir', 'reviews_fetched', 'truncated' but LLM cannot infer structure or plan downstream calls. No mention of cache_dir format or how to access cached data.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint). fetch_reviews is marked WRITE risk but tool definition lacks @destructiveHint. health_check and get_app_metadata are READ_ONLY but lack @readOnlyHint annotation.
Error handling is generic. Both get_app_metadata and fetch_reviews return {'error': str(e)} or {'status': 'error', 'message': str(e)} without actionable recovery guidance. LLM cannot determine if error is retryable, user-fixable, or fatal.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 47 | 2026-07-28+ | v2 |
fetch_reviews parameters 'lang' and 'country' lack constraints or examples. Description says 'Language code' and 'Country code' but does not specify format (ISO 639-1 vs 639-2? ISO 3166-1 alpha-2?). LLM may pass invalid values.