Skip to main content
Glama

Holonovel

The Holodeck for your rulebooks — rules enforced, worlds remembered.

holonovel MCP server

M8ven Live Monitored

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 24+ 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 server's ruleset install directory and the running server registers it. That directory lives inside the server's state directory, which defaults to a per-user data location outside the project tree (or .holonovel-state/ when the server runs outside one). 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 in that state directory, outside the server tree — updating holonovel never touches them.

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. Multi-column pages are read in the right order, and tables split across page breaks are reassembled. Scanned pages fall back to OCR. The output is structurally sound — headings resolve and references trace.

"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, indexed Markdown ready for the build.

Build

Build reads that Markdown and extracts the mechanics. Dice procedures, combat systems, spell catalogues, equipment tables, condition tracks — modeled elements become tools, resources, or prompts in a declarative ruleset package, while anything that can't be modeled stays searchable. Guidance prose becomes narrative material. The discovery engine reads the source in chunks, measures extraction confidence, and works until the mechanical sections are accounted for. 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 reads any rulebook, and the build produces zero hand-written 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. Its conventions are drawn from Inform, the interactive-fiction language behind decades of text-adventure 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.

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

The map is real state, not narration.

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."

The campaign persists on the server as structured, queryable state.

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.

Canonical origin: git.gay/flukeatzerocool/Holonovel. 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-10-03.

Available Tools

33 tools
manage_adventureAdventure ManagementA
Destructive

Generate, load, or list adventure content. Mutating actions persist to the Novel and are audited; read-only actions do not mutate state. Revert the most recent mutation with manage_history (action: undo). generate defaults target to novel when one is active; a !force prefix bypasses the guard. 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 manage_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).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare destructive=true, non-idempotent, not read-only. The description adds real value beyond them: mutating actions 'persist to the Novel and are audited', read-only actions do not mutate, and the undo route is specified. It stops short of describing what persisted state looks like or what 'audited' implies operationally.

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?

Front-loaded with the core capability, then structured into mutation semantics, revert path, and explicit use/do-not-use guidance. Dense but each clause carries a distinct rule; no obvious filler, though it is longer than strictly necessary.

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?

With an output schema present, return values need not be explained. The description covers mutation persistence, undo, default target behavior, the force bypass, and sibling routing — everything an agent needs to invoke this multi-action 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?

Schema coverage is 100%, so baseline is 3, but the description adds meaning the schema lacks: generate defaults target to novel when one is active, and a '!force' prefix bypasses the guard. Those are behavioral rules for parameters not encoded anywhere in 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?

Opens with a specific verb set and resource ('Generate, load, or list adventure content') and immediately scopes each action into mutating vs read-only. It also names the siblings it is distinct from (manage_history, manage_story), so an agent can route without opening other schemas.

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 'Use when' (GM wants a scaffold, single encounter, or to load a module) and 'Do NOT use when' (recording a story beat → manage_story). It also names the revert path via manage_history, giving complete routing guidance.

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

manage_agentAgent Task ManagementA
Destructive

Manage durable NPC/agent tasks and their action lifecycle. Mutating actions (create, start, advance, complete, fail, cancel) persist to the Novel and are audited; list/get are read-only. Revert the most recent mutation with manage_history (action: undo); terminal tasks are immutable. Use when: creating a task (create), starting it (start), logging an action (advance), settling it (complete/fail/cancel), or inspecting tasks (list/get). Do NOT use when: surfacing an advisory suggestion — use manage_scene (action: oracle); managing NPC identity — use manage_npc.

ParametersJSON Schema
NameRequiredDescriptionDefault
goalNoTask goal text (create).
actionYescreate, list, get, start, advance, complete, fail, or cancel.
subjectNoEntity or NPC that owns the task (create/list).
task_idNoTask id (get/start/advance/complete/fail/cancel).
autonomyNoadvisory, prompt, or auto (create; default the TTRPG_AGENT_AUTONOMY setting).
descriptionNoAction description (advance).
source_goalNoOriginating goal-pursuit suggestion (create).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=true), the description discloses that mutations persist to the Novel and are audited, that list/get are read-only, that the most recent mutation is revertible via manage_history undo, and that terminal tasks are immutable. These are non-obvious behavioral traits that an agent could not derive from the annotation flags alone.

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 opening sentence front-loads the core purpose, followed by mutability/audit facts, the undo path, and a compact when/when-not block. Every sentence carries distinct information with no filler, despite covering a large action surface.

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 7-parameter mutation tool with an output schema present, the description covers purpose, mutability, audit/persistence, undo, immutability constraints, and sibling routing. Return values need not be explained because the output schema exists, so nothing an agent needs to invoke this correctly 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?

Schema coverage is 100%, so the baseline is 3, but the description adds lifecycle meaning to the action parameter by glossing how each value is used ('logging an action (advance)', 'settling it (complete/fail/cancel)'). This clarifies the operational intent of the enum beyond the bare schema listing, though it does not add syntax or format detail for the other parameters.

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 ('Manage durable NPC/agent tasks and their action lifecycle') and enumerates the concrete operations (create, start, advance, complete, fail, cancel, list, get). It is clearly distinguishable from siblings like manage_scene, manage_npc, and manage_history, which are each named with a disambiguating condition.

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 has explicit 'Use when' and 'Do NOT use when' sections, and routes the agent to alternatives with the exact call syntax: manage_history (action: undo), manage_scene (action: oracle), manage_npc. Both the positive triggers and the exclusions are spelled out, 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.

manage_beliefBelief ManagementA
Destructive

Manage per-entity evidence and reconciled belief stances — one entity's subjective epistemic state, distinct from objective truth, shared lore, and raw observation. Mutating actions (admit, retract, reconcile) persist to the Novel and are audited; list/get/evidence/conflicts are read-only. Revert the most recent mutation with manage_history (action: undo). Use when: recording what an entity has learned or believes (admit), suppressing a piece of evidence (retract), inspecting current stances (list), reading one question (get), listing supporting evidence (evidence), finding unresolved contradictions (conflicts), or forcing recomputation (reconcile). Do NOT use when: recording objective world truth — use manage_causal or manage_world; recording shared lore — use manage_lore; recording raw observation — use manage_perception; recording consumed reference material — use manage_corpus.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYeslist, get, evidence, admit, retract, conflicts, or reconcile.
objectNoProposition object (admit).
sourceNoSource key used to correlate duplicate evidence (admit; default the active badge).
statusNoactive, unresolved, or suppressed (admit; default active).
weightNoEvidence support weight 0..1 (admit; default 1).
subjectNoProposition subject (admit).
polarityNopositive or negative (admit).
questionNoBelief question key, or subject|predicate|object (get/evidence).
entity_idNoEntity whose beliefs are queried or mutated.
predicateNoProposition predicate (admit).
evidence_idNoEvidence record id (retract).
source_ordinalNoContributing event-log ordinal (admit; default the latest event ordinal).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds action-level transparency: mutating actions admit, retract, and reconcile persist to the Novel and are audited, while list/get/evidence/conflicts are read-only. It also notes that the most recent mutation can be reverted with manage_history. It stops short of detailing permissions or exact undo scope, but goes well beyond the annotations.

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

Conciseness5/5

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

The description is dense but well-structured: a definition, a mutating/read-only split, a revert note, and then explicitly labeled 'Use when' and 'Do NOT use when' sections. Every sentence serves routing or selection, and the most important distinctions are 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?

Given a 12-parameter tool with an output schema and rich annotations, the description covers purpose, action semantics, mutability, alternates, and a revert path. Output values are left to the output schema, and safety hints are covered by annotations. Nothing critical for correct invocation 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 schema already documents all 12 parameters in detail. The description adds meaning for the action enum by mapping each action to an intent (e.g., admit for recording what an entity believes, retract for suppressing evidence), but does not elaborate on the other parameters beyond what the schema provides. 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 states a specific verb and resource, defines the domain as per-entity subjective epistemic state, and explicitly distinguishes it from objective truth, shared lore, raw observation, and consumed reference material. It names the sibling tools for each contrasting domain, making it easy to route correctly.

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' guidance mapping each action to a concrete scenario and a 'Do NOT use when' section that names alternatives (manage_causal, manage_world, manage_lore, manage_perception, manage_corpus). The inclusion of the revert path via manage_history further clarifies the lifecycle.

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

manage_causalCausal Transition ManagementA
Destructive

Validate objective-state transitions against committed history — what the world accepts as true, independent of any entity's belief. Proposals are recorded in a ledger before admission; a proposal is not truth until admitted, and refused proposals are preserved as evidence. Mutating actions (propose, admit, reject, ingress) persist to the Novel and are audited; list/state are read-only. origin_source is honored only by propose; ingress always records machine. Revert the most recent mutation with manage_history (action: undo). Use when: proposing an objective change (propose), admitting or refusing a recorded proposal (admit/reject), submitting machine-originated state (ingress), inspecting the transition ledger (list), or reading admitted objective state (state). Do NOT use when: recording what an entity believes — use manage_belief; recording raw observation — use manage_perception; editing the world model directly — use manage_world.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNoState key within the entity.
fromNoExpected prior value (proposal).
scopeNoScope coordinate (default the active Novel slug).
valueNoProposed value.
actionYespropose, admit, reject, list, state, or ingress.
domainNolocation or scalar (default location).
entityNoEntity whose objective state is proposed.
proposal_idNoRecorded proposal id (admit/reject).
origin_sourceNonarrative, machine, or ruleset (proposal).
source_ordinalNoContributing event-log ordinal (default the latest event).
expected_versionNoOptimistic version guard (proposal).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already flag this as a destructive, non-idempotent, non-read-only tool, and the description adds substantial context beyond that: proposals are ledgered before admission, unadmitted proposals are not truth, refused proposals are preserved as evidence, mutations are audited, and list/state are read-only. It also discloses the origin_source-vs-ingress override rule and points to manage_history (action: undo) for reverting the most recent mutation.

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?

