Skip to main content
Glama
rc-ventura

Fantasy Gamebook Engine

by rc-ventura

Fantasy Gamebook Engine

A solo-play gamebook (Fighting Fantasy–style) engine where an AI acts as the game master and narrator. The whole design turns on one hard rule:

The AI never invents numbers or rolls dice in prose. All randomness, state, and combat math go through an MCP server. The AI only narrates and offers choices.

Everything numeric — dice, attribute generation, luck tests, combat rounds, persistence — is owned by a deterministic Python engine and exposed to the narrator as MCP tools. The narrator (Phase 1: Claude Code) reads real state, calls tools, and writes the story around the results.

Status: Phase-1 MVP — implemented and green. Python engine under src/gamebook/, an MCP server exposing 18 tools, 158 passing tests at 96% coverage across tests/engine, tests/server, and tests/qa. The narrator harness lives as Claude Code skills and commands under .claude/.


Why it's built this way

The system decomposes into 8 modules, and the golden rule of the design is that dependency arrows point only at interfaces/contracts, never at concrete implementations. That discipline is what makes three things swappable without touching the rest:

  1. StorageJSONStorage today, PostgresStorage tomorrow. Injected at server startup.

  2. Adventure — swap the lore module without touching the engine. Today a SKILL.md.

  3. Harness — swap who narrates (terminal → web) while reusing the same MCP tool contract.

07 harness ───────► 05 mcp ◄──────── 08 commands
                      │
        ┌─────────────┼─────────────┐
        ▼             ▼             ▼
   01 rules      04 combat     03 storage (interface)
        │             │             ▲
        └──────►──────┘             │ implements
                  │                 │
                  ▼                 │
            02 domain ◄─────────────┘   (shared data contracts)

06 adventure-module ──(lore consumed by)──► 07 harness

#

Module

Responsibility

Pluggable?

01

rules

Pure rules engine — dice, attributes, luck test, one combat round. No I/O, RNG injected.

— (stable)

02

domain

Shared data contracts + invariant validation. Depends on nothing.

— (stable)

03

storage

Persistence behind the StorageBackend interface.

✅ JSON ↔ Postgres

04

combat

Combat lifecycle (start → rounds → flee → end).

05

mcp

MCP server exposing tools to the harness. No game rules of its own.

— (stable contract)

06

adventure-module

Pluggable static lore (zones, bestiary, victory). Debut: Ignarok.

✅ Ignarok ↔ others

07

harness

The narrator/master that talks to the player and calls the MCP.

✅ Claude Code ↔ agent

08

commands

System commands (/hero, /backpack, /map, /save).

✅ add new ones

Related MCP server: DM20 Protocol

Project layout

src/gamebook/
  domain/    # data contracts: CharacterSheet, World, Event, Combat, ArchiveRecord
  rules/     # pure rules engine (interfaces + implementation), injectable RNG
  storage/   # StorageBackend interface + JSONStorage + in-memory impl
  combat/    # combat lifecycle (interfaces + implementation)
  mcp/       # FastMCP server over stdio — orchestrates the modules
docs/
  00-index.md … 08-commands.md   # specs (requirements)
  CONTRACTS.md                   # authoritative English code contract
  adrs/                          # architecture decision records
  learning-lessons/              # captured gotchas
.claude/
  skills/    # game-master, combat-sub-agent, ignarok (the Phase-1 harness)
  commands/  # /hero, /backpack, /map, /save
tests/
  engine/  server/  qa/

Requirements

  • Python 3.13 (.python-version), requires-python >= 3.12

  • uv for dependency management and running

Quickstart

# Run the full test suite
uv run pytest -q

# Scope it
uv run pytest tests/engine -q     # pure rules (seeded RNG, in-memory storage)
uv run pytest tests/server -q     # storage + MCP server
uv run pytest tests/qa -q         # plugability / isolation / e2e

# The golden-rule plugability audit (catches any module reaching past an interface)
uv run pytest tests/qa/test_dependencies.py tests/qa/test_isolation.py -q

# Start the MCP server over stdio (exits cleanly on EOF)
uv run python -m gamebook.mcp.server

The server is registered for Claude Code in .mcp.json, so the narrator skills can call it directly.

MCP tools (18)

The authoritative contract is docs/CONTRACTS.md §6. Grouped by purpose:

Group

Tools

Dice & luck

roll_dice, test_luck

Character

