MCP server for interactive text adventures with persistent game state, dice-based action resolution, and dynamic content generation
This server has 23 tools with moderate structural issues. Naming is generally action-oriented (get_, list_, manage_, take_, update_), but tool composition is poor, many tools are overly broad (e.g., manage_* tools bundle create/update/delete/list operations). Descriptions are present for all tools and most parameters, ranging 50-250 chars, which meets the 10-1024 baseline. However, parameter type coverage is inconsistent: some tools (e.g., take_action, combat_round) lack explicit schema definitions in the visible code, and complex parameters like 'updates' in modify_state are typed as bare 'object' without field documentation. Output schemas are not documented for any tool, LLMs must infer return types. Error handling lacks recovery guidance (no retry hints, no actionable messages). The server is STDIO-only, which is a hard cap issue for transport accessibility. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are visible, despite 18+ tools being state-modifying. The tool chain composition is weak: tools like manage_inventory and modify_state coexist as overlapping write paths, and output schemas don't guarantee that response fields match downstream tool input parameter names.
Add a memory to a character's memory list.
Execute a round of combat with an enemy. Includes player action, enemy counterattack, and state updates.
Chain multiple ACTION-ONLY tool calls—no narration between them. Use to apply mechanical updates quickly. Reject if any command needs your prose. Ensure commands are non-conflicting and linear.
Use when you want to replace the canned opening. Returns a strict JSON prompt so YOU can author the opening story, locations, and NPCs. After generating, you MUST call start_adventure with generated_story / generated_characters / generated_locations.
Retrieve enforceable rules. Use this to refresh constraints mid-session. Hidden sections ('welcome','drop_context','workflow','features','available_adventures') are blocked.
Call this FIRST. Returns the required workflow, rules, and current adventure catalog. Do not improvise until you read this payload; it tells you how to run the session.
modify_state has overly generic 'updates' parameter typed as bare 'object' with no field documentation. LLMs cannot determine what fields are valid, leading to invalid mutations.
Nine manage_* tools (manage_inventory, manage_character, manage_location, manage_item, manage_status_effect, manage_faction, manage_summary, update_quest, manage_economy) bundle create/update/delete/list operations. This violates single responsibility, split into separate tools (create_character, update_character, delete_character, list_characters) so agents can compose them precisely.
No output schemas documented for any of the 23 tools. LLMs must infer return types, risking incorrect assumptions about response structure. Document what fields each tool returns (e.g., take_action returns {outcome: string, score_delta: number, player_state: {...}}). This is critical for tool chaining.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 54 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Interact with an NPC (talk, trade, hire, etc.).
Quick catalog of adventures. Call before start_adventure to pick a valid id.
List recent sessions to resume. Use this instead of guessing a session_id.
Create, update, or delete a character in the game world.
Update player currency and transaction history.
Update faction reputation and relationship tracking.
Add, remove, or query items in player inventory.
Create, update, or delete an item in the game world.
Create, update, or delete a location in the game world.
Create, update, or delete a status effect.
Create and retrieve session summaries for story continuity.
Advance game time and handle day/night cycles.
Directly modify player state fields (hp, score, location, stats, etc.).
Private log for your next move—never show to the user. Use before pivoting tone/plot.
Record a significant event in the action history.
Execute a player action with optional stat check and dice roll. Returns outcome, score change, and updated state.
Create, update, or complete a quest.
No tool annotations visible (readOnlyHint, destructiveHint, idempotentHint). Of 23 tools, 18 are clearly state-modifying (create, update, delete, execute), but LLMs have no formal guidance on which operations are safe to retry. Add destructiveHint=true to delete/execute paths and idempotentHint=true where applicable.
Error handling provides no recovery guidance. Tools like manage_character have no documented error cases or hints (e.g., 'Character not found. Try list_characters() first'). This violates pattern:recovery-guide and forces agents to guess next steps on failure.
execute_batch accepts an array of commands but no limit is documented. Unbounded batch sizes can overwhelm the server or cause context explosion. Cap at 50 items and document in description.
list_adventures and list_sessions accept optional parameters but do not document pagination or result limits. If a game has thousands of sessions, returning all of them wastes tokens and risks context exhaustion. Add pagination (limit, offset, next_cursor) with documented defaults and caps.
STDIO-only transport. This server is not remotely accessible and cannot be used by hosted MCP clients or cloud-based agents. Migrate to HTTP+SSE or Streamable HTTP to enable remote deployment and integration with web-based client tools.