It is a dense block rather than a short one, but it is front-loaded with the core semantic and each sentence carries distinct information (ledger behavior, action routing, exclusions, revert path). Slightly long, but no sentence is filler.

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 an 11-parameter, six-action mutation tool with an output schema, the description covers the mutable lifecycle, read-only exceptions, action selection, and revert path. Nothing an agent needs to invoke it correctly appears to be 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?

Schema coverage is 100%, so the baseline is 3, but the description adds real semantics the schema does not: origin_source is honored only by propose, ingress always records machine-originated state, and undo lives in a separate tool. That said, several parameters (key, scope, from, expected_version, source_ordinal) get no added meaning.

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+resource ('Validate objective-state transitions against committed history') and frames the tool's core semantic — objective truth vs. belief — which immediately separates it from manage_belief and manage_perception. It also enumerates the six actions so the agent knows the tool's full surface without opening 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?

Explicit 'Use when' clauses map each action (propose/admit/reject/ingress/list/state) to a scenario, and a 'Do NOT use when' section names three concrete alternatives (manage_belief, manage_perception, manage_world) with the condition that selects each. This is about as good as routing guidance gets.

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

manage_characterPlayer Character ManagementA
Destructive

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. Mutating actions persist to the Novel and are audited; read-only actions do not mutate state. Revert the most recent mutation with manage_history (action: undo). The personality{} object aliases description/voice/background/goals, and details{} aliases ability_scores/skills/feats/talents/equipment; a top-level value overrides its grouped alias. Use when: working with player characters. Do NOT use when: managing NPCs — use manage_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).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation profile is partly covered. The description adds real value beyond that: it separates mutating actions (which persist to the Novel and are audited) from read-only actions, and points to the undo route. It does not describe failure modes or per-action side effects, so it stops short of a 5.

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?

Given 25 parameters and 11 actions, the description is compact and front-loads the action inventory before the behavioral and aliasing notes. Every sentence carries weight (scope, audit/undo, alias precedence, sibling exclusion). Minor density in the alias sentence, but 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?

For a large multi-action tool with an output schema already present, the description covers what the schema cannot: the read/write split, audit behavior, undo routing, alias precedence, and the sibling boundary. It is close to complete; per-action return shapes are rightly deferred to the output 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 baseline is 3, but the description earns extra credit by explaining the aliasing rules: personality{} aliases description/voice/background/goals and details{} aliases ability_scores/skills/feats/talents/equipment, with a top-level value overriding its grouped alias. That precedence rule is not evident from the schema alone and materially affects how an agent should build the call.

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 ('Manage player characters') and then enumerates the full action surface — create, stage, import, sheet, set_active, personality, voice, signal, remove, roster_list. It explicitly differentiates from the closest sibling ('Do NOT use when: managing NPCs — use manage_npc'), so an agent can route correctly without opening 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?

It gives an explicit when-to-use ('working with player characters'), an explicit when-not ('managing NPCs'), names the alternative sibling, and additionally documents the undo path via manage_history (action: undo). Nothing about selection is left to inference.

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

manage_codexCodex Library ManagementA
Destructive

Manage the cross-Novels codex library of reusable content (NPCs, factions, rooms, spells, adventures, voice profiles). Mutating actions persist to the Novel and are audited; read-only actions do not mutate state. Revert the most recent mutation with manage_history (action: undo). capture's source_id falls back to entity_id; update_source requires artifact provenance. Use when: storing reusable content for later import, or enumerating/reading/deleting it. Do NOT use when: storing Novel-scoped content — use manage_lore (action: set) or manage_note (action: set).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoEntry identifier or array of identifiers (for import/get/delete).
kindNoEntry kind (for set/list/capture).
nameNoEntry name (for set).
tagsNoOptional tags (for set).
actionYesset (create/update), list, get, capture (Novel artifact per kind), import (into active Novel), or delete.
contentNoEntry content (for set).
entry_idNoEntry identifier (for get/import/delete); alias of `id`.
entity_idNoEntity whose voice to capture (for capture, voice_profile kind).
source_idNoNovel artifact key/name/entity id to capture (for capture). Defaults per kind.
visibilityNolibrary, shared, or private (for set).
descriptionNoOptional description (for set).
update_sourceNoWhen true, update the source Codex entry in place (for capture).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and non-idempotent, so safety is partly covered. The description adds valuable context beyond annotations: that mutations persist to the Novel and are audited while reads do not mutate, and that update_source requires artifact provenance and capture's source_id fallback. It could still note irreversibility of delete more explicitly, but the audit/persistence details are 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?

Dense but every clause earns its place: purpose, mutation/audit semantics, undo route, parameter fallbacks, and explicit when/when-not with alternatives. Front-loaded with the core purpose before routing guidance.

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?

An output schema exists so return values need not be explained. Combined with annotations covering safety and the description covering scoping, persistence/audit, undo, parameter fallbacks, and sibling routing, an agent has everything needed to call this 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?

Schema coverage is 100% so the baseline is 3, but the description adds genuine semantics beyond the schema: capture's source_id fallback to entity_id, and update_source requiring artifact provenance. These are behavioral constraints on parameters not spelled out in the schema 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?

States a specific verb and resource: managing a cross-Novels codex library of reusable content, and enumerates the kinds (NPCs, factions, rooms, spells, adventures, voice profiles). It distinguishes itself from siblings by explicitly naming manage_lore and manage_note as the route for Novel-scoped content.

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 (storing reusable content for later import, enumerating/reading/deleting) and when-not-to-use with concrete alternatives (manage_lore action:set, manage_note action:set). It also routes undo to manage_history and states provenance requirements for update_source.

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

manage_combatCombat Encounter ManagementA
Destructive

Manage combat encounters in the active Novel. Mutating actions persist to the Novel and are audited; read-only actions do not mutate state. Revert the most recent mutation with manage_history (action: undo). init's seed only reorders the danger set; participants keep their given order. Use when: starting, advancing, ending a fight, or changing its participants. Do NOT use when: applying a status effect — use manage_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).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare mutating, destructive, non-idempotent behavior; the description adds that mutations persist and are audited, and points to manage_history for undo. It also clarifies init seed semantics. This goes beyond annotations, though it doesn't detail all side effects (e.g., what data is lost on end).

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?

Front-loaded with purpose, then usage guidance and caveats. Sentences are dense but each earns its place; no obvious filler, though it could be slightly tighter.

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

Completeness4/5

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

Given the tool's complexity (6 params, multiple actions, destructive mutations) and the presence of an output schema, the description covers key operational context: audit trail, undo path, seed semantics, and action scope. It leaves minor gaps like all action prerequisites or full side effects, but is largely complete.

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 parameters are fully documented in the schema. The description adds behavioral nuance for seed and participant order but does not elaborate on outcome or participant_id beyond what the schema states. Baseline 3 is appropriate.

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

Purpose4/5

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

Description states a clear verb+resource ('Manage combat encounters in the active Novel') and mentions the mutating vs read-only distinction. It does not explicitly differentiate from sibling manage_condition beyond a do-not-use note, which is helpful but partial.

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 lists when to use ('starting, advancing, ending a fight, or changing its participants') and when NOT to use ('applying a status effect — use manage_condition (action: apply)'). Names the alternative tool directly.

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

manage_conditionCondition ManagementA
Destructive

Manage mechanical or narrative conditions on entities. Mutating actions persist to the Novel and are audited; read-only actions do not mutate state. Revert the most recent mutation with manage_history (action: undo). Use when: applying, removing, or listing conditions. Do NOT use when: recording damage or combat state — use manage_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).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds real context: mutating actions persist to the Novel and are audited, read-only actions do not mutate state, and the undo path is manage_history. It stops short of stating what removal actually destroys or whether undo is time-limited, so a 4 rather than 5.

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?

Four tightly packed sentences, each carrying distinct information (action scope, persistence/audit behavior, undo route, routing exclusions). The use/when-not framing is front-loaded and scannable.

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?

With annotations covering the safety profile and an output schema present, the description only needs to cover routing and behavioral quirks — which it does, including the audit/persistence trait and the undo alternative. 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%, so the schema already documents action, condition, entity_id, and rounds. The description maps actions to use cases (apply/remove/list) but adds no syntax or format detail beyond the schema, making the baseline 3 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?

States a specific verb (manage) plus resource (mechanical/narrative conditions on entities) and explicitly contrasts itself with manage_combat for damage/combat state. An agent can distinguish this from its many siblings without opening 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?

Provides explicit when-to-use ('applying, removing, or listing conditions') and when-not ('recording damage or combat state — use manage_combat'), naming the alternative tool and action. It also routes undo to manage_history. This is the full when/when-not/alternative pattern.

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

manage_corpusKnowledge Corpus ManagementA
Destructive

Manage cold reference material and per-entity knowledge acquisition — what an entity has consumed from a registered document, distinct from belief and from lore. Registered documents create no knowledge until consumed; consumption records exactly what an entity acquired. Mutation (register, route, grant, deny, access, consume) persists to the Novel and is audited; list/get/acquisitions are read-only. Revert the most recent mutation with manage_history (action: undo). Use when: registering reference material (register), assigning its knowledge domain (route), opening or closing access (grant/deny), setting an entity's knowledge-domain profile (access), reading a document to acquire it (consume), or inspecting what an entity has acquired (acquisitions). Do NOT use when: recording beliefs — use manage_belief; recording shared world facts — use manage_lore; registering a reusable gameplay artifact — use manage_codex.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoDocument reference text (register).
modeNoread, research, taught, or import (consume; default read).
titleNoDocument title (register).
actionYesregister, list, get, route, grant, deny, access, consume, or acquisitions.
deniesNoEntity ids explicitly denied access (register).
domainNoKnowledge domain (register/route/list).
grantsNoEntity ids explicitly granted access (register).
domainsNoKnowledge domains the entity may access (access).
entity_idNoEntity acquiring or inspected (consume/acquisitions/access/grant/deny).
document_idNoCorpus document id (get/route/grant/deny/consume).
access_publicNoWhether every entity may consume it (register; default false).
access_domainsNoKnowledge domains granted access (register).
source_profileNoTrusted source profile the domain is routed from (register; default manual).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only give a tool-wide destructiveHint/openWorldHint, but the description adds action-level resolution: register/route/grant/deny/access/consume persist to the Novel and are audited, while list/get/acquisitions are read-only. That action-level write/read split and the audit disclosure are exactly the context annotations cannot express.

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?

