Skip to main content
Glama

Holonovel

Build the Holodeck. Load your campaign.

holonovel MCP server

A holonovel is a Star Trek holodeck program — an interactive story where you step inside as a character and the rules govern. Holonovel builds the server (the Holodeck). Your campaign is the program (the Novel). Your rulebooks become the engine — D&D 5e, Starfinder, or the game on your shelf. Your books. Your server. Your Holodeck.

Table of contents

Related MCP server: RPG Ledger MCP Server

Run a server

Install

The base server — a world-model MCP with rooms, things, exits, parser commands, narrative tools, and out-of-the-box mechanics from Fate, Ironsworn, and Blades in the Dark (Fudge dice, momentum, and stress tracks, no ruleset required). Install it, then install any number of ruleset packages — each drops in alongside the base and never modifies it. Node.js 20+ required.

cd holonovel
npm install
npm run start

Add to your MCP client:

"holonovel": {
  "type": "local",
  "command": ["npx", "tsx", "src/index.ts"],
  "cwd": "<path>/holonovel",
  "environment": {
    "TTRPG_NOVEL": "default"
  },
  "enabled": true
}

Install a ruleset

The Build workflow turns a rulebook into a declarative package. Drop the package into the install directory — .holonovel-state/rulesets/<slug>/ by default — and the running server registers it. Packages load lazily: a ruleset's tools and index hydrate only when you open a campaign bound to that ruleset, so stacking many packages costs you nothing up front. Install, remove, and list packages from the server tools, or just move files and restart.

Your campaign data and installed packages live under .holonovel-state/, outside the server tree — updating holonovel never touches them.

Build your own rulebook

