MCP server providing Pokemon data from PokeAPI with tools for querying Pokemon information, moves, types, and abilities
Server has 6 tools with complete input schemas and basic descriptions. All tools follow verb_noun naming (get_*, list_*) and accept human-friendly parameters (Pokemon names, move names). However, descriptions are generic and lack context about when to use each tool or what distinguishes them. Parameter descriptions are minimal (e.g., 'Pokemon name' with no format guidance). Output schemas are not documented, LLMs cannot predict response structure. Error handling returns bare error strings without recovery guidance. No tool annotations (readOnlyHint, idempotentHint) despite all being read-only operations.
This tool returns all the info about a certain ability.
This tool gets all the info about a specific move.
It takes as input a Pokemon name and it gets its basic info.
It gets the list of moves a Pokemon can learn and it returns the Pokemon name along with the list of all move names. We are separating it from get_pokemon because move lists are quite large.
This tool returns type effectiveness data with all damage relations.
Get a list of Pokemon names.
Output schemas not documented. LLMs cannot predict response structure (fields, types, nested objects). Forces agents to guess what data is available after each call.
Descriptions are generic and lack context. 'Get basic info about a Pokemon' does not explain when to use get_pokemon vs get_pokemon_moves vs get_ability. No guidance on what distinguishes each tool.
Parameter descriptions lack format guidance. 'Pokemon name' does not specify case sensitivity, hyphenation rules, or valid examples. LLMs may pass 'Pikachu' when API expects 'pikachu'.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | <=2025-11-25 | v2 |
Error handling returns bare error strings without recovery guidance. 'ValueError: Pokemon not found' tells agent nothing about next steps. Should suggest search_pokemon() or list_pokemon().
No tool annotations despite all tools being read-only. Missing readOnlyHint annotation prevents agents from understanding safety profile and retry semantics.