Information-dense and front-loaded, with the core definition first, then mutation/read split, then use/don't-use routing. It is a single long semicolon-chained paragraph, which slightly taxes scanning for the action-to-purpose mapping.

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?

Given an output schema exists (so return values need not be explained), the description covers concept, per-action semantics, write/audit behavior, undo path, and sibling exclusions. Nothing needed to call a 13-param, enum-heavy tool correctly 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?

Schema coverage is 100%, so the baseline is 3; the description goes further by tying enum action values to their parameter roles (register, route, grant/deny, access, consume, acquisitions), which helps select the right action and its companion fields. It does not add syntax or format details for individual fields 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?

Names the resource (cold reference material / corpus documents) and the operations (register, route, grant/deny, access, consume, acquisitions), and crisply defines the concept: consumption records what an entity acquired, 'distinct from belief and from lore.' An agent can distinguish this from manage_belief/manage_lore/manage_codex without opening any 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?

Provides an explicit 'Use when' clause mapping each action to its intent, a 'Do NOT use when' clause naming three sibling alternatives, and routes undo to manage_history (action: undo). When-to-use, when-not-to-use, and alternatives are all present.

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

manage_countdownCountdown ManagerA
Destructive

Manage countdown timers in the active Novel. Mutating actions persist to the Novel and are audited; read-only actions do not mutate state. Revert the most recent mutation with manage_history (action: undo). set's direction shifts NPC dispositions only when scope is also set. Use when: starting, advancing, removing, or listing clocks. Do NOT use when: tracking a vow's progress — use manage_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).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and non-idempotent, but the description adds real context beyond them: mutating actions persist to the Novel and are audited while read-only actions do not mutate state, mutation is reversible via manage_history (action: undo), and set's direction only shifts NPC dispositions when scope is also set. That is a conditional side-effect rule and a recovery path an agent could not infer from structured fields.

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?

Four tightly packed sentences, zero filler, with the mutating/read-only distinction and the sibling exclusion front-loaded before the conditional detail. Each sentence adds information.

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?

With an output schema present and 100% schema coverage, the description need not restate returns or parameters. It covers scope of operation, mutation semantics, sibling disambiguation, and the undo path — everything needed to call this 9-parameter 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?

Schema description coverage is 100%, so the schema carries the per-parameter burden and baseline is 3. The description adds a genuine cross-parameter rule ('direction shifts NPC dispositions only when scope is also set') that the schema does not express, exceeding baseline.

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+resource ('Manage countdown timers in the active Novel') and explicitly distinguishes itself from the closest sibling ('use manage_vow (action: milestone)' for vows). An agent can route correctly without opening either 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?

Explicit 'Use when: starting, advancing, removing, or listing clocks' and 'Do NOT use when: tracking a vow's progress' with the named alternative. Both the positive and negative conditions are stated.

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

manage_factionFaction ManagementA
Destructive

Manage organizations in the active Novel. Mutating actions persist to the Novel and are audited; read-only actions do not mutate state. Revert the most recent mutation with manage_history (action: undo). Use when: creating, revising, removing, or listing factions and their progress clocks. Do NOT use when: tracking a faction's territory rooms — use manage_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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, but the description adds materially: mutating actions persist to the Novel and are audited, read-only actions do not mutate state, and the most recent mutation is revertible via manage_history. What's missing is any statement of permission/auth requirements or confirmation semantics for destructive removes.

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 dense sentences with zero filler: scope first, then mutation/audit behavior plus the undo path, then the use/don't-use routing. Every clause earns its place and the most decision-relevant information 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?

With an output schema present, return values need not be described. The description covers scope, mutation semantics, audit/persistence, revert path, and the sibling-boundary exclusion, leaving nothing an agent needs to select or invoke the tool 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% across all 7 parameters, including the action enum, so the schema carries parameter meaning and the baseline is 3. The description adds only indirect hints (factions and 'their progress clocks'), and notably 'progress clocks' is not represented in any parameter, so it does not extend parameter 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?

States a specific resource (factions/organizations in the active Novel) and enumerates the concrete operations via the 'Use when' clause (creating, revising, removing, listing factions and their progress clocks). It distinguishes itself from sibling manage_world explicitly, so an agent can route without opening schemas.

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 both inclusion ('Use when: creating, revising, removing, or listing factions') and exclusion ('Do NOT use when: tracking a faction's territory rooms — use manage_world (action: create_room)'), naming the alternative tool and action. It even routes undo operations to manage_history (action: undo), which is explicit alternative guidance.

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

manage_historyUndo and Redo HistoryA
Destructive

Undo or redo the most recent state mutation, restoring the prior per-badge snapshot. Undo reverts a mistaken or unwanted change; redo re-applies the most recently undone change. Both directions mutate Novel state and persist immediately (readOnlyHint false). Use when: reverting a mistaken change (action: undo) or restoring an undone change (action: redo). Do NOT use when: the target change is not the most recent mutation — use the entity tool that made it (e.g. manage_lore, manage_story, manage_world).

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNoWhich direction to move: undo (revert the last mutation) or redo (re-apply the last undone mutation). Defaults to undo.

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=false, so the safety profile is covered. The description still adds real value beyond them: both directions mutate and persist immediately, and the operation restores a per-badge snapshot limited to the most recent mutation. It does not explain the irreversibility/state-loss implied by destructiveHint, so not a 5.

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?

Front-loaded with the core verb and scope, and the when/when-not guidance is compact. However, the undo/redo definitions are stated twice (general sentence and again in the 'Use when' clause), and the '(readOnlyHint false)' parenthetical repeats the annotation verbatim, adding mild redundancy.

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?

An output schema exists, so return values need no explanation. For a single-enum-parameter tool, the description covers purpose, both action semantics, mutation/persistence behavior, and sibling routing — everything an agent needs to invoke it 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% with a single enum parameter, so the schema already documents undo/redo fully. The description restates the same meanings ('undo reverts a mistaken or unwanted change; redo re-applies the most recently undone change') without adding syntax or format detail, matching the baseline for high-coverage schemas.

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 specific verbs (undo/redo) plus the exact resource and scope: 'the most recent state mutation, restoring the prior per-badge snapshot.' This distinguishes it from all entity-management siblings, which the description names explicitly.

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' conditions mapped to each action value, plus a 'Do NOT use when' exclusion that routes the agent to the correct alternative tools (manage_lore, manage_story, manage_world) when the target change is not the most recent mutation.

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

manage_identityIdentity ManagementA
Destructive

Manage a roster character's durable identity: staged candidates, accepted facets, and the versioned compiled kernel. Mutation (stage, accept, reject, bootstrap) persists the roster and is audited; list/snapshot are read-only. accept's perspective defaults to the candidate's stored perspective. Revert the most recent mutation with manage_history (action: undo); the compiled kernel is versioned. Use when: importing or authoring identity material (stage), accepting or rejecting a candidate (accept/reject), seeding from a character card (bootstrap), inspecting candidates and facets (list), or reading the compiled kernel (snapshot). Do NOT use when: recording what a character knows or believes — use manage_belief; editing narrative personality — use manage_character (action: personality).

ParametersJSON Schema
NameRequiredDescriptionDefault
cardNoCharacter-card fields to stage (bootstrap).
facetNoIdentity facet key, e.g. name or calling (stage).
valueNoIdentity facet value (stage).
actionYesstage, accept, reject, list, snapshot, or bootstrap.
sourceNoProvenance label for the candidate (stage; default manual).
stabilityNostructural, constitutional, core, or developmental (stage; default core).
perspectiveNoself, biographical, public_reputation, secret, or unknown (stage/accept; default self).
candidate_idNoIdentity candidate id (accept/reject).
character_idYesRoster character id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.6/5.0
Behavior4/5

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

Annotations declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, and the description adds value beyond them: mutations persist the roster and are audited, list/snapshot are read-only, and the most recent mutation is revertible via manage_history (action: undo) with a versioned compiled kernel. It does not spell out precisely what a reject/overwrite destroys, if anything, which is the only remaining 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?

Front-loaded with the core semantics (what it manages, which actions mutate), then usage routing, then exclusions. Some redundancy in restating the action list twice, but every sentence carries routing or behavioral information.

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 9-parameter, multi-action, nested-object tool with an output schema already present, the description covers the safety profile, persistence/audit behavior, undo path, and per-action routing. Nothing an agent needs in order to call it correctly is missing, and return values are appropriately left to the output 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 meaning the schema doesn't: accept's perspective defaults to the candidate's stored perspective, and it groups parameters by the action that consumes them (stage vs accept/reject). This helps an agent pick the right action-parameter combination.

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) and resource (a roster character's durable identity), then enumerates the concrete sub-operations (stage, accept, reject, bootstrap, list, snapshot). It explicitly distinguishes itself from sibling tools manage_belief and manage_character, so an agent can route correctly without opening any 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?

It contains explicit 'Use when' clauses mapping each action to a scenario (importing/authoring, accepting/rejecting, seeding from a card, inspecting, reading the kernel) and explicit 'Do NOT use when' clauses naming the alternative tools (manage_belief for knowledge/beliefs, manage_character action: personality for narrative personality). This is the full when/when-not/alternatives triad.

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

manage_knowledgeDerived KnowledgeA
Destructive

Manage derived, in-memory knowledge over Novel sources: a semantic index for advisory text ranking and a typed knowledge graph. index_build and graph_build overwrite the prior in-memory projection and are audited; the Novel file stays authoritative and read-only actions never mutate Novel state. Use when: building or rebuilding the index (index_build) or the graph (graph_build); checking staleness (index_status/graph_status); listing indexed items (index_list); ranking candidates against a query (index_search); reading index relations (index_relations); reading the whole graph (graph_get), its nodes or edges (graph_nodes/graph_edges), or a node's neighbors (graph_neighbors). Do NOT use when: searching a bound ruleset's index — use manage_ruleset (action: search); recording knowledge — use manage_lore or manage_corpus; recording a relationship — use manage_relationship.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum candidates to return (index_search; default 5).
queryNoQuery text to rank candidates against (index_search).
actionYesindex_* actions operate the semantic index; graph_* actions operate the knowledge graph.
item_idNoIndexed item id to filter relations (index_relations).
node_idNoGraph node id (graph_neighbors).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=false, and the description reinforces this with the key operational fact that index_build/graph_build overwrite the prior in-memory projection. It adds genuinely non-derivable context: builds are audited, the Novel file remains authoritative, and read-only actions never mutate Novel state. It stops short of describing lifetime/eviction of the in-memory projection or any permission requirements, so it is strong but not exhaustive.

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?

Purpose is front-loaded, then the when/when-not blocks, with no filler sentences; every clause maps to an action or an alternative. It is dense and readable, though the run-on action list would scan faster as a bulleted or structured breakdown.

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?

With an output schema present, return values need not be explained, and annotations already carry the safety profile. For an 11-action multiplexed tool the description supplies purpose, per-action intent, mutation semantics, authoritative-source rules and sibling alternatives — nothing an agent needs in order to pick the right action 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?

Schema description coverage is 100%, so the baseline is 3, but the description goes beyond the schema's terse 'index_* actions operate the semantic index' by explaining what each action actually does, which is the primary discriminator among the five parameters. It does not add format or constraint detail for limit, query, item_id or node_id beyond the schema, so it earns 4 rather than 5.

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+resource ('Manage derived, in-memory knowledge over Novel sources') and immediately decomposes it into two concrete subsystems: a semantic index for advisory text ranking and a typed knowledge graph. The per-action enumeration and named sibling redirects make it distinguishable from manage_lore, manage_corpus and manage_ruleset without opening any 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?

Contains an explicit 'Use when:' clause mapping each of the 11 actions to its task (build, staleness check, list, rank, read relations/graph/nodes/edges/neighbors) plus a 'Do NOT use when:' clause with three named alternatives and the exact alternate action (manage_ruleset action: search). This is the rare definition that routes rather than merely describes.

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

manage_loreLore ManagementA
Destructive

Manage the active Novel's lore entries — shared, durable world facts every caller recalls. Mutating actions persist to the Novel and are audited; read-only actions do not mutate state. Revert the most recent mutation with manage_history (action: undo). import defaults mode to dry-run; merge or replace writes. Use when: creating, revising, removing, toggling, grouping, suggesting, listing, exporting, or importing lore. Do NOT use when: recording a story beat — use manage_story (action: record); recording one entity's beliefs — use manage_belief; recording one entity's perceptions — use manage_perception.

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).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.6/5.0
Behavior4/5

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

