TaleShed MCP has 12 tools with reasonable descriptions and some schema details, but exhibits uneven quality. Strengths: most tools have descriptive text (50-300+ chars), clear action verbs in names (get_, set_, move_, seal_, list_, create_, etc.), and explicit parameter descriptions. Weaknesses: deprecated tools (take_turn, update_node_adjectives) still present and documented as 'do not call' (anti-pattern, should be removed entirely); output schemas largely undocumented (no explicit return type definitions visible in source); parameters lack formal type constraints (enums, min/max ranges); error handling guidance present in descriptions but not formalized in output; tool composition could be tighter (overlapping state mutation tools). Per-tool average: 62/100. Most tools score 55-70, with deprecated tools dragging the average down.
Saves the current world state as a restore point. When calling this tool, if you can, pass the description parameter with a concise, evocative one-line summary of what's happening in this moment (where the player is, what they hold, what they just did). That label is shown in list_bookmarks and when restoring. If the tool is called without parameters, the engine generates a label from recent history. The player can return to any bookmark later with restore_to_bookmark (use list_bookmarks first to see numbers).
Creates a new entity (NPC, object, or location) in the world. The new node_id must be unique. You can optionally set initial adjectives and other properties.
Evaluates the narrative and world state for any unintended consequences or logical inconsistencies. Returns observations about what might need correction (e.g. an entity in a dark location without a light source, or a floating object). This is optional: use it when you want the engine to audit your narration.
Returns the current scene: player state, location, inventory, entities in the room, exits, and vocabulary. Call this at the start of each turn and after any state-changing tool. Use the returned node_ids for set_node_adjectives, move_entity, and seal_passage.
Lists all saved bookmarks by number and description. Call this before restore_to_bookmark so you can tell the player which numbers exist and ask which one to restore to. No parameters.
Deprecated tools (take_turn, update_node_adjectives) remain in active tool set with 'do not call' warnings in descriptions. Anti-pattern: tools marked deprecated should be removed entirely, not left as footguns. This confuses LLM tool selection and wastes reasoning cycles deciding between deprecated and new variants.
Output schemas undocumented for most tools. Tools return prose/results but no formal return type specifications visible. LLMs cannot predict result structure for downstream chaining (e.g., what fields does get_scene return? what is the structure of list_bookmarks output?). Baseline: 100% of A+ tools have documented return types.
Parameters lack formal constraints (enums, min/max, regex patterns). direction parameter in seal_passage lists compass directions in description text ('north, south, east...') but no enum constraint defined. node_type in create_node describes valid values ('location', 'entity', 'npc') but no enum. This forces LLMs to parse text constraints instead of using machine-readable schema.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 53 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 8 | - | v1 |
Moves an entity (NPC, object) from one location to another, or into/out of a container. Call this whenever the narrative creates movement. The operation respects containment rules: you cannot move something out of a closed container.
Rolls the world back to a chosen bookmark. You must specify bookmark_number (use list_bookmarks to see numbers). Restoring wipes out all progress and bookmarks after that point. First call returns a confirmation warning; call again with confirm: true to perform the restore. If the player says 'restore' or 'go back' without specifying which bookmark, return an error and suggest they run list_bookmarks and choose a number.
Closes or locks an exit, making it impassable. The exit must exist in the location. Sealing a passage that is already sealed is idempotent (succeeds silently). Use this after narrative events that block movement (e.g. 'the gate slams shut').
Replaces the complete adjective list for any node. Call this after every adjective change your narrative creates — the new list becomes the authoritative state for that node. Pass the full intended list, not a delta. Omitting an adjective removes it; including a new one adds it. Use node_ids exactly as returned by get_scene (entities[], inventory[], or "player"). VOCABULARY: Every adjective you set should appear in get_scene's vocabulary[] or be a term you define here.
DEPRECATED — do not call this tool for new turns. Use the new turn sequence instead: get_scene → narrate → set_node_adjectives / move_entity → evaluate_consequences (optional). take_turn remains available only for legacy fallback; prefer the new tools for all gameplay.
DEPRECATED — use set_node_adjectives instead. set_node_adjectives is a direct replacement with the same semantics but with dark-location protection, proper history ledgering, and vocabulary integration built in. Do not call update_node_adjectives for new turns.
Returns TaleShed build/version information: package semver and the timestamp of the latest git commit (committer date, ISO 8601)—a practical stand-in for last push when the server runs from a clone. No parameters.
Complex parameter interdependencies underdocumented. E.g., restore_to_bookmark requires bookmark_number (but how to discover valid numbers?) and confirm (two-step confirmation), but relationship between first and second call not formally specified. LLMs must infer flow from description text.
Error handling guidance embedded in descriptions but not formalized. No structured error response taxonomy (retryable vs user-fixable vs fatal). restore_to_bookmark mentions 'return an error' but no error type/code specification visible. LLMs cannot classify failure modes and choose recovery strategies.
Tool composition: set_node_adjectives and update_node_adjectives do nearly the same thing (replace adjective list). While update_node_adjectives is marked deprecated, both remain callable, violates single responsibility. Adjective manipulation is central to gameplay but split across two tools with subtle differences ('dark-location protection' in set vs not in update).
Vocabulary integration references (set_node_adjectives description) explain that adjectives are validated against vocabulary, but vocabulary retrieval mechanism not exposed as a tool. Agents must infer that get_scene returns vocabulary[] and guess its structure. No dedicated get_vocabulary tool.