create_character, read_character_sheet, update_character_sheet, archive_character

World

read_world, update_world

Chronicle

register_event, read_events, read_summary, update_summary

Combat

start_combat, resolve_combat_round, flee_combat, end_combat

Saves

save_progress, load_progress

Game rules (reference)

  • Attributes: skill = 1d6+6, stamina = 2d6+12, luck = 1d6+6 — each tracks initial/current.

  • Luck test: success if roll ≤ current luck; luck always decrements by exactly 1 afterward.

  • Combat round: each side's attack strength = skill + 2d6; higher AS hits for base damage 2, a tie deals 0.

  • Luck on a hit: won+lucky → 4, won+unlucky → 1, lost+lucky → 1, lost+unlucky → 3.

  • Death / flee: hero at 0 stamina → alive: false; fleeing costs 2 stamina and only if allowed.

rules and combat are tested in full isolation with a seeded RNG and in-memory storage — deterministic, no disk, no AI.

Playing a session (Phase-1 harness)

When you sit down to play rather than develop, Claude Code becomes the Game Master.

Session-opening rule: before narrating anything, the master reads real engine state via MCP (read_character_sheet, read_world, read_events, read_summary). No living character → it offers create_character and starts the adventure's opening. A living character → it resumes from the exact recorded point (never restarts, re-rolls, or contradicts recorded facts). Every number and state change routes through MCP tools.

  • Skills (.claude/skills/): game-master (narrator), combat-sub-agent (runs one fight), ignarok (the debut adventure — swap this file to swap adventures).

  • Commands (.claude/commands/): /hero, /backpack, /map, /save — read-outs and checkpoints that reflect real MCP state and don't advance the story.

Documentation

  • docs/00-index.md — start here; maps every module.

  • docs/CONTRACTS.md — the authoritative English code contract (cross-module interfaces, domain schema §2, MCP tool contract §6). When code and a spec disagree, CONTRACTS.md governs.

  • docs/adrs/ — architecture decision records (ADR-001 … ADR-010).

  • docs/learning-lessons/ — captured gotchas worth not relearning.

  • CLAUDE.md — guidance for Claude Code working in this repo.

Roadmap

  • Phase 1 (current): Claude Code as harness, JSONStorage, adventure as SKILL.md.

  • Phase 2: a PydanticAI/FastAPI harness with structured Scene output for a web frontend, plus PostgresStorage — reusing the same MCP tool contract and adventure module unchanged. That reuse is the entire point of the architecture.

Available Tools

18 tools
archive_characterA

Archive the hero to the graveyard (death) or hall_of_fame (victory).

ParametersJSON Schema
NameRequiredDescriptionDefault
destinationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description partially discloses behavior by naming the destinations, but it does not explain whether the action is destructive, reversible, or requires permissions. More detail would improve transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no wasted words. It is front-loaded with the action and resource, followed by the distinction.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (1 parameter, no annotations) and presence of an output schema, the description could be more complete by explaining the effects of archiving (e.g., whether the character is removed from active play, if the action is reversible) or the return value format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning to the sole parameter 'destination' by specifying the allowed values ('graveyard' or 'hall_of_fame'), which the schema does not provide. This compensates for the 0% schema description coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('archive'), the resource ('hero'), and the two possible destinations ('graveyard' for death, 'hall_of_fame' for victory). This differentiates it from siblings like 'create_character' or 'update_character_sheet'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (archiving a hero as death or victory) but does not explicitly state when not to use it or mention alternatives among the many sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_characterC

Roll a new hero's attributes and persist a living character sheet.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
goldNo
luckYes
nameYes
aliveNo
skillYes
staminaYes
inventoryNo
conditionsNo
provisionsNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must fully convey behavioral traits. It mentions rolling attributes and persisting but omits details like randomness, persistence mechanism, permissions, or side effects such as overwriting existing data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is concise. However, it lacks structure and important details, making it somewhat under specified rather than efficiently informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple schema (one parameter) and presence of an output schema, the description should at least hint at the output or necessary context. It does not mention what is returned or any state dependencies, leaving gaps for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The parameter 'name' has no schema description (0% coverage), and the description does not explain its role, format, or constraints. The sentence implies creation but does not link to the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a new hero by rolling attributes and persisting a character sheet. It distinguishes itself from sibling tools like read_character_sheet and update_character_sheet which operate on existing sheets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No usage guidance is provided. The description does not indicate when to use this tool versus alternatives like update_character_sheet or archive_character, nor does it mention prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