With annotations already declaring destructiveHint=true, readOnlyHint=false, and idempotentHint=false, the description adds useful context: mutating actions persist and are audited, read-only actions do not mutate state, and import defaults to dry-run unless merge or replace is chosen. It also explains that the most recent mutation can be reverted via manage_history. The description could go further by detailing specific destructive consequences or permission requirements, but it meaningfully supplements the annotations.

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 core purpose and behavioral traits, then structured with clear 'Use when' and 'Do NOT use when' sections. The list of actions in the usage section is somewhat long but each item aids routing, and there is no redundant restatement of the title or schema. It is appropriately sized for a multi-action tool with many siblings.

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?

Given 13 parameters, an output schema, and full annotation coverage, the description provides sufficient context: it explains purpose, distinguishes from siblings, clarifies mutating versus read-only behavior, notes the audit and import defaults, and points to manage_history for undo. No additional return-value or parameter documentation is needed because the schema and output schema handle those details.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by specifying that import defaults to dry-run mode and that merge or replace performs writes, which clarifies the mode parameter's default behavior. It also groups actions into mutating versus read-only categories, helping the agent interpret the action parameter without listing every enum value.

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

Purpose5/5

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

The description states a specific verb and resource: managing the active Novel's lore entries — shared, durable world facts. It distinguishes itself from siblings by explicitly naming manage_story, manage_belief, and manage_perception as alternatives for related but different tasks. An agent can identify exactly what this tool does without opening 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 provides explicit 'Use when' and 'Do NOT use when' sections, listing concrete actions (creating, revising, removing, etc.) and naming the correct alternatives for story beats, beliefs, and perceptions. It also directs the agent to manage_history for undo and notes the import default mode. This leaves no 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.

manage_noteNote ManagementA
Destructive

Manage Novel-scoped scratch notes, badge-scoped to game_master (default), player, or shared. Mutating actions persist to the Novel and are audited; read-only actions do not mutate state. Revert the most recent mutation with manage_history (action: undo). set's badge_scope defaults to game_master. Use when: storing scratch state the caller will reuse. Do NOT use when: recording durable world facts — use manage_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).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.7/5.0
Behavior4/5

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

Adds real context beyond the annotations: mutations persist to the Novel and are audited, reads do not mutate state, and the most recent mutation is undoable via manage_history. The destructive/audited/reversible profile is consistent with destructiveHint=true and idempotentHint=false, though it doesn't spell out precisely what a remove destroys or permission requirements.

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?

Dense but front-loaded: identity and scope first, then mutation/audit semantics, then undo routing, then use/don't-use. Every clause carries information; no filler.

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 multi-action mutating tool with an output schema, annotations, and full schema coverage, the description supplies the missing decision layer (scratch vs. lore, undo path, defaults). Nothing an agent needs to call it correctly is absent.

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 baseline is 3; the description earns an extra point by disclosing a behavior the schema does not — that set's badge_scope defaults to game_master — which materially affects correct invocation.

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 with scope: Novel-scoped scratch notes, badge-scoped to game_master/player/shared. It explicitly differentiates itself from the closest sibling (manage_lore) by naming the boundary between scratch state and durable world facts.

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' clauses, names the alternative (manage_lore action: set) for durable facts, and routes the undo path to manage_history (action: undo). An agent has everything needed to choose between this and its alternatives.

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

manage_novelNovel Save ManagementA
Destructive

Manage Novel save files: create, resume, switch, end, export, import, rename, describe, list, archive, unarchive, info, genre, clone, branch, save_context, get_context, or checkpoint. Mutating actions persist to the Novel and are audited; read-only actions do not mutate state. Revert the most recent mutation with manage_history (action: undo). import defaults mode to dry-run; strict turns a reference-validation failure into a hard block. Use when: handling a campaign's lifecycle, interchange, return points, or branching a timeline. Do NOT use when: managing content inside the Novel — use the entity tools (manage_npc, manage_lore, manage_faction, manage_vow, manage_story, manage_note).

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, branch, 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 or branch (clone/branch).
new_slugNoNew slug (rename).
from_eventNoEvent-log ordinal to branch from (branch; default latest).
descriptionNoDescription (create/description).
source_slugNoNovel to copy or branch from (clone/branch).
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).
include_checkpointsNoInclude checkpoints in export (default false; export).
trim_audit_sessionsNoKeep only the most recent N sessions' audit entries in the clone (clone; default full copy).
pending_player_actionNoPending player action (save_context).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and non-idempotence, so the safety profile is largely covered; the description adds real value on top by stating that mutating actions persist and are audited while read-only actions do not mutate state, and that import defaults to dry-run with strict escalating a reference mismatch to a hard block. It stops short of saying what specifically is destroyed or how branching/clone interact with the source Novel.

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?

Front-loaded with the operation list, then behavior, then the when/when-not routing, in four tight sentences with no filler. Size is justified for a 21-action multiplexed tool, and the action enumeration is compressed to a single clause rather than a bulleted expansion of the schema enum.

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?

An output schema exists, so return-value explanation is unnecessary, and the description still covers mutation/audit semantics, the undo path, import safety modes, and scope exclusions. It is slightly thin on the checkpoint family, which is collapsed into the single word 'checkpoint' even though the schema exposes four distinct checkpoint actions.

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 per-parameter 'which action uses this' annotations already carry most semantic load and the baseline would be 3. The description earns above baseline by disambiguating two behavioral parameters: import defaults mode to dry-run, and strict converts a reference-validation failure into a hard block.

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 concrete verb and resource ('Manage Novel save files') and then enumerates the concrete lifecycle, interchange, branching, and checkpoint operations, so an agent knows this is the save-file lifecycle tool rather than a content tool. It also explicitly names the sibling entity tools it is not, letting an agent separate it from manage_npc/manage_lore without opening schemas.

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: handling a campaign's lifecycle, interchange, return points, or branching a timeline' and 'Do NOT use when: managing content inside the Novel', naming six concrete alternative tools. It additionally routes undo to manage_history (action: undo), giving a clear when-to-use path for reversal.

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

manage_npcNPC ManagementA
Destructive

Manage non-player characters in the active Novel. Mutating actions persist to the Novel and are audited; read-only actions do not mutate state. Revert the most recent mutation with manage_history (action: undo). Use when: introducing, revising, removing, listing, or reading NPCs. Do NOT use when: managing player characters — use manage_character (action: create/import/sheet).