To start a build, run the entry point — it records the intake and prints the workflow to follow (see the spec's Workflow Runbooks appendix for the full happy path):

npm run build-ruleset dnd5e=ruleset/dnd5e/

How it works

Holonovel is one pipeline — Convert, Build, World, Novel, Synthesis — that turns a rulebook into a running table. Badge enforcement runs across all of it, server-side.

Convert

Convert takes PDFs, HTML, and web scrapes and turns them into clean Markdown. Column detection reassembles tables across page breaks. OCR catches text embedded in images. The output is structurally sound — every heading resolved, every reference traced.

"Take the Dungeon Master's Guide — every chapter, every table, every sidebar — and make it a clean source file the server can build from." "Convert this PDF to Markdown, and reassemble the tables that break across pages."

Clean Markdown, ready to build.

Build

Build reads that Markdown and extracts every mechanic. Dice procedures, combat systems, spell catalogues, equipment tables, condition tracks — every structured element becomes a tool, resource, or prompt in a declarative ruleset package. Guidance prose becomes narrative material. The discovery engine samples the source, measures extraction confidence, and iterates until every mechanical section is accounted for. What can't be modeled stays searchable — nothing is fabricated to fill a gap.

"Build me a ruleset package from these files." "Extract every mechanic from this rulebook — the dice, the combat, the spells — into a ruleset package."

One spec. Any rulebook. Zero code.

World

The world model is a spatial simulation layer — rooms, exits, containers, supports, doors. Every object knows where it is and what it contains. The server maintains a real containment graph, not a paragraph of prose it hopes the AI remembers. The world model is powered by the Inform programming language — the same engine behind decades of interactive fiction classics.

Parser commands navigate the world with real containment logic. Go north. The room is there. Take the lantern. It moves from the sarcophagus to your inventory. Open containers, lock doors, examine surroundings. Exits connect automatically in both directions. Most AI RPG tools have no spatial model — the AI pretends to remember where things are.

"Go north." "Take the lantern from the sarcophagus." "Look around." "Open the iron door." "Examine the runes carved into the altar."

Your map is real.

Novel

A Novel is your entire campaign — party, NPCs, scenes, lore, combat state, world model, story journal, factions, secrets, everything. The narrative model gives your world depth: scenes set the stage, NPCs carry personality profiles and dialogue voice, lore entries fire automatically when keywords match, factions track standing, secrets gate knowledge, vows bind quests, countdowns escalate on schedule. The story journal records decisions, moments, and consequences — a narrative memory that survives every rebuild.

A Novel lives on the server. It survives restarts, rebuilds, and session breaks. Export as JSON or Markdown. Import with merge, replace, or dry-run modes. Clone to test a story branch. Set checkpoints before pivotal moments. Undo any mutation. A Novel is not a chat log — it is a structured save file. Other tools ask the AI to remember your world. Holonovel writes it to the server — structured, queryable, permanent.

Every Novel has four badge settings. Player. Game Master. Observer. Editor. Switch between them at any time — no restart, no reload. The AI takes the opposite role automatically: when you're the player, the AI is your GM. Badge gating is not a prompt instruction. It is enforced server-side — the GM's secrets, lore entries, and narrative directives never leak to the Player badge.

"Set the scene: a flooded ossuary beneath the old cathedral. The air is thick with stale incense and something older." "A figure emerges from the shadows — Sister Mora, an acolyte of the buried order. She's terrified, not hostile." "I swear a vow to recover the Saint's Reliquary before the next full moon." "Switch to the Game Master badge. I need to set up the next scene." "Pace: I want things to move faster."

Your campaign. On the server. Forever.

Synthesis

Synthesis deepens your campaign through two source categories. Ruleset Wisdom is extracted from your rulebooks during Build — voice examples from example-of-play dialogue, lore templates from setting descriptions, action patterns from resolution sequences, narrative voice profiles from inspirational media citations. It persists as first-class server behavior — the Holodeck renders your rulebook's own genre conventions mechanically. Ruleset Wisdom survives every rebuild and synthesis reversion.

External research runs on demand — web-sourced GM advice, actual-play breakdowns, designer notes. Tagged with source URLs, confidence scores, and freshness timestamps. Every synthesis item is inert by default. The GM toggles what matters on and off at runtime. Re-running synthesis replaces inactive items while preserving everything the GM has activated. Revert synthesis removes external research — Ruleset Wisdom persists.

"Find me GM advice and play examples for running horror one-shots." "Research how other tables handle horror pacing, and tag what you find with sources."

The game evolves without losing what you've built.

How it compares

Category

What you're used to

How Holonovel differs

AI storytelling apps

Freeform AI storytellers — invent rules, forget consequences

Your rulebooks. Real dice. Real conditions. Not AI improv.

Generic LLM chat

Forgets conditions mid-combat, invents spells, drifts from the ruleset

The server remembers every rule you gave it. Deterministic dice. Conditions that don't vanish mid-fight.

First-generation rules MCP servers

Hand-built for one edition of one game. Rules lookup and nothing else.

Not locked to one system. One spec reads any rulebook — D&D 5e, Starfinder, or whatever's on your shelf.

Every tool in this space asks you to pick. Rules engines serve one system and stop there. AI storytellers improvise mechanics as they go. Holonovel doesn't pick. The server enforces every mechanic. The AI narrates. The Novel preserves everything — D&D 5e, Starfinder, or your own rulebook.

Contribute

Improve the spec

npm install && npm run check   # lint + validate + assumption audit + ambiguity
                                # scan + cross-ref check + dupe detection

Command

What it checks

npm run fmea

REQ-level failure mode and effects

npm run validate --traceability

Full REQ↔test↔workflow traceability

npm run graph-deps

REQ dependency graph (DOT/Graphviz)

Edit files in spec/. Run npm run assemble before committing. Do not edit holonovel.md directly — it is generated from spec/ source files.

Canonical origin: git.gay/flukeatzerocool/Holonovel. This GitHub repository is a push-only mirror (synced by scripts/push-pipeline.sh) that also hosts the npm and MCP-registry publish workflow (.github/workflows/publish.yml).

Guides for players, Game Masters, and builders live in the project wiki.

License: MIT. Built from: Graham Nelson's Inform (Artistic License 2.0), if-craft-corpus (CC BY 4.0), dmcp (MIT, Shawn Rushefsky), lonelog (CC BY-SA 4.0), BitD SRD (CC BY 3.0, John Harper), Ironsworn SRD (CC BY 4.0, Shawn Tomkin), Fate SRD (CC BY 3.0, Evil Hat Productions). RSS. Last updated: 2026-09-04.

Available Tools

25 tools
adventureAdventureA

Generate, load, or list adventure content. Use when: the GM wants a new adventure scaffold, a single encounter, or to load a prepared module. Do NOT use when: recording a story beat — use story (action: record).

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoAdventure module slug (load).
actionYesgenerate, generate_encounter, load, or list.
filterNoOptional genre filter (list).
targetNonovel, codex, or both (generate).
contextNoScene context (generate_encounter).
premiseNoAdventure premise (generate).

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses that the tool generates, loads, and lists content and that it is not for recording story beats, but it does not state side effects such as whether generation persists content, whether loading changes the current session/module state, or what the tool returns. These omissions are noticeable but not misleading.

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 concise and front-loaded: one sentence states the core capability, followed by conditional use and non-use guidance. Every sentence earns its place, and there is no repetition of schema details or filler.

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 multi-action nature of the tool and the 100% schema coverage, the description plus schema are largely sufficient for an agent to select and invoke the tool. The use/when-not guidance names the relevant sibling, and the schema maps parameters to actions. The only gap is the lack of return/output behavior, which is somewhat inferable for a content-generation tool. No output schema exists to fill this gap, but the omission is minor.

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?

Schema coverage is 100%, so the baseline is 3. The description adds use-case framing around the actions (scaffold, encounter, module) but does not explain parameter semantics beyond what the schema already provides. The schema already associates parameters with actions, so the description adds marginal but non-essential value here.

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 states a specific verb and resource: 'Generate, load, or list adventure content.' It also explicitly distinguishes itself from the sibling 'story' tool by saying it should not be used for recording a story beat. This gives an agent clear differentiation without needing to inspect the schema.

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

Usage Guidelines5/5

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

The description gives explicit 'Use when' conditions for each of the main actions (new scaffold, single encounter, prepared module) and an explicit 'Do NOT use when' condition, naming the correct alternative tool, story (action: record). This is exactly the kind of routing guidance an agent needs.

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

characterCharacterA

Manage player characters: create (quick or step-by-step), stage to roster, import, render a sheet, set the active entity, set personality/voice, send player signals, remove, or list roster characters. Use when: working with player characters. Do NOT use when: managing NPCs — use npc.

ParametersJSON Schema
NameRequiredDescriptionDefault
povNoPoint-of-view mode (set_active).
nameNoCharacter name; omit (create) to begin step-by-step.
seedNoDeterministic seed (create).
featsNoFeats (create).
goalsNoCharacter goals (create/personality).
valueNoFeedback text (signal).
voiceNoVoice and speech pattern (create/personality).
actionYescreate, stage, import, sheet, set_active, personality, voice, signal, remove, roster_remove, or roster_list.
formatNoOutput format (sheet).
signalNoFeedback category (signal).
skillsNoTrained skills (create).
classesNoClass levels (create).
detailsNoGrouped mechanical details (create).
speciesNoSpecies (create).
talentsNoTalents (create).
examplesNoVoice examples (voice).
entity_idNoEntity identifier (stage/sheet/set_active/personality/voice/remove).
equipmentNoStarting equipment (create).
roster_idNoRoster identifier (import/roster_remove).
backgroundNoBackstory (create/personality).
descriptionNoNarrative description (create/personality).
personalityNoGrouped personality fields (create).
stat_methodNoStat-generation method (create).
ability_scoresNoAbility scores (create).
stage_to_rosterNoAlso stage into the roster (create).

TDQS

A4/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It does disclose the behavioral repertoire, including a nuance like 'create (quick or step-by-step)' and 'send player signals'. However, it does not state consequences or side effects: whether 'remove' is permanent, what 'stage to roster' persists, or whether 'set_active' changes global state. For a tool with several mutating actions and zero annotations, this is a meaningful gap.

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 compact: one dense enumerative sentence listing the operations, followed by two one-line usage rules. Every sentence earns its place and the guidance is front-loaded. The long comma-separated action list is slightly unwieldy but appropriate for an 11-action dispatch tool.

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 high complexity — 25 parameters, 11 actions, nested objects, no annotations, and no output schema — the description covers selection and routing well but omits several things an agent needs: the roster lifecycle (what 'stage to roster' vs 'roster_remove' vs 'remove' mean), the distinction between entity_id and roster_id, and any sense of return values since no output schema exists. The 100% schema coverage mitigates this, but the description alone does not fully equip an agent to invoke correctly.

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?

Schema description coverage is 100%, so the baseline is 3. Every parameter already carries an action-context hint in the schema (e.g., 'Entity identifier (stage/sheet/set_active/personality/voice/remove)'). The description itself adds no parameter-level detail, but the schema fully compensates, so no penalty is warranted.

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 ('Manage') and resource ('player characters'), then enumerates the full operation surface: create (quick or step-by-step), stage, import, sheet, set_active, personality/voice, signal, remove, and roster listing. It explicitly differentiates from the npc sibling tool, so an agent can tell exactly what this tool is for.

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

Usage Guidelines5/5

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

Provides explicit routing guidance: 'Use when: working with player characters. Do NOT use when: managing NPCs — use npc.' This gives both a positive trigger condition and a named alternative with an exclusion, leaving nothing to inference.

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

codexCodexA

Manage the cross-Novels codex library of reusable content (NPCs, factions, rooms, spells, adventures, voice profiles). Use when: storing reusable content for later import, or enumerating/reading/deleting it. Do NOT use when: storing Novel-scoped content — use lore (action: set) or note (action: set).

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoEntry kind (for set/list/capture).
nameNoEntry name (for set).
tagsNoOptional tags (for set).
actionYesset (create/update), list, get, capture (voice profile), import (into active Novel), or delete.
contentNoEntry content (for set).
entry_idNoEntry identifier (for get/import/delete).
entity_idNoEntity whose voice to capture (for capture).
visibilityNolibrary, shared, or private (for set).
descriptionNoOptional description (for set).
update_sourceNoWhen true, update the source entity too (for capture).

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does convey that codex operates cross-Novels, that content is reusable, and that actions include storing, enumerating/reading, and deleting. However, it does not disclose side effects such as whether delete is irreversible, whether set overwrites existing entries, how capture behaves, or any permissions required. This is a meaningful gap for a tool with multiple mutating actions.

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 sentences long, with the core purpose front-loaded, followed by a concise 'Use when' and 'Do NOT use when' with alternatives. Every sentence earns its place and there is no fluff or repetition.

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?

For a tool with 10 parameters, 6 actions, and no output schema, the description covers the essential when/why and explicitly rules out the main alternative use case. It does not describe return formats or the precise runtime effects of individual actions like import or capture, which would be helpful given the absence of an output schema, but the input schema compensates with detailed parameter descriptions.

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 input schema covers all 10 parameters with descriptions, so the baseline is 3. The description adds some contextual meaning by listing content types like 'voice profiles' which maps to the capture action, but it does not provide additional param-level detail beyond the schema. Since schema coverage is 100%, the description does not need to compensate, but it also doesn't enrich param understanding.

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 purpose: 'Manage the cross-Novels codex library of reusable content' and lists concrete content types (NPCs, factions, rooms, spells, adventures, voice profiles). It explicitly distinguishes itself from siblings by stating 'Do NOT use when: storing Novel-scoped content — use lore (action: set) or note (action: set).' This gives an agent a precise understanding of the tool's scope and boundaries.

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

Usage Guidelines5/5

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

The description provides explicit 'Use when' and 'Do NOT use when' conditions. It names the alternative tools (lore and note) and the specific scenario (Novel-scoped content) that should route the agent away from codex. This is the highest level of usage guidance.

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

combatCombatA

Manage combat encounters in the active Novel. Use when: starting, advancing, ending a fight, or changing its participants. Do NOT use when: applying a status effect — use condition (action: apply).

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoOptional deterministic seed (init).
actionYesinit, advance, end, add_participant, remove_participant, or status.
dangersNoOptional non-entity combatants (init).
outcomeNoOptional text describing how combat ended (end).
participantsNoEntity identifiers participating (init).
participant_idNoEntity identifier (add_participant/remove_participant).

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits, but it only says 'manage' and gives usage conditions. It does not state whether combat state is persisted, what 'advance' changes, whether 'end' is destructive, or what side effects participants changes have.

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?

Two sentences with no filler: the first states purpose, the second provides actionable selection guidance. The front-loaded structure makes the tool's role immediately clear.

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 description covers general usage and parameter schemas are complete, but the multiple action enums—especially 'status'—are not explained, and the tool has no output schema or annotations to compensate. An agent can call it reasonably but may not understand action-specific behavior or results.

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?

Schema description coverage is 100%, so the schema already documents all six parameters. The description adds no parameter-level meaning beyond mapping actions to high-level use cases, which matches the baseline for full schema coverage.

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 a clear verb and resource ('Manage combat encounters in the active Novel') and goes beyond the title by listing concrete use cases (starting, advancing, ending, changing participants). It also differentiates from sibling 'condition' by explicitly routing status-effect application elsewhere, though it leaves the schema's 'status' action undefined, which creates mild ambiguity.

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 gives an explicit 'Use when' list and a 'Do NOT use when' rule with a named alternative tool (condition). However, it omits guidance for the schema's 'status' action, so an agent does not know when to invoke that action vs. the condition tool.

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

commandCommandA

Execute a parser command, resolve a spatial intent, or suggest actions from intent. Use when: a player or narrator takes a physical action (execute), needs the outcome of a movement without mutating state (resolve), or wants intent mapped to tool calls (suggest). Do NOT use when: the GM inspects the model directly — use world or lore.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNoexecute (parser), resolve (non-mutating intent), or suggest (intent → tool calls). Defaults to execute.
intentNoThe intent to resolve or map (resolve/suggest).
commandNoThe natural-language command (execute).
entity_idNoOptional entity context (suggest).

TDQS

A4.3/5.0
Behavior3/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It does add useful traits such as 'without mutating state' for resolve and 'intent mapped to tool calls' for suggest, but it does not disclose whether execute mutates state, what errors or outcomes occur, or what the tool returns.

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 sentences with no filler. The first sentence front-loads the mode semantics, the second gives conditional usage, and the third provides an exclusion with alternatives. Every sentence earns its place.

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 description covers when to use each mode but leaves gaps for a polymorphic tool with no output schema and no annotations: it does not state that execute requires a command, that resolve/suggest require intent, or what the tool returns. These are material omissions for an agent deciding how to invoke the tool correctly.

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?

Input schema coverage is 100%, so the baseline is 3, but the description adds mode-to-parameter relationships: command is tied to execute, intent to resolve/suggest, and entity_id to suggest. This helps agents know which parameters are relevant per action beyond what the schema states.

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 names three specific operations (execute, resolve, suggest) and ties each to a concrete resource or outcome: parser command, spatial intent outcome, and intent-to-tool-call mapping. It also explicitly distinguishes the tool from world/lore inspection with a do-not-use note, so an agent can tell it apart from siblings.

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

Usage Guidelines5/5

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

The description gives explicit conditions for each mode: physical player/narrator action for execute, non-mutating movement outcome for resolve, and intent-to-tool-call mapping for suggest. It also states when NOT to use the tool and names the alternatives (world or lore), which is strong routing guidance.

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

conditionConditionA

Manage mechanical or narrative conditions on entities. Use when: applying, removing, or listing conditions. Do NOT use when: recording damage or combat state — use combat (action: init/advance).

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesapply, remove, or list.
roundsNoOptional duration in rounds (apply).
conditionNoThe condition name (apply/remove).
entity_idNoThe entity to affect (apply/remove).

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It communicates the core operations (apply/remove/list) and notes the domain (mechanical or narrative), but does not explain side effects, persistence, return values, or permissions. The action names imply mutation, but transparency about what changes and what list returns is absent.

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 sentences, each serving a distinct purpose: defining the resource, listing when to use, and specifying when not to use with an alternative. No wasted words, and the core purpose is front-loaded.

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?

For a simple 4-param tool with 100% schema coverage and one required param, the description covers the main use cases and exclusions. However, there is no output schema and the description doesn't clarify what 'list' returns or whether entity_id is required for list vs apply/remove, leaving minor ambiguity for an agent.

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?

Schema description coverage is 100%, so the schema fully documents each parameter. The description adds minimal parameter-level meaning beyond mapping the action enum to apply/remove/list, which is already present in the schema. A baseline of 3 is appropriate since the schema does the heavy lifting.

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 states a clear resource ('conditions on entities') and a verb ('Manage'), and further narrows scope to applying, removing, or listing conditions. It explicitly contrasts with the combat tool, which helps differentiate it from the most relevant sibling, though 'Manage' is somewhat generic and doesn't distinguish from all other sibling tools.

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

Usage Guidelines5/5

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

The description provides explicit 'Use when' conditions (applying, removing, listing conditions) and an explicit 'Do NOT use when' (recording damage/combat state) with a named alternative tool and action (combat action: init/advance). This gives an agent clear decision criteria for tool selection.

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

countdownCountdownA

Manage countdown timers in the active Novel. Use when: starting, advancing, removing, or listing clocks. Do NOT use when: tracking a vow's progress — use vow (action: milestone).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoCountdown name (set/advance/remove).
typeNoround or narrative (set).
scopeNoOptional scope name (set).
ticksNoStarting ticks (set).
actionYesset, advance, remove, or list.
triggersNoOptional world-model triggers (set).
directionNoOptional direction: increment or decrement (set).
world_effectNoOptional world-model effect applied when the countdown fires (set).
on_scene_transitionNoWhen true, advance on each scene transition (set).

TDQS

A3.9/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 of behavioral disclosure, but it only says 'manage' without explaining side effects, mutability, prerequisites, or what happens when a countdown fires. Given the nested world_effect and on_scene_transition parameters in the schema, the description should disclose that setting a countdown can trigger world-model effects or advance on scene transitions.

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 two sentences with no filler. It front-loads the core purpose, then provides usage conditions and exclusions in an efficient, scannable format.

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 tool with nine parameters, a nested object, and no output schema or annotations, the description is somewhat minimal. It clearly supports tool selection and basic invocation, but it lacks context about countdown behavior, side effects, and prerequisites that would help an agent correctly invoke advanced options like world_effect or on_scene_transition.

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?

Schema description coverage is 100%, so the schema already documents all nine parameters. The description adds minor value by mapping 'starting, advancing, removing, listing' to the action enum values, but it does not provide deeper meaning 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 states the tool manages countdown timers in the active Novel and names the specific operations: starting, advancing, removing, or listing clocks. It also explicitly distinguishes itself from the sibling vow tool, so an agent can quickly identify the correct resource and action.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance for countdown operations and an explicit when-not-to-use exclusion for vow progress tracking, including the specific alternative tool and action: vow (action: milestone). This leaves no ambiguity about tool selection.

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

factionFactionA

Manage organizations in the active Novel. Use when: creating, revising, removing, or listing factions and their progress clocks. Do NOT use when: tracking a faction's territory rooms — use world (action: create_room).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFaction name (create).
goalsNoOptional goals.
actionYescreate, update, remove, or list.
resourcesNoOptional resources.
territoryNoOptional territory names.
faction_idNoFaction identifier (update/remove).
descriptionNoOptional description.

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 carries the full burden of behavioral disclosure. It does not state whether 'remove' is destructive or reversible, whether updates require an existing faction, what side effects occur, or what the response contains. The territory-room exclusion is useful but does not compensate for the missing mutation/removal semantics.

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?

Two sentences, no filler. The first sentence establishes the tool's domain, and the second packs both when-to-use and when-not-to-use into a compact, scannable form. Every clause earns its place.

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?

For a 7-parameter tool with a fully described schema and explicit sibling routing, the description is largely complete: an agent knows the domain, the supported actions, and the key exclusion. However, with no annotations and no output schema, it would benefit from stating whether remove is permanent or whether list returns all factions; the unexplained 'progress clocks' also creates a small gap against the schema.

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?

Schema description coverage is 100%, with every one of the 7 parameters already documented inline. The description adds no param-specific detail beyond what the schema provides, so it meets the baseline but does not exceed it. The mention of 'progress clocks' is not tied to any actual parameter, so it adds semantic ambiguity rather than parameter clarity.

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 states a specific verb ('Manage') and resource ('organizations in the active Novel'), then enumerates concrete actions: creating, revising, removing, or listing factions and their progress clocks. It also explicitly distinguishes itself from the sibling tool world by carving out territory-room tracking, making the tool's scope clear.

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

Usage Guidelines5/5

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

The description gives explicit 'Use when' conditions covering the supported actions, and an explicit 'Do NOT use when' with a named alternative tool and action (world, action: create_room). This is ideal routing guidance for an agent deciding between siblings.

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

helpHelp and Tool DiscoveryA

Show the available tools grouped by category (badge-filtered) or reassign a tool's category. Use when: the caller needs to discover tools, find one by keyword, or override a tool's category for a session. Do NOT use when: reading the current badge's guidance — use the badge_briefing prompt.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoOptional search term matched against tool name, description, and title.
actionNolist (default) or category (reassign a tool's category).
categoryNoNew category label, or null/empty to restore default (category).
tool_nameNoRegistered tool name to reassign (category).

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the behavioral burden. It discloses that listing is badge-filtered and that category reassignment is for a session, adding useful context beyond the schema. It doesn't detail all side effects, but the session-scoped wording covers the main mutation concern.

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 definition is compact: a one-sentence purpose statement followed by explicit use/when-not conditions. Every sentence earns its place, and the core behavior is front-loaded.

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

Completeness5/5

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

For a help/discovery tool with no required parameters and no output schema, the description plus 100% schema coverage is complete: it covers both actions, keyword search behavior, session-scoped category reassignment, and the boundary with badge_briefing. Nothing essential is missing.

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?

Schema description coverage is 100%, so every parameter is already documented. The description's 'find by keyword' and 'override a tool's category' map loosely to the query and action/category/tool_name parameters but add no new details; the baseline of 3 applies because the schema does the heavy lifting.

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 states a specific verb and resource: 'Show the available tools grouped by category (badge-filtered) or reassign a tool's category.' It names two distinct actions and distinguishes itself from the badge_briefing prompt, so an agent knows what this tool does and is not.

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

Usage Guidelines5/5

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

It provides explicit 'Use when' conditions (discover tools, find by keyword, override category) and a 'Do NOT use when' exclusion with a named alternative (badge_briefing prompt). No inference is required.

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

loreLoreA

Manage the active Novel's lore entries (world facts the narrator recalls). Use when: creating, revising, removing, toggling, grouping, suggesting, listing, exporting, or importing lore. Do NOT use when: recording a story beat — use story (action: record).

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNoLore key (set/update/remove/toggle/group/get).
dataNoJSON or Markdown lorebook data (import).
modeNodry-run, merge, or replace (import).
groupNoGroup name, or null to clear (set/update/group).
actionYesset, update, remove, toggle, group, suggest, list, get, export, import, set_secret, reveal, secret_list, or knowledge.
formatNoOptional output format (export).
stickyNoOptional sticky weight (set/update).
contentNoLore content (set/update).
priorityNoOptional priority (set/update).
triggersNoOptional recall triggers (set/update).
entity_idNoEntity to reveal to / whose knowledge to read (reveal/knowledge).
badge_scopeNogame_master or shared (set/update).
world_targetNoOptional world-model target reference (set/set_secret).

TDQS

A3.9/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 of behavioral disclosure. It explains the scope and general purpose of lore, but does not disclose side effects, reversibility, permission requirements, output behavior, or the behavior of destructive actions like 'remove' or 'import'. It also omits several actions present in the schema, such as reveal, knowledge, and secret operations, leaving those behaviors unexplained.

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 only two sentences, with the core definition front-loaded and no filler. The use-when and do-not-use guidance is compact and immediately actionable. Every sentence earns its place.

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 tool with 13 parameters and no output schema or annotations, more context would be valuable. The description clearly defines lore and provides a use-case boundary against 'story', but it does not explain the behaviors of lesser-known actions like reveal, knowledge, secret operations, or what import modes imply. It is adequate for selection but not fully complete for confident invocation of every action.

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?

All 13 parameters have descriptions in the input schema, so the description does not need to repeat param-level meaning. The tool description adds little beyond what the schema already says, but with 100% schema coverage the baseline score of 3 is appropriate.

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 names a specific verb ('Manage'), a specific resource ('the active Novel's lore entries'), and clarifies what lore is ('world facts the narrator recalls'). It also distinguishes itself from a close sibling by saying the story-beat case should use 'story (action: record)', which helps an agent understand exactly what this tool is for.

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

Usage Guidelines5/5

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

The description explicitly lists when to use the tool: 'creating, revising, removing, toggling, grouping, suggesting, listing, exporting, or importing lore.' It also provides a clear exclusion: 'Do NOT use when: recording a story beat — use story (action: record).' This gives an agent direct routing guidance rather than leaving the decision to inference.

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

noteNoteA

Manage Novel-scoped scratch notes, badge-scoped to game_master (default), player, or shared. Use when: storing scratch state the caller will reuse. Do NOT use when: recording durable world facts — use lore (action: set).

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNoThe note key (set/remove/set_server/remove_server).
actionYesset, remove, list, set_server, remove_server, or list_server.
contentNoThe note content (set/set_server).
badge_scopeNogame_master, player, or shared (set).
narrative_tagNoOptional narrative tag (set_server).

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries the behavioral burden. It discloses that notes are ephemeral 'scratch state' scoped per badge with a default, and warns against storing durable facts. It does not fully explain the server-scoped variants or operation side effects, keeping it just shy of complete.

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?

Two efficient sentences: the first front-loads scope and default, the second gives usage rules and the alternative. There is no filler, repetition, or unnecessary detail.

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?

For a tool with six actions and two scoping models, the description covers purpose, scope, default, and the key alternative. The only notable gap is that 'server' actions and narrative_tag are left entirely to the schema, but the schema descriptors are explicit enough to fill that gap.

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 already provides 100% parameter coverage, so the description only needs to add value. It adds the default for badge_scope (game_master) and clarifies the scratch/badge-scoped semantics, which goes beyond the enum 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?

States a specific resource ('Novel-scoped scratch notes') plus scoping behavior ('badge-scoped to game_master (default), player, or shared'), and explicitly contrasts it with lore for durable facts. This clearly differentiates the tool from its siblings.

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

Usage Guidelines5/5

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

Provides explicit 'Use when' and 'Do NOT use when' conditions, and names the exact alternative ('use lore (action: set)'). An agent can decide immediately whether this is the right tool.

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

novelNovelA

Manage Novel save files: create, resume, switch, end, export, import, rename, describe, list, archive, unarchive, info, genre, clone, save_context, get_context, or checkpoint. Use when: handling a campaign's lifecycle, interchange, or return points. Do NOT use when: managing content inside the Novel — use the entity tools (npc, lore, faction, vow, story, note, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNoExported Novel JSON (import).
modeNodry-run, merge, or replace (import).
nameNoNovel name (create).
slugNoNovel slug (resume/switch/archive/unarchive/info).
genreNoGenre tag (create/genre).
labelNoCheckpoint label (checkpoint_set/list/restore/remove).
scopeNoExport scope (export).
actionYescreate, resume, switch, end, export, import, rename, description, list, archive, unarchive, info, genre, clone, save_context, get_context, checkpoint_set, checkpoint_list, checkpoint_restore, or checkpoint_remove.
detailNoReturn full metadata (list).
filterNoactive, archived, or all (list).
formatNoOutput format (export).
strictNoFail on any cross-reference mismatch (import).
rulesetNoRuleset slug (create).
new_nameNoName for the copy (clone).
new_slugNoNew slug (rename).
descriptionNoDescription (create/description).
source_slugNoNovel to copy (clone).
player_goalsNoPlayer goals (save_context).
current_sceneNoCurrent-scene summary (save_context).
codex_adventureNoCodex adventure to seed from (create).
long_term_plansNoLong-term plans (save_context).
short_term_plansNoShort-term plans (save_context).
immediate_situationNoImmediate situation (save_context).
pending_player_actionNoPending player action (save_context).

TDQS

A3.8/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 of behavioral disclosure. It refers only to high-level 'Manage Novel save files' and lists actions without explaining consequences of state-changing operations like end, archive, import replace, or checkpoint_remove. The description does not disclose what happens to save data, whether operations are reversible, or what mutations occur.

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 front-loaded with the tool's purpose and action list, followed by crisp routing guidance in the second sentence. The enumerated action list is somewhat redundant with the schema enum, but it helps the agent quickly grasp scope without opening the schema.

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 24-parameter dispatcher with no output schema, the description provides enough context for tool selection and sibling disambiguation. However, it does not explain per-action effects or return behavior, which would be valuable given the breadth of actions and absence of annotations.

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?

Schema description coverage is 100%, so all 24 parameters already have meaningful descriptions in the input schema. The tool description adds no parameter-level detail, but per the calibration baseline this is acceptable since the schema does the heavy lifting.

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 manages Novel save files and enumerates its actions, from lifecycle operations to checkpoints. It distinguishes the tool from sibling entity tools by explicitly saying not to use it for content inside the Novel. Minor wording inconsistency ('describe' vs schema's 'description') does not undermine the overall clarity.

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

Usage Guidelines5/5

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

The description gives an explicit 'Use when' condition—handling a campaign's lifecycle, interchange, or return points—and an explicit 'Do NOT use when' condition with named alternatives (npc, lore, faction, vow, story, note). This leaves little ambiguity about when to select this tool versus its siblings.

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

npcNPCA

Manage non-player characters in the active Novel. Use when: introducing, revising, removing, listing, or reading NPCs. Do NOT use when: managing player characters — use character (action: create/import/sheet).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNPC name (create).
goalsNoOptional goals.
actionYescreate, update, remove, list, or get.
npc_idNoNPC identifier (update/remove/get).
locationNoOptional location.
descriptionNoOptional description.
dispositionNoOptional disposition.
ruleset_referenceNoOptional ruleset stat-block reference (create).

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description must carry behavioral detail. It discloses the operational scope (active Novel) and the five operation kinds, including a destructive 'remove'. However, it does not state that remove is irreversible, whether updates merge or replace fields, or any side effects or authorization requirements, so it only partially meets the burden.

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?

Two sentences, front-loaded with the core purpose and scoped to the active Novel, followed by a precise exclusion. Every word earns its place with no redundancy.

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 core context: what it manages, when to use it, and the key sibling alternative, and the schema covers all parameter semantics. Without an output schema or annotations it could additionally explain response/return behavior, but for a CRUD tool the provided context is largely sufficient.

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?

Schema description coverage is 100%, so the schema fully documents all eight parameters. The description adds no parameter-specific detail beyond naming use cases, so baseline 3 applies.

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 states 'Manage non-player characters in the active Novel' with a specific resource and scope, and directly contrasts with the character tool for player characters. The listed use cases (introducing, revising, removing, listing, reading) map cleanly to the five actions, leaving no ambiguity about what the tool does.

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

Usage Guidelines5/5

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

Explicit 'Use when' and 'Do NOT use when' guidance names the exact alternative (character with action create/import/sheet) and the distinguishing condition (player characters vs NPCs). This is exemplary routing guidance.

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

redoRedoA

Re-apply the most recently undone mutation, restoring the per-badge snapshot that undo removed. Use when: an undo was issued by mistake and the change should be restored. Do NOT use when: reverting a new change — use undo.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses non-obvious statefulness: the operation only applies to the most recently undone mutation and restores a per-badge snapshot, which is the inverse of undo's behavior. It could mention the empty-redo failure case, but for a zero-parameter utility the disclosure is strong.

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 sentences, each earning its place: the operative statement, the when-to-use condition, and the explicit exclusion with its alternative. The core verb and object are front-loaded with no filler.

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 low complexity (zero parameters, no output schema, no nested objects), the description covers purpose, stateful scoping, and sibling routing completely. The only omission is an explicit failure-mode statement for when there is nothing to redo, which is minor against the simple surface area.

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 tool takes zero parameters with 100% schema coverage (empty schema), so the baseline is 4 and there is nothing the description must document. The phrase 'per-badge snapshot' usefully clarifies the implicit scope of the operation even though no parameters exist.

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?

States a specific verb and resource: 'Re-apply the most recently undone mutation.' Adding 'restoring the per-badge snapshot that undo removed' pins down the exact semantics, and the explicit contrast with the sibling tool `undo` makes it unambiguous which operation is which.

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

Usage Guidelines5/5

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

Provides explicit when/when-not guidance: 'Use when: an undo was issued by mistake... Do NOT use when: reverting a new change — use undo.' This directly names the alternative tool and the condition that selects it, leaving nothing to inference.

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

relationshipRelationshipA

Manage directed relationships between entities, NPCs, or factions. Use when: setting or reading how two parties relate. Do NOT use when: tracking faction progress — use faction (action: update).

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoRelationship type (set).
valueNoOptional relationship strength (set).
actionYesset or get.
entity_aNoThe source entity (set).
entity_bNoThe target entity (set).
entity_idNoEntity whose relationships to list (get).
descriptionNoOptional description (set).

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral disclosure burden. It does communicate the core distinction between 'set' and 'get' and the directed nature of the relationship. However, it does not mention overwrite semantics, return behavior for get, or any side effects beyond the implied mutation from 'set'.

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 very concise: one sentence for the core function, one for when to use, and one for when not to use. It front-loads the essential purpose and wastes no 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 the 7 parameters and no output schema, the description is adequate for selecting and invoking the tool: it defines the domain, the actions, and the exclusion case. It does not describe what a 'get' returns, but the schema's entity_id parameter partially covers that, and the tool is relatively simple.

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 already has 100% parameter descriptions, so the baseline is 3. The description adds useful domain context ('directed', 'entities, NPCs, or factions') but does not meaningfully elaborate on parameter meaning beyond what the schema states.

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 ('Manage') and resource ('directed relationships between entities, NPCs, or factions'), and it distinguishes itself from the similarly named faction tool by explicitly stating what it is not for. An agent can clearly tell this tool handles pairwise relationship queries/updates rather than faction progress.

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

Usage Guidelines5/5

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

The description gives explicit guidance: use when 'setting or reading how two parties relate' and do not use when 'tracking faction progress', directing to faction (action: update). This clearly states the intended conditions and provides an alternative.

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

respondRespond to Workflow DecisionA

Answer a pending workflow decision, atomically draining it and persisting the outcome to the Novel. Use when: the server emitted a [NEED_INPUT] prompt and the caller must choose. Do NOT use when: no decision is pending — use set_badge or a state tool instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
optionYesThe chosen option, or 'cancel' to abort the workflow and restore its snapshot.
decisionYesThe canonical decision text the workflow is waiting on.

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of disclosing side effects. It does so by stating the operation 'atomically drain[s]' the pending decision and 'persist[s] the outcome to the Novel.' This meaningfully describes the mutation behavior beyond the plain meaning of 'answer.'

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 sentences, each earning its place: the core action, the exact when-to-use condition, and the explicit when-not-to-use with alternative. It is front-loaded with the primary purpose and wastes no words.

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

Completeness5/5

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

For a simple two-parameter tool with no output schema, the description provides everything an agent needs: the triggering condition, the behavior, the atomic side effect, the persistence target, and a clear disambiguation from alternatives. No critical context is missing.

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?

Schema description coverage is 100%, so the baseline is 3. The description does not add parameter-level detail beyond the schema; the schema already explains 'decision' as canonical waiting text and 'option' as the choice or 'cancel' to abort and restore the snapshot.

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 states a specific verb and resource: 'Answer a pending workflow decision', and adds unique behavioral details ('atomically draining it and persisting the outcome to the Novel'). It is clearly distinguishable from sibling tools like set_badge or state manipulation tools.

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

Usage Guidelines5/5

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

Explicitly provides the trigger condition: 'the server emitted a [NEED_INPUT] prompt and the caller must choose.' It also gives a direct exclusion with an alternative: 'Do NOT use when: no decision is pending — use set_badge or a state tool instead.' This fully guides tool selection.

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

rulesetRulesetB

Manage ruleset packages and lookup. Use when: searching a bound ruleset's index, or installing, removing, listing, or binding a ruleset. Do NOT use when: the Novel is ruleset-free — use command (action: suggest) or session (action: health).

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoDeterministic seed (roll).
slugNoRuleset slug (install/remove/bind).
indexNoSearch index (install).
modelNoExtraction model (install).
queryNoSearch query (search).
tableNoGeneration table to roll on (roll).
toolsNoTool schemas (install).
actionYessearch, install, remove, list, bind, or roll.
promptsNoPrompts (install).
manifestNoPackage manifest (install).
resourcesNoResources (install).
max_resultsNoMaximum results (search).

TDQS

B3.4/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 of behavioral disclosure. It does not mention that install/remove/bind mutate state, what happens with a ruleset-free novel beyond not using this tool, or any failure/return behavior. The description only provides usage context, not operational 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 two tightly structured sentences with purpose front-loaded and a clear Use/Do NOT use parallel. Every sentence earns its place and there is no filler, though the noun 'lookup' is slightly awkward.

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 six actions, twelve parameters, no annotations, and no output schema, this description is too thin. It entirely omits the 'roll' action and gives no indication of return values, state-changing behavior, or per-action semantics. The schema helps with parameters but cannot compensate for missing action coverage.

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 covers all 12 parameters with descriptions, so the baseline is 3. The description adds minimal context about searching a bound ruleset's index, but it does not provide meaningful parameter-level meaning beyond what the schema already supplies.

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 states the tool manages ruleset packages and explicitly lists search, install, remove, list, and bind as use cases, while also distinguishing it from command and session in the negative case. However, it omits the 'roll' action from the action enum and uses the slightly vague phrase 'lookup', so it is not fully precise.

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 gives clear 'Use when' and 'Do NOT use when' guidance, including specific alternatives (command action: suggest, session action: health). It is explicit for the listed cases, but incomplete because 'roll' is not mentioned as an eligible use, leaving a gap in routing.

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

sceneSceneA

Manage the active scene and its narrative framing. Use when: setting scene state (description, location, type), the narrative directive, party presence, AI autonomy, or when offering choices or resolving an oracle roll. Do NOT use when: recording a story beat — use story (action: record).

ParametersJSON Schema
NameRequiredDescriptionDefault
beatNoStory-beat tag (set).
seedNoDeterministic seed (oracle).
levelNoAutonomy level (autonomy).
actionYesset, directive, presence, autonomy, choices, or oracle.
promptNoChoice prompt (choices).
safetyNoSafety tier (autonomy).
choicesNoList of choices (choices).
contextNoContext for the choice (choices).
locationNoScene location (set).
questionNoQuestion to resolve (oracle).
directiveNoNarrative directive (directive).
atmosphereNoAtmosphere (set).
creativityNoCreativity (autonomy).
entity_idsNoEntities present (presence).
likelihoodNoLikelihood tier (oracle).
scene_typeNoScene-type tag or array (set).
descriptionNoScene description (set).
time_of_dayNoTime of day (set).
confirmationNoConfirmation mode (autonomy).
fast_forwardNoNarrative fast-forward (set).
allow_freeformNoAllow free-form response (choices).
adventure_sceneNoAdventure-scene waypoint anchor; empty or null clears (set).
skip_transition_hookNoSkip the scene-transition hook (set).

TDQS

A4.2/5.0
Behavior3/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 of behavioral disclosure. It does state that the tool manages the active scene and can perform mutations (set, directive, presence, autonomy, choices, oracle). However, it does not disclose side effects, whether existing scene data gets overwritten, or what the agent can expect back from oracle resolution. The mutation is implied but not explicitly characterized.

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 sentences, front-loaded with the core purpose, followed by scoped use cases and a clear exclusion. Every sentence earns its place, there is no fluff, and the structure makes scanning easy.

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 tool is complex (23 parameters, 7 enums, nested objects, no output schema), and the description provides a strong high-level orientation: what it does, when to use it, and when not to. It does not explain behaviors like fast_forward or autonomy levels, but those are documented in the schema. The only notable omission is that it doesn't explicitly state that the 'action' field selects one of these operations, though the 'or' phrasing implies it.

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?

Schema coverage is 100%, and every parameter already has a description with the action category in parentheses (e.g., '(set)', '(oracle)'). The description groups these categories into use cases like 'setting scene state (description, location, type)', but adds no new syntax, value constraints, or behavioral meaning beyond what the schema already documents. Baseline 3 is appropriate.

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 ('Manage') and resource ('the active scene and its narrative framing'), then enumerates the concrete actions it supports: setting scene state, narrative directive, party presence, AI autonomy, choices, and oracle rolls. It explicitly differentiates from the sibling 'story' tool by stating when NOT to use it ('recording a story beat — use story (action: record)').

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

Usage Guidelines5/5

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

The description states 'Use when' with specific scenarios mapped to the tool's action types, and 'Do NOT use when' with the exact alternative tool and call ('story (action: record)'). This gives an agent clear routing criteria both for and against this tool.

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

sessionSessionA

Manage session-level surfaces and diagnostics. Use when: recapping recent activity (recap), setting output verbosity (verbosity), reordering briefing sections (briefing_order), compressing the audit log (compress), or reporting server health (health). Do NOT use when: recording story content — use story (action: record).

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNonormal or terse (verbosity).
actionYesrecap, verbosity, briefing_order, compress, or health.
sectionsNoOrdered list of briefing sections (briefing_order).
max_entriesNoMaximum audit entries (compress).

TDQS

A4.4/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral burden. It does identify the high-level behaviors (recap, verbosity, briefing_order, compress, health) and even implies that compress affects the audit log. However, it does not disclose side effects, reversibility, permissions, or output behavior, particularly for 'compress' which likely mutates or truncates 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 two sentences, front-loads the core purpose, uses a compact 'Use when' list, and closes with a clear negative routing rule. Every sentence contributes information and there is no redundant or filler text.

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 is sufficiently complete for selecting and invoking the tool: it covers all actions, the use-case context, and the main alternative tool. Schema descriptions cover all parameters. The main gap is that conditional parameter requirements per action (e.g., mode needed for verbosity, sections for briefing_order) are not explicitly stated, though they can be inferred from the description and schema.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful context by mapping each action to its purpose: 'setting output verbosity (verbosity)', 'reordering briefing sections (briefing_order)', 'compressing the audit log (compress)'. This clarifies how the action parameter relates to mode, sections, and max_entries beyond the schema's terse descriptions.

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 ('Manage') with a clear resource ('session-level surfaces and diagnostics') and enumerates all five actions with their purposes. It explicitly distinguishes itself from the story tool via the 'Do NOT use when... use story (action: record)' directive.

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

Usage Guidelines5/5

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

The description gives an explicit 'Use when' list tying each action to its intended scenario, and an explicit 'Do NOT use when' exclusion with the correct alternative tool. This leaves little ambiguity about when to select this tool over siblings.

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

set_badgeSet Active BadgeA

Switch the active badge to player, game_master, observer, or none (Editor), gating tool access server-side for the session; always callable. Use when: entering the story, spectating, or stepping away to edit. Do NOT use when: answering a pending workflow decision — use respond.

ParametersJSON Schema
NameRequiredDescriptionDefault
badgeYesThe badge to activate: player, game_master, observer, or none (Editor).

TDQS

A4.5/5.0
Behavior4/5

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

No annotations exist, so the description carries the full burden. It discloses that the tool is 'always callable' and that it gates tool access server-side for the session, revealing its mechanism and scope. It doesn't discuss side effects or reversibility, but for a simple session badge switch this is sufficient 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?

The description is compact: the core action and enum are front-loaded in the first sentence, followed by concise use/do-not-use guidance. Every sentence adds value, and there is no redundant repetition of schema details.

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

Completeness5/5

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

For a one-parameter enum tool with no output schema, the description fully covers the purpose, the value set, when to use it, when not to use it, and a key behavioral caveat ('always callable'). Nothing an agent needs to invoke it correctly is missing.

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?

Schema description coverage is 100%, and the schema already documents the single parameter with the same enum values and prose. The tool description merely repeats the enum list ('player, game_master, observer, or none (Editor)') without adding new parameter-level meaning, so the baseline 3 applies.

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 states a specific verb ('Switch') and resource ('active badge'), enumerates all four possible values, and adds the functional outcome ('gating tool access server-side for the session'). This clearly differentiates it from sibling tools like respond or set_active_entity.

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

Usage Guidelines5/5

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

Provides explicit use cases ('entering the story, spectating, or stepping away to edit') and explicitly names a when-not-to-use scenario with the correct alternative ('answering a pending workflow decision — use respond'). This gives an agent unambiguous routing guidance.

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

storyStoryA

Manage the story journal — typed narrative memories (decision, moment, revelation, bond, consequence). Use when: recording, editing, removing, listing, or promoting story beats. Do NOT use when: recording a durable world fact — use lore (action: set).

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNoOptional lore key (promote).
typeNoStory entry type (record/update).
entryNoStory entry text (record/update).
indexNoStory entry index (update/remove/promote).
limitNoOptional page size (list).
actionYesrecord, update, remove, list, or promote.
filterNoOptional type filter (list).
offsetNoOptional pagination offset (list).

TDQS

A4/5.0
Behavior2/5

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

No annotations are present, so the description carries the full burden of disclosing side effects. It names the operations but does not explain what update/remove permanently change, what 'promote' does to an entry, or whether operations are reversible. 'Manage' only implies mutation rather than describing consequences.

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?

Two purposeful sentences: the first defines the resource and content types, the second gives explicit use and non-use guidance. No filler and no repetition of schema details.

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?

For a multi-action CRUD tool with no annotations or output schema, the description plus the fully documented schema covers selection and basic invocation well. The only real gap is operational semantics of promote/remove, which the description leaves to inference, so it is not a perfect 5.

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?

Schema coverage is 100% and each parameter already has a description noting the action it applies to (e.g., 'Story entry text (record/update)', 'Optional page size (list)'). The description adds domain framing but no parameter-level detail beyond the schema, so baseline 3 is appropriate.

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 opens with a specific verb-resource pair ('Manage the story journal'), enumerates the allowed entry types, and lists the five operations. It also differentiates itself from the lore tool by stating the domain boundary, so an agent can distinguish story from siblings like lore and note.

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

Usage Guidelines5/5

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

Explicit 'Use when' conditions cover all five supported actions, and the 'Do NOT use when' clause names the exact alternative (lore, action: set) for durable world facts. This is textbook when-to-use routing.

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

synthesisSynthesisA

Manage synthesis content (voice examples, lore templates, action patterns, and other enrichment). Use when: running, reverting, listing, activating, deactivating, toggling, or player-authoring synthesis items. Do NOT use when: browsing the codex — use codex (action: list).

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNoItem key (activate: number; player_add/player_remove: string).
forceNoRe-run even if unchanged (run).
actionYesrun, revert, list, activate, deactivate, toggle, toggle_action, player_add, player_remove, or player_list.
detailNoReturn full entries (list).
moduleNoSynthesis module (activate/deactivate/toggle/player_*/list).
contentNoItem content (player_add).
enabledNoEnable or disable (toggle).
triggersNoRecall triggers (player_add).
badge_scopeNoshared or player (player_add).

TDQS

A4/5.0
Behavior2/5

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

There are no annotations, so the description carries the full burden of disclosing side effects. It only says 'manage' and lists action names; it does not state whether run mutates persistent state, whether revert is safe or idempotent, or what player_add/player_emove actually change.

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?

Two dense sentences front-load the purpose and then give use/non-use routing. There is no filler, repetition, or irrelevant context.

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?

For a complex 9-parameter, 10-action tool, the description plus the fully documented schema provides enough to select and invoke the tool. It lacks explicit output-shape and side-effect notes, but those are partly covered by the schema's 'detail' and action descriptions, making this a minor gap rather than a blocking omission.

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?

Schema description coverage is 100%, so the baseline applies. The description adds no parameter-level meaning, but each of the nine properties is already documented in the input schema, so this is adequate.

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 identifies a specific resource ('synthesis content'), a management verb, and the content subtypes it covers ('voice examples, lore templates, action patterns, and other enrichment'). It also explicitly excludes the codex sibling, so an agent can distinguish this tool from alternatives.

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

Usage Guidelines5/5

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

The description provides explicit 'Use when' and 'Do NOT use when' conditions, listing the relevant actions and naming the alternative for codex browsing. This gives the agent direct, actionable selection criteria.

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

undoUndoA

Undo the most recent state mutation, restoring the prior per-badge snapshot. Use when: reverting a mistaken or unwanted change. Do NOT use when: re-applying an undone change — use redo.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the core behavior: restoring a prior per-badge snapshot and affecting only the most recent state mutation. It does not describe edge cases like attempting undo when there is nothing to undo, but the essential behavior is transparent.

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?

Two sentences with clear front-loading of the action and effect, followed by compact usage rules. Every sentence earns its place.

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

Completeness5/5

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

For a zero-parameter, no-output-schema tool, the description fully covers what the tool does, when to use it, and when to choose an alternative. No critical information is missing.

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 tool has zero parameters, so the baseline is 4. The description needs no parameter-specific detail and does not attempt to invent any.

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 identifies the action ('undo') and the specific resource ('most recent state mutation', 'prior per-badge snapshot'). It also explicitly distinguishes the tool from its sibling 'redo' by stating what it is not for.

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

Usage Guidelines5/5

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

Provides explicit when-to-use guidance ('reverting a mistaken or unwanted change') and explicit when-not-to-use guidance ('re-applying an undone change — use redo'). It names the alternative tool, leaving no ambiguity.

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

vowVowA

Track narrative vows, quests, and obligations with milestones. Use when: setting, advancing, resolving, forsaking, or listing vows. Do NOT use when: starting a clock timer — use countdown (action: set).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoVow name (set).
scopeNogm, shared, faction, or party (set).
actionYesset, milestone, resolve, forsake, or list.
reasonNoThe reason for abandoning (forsake).
outcomeNoThe resolution outcome (resolve).
partiesNoParties bound by the vow (set).
vow_nameNoVow name (milestone/resolve/forsake).
difficultyNotroublesome, dangerous, formidable, extreme, or epic (set).
descriptionNoVow description (set).
consequencesNoOptional consequences (resolve).

TDQS

A4.4/5.0
Behavior3/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 does describe the lifecycle actions (set/milestone/resolve/forsake/list) and clarifies that it is not for clocks, which is useful. However, it does not disclose side effects such as whether forsake is destructive, whether changes persist, or what the list action returns, so it is adequate but not rich.

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 short sentences with no wasted words. Core purpose is front-loaded, followed by use-when and the explicit exclusion. Every sentence earns its place.

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 10 parameters and no annotations/output schema, the description gives a solid operational overview and redirection, and the schema covers parameter details. The main missing piece is output/effect behavior — no description of what resolve/forsake returns or how a list is presented — so it is quite complete but not fully self-contained.

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?

Schema description coverage is 100%, so the schema already documents every parameter. The description still adds semantic value by framing 'milestone' as advancing, 'forsake' as abandoning, and by enumerating the action categories in plain language, which helps map parameters to operations. It does not add format-level details, but the baseline is already high due full 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?

Description opens with a specific verb and resource: 'Track narrative vows, quests, and obligations with milestones.' It enumerates the exact operations (setting, advancing, resolving, forsaking, listing), so an agent can understand both the purpose and scope. It also distinguishes itself from countdown, making it identifiable among siblings.

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

Usage Guidelines5/5

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

Contains explicit use-when guidance: 'Use when: setting, advancing, resolving, forsaking, or listing vows.' It also gives a direct negative rule: 'Do NOT use when: starting a clock timer — use countdown (action: set).' This clearly routes to the correct sibling and specifies the alternative action.

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

worldWorldA

Manage the world model — rooms, things, and exits. Use when: creating, updating, removing, or bulk-converting locations and objects. Do NOT use when: navigating the world — use command (action: execute) or command (action: resolve).

ParametersJSON Schema
NameRequiredDescriptionDefault
litNoWhen true the thing is lit (create_thing/update_thing).
kindNoOptional thing kind (create_thing).
nameNoRoom/thing name (create/update/remove).
roomNoSource room (create_exit/remove_exit).
fixedNoWhen true the thing cannot be taken (create_thing/update_thing).
actionYescreate_room, update_room, remove_room, create_thing, update_thing, remove_thing, create_exit, remove_exit, or convert.
edibleNoWhen true the thing can be eaten (create_thing/update_thing).
lockedNoWhen true the thing starts locked (create_thing/update_thing).
room_aNoSource room (create_exit).
room_bNoDestination room (create_exit).
sourceNoHybrid world-model source text (convert).
locationNoOptional containing room or thing (create_thing/update_thing).
lockableNoWhen true the thing can be locked (create_thing/update_thing).
openableNoWhen true the thing can be opened (create_thing/update_thing).
readableNoWhen true the thing can be read (create_thing/update_thing).
wearableNoWhen true the thing can be worn (create_thing/update_thing).
climbableNoWhen true the thing can be climbed (create_thing/update_thing).
directionNoDirection (create_exit/remove_exit).
drinkableNoWhen true the thing can be drunk (create_thing/update_thing).
enterableNoWhen true the thing can be entered (create_thing/update_thing).
read_textNoText revealed when the thing is read (create_thing/update_thing).
switchableNoWhen true the thing can be switched (create_thing/update_thing).
descriptionNoOptional description (create/update).
switched_onNoWhen true the thing is switched on (create_thing/update_thing).
transparentNoWhen true the thing is transparent (create_thing/update_thing).
location_typeNoWhere the thing is placed (create_thing).

TDQS

A3.9/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 of behavioral disclosure. It only says 'Manage' and does not disclose that remove_room, remove_thing, and remove_exit are destructive, whether changes persist, or what convert does to the existing world model. This is a significant transparency gap for a mutation tool.

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 compact and front-loaded, stating scope first, then usage conditions, then an exclusion with a concrete alternative. Every sentence earns its place with no filler.

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 description gives solid selection guidance and the schema handles per-parameter semantics, but with no annotations and no output schema, the tool-level behavior is incomplete. An agent still lacks information about return values, error conditions, persistence, and the semantics of the convert action beyond a vague 'bulk-converting' reference.

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?

Schema description coverage is 100%, so the input schema already documents every parameter and its applicable action(s). The description adds no param-level meaning beyond grouping parameters conceptually by rooms, things, and exits, so baseline 3 is appropriate.

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 specifies a clear resource (the world model) and explicit actions (creating, updating, removing, or bulk-converting rooms, things, and exits). It distinguishes itself from the navigation-focused sibling command tool by explicitly naming what it is not for.

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

Usage Guidelines5/5

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

Provides explicit 'Use when' and 'Do NOT use when' guidance. It names the alternative tool and sub-actions (command action: execute / resolve), so an agent knows exactly when to route elsewhere.

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. Dates show when Glama detected each change.

  1. 142 tool updates
    • Removedactivate_synthesis_item
    • Removedadd_combat_participant
    • Removedadvance_combat
    • Removedadvance_countdown
    • Addedadventure
    • Removedapply_condition
    • Removedarchive_novel
    • Removedask_oracle
    • Removedbind_novel_ruleset
    • Addedcharacter
    • Removedcharacter_sheet
    • Removedclone_novel
    • Addedcodex
    • Removedcodex_capture
    • Removedcodex_import
    • Removedcodex_list
    • Removedcodex_set
    • Addedcombat
    • Changedcommand5 fields changed
      • addedInput schema / properties / action
        Added value: +{
        +  "description": "execute (parser), resolve (non-mutating intent), or suggest (intent → tool calls). Defaults to execute.",
        +  "enum": [
        +    "execute",
        +    "resolve",
        +    "suggest"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / command / description
        Previous value: -"The natural-language command, e.g. 'go north', 'look', 'take torch', 'open door'."New value: +"The natural-language command (execute)."
      • addedInput schema / properties / entity_id
        Added value: +{
        +  "description": "Optional entity context (suggest).",
        +  "type": "string"
        +}
      • addedInput schema / properties / intent
        Added value: +{
        +  "description": "The intent to resolve or map (resolve/suggest).",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "command"
        -]
    • Removedcompact_audit_log
    • Removedcompress_audit
    • Addedcondition
    • Removedconvert_source
    • Addedcountdown
    • Removedcreate_character
    • Removedcreate_exit
    • Removedcreate_faction
    • Removedcreate_novel
    • Removedcreate_npc
    • Removedcreate_room
    • Removedcreate_thing
    • Removeddeactivate_synthesis_item
    • Removedend_combat
    • Removedend_novel
    • Removedexport_lorebook
    • Removedexport_novel
    • Addedfaction
    • Removedforsake_vow
    • Removedgenerate_adventure
    • Removedgenerate_encounter
    • Removedget_knowledge
    • Removedget_pause_context
    • Removedget_relationships
    • Changedhelp3 fields changed
      • addedInput schema / properties / action
        Added value: +{
        +  "description": "list (default) or category (reassign a tool's category).",
        +  "enum": [
        +    "list",
        +    "category"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / category
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "New category label, or null/empty to restore default (category)."
        +}
      • addedInput schema / properties / tool_name
        Added value: +{
        +  "description": "Registered tool name to reassign (category).",
        +  "type": "string"
        +}
    • Removedimport_character
    • Removedimport_lorebook
    • Removedimport_novel
    • Removedinit_combat
    • Removedinstall_ruleset
    • Removedlist_adventures
    • Removedlist_checkpoints
    • Removedlist_notes
    • Removedlist_novels
    • Removedlist_roster_characters
    • Removedlist_rulesets
    • Removedlist_server_notes
    • Removedlist_stories
    • Removedlist_synthesis_items
    • Removedload_adventure
    • Addedlore
    • Removedmark_milestone
    • Addednote
    • Addednovel
    • Removednovel_info
    • Addednpc
    • Removedplayer_list_synthesis
    • Removedplayer_remove_synthesis
    • Removedplayer_signal
    • Removedplayer_synthesize
    • Removedpresent_choices
    • Removedpromote_story_to_lore
    • Removedrecord_story
    • Addedrelationship
    • Removedremove_checkpoint
    • Removedremove_combat_participant
    • Removedremove_condition
    • Removedremove_countdown
    • Removedremove_entity
    • Removedremove_exit
    • Removedremove_faction
    • Removedremove_lore_entry
    • Removedremove_note
    • Removedremove_npc
    • Removedremove_room
    • Removedremove_roster_character
    • Removedremove_ruleset
    • Removedremove_server_note
    • Removedremove_story
    • Removedremove_thing
    • Removedrename_novel
    • Removedresolve_intent
    • Removedresolve_vow
    • Removedrestore_checkpoint
    • Removedresume_novel
    • Removedreveal_secret
    • Removedrevert_synthesis
    • Removedroll_on_table
    • Addedruleset
    • Addedscene
    • Removedsearch_rules
    • Addedsession
    • Removedsession_recap
    • Removedset_active_entity
    • Removedset_autonomy
    • Removedset_briefing_order
    • Removedset_checkpoint
    • Removedset_countdown
    • Removedset_genre
    • Removedset_help_category
    • Removedset_lore_entry
    • Removedset_lore_group
    • Removedset_narrative_directive
    • Removedset_note
    • Removedset_party_presence
    • Removedset_pause_context
    • Removedset_personality
    • Removedset_relationship
    • Removedset_scene_state
    • Removedset_secret
    • Removedset_server_note
    • Removedset_verbosity
    • Removedset_voice_examples
    • Removedset_vow
    • Removedspec_health
    • Removedstage_character
    • Addedstory
    • Removedsuggest_actions
    • Removedsuggest_lore
    • Removedswitch_novel
    • Addedsynthesis
    • Removedsynthesize
    • Removedtoggle_action_patterns
    • Removedtoggle_lore_entry
    • Removedtoggle_synthesis_module
    • Removedunarchive_novel
    • Removedupdate_faction
    • Removedupdate_lore_entry
    • Removedupdate_novel_description
    • Removedupdate_npc
    • Removedupdate_story
    • Addedvow
    • Addedworld
  2. 127 tool updatesv1.0.0
    • First observedactivate_synthesis_item
    • First observedadd_combat_participant
    • First observedadvance_combat
    • First observedadvance_countdown
    • First observedapply_condition
    • First observedarchive_novel
    • First observedask_oracle
    • First observedbind_novel_ruleset
    • First observedcharacter_sheet
    • First observedclone_novel
    • First observedcodex_capture
    • First observedcodex_import
    • First observedcodex_list
    • First observedcodex_set
    • First observedcommand
    • First observedcompact_audit_log
    • First observedcompress_audit
    • First observedconvert_source
    • First observedcreate_character
    • First observedcreate_exit
    • First observedcreate_faction
    • First observedcreate_novel
    • First observedcreate_npc
    • First observedcreate_room
    • First observedcreate_thing
    • First observeddeactivate_synthesis_item
    • First observedend_combat
    • First observedend_novel
    • First observedexport_lorebook
    • First observedexport_novel
    • First observedforsake_vow
    • First observedgenerate_adventure
    • First observedgenerate_encounter
    • First observedget_knowledge
    • First observedget_pause_context
    • First observedget_relationships
    • First observedhelp
    • First observedimport_character
    • First observedimport_lorebook
    • First observedimport_novel
    • First observedinit_combat
    • First observedinstall_ruleset
    • First observedlist_adventures
    • First observedlist_checkpoints
    • First observedlist_notes
    • First observedlist_novels
    • First observedlist_roster_characters
    • First observedlist_rulesets
    • First observedlist_server_notes
    • First observedlist_stories
    • First observedlist_synthesis_items
    • First observedload_adventure
    • First observedmark_milestone
    • First observednovel_info
    • First observedplayer_list_synthesis
    • First observedplayer_remove_synthesis
    • First observedplayer_signal
    • First observedplayer_synthesize
    • First observedpresent_choices
    • First observedpromote_story_to_lore
    • First observedrecord_story
    • First observedredo
    • First observedremove_checkpoint
    • First observedremove_combat_participant
    • First observedremove_condition
    • First observedremove_countdown
    • First observedremove_entity
    • First observedremove_exit
    • First observedremove_faction
    • First observedremove_lore_entry
    • First observedremove_note
    • First observedremove_npc
    • First observedremove_room
    • First observedremove_roster_character
    • First observedremove_ruleset
    • First observedremove_server_note
    • First observedremove_story
    • First observedremove_thing
    • First observedrename_novel
    • First observedresolve_intent
    • First observedresolve_vow
    • First observedrespond
    • First observedrestore_checkpoint
    • First observedresume_novel
    • First observedreveal_secret
    • First observedrevert_synthesis
    • First observedroll_on_table
    • First observedsearch_rules
    • First observedsession_recap
    • First observedset_active_entity
    • First observedset_autonomy
    • First observedset_badge
    • First observedset_briefing_order
    • First observedset_checkpoint
    • First observedset_countdown
    • First observedset_genre
    • First observedset_help_category
    • First observedset_lore_entry
    • First observedset_lore_group
    • First observedset_narrative_directive
    • First observedset_note
    • First observedset_party_presence
    • First observedset_pause_context
    • First observedset_personality
    • First observedset_relationship
    • First observedset_scene_state
    • First observedset_secret
    • First observedset_server_note
    • First observedset_verbosity
    • First observedset_voice_examples
    • First observedset_vow
    • First observedspec_health
    • First observedstage_character
    • First observedsuggest_actions
    • First observedsuggest_lore
    • First observedswitch_novel
    • First observedsynthesize
    • First observedtoggle_action_patterns
    • First observedtoggle_lore_entry
    • First observedtoggle_synthesis_module
    • First observedunarchive_novel
    • First observedundo
    • First observedupdate_faction
    • First observedupdate_lore_entry
    • First observedupdate_novel_description
    • First observedupdate_npc
    • First observedupdate_story

TDQS

A4.1/5.0
Disambiguation5/5

Every tool maps to a distinct resource or workflow—character vs npc, lore vs story vs note, countdown vs vow, combat vs condition—and descriptions explicitly disambiguate with 'Use when' and 'Do NOT use when' guidance. There is little risk of misselection despite overlapping vocabulary.

Naming Consistency4/5

Most domain tools follow a predictable single-noun resource pattern (npc, lore, faction, story), which is clean and searchable. The utility verbs (respond, undo, redo, help) and snake_case set_badge break that pattern, making it mostly but not perfectly consistent.

Tool Count4/5

25 tools is at the upper edge of the heavy band, but the server covers a complete narrative-game stack: campaign files, characters, world, combat, factions, vows, journals, rulesets, codex, and synthesis. Each tool has a coherent subdomain, so the count feels justified rather than padded.

Completeness5/5

The surface covers full lifecycle management for the domain: Novel saves/checkpoints/export, entity CRUD with roster/import, world modeling, combat/condition state, narrative journaling, lore, factions, relationships, vows, countdowns, sessions, adventures, rulesets, codex, and synthesis. There are no obvious critical dead ends; the main risk is complexity, not missing functionality.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables creation and management of structured game worlds for text adventures and RPGs with character creation, world generation, and natural language interaction through AI integration.
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to act as RPG Game Masters by managing campaign state including characters, inventory, quests, and logs through MCP tools. Supports campaign mutations and provides both MCP and HTTP API access to RPG session data.
    2
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/flukeatzerocool/holonovel'

If you have feedback or need assistance with the MCP directory API, please join our Discord server