A Model Context Protocol server for Pokemon data and battle calculations, integrating with the PokéAPI
PokeMCP has 3 tools with basic descriptions and partial schemas. Tool names follow verb_noun convention (GetPokemonInformation, GetBattleResult, ProbabilityFindingShiny), but descriptions are minimal (10-50 chars, below the 50-200 char LLM-optimized baseline). GetBattleResult accepts complex nested Pokemon objects with undocumented structure; parameter descriptions exist but lack format/constraint guidance. No output schemas documented. No error handling guidance. No pagination, no result limits stated. Tool composition is reasonable (single responsibility), but parameter design forces LLMs to construct Pokemon objects manually rather than accepting IDs/names.
Gets the result of the battle between 2 pokemon.
Gets Pokemon data by ID or name.
Get probability of finding a pokemon 'shiny'.
GetBattleResult requires LLM to construct complex nested Pokemon objects (id, name, height, weight, types[], stats[], sprites) instead of accepting pokemon_id or pokemon_name. Forces manual object assembly and invites malformed input.
No output schemas documented for any tool. LLMs cannot predict return structure (e.g., does GetPokemonInformation return JSON string or object? What fields in BattleResult?). Breaks downstream tool chaining.
Descriptions are 10-50 characters (well below 50-200 char LLM-optimized baseline). 'Gets Pokemon data by ID or name' lacks WHEN to use, prerequisites, or return structure. Insufficient for LLM tool selection.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 41 | 2026-07-28+ | v2 |
No error handling guidance. If pokemon not found, API returns what? Does LLM retry? Should it search differently? No recovery path documented.
GetBattleResult parameter descriptions ('first pokemon', 'second pokemon') do not explain the Pokemon object structure, required fields, or how to obtain valid Pokemon objects. LLM must infer from schema alone.