ParametersJSON Schema
NameRequiredDescriptionDefault
mindNoOptional GM-only NPC mind (create/update).
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).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true and idempotentHint=false; the description goes beyond them by disclosing that mutating actions persist to the Novel and are audited while read-only actions do not mutate state, plus the undo path via manage_history. It stops short of saying what 'remove' actually destroys or whether operations require specific permissions, so it adds real value without being fully exhaustive.

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?

Four short sentences, front-loaded with purpose, then behavior, then recoverability, then the use/don't-use rules. No sentence is redundant and no filler is present.

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?

The tool has annotations, a 100%-covered schema with a nested mind object, and an output schema, so return values and field semantics are already handled elsewhere. The description supplements that with persistence/audit behavior, an undo route, and sibling routing — enough for correct invocation.

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 each of the 9 parameters carries its own description including action-scoping hints (e.g. 'NPC identifier (update/remove/get)'), so the schema does the heavy lifting. The prose adds no parameter-level syntax, defaults, or format details beyond it, making baseline 3 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?

States a specific verb+resource with scope ('Manage non-player characters in the active Novel') and immediately separates itself from the closest sibling via the explicit 'Do NOT use when: managing player characters — use manage_character'. An agent can pick between manage_npc and manage_character without opening either 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?

Enumerates the activating cases ('introducing, revising, removing, listing, or reading NPCs'), names an exclusion with a redirect ('player characters — use manage_character'), and provides the recovery route ('Revert the most recent mutation with manage_history (action: undo)'). Nothing is left to inference.

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

manage_perceptionPerception Ledger ManagementA
Destructive

Record and read what an entity perceived — messages, scene changes, and observations — as an append-only ledger distinct from belief. Mutation (record) persists to the Novel and is audited; list/for_entity/for_event are read-only. Use when: recording that an entity perceived something (record), listing perceptions (list), or reading an entity's or an event's perceptions (for_entity/for_event). Do NOT use when: recording what an entity believes — use manage_belief; recording shared world facts — use manage_lore; recording observations for provenance — use manage_session (action: event).

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNomessage, scene, or observation (record; default observation).
actionYesrecord, list, for_entity, or for_event.
summaryNoWhat was perceived (record).
entity_idNoEntity that perceived (record/for_entity).
event_ordinalNoContributing event-log ordinal (record/for_event; defaults to the latest event).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.7/5.0
Behavior4/5

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

Adds meaningful context beyond the annotations: the ledger is append-only, the record action persists to the Novel and is audited, and the read actions are side-effect free. This tells the agent which of the four actions mutate and which are safe. The only gap is a mild tension with destructiveHint=true, which an append-only ledger framing does not explain.

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?

Front-loads the core purpose, then separates 'Use when' from 'Do NOT use when' in a scannable structure. The list of alternatives is dense but every clause carries routing information; no filler sentences.

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?

With annotations covering the safety profile and an output schema present (so return values need no explanation), the description supplies all remaining decision-critical context: scope, per-action read/write behavior, and sibling routing. Complete for an agent to select and invoke 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?

Schema description coverage is 100%, so the baseline is 3, but the description adds semantic meaning by tying the action enum values to outcomes (record persists and is audited; list/for_entity/for_event are read-only) and by characterizing the kind values. This goes beyond restating the schema field docs.

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 set (record/read) applied to a concrete resource (what an entity perceived: messages, scene changes, observations) and explicitly positions it as a ledger distinct from belief. An agent can distinguish it from manage_belief and manage_lore without opening any 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?

Provides explicit 'Use when' routing for each action (record/list/for_entity/for_event) and explicit 'Do NOT use when' clauses naming the correct alternatives (manage_belief, manage_lore, manage_session action:event). Nothing is left to inference.

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

manage_relationshipRelationship ManagementA
Destructive

Manage directed relationships between entities, NPCs, or factions. Mutating actions persist to the Novel and are audited; read-only actions do not mutate state. Revert the most recent mutation with manage_history (action: undo). Use when: setting or reading how two parties relate. Do NOT use when: tracking faction progress — use manage_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).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false; the description adds genuinely new context by explaining that mutating actions persist to the Novel and are audited, that read-only actions do not mutate state, and that the last mutation can be reverted through manage_history.

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?

Four sentences, none wasted: scope, persistence/audit behavior, revert route, and use/do-not-use routing are all front-loaded and each 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?

Output schema exists so return values need no explanation, annotations cover safety, and the description supplies the missing behavioral and routing context (persistence, audit, undo, sibling disambiguation) needed to call this correctly among 30+ siblings.

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 two enums (action, type) are already documented in the schema, so the description adds little beyond restating that it sets or reads relationships. Baseline 3 is appropriate when the schema carries parameter meaning.

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 (manage) and resource (directed relationships between entities, NPCs, factions), plus names the sibling it must not be confused with (manage_faction). An agent can distinguish it from the 30+ other manage_* tools without opening 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?

Explicit when-to-use ('setting or reading how two parties relate') and when-not ('tracking faction progress — use manage_faction (action: update)'), plus an alternate recovery path via manage_history (action: undo). This is the full when/when-not/alternative triad.

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

manage_rulesetRuleset Package ManagementA
Destructive

Manage ruleset packages: search a bound ruleset's index, install or remove a package, list installed packages, bind a Novel to a ruleset, roll on a generation table, or import/remove a supplementary ruleset. import_supplementary uses inline wisdom when present and reads source only when absent. install/remove are reversible via the paired action; roll and search are read-only. Use when: searching rules content, installing/removing/listing packages, binding a Novel, rolling a table (roll), or adding/removing supplementary Wisdom (import_supplementary/remove_supplementary). Do NOT use when: the Novel is ruleset-free — use run_command (action: suggest) or manage_session (action: health). install/remove/import_supplementary/remove_supplementary mutate state and are audited; search and roll are read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoDeterministic seed (roll).
slugNoRuleset slug (install/remove/bind/import_supplementary/remove_supplementary).
indexNoSearch index (install).
modelNoExtraction model (install).
queryNoSearch query (search).
tableNoGeneration table to roll on (roll).
toolsNoTool schemas (install).
actionYessearch, install, remove, list, bind, roll, import_supplementary, or remove_supplementary.
sourceNoSupplementary Markdown source path (import_supplementary).
wisdomNoInline supplementary Wisdom items (import_supplementary).
promptsNoPrompts (install).
manifestNoPackage manifest (install).
resourcesNoResources (install).
max_resultsNoMaximum results (search).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.6/5.0
Behavior4/5

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

Annotations declare destructiveHint=true globally, which is misleading for a tool that mixes reads and writes; the description usefully corrects this by stating search and roll are read-only, install/remove are reversible via the paired action, and the mutating actions are audited. It stops short of describing failure modes or prerequisites for bind/install beyond the reversible pairing.

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?

Front-loaded with the operation list and kept tight, but the first sentence's action enumeration is largely repeated in the 'Use when' clause, creating mild redundancy across an otherwise efficient block.

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 14-parameter, 8-action tool with an output schema and full annotation coverage, the description supplies everything an agent needs to choose the right action: action semantics, read vs write behavior, alternative tools for the excluded case, and the wisdom/source precedence rule. Return values are covered by the output schema, so nothing material 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?

Schema coverage is 100%, so the baseline is 3, but the description adds a genuine cross-parameter rule: import_supplementary prefers inline 'wisdom' and only reads 'source' when wisdom is absent. That behavior is not derivable from the per-parameter schema text, though the remaining 13 parameters get no added explanation.

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 resource (ruleset packages) and enumerates the concrete operations: search an index, install/remove a package, list installed packages, bind a Novel, roll a generation table, and import/remove supplementary rulesets. This lets an agent distinguish it from the many manage_* siblings without opening 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?

It provides explicit 'Use when' conditions mapped to specific actions and a 'Do NOT use when' clause naming two concrete alternatives (run_command with action: suggest, manage_session with action: health) for the ruleset-free case. This is textbook when/when-not/alternative routing.

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

manage_sceneScene ManagementA
Destructive

Manage the active scene and its narrative framing. Mutating actions persist to the Novel and are audited; read-only actions do not mutate state. Revert the most recent mutation with manage_history (action: undo). set derives the description from location only when description is omitted. 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 manage_story (action: record).

ParametersJSON Schema
NameRequiredDescriptionDefault
beatNoStory-beat tag (set): setup, escalation, turning_point, climax, resolution, denouement.
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).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and non-idempotent mutation, but the description adds real value: mutating actions persist to the Novel and are audited, read-only actions don't mutate, undo routes to manage_history, and 'set' derives description from location only when omitted. It stops short of describing auth/permission needs or what persistence means for overwritten scene fields.

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?

Front-loads the core purpose and the persistence/audit rule before the routing clauses; four sentences with little waste. Slightly dense, but 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?

With an output schema, full parameter descriptions, and annotations present, the description only needs to supply routing and mutation semantics, which it does. Minor gap: the choices/oracle resolution actions are named but their result flow isn't described.

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% across 23 parameters with per-parameter action tags, so the schema carries the load. The description adds only two semantic nuggets (description derivation from location, undo via manage_history); baseline 3 is appropriate.

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?

States a specific verb+resource ('Manage the active scene and its narrative framing') and enumerates the six action areas (set state, directive, presence, autonomy, choices, oracle). It clearly separates itself from manage_story and manage_history, though the multi-action umbrella means the individual actions are only briefly glossed.

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:' and 'Do NOT use when:' clauses, naming manage_story (action: record) as the alternative for story beats, plus the undo path via manage_history. An agent can route without inferring anything.

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

manage_sessionSession ManagementA
Destructive

