An MCP server that provides Pokemon information and comparison tools using the PokéAPI
The Pokemon Server has basic tool definitions with proper naming and schemas, but falls short on description quality and lacks depth in parameter documentation. Both tools follow verb_noun naming conventions (get_pokemon, compare_pokemon), which is good. Input schemas are properly defined with type information and required flags. However, tool descriptions are extremely brief (under 50 chars), parameter descriptions lack actionable detail about format/constraints, and there is no documented output schema. The tools are READ_ONLY and relatively simple, which limits complexity issues, but the lack of comprehensive parameter guidance and missing output documentation significantly impact LLM reasoning and error recovery.
Compare two Pokemon
Get information about a Pokemon
Tool descriptions are extremely brief (under 50 chars) and lack WHEN/WHY context. 'Get information about a Pokemon' does not explain when to call this vs compare_pokemon, what fields are returned, or whether the API has rate limits.
Parameter descriptions are vague. 'Name of the Pokemon (lowercase)' mentions format but not what happens on invalid input (e.g., Pokemon not found). No guidance on case sensitivity fallback, partial name matching, or error recovery.
No documented output schema. Tools return text responses (via mcp.NewToolResultText), but LLM does not know what fields to expect. This prevents downstream tool composition and forces LLMs to parse unstructured text.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 45 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 31 | - | v1 |
Error handling is minimal. Both tools return error text via mcp.NewToolResultError() but provide no recovery guidance. Example: 'Error fetching Pokemon: Pokemon not found' does not suggest calling search_pokemon or accepting partial names.
No parameter constraints documented. The API requires lowercase input, but tools do not normalize case or validate. If an LLM passes 'Pikachu' instead of 'pikachu', the call silently fails. No enum, pattern, or validation guidance in descriptions.
No pagination or result limits documented. If compare_pokemon returns many stats, there is no guidance on max results, pagination, or truncation. The response format is fixed-width text rather than structured JSON.