end_combatC

Conclude a combat and return its final result.

ParametersJSON Schema
NameRequiredDescriptionDefault
combat_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dropsNo
roundsYes
winnerYes
luck_spentYes
hero_final_staminaYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description must carry full burden. It states 'conclude a combat' but does not disclose whether it is destructive, irreversible, or requires specific permissions. The behavioral impact is unclear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, efficiently communicating the core action. However, it is too minimal; a bit more detail would improve without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the existence of an output schema, the description partially fulfills by indicating a result, but it lacks context on side effects, required state, and parameter purpose. The tool's complexity is low, but the description is still incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description does not mention the single required parameter 'combat_id' (schema coverage 0%). It adds no semantic information beyond the schema, leaving the agent without guidance on what to provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Conclude') and resource ('combat'), clearly distinguishing from siblings like 'start_combat', 'flee_combat', and 'resolve_combat_round'. It states the action and that it returns a result.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives like 'flee_combat' or prerequisites (e.g., combat must be active). The description does not address exclusions or context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

flee_combatC

Flee the combat (if allowed); costs 2 stamina.

ParametersJSON Schema
NameRequiredDescriptionDefault
combat_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
endedNo
hero_aliveNo
damage_takenNo
hero_staminaYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the burden. It only states the stamina cost, omitting other behavioral aspects like success conditions, failure consequences, or state changes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise with one sentence that earns its place, but it is overly terse and could include more detail without sacrificing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the context of a combat system with multiple related tools and an output schema, the description is severely incomplete, lacking prerequisites, success criteria, and output explanation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema shows 'combat_id' with no description, and the tool description adds no information about what this parameter represents or how to obtain it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Flee the combat' with a specific verb and resource, distinguishing it from sibling tools like 'end_combat' or 'resolve_combat_round'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions 'if allowed' but provides no criteria for when fleeing is allowed, nor compares to alternatives like 'end_combat' or 'resolve_combat_round'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

load_progressB

Restore all state from a named slot (default 'autosave').

ParametersJSON Schema
NameRequiredDescriptionDefault
slotNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description must disclose behavioral traits. It only states 'restore all state' but does not explain that this overwrites current state, whether the operation is destructive, or any side effects. This is insufficient for a restore operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence of 9 words, directly stating the purpose and default. It is concise and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema (present but not shown), so return values are covered. However, the description lacks information on preconditions (e.g., slot must exist) and error behavior, which are important for a restore operation. Overall adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%. The description mentions 'named slot' and default 'autosave', but does not clarify the allowed values or behavior when the slot is null. The parameter semantics are only minimally enhanced beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Restore all state') and the object ('from a named slot'), with the default being 'autosave'. It is specific and distinguishes from the sibling tool 'save_progress'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied but not explicit. The context suggests it is used after saving via 'save_progress', but no when-to-use or when-not-to-use guidance is provided, nor are alternatives mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_character_sheetA

Return the hero's full character sheet.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
goldNo
luckYes
nameYes
aliveNo
skillYes
staminaYes
inventoryNo
conditionsNo
provisionsNo

TDQS

A4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must convey behavioral traits. It states 'Return', implying a read operation, but does not explicitly confirm idempotency, safety, or lack of side effects. Minimal disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no waste. The description is appropriately sized and front-loaded with the action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and an output schema, the description is adequate. It mentions 'full character sheet', but could be slightly more descriptive about scope, though the output schema compensates.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, baseline is 4. The description adds no parameter info, which is acceptable since none are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Return the hero's full character sheet', using a specific verb and resource. It distinguishes from siblings like update_character_sheet (write) and create_character (creation).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when the agent needs the full character sheet. No exclusions or alternatives are mentioned, but the context is clear given the tool's name and sibling context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_eventsA

Return the full chronicle of events, in order.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It only states the tool returns events in order, omitting any mention of side effects, read-only nature, or potential performance implications. A read operation is implied but not confirmed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that immediately conveys the tool's purpose. There is no redundant or extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters and an output schema presumably covers return structure, the description is mostly complete. A brief note on what constitutes an 'event' or the scope of 'full chronicle' would strengthen it, but it remains adequate for basic usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema is empty (no parameters), so schema coverage is trivially 100%. The description does not need to add parameter guidance. Baseline score of 4 is appropriate as no further explanation is required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns 'the full chronicle of events, in order.' It uses a specific verb ('Return') and resource ('events'), and distinguishes from siblings like read_summary and read_world by focusing on the chronological event log.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is provided on when to use this tool versus alternatives. The description implies usage for viewing event history, but does not mention when not to use it (e.g., for character details, use read_character_sheet) or suggest alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_summaryB

