Real-time authoritative game server for Clash Royale-like game with MCP tools for game management and troop deployment
This server has incomplete tool definitions with several critical gaps. While all 6 tools are explicitly registered in engine/src/mcp/tools.ts and mcpServerNew.ts with names and basic descriptions, parameter schemas are inconsistent, descriptions lack detail about state changes and prerequisites, and output schemas are entirely undocumented. The source code reveals input schemas for 5 of 6 tools, but they lack proper error handling guidance and recovery instructions. Parameter descriptions are generic (e.g., 'ID of the match', 'Name of the player'). No tool includes return type documentation. Three tools (create_game, join_game, spawn_troop) reference 'session_id' in the earlier feature list but it is missing from the actual source schemas, creating a discrepancy. The server uses Express/HTTP transport, which is positive, but the tool definitions themselves are closer to skeleton implementations than production-grade patterns.
Create a new Clash Royale match
Get the current status of a Clash Royale match
Join an existing Clash Royale match
List all available games
Deploy a troop in the game at a specific position
Trigger an emote for the red king (only available for AI-controlled red team)
Missing output/return schema documentation for all tools. No tool documents what fields, types, or structure it returns. LLMs cannot plan downstream calls or extract data without knowing return types.
Tool descriptions are generic and do not explain state changes, prerequisites, or when to use each tool instead of a similar one. E.g., 'Create a new Clash Royale match' lacks details on what happens to the returned match_id or whether match is immediately playable.
Parameter descriptions are minimal and lack format/constraint guidance. E.g., 'row' and 'col' say 'Row position' but do not explain red team (0-16) vs blue team (17-33) boundaries in the description itself, only in a comment. LLMs do not reliably parse comments.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 51 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 57 | 2024-11-05+ | v1 |
Discrepancy between feature list and actual schemas: feature list mentions 'session_id' parameter for create_game, join_game, spawn_troop, and trigger_emote, but source code shows only create_game and join_game have it in inputSchema. This causes ambiguity about what the actual API accepts.
No error handling guidance. Tool implementations catch errors and return JSON with 'error' field, but descriptions do not explain what errors are possible, whether they are retryable, or what the LLM should do next. Per pattern:recovery-guide, errors must tell the agent what to do.
list_games has no input parameters but tool definition is minimal. No description of pagination, result limit, or sorting. What does 'list all available games' mean, all games ever created, only joinable games, or only games by the current player?
spawn_troop requires row and col but does not enforce or document what happens if the position is occupied or invalid. No validation messaging. Does the tool return a clear error (e.g., 'Position occupied') or a generic failure?
create_game and join_game have 'playerName' as optional but no description explains default behavior if omitted. Does the system auto-generate a name? Does it use the user's session identity?