MCP server implementation for the Clash of Clans API
Server has 6 tools with basic schemas and descriptions, but significant gaps limit production readiness. All tools have input schemas with type definitions and descriptions present, but descriptions are minimal (10-60 chars, well below the 50-200 char baseline for A-grade tools). No output schemas documented. Error handling returns raw error messages without recovery guidance. No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tool names follow verb_noun pattern (get-*, clan-war-league-*) but lack clarity on distinctions (e.g., 'clan-war-league-info' vs 'clan-war-league-war' are not obviously different). Parameters are sparse and lack constraints (e.g., 'round' accepts 1-7 but no enum or range validation visible in schema). No pagination support despite API returning lists. Responses dump raw JSON without field documentation.
Retrieve Clan War League information for a clan
Retrieve Clan War League war details for a specific round
Retrieve clan data from Clash of Clans API
Retrieve current war data for a clan
Retrieve player data from Clash of Clans API
Retrieve war log entries for a clan
Descriptions are too short (10-60 chars vs. 50-200 char baseline). LLMs cannot distinguish when to use 'clan-war-league-info' vs 'clan-war-league-war' or 'get-current-war'. Descriptions must explain WHAT, WHEN, and WHY.
No output schemas documented. Responses return raw JSON.stringify() without field definitions. LLMs cannot plan downstream calls or extract required data (e.g., player tag, clan tag for chaining).
Error handling returns raw error messages without recovery guidance. 'Error retrieving player data: ...' tells LLM nothing about retry eligibility or next steps. Should follow pattern:recovery-guide.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
Parameter 'round' in clan-war-league-war accepts 1-7 but no enum constraint in schema. Description mentions range but schema lacks formal validation. Should use z.enum() or z.number().min(1).max(7).
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are read-only but this is not declared in schema. Agents cannot distinguish safe-to-retry operations from destructive ones.