MCP server exposing 金庸群俠傳 (a Chinese CRPG game) to any LLM agent, providing game interaction tools for benchmark and standalone modes
Server exposes 9 tools with inconsistent naming, incomplete schemas, and minimal parameter descriptions. Tools lack input validation guidance, error recovery hints, and output schema documentation. Naming is non-standard (mix of verb_noun and bare nouns like 'look', 'guide'). Parameter descriptions exist but are sparse (avg ~40 chars vs baseline 72). No tool annotations (readOnlyHint/destructiveHint). Critical: 'look' and 'game_look' are duplicates; 'press' and 'game_press' are near-duplicates with different parameter constraints. This violates composition pattern (one tool per concern). Schemas present but lack minLength/maxLength on string arrays in 'press'/'game_press'. No output schemas documented anywhere.
Restore a snapshot taken by game_save, including its current dialogue, menu, or animation state. Inspect the restored screen before choosing the next action.
Look at the current game screen without pressing anything. Use it to re-read a screen you did not finish reading, or to re-orient after losing track of where you are.
Press one key, or several in order. Movement keys are kp7, kp9, kp1 and kp3 (preferred), with left, up, down and right as the same four axes. Other keys: enter, space, esc, y, n, a-z, 0-9, f1-f12, tab, backspace. A repeat is a list of the same key, for example ["kp3", "kp3", "kp3"] to walk three tiles or ["enter", "enter"] to advance two lines; a menu path is a list such as ["esc", "down", "down", "enter"]. The reply says what was pressed and nothing about what the screen did: read the next picture.
Request an emulator snapshot under a name, including scene or battle state. Check that saving succeeded before relying on it; the game's own save menu is limited to the world map.
Re-read the canonical game manual and MCP tool-name mapping. The MCP server also sends this text as server instructions at connection time. This tool is a compatibility fallback for clients that do not place those optional instructions into the model context.
Duplicate and near-duplicate tools: 'look'/'game_look' are identical; 'press'/'game_press' differ only in parameter constraints and descriptions. Violates single-responsibility pattern. LLM cannot disambiguate which to call.
Tools 'look' and 'game_look' have empty input schemas ({}). No input validation possible.
No output schemas documented for any tool. LLM cannot plan downstream calls or extract required fields. Violates response-shaper pattern.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
Restore a snapshot taken by save_state, including its current dialogue, menu, or animation state. Inspect the restored screen before choosing the next action.
Look at the current game screen without pressing anything. Use this to re-read a screen, or to check where you are after reconnecting. The frame comes back at its native 320x200.
Press one key, or several in order. In benchmark mode, call look after acting. key: a key name, or a list of names pressed in order. Movement keys are kp1, kp3, kp7, kp9 (or up, down, left, right, the same four axes); other keys: enter, space, esc, y, n, a-z, 0-9, f1-f12, tab, backspace. A repeat is a list of the same key, for example ["kp3", "kp3", "kp3"] to walk three tiles. hold: frames to hold each key down, 5 or more. Omit it for the game server's tap default; a long hold walks several tiles in one press. The reply says what was pressed and which frame followed, and nothing about what the screen did: read the picture. An action returns once the screen has settled, a scene transition included.
Snapshot the whole emulator under this name. Emulator snapshots can include scene or battle state. Check that saving succeeded before relying on it; the game's own save menu is limited to the world map.
Parameter 'key' in 'press'/'game_press' accepts 'string|list[string]' but lacks minLength/maxLength constraints on array elements. Description mentions 'repeat is a list' but no formal constraint. Invites hallucinated key names.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). 'save_state'/'game_save' and 'load_state'/'game_load' are destructive/write operations but lack explicit marking. Agents cannot reason about side effects.