Return the running narrative summary.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavior. It states 'Return,' indicating a read operation, but does not mention side effects, safety, or permission requirements. Minimal transparency for a tool with no annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It is appropriately sized for a simple read-only tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and an existing output schema (though not shown), the description adequately conveys the tool's purpose. It could mention the return format, but overall it is sufficient for a basic read operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, so schema coverage is 100%. According to guidelines, the baseline score is 4 when there are no parameters. The description does not need to add parameter info.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns the running narrative summary. The verb 'Return' and resource 'running narrative summary' are specific. It distinguishes from sibling 'update_summary' but could elaborate on what the summary contains.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like read_events or read_world. The description implies usage for reading the summary, but no exclusions or comparisons are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_worldA

Return the current world state.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
turnNo
flagsNo
known_npcsNo
current_locationNo
visited_locationsNo

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description does not disclose any behavioral traits (e.g., caching, cost, authentication) beyond the simple action of returning data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one concise sentence that is front-loaded with the essential action. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the existence of an output schema, the description does not need to detail return values, but it is vague about what 'world state' includes, which may confuse agents comparing with sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters, the description need not add parameter meaning. The no-parameter baseline is 4, and the description suffices.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns the current world state, which matches the tool name and distinguishes it from sibling tools like 'update_world' and 'read_character_sheet'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when the full world state is needed but provides no explicit guidance on when to use vs alternatives like 'read_summary' or 'read_events'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

register_eventC

Append a hard fact to the chronicle, stamped with the current turn.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes
typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
turnYes
typeYes
timestampYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description mentions auto-timestamping ('stamped with the current turn') but does not disclose other behaviors like idempotency, data validation, or side effects. With no annotations, this is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence, which is concise but misses critical information. It is not well-structured for quick parsing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with nested objects and an output schema, the description lacks context on output format and integration with sibling tools. Incomplete for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description provides no explanation of the 'type' or 'data' parameters. The metaphor does not translate to parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses metaphor 'hard fact' and 'chronicle', but clearly indicates appending a timestamped record. It distinguishes from siblings like 'read_events' and 'create_character' by focusing on logging facts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives such as 'read_events' or 'update_summary'. Lacks context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_combat_roundC

Resolve one combat round, optionally testing luck on the hit.

ParametersJSON Schema
NameRequiredDescriptionDefault
use_luckYes
combat_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
endedNo
hitterYes
winnerNo
hero_asYes
enemy_asYes
luck_usedNo
hero_staminaYes
enemy_staminaYes
damage_appliedYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description bears full responsibility. It does not disclose side effects (e.g., modifies character health, advances state), potential destructiveness, or required permissions. The phrase 'resolve one combat round' is vague.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no wasted words. However, lacks any structure like bullet points or sections to improve readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, the description omits crucial context: what happens to the combat state after resolution, whether it advances to next round, and how luck test integrates. Sibling tools like start_combat and end_combat imply a lifecycle not described here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage. Description only briefly mentions 'use_luck' as optional luck testing but does not explain 'combat_id' meaning or how 'use_luck' changes behavior. Minimal added value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Resolve one combat round' with a specific verb and resource. It also adds 'optionally testing luck on the hit', which differentiates from siblings like test_luck or start_combat.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like flee_combat or end_combat. No prerequisites or conditions mentioned (e.g., must have an active combat).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

roll_diceA

Roll a dice expression like '2d6' or '1d6+6'.

ParametersJSON Schema
NameRequiredDescriptionDefault
notationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
rollsYes
totalYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, and the description does not disclose any behavioral traits such as side effects, randomness behavior, error handling, or return value details. It only states the basic action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no unnecessary words. It is front-loaded with the action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and the presence of an output schema, the description is adequate but incomplete. It does not mention support for multiple dice, modifiers beyond '+', or error cases like invalid notation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'notation' is explained with format examples ('2d6' or '1d6+6'), which adds clarity beyond the schema's label. Schema description coverage is 0%, so the description compensates well but could specify the allowed syntax more precisely.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action ('Roll') and the resource ('dice expression'), and provides concrete examples ('2d6', '1d6+6'). It distinguishes itself from sibling tools, none of which are dice-related.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives or when not to use it. The description lacks context for proper selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_progressB