Manage session-level surfaces, diagnostics, and tool discovery. event with supersede appends a replacement and marks that ordinal superseded. Use when: recapping recent activity (recap), setting output verbosity (verbosity), reordering briefing sections (briefing_order), summarizing the audit log (compress) or compacting it irreversibly (compact), reporting server health (health), discovering or searching the tool catalog (discover), reassigning a tool's category for the session (category), or appending and reading the Novel event log (event, history). Category reassignment, event append, and audit compaction mutate Novel-scoped state and persist; recap/verbosity/briefing_order/health/discover/history are read-only diagnostics or session-scoped settings. Do NOT use when: recording story content — use manage_story (action: record).

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNonormal or terse (verbosity).
textNoObservation text (event).
queryNoOptional search term matched against tool name, description, and title (discover).
actionYesrecap, verbosity, briefing_order, compress (non-mutating audit summary prompt), compact (GM-only irreversible audit-log compaction), health, subscribe, discover (list/search tools), category (reassign a tool's category), event (append an observation), or history (read the event log).
sourceNoEvent source classification (event).
topicsNoNotification topics to subscribe to (subscribe).
categoryNoNew category label, or null/empty to restore the default (category).
gm_notesNoGM-only free-text notes returned only to the Game Master badge (recap).
sectionsNoOrdered list of briefing sections (briefing_order).
sessionsNoNumber of recent sessions to retain live; triggers irreversible compaction (compact; default TTRPG_AUDIT_RETENTION_SESSIONS).
supersedeNoOrdinal of an event this observation replaces (event).
tool_nameNoRegistered tool name to reassign (category).
session_idNoArchived session id to include in recap (recap).
max_entriesNoPositive integer; returns a non-mutating summarize prompt over the most recent entries (compress).
through_ordinalNoReturn events up to and including this ordinal (history).
include_supersededNoInclude superseded events (history; default true).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.1/5.0
Behavior4/5

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

Annotations only flag the tool globally as destructive/non-idempotent, which is conservative for a multi-action tool; the description adds real value by partitioning the actions into mutating ('category reassignment, event append, and audit compaction mutate Novel-scoped state and persist') versus read-only ('recap/verbosity/briefing_order/health/discover/history'). It also calls out that compaction is irreversible and that supersede marks the replaced ordinal. No contradiction with annotations.

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?

Given eleven actions, the description is compact and front-loaded, moving from a one-line purpose to the mutation summary to 'Use when:' and 'Do NOT use when:'. The action-to-intent parentheticals keep it scannable. It is dense but each clause earns its place for a tool of this breadth.

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?

An output schema exists, so return values need no explanation, and the description covers usage, mutation semantics, irreversibility, and the sibling exclusion. The remaining gap is minimal: no guidance on permission requirements beyond the schema's GM-only note, but nothing an agent needs to invoke 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%, so the schema already documents all 16 parameters with per-action hints. The description maps some actions to their parameters but adds no syntax, format, or constraint detail beyond what the schema provides. Baseline 3 is appropriate when the schema carries the load.

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 names the resource (session-level surfaces, diagnostics, tool discovery) and enumerates the concrete actions it fronts (recap, verbosity, briefing_order, compress, compact, health, discover, category, event, history). It also distinguishes itself from a sibling by name (manage_story for recording story content). The verb 'Manage' is broad and the scope is sprawling, which keeps it out of 5 territory, but the action enumeration makes the purpose unambiguous.

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 an explicit 'Use when:' mapping each action to its intent (recapping activity, setting verbosity, reordering briefing sections, summarizing/compacting the audit log, health, discovery, category reassignment, event/history) and an explicit 'Do NOT use when:' clause naming the alternative (manage_story, action: record). This is textbook when/when-not/alternative guidance.

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

manage_storyStory Journal ManagementA
Destructive

Manage the story journal — typed narrative memories (decision, moment, revelation, bond, consequence). Mutating actions persist to the Novel and are audited; read-only actions do not mutate state. Revert the most recent mutation with manage_history (action: undo). promote uses index and writes lore under key (default derived). Use when: recording, editing, removing, listing, or promoting story beats. Do NOT use when: recording a durable world fact — use manage_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).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare destructiveHint=true and readOnlyHint=false; the description reinforces this by separating mutating actions ('persist to the Novel and are audited') from read-only ones, and discloses the revert path via manage_history undo. It stops short of saying what remove actually destroys or whether edits are recoverable beyond the last mutation, so it adds context but leaves a 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?

Front-loaded with purpose, then behavior, then usage rules — a sensible ordering with no filler. It is dense (six stacked clauses) but every clause carries actionable information; only the audit/persist detail is slightly incidental.

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?

With an output schema present, return values need not be described, and annotations carry the safety profile. The description covers domain, mutation risk, undo routing, and the promote/key interaction; the only unaddressed area is pagination behavior for list, which the schema covers at the parameter level.

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 baseline is 3, but the description adds real semantics the schema does not: 'promote uses index and writes lore under key (default derived)', clarifying cross-parameter interaction and the default. Other params (filter, limit, offset, entry) are left to 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?

States a specific verb+resource ('Manage the story journal') and immediately qualifies the resource as typed narrative memories with the five enum types, so the agent knows exactly what domain this covers. It also names the sibling it is not (manage_lore) and the adjacent history tool, making it distinguishable from the ~30 sibling manage_* 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?

Explicit when-to-use ('recording, editing, removing, listing, or promoting story beats') and explicit when-not with the correct alternative ('recording a durable world fact — use manage_lore (action: set)'). It also routes the undo path to manage_history, which is a genuine alternative-selection rule.

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

manage_synthesisSynthesis ManagementA
Destructive

Manage synthesis content (voice examples, lore templates, action patterns, and other Ruleset Wisdom). Mutating actions persist to the Novel and are audited; read-only actions do not mutate state. Revert the most recent mutation with manage_history (action: undo). activate/deactivate with key omitted act on the whole module. Use when: running, reverting, listing, activating, deactivating, toggling, or player-authoring synthesis items. Do NOT use when: browsing the codex — use manage_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).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds real context beyond them: mutating actions persist to the Novel and are audited, read-only actions leave state untouched, and omitting key on activate/deactivate acts on the whole module. It stops short of mapping each action to its individual destructive/read-only nature, which would be the full picture.

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?

Front-loaded with purpose, then a compact behavioral clause, then explicit when/when-not guidance. Every sentence carries routing or behavioral information; the parenthetical content-type list is the only mildly expendable element.

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?

With an output schema present, return values need no explanation. The description covers persistence, audit trail, whole-module semantics, revert path, and sibling exclusions — everything needed to invoke a 10-action, 9-parameter 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?

Schema coverage is 100%, so baseline is 3, but the description adds a genuinely non-obvious semantic: activate/deactivate with key omitted operate on the whole module. It also points to manage_history (action: undo) as the revert mechanism, adding meaning beyond the enum listing.

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 (manage) and resource (synthesis content), then enumerates the concrete content types it covers (voice examples, lore templates, action patterns, Ruleset Wisdom). It explicitly routes non-matching cases to siblings (manage_codex, manage_history), so an agent can distinguish it without opening a 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?

Explicit 'Use when:' list of actions and a 'Do NOT use when: browsing the codex — use manage_codex (action: list)' exclusion. It also names manage_history (action: undo) as the revert path, giving both positive and negative routing.

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

manage_vowVow ManagementA
Destructive

Track narrative vows, quests, and obligations with milestones. Mutating actions persist to the Novel and are audited; read-only actions do not mutate state. Revert the most recent mutation with manage_history (action: undo). set's difficulty sets the rank track and the linked countdown's ticks; scope defaults to shared. Use when: setting, advancing, resolving, forsaking, or listing vows. Do NOT use when: starting a clock timer — use manage_countdown (action: set).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoVow name (set).
scopeNogame_master, 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).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation profile is partly known. The description adds genuinely new context: mutating actions persist to the Novel and are audited, read-only actions do not mutate state, and the most recent mutation is reversible via manage_history. It stops short of noting irreversibility limits or auth requirements, so a 4 rather than 5.

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?

Dense but front-loaded: purpose first, then mutation semantics, then undo path, then when/when-not. Every sentence carries operational value, though the compound final clauses are slightly packed and could be split for readability.

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?

Given an output schema exists and annotations plus 100% schema coverage are present, the description only needs to supply routing, mutation semantics, and the undo path — all of which it does. Nothing an agent needs to select or invoke this tool correctly 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?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: 'difficulty' drives the rank track and the linked countdown's ticks, and 'scope' defaults to shared when omitted. That default-value and cross-field linkage information is not in 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?

States a specific verb and resource ('Track narrative vows, quests, and obligations with milestones') and enumerates the supported operations. It clearly differentiates itself from siblings by naming manage_countdown and manage_history as the tools for adjacent concerns, so an agent can route without opening any 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?

Provides explicit 'Use when:' triggers (setting, advancing, resolving, forsaking, listing) and an explicit 'Do NOT use when:' exclusion that names the alternative tool and action ('use manage_countdown (action: set)'). It also routes the undo case to manage_history with the precise action, 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.

manage_worldWorld Model ManagementA
Destructive

Manage the world model — rooms, things, and exits. Mutating actions persist to the Novel and are audited; read-only actions do not mutate state. Revert the most recent mutation with manage_history (action: undo). create_thing honors location_type only when location is set; kind forces property defaults. Use when: creating, updating, removing, or bulk-converting locations and objects. Do NOT use when: navigating the world — use run_command (action: execute) or run_command (action: resolve).

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoDestination room alias for room_b (create_exit).
keyNoBound key thing name required to unlock or lock this thing when lockable (create_thing/update_thing).
litNoWhen true the thing is lit (create_thing/update_thing).
fromNoSource room alias for room_a (create_exit).
kindNoOptional thing kind (create_thing).
nameNoRoom/thing name (create/update/remove).
roomNoSource room (create_exit/remove_exit).
seedNoDeterministic seed (generate).
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, convert, or generate.
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).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint=true, readOnlyHint=false), it discloses that mutating actions persist to the Novel and are audited while read-only actions do not mutate state, and it names the exact undo route. That is meaningful behavioral context the annotations cannot express.

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?

