MCP server exposing Pokemon data (via local PokeAPI api-data sync) and strategy guides
Server has 7 tools with clear verb-noun naming (list_, get_, search_, suggest_). All tools have descriptions (avg 95 chars, within baseline 34-392). Input schemas are present with type definitions. However, parameter descriptions are sparse or missing for optional params (limit, topTypes, samplePokemonPerType, topWeaknesses, suggestedDefensiveTypes). Output schemas are not documented, LLMs cannot predict response structure. No error handling guidance. No tool annotations (readOnlyHint present via Risk field but not in MCP schema). Composition is sound: tools are single-purpose and chainable.
Suggest best attacking types (and example Pokemon when local data exists) to counter a target Pokemon
Lookup Pokemon data by name or National Dex id from local PokeAPI api-data sync (falls back to live PokeAPI when missing, cached locally)
Return the full Markdown for one of the built-in strategy guides
Return the available strategy guides as resource links
Search Pokemon names using local PokeAPI api-data index
Analyze a team (by Pokemon names/ids) and suggest defensive coverage improvements
Calculate damage multiplier for an attacking type against 1-2 defending types
Output schemas not documented. LLMs cannot predict response structure (fields, types, pagination). Baseline: 100% of A+ tools document return types.
Optional parameters lack descriptions. 'limit', 'topTypes', 'samplePokemonPerType', 'topWeaknesses', 'suggestedDefensiveTypes' have no guidance on valid ranges, defaults, or semantics. Baseline: 100% of A+ tool params have descriptions.
No error handling guidance. Tools may fail (e.g., Pokemon not found, invalid type) but responses do not tell LLM what to do next or how to self-correct.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Tool annotations missing from MCP schema. Risk field (READ_ONLY) is metadata but not exposed as readOnlyHint in tool definition, limiting agent reasoning about side effects.
Numeric parameters lack constraints. 'limit' and 'topTypes' have no min/max bounds, allowing LLMs to pass absurd values (e.g., limit=999999).