Snapshot all state to a named slot (default 'autosave').

ParametersJSON Schema
NameRequiredDescriptionDefault
slotNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description must fully disclose behavior. It states 'snapshot all state' but omits whether it overwrites, is idempotent, or has side effects. Minimal behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with no wasted words. Front-loaded with verb and resource. Efficiently communicates core purpose and default behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema and only one parameter, the description is too minimal. It fails to define what 'all state' includes, whether the operation is reversible, or any prerequisites. More context is needed for a complete understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must compensate. It adds 'default 'autosave'' which clarifies the default value, but does not explain the slot string format or allowable values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'snapshot' and resource 'all state' with a named slot, clearly distinguishing it from load_progress (restore) and archive_character (partial save).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for saving state with optional slot naming, but lacks explicit when-to-use or alternatives guidance. Sibling tools exist but no comparison is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_combatC

Start a fight against one or more living enemies.

ParametersJSON Schema
NameRequiredDescriptionDefault
enemiesYes
flee_allowedYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
endedNo
roundNo
winnerNo
enemiesYes
combat_idYes
flee_allowedNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It only states 'start a fight' without disclosing side effects (e.g., state changes, combat initialization), required permissions, or constraints like enemy validity. Minimal behavioral disclosure for a state-changing tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence, which is concise but lacks any structure or additional informative content. It could be expanded with key details without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool initiates combat with two parameters and no behavioral context, the description fails to explain the full context: that this may transition the game state, that subsequent actions like resolve_combat_round are expected, or what the output schema provides. Incomplete for a combat initiator.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% (no descriptions in input schema), and the tool description adds no meaning to the parameters 'enemies' and 'flee_allowed'. The agent cannot infer what values are expected for enemies (e.g., IDs, objects) or the role of flee_allowed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool starts a fight against one or more living enemies, specifying verb (start), resource (combat), and scope (one or more living enemies). It inherently distinguishes from sibling tools like end_combat, flee_combat, or resolve_combat_round.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., character must be created), workflows (e.g., call before resolve_combat_round), or when not to use it (e.g., already in combat).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

test_luckA

Test the hero's luck (2d6 <= current luck); always spends one luck.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
rollYes
successYes
luck_afterYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite no annotations, the description explicitly discloses that it always spends one luck, which is a key behavioral trait. However, it does not mention other side effects or state changes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that is compact and front-loaded with the action and mechanics, with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and an existing output schema, the description sufficiently covers the tool's purpose and behavior. However, it omits any context about prerequisites or return value details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters, so parameter semantics are not needed. Schema coverage is 100% by default, and the description adds no additional parameter information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (test luck), the mechanic (2d6 vs current luck), and the cost (always spends one luck), distinguishing it from sibling tools like roll_dice.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives such as roll_dice or read_character_sheet. The purpose is implied but not differentiated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_character_sheetA

Patch the character sheet. Scalars/lists are replaced; attribute sub-dicts (skill/stamina/luck) are merged. Invariants are validated; on error the state is left unchanged.

ParametersJSON Schema
NameRequiredDescriptionDefault
changesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
goldNo
luckYes
nameYes
aliveNo
skillYes
staminaYes
inventoryNo
conditionsNo
provisionsNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description effectively discloses key behaviors: mutation (patch), merge vs replace semantics for attributes, validation of invariants, and atomic rollback on error ('state is left unchanged'). This goes beyond mere purpose and aids safe invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences deliver essential information without redundancy: action, merge/replace semantics, and error behavior. Every sentence earns its place, and the description is front-loaded with the core verb.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a free-form patch object and existence of an output schema, the description is fairly complete. It clarifies merge behavior for three key sub-dicts but could be improved by listing supported fields or describing invariants. Still, it provides enough context for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'changes' is an open object with schema coverage 0%. The description compensates by explaining the expected structure: top-level scalars/lists replaced, sub-dicts (skill/stamina/luck) merged. This adds meaningful guidance beyond the schema's 'additionalProperties: true'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool patches a character sheet, with specific verb 'Patch' and resource 'character sheet'. It further distinguishes from siblings like 'create_character' and 'read_character_sheet' by detailing the merge behavior for sub-dicts (skill/stamina/luck) and replacement for scalars/lists.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for partial updates but does not explicitly state when to use this tool versus alternatives like 'create_character' or 'archive_character'. No direct comparisons or exclusion criteria are provided, leaving the agent to infer context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_summaryC