Reasonably sized for a 10-action, 30-parameter tool, with purpose and persistence semantics front-loaded. Some clauses are dense run-ons ('create_thing honors location_type only when location is set; kind forces property defaults'), but every sentence carries information.

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

Completeness4/5

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

An output schema exists so return values need no explanation, and the description covers mutation semantics, undo, and routing. It stops short of clarifying the convert/generate actions, which are the least self-explanatory members of the action enum.

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; the description adds real meaning on top by stating that create_thing honors location_type only when location is set and that kind forces property defaults. It does not explain the convert/generate semantics or the mutual exclusion of room_a/room_b/from/to pairs.

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?

Names the specific resource ('the world model — rooms, things, and exits') and the operations (create, update, remove, bulk-convert). It explicitly contrasts itself with run_command for navigation, so an agent can separate it from siblings without opening 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?

Contains an explicit 'Use when' clause (creating, updating, removing, bulk-converting locations and objects) and a 'Do NOT use when' clause routing navigation to run_command (execute/resolve). It also names the recovery path (manage_history action: undo).

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

resolve_fateResolve Fate ActionsA
Destructive

Resolve Fate-style actions with Fudge dice, aspects, Fate points, and stress. Rolls and state changes (points, stress, momentum, progress) persist to the Novel; a roll with no following write is flagged as an uncommitted roll. stress with neither track nor consequence clears all tracks and consequences. Rolls and their state writes are recorded and are not individually reversible. Use when: rolling 4dF against a difficulty, invoking or compelling aspects, spending or refreshing Fate points, or marking stress and consequences. Do NOT use when: resolving a d20 skill check — use the bound ruleset's roll tools or run_command (action: resolve).

ParametersJSON Schema
NameRequiredDescriptionDefault
opNoSub-operation: aspect (create, invoke, compel, remove, list), fate_point (spend, grant, refresh, list), or stress (mark, clear, list).
diceNoFudge dice notation (roll), e.g. '4dF'; defaults to 4dF.
nameNoAspect name (aspect); consequence label (stress).
seedNoDeterministic seed (roll).
skillNoSkill name for the roll label (roll).
trackNoStress track to mark or clear (stress).
actionYesroll, aspect, fate_point, or stress.
amountNoFate points to spend or grant (fate_point); defaults to 1.
shiftsNoShifts to mark on a stress track (stress); defaults to 1.
targetNoAspect target: 'scene' or an entity/NPC id (aspect); defaults to 'scene'.
modifierNoSkill rating added to the roll (roll).
entity_idNoEntity or NPC id (aspect/fate_point/stress).
difficultyNoOpposition to beat (roll); defaults to 0.
consequenceNoConsequence to record or clear (stress).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations (destructiveHint=true, idempotent=false) by disclosing that rolls and state writes persist to the Novel, that a roll with no following write is flagged as uncommitted, that stress without track or consequence clears everything, and that operations are not individually reversible. This is exactly the irreversibility/persistence context a mutating tool needs.

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?

Front-loaded with the core capability and then the when/when-not routing; every sentence carries behavioral or routing information. It is dense and runs long, but there is little waste.

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 14-parameter mutating tool with an output schema present and full schema coverage, the description supplies the missing behavioral context (persistence, irreversibility, uncommitted-roll flagging) that the structured fields cannot convey. Nothing needed to invoke it correctly is absent.

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 baseline is 3, but the description adds semantic grouping beyond the schema by tying the op sub-operations to action types and explaining the stress clearing rule (track/consequence omission). It doesn't detail every parameter's format, so a 4 is fair.

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 domain (resolve Fate-style actions with Fudge dice, aspects, Fate points, stress) and enumerates the sub-operations, which cleanly distinguishes it from siblings resolve_ironsworn and resolve_forged. An agent knows exactly which ruleset surface this tool covers.

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' list covers rolling 4dF, invoking/compelling aspects, spending/refreshing Fate points, marking stress and consequences. The 'Do NOT use when' clause names the alternative (bound ruleset's roll tools or run_command with action: resolve) for d20 checks, giving a concrete routing decision.

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

resolve_forgedForged in the DarkA
Destructive

Resolve Blades in the Dark-style actions: action rolls with position and effect, stress and trauma with resistance, and downtime recovery. Rolls and state changes (points, stress, momentum, progress) persist to the Novel; a roll with no following write is flagged as an uncommitted roll. action_roll with dice 0 rolls the lower of two d6; stress name labels the resist consequence or the trauma mark. Rolls and their state writes are recorded and are not individually reversible. Use when: rolling an action against the highest die, marking or resisting stress, or recovering during downtime. Do NOT use when: tracking a progress clock — use manage_countdown (action: set).

ParametersJSON Schema
NameRequiredDescriptionDefault
opNoSub-operation: stress (mark, clear, resist, list), downtime (recover, indulge_vice, list).
costNoStress cost to resist (stress); defaults to 2.
diceNoDice pool size (action_roll); defaults to 2.
nameNoAction name (action_roll) or consequence label (stress resist).
seedNoDeterministic seed (action_roll).
actionYesaction_roll, stress, or downtime.
amountNoStress to mark or clear (stress/downtime); defaults to 1.
effectNoEffect (action_roll); defaults to standard.
positionNoPosition (action_roll); defaults to risky.
entity_idNoEntity or NPC id (stress/downtime).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and non-idempotency, but the description adds substantial context the annotations cannot carry: rolls and state changes persist to the Novel, a roll with no following write is flagged as uncommitted, and rolls/state writes are not individually reversible. It also clarifies the odd dice-0 case and what the stress name label applies to.

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 paragraph is front-loaded with purpose, then behavior, then usage guidance, with no filler sentences. It is dense but every clause carries information; only minor tightening is possible.

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?

With an output schema present, return values need not be described, and the description still covers persistence, the uncommitted-roll flag, reversibility, and routing to alternatives. For a 10-parameter, destructive, stateful tool this is complete enough for correct invocation.

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 baseline would be 3, but the description adds meaning beyond the schema: 'action_roll with dice 0 rolls the lower of two d6' and 'stress name labels the resist consequence or the trauma mark.' These clarify ambiguous parameters (dice, name) that the schema documents only generically.

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 (resolve) and resource (Blades in the Dark-style actions) and enumerates the three action families: action rolls with position/effect, stress/trauma with resistance, and downtime recovery. This distinguishes it cleanly from siblings like resolve_fate and resolve_ironsworn without opening any 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?

It provides explicit 'Use when:' conditions (rolling an action against the highest die, marking/resisting stress, recovering during downtime) and an explicit 'Do NOT use when:' routing the agent to manage_countdown for progress clocks. Both the trigger and the exclusion name the alternative, 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.

resolve_ironswornResolve Ironsworn MovesA
Destructive

Resolve Ironsworn-style actions: momentum, the action-roll move framework, and progress tracks. Rolls and state changes (points, stress, momentum, progress) persist to the Novel; a roll with no following write is flagged as an uncommitted roll. move's burn replaces the action die with momentum and ignores adds; progress rank defaults to dangerous. Rolls and their state writes are recorded and are not individually reversible. Use when: setting or burning momentum, rolling a move against two challenge dice, or marking and testing a progress track. Do NOT use when: managing vows — use manage_vow (action: set).

ParametersJSON Schema
NameRequiredDescriptionDefault
opNoSub-operation: momentum (set, gain, lose, reset, list), progress (create, mark, test, list).
addsNoStat and bonuses added to the action die (move).
burnNoBurn momentum to replace the action score (move).
nameNoMove name (move) or progress-track name (progress).
rankNoProgress-track rank (progress).
seedNoDeterministic seed (move, progress test).
ticksNoProgress to mark (progress); defaults to 1.
actionYesmomentum, move, or progress.
amountNoAmount to set/gain/lose (momentum); defaults to 1.
entity_idNoEntity or NPC id (momentum, move burn).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare destructive/non-idempotent, and the description goes further: state changes persist to the Novel, a roll with no following write is flagged as uncommitted, rolls and their writes are not individually reversible, and burn semantics (replaces action die with momentum, ignores adds). That is meaningful behavioral context beyond the structured hints.

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?

Dense but front-loaded: the core purpose leads, then mechanics, then routing. Every sentence carries information, though the mechanics/constraints run together in a way that makes it slightly heavy to parse.

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 multi-mode tool with 10 parameters, 100% schema coverage, and an output schema, the description supplies what the schema cannot: persistence, irreversibility, uncommitted-roll flagging, and sibling routing. An agent can select and invoke it correctly without further information.

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 baseline is 3. The description still adds semantics the schema does not carry: burn 'ignores adds' and progress rank 'defaults to dangerous'. It does not document the op sub-operations (momentum set/gain/lose/reset/list, progress create/mark/test/list), which remain schema-only.

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 (resolve) plus the concrete resources involved: momentum, the action-roll move framework, and progress tracks. It is clearly distinguishable from sibling resolvers like resolve_fate and resolve_forged, and from the manage_* state 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 gives a 'Use when' list (setting/burning momentum, rolling a move against two challenge dice, marking and testing a progress track) and a 'Do NOT use when' case that routes to the named alternative manage_vow (action: set). Nothing is left to inference.

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

respond_decisionRespond to Workflow DecisionA
Destructive

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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered. The description earns credit for going beyond that by disclosing the atomic drain-and-persist mechanism, which explains why the operation is one-shot and non-repeatable, and the schema notes that 'cancel' aborts and restores a snapshot.

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 tight sentences, front-loaded with the core action and mechanism, followed by a compact 'Use when / Do NOT use when' structure. Every clause carries actionable information and there is no filler.

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?

An output schema exists, so return values need not be described. Given the tool's mutation semantics, the annotations cover reversibility, and the description covers the trigger, the exclusivity condition, and the persistence side effect — everything needed to call it 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%, and the schema itself documents both parameters, including the special 'cancel' value with its restore-snapshot behavior. The description adds no additional syntax, format, or constraint detail beyond what the schema provides, 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?

States a specific verb (answer/respond) and resource (pending workflow decision) plus the mechanism: 'atomically draining it and persisting the outcome to the Novel.' The second sentence names the sibling tools (set_badge, state tools) that should be used in the alternative case, so an agent can distinguish this tool without opening any 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?

Explicitly gives the trigger condition ('the server emitted a [NEED_INPUT] prompt and the caller must choose') and the negative condition ('no decision is pending'), and routes to named alternatives. Nothing about when to call versus not call is left to inference.

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

run_commandParser CommandA
Destructive

Execute a parser command, resolve a spatial intent, or suggest actions from intent. execute mutates world/entity state; resolve and suggest are read-only. execute persists to the Novel and is reversible with manage_history (action: undo); resolve and suggest are read-only. 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 manage_world or manage_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).

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only say the tool is destructive/non-read-only, which is true for execute but misleading for resolve and suggest. The description corrects that by stating execute mutates world/entity state while resolve and suggest are read-only, and adds the key behavioral fact that execute persists to the Novel and is undoable via manage_history (action: undo). That is exactly the context annotations cannot express.

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

Conciseness3/5

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

The routing clauses are front-loaded and well ordered, but the second sentence is largely redundant: 'resolve and suggest are read-only' is stated twice in adjacent clauses. That repetition costs a point on an otherwise compact definition.

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 tri-mode tool with four params and an output schema, the description covers the decision-relevant facts: what each mode does, which mutate, reversibility and the undo path, and which sibling to use instead for direct inspection. Return values are correctly left to the output 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 description coverage is 100%, so the baseline is 3, but the description goes further by tying each action to its parameter (execute consumes a command, resolve/suggest consume intent, entity_id is suggest-scoped). It stops short of documenting formats or the execute default, which the schema already covers.

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 names a specific verb (execute/resolve/suggest) and the resources involved (parser command, spatial intent, world/entity state), and explicitly routes away from manage_world/manage_lore. The only friction is the multi-mode nature and the jargon 'parser command', which forces the reader to reconcile the tool name run_command with three distinct behaviors.

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 gives an explicit 'Use when' clause for each of the three modes (physical action → execute, movement outcome without mutation → resolve, intent mapped to tool calls → suggest) and an explicit 'Do NOT use when' clause naming manage_world and manage_lore as alternatives. This is about as complete as routing guidance gets.

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
Destructive

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_decision.

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
textNoHuman-readable text envelope mirroring the structured result (REQ-001, REQ-548a).
statusYesMachine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare the safety profile (readOnly false, destructive true, idempotent false), so the bar is lower. The description still adds real context beyond them: the badge gates tool access server-side for the session, and the tool is always callable — useful for reasoning about access loss. It stops short of saying explicitly that switching away can revoke currently available tools mid-task, which is the destructive consequence an agent should weigh.

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 tightly packed clauses: what it does, when to use, when not to use. Front-loaded with the action and scope, no filler sentences, every clause 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?

An output schema exists, so return values need not be explained. For a single-enum-parameter state-switching tool with full annotation coverage, the description supplies everything needed to select and call it 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% and the enum is fully documented in the schema, so the description adds nothing new when it lists the same four values. Baseline 3 applies when the schema carries the parameter semantics.

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+resource (switch the active badge), enumerates the four allowed values, and names the concrete effect: server-side gating of tool access for the session. An agent can distinguish this from every manage_* sibling without opening a 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?

Gives explicit 'Use when' triggers (entering the story, spectating, stepping away to edit) and an explicit 'Do NOT use when' case that names the correct alternative (respond_decision for a pending workflow decision). Routing is unambiguous.

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

Tool Schema Changelog

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

  1. 5 tool updatesv1.0.4
    • Removedmanage_graph
    • Removedmanage_index
    • Addedmanage_knowledge
    • Changedmanage_scene1 field changed
      • changedInput schema / properties / beat / description
        Previous value: -"Story-beat tag (set)."New value: +"Story-beat tag (set): setup, escalation, turning_point, climax, resolution, denouement."
    • Changedmanage_world3 fields changed
      • addedInput schema / properties / from
        Added value: +{
        +  "description": "Source room alias for room_a (create_exit).",
        +  "type": "string"
        +}
      • addedInput schema / properties / key
        Added value: +{
        +  "description": "Bound key thing name required to unlock or lock this thing when lockable (create_thing/update_thing).",
        +  "type": "string"
        +}
      • addedInput schema / properties / to
        Added value: +{
        +  "description": "Destination room alias for room_b (create_exit).",
        +  "type": "string"
        +}
  2. 61 tool updatesv1.0.3
    • Removedadventure
    • Removedcharacter
    • Removedcodex
    • Removedcombat
    • Removedcommand
    • Removedcondition
    • Removedcountdown
    • Removedfaction
    • Removedfate
    • Removedforged
    • Removedhelp
    • Removedironsworn
    • Removedlore
    • Addedmanage_adventure
    • Addedmanage_agent
    • Addedmanage_belief
    • Addedmanage_causal
    • Addedmanage_character
    • Addedmanage_codex
    • Addedmanage_combat
    • Addedmanage_condition
    • Addedmanage_corpus
    • Addedmanage_countdown
    • Addedmanage_faction
    • Addedmanage_graph
    • Addedmanage_history
    • Addedmanage_identity
    • Addedmanage_index
    • Addedmanage_lore
    • Addedmanage_note
    • Addedmanage_novel
    • Addedmanage_npc
    • Addedmanage_perception
    • Addedmanage_relationship
    • Addedmanage_ruleset
    • Addedmanage_scene
    • Addedmanage_session
    • Addedmanage_story
    • Addedmanage_synthesis
    • Addedmanage_vow
    • Addedmanage_world
    • Removednote
    • Removednovel
    • Removednpc
    • Removedredo
    • Removedrelationship
    • Addedresolve_fate
    • Addedresolve_forged
    • Addedresolve_ironsworn
    • Removedrespond
    • Addedrespond_decision
    • Removedruleset
    • Addedrun_command
    • Removedscene
    • Removedsession
    • Changedset_badge1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "status": {
        +      "description": "Machine-readable result status: OK, NEED_INPUT, WARNING, PARTIAL, or an error category (REQ-002, REQ-548c).",
        +      "type": "string"
        +    },
        +    "text": {
        +      "description": "Human-readable text envelope mirroring the structured result (REQ-001, REQ-548a).",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status"
        +  ],
        +  "type": "object"
        +}
    • Removedstory
    • Removedsynthesis
    • Removedundo
    • Removedvow
    • Removedworld
  3. 6 tool updatesv1.0.2
    • Addedfate
    • Addedforged
    • Addedironsworn
    • Changednpc1 field changed
      • addedInput schema / properties / mind
        Added value: +{
        +  "description": "Optional GM-only NPC mind (create/update).",
        +  "properties": {
        +    "auto_play": {
        +      "description": "When true, the narrator plays this NPC from the directive on initiative.",
        +      "type": "boolean"
        +    },
        +    "directive": {
        +      "description": "Narrator-facing directive describing how to play this NPC (GM only).",
        +      "type": "string"
        +    },
        +    "private_journal": {
        +      "description": "Private journal entries (GM only).",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedsession4 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"recap, verbosity, briefing_order, compress, or health."New value: +"recap, verbosity, briefing_order, compress, health, or subscribe."
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "recap",
        -  "verbosity",
        -  "briefing_order",
        -  "compress",
        -  "health"
        -]New value: +[
        +  "recap",
        +  "verbosity",
        +  "briefing_order",
        +  "compress",
        +  "health",
        +  "subscribe"
        +]
      • addedInput schema / properties / gm_notes
        Added value: +{
        +  "description": "GM-only free-text notes returned only to the Game Master badge (recap).",
        +  "type": "string"
        +}
      • addedInput schema / properties / topics
        Added value: +{
        +  "description": "Notification topics to subscribe to (subscribe).",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedworld3 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"create_room, update_room, remove_room, create_thing, update_thing, remove_thing, create_exit, remove_exit, or convert."New value: +"create_room, update_room, remove_room, create_thing, update_thing, remove_thing, create_exit, remove_exit, convert, or generate."
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "create_room",
        -  "update_room",
        -  "remove_room",
        -  "create_thing",
        -  "update_thing",
        -  "remove_thing",
        -  "create_exit",
        -  "remove_exit",
        -  "convert"
        -]New value: +[
        +  "create_room",
        +  "update_room",
        +  "remove_room",
        +  "create_thing",
        +  "update_thing",
        +  "remove_thing",
        +  "create_exit",
        +  "remove_exit",
        +  "convert",
        +  "generate"
        +]
      • addedInput schema / properties / seed
        Added value: +{
        +  "description": "Deterministic seed (generate).",
        +  "type": "string"
        +}
  4. 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
  5. 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.2/5.0

Scored across 33 tools

Disambiguation4/5

Tools mostly target clearly distinct subsystems, and descriptions include explicit 'Do NOT use when' routing to adjacent tools. However, the large set of knowledge/lore/belief/perception/corpus/causal tools creates several subtle boundaries that an agent must read carefully.

Naming Consistency4/5

Names are consistently snake_case and mostly follow predictable manage_<domain> or resolve_<system> patterns. A few control/session tools like run_command, respond_decision, and set_badge are reasonable but minor deviations from the dominant convention.

Tool Count2/5

With 33 tools, the surface is heavy for agent selection and exceeds the typical well-scoped range. While the domain is broad, many tools are multiplexed command surfaces, making the set feel overgrown rather than tightly scoped.

Completeness5/5

The surface covers a very wide lifecycle: novel management, world model, characters, NPCs, combat, conditions, factions, vows, story/lore/notes, rulesets, codex, session diagnostics, and undo/redo. No obvious major gaps are apparent for the stated narrative-game domain.

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
    -