Replace the running narrative summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description must convey behavioral traits. It states 'Replace', implying overwrite, but does not mention return values, error conditions, or any side effects beyond the replacement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very brief, single sentence. No waste, but lacks necessary elaboration. Conciseness is good but sacrifices completeness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter, the description covers the basic action. However, it omits mention of the output schema (which exists) and any context about when replacement is appropriate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'text' has no schema description (0% coverage) and the tool description only repeats the parameter name without adding constraints like format, length, or acceptable content.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the action ('Replace') and resource ('running narrative summary'), distinguishing it from sibling tools like 'read_summary' which presumably reads the same resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives or when not to use it. For example, no mention of prerequisites or that 'read_summary' should be used for viewing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_worldA

Patch the world. Scalars/lists (current_location, visited_locations, known_npcs, turn) are replaced; 'flags' is merged key-wise so one flag can be set without dropping others. Invariants are validated; on error the state is left unchanged. Sole legal path to set the victory flag and advance the turn counter.

ParametersJSON Schema
NameRequiredDescriptionDefault
changesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
turnNo
flagsNo
known_npcsNo
current_locationNo
visited_locationsNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses key behaviors: replacement for scalars/lists, key-wise merge for flags, invariant validation, state unchanged on error, and the exclusive capability to set the victory flag and advance turn. This is comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three focused sentences, each adding essential information: what the tool does, how fields are handled, and its unique role. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the key aspects for a patching tool with one parameter and an output schema. It explains merge behavior and error handling. However, it does not explicitly state what the function returns on success, though the output schema likely covers that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The sole parameter 'changes' is an object with no schema descriptions (0% coverage). The description compensates by explaining how specific fields (current_location, flags, etc.) are handled, but does not enumerate all possible keys, leaving some reliance on agent inference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it patches the world, specifies which fields are replaced vs merged, and explicitly identifies it as the sole path to set the victory flag and advance the turn counter. This distinguishes it from sibling tools like update_character_sheet.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the behavior for different data types (replacement vs merge) and mentions invariant validation. However, it does not explicitly compare with sibling tools or list when not to use it, leaving some ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 18 tool updatesv0.1.0
    • First observedarchive_character
    • First observedcreate_character
    • First observedend_combat
    • First observedflee_combat
    • First observedload_progress
    • First observedread_character_sheet
    • First observedread_events
    • First observedread_summary
    • First observedread_world
    • First observedregister_event
    • First observedresolve_combat_round
    • First observedroll_dice
    • First observedsave_progress
    • First observedstart_combat
    • First observedtest_luck
    • First observedupdate_character_sheet
    • First observedupdate_summary
    • First observedupdate_world

TDQS

B3.4/5.0

Scored across 18 tools

Disambiguation5/5

Each tool has a clearly distinct purpose. Combat tools (start, end, flee, resolve) are separated; read/update tools target different aspects (character, events, summary, world); and utilities like roll_dice, test_luck, save/load progress are unique.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., create_character, start_combat, read_world). There is no mixing of conventions or vague verbs.

Tool Count4/5

18 tools is slightly above the typical 3-15 range but still well-scoped for a gamebook engine. The number covers character management, combat, world state, narrative, and progress, without feeling excessive.

Completeness4/5

The tool set covers core CRUD operations for characters, world, events, and combat lifecycle. One minor gap is the lack of a tool to list available save slots, but essential workflows are supported.

Maintenance

ActivityStale
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    A MCP server enabling LLMs to roll dice
    1
    4
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    A comprehensive MCP server for managing AI-assisted Dungeons & Dragons campaigns, featuring tools for character sheets, combat tracking, and world-building. It enables players and DMs to interact with 5e game mechanics and query personal PDF rulebooks using RAG capabilities.
    97
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that enables AI agents to act as dynamic dungeon masters for text-based RPGs with dynamically generated rule systems and comprehensive game state management.
    10 npm
    11
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    An MCP server enabling AI agents to autonomously play D\&D as players and Dungeon Masters, with real dice rolls and full campaign management.
    2
    MIT