Skip to main content
Glama

Embers: Tabletop RPG Toolkit

Server Details

Characters, campaigns, adventures & worlds for D&D 5e/5.5e, Pathfinder, Savage Worlds, Fate, & more.

Ownership verified
Status
Healthy
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.8/5.0

Scored across 137 tools

Disambiguation4/5

Tools are grouped under clear domain prefixes (imagine_, play_, vault_) with specific resource-action verbs, so most have distinct purposes. A few near-overlaps like vault_create_character vs vault_build_pc or imagine_get_adventure_page vs imagine_get_adventure_pages could cause hesitation, but detailed descriptions resolve the boundaries.

Naming Consistency4/5

The overwhelming majority follow a consistent verb_noun snake_case convention under domain prefixes (e.g., vault_get_character, play_add_campaign_leg). Minor deviations like whoami, list_rulesets, reply_to_submission, and vault_build_pc break the pattern but are few and easily learned.

Tool Count1/5

With 137 tools, this is an extreme count that exceeds even the 'too many (25+)' band. A toolkit covering imagine, play, vault, submissions, and user management would be far more coherent split into multiple focused servers.

Completeness5/5

The surface is exceptionally complete: full CRUD for adventures, worlds, pages, characters, items, rules, spells, campaigns, sessions, moves, pages, friends, and submissions, plus cross-domain linking and advanced features like PBeM inboxes, linked character sheets, and level-up wizards. No obvious dead ends or missing core operations.

Available Tools

137 tools
create_submissionReport a bug or request a featureAInspect

File a bug report or a feature request with Embers on the calling user's behalf. Pass type (bug or request), a short title, and a description. Optional attachments are ids from upload_submission_screenshot. Returns the created submission; the user can track it with list_my_submissions and get_submission.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYes`bug` for something broken, `request` for an enhancement.
titleYesShort title. Required.
attachmentsNoUpload ids from upload_submission_screenshot to attach. Optional, up to ten.
descriptionYesWhat happened, or what the user wants. Required.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already mark this as non-read-only, so a create operation is expected. The description adds useful behavioral context beyond that: the submission is filed on the calling user's behalf, it returns the created submission, and the user can track it via the listed tools. No contradiction with 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?

Three tight sentences cover what the tool does, required inputs and the attachment source, and what happens with the result. The most important information is front-loaded before optional detail.

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 4-parameter creation tool with a full schema, required and optional fields are clear, the attachment dependency is stated, and related tracking tools are named. The only omitted items, such as auth or rate limits, are not expected for this kind of straightforward submission tool.

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 schema carries the parameter details. The description still adds value by naming the required parameters in order and clarifying that attachments must be IDs from upload_submission_screenshot, a relationship not fully expressed 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?

The description leads with a specific verb and resource: 'File a bug report or a feature request with Embers...' and explicitly distinguishes the two type values. This makes the tool's purpose unmistakable and sets it apart from tracking tools like get_submission and list_my_submissions.

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

Usage Guidelines4/5

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

The description gives clear context for when to use it: to file a bug or request on the user's behalf. It also points to upload_submission_screenshot for attachments and to get_submission/list_my_submissions for tracking, but it does not explicitly state when not to use it or mention reply_to_submission as the follow-up alternative.

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

get_submissionRead one of my submissionsA
Read-onlyIdempotent
Inspect

Read one of the calling user's submissions: the original report, its screenshots, the current status, and the activity feed (replies both ways and status changes). Pass submissionId from list_my_submissions. Another user's submission is forbidden.

ParametersJSON Schema
NameRequiredDescriptionDefault
submissionIdYesMongo `_id` of one of the caller's submissions (from list_my_submissions).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, establishing the safety profile. The description adds meaningful behavioral context by specifying the exact contents returned (original report, screenshots, current status, activity feed with replies and status changes) and the access restriction. This goes beyond what annotations provide.

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

Conciseness5/5

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

The description is a single, information-dense sentence that leads with the core purpose, then details the return contents, the source of the parameter, and the restriction. Every clause earns its place, and there is no filler or 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?

Given there is an output schema (not shown but indicated), the description need not explain return format. It covers the scope, the contents, the parameter source, and the access constraint. For a simple read tool with one parameter, this is complete and unambiguous.

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

Parameters3/5

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

The schema already provides a complete description of submissionId ('Mongo `_id` of one of the caller's submissions (from list_my_submissions)') with 100% coverage. The description repeats the source (list_my_submissions) but adds no new semantics beyond what the schema already states, so it stays at the baseline of 3.

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

Purpose5/5

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

The description clearly states the verb ('Read') and the resource ('one of the calling user's submissions') and enumerates exactly what is returned (original report, screenshots, current status, activity feed). It also differentiates this from list_my_submissions by referencing it as the source of the ID, and from other submission tools (create, reply, upload) by its read-only nature.

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

Usage Guidelines4/5

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

The description explicitly instructs how to obtain the parameter ('Pass `submissionId` from list_my_submissions') and includes a strong constraint ('Another user's submission is forbidden'). However, it does not explicitly contrast with alternative tools like reply_to_submission or upload_submission_screenshot, though the read-only intent is clear from the description and annotations.

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

imagine_create_adventureCreate an adventureAInspect

Create a new adventure owned by the calling user. Required: name and ruleset (imagine has no app-wide ruleset default for adventures). Other fields pass through to imagine.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate this is a mutating, non-idempotent, non-destructive operation. The description adds valuable context: ownership by the calling user, the lack of a default ruleset, and pass-through behavior for other fields. 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.

Conciseness5/5

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

Three sentences, front-loaded with the core operation, then required fields, then a short pass-through note. Every sentence earns its place; there is no filler or repetition of schema/annotations.

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 an empty input schema, the description covers ownership, required fields, and the no-default ruleset rule; output schema exists so return values do not need explanation. The phrase 'other fields pass through to imagine' is somewhat vague, leaving some ambiguity about accepted input structure.

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

Parameters4/5

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

The input schema has zero documented properties, so the description carries the full burden of parameter education. It names the required parameters (name and ruleset) and notes that other fields pass through, but it does not specify types, formats, or how pass-through fields are represented.

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 action and resource: 'Create a new adventure,' and adds ownership context ('owned by the calling user'). It clearly distinguishes this from sibling tools like imagine_create_adventure_page or imagine_create_world by naming the resource and its required fields.

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

Usage Guidelines4/5

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

The description gives clear conditions for invocation: name and ruleset are required because there is no app-wide ruleset default for adventures. It does not explicitly name alternatives or state when not to use this tool, so exclusion guidance is missing.

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

imagine_create_adventure_pageCreate an adventure pageAInspect

Create a new page inside an adventure. Required: adventureId, name. Use this for scene descriptions, encounter rooms, NPC profiles, plot beats. Valid documentType values: generic, act, scene, location, character, handout, lore, appendix, map. Items and rules are NOT page types; author them in vault and reference them, not as adventure pages. Set the tags array so the page is filterable in adventure-page listings; the page's documentType is also auto-added to the searchable keyword set.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already establish that this is a non-read, non-destructive, open-world operation. The description adds useful behavioral details beyond that: required fields (adventureId, name), the tags array for filterability, and the automatic addition of documentType to the searchable keyword set. It does not address auth or side effects, but it goes well beyond what annotations alone provide.

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 efficiently structured and front-loaded with the action and required fields. The list of valid documentType values is lengthy but necessary, and every sentence adds operational value. A slight tightening could combine the use-case and negative-guidance sentences, but there is no wasted content.

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 the empty schema, the description covers all core invocation concerns: required parameters, valid enum values, intended use cases, excluded page types, and the tagging/keyword behavior. With an output schema presentatoire, the absence of return-value detail is not a gap. The agent can select and call this tool correctly based solely on the description.

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

Parameters5/5

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

The input schema is empty, so the description is the only source of parameter knowledge. It compensates fully by naming the required parameters (adventureId, name), enumerating valid documentType values, explaining the tags array use, and explicitly excluding items/rules as page types. This gives the agent everything it needs to construct a valid call despite the empty schema.

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

Purpose5/5

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

The description states a specific verb and resource: 'Create a new page inside an adventure.' It also lists concrete use cases (scene descriptions, encounter rooms, NPC profiles, plot beats) that distinguish it from related tools like world-page creation. The negative guidance about items and rules further disambiguates the tool's scope.

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

Usage Guidelines5/5

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

The description explicitly says when to use this tool ('Use this for scene descriptions, encounter rooms, NPC profiles, plot beats') and when not to ('Items and rules are NOT page types'). It names the alternative approach: author those in the vault and reference them, not as adventure pages. This gives the agent clear routing guidance without needing to inspect other tools.

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

imagine_create_worldCreate an imagine worldAInspect

Create a new world owned by the calling user. Required: name. Other fields (summary, description, link) pass through to imagine, which validates and assigns defaults where appropriate. Worlds do not carry a ruleset of their own; ruleset lives on the adventure(s) under the world instead.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate this is a non-read-only, non-idempotent mutation, and the description adds that the world is owned by the calling user and that fields pass through to imagine for validation/defaulting. It also discloses a non-obvious data-model behavior: worlds do not carry a ruleset, rulesets live on adventures. 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.

Conciseness5/5

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

Three tight sentences front-load the action first, then add required/optional fields and one clarifying domain rule. There is no filler and no unnecessary repetition of annotation information.

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

Completeness3/5

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

The description covers ownership, required input, and the world/adventure ruleset relationship, and an output schema exists to explain return values. However, the input schema declares an empty object while the description says `name` is required, leaving an agent with contradictory invocation guidance. It also omits what defaults 'imagine' assigns and any error conditions.

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?

Even though the input schema has zero properties, the description identifies `name` as required and `summary`, `description`, and `link` as additional pass-through fields, which is essential semantic content the schema lacks. It does not provide types or format details, but with 0 schema params this meaningfully exceeds the 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?

The first sentence uses a specific verb ('Create') and resource ('new world') and adds ownership ('owned by the calling user'). This distinguishes it from siblings like imagine_create_world_page and imagine_create_adventure by naming the exact resource being created. The final sentence further clarifies the world-vs-adventure model.

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

Usage Guidelines3/5

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

The description states what the tool does and gives a structural hint that adventures live under worlds, which helps sequencing. However, it never explicitly says when to prefer this tool over imagine_create_adventure or imagine_create_world_page, and it gives no exclusions or prerequisites beyond the required name.

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

imagine_create_world_pageCreate a world pageAInspect

Create a new page inside a world. Required: worldId, name. Use this for NPCs, locations, organizations, events. Valid documentType values: generic, character, location, organization, event, lore, religion, cosmology. Items and rules are NOT page types; author them in vault and reference them, not as world pages. Set the tags array so the page is filterable via imagine_list_world_pages_by_tags; the page's documentType is also auto-added to the searchable keyword set. Pass visibility: 'gm' for a GM-only page (invisible to non-contributors: 404s, absent from lists) or visibility: 'masked' for a page that participates in lists and backlinks under maskName ('Redacted' when unset) with its real name, link, and content hidden until revealed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing important side effects: 'gm' pages 404 and disappear from lists for non-contributors, 'masked' pages still appear in lists/backlinks under a maskName, and documentType is auto-added to searchable keywords. These details are not visible in the annotations or schema.

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?

Long and information-dense, with each clause carrying distinct value. It could be structured more scannably, but no sentence is wasted and the most critical info (required fields and purpose) appears early.

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 creation tool with an empty input schema, the description is unusually complete: required parameters, optional parameters, enums, cross-tool tag integration, visibility side effects, and exclusion rules are all covered. An output schema is present, so omitting the return shape is acceptable.

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

Parameters5/5

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

The input schema is empty, so the description is the only source of parameter meaning. It defines required worldId and name, enumerates all valid documentType values, explains the tags array behavior, and details visibility and maskName semantics. This fully compensates for the empty 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: 'Create a new page inside a world.' It enumerates intended content types (NPCs, locations, organizations, events) and explicitly excludes items/rules, drawing a clear boundary against sibling tools like imagine_create_world and imagine_create_adventure_page.

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

Usage Guidelines5/5

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

Provides explicit when-to-use guidance: valid documentType values are listed, items and rules are routed to vault instead of world pages, and the tag mechanism is tied to a specific sibling tool, imagine_list_world_pages_by_tags. Visibility modes also give conditional usage instructions.

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

imagine_delete_adventureDelete an adventureA
DestructiveIdempotent
Inspect

Soft-delete an adventure by id. The adventure is moved to the user's deleted-adventures list and can be restored from the imagine UI. Pages inside are tombstoned with it. Caller must have 'edit'. Destructive. Confirm with the user first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the adventure.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
deletedNo

TDQS

A4.5/5.0
Behavior5/5

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

Even with annotations already marking destructiveHint=true and readOnlyHint=false, the description adds valuable behavioral detail: soft-delete semantics, movement to the deleted list, restoration via UI, tombstoning of pages, required permission, and the instruction to confirm with the user. This goes well beyond the annotations and gives the agent a clear model of side effects.

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

Conciseness5/5

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

The description is compact and front-loaded: the core action appears first, followed by key behavioral consequences and usage warnings. Every sentence contributes useful information, and there is no redundancy or 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 one-parameter delete tool with an output schema present, the description covers the essential action, side effects, permission requirement, restore path, and safety caveat. 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?

The schema already provides 100% coverage for the single `id` parameter, describing it as the Mongo `_id` of the adventure. The description adds no further parameter detail, but with full schema coverage, the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb and resource: 'Soft-delete an adventure by id.' It also clarifies the deletion mode (soft-delete) and names the target resource (adventure), making it easy to distinguish from sibling tools like imagine_delete_adventure_page or imagine_delete_world.

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

Usage Guidelines4/5

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

The description provides clear usage context: the caller must have 'edit', must confirm with the user first, and the operation is destructive. It also explains that the adventure is moved to a deleted-adventures list and can be restored via the UI, which gives practical guidance. It does not explicitly name an alternative tool for when-not-to-use, but the resource scoping is clear.

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

imagine_delete_adventure_pageDelete an adventure pageA
DestructiveIdempotent
Inspect

Permanently delete an adventure page by id. Imagine does not soft-delete pages, so this is unrecoverable. Caller must own or have edit access on the page. Destructive. Confirm with the user first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the adventure page.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
deletedNo

TDQS

A4.5/5.0
Behavior5/5

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

Description clearly discloses irreversibility ('unrecoverable', 'does not soft-delete'), access requirements, and destructiveness. This adds meaningful context beyond the destructiveHint and idempotentHint annotations, especially emphasizing the need for user confirmation.

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

Conciseness5/5

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

Three short, information-dense sentences with no filler. The main action is front-loaded, followed by critical irreversibility, access, and safety guidance. Every sentence earns its place.

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

Completeness5/5

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

For a one-parameter destructive operation with output schema presentfallback, the description covers the essential behavioral aspects: what it does, irreversibility, access requirements, and user-confirmation requirement. Nothing an agent needs to call 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 coverage is 100%: the only parameter 'id' is fully described as a Mongo _id. The description adds only 'by id', which repeats the schema. No additional parameter meaning is necessary, so baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb (delete) and resource (adventure page by id). The phrase 'Permanently delete' plus 'does not soft-delete' distinguishes this from similar delete tools for other resources and from update tools.

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

Usage Guidelines4/5

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

Provides explicit context: caller must own or have edit access, and should confirm with the user first. It does not explicitly name alternatives or exclusion conditions, but the prerequisites and confirmation guidance make usage conditions clear.

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

imagine_delete_worldDelete an imagine worldA
DestructiveIdempotent
Inspect

Soft-delete a world by id. The world is moved to the user's deleted-worlds list and can be restored from the imagine UI. Pages and adventures inside are tombstoned with it. Caller must have 'edit' access. Destructive. Confirm with the user first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the world.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
deletedNo

TDQS

A4.5/5.0
Behavior5/5

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

The annotations already carry destructiveHint=true, readOnlyHint=false, idempotentHint=true, and openWorldHint=true. The description adds meaningful behavioral context beyond those flags: soft-delete rather than hard delete, the deleted-worlds list side effect, restorability from the UI, child tombstoning, and the edit permission requirement. No contradiction exists.

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 deliver the core action, side effects, access requirement, and a safety caution without redundancy. The most important facts are front-loaded, and every sentence adds useful 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?

The definition fully covers what happens, what else is affected, who may call it, and the required user confirmation. With a single parameter, a well-documented schema, and the presence of an output schema, nothing essential is missing for an agent to select and 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 coverage is 100% and the single parameter already has a clear description as the Mongo `_id` of the world. The description only repeats 'by id' without adding format, source, or validation details, so it doesn't add much beyond the schema. This meets the baseline for high schema coverage.

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

Purpose5/5

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

The description uses a specific verb ('soft-delete'), a clear resource ('a world by id'), and precise scope ('the world is moved to the user's deleted-worlds list'). It also distinguishes this from sibling delete tools by noting pages and adventures are tombstoned with it, so an agent can tell it apart from imagine_delete_adventure and imagine_delete_world_page.

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

Usage Guidelines4/5

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

It gives clear usage context: the caller needs 'edit' access, the operation is destructive, and the user must confirm first. It doesn't explicitly name alternatives or state when not to use it, but the soft-delete/restore framing plus the sibling list makes the appropriate usage reasonably clear.

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

imagine_delete_world_pageDelete a world pageA
DestructiveIdempotent
Inspect

Soft-delete a world page by id. The page is moved to the world's trash, keeps its link and aliases reserved, and can be restored from the imagine UI for 45 days before it is purged permanently. Caller must own or have edit access on the page. Destructive. Confirm with the user first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the world page.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
deletedNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true, but the description adds crucial context: the page moves to trash, keeps link and aliases reserved, restore window of 45 days, and permanent purge after. This goes beyond annotations by clarifying the soft-delete nature, which is essential for the agent to know the action is reversible. Slight deduction for not specifying exact response format, but the description is behaviorally rich.

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

Conciseness5/5

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

The description is a compact paragraph of four sentences, each with a purpose: what it does, what happens after, who can call it, and the safety warning. It front-loads the key actionable verb 'soft-delete' and does not waste words.

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

Completeness4/5

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

Given the tool is simple with one parameter, the description covers the action, outcome, permissions, reversibility, and safety confirmation. It doesn't describe return values, but there is an output schema (though its content is not provided in the context), so the description needn't. It also doesn't mention error conditions, but for a delete tool this is not critical. Overall, it is nearly complete.

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% and the schema describes the 'id' parameter as 'Mongo _id of the world page.' The description doesn't add much about the parameter, but since the schema is complete, baseline is 3. Credit for the description's phrase 'by id' which reinforces the parameter's role, but most semantic weight is on the schema. Thus 4 is justified for not needing more.

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

Purpose5/5

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

The description clearly states the verb (soft-delete), the resource (world page by id), and the key behavioral nuance (soft-delete vs delete). It distinguishes itself from sibling delete tools like imagine_delete_world and imagine_delete_adventure_page by specifying 'world page' and the soft-delete mechanism.

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 states when to use: caller must own or have edit access, and confirms the user before use. It also implies when not to use by contrasting with other delete tools (which likely do hard deletes) via the soft-delete detail. It provides clear prerequisites and safety steps.

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

imagine_generate_draconic_nameGenerate draconic namesA
Read-only
Inspect

Generate dragon names using the harsh phonetics of the Draconic tongue. Returns an array of names.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoHow many names to generate (1–50). Defaults to 5.
lengthNoPreferred name length. Defaults to medium.
includeEpithetNoAppend a draconic epithet. Defaults to false.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read/generation operation. The description adds the behavioral trait that it returns an array of names, which is useful. However, it does not disclose details like randomness, uniqueness, or whether the same input yields different outputs, which would be valuable for a generation tool. The description does not contradict 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 two sentences and front-loads the core purpose. The second sentence about the return type is useful but could be considered redundant given the output schema exists. Still, it is concise and every sentence earns its place.

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

Completeness4/5

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

Given the tool's simplicity, the output schema, and the annotations covering safety, the description is nearly complete. It could mention that the tool is non-deterministic or that names are randomly generated, but for a simple name generator with fully documented parameters, the current description is adequate.

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 three parameters (count, length, includeEpithet) with descriptions and defaults. The description adds no additional parameter-level meaning beyond what the schema provides. Baseline 3 is appropriate because the schema does the heavy lifting.

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

Purpose5/5

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

The description uses a specific verb ('generate') and resource ('draconic names'), and the title 'imagine_generate_draconic_name' is clearly reflected. It distinguishes itself from sibling tools like imagine_generate_npc by focusing on name generation, and the description's mention of 'harsh phonetics of the Draconic tongue' adds flavor that clarifies the resource.

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

Usage Guidelines4/5

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

The description implies a creative-generation use case, and the sibling list shows many other generation tools (e.g., imagine_generate_npc, vault_build_monster), but the description does not explicitly state when to use this tool versus alternatives. It is clear enough for an agent to infer that this is for generating draconic names, not NPCs or other entities, but it lacks explicit when/when-not guidance.

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

imagine_generate_npcGenerate an NPCA
Read-only
Inspect

Generate a random NPC with personality, occupation, and (optionally) a secret. Returns an NPC object.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeSecretNoInclude a hidden secret for the NPC. Defaults to true.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=false. The description adds useful context by noting the output is a random NPC object and that a secret may be included. It does not contradict the annotations, though it adds only modest behavioral detail beyond what annotations convey.

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

Conciseness5/5

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

A single sentence communicates the tool's purpose, contents, optionality, and return type with no filler. Every element earns its place, and the core action is front-loaded.

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

Completeness4/5

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

For a simple tool with one optional parameter, full schema coverage, an output schema, and safety annotations, the description is sufficiently complete. It lacks explicit usage guidance or alternatives, but nothing essential to invoking 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 coverage is 100%, and the single parameter includeSecret already has a clear description with its default value. The main description's phrase '(optionally) a secret' adds no meaningful information beyond the schema, so the baseline of 3 applies.

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

Purpose5/5

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

The description states a specific action ('Generate'), a clear resource ('a random NPC'), and the key content fields (personality, occupation, optional secret), plus the return type. This clearly distinguishes it from sibling tools like vault_create_character or imagine_generate_draconic_name, even without explicitly naming them.

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

Usage Guidelines3/5

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

The intended use is implied: call this when you need a random NPC with personality and occupation. However, it does not mention alternatives or exclusion criteria, such as when to use vault_build_pc/vault_create_character for a hand-crafted character instead. The context is clear but not explicit.

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

imagine_get_adventureGet an adventureA
Read-onlyIdempotent
Inspect

Fetch one adventure by id with its settings, ruleset, recommended level, and any user-linked play campaigns. The campaign link is informational only and is set by the user; imagine and play do not auto-sync state between them. If the adventure is one part of a series, parent is populated as { _id, name, link, active } — use imagine_list_adventure_parts on the parent id to see the sibling parts. Caller must have at least 'view' access, with one exception: on a PRIVATE adventure with linked play campaigns, a caller who is a member (owner or accepted player) of one of those campaigns gets a minimal recaps-only shape instead of a 403 — { _id, name, link, image, recapsOnly: true, hasLinkedCampaigns: true }, enough to call imagine_get_adventure_recaps, none of the adventure content. Non-owner viewers of public adventures get a hasLinkedCampaigns boolean in place of the stripped playCampaignIds.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the adventure.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark readOnly/idempotent/non-destructive, and the description adds the permission exception (private adventure + campaign member => recaps-only 200 instead of 403) and shape variations (`recapsOnly`, `hasLinkedCampaigns` vs `playCampaignIds`). It also clarifies the informational campaign-link behavior, which is not visible in 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 long but every clause carries a distinct fact: payload, campaign non-sync, parent-series handling, and the auth exception. The main action is front-loaded, with edge-case detail following in a logical order.

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 a one-parameter schema and an output schema present, the description covers all call-relevant context: access requirements, exceptions, related-tool routing, and linked-campaign behavior. No critical gap remains for an agent 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?

The single `id` parameter is already described in the schema as a Mongo `_id` with minLength 1 (coverage 100%), so the description has little left to add. It reinforces that the operation is by-id and mentions `parent` ids, but does not alter or extend the schema 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?

The description opens with a specific verb+resource: 'Fetch one adventure by id,' and enumerates the payload components (settings, ruleset, recommended level, linked play campaigns). It clearly differentiates from the sibling list/recap tools, and the parent-series clause names the exact sibling for related parts.

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 explicitly routes to imagine_list_adventure_parts when a parent is populated, and notes the minimal shape is 'enough to call imagine_get_adventure_recaps.' It also warns that imagine and play do not auto-sync state, preventing misuse of the campaign link.

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

imagine_get_adventure_pageGet an adventure pageA
Read-onlyIdempotent
Inspect

Fetch one adventure page by id with its full markdown body, tags, and parent reference. By default the gateway dereferences bracketed tag-* and child-* shortcodes and inlines a compact <expansion> block right after each literal. (rule-* shortcodes are NOT expanded on adventure pages because adventures do not carry a curated rule / spell / item association list; they remain as literals.) Pass raw: true to skip expansion when round-tripping the body back through imagine_update_adventure_page. Cross-references in the response: parent (resolve via imagine_get_adventure_page), worldPageRefs (array of world-page ids, resolve via imagine_get_world_page), and vaultRefs (array of {vaultId, type, count} for rules / spells / items / characters; resolve via the matching vault_get_* tool by type). Pair with imagine_list_adventure_pages to locate the id first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the adventure page.
rawNoWhen true, return the page body verbatim with bracketed shortcodes left as literals. Default: shortcodes are dereferenced and a compact <expansion> block is inlined after each literal. Pass raw=true when round-tripping a body back through imagine_update_adventure_page.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

The description discloses the default dereferencing behavior, the fact that rule-* shortcodes are NOT expanded and why, and the raw:true escape hatch. It also explains the shape of cross-references (parent, worldPageRefs, vaultRefs) and how to resolve them. This goes well beyond the annotations (readOnly, idempotent, non-destructive) and adds real behavioral context.

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

Conciseness4/5

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

The description is dense but well-organized: it front-loads the core fetch behavior, then explains expansion behavior, then cross-reference resolution, then pairing with the list tool. Every sentence earns its place, though the cross-reference sentence is long and could be slightly more 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?

Given the output schema exists and the annotations cover safety, the description covers everything an agent needs: what is returned, how expansion works, when to use raw, how to resolve cross-references, and how to find the id. No critical gap remains.

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 schema already documents both parameters. The description adds value by explaining the default vs raw behavior and the round-tripping use case, which enriches the raw parameter's meaning beyond the schema's description. The id parameter is straightforward and needs no extra 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 clearly states the tool fetches one adventure page by id, and specifies the returned content (markdown body, tags, parent reference). It also distinguishes itself from sibling tools like imagine_get_adventure_pages (plural) and imagine_get_world_page by naming the resource type and the resolution targets.

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

Usage Guidelines5/5

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

The description explicitly explains when to use raw:true (round-tripping through imagine_update_adventure_page) and when not to (default expansion). It also tells the agent to pair with imagine_list_adventure_pages to locate the id first, and gives resolution guidance for cross-references. This is strong usage guidance.

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

imagine_get_adventure_pagesGet many adventure pages at onceA
Read-onlyIdempotent
Inspect

Batch read of adventure pages by id (up to 50 per call). Use this when you need to walk an act and read several scenes' bodies — one call instead of one tool invocation per page. Each returned page carries the same shape imagine_get_adventure_page produces (full markdown body, ancestors, prev/next sibling navigation, expanded shortcodes by default). The response is { pages: [...], missing: [...] }; ids the caller can't view, or that don't exist, land silently in missing rather than failing the whole batch.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesMongo `_id` list of adventure pages to fetch. Returns each page's full body, ancestors, and prev/next-sibling navigation in one round trip. Cap: 50 ids per request. Pages the caller can't view are silently omitted into a separate `missing` list rather than failing the batch.
rawNoWhen true, return each page body verbatim with bracketed shortcodes left as literals. Default: shortcodes are dereferenced and a compact <expansion> block is inlined after each literal, same as imagine_get_adventure_page.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already mark the tool read-only and idempotent; the description adds valuable behavior beyond that: silent omission into a `missing` array instead of failing the batch, the 50-id cap, and default shortcode expansion with a raw escape hatch. These details materially affect how an agent interprets results.

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 dense sentences cover operation+cap, use case, return shape, and failure semantics with no filler. The most decision-relevant facts are front-loaded, and every sentence earns its place.

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

Completeness5/5

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

Together with the rich schema and output schema, the description gives the agent everything needed to invoke the tool correctly: batch limits, per-page output shape, shortcode behavior, and the distinction between returned pages and missing ids. Nothing relevant is left unexplained.

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

Parameters3/5

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

The input schema already documents both parameters in detail: Mongo `_id` list, 50-id cap, silent missing behavior, and the raw toggle. The description adds the return-shape relationship to imagine_get_adventure_page, but that is contextual framing rather than new parameter-level semantics. With 100% schema coverage, 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?

States a specific operation and resource: 'Batch read of adventure pages by id.' The 50-per-call cap and the reference to imagine_get_adventure_page clearly distinguish this from the single-page sibling, so an agent can identify it at a glance.

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

Usage Guidelines4/5

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

Explicitly recommends this tool when walking an act and reading several scenes' bodies, framing it as one call instead of one tool invocation per page. It doesn't explicitly spell out the reverse case ('use imagine_get_adventure_page for a single page'), but the use context and sibling relationship are clear enough.

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

imagine_get_adventure_recapsGet the session recaps for an adventureA
Read-onlyIdempotent
Inspect

Fetch the play-session recaps written while running this adventure, grouped by linked play campaign. Each campaign entry carries the sessions tagged with this adventure (via the session's imagineAdventureId) in date order, and each session carries its player-recap pages (author + markdown body). Read-through to play: the caller must be a member (owner or accepted player) of a linked campaign to read its sessions — on a PRIVATE adventure this is the recaps-only path. Recap visibility follows play's page rules: public recaps plus the caller's own private ones. Campaigns with no tagged sessions are omitted. Returns { campaigns: [] } when the adventure has no linked campaigns or nothing is visible to the caller. This replaces the manual walk of play_list_campaign_sessions + play_list_pages per session.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the adventure.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the readOnly/idempotent/non-destructive annotations, the description discloses important behavioral details: caller must be a campaign member, visibility follows play page rules, campaigns without tagged sessions are omitted, and the empty result shape is `{ campaigns: [] }`. This is exactly the kind of access-control and filtering context annotations do not capture.

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 dense but purposeful, covering purpose, data shape, access rules, empty behavior, and the manual alternative in roughly four sentences. It is front-loaded with the core action and grouping, though the middle data-shape sentence is somewhat detailed given that an output schema already exists.

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 read-only fetch tool with one well-documented parameter and an output schema, the description is complete: it explains what is fetched, how results are grouped, who can access what, when campaigns are omitted, and what the empty response looks like. 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?

The single parameter `id` is already fully documented in the schema as the Mongo `_id` of the adventure, so the schema description coverage is 100%. The description adds no new parameter-level detail, but it does reference 'this adventure' contextually; baseline 3 is appropriate when the schema carries the 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?

The first sentence states a specific verb ('Fetch'), a precise resource ('play-session recaps written while running this adventure'), and the grouping behavior ('grouped by linked play campaign'). It also explicitly distinguishes itself from the manual walk of play_list_campaign_sessions + play_list_pages, so an agent can separate it from siblings.

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

Usage Guidelines4/5

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

The description gives clear context: it is the recaps-only path for private adventures, requires membership in a linked campaign, and is positioned as the replacement for a manual multi-tool walk. It does not explicitly state when-not to use it versus sibling listing tools, but the alternative is named and the access conditions make usage clear.

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

imagine_get_worldGet an imagine worldA
Read-onlyIdempotent
Inspect

Fetch one world by id with its settings, membership, and any user-linked play campaigns. The campaign link is informational only and is not auto-synced. Caller must have at least 'view' access to the world.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the world.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds valuable behavioral context beyond that: the campaign link is informational only and not auto-synced, and the caller must have view access. These details help the agent understand the tool's side effects and authorization requirements, which annotations do not provide.

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

Conciseness5/5

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

The description is three sentences with no waste. The first sentence states the primary purpose and return content, the second clarifies a critical caveat, and the third states a permission prerequisite. It is front-loaded and every sentence earns its place.

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

Completeness5/5

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

Given the tool has an output schema (indicated) and only one parameter, the description is complete for correct invocation. It covers what the tool returns, the caveat about campaign links, and the required access level. No essential behavioral or usage information 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 coverage is 100% for the single parameter 'id', which is described as 'Mongo _id of the world'. The description does not add additional semantics beyond restating that it fetches by id; it does not provide format examples or extra constraints. Since the schema fully documents the parameter, a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'Fetch', the resource 'world', the identifier 'by id', and enumerates the specific data returned (settings, membership, user-linked play campaigns). It differentiates from sibling tools like imagine_get_world_page or imagine_list_my_worlds by specifying the exact scope and fields, so an agent can distinguish it 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 Guidelines4/5

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

The description provides a clear context: it is for fetching a single world by id with specific details, and it explicitly states the permission requirement ('Caller must have at least view access'). However, it does not explicitly mention when not to use it or name alternatives (e.g., imagine_list_my_worlds for listing), so it lacks explicit exclusions but still gives clear usage context.

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

imagine_get_world_pageGet a world pageA
Read-onlyIdempotent
Inspect

Fetch one world page by id with its full markdown body, tags, and parent reference. By default the gateway dereferences bracketed shortcodes (tag-, child-, rule-*) and inlines a compact <expansion> block right after each literal so the LLM has the resolved content alongside what the author wrote. The original literal is preserved. Pass raw: true to skip expansion (useful when round-tripping the body back through imagine_update_world_page). Cross-references in the response: parent (another world page, resolve via imagine_get_world_page) and vaultCharacterId (vault character, resolve via vault_get_character). Pair with imagine_list_world_pages or imagine_search_world_pages to locate the id first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the world page.
rawNoWhen true, return the page body verbatim with bracketed shortcodes left as literals. Default: shortcodes are dereferenced and a compact <expansion> block is inlined after each literal so the LLM has the same content the human sees rendered. Pass raw=true if you're round-tripping a body back to imagine via imagine_update_world_page.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint=true, idempotentHint=true), the description discloses the default expansion behavior (dereferencing shortcodes and inlining <expansion> blocks) and the preservation of the original literal. It also clarifies the effect of raw:true, providing substantial behavioral detail that the annotations do not cover.

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 dense but each sentence serves a purpose: it starts with the core operation, then explains the default expansion, the raw override, cross-reference resolution, and how to locate the id. It is longer than strictly necessary but well-structured and front-loaded with the main function.

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 the output schema exists, the description appropriately omits return format details, but it adds valuable cross-reference resolution hints (parent and vaultCharacterId) and workflow guidance on locating the id. The tool is fully contextualized for an agent 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?

Both parameters are fully described in the input schema (100% coverage), so the baseline is 3. The description re-explains the raw parameter's behavior and adds a round-tripping use case, but this adds only marginal value beyond the schema, not enough to raise the score.

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 and resource ('Fetch one world page by id') and enumerates the returned content (full markdown body, tags, parent reference). It differentiates itself from siblings by pairing with list/search tools to locate the id, implying this tool is for retrieval of a single known page.

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

Usage Guidelines4/5

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

It explicitly advises pairing with imagine_list_world_pages or imagine_search_world_pages to locate the id, and explains the raw:true option for round-tripping bodies back to imagine_update_world_page. This gives clear workflow context, though it does not describe when not to use the tool relative to other getters.

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

imagine_list_adventure_pagesList pages in an adventureA
Read-onlyIdempotent
Inspect

List pages belonging to one adventure. Returns a tree-friendly summary per page (id, name, link, documentType, parent, menuOrder, locationKey, summary, image). Optional narrowing filters: parent (only direct children of that page — useful for an 'open this act' workflow), documentType (only pages of that type — useful for 'list every scene'). Both filters are combinable. Pair with imagine_get_adventure_page (single) or imagine_get_adventure_pages (batch) for full bodies.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the adventure.
parentNoOptional. Mongo `_id` of a parent page. When set, only direct children of that page are returned (an act + its scenes pattern). Use imagine_list_adventure_pages without `parent` first to discover ids.
documentTypeNoOptional. Narrow to a single documentType (e.g. 'scene' to list every scene in the adventure).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, and non-destructive behavior, so the description only needs to add behavioral context. It adds that the result is tree-friendly, that parent filtering returns only direct children, and that both filters are combinable. These details go beyond the schema without contradicting 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?

Three compact sentences with no filler. The core action and return type are front-loaded, followed by filter semantics and sibling guidance. Every sentence earns its place.

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

Completeness5/5

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

An output schema covers the return shape, annotations cover the safety profile, and all three parameters are fully described in both schema and description. Nothing an agent needs to call 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?

The schema already covers all three parameters at 100%, so the baseline is 3. The description adds meaning beyond the schema by clarifying direct-children semantics, showing realistic workflows for each filter, and stating that the filters are combinable.

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 and resource: 'List pages belonging to one adventure,' and immediately clarifies it returns summaries rather than full page bodies. It also distinguishes itself from sibling tools like imagine_get_adventure_page and imagine_get_adventure_pages by naming them and describing the split.

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 concrete when-to-use context for each optional filter: parent for an 'open this act' workflow, documentType for 'list every scene.' It also explicitly tells the agent to pair with imagine_get_adventure_page or imagine_get_adventure_pages when full bodies are needed, making alternatives and exclusions clear.

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

imagine_list_adventure_partsList the parts of a series adventureA
Read-onlyIdempotent
Inspect

List the active parts (child adventures) of a series parent, ordered by menuOrder then name. Adventures can be grouped one level deep: an umbrella adventure (the campaign arc) with full adventures as its parts. Returns slim catalog-card fields per part (id, name, summary, image, ruleset, level, status, stock, link, version, parent, menuOrder). Parts the caller can't view are silently omitted. Returns an empty list for adventures that aren't a series parent. To make an adventure a part, set parent via imagine_update_adventure.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the adventure.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly, idempotent, and non-destructive, so the description adds valuable behavioral context: only active parts are listed, ordering by menuOrder then name, one-level grouping, silent omission of unviewable parts, and empty-list behavior for non-parents. 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.

Conciseness5/5

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

The description is front-loaded with the core action and ordering, then adds behavioral edge cases and return fields without waste. Every sentence earns its place, and the field list is useful because it tells the agent exactly what shape to expect.

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 read-only, single-parameter list tool with an output schema, the description covers all necessary behavior: ordering, active filter, permission-related omission, non-parent result, and how to create parts. Nothing material is missing 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?

The schema already documents the single id parameter with 100% coverage, so the baseline is 3. The description adds meaning by clarifying that the id must be a series parent, which is needed to interpret the empty-list case. This contextual enrichment goes slightly 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?

Description states a precise verb and resource: list active child adventures (parts) of a series parent, with explicit ordering. This distinguishes it from sibling list tools like imagine_list_adventure_pages and imagine_list_my_adventures, so an agent can select it without guessing.

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

Usage Guidelines4/5

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

The description clearly implies the tool is for series-parent adventures and explicitly covers the non-parent case (empty list), plus how to make an adventure a part. It does not name alternative tools, but the context is unambiguous enough for correct selection.

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

imagine_list_my_adventuresList my adventuresA
Read-onlyIdempotent
Inspect

List the adventures the calling user owns or has access to. Returns slim catalog-card fields per adventure (id, name, summary, image, ruleset, level, status, stock, link, version, createdAt, updatedAt, parent, menuOrder). A non-null parent marks the adventure as one part of a series — see imagine_list_adventure_parts. To read a specific adventure's full body and configuration, call imagine_get_adventure with the id.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already establish readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds meaningful context beyond annotations by explaining the slim catalog-card scope, the series semantics of `parent`, and the relationship to detail-fetching tools.

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

Conciseness5/5

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

Three sentences, each earning its place: the first states the core action and scope, the second lists the return fields, and the third handles related-tool routing. It is front-loaded and contains 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?

With an existing output schema, comprehensive annotations, and no parameters, the description covers everything an agent needs to decide to call this tool and interpret the series-parent concept. Pagination and ordering are not mentioned, but nothing in the context signals they are essential for this simple list operation.

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

Parameters4/5

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

The tool has zero parameters and schema coverage is 100%, so there is no parameter documentation gap for the description to fill. The baseline of 4 applies because no semantic burden is placed on the description.

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 and resource: 'List the adventures the calling user owns or has access to.' It clearly differentiates this tool from the related imagine_list_adventure_parts and imagine_get_adventure by stating what this tool returns versus what those tools are for.

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

Usage Guidelines5/5

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

Explicit guidance is provided for related operations: when an adventure has a non-null `parent`, the reader is directed to imagine_list_adventure_parts, and when full body/config is needed, imagine_get_adventure is named. This gives an agent actionable routing without ambiguity.

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

imagine_list_my_worldsList my imagine worldsA
Read-onlyIdempotent
Inspect

List the worlds the calling user owns or has access to via membership. Returns slim catalog-card fields per world (id, name, summary, image, link, createdAt, updatedAt). To read a specific world's full body and configuration, call imagine_get_world with the id.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already cover readOnlyHint, idempotentHint, and destructiveHint. The description adds value by specifying the return fields ('id, name, summary, image, link, createdAt, updatedAt') and the slim catalog-card nature, giving the agent a concrete expectation of output shape beyond what annotations provide. It doesn't contradict 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?

Two sentences, each earning its place. The first sentence states purpose and scope; the second lists return fields and points to the sibling tool. Fully front-loaded, no filler or 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?

For a no-parameter list operation with an output schema already present, the description covers the essential context: scope of access, return field summary, and the escape hatch to get full details. An agent can call it correctly without further info. The description is thorough given the tool's simplicity.

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

Parameters4/5

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

The tool has zero parameters, so the description has no parameter details to add. Per baseline, a 0-param tool gets a 4. The description correctly avoids inventing parameter notes and focuses on behavior.

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 ('List') and resource ('worlds'), and clearly scopes it to 'owns or has access to via membership.' It also distinguishes itself from imagine_get_world, which reads a specific world's full body, so an agent knows this is a catalog listing operation.

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

Usage Guidelines5/5

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

The description explicitly tells the agent when to use this over an alternative: 'To read a specific world's full body and configuration, call imagine_get_world with the id.' This is a clear routing statement. It also implicitly communicates the use case of listing all accessible worlds without needing parameters.

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

imagine_list_world_pagesList pages in a worldA
Read-onlyIdempotent
Inspect

List all pages belonging to one world. Returns a tree-friendly summary (id, name, link, parentId, tags). Pair with imagine_get_world_page to fetch full content.

ParametersJSON Schema
NameRequiredDescriptionDefault
worldIdYesMongo `_id` of the world.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds value beyond them by disclosing the return payload shape (id, name, link, parentId, tags) and that the result is a hierarchy-friendly summary rather than full content.

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

Conciseness5/5

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

Two sentences deliver purpose, return shape, and a companion-tool pointer with no filler. The core scope is front-loaded, making the definition easy to parse quickly.

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

Completeness5/5

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

For a simple read-only list operation with one well-documented parameter, an output schema, and rich safety annotations, the description covers what an agent needs: scope, return type, and how to fetch full content. Nothing critical 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 coverage for the single required parameter is 100%, with worldId described as a Mongo _id. The description only reinforces 'one world' without adding new parameter syntax, format, or edge-case details, so baseline 3 applies.

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

Purpose5/5

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

The description states a specific verb ('List') and resource ('all pages belonging to one world'), and identifies the return format as a tree-friendly summary, which distinguishes it from content-fetching siblings like imagine_get_world_page and tag-filtered variants. This is unambiguous and immediately actionable.

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

Usage Guidelines4/5

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

The description provides clear workflow guidance by pairing this tool with imagine_get_world_page for full content, implying this tool is for summaries and navigation. It does not explicitly contrast with imagine_list_world_pages_by_tags or imagine_search_world_pages, so it misses full exclusionary guidance.

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

imagine_list_world_pages_by_tagsList world pages by tagsA
Read-onlyIdempotent
Inspect

Filter pages within a world by one or more tags. The page's documentType is concatenated into the same keyword set imagine searches, so a tag query of 'character' also matches every page with documentType=character. Use mode='and' to require every tag; mode='or' (default) returns pages matching any tag. Common patterns: all NPCs (tag='npc'), all locations (tag='location'), every character-type page (tag='character').

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoTag-matching mode. 'or' (default) returns pages matching any tag; 'and' requires every tag.
tagsYesComma-separated list of tags (e.g. 'npc,villain' or just 'location').
worldIdYesWorld id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark the operation as read-only, idempotent, and non-destructive, and the description adds valuable hidden behavior: documentType is folded into the same keyword set, so a tag like 'character' also matches documentType=character. It also discloses the default mode ('or'), which is genuinely useful and not obvious from the schema 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 description is compact and front-loaded with the core action, then adds only high-value details about documentType, mode behavior, and common patterns. Every sentence earns its place without 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?

Given the output schema exists, annotations cover safety, and all parameters are documented in the schema, the description provides the remaining behavioral context an agent needs: how tags interact with documentType, the default/mode choices, and typical use cases. Nothing critical is missing 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 coverage is 100%, so the baseline is 3, but the description goes beyond the schema by explaining the unexpected documentType matching behavior and giving concrete tag examples. It clarifies the tags parameter more deeply than the schema's 'comma-separated list' description.

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 and resource: 'Filter pages within a world by one or more tags.' It also clarifies what makes this tool distinct from plain listing/searching by explaining tag matching semantics, so an agent can identify it among siblings like imagine_list_world_pages and imagine_search_world_pages.

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

Usage Guidelines4/5

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

The description gives concrete usage patterns ('all NPCs', 'all locations', 'every character-type page') and explains when to use mode 'and' vs 'or'. It does not explicitly name the sibling alternatives or say when not to use them, but the examples make the intended use clear.

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

imagine_replace_in_adventure_pageReplace text inside one adventure pageA
Idempotent
Inspect

Surgical find-and-replace inside one adventure page's content. Every byte outside the matched ranges is preserved exactly, so this is the safe primitive for terminology passes (e.g. renaming a monster across a page) where imagine_update_adventure_page's whole-body replace would risk dropping formatting whitespace the LLM can't see in JSON. find matches literally (no regex). All occurrences are replaced in a single pass. Optional expectedOccurrences is a staleness guard — when set, a count mismatch returns 409 with no save instead of silently doing a partial edit. Returns { adventurePage, occurrences }.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the adventure page.
findYesLiteral substring to replace inside the page's `content`. Match is literal (no regex); metacharacters are treated as ordinary characters.
replaceYesSubstring to put in place of every occurrence of `find`. May be empty to delete the matched text.
expectedOccurrencesNoOptional staleness guard. When set, the live page MUST contain exactly this many occurrences of `find` or the call fails with 409 and no save lands. Pre-count by fetching the page first if you want this protection.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=true), the description discloses key behaviors: byte-level preservation outside matches, single-pass replacement of all occurrences, the staleness guard returning 409 without saving on count mismatch, and the literal match semantics. This adds substantial behavioral context the annotations do not provide.

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

Conciseness5/5

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

Two sentences with no fluff. The first sentence front-loads the core purpose and key differentiator, the second covers matching, guard, and return. Every phrase earns its place, and the structure is easily 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?

The description covers the essential operational context: the safe usage, the alternative to avoid, the literal matching, the option for a staleness guard with its 409 behavior, and the return format. It even tells the agent to pre-count occurrences if protection is desired. With an output schema available, nothing material 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 coverage is 100%, so the schema already fully documents each parameter, including the literal match behavior and the staleness guard. The description adds context like 'single pass' and return value, but these are already implied by schema descriptions and output schema. It provides no new parameter-specific semantics beyond reinforcing the schema.

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

Purpose5/5

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

The description states a specific verb and resource: 'Replace text inside one adventure page's content'. It distinguishes itself from the sibling imagine_update_adventure_page by emphasizing 'surgical find-and-replace' that preserves every byte outside matched ranges, making its unique intent explicit.

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 usage context: it is the 'safe primitive for terminology passes' and directly contrasts with imagine_update_adventure_page, which 'would risk dropping formatting whitespace the LLM can't see in JSON.' This clearly tells an agent when to pick this tool over the alternative.

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

imagine_search_world_pagesSearch world pages by textA
Read-onlyIdempotent
Inspect

Text search over page titles and raw markdown bodies within one world. Returns ranked summary results. Bracketed shortcodes (e.g. [[tag-card:goblin]]) match as literal text, not by the resolved content of the referenced entity, so this tool can miss content the human sees rendered. For category lookups (NPCs, locations, monsters), prefer imagine_list_world_pages_by_tags with the tag or documentType value.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query text. Required.
worldIdYesMongo `_id` of the world to search within.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds substantial behavioral context beyond annotations: the search scope (titles + raw markdown), the ranked-summary return shape, and critically the shortcode limitation where literal-text matching can miss rendered content. It stops short of pagination or result-limit behavior, but the output schema covers return structure.

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, each earning its place: purpose, return shape, the key gotcha, and the routing alternative. Information is front-loaded (purpose first) with the caveat and sibling guidance after. No filler, no repetition of schema or annotation content.

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 two-parameter read-only search tool, the definition is complete: annotations cover safety, the output schema covers return values, the description covers scope, the known failure mode, and the correct sibling alternative. An agent has everything needed to decide when to call this tool and what to expect from it.

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

Parameters3/5

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

Schema description coverage is 100%: query and worldId each have meaningful descriptions in the schema. The description only marginally augments this by clarifying that the query runs against titles and raw markdown 'within one world,' reinforcing worldId's scoping role. Baseline 3 is appropriate since the schema carries the parameter documentation burden.

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: 'Text search over page titles and raw markdown bodies within one world.' It also explicitly distinguishes itself from the sibling tool imagine_list_world_pages_by_tags by scoping this tool to raw text search and the sibling to category/tag lookups. The title and description align cleanly with no ambiguity.

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

Usage Guidelines5/5

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

Provides explicit routing guidance: 'For category lookups (NPCs, locations, monsters), prefer imagine_list_world_pages_by_tags with the tag or documentType value.' It also flags when results may be incomplete (shortcodes matching literally), so an agent can warn the user or switch strategies. This is rare, explicit when-not-to-use guidance naming the exact alternative.

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

imagine_update_adventureUpdate an adventureA
Idempotent
Inspect

PUT updates to one adventure by id. Only supplied fields are sent. Caller must have 'edit' on the adventure. Series grouping: set parent to group this adventure as one part of an umbrella adventure (depth-1 only — see the field description for the validation rules and the append-to-end ordering default); pass parent: null to ungroup. Renaming an adventure also pushes the new name to every linked play campaign's imagineAdventures[] mirror; that push is non-blocking, so on a play hiccup the rename still succeeds and the mirror name stays stale until the next rename. REQUIRES baseUpdatedAt: copy updatedAt from a fresh imagine_get_adventure read; a stale or fabricated value is rejected with OUT_OF_SYNC and nothing is written.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

The description richly discloses behaviors beyond the annotations: partial update semantics, required 'edit' permission, parent grouping/ungrouping rules, rename propagation with non-blocking push and potential stale mirror state, and OUT_OF_SYNC rejection on stale baseUpdatedAt. No contradiction with annotations exists.

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 core action is front-loaded, and every subsequent sentence addresses a distinct critical behavior: permissions, grouping, rename side effects, and concurrency guard. The description is dense but contains 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?

Given an output schema exists and annotations cover the read/write safety profile, the description supplies everything else needed for correct invocation: authorization, concurrency requirements, side effects, and validation pointers. An agent can call this tool correctly with high confidence.

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

Parameters5/5

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

The input schema has no properties, so the description carries the full parameter burden. It explains id, parent (including null for ungrouping), baseUpdatedAt/updatedAt usage, and points to validation rules and ordering defaults. This is far more useful than the empty schema alone.

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 and resource: 'PUT updates to one adventure by id.' This clearly distinguishes the tool from imagine_update_adventure_page and imagine_update_world, and the scope ('one adventure') is unambiguous.

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

Usage Guidelines4/5

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

The usage context is clear: this is the tool for updating an adventure, with explicit requirements like caller permission and a fresh baseUpdatedAt from imagine_get_adventure. It does not explicitly name alternatives or state when not to use it, but the resource-specific framing makes selection straightforward.

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

imagine_update_adventure_pageUpdate an adventure pageA
Idempotent
Inspect

PUT updates to one adventure page by id. Only supplied fields are sent; every field on the AdventurePage shape (name, content, summary, image, documentType, tags, parentId, link, menuOrder, aliases, details, worldPageRefs, vaultRefs, treasureRefs, scene-shape goal/duration, location-shape locationKey/map/mapPin) can be updated through this tool. Read-aloud / moving-on / tactics are NOT fields — author them inline in content as [[read-aloud]] / [[moving-on]] / [[tactics]] callout blocks. Caller must have 'edit'. WARNING about content: imagine REPLACES the body with whatever you send. To fix wording inside an existing body without losing formatting whitespace, prefer imagine_replace_in_adventure_page (surgical). To append, fetch the page first with imagine_get_adventure_page (raw=true), concatenate, and send the combined body back. REQUIRES baseUpdatedAt: copy updatedAt from a fresh imagine_get_adventure_page read of this page; a stale or fabricated value is rejected with OUT_OF_SYNC and nothing is written — writing from memory of an earlier read is not possible.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations, the description discloses major behavioral traits: only supplied fields are sent, the body is fully replaced, baseUpdatedAt is required, stale/fabricated values cause OUT_OF_SYNC and no write, and special fields like read-aloud/moving-on/tactics are not fields but inline callouts. This greatly exceeds the annotation-provided safety profile.

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 long, but almost every sentence conveys necessary operational or safety-critical information. The field enumeration is a bit exhaustive, and the warning section could be tightened, but the structure is logical: purpose, updatable fields, special syntax, permissions, critical replacement warning, and concurrency requirement.

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 mutation tool with zero schema parameters, this description covers all necessary context: target resource, auth requirement, full field list, special inline syntax, destructive replacement behavior, concurrency control, and explicit alternatives. An agent could correctly invoke this tool with only the description and a fresh read of the page.

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

Parameters5/5

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

The input schema is empty, so the description carries the entire parameter burden. It lists every updatable AdventurePage field and explains the required baseUpdatedAt parameter, its source, and why it matters. This is far more than the schema alone provides.

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 'PUT updates to one adventure page by id', which states a specific verb, resource, and mode of operation. It also enumerates exactly which fields are updatableament and explicitly names related sibling tools (imagine_replace_in_adventure_page, imagine_get_adventure_page), so the agent can distinguish it from similar update 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?

It gives explicit when-to-use guidance: use the surgical sibling for fixing wording, fetch-then-send for appending, and this tool for full field updates. It also states required permissions ('Caller must have 'edit'') and warns against writing from memory. This leaves little ambiguity about when to select this tool versus alternatives.

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

imagine_update_worldUpdate an imagine worldA
Idempotent
Inspect

PUT updates to one world by id. Caller must have 'edit' access. Only supplied fields are sent; imagine merges them onto the existing document. REQUIRES baseUpdatedAt: copy updatedAt from a fresh imagine_get_world read; a stale or fabricated value is rejected with OUT_OF_SYNC and nothing is written.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations, it reveals the merge behavior ('only supplied fields... merges them'), the optimistic concurrency requirement, and the failure mode (OUT_OF_SYNC, nothing written). This is exactly the behavioral context that helps an agent predict consequences and is consistent with the readOnlyHint=false and destructiveHint=false 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?

Every sentence is load-bearing and the core action is front-loaded. The description packs access control, merge semantics, and concurrency behavior into four short sentences with no filler.

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

Completeness4/5

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

The definition covers access, update mechanics, required optimistic-lock field, stale rejection, and no-write-on-failure. The only minor gap is that the world id itself is not specified as a literal input key, and updatable world fields are left to inference, but these are recoverable from the tool name and the referenced get_world read.

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

Parameters4/5

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

With an empty input schema, the description is the only source of parameter meaning, and it clearly names the required baseUpdatedAt field and its value source. It does not enumerate other updatable fields or the exact key for the world id, but the merge semantics plus openWorldHint make the rest inferable from the world document returned by get_world.

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 opening clause 'PUT updates to one world by id' names the verb, the resource, and the identifying scope in one compact sentence. This clearly differentiates it from the sibling update tools for adventure, adventure_page, and world_page without needing to compare schemas.

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

Usage Guidelines4/5

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

The description states the authorization precondition ('must have edit access') and gives a precise usage requirement: copy updatedAt from a fresh imagine_get_world read and supply it as baseUpdatedAt. It does not explicitly list alternatives or when-not-to-use, but the context is clear enough that an agent can decide to call this tool for world updates.

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

imagine_update_world_pageUpdate a world pageA
Idempotent
Inspect

PUT updates to one world page by id. Only supplied fields are sent. Caller must have 'edit' on the world page. Imagine REPLACES the content body with whatever you send. To append, fetch the page first with imagine_get_world_page, concatenate, and send the combined body back. REQUIRES baseUpdatedAt: copy updatedAt from a fresh imagine_get_world_page read of this page; a stale or fabricated value is rejected with OUT_OF_SYNC and nothing is written — writing from memory of an earlier read is not possible. Set visibility: 'gm' to make a page GM-only (owner/contributors only; hidden from and 404 for everyone else), 'masked' to keep it participating in lists/backlinks under maskName with the real identity hidden, or 'public' to reveal it. Hidden pages are stripped from the world menu.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

The description discloses critical behavioral traits beyond annotations: it REPLACES the content body, requires baseUpdatedAt to be fresh (stale/fabricated values rejected with OUT_OF_SYNC), and explains the exact behavior of visibility settings (gm, masked, public) including that hidden pages are stripped from the world menu. This is rich behavioral context that annotations alone don't provide. The annotations (readOnlyHint=false, idempotentHint=true) are consistent with the description's PUT semantics.

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 dense but well-structured: it front-loads the core operation, then explains the replacement behavior, the baseUpdatedAt requirement, and visibility options. Every sentence adds value, though the visibility section is somewhat long. It's appropriately sized for the complexity of the tool.

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 description is complete for a complex update tool. It covers the replacement semantics, the concurrency requirement (baseUpdatedAt), the visibility options, and the append workflow. The output schema exists, so return values don't need explanation. The description gives an agent everything needed to call this tool correctly without guessing.

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

Parameters4/5

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

The input schema has zero parameters, so the description carries the full burden of explaining what fields the caller must supply. The description explains the key fields: content body, baseUpdatedAt, and visibility. However, it doesn't enumerate all possible fields (e.g., name, maskName) explicitly, though it mentions maskName in the visibility explanation. With 0 params in schema, baseline is 4, and the description adds substantial meaning about the required fields.

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

Purpose5/5

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

The description clearly states the operation: 'PUT updates to one world page by id.' It specifies the resource (world page), the method (PUT), and the scope (one page by id). It also distinguishes itself from siblings like imagine_update_world and imagine_update_adventure_page by explicitly naming the resource type.

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 when-to-use guidance: it explains that to append content, you must first fetch the page with imagine_get_world_page, concatenate, and send the combined body. It also states the requirement for baseUpdatedAt from a fresh read, and explains the visibility options. This is strong usage guidance that tells the agent exactly how to use this tool correctly.

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

list_my_submissionsList my bug reports and requestsA
Read-onlyIdempotent
Inspect

List the calling user's own submissions (bug reports and feature requests) with each one's status: new, reviewing, clarification (Embers is waiting on the user), planned, resolved, declined, or closed (read-only, 30 days after resolved or declined).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context by explaining the meaning of the 'clarification' status (Embers is waiting on the user) and the 'closed' status read-only behavior, which goes beyond the schema. It does not mention ordering, pagination, or rate limits, but these are not critical for a simple read-only list.

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

Conciseness5/5

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

The description is a single sentence that is front-loaded with the primary action and scope, then efficiently packs the status list with useful clarifications. Every element earns its place, and there is no redundant wording.

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 the tool's low complexity (no parameters, simple listing operation) and the presence of an output schema (which the description need not explain), the description is complete. It specifies exactly what is returned (submissions with statuses) and adds value by explaining the meaning of two important statuses. An agent can invoke this tool correctly with no additional 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?

The tool takes zero parameters, and the schema coverage is 100% (empty object). With no parameters to document, the description naturally does not add parameter-level detail. The baseline score of 4 for 0-parameter tools applies here.

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

Purpose5/5

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

The description clearly states the action ('List') and scope ('the calling user's own submissions'), specifies the resource type ('bug reports and feature requests'), and enumerates all possible statuses. This distinguishes it from sibling tools like get_submission (retrieves one submission) and create_submission (creates one).

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

Usage Guidelines4/5

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

The description clearly indicates this is for listing the caller's own submissions, which distinguishes it from any hypothetical tool that lists all submissions. However, it does not explicitly reference sibling tools like get_submission for single-item retrieval or mention when not to use it, leaving some inference to the agent.

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

list_rulesetsList allowed rulesetsA
Read-onlyIdempotent
Inspect

Return the ruleset codes the calling user is permitted to use across the Embers ecosystem. Includes the always-public rulesets plus any restricted rulesets the user has been granted access to. Use this before populating any ruleset selector or before filtering vault/play/imagine results by ruleset.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds value by explaining that it returns user-specific permitted codes and includes both public and restricted entries, which goes beyond the annotations. 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.

Conciseness5/5

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

Two sentences with no wasted words. The action and scope are front-loaded, and the usage guidance is brief and clear.

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 is simple (no parameters, output schema exists), and the description fully covers what it returns and when to use it. Nothing missing 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?

There are zero parameters, so the schema coverage is trivially 100%, and the baseline is 4. The description correctly omits parameter details because none exist.

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

Purpose5/5

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

The description clearly states the specific verb 'Return' and the resource 'ruleset codes the calling user is permitted to use'. It distinguishes itself by mentioning the inclusion of always-public and restricted rulesets, and its unique role among siblings (no other tool lists permitted rulesets).

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

Usage Guidelines4/5

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

The description explicitly says 'Use this before populating any ruleset selector or before filtering vault/play/imagine results by ruleset', giving clear guidance on when to invoke it. It does not mention when not to use it or alternatives, but given the unique purpose, this is sufficient.

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

play_accept_friend_requestAccept a friend requestA
Idempotent
Inspect

Accept a pending friend request directed at the calling user. Pass friendId — the _id of the friend record on the calling user's friends list (from play_list_pending_friends), NOT the requester's user id.

ParametersJSON Schema
NameRequiredDescriptionDefault
friendIdYes`_id` of the friend record on the calling user's friends list. NOT the other user's id. Use play_list_pending_friends (for accept/decline) or play_list_my_friends (for remove) to obtain it.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

The description makes clear this is an action on a pending friend request, which is consistent with the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=true). It does not add much behavioral context beyond what the annotations and verb already convey, such as what state changes occur or what happens on success.

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 tightly written sentences with no filler. The action is stated first, and the parameter warning is front-loaded with the most important clarification about what friendId is not.

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 single-parameter tool with 100% schema coverage, a clear description, an output schema, and annotations covering idempotency and destructiveness, nothing essential is missing. The description gives the agent enough to call 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%, so the schema already fully documents friendId. The description reinforces the critical distinction that friendId is the friend record's _id, not the requester's user id, but it does not add meaning beyond what the schema already states.

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

Purpose5/5

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

The description names a specific verb and resource: accept a pending friend request directed at the calling user. It distinguishes itself from related friend-request siblings by emphasizing that the request must be pending and targeted at the caller, so an agent can tell it apart from send, decline, cancel, or remove.

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

Usage Guidelines4/5

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

The description gives clear context for when to use this tool: there is a pending friend request directed at the calling user. It also routes the agent to play_list_pending_friends as the source for the required ID. It does not explicitly name alternatives like play_decline_friend_request, but the usage context is clear enough.

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

play_add_campaign_characterAdd a character to a campaignAInspect

Attach a vault character to a play campaign so the character participates in play. Play places the attachment on the campaign leg matching the vault character's own ruleset — the campaign must have an active leg for that ruleset. Caller must have campaign 'contribute' permission. Use vault_search_characters to locate the character id first.

ParametersJSON Schema
NameRequiredDescriptionDefault
npcNotrue if this character is added as a DM-controlled NPC; false / omitted = player character.
campaignIdYesCampaign id.
characterIdYesVault character id to add. Required.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

The description discloses a non-obvious behavior: the attachment is placed on the campaign leg matching the vault character's ruleset, not chosen by the caller. It also adds a permission requirement ('contribute') that annotations do not capture. Since the annotations are all false flags, this behavioral detail is especially valuable, though duplicate-attachment behavior is not addressed.

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 tight, purposeful sentences: action, behavioral constraint, then permission and workflow. Every sentence carries new information and the most important content 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?

Given an output schema and a simple 3-parameter input, the description covers the prerequisite active leg, the ruleset-matching behavior, the permission requirement, and the pre-step for locating the character id. An agent has everything needed to invoke this 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%, so the baseline is 3; campaignId, characterId, and npc are already documented in the schema. The description adds workflow context for characterId by referring to a 'vault character' and its ruleset, but it doesn't need to restate parameter definitions.

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

Purpose5/5

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

The description opens with a specific verb-resource pair ('Attach a vault character to a play campaign') and states the purpose ('so the character participates in play'). It clearly differentiates this from read/list tools like play_list_campaign_characters and from vault_attach_companion by focusing on play campaign participation.

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

Usage Guidelines4/5

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

The description gives clear context: the campaign must have an active leg matching the character's ruleset, and the caller needs 'contribute' permission. It also instructs the agent to use vault_search_characters first to locate the character id. It doesn't explicitly state when-not-to-use, but no natural alternative tool exists for this exact operation.

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

play_add_campaign_itemAdd an item to a campaign's allowlistAInspect

Add a vault item to a campaign's allowlist. The item always lands on the leg matching the ITEM's own ruleset — the campaign must have a leg for that ruleset or play answers 400. The optional ruleset param never retargets; it only confirms the expected leg, and a mismatch answers 400. Caller must have 'contribute' on the campaign.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemIdYesVault document id (`itemId`). Required.
rulesetNoOptional confirmation of the target leg's ruleset. The entity always lands on the leg matching its OWN ruleset — this param never retargets; when present, play verifies it matches that leg and answers 400 on a mismatch. Omit unless you want the placement double-checked.
campaignIdYesCampaign id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations indicate a non-read-only, non-idempotent, non-destructive operation (write). The description adds valuable behavioral details: the item always lands on a specific leg per the item's own ruleset, a mismatched ruleset confirms via 400, and the caller must have a specific permission. It also clarifies that the ruleset param never retargets. These go beyond annotations and help the agent predict outcomes and errors.

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 tight and front-loaded. The primary action is in the first sentence, followed by two concise sentences that cover the most critical behaviors (leg matching, ruleset confirmation, permission). No filler, no redundancy beyond the schema's own param descriptions, and every sentence earns its place.

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

Completeness4/5

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

The description covers the core behavior, error conditions, and authorization, which is sufficient for an add operation. It does not address possible duplicate handling or idempotency, but the presence of an output schema and annotations reduces the burden. It's reasonably complete, with minor gaps around edge cases like re-adding an existing item.

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 each parameter well-documented. The tool description essentially repeats the schema's explanation of the ruleset parameter (confirm-only, mismatch → 400) without adding new meaning. While it reinforces the behavior, it does not elevate parameter understanding beyond what the schema already provides, matching the baseline for high coverage.

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

Purpose5/5

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

The description states a clear, specific action: 'Add a vault item to a campaign's allowlist.' It identifies the resource (vault item), the destination (campaign's allowlist), and immediately provides a critical behavioral nuance (landing on the leg matching the item's own ruleset). This distinguishes it from sibling tools like play_add_campaign_character or play_add_campaign_rule by resource type, even without naming them.

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

Usage Guidelines4/5

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

The description gives important usage context: the campaign must have a leg for the item's ruleset or the call fails with 400, and the optional ruleset param is purely confirmatory. It also states the required permission ('contribute' on the campaign). However, it does not explicitly mention when to prefer this tool over other add_campaign_* tools, nor does it list any exclusions, so it's not a full when/when-not guide.

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

play_add_campaign_legAdd a ruleset leg to a campaignAInspect

Add a new active leg to a campaign for the given ruleset, letting the same campaign (same sessions, players, and history) also run under that ruleset. The new leg starts empty — no rules, items, spells, or characters; fill it with the add tools. One leg per ruleset: play answers 409 if a leg for this ruleset already exists. Caller must be the campaign owner or an accepted gamemaster; ordinary players get 403.

ParametersJSON Schema
NameRequiredDescriptionDefault
rulesetNoRuleset for the new leg. Required. One leg per ruleset — play answers 409 if the campaign already has a leg for this ruleset.
campaignIdYesCampaign id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=false, destructiveHint=false, and idempotentHint=false. The description adds valuable behavioral context: the new leg starts empty, one leg per ruleset with 409 on conflict, and permission requirements (403 for ordinary players). It doesn't contradict annotations. It could mention what the response contains, but the output schema exists.

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

Conciseness5/5

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

Three sentences, each earning its place: what the tool does, what the new leg starts as, and the key constraints (one leg per ruleset, permissions). Front-loaded with the core action and resource.

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 2-parameter tool with 100% schema coverage, an output schema, and annotations covering safety, the description is complete. It explains the concept of a leg, the empty start state, the uniqueness constraint, and permission requirements. An agent has everything needed to select and invoke this 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 already documents both parameters. The description adds context about the ruleset parameter's uniqueness constraint (409 if leg exists) and clarifies that campaignId is the target campaign. This goes slightly beyond the schema, but the schema already carries most of the burden.

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

Purpose5/5

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

The description clearly states the verb ('Add'), the resource ('a new active leg to a campaign'), and the specific purpose ('letting the same campaign also run under that ruleset'). It distinguishes itself from sibling tools like play_set_campaign_leg_active and the other play_add_campaign_* tools by explaining what a leg is and that it starts empty.

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

Usage Guidelines5/5

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

The description explicitly says when to use this tool (to add a leg for a ruleset), what the new leg starts as, and the constraint 'One leg per ruleset' with the 409 behavior. It also states who can call it (campaign owner or accepted gamemaster) and that ordinary players get 403, which is clear usage guidance.

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

play_add_campaign_ruleAdd a rule to a campaign's allowlistAInspect

Add a vault rule to a campaign's allowlist. The rule always lands on the leg matching the RULE's own ruleset — the campaign must have a leg for that ruleset or play answers 400. The optional ruleset param never retargets; it only confirms the expected leg, and a mismatch answers 400 (e.g. "This rule is X, not Y"). Caller must have 'contribute' on the campaign.

ParametersJSON Schema
NameRequiredDescriptionDefault
ruleIdYesVault document id (`ruleId`). Required.
rulesetNoOptional confirmation of the target leg's ruleset. The entity always lands on the leg matching its OWN ruleset — this param never retargets; when present, play verifies it matches that leg and answers 400 on a mismatch. Omit unless you want the placement double-checked.
campaignIdYesCampaign id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations (which signal a non-read-only mutation but nothing else), the description discloses real behavioral details: automatic leg placement, two specific 400 scenarios, the no-retargeting semantics of ruleset, and the required permission. This is exactly the kind of context that prevents an agent from misusing the tool. It is consistent with annotations, so there is no contradiction.

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

Conciseness5/5

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

Three sentences deliver the core action, the critical placement behavior, the error conditions, the optional parameter semantics, and the permission requirement. Information is front-loaded and every clause earns its place. There is no filler or repetition of schema/annotations.

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 mutating add-operation with an output schema and clear annotations, the description covers the prerequisites (leg exists), the caller permission, the exact failure modes, and the optional parameter's effect. Nothing needed to invoke the tool correctly appears to be missing. The success return is already covered by the output schema, so its omission is appropriate.

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

Parameters5/5

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

Although the schema already covers 100% of parameters, the description adds meaning beyond the raw field docs: it explains that ruleset is only a check and 'never retargets', and that ruleId refers to a vault rule whose own ruleset governs placement. This turns a generic 'optional confirmation' schema field into an actionable behavioral contract. It reinforces campaignId's role as the target allowlist.

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 and resource: 'Add a vault rule to a campaign's allowlist,' and immediately clarifies the unique placement rule ('lands on the leg matching the RULE's own ruleset'). This clearly distinguishes it from related campaign/vault tools like play_add_campaign_item or vault_create_rule. It also names the permission and failure mode, pinning down the exact operation.

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

Usage Guidelines4/5

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

The description gives strong contextual guidance: the campaign must have a leg for the rule's ruleset, the optional ruleset param is only a confirmation, and the caller needs 'contribute' permission. It does not explicitly name sibling alternatives or state 'use this when ... instead of ...', but its conditions make the intended usage unmistakable. No misleading exclusions are present.

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

play_add_campaign_spellAdd a spell to a campaign's allowlistAInspect

Add a vault spell to a campaign's allowlist. The spell always lands on the leg matching the SPELL's own ruleset — the campaign must have a leg for that ruleset or play answers 400. The optional ruleset param never retargets; it only confirms the expected leg, and a mismatch answers 400. Caller must have 'contribute' on the campaign.

ParametersJSON Schema
NameRequiredDescriptionDefault
rulesetNoOptional confirmation of the target leg's ruleset. The entity always lands on the leg matching its OWN ruleset — this param never retargets; when present, play verifies it matches that leg and answers 400 on a mismatch. Omit unless you want the placement double-checked.
spellIdYesVault document id (`spellId`). Required.
campaignIdYesCampaign id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations, the description discloses the non-retargeting leg placement rule, two 400 error cases, and a specific auth requirement. This is meaningful behavioral context that the structured annotations do not provide.

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, each carrying load: action, placement rule, ruleset caveat, and auth requirement. The main behavior is front-loaded 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?

For a mutating tool with full schema descriptions and an output schema, the description covers prerequisites, failure conditions, auth, and edge-case behavior. Nothing essential is missing for an agent to use 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 coverage is 100% and the ruleset property already explains its confirmation-only role and mismatch behavior. The description restates this caveat rather than adding new parameter semantics, so the baseline 3 applies.

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

Purpose5/5

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

The description opens with 'Add a vault spell to a campaign's allowlist', clearly naming the verb, resource, and destination. This differentiates it from sibling add-to-campaign tools (item/rule/character) and from the inverse removal tool.

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

Usage Guidelines4/5

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

The description gives concrete preconditions: the campaign must already have a leg for the spell's ruleset or a 400 is returned, and the caller needs 'contribute' permission. It also clarifies when to use the optional ruleset param, though it does not explicitly contrast with sibling add tools.

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

play_cancel_friend_requestCancel a friend requestA
DestructiveIdempotent
Inspect

Cancel a friend request the calling user previously sent. Pass friendId — the _id of the friend record on the calling user's own friends list (the one the caller initiated).

ParametersJSON Schema
NameRequiredDescriptionDefault
friendIdYes`_id` of the friend record on the calling user's friends list. NOT the other user's id. Use play_list_pending_friends (for accept/decline) or play_list_my_friends (for remove) to obtain it.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already mark the operation as destructive and idempotent. The description adds meaningful behavioral context beyond those hints: it can only cancel requests the calling user initiated, and it targets the friend record on the user's own friends list, not the other user's id. This helps the agent avoid common misuse.

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 focused sentences with no filler. The action and the key disambiguation are front-loaded, and the parameter guidance is placed exactly where it is relevant.

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 single-parameter, output-schema-bearing mutation tool with annotations covering destructiveness and idempotency, the description is complete. It identifies the target, the required parameter, how to source that parameter, and the boundary of what it can cancel.

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 value by emphasizing that friendId is the friend record on the caller's own friends list and specifically the one the caller initiated, and by directing the agent to the sibling list tools that produce this value. This goes slightly beyond the schema's own wording.

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 ('Cancel') and resource ('a friend request the calling user previously sent'), and clarifies scope by noting it must be a request the calling user initiated. This clearly distinguishes it from siblings like play_accept_friend_request, play_decline_friend_request, and play_remove_friend.

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

Usage Guidelines4/5

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

The description indicates when the tool applies (only to requests the calling user previously sent) and the parameter description points to play_list_pending_friends and play_list_my_friends as sources for the required friendId. It does not explicitly state when NOT to use this tool versus decline or remove, but the caller-initiated qualifier largely disambiguates.

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

play_check_recap_existsCheck if the user already wrote a recap for a sessionA
Read-onlyIdempotent
Inspect

Cheap boolean check — returns { exists: boolean } for whether the calling user has an active player-recap page attached to the given session. Use this to gate play_create_page so you don't write a duplicate recap.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesMongo `_id` of the session.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description is not burdened with those. It adds value by stating it's a 'cheap boolean check' and scoping to the 'calling user' and 'active player-recap page,' which are behavioral details beyond the schema. It does not mention error conditions, but given the simplicity and annotation coverage, this is acceptable.

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

Conciseness5/5

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

Two sentences with zero waste. The core purpose and return shape are front-loaded in the first sentence, and the usage guidance in the second. Every word earns its place.

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

Completeness5/5

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

For a simple existence check with one well-documented parameter, annotations covering safety, and an output schema hinted in the description, nothing essential is missing. The description covers the return value, scope, and intended usage context.

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% for sessionId, so the schema fully documents the parameter. The description does not add any extra semantics beyond what the schema provides, thus the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states a specific verb (check) and resource (recap existence) with a precise return contract ({ exists: boolean }). It differentiates itself from siblings like play_create_page by focusing on the read-only existence check, leaving no ambiguity about its function.

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 instructs when to use it: 'Use this to gate play_create_page so you don't write a duplicate recap.' This names the alternative tool and the condition that selects this check, providing direct and unambiguous guidance.

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

play_consume_pbem_emailsLink inbox emails to a moveAInspect

Mark inbox emails consumed and link them to the move they were collated into. Use after play_create_move / play_update_move when building a move from emails. Only 'new' items in the move's campaign are affected. GM-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
moveIdYesThe move the items were collated into.
itemIdsYesInbox item ids that were collated into the move.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already establish this is a mutation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds valuable behavioral context beyond annotations: it marks emails as consumed, links them to a move, restricts effects to 'new' items, and notes GM-only access. No contradictions 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.

Conciseness5/5

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

Three sentences with zero fluff: action, usage timing, and scope condition. The core function is front-loaded, and every sentence earns its place. The GM-only note is concise and necessary.

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

Completeness4/5

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

For a simple 2-parameter tool with an output schema and annotations, the description covers when to use, what it does, and its scope. It could clarify what 'consumed' means for the inbox (e.g., removal vs. archiving) or define 'new', but these are minor given the output schema likely conveys return state.

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 both parameters are already fully documented. The description adds a behavioral constraint ('Only new items... affected') that indirectly relates to itemIds, but it does not add parameter-specific meaning beyond schema. 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 action ('Mark inbox emails consumed and link them to the move'), a clear resource and target, and the use context ('after play_create_move / play_update_move'). It distinguishes from sibling PBEM tools by specifying 'consumed' and 'collated into', which implies a state change tied to a move rather than simple dismissal or resolution.

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

Usage Guidelines4/5

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

The description explicitly tells the agent when to use the tool: after play_create_move/play_update_move when building a move from emails. It also gives a scoping condition ('Only new items... affected'). It does not list alternatives or explicit when-not-to-use scenarios, but the context is clear enough for correct routing.

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

play_create_campaignCreate a play campaignAInspect

Create a new campaign owned by the calling user. Required: name. ruleset becomes the campaign's first leg (campaigns hold ruleset-specific material in per-ruleset legs; add more with play_add_campaign_leg). Other fields (summary, description, settings) pass through to play, which validates the payload.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already mark this as a mutating, non-idempotent creation with openWorldHint. The description adds ownership semantics, the rule that ruleset forms the first leg, and that other fields pass through to play for validation—useful behavioral context 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 three dense sentences with no filler, front-loading the core purpose and required parameter before the leg/validation context. Every sentence contributes essential 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?

For a create operation with an output schema and annotations, the description covers ownership, required input, the ruleset-specific leg model, and validation. The only minor gap is not detailing potential validation errors or how settings should be structured, but these are not essential for invoking the tool.

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

Parameters5/5

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

The input schema exposes no properties, so the description carries full responsibility for parameter information. It identifies name as required, explains the ruleset leg behavior, and lists summary, description, and settings as pass-through fields—substantial semantic 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 uses a specific verb+resource ('Create a new campaign') and adds that it is owned by the calling user. This clearly differentiates it from sibling create tools like play_create_session or play_create_page, and the campaign concept is unambiguous.

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

Usage Guidelines4/5

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

It states the required name, explains the special ruleset leg behavior, and explicitly points to play_add_campaign_leg for adding more legs. It does not explicitly enumerate when not to use it (e.g., updating an existing campaign via play_update_campaign), so it misses a small exclusion.

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

play_create_moveCreate a moveAInspect

Record a new play-by-email move on a campaign. Required: campaignId. Optional: name (defaults 'Move '), number (defaults next-in-sequence), date dd/mm/yy (defaults today), description, sessionId (chapter), parentId (child scene; excludes sessionId), playerIds (visibility restriction to listed campaign players). GM-only: caller must be the campaign owner or an accepted gamemaster.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

With all annotations false, the description carries the behavioral burden. It discloses defaults (name, number, date), mutual exclusion (parentId excludes sessionId), visibility restriction (playerIds), and authorization (GM-only). This goes beyond the minimal 'create' implication, though it doesn't cover failure modes or idempotency.

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

Conciseness5/5

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

The description is a single dense paragraph with no filler. It front-loads the core action, then clearly separates required, optional, and authorization details. Every sentence adds necessary information about how to call the tool correctly.

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 create operation with an output schema, the description covers all needed context: required vs optional parameters, defaults, exclusivity rules, visibility, and caller restrictions. Nothing an agent needs to invoke it correctly is missing, and the output schema handles return-value documentation.

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

Parameters5/5

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

The input schema is empty, so the description is the only source of parameter information. It lists every parameter with defaults, constraints, and relationships (e.g., parentId excludes sessionId). This fully compensates for the absent schema and earns the highest score.

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: 'Record a new play-by-email move on a campaign.' This clearly distinguishes it from sibling tools like play_update_move, play_delete_move, and play_get_move, which concern modifying, deleting, or retrieving moves.

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

Usage Guidelines4/5

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

The description provides clear context: it is for creating a new move, requires campaignId, and is GM-only. It does not explicitly name alternatives for editing or listing moves, but the 'new' qualifier and required/auth conditions give strong contextual guidance.

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

play_create_pageCreate a pageAInspect

Create a new page. Required: name. Set documentType: 'player-recap' and ref: { refType: 'session', refId: <sessionId> } to make a session recap — play sends notifications to the other campaign players on recap create. Before creating a recap, call play_check_recap_exists first to avoid duplicates.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

The description discloses the notification side effect on recap creation, which is beyond what the annotations convey (readOnlyHint false, idempotentHint false). It also mentions the prerequisite check. There is no contradiction with annotations. It could mention other side effects, but the key behavioral trait is well covered.

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 a bit lengthy but every sentence contributes: the core action, the required parameter, the recap configuration, the side effect, and the prerequisite. It is front-loaded with the primary purpose and does not waste words. Could be tightened slightly, but it remains effective.

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

Completeness2/5

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

While the description covers the recap use case and prerequisite, the empty input schema leaves the actual parameter contract undefined. An agent cannot reliably know whether to pass `name` or the recap fields, making the tool incomplete for correct invocation. The description also does not mention other document types or general page creation semantics, so it is not fully contextual.

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

Parameters2/5

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

The description explicitly names required parameters (`name`) and optional fields (`documentType`, `ref`) for the recap scenario, which is valuable. However, the input schema is an empty object, creating a direct conflict: the schema implies no parameters are accepted, while the description requires `name`. This inconsistency is misleading and undermines the parameter semantics, as an agent might not pass `name` due to the schema or might pass it and have it ignored. The description does not resolve this contradiction.

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

Purpose5/5

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

The description clearly states the verb 'create' and the resource 'page', and it distinguishes the tool from siblings by describing the specific 'player-recap' use case and the side effect of notifications. An agent can tell this apart from play_update_page, play_delete_page, and play_get_page.

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 explicitly explains when to use the tool (to create a page, especially a session recap) and gives a concrete prerequisite: call play_check_recap_exists first to avoid duplicates. This is clear, actionable guidance that leaves no ambiguity about the correct invocation path.

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

play_create_sessionCreate a sessionAInspect

Create a new session for a campaign. Required: campaignId and date (dd/mm/yy format). Other fields (name, description, planned battlemaps) are optional and pass through to play, which authorizes the caller via campaign 'contribute' permission.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

With no useful annotations (all false), the description carries the burden. It discloses that caller authorization is via campaign 'contribute' permission and that fields pass through to play. It doesn't mention return values or side effects beyond creation, but the output schema covers that. This adds meaningful context beyond the empty 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?

Two sentences, no fluff. Purpose is front-loaded, then required/optional fields, then permission note. Every sentence earns its place.

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

Completeness5/5

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

Given the empty schema and existing output schema, the description covers all necessary calling details: purpose, required fields with format, optional fields, and authorization. No critical information is missing for correct invocation.

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

Parameters5/5

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

The input schema is empty ({}), so the description is the sole source of parameter information. It lists required parameters (campaignId, date) with date format, and optional ones (name, description, planned battlemaps). This fully compensates for the schema gap and adds precise 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?

The description states a specific verb and resource: 'Create a new session for a campaign.' This clearly distinguishes it from siblings like play_create_campaign, play_create_move, or play_delete_session. The purpose is unambiguous and front-loaded.

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

Usage Guidelines4/5

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

The description implies its use case (creating a session for a campaign) and specifies required vs optional fields, but it does not explicitly contrast with alternatives such as play_update_session. The necessity is clear from context, but explicit exclusion of when-not-to-use is absent.

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

play_decline_friend_requestDecline a friend requestA
DestructiveIdempotent
Inspect

Decline a pending friend request directed at the calling user. Pass friendId from play_list_pending_friends.

ParametersJSON Schema
NameRequiredDescriptionDefault
friendIdYes`_id` of the friend record on the calling user's friends list. NOT the other user's id. Use play_list_pending_friends (for accept/decline) or play_list_my_friends (for remove) to obtain it.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, covering the mutation nature. The description adds the constraint that the request must be pending and directed at the calling user, and specifies the exact source for the ID, giving operational context beyond the safety hints.

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

Conciseness5/5

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

Two sentences with no filler: the first states the purpose, the second tells how to obtain the parameter. Purpose is front-loaded and every word 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?

This is a simple one-parameter tool with an output schema present. The description covers the operation, the origin of the required ID, and implicitly its scope (pending, calling user). Nothing essential 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%, and the parameter description already includes the 'NOT the other user's id' clarification and the list-source guidance. The tool description's mention of friendId from play_list_pending_friends is redundant with the schema, so it adds minimal new meaning beyond what the schema provides.

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 ('Decline') and resource ('pending friend request') scoped to the calling user, and the qualifier 'pending' plus the source list clearly differentiates it from accept, cancel, and remove siblings. An agent knows exactly what this tool does and how it differs from peers.

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 explicitly instructs to pass friendId from play_list_pending_friends, and the schema description reinforces that play_list_pending_friends is for accept/decline while play_list_my_friends is for remove, effectively routing the agent to the correct list and tool for this operation.

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

play_delete_campaignDelete a play campaignA
DestructiveIdempotent
Inspect

Permanently delete a campaign by id. Removes all of its sessions, invites, and members. Caller must have campaign 'delete' permission (typically the owning DM). Destructive. Confirm with the user first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the campaign.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
deletedNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true, but the description adds crucial context beyond that: the operation is permanent, cascades to sessions/invites/members, requires specific permissions, and mandates user confirmation. This is exactly the behavioral disclosure an agent needs for a destructive call.

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

Conciseness5/5

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

Three short sentences, each earning its place: core action, cascade consequences, then permission and safety guidance. Front-loaded with the verb-resource pair and no wasted words.

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

Completeness5/5

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

For a one-parameter destructive operation with an output schema, the description covers what gets destroyed, the permission prerequisite, and the confirmation requirement. Nothing essential is missing for an agent 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 coverage is 100% with the single parameter id already documented as 'Mongo _id of the campaign.' The description adds no new meaning about the parameter itself, and the baseline 3 is appropriate when the schema carries the full weight.

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 'Permanently delete a campaign by id', using a specific verb and resource, and clearly distinguishes this from sibling delete tools for sessions, characters, pages, and moves. The cascade effect ('Removes all of its sessions, invites, and members') further defines the scope unambiguously.

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

Usage Guidelines4/5

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

The description provides actionable when-to-use context: the caller must hold campaign 'delete' permission (typically the owning DM), and the agent is instructed to confirm with the user first. It doesn't explicitly name alternatives, but the resource is unique among siblings, so no exclusion is strictly needed.

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

play_delete_characterDetach a character from playA
DestructiveIdempotent
Inspect

Detach a character from play's tracking. Removes any campaign references but does NOT delete the underlying vault character document. Caller must own the character or have admin role.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the play character record.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
deletedNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=true, so the description carries a lower burden but still adds genuine value: it scopes the destruction ('removes campaign references but does NOT delete the underlying vault character document') and discloses the permission requirement. This is exactly the contextual enrichment the rubric asks for beyond 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?

Three sentences, each earning its place: the core action, the scope boundary, and the permission gate. No filler, no repetition of schema content, no vague boilerplate.

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 single-parameter tool with 100% schema coverage, a full set of annotations, and an output schema present, the description covers everything an agent needs: what is affected, what is spared, and who is allowed to invoke it. Nothing material 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%: the sole parameter `id` is already fully documented as 'Mongo `_id` of the play character record.' The description contributes no additional parameter syntax, format, or constraint details, so the schema carries the heavy lifting and the baseline of 3 applies.

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

Purpose5/5

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

The description uses a specific verb-plus-resource construction ('Detach a character from play's tracking') and draws an explicit boundary against the destructive sibling 'vault_delete_character' by stating it does NOT delete the underlying vault document. An agent can immediately distinguish this from the many similar play_/vault_ tools.

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

Usage Guidelines4/5

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

The description gives clear invocation context: it names exactly what the operation does and doesn't do, which implicitly tells the agent when this tool is appropriate (detach tracking) versus deletion tools. The ownership/admin prerequisite is a concrete when-to-call condition. However, it never names a sibling alternative explicitly to complete the when/when-not guidance.

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

play_delete_moveDelete a moveA
DestructiveIdempotent
Inspect

Permanently delete a move by id. Its child moves are detached back into the feed, not deleted. GM-only. Destructive — the move's collated round text is lost. Confirm with the user first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the move.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
deletedNo

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint=true, idempotentHint=true), the description adds substantial behavioral detail: deletion is permanent, collated round text is lost, child moves are detached back into the feed, and operator authorization is GM-only. This is exactly the context needed to use a destructive tool safely.

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

Conciseness5/5

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

Three short sentences, each carrying essential information: the core operation, the side-effect on child moves, and the authorization/destructive warning. Nothing is redundant or padded.

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 one fully documented parameter, a provided output schema, and rich annotations, the description still adds all necessary behavioral context: permanence, child-move behavior, GM restriction, lost text, and user confirmation. No relevant gap remains.

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%: the only parameter, id, is already described as the Mongo _id of the move. The description confirms deletion happens 'by id' but adds no new parameter-level meaning beyond the schema.

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

Purpose5/5

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

The description names a specific verb and resource: permanently delete a move by its id. It also states the key nuance—child moves are detached, not deleted—which distinguishes it from related move/session tools.

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

Usage Guidelines4/5

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

The description clearly states when it applies (GM-only) and instructs the agent to confirm with the user first, which is critical usage guidance. It doesn't explicitly mention alternatives or excluded cases, but the GM-only gate and destructive warning provide clear context.

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

play_delete_pageDelete a pageA
DestructiveIdempotent
Inspect

Soft-delete a page by id (30-day TTL via deactivated_at, recoverable in the app UI within the window). Owner or admin only. Destructive. Confirm with the user first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the page.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
deletedNo

TDQS

A4.5/5.0
Behavior5/5

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

The description goes far beyond the annotations by explaining that deletion is soft (30-day TTL via deactivated_at), recoverable in the UI, and permission-restricted. This adds significant behavioral context despite destructiveHint and idempotentHint already being present.

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 compact sentences, each carrying distinct information: operation, TTL/recovery, and authorization/confirmation requirements. No filler or redundant phrasing.

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 single-parameter tool with a full input schema and an output schema present, the description covers the essential decision factors: permission, destructiveness, confirmation, recovery, and soft-delete window. Nothing critical 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?

The schema fully documents the only parameter (Mongo _id of the page, minLength 1, required). The description merely repeats 'by id' without adding parameter-specific details, so it stays at the baseline for high schema coverage.

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

Purpose5/5

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

States a precise action ('soft-delete a page by id'), the resource type, and key semantics (30-day TTL, recoverable). This clearly distinguishes it from hard-delete or other delete tools in the sibling list.

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

Usage Guidelines4/5

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

Provides clear context on when it is appropriate to call: only for pages, owner/admin only, and with explicit user confirmation. It does not name alternatives like play_update_page or imagine_delete_world_page, but the conditions for use are explicit enough to prevent misuse.

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

play_delete_sessionDelete a sessionA
DestructiveIdempotent
Inspect

Permanently delete a session by id, including its notes and any session-image / battlemap attachments. Caller must have session 'contribute' permission. Destructive. Confirm with the user first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the session.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
deletedNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already signal destructive and read-only status, but the description adds concrete side effects (notes, session-image/battlemap attachments destroyed) and the permission requirement. This is exactly the extra context the rubric rewards.

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

Conciseness5/5

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

Three short sentences, front-loaded with the main action and scope, then permissions and confirmation. Every clause adds a new piece of information with no 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?

A single parameter, a clear side-effect list, permission requirements, and confirmation guidance make the description self-sufficient. The output schema exists, so return-value details are unnecessary.

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

Parameters3/5

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

The schema covers 100% of the single id parameter with a description ('Mongo _id of the session'). The description repeats 'by id' but does not deepen the semantics, so baseline 3 is appropriate.

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

Purpose5/5

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

Clearly states the specific action ('delete'), the resource ('session'), and the identifier ('by id'), and enumerates included side effects like notes and attachments. This distinguishes it from sibling delete tools by naming the exact resource type.

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

Usage Guidelines4/5

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

Provides clear context: the required permission ('contribute') and the instruction to confirm with the user first. It does not explicitly list when-not-to-use or name alternative tools, so it stops short of the 5 threshold.

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

play_disable_pbem_inboxDisable a campaign's PBEM inboxA
Idempotent
Inspect

Disable the inbox: mail to the campaign's address stops routing (bounces at the webhook). The address is kept and re-enables unchanged. GM-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYesMongo `_id` of the play campaign.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations, the description explains what actually happens: mail stops routing, bounces at the webhook, and the address is kept and can be re-enabled unchanged. This aligns with destructiveHint=false and idempotentHint=true while adding meaningful operational detail.

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

Conciseness5/5

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

Three short sentences deliver the action, the behavioral consequence, the preserved state, and the permission requirement. Every sentence earns its place and the key action is front-loaded.

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

Completeness5/5

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

For a one-parameter tool with an output schema and supportive annotations, this description is complete: it states who can use it, what happens to incoming mail, and what happens to the address. No critical decision-making information 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 single campaignId parameter is already fully documented in the schema. The description adds no additional parameter-level meaning beyond tying the action to 'the campaign's address,' which is appropriate given the 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?

The description states a specific verb and resource: 'Disable the inbox' for a campaign's PBEM inbox. It also clarifies the concrete consequence—mail stops routing and bounces—and the retained address, clearly distinguishing it from enable or regenerate operations.

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

Usage Guidelines4/5

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

The description gives clear context: use this when you want to disable a campaign's PBEM inbox while keeping the address, and it explicitly restricts usage to GMs. It does not explicitly name the sibling enable tool, but 're-enables unchanged' strongly implies the counterpart operation.

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

play_dismiss_pbem_emailDismiss a PBEM inbox emailA
Idempotent
Inspect

Mark an inbox email dismissed (misdirected mail, noise). The item is retained with status 'dismissed', not deleted. GM-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemIdYesMongo `_id` of the inbox item.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

The description adds specific behavioral detail beyond what annotations already provide: the item is retained, its status becomes 'dismissed', and it is not deleted. It also discloses the GM-only permission requirement, which is not present in annotations or schema. The description aligns with destructiveHint=false and idempotentHint=true, with no contradiction.

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 extremely concise: two sentences, no filler, and every element earns its place. The action is front-loaded, followed by the retention behavior and the GM-only restriction. This is efficient and easy for an agent 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 simple one-parameter tool with full schema coverage, annotations, and an output schema present, the description covers the action, the state change, the non-destructive nature, and the required role. Nothing essential is missing 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 the single parameter itemId is already described as the Mongo _id of the inbox item. The description does not add further parameter-level detail, but since the schema fully documents the parameter, no additional compensation is required. 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: 'Mark an inbox email dismissed'. It also clarifies the purpose (misdirected mail, noise) and distinguishes the action from deletion by adding 'retained with status dismissed, not deleted'. This is clear and differentiates the tool from related PBEM email operations.

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

Usage Guidelines4/5

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

The description gives clear context for when to use the tool (misdirected/noise emails) and an access restriction ('GM-only'). It does not explicitly name alternative tools like play_resolve_pbem_email or state when not to use it, but the context is sufficient for an agent to make a reasonable choice.

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

play_enable_pbem_inboxEnable a campaign's PBEM inboxA
Idempotent
Inspect

Enable the play-by-email inbox on a campaign. Mints the campaign's unique inbound address on first enable (subsequent enables keep the existing address). Returns the pbem block including the address players CC. GM-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYesMongo `_id` of the play campaign.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

The description goes well beyond the annotations by revealing that the first enable mints a unique inbound address, that subsequent enables preserve it, and that the return block contains the address players CC. It also discloses the GM-only access restriction. No contradiction with the idempotentHint annotation.

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 the core purpose front-loaded offense, followed by the most decision-relevant behavior and access restriction. Every sentence adds value with 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 one-parameter tool with a rich output schema and annotations, the description provides the required accessibility role, idempotence behavior, return-value context, and parameter context. Nothing essential is missing 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?

The schema already fully documents the single parameter as the Mongo _id of the play campaign, so the description does not need to add much. It only reinforces that the action targets a campaign, which is adequate given 100% schema description coverage.

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

Purpose5/5

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

The description states a precise action ('Enable the play-by-email inbox') on a clear resource ('a campaign') and adds distinctive details about address minting. This distinguishes it from related siblings like play_disable_pbem_inbox and play_regenerate_pbem_address.

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

Usage Guidelines4/5

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

It clearly specifies that this is a GM-only operation and describes what happens on repeated enables. It does not explicitly compare against sibling PBEM tools such as play_regenerate_pbem_address or play_consume_pbem_emails, but the intended invocation context is clear.

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

play_find_friendFind a friend by name or emailA
Read-onlyIdempotent
Inspect

Search the play user directory by name or email substring. Used to locate a user before sending a friend request. Rate-limited by play to deter scraping.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSubstring to search names and emails against. Required.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already provide the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false). The description adds non-obvious behavioral context beyond that: substring matching over names and emails, and rate-limiting imposed by the platform to deter scraping. This is useful operational information.

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

Conciseness5/5

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

Three sentences, each earning its place: the main action, the motivating use case, and a rate-limit caution. The verb and resource are front-loaded, and there is no filler or redundant restatement of the title.

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 single-parameter, read-only search tool with an output schema present, the description covers what the tool does, why an agent would use it, and a key operational caveat. Nothing an agent needs to decide whether to call it 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%: the query parameter is documented as 'Substring to search names and emails against.' The description essentially restates this scope, only adding that the search targets the 'play user directory.' With high schema coverage, the description need not add much parameter-level detail.

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 and resource: 'Search the play user directory by name or email substring.' This clearly identifies the tool as a lookup operation and distinguishes it from sibling tools like play_send_friend_request or play_list_my_friends, since it is the discovery step rather than the action step.

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

Usage Guidelines4/5

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

The description states a concrete use case: 'Used to locate a user before sending a friend request.' This gives clear context for when to call the tool. It does not explicitly name alternatives or exclusions, but the intended position in the friend-request workflow is unambiguous.

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

play_get_campaignGet a play campaignA
Read-onlyIdempotent
Inspect

Fetch one campaign by id, including settings and any DM/player metadata. Calling user must be a member (DM or player). The campaign's ruleset-specific material lives in its legs array — one entry per ruleset, each carrying { ruleset, active, rules, items, spells, characters }; inactive legs are hidden from normal UI but never deleted. There is no campaign-level ruleset field. Defaults to a summary shape: each leg's raw rule/item/spell ObjectId arrays are replaced with resolved [{ _id, name }, ...] lists the LLM can act on. Pass detail: 'full' to receive the raw ObjectId arrays instead. The response's imagineAdventures array ([{ id, name }, ...]) lists the Imagine adventures linked to this campaign — read-only here (maintained from the Imagine side); its ids are the valid values for a session's imagineAdventureId tag.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the campaign.
detailNoResponse shape. 'summary' (default) trims raw-ObjectId arrays and full character sheets to a compact LLM-friendly form; 'full' returns the populated document with every field inline.summary

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnlyHint/idempotentHint annotations, it discloses important non-obvious behavior: inactive legs are hidden but never deleted, there is no campaign-level ruleset field, summary replaces ObjectId arrays with resolved lists, and imagineAdventures is maintained externally and read-only. This materially improves safe and correct use.

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 dense but well ordered: main operation, prerequisite, data layout, detail behavior, and cross-resource linkage. It is longer than strictly necessary (some detail parallels the schema), but every sentence conveys useful context.

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 read-only fetch with an output schema and annotations, the description covers the essential invocation knowledge: membership requirement, response shape control, legs semantics, and imagineAdventures linkage. Nothing an agent needs to call or interpret this tool 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 genuine meaning: it explains what summary vs full means for the legs arrays and explicitly notes that imagineAdventure ids are valid values for a session tag. The id parameter is already fully described by the schema.

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

Purpose5/5

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

The description opens with a specific action and target: fetch one campaign by id, and it lists what is included (settings and DM/player metadata). This clearly separates it from list-style siblings like play_list_my_campaigns and from other play_get_* resources.

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

Usage Guidelines4/5

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

It states the prerequisite that the caller must be a member and gives concrete guidance on choosing detail=summary vs full. It does not explicitly name alternatives or when not to use this tool, but the intended invocation context is clear.

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

play_get_character_noteGet a character note (DM or player)A
Idempotent
Inspect

Fetch the DM-side or player-side note attached to a play character. Lazy-creates the note on first read if absent, so this endpoint always returns a note. Authorization runs through the character's campaign permission.

ParametersJSON Schema
NameRequiredDescriptionDefault
characterIdYesMongo `_id` of the play character (NOT the vault character id).
documentTypeYesWhich note to fetch: 'dm-notes' (GM-only) or 'player-notes' (visible to the campaign).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

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

The description adds valuable behavior beyond the annotations: it discloses the lazy-creation side effect on first read ('Lazy-creates the note on first read if absent'), explains why the endpoint always returns a note, and states the authorization model. This is especially useful given readOnlyHint is false and idempotentHint is true—the description coherently explains both annotation signals.

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 deliver the core purpose, the lazy-creation behavior, and the authorization model with no filler. The most important differentiator (fetch vs. note type) is front-loaded.

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

Completeness5/5

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

For a two-parameter getter with an output schema, the description covers everything an agent needs to invoke it correctly: what it returns, side effects, auth requirements, and required parameters. The presence of an output schema means return-shape details need not be repeated in the description.

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%: both characterId and documentType have clear descriptions, including the 'NOT the vault character id' warning and the dm-notes/player-notes enum semantics. The description adds no parameter-level detail beyond the schema, which is acceptable given the schema already carries the heavy lifting.

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

Purpose5/5

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

The description opens with a specific verb ('Fetch') and a precise resource ('DM-side or player-side note attached to a play character'), distinguishing the read operation from the related sibling play_update_character_note. It also clarifies the two note variants, leaving no ambiguity about what is retrieved.

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

Usage Guidelines3/5

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

The description implies this is the read path for character notes and even notes the authorization context ('campaign permission'), but it does not explicitly state when to prefer it over alternatives or when not to use it. There is no direct referral to play_update_character_note for modifying notes, so usage guidance is implied rather than explicit.

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

play_get_moveGet a moveA
Read-onlyIdempotent
Inspect

Fetch one move by id, including its full markdown body, plus a children array of its child scenes (split party) filtered to the caller's visibility. A restricted move reads as 404 for players not on its list. Caller must be a member of the move's campaign (any member of a public campaign).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the move.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the readOnly/idempotent/destructive annotations, it discloses important behavior: visibility filtering of child scenes, restricted moves returning 404 to unauthorized players, and campaign membership requirements. No contradiction with annotations exists.

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

Conciseness5/5

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

Two sentences carry all necessary information with no filler. The core behavior is front-loaded, followed by return details and then authorization/error behavior.

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 single-parameter read operation with an output schema and read-only annotations, the description covers the essential non-schema facts: payload contents, visibility filtering, 404 semantics, and membership restrictions. Nothing needed 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?

The single parameter has 100% schema description coverage, so the schema already documents id as a Mongo _id. The description only repeats that this is a by-id fetch and adds no new parameter-level meaning, which matches the baseline for fully covered 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?

The description names a specific verb and resource: 'Fetch one move by id'. It also details what is returned (full markdown body and a children array), which distinguishes it from sibling list tools like play_list_campaign_moves and play_list_session_moves.

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

Usage Guidelines4/5

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

The description clearly implies when to use it: when you have a move's id and need the full move object or its child scenes. It also gives access context by requiring caller membership in the campaign. It does not explicitly name alternative list tools, so it stops short of a 5.

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

play_get_pageGet a pageA
Read-onlyIdempotent
Inspect

Fetch one page by id, including its full markdown body. Caller must be the owner, an admin, or the page must be public.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the page.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds useful context beyond annotations by specifying the access control requirement and the full markdown body in the response.

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 with zero filler. The primary action is front-loaded, and the access requirement is stated in a single follow-up clause.

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

Completeness5/5

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

For a one-parameter read tool with full annotations and an output schema, the description is complete. It clarifies what is returned, how to identify the resource, and who is allowed to call it—nothing essential is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the id parameter is already documented as the Mongo _id of the page. The description only repeats 'by id' without adding format, validation, or behavior details, so it does not elevate above the schema 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 and resource: 'Fetch one page by id' with the distinctive detail that it includes the full markdown body. This clearly distinguishes it from list-style siblings like play_list_pages and from getters for other resource types.

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

Usage Guidelines4/5

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

The description makes the core usage context clear—retrieve a single page by id—and adds the access precondition (owner, admin, or public). It does not explicitly name alternative tools or say when not to use it, but the id-based single-resource purpose is unambiguous.

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

play_get_sessionGet a sessionA
Read-onlyIdempotent
Inspect

Fetch one session by id, including its notes, battlemap references, and session-image attachments. Caller must be a member of the session's campaign.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the session.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the description does not need to restate those. The description adds a useful behavioral detail: the caller must be a member of the session's campaign, which is a permission requirement not covered by annotations. However, it does not disclose other behavioral aspects like return format or potential errors, but annotations cover the safety profile.

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

Conciseness5/5

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

The description is two concise sentences, with the key action and object front-loaded. The second sentence adds a necessary permission note. No extraneous words or redundant information.

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

Completeness4/5

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

Given the tool's simplicity (single parameter) and the presence of a rich output schema (as indicated by has_output_schema=true), the description is sufficient for an agent to call it correctly. The permission requirement is a key contextual element. The only minor gap is not specifying that the output schema provides the return structure, but that is expected.

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

Parameters3/5

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

The schema covers 100% of parameters with a description for 'id', so the description does not need to add much. The description implies the ID refers to a session and that it is the primary key, which is consistent with the schema. No extra nuance is provided that isn't already 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?

The description states a specific verb ('Fetch'), resource ('one session by id'), and scope ('including its notes, battlemap references, and session-image attachments'). It is clear and distinct from siblings like play_get_page or play_list_campaign_sessions, which serve different purposes.

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

Usage Guidelines4/5

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

The description clearly states the primary use case (fetching a session by ID) and implies it should be used when a specific session is needed, rather than listing sessions (play_list_campaign_sessions). However, it does not explicitly state when not to use it or name alternatives, but the context is clear enough.

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

play_invite_campaign_playerInvite a player to a campaignBInspect

Send a campaign invite to another user. Caller must have 'contribute' on the campaign. Play rate-limits this endpoint (per-caller and per-campaign) to deter spam.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNoRole to invite the user as. 'player' is the default and almost always what you want; 'watcher' is read-only; 'gamemaster' grants co-DM permissions.player
userIdYesUser id of the invitee. Required. Pair with play_find_friend if you only have a name or email; invite-by-email is not supported at this endpoint.
campaignIdYesCampaign id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations are all false (readOnlyHint=false, etc.), so the description carries the burden of behavioral disclosure. It adds useful context: the call requires 'contribute' permission and is rate-limited per caller and per campaign. However, it does not mention that the invite creates a pending state that the invitee must accept, nor does it describe any side effects beyond sending the invite. It does not contradict the annotations, so a mid-range score is appropriate.

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

Conciseness5/5

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

The description is two sentences with zero fluff. The first sentence states the primary action, and the second provides two critical constraints (permission and rate limiting). Every word contributes to the agent's decision-making. It is perfectly front-loaded and appropriate in length.

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

Completeness3/5

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

The description covers the core action and constraints but omits some operational context that an agent might need, such as whether the invitee must be a friend or what happens if the user is already in the campaign. The existence of an output schema reduces the need to explain return values, but the description could still benefit from noting that the invite is pending until accepted. Overall, it's adequate but not exhaustive.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters have descriptions in the schema itself. The tool description adds no additional parameter meaning; it merely restates the permission requirement and rate limit. Since the schema already documents the role enum and the userId/campaignId semantics, the description provides no extra value for parameter understanding, warranting the baseline score of 3.

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

Purpose4/5

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

The description clearly states the action: 'Send a campaign invite to another user.' It identifies the resource (campaign invite) and the target (another user). It does not explicitly differentiate from sibling tools like play_respond_to_campaign_invite, but those are distinct enough in name and action. The permission requirement adds specificity, but the description could be stronger by naming the closest sibling alternative.

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

Usage Guidelines2/5

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

The description does not mention when to use this tool versus alternatives. It only states a prerequisite (caller must have 'contribute') and a rate-limit caveat. There is no guidance on when not to use it, such as 'For invite-by-email, use play_find_friend first' (though that hint exists in the schema). The absence of any sibling comparison or exclusions leaves the agent without explicit routing context.

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

play_list_campaign_charactersList characters in a campaignA
Read-onlyIdempotent
Inspect

List the characters participating in a play campaign. Returns play-side character refs; pair with vault_get_character for full character data. Defaults to a summary shape (id, name, image, npc flag, short description); pass detail: 'full' to receive each character's full vault sheet inline.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoResponse shape. 'summary' (default) trims raw-ObjectId arrays and full character sheets to a compact LLM-friendly form; 'full' returns the populated document with every field inline.summary
campaignIdYesMongo `_id` of the campaign.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds valuable behavior beyond that: the default summary shape, the option to request 'full' vault sheets inline, and the note that results are play-side refs. No contradictions 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.

Conciseness5/5

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

Two sentences, no filler. The core action and resource come first, followed by the key pairing guidance and the default-vs-full behavior, all in under 50 words.

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

Completeness5/5

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

A simple list-style tool with an output schema, full parameter coverage, and safety annotations. The description covers what the agent needs: what it lists, how to get full character data, and the optional detail behavior. Nothing essential is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so both campaignId and detail are already well documented in the schema. The description adds a tiny bit of context about output shape but does not meaningfully expand parameter semantics beyond what the schema provides.

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

Purpose5/5

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

The description clearly states the verb ('List') and resource ('characters participating in a play campaign'), and clarifies that these are play-side character refs rather than full vault data. This distinguishes it from related tools like vault_get_character or play_list_my_characters.

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

Usage Guidelines4/5

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

The description gives actionable context: use this to list campaign character refs, then pair with vault_get_character for full data. It doesn't explicitly name alternatives or when-not-to-use conditions, but the pairing guidance effectively routes the agent to the correct workflow.

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

play_list_campaign_companionsList companions in a campaignA
Read-onlyIdempotent
Inspect

List the companions (buddies) attached to a play campaign's characters — the supporting cast a table sees beyond the roster. Read-only; the tie itself is managed on the vault character sheet (vault_attach_companion / vault_detach_companion). Monster-typed companions are excluded server-side. One entry per (Main, companion) pair, so a companion linked by two characters appears twice; each entry carries companionOf: { vaultCharacterId, name, userId } naming the character it accompanies, plus display fields (name, type, ruleset, image, description) and a projected primaryToken slice or null. Pair with vault_get_character on companionVaultId for the companion's full sheet.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYesMongo `_id` of the campaign.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

The description adds significant behavioral nuance beyond the readOnly/idempotent/destructive annotations: monster-typed companions are excluded server-side, duplicate entries appear for multi-linked companions, each entry carries companionOf and a possibly-null primaryToken slice. This meaningfully informs the agent about results it would not otherwise expect.

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 every sentence earns its place: purpose, read-only nature, management boundaries, server-side filtering, duplicate-entry semantics, result fields, and a useful pairing hint. Key information is front-loaded before deeper details.

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

Completeness5/5

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

Given one fully-documented parameter, rich annotations, and an output schema, the description still adds critical context: exclusion behavior, duplicate handling, field semantics, and the companionOf relationship. An agent has everything needed to select and invoke this 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% and the single parameter campaignId is fully documented as the Mongo _id of the campaign. The description adds no extra parameter-specific detail, but none is needed given the schema already covers it.

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

Purpose5/5

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

The description names a specific verb and resource: listing companions attached to a play campaign's characters, and clarifies they are the 'supporting cast' beyond the roster. This clearly differentiates it from sibling tools like play_list_campaign_characters and play_list_campaign_players.

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

Usage Guidelines4/5

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

The description gives clear context: it is read-only, the companion tie is managed elsewhere via vault_attach_companion/vault_detach_companion, and it suggests pairing with vault_get_character for full sheet details. It does not explicitly spell out when not to use it relative to play_list_campaign_characters, but the intent is clear.

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

play_list_campaign_itemsList items allowed in a campaignA
Read-onlyIdempotent
Inspect

List the items the campaign DM has added to the campaign's allowlists. Subset of the broader vault catalog. Allowlists are per-leg: omit ruleset to union the items across every leg, or set it to scope the list to that one leg.

ParametersJSON Schema
NameRequiredDescriptionDefault
rulesetNoOptional leg filter. Omitted, the list unions entries across every leg of the campaign; set to a ruleset to scope the list to that leg only.
campaignIdYesMongo `_id` of the campaign.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value by explaining the per-leg allowlist structure and how ruleset omission changes the result scope. This is meaningful behavioral context beyond the annotations, with no contradiction.

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

Conciseness5/5

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

Two sentences with no filler: the first states the core purpose, the second explains the optional parameter behavior. Every sentence earns its place and the description is immediately 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?

For a simple read-only list operation with only two parameters, full schema coverage, an output schema, and strong annotations, the description covers the only non-obvious behavior (leg-scoping). Nothing needed 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%, and the schema's ruleset description already conveys the union-vs-scoped behavior. The tool description repeats this nuance but adds no new parameter-level information, so the 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 ('List') and resource ('items the campaign DM has added to the campaign's allowlists'), and distinguishes itself from the broader vault catalog by calling itself a 'Subset'. This clearly differentiates it from sibling item-related tools like vault_search_items or play_add_campaign_item.

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

Usage Guidelines4/5

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

The description explains the key conditional behavior of the `ruleset` parameter (omit to union across legs, set to scope to one leg), which tells the agent when to use the tool with or without that parameter. It does not explicitly name alternative tools or state when not to use it, but the per-leg scoping guidance provides clear practical usage context.

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

play_list_campaign_movesList moves in a campaignA
Read-onlyIdempotent
Inspect

List the play-by-email moves of one campaign — the move feed. Sorted by shelf position (order), newest first by default; pass order: 'asc' for reading order. Defaults to a summary shape: each move's description is a ~240-character prose preview (image URLs and [[...]] markers don't count toward the budget) carrying a descriptionTruncated flag; detail: 'full' returns complete bodies. Child moves (split-party scenes) are excluded unless children: true. Restricted moves are server-filtered: players see only moves they're listed on; the GM sees all. Caller must be a member of the campaign.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoCap the number of moves returned. Hard-capped at 200 server-side.
orderNo'desc' (default) returns the feed shape — newest shelf position first. 'asc' returns reading order.desc
detailNoResponse shape. 'summary' (default) trims each move's description to a ~240-character prose preview so a long campaign doesn't overflow the tool-result budget — image URLs and [[...]] markers don't count toward the budget and the cut lands on a word boundary — and adds a `descriptionTruncated` boolean flagging whether more remains. 'full' returns complete bodies.summary
childrenNoInclude child moves (split-party scenes). Default false: the feed shape, parentless moves only — children render on their parent's page. Pass true when you need every move, e.g. to pick an append target.
campaignIdYesMongo `_id` of the play campaign.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already mark the tool as read-only and idempotent, and the description adds substantial behavioral detail beyond that: server-side restriction filtering by role, default exclusion of child moves, truncation with a descriptionTruncated flag, and GM-versus-player visibility. This gives an agent a realistic model of what the call will return and how permissions affect it.

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 then logically covers sorting, response shape, child moves, permissions, and membership. It is dense and occasionally restates schema details, but given the five parameters and nuanced behavior, the length is justified.

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 read-only listing tool with an output schema present, the description covers everything needed to call it correctly: default and alternate shapes, ordering, child-move handling, restriction filtering, and the membership prerequisite. No important behavioral gap remains.

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

Parameters3/5

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

The input schema already provides 100% parameter coverage with detailed descriptions, defaults, and enums for order, detail, children, and limit. The tool description largely restates those defaults rather than adding new parameter-level meaning, so the high-coverage baseline of 3 is appropriate.

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

Purpose5/5

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

States a specific action — listing play-by-email moves for a single campaign — and describes the result as 'the move feed', making the resource and scope unambiguous. This clearly separates it from sibling tools like play_get_move, which retrieves a single move, and play_list_session_moves, which is session-scoped.

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

Usage Guidelines4/5

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

Provides strong contextual guidance: default feed shape, ordering behavior, full-detail option, child-move inclusion, and the campaign-membership requirement. It does not explicitly name alternative sibling tools or state when to prefer them, so it stops just short of fully explicit routing.

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

play_list_campaign_playersList players in a campaignA
Read-onlyIdempotent
Inspect

List the players in a play campaign with their roles, invite status, and any per-player flags.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYesMongo `_id` of the campaign.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds the output fields but does not describe behavioral details such as whether pending invites are included, ordering, or authentication requirements. This is acceptable but not a strong addition beyond 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?

A single sentence that front-loads the action and resource, then adds the meaningful output components. There is no filler or repetition of schema field names.

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

Completeness5/5

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

For a simple read-only list tool with one parameter idempotent to call, the description plus annotations and output schema are sufficient. The agent knows what it lists, what fields are surfaced, and that the call is safe to make.

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%: the only parameter, campaignId, is documented as a Mongo `_id`. The description adds no parameter-specific detail, but the schema already carries the full semantic burden, so the baseline of 3 applies.

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

Purpose4/5

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

The description states a specific verb and resource: 'List the players in a play campaign' and adds the fields returned (roles, invite status, per-player flags). It is clear, but it does not explicitly distinguish itself from sibling tools like play_list_campaign_characters or play_list_campaign_sessions, so it earns a 4 rather than a 5.

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

Usage Guidelines3/5

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

The intended use is implied by the name and the one-line description, but there is no explicit guidance about when to use this tool versus other campaign list tools or exclusions. It is not misleading, but it leaves the agent to infer usage from context.

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

play_list_campaign_rulesList rules allowed in a campaignA
Read-onlyIdempotent
Inspect

List the rules the campaign DM has added to the campaign's allowlists. Subset of the broader vault catalog. Allowlists are per-leg: omit ruleset to union the rules across every leg, or set it to scope the list to that one leg.

ParametersJSON Schema
NameRequiredDescriptionDefault
rulesetNoOptional leg filter. Omitted, the list unions entries across every leg of the campaign; set to a ruleset to scope the list to that leg only.
campaignIdYesMongo `_id` of the campaign.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context: allowlists are per-leg, and omitting `ruleset` unions across legs. This goes beyond the schema by clarifying the default aggregation behavior. It doesn't describe pagination or return shape, but the output schema exists and the read-only nature is annotated.

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

Conciseness5/5

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

Three sentences, all informative and front-loaded with the core purpose. The first sentence states what it does, the second distinguishes it from the broader catalog, and the third explains the key parameter behavior. No filler or 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?

For a read-only list tool with a clear output schema, full parameter documentation, and annotations covering safety, the description is complete. It explains the one non-obvious behavior (per-leg allowlists and union behavior) that an agent would need to know to call it correctly. No significant gaps.

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

Parameters4/5

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

Schema description coverage is 100%, so the schema already documents both parameters well. The description adds value by explaining the semantic effect of omitting vs. setting `ruleset` (union across legs vs. scoped to one leg), which reinforces and clarifies the schema's description. It doesn't add new parameter details beyond that, but the schema is already thorough.

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

Purpose5/5

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

The description clearly states the tool lists rules the campaign DM has added to the campaign's allowlists, with a specific verb ('List') and resource ('rules... allowlists'). It also distinguishes itself from the broader vault catalog and from sibling tools like play_add_campaign_rule/play_remove_campaign_rule by focusing on listing allowed rules.

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

Usage Guidelines5/5

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

The description explicitly explains when to use the tool and how to vary behavior: omit `ruleset` to union rules across every leg, or set it to scope to one leg. It also notes this is a subset of the broader vault catalog, implying the alternative for broader catalog searches (vault_search_rules). This is clear usage guidance.

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

play_list_campaign_sessionsList sessions in a campaignA
Read-onlyIdempotent
Inspect

List sessions belonging to one campaign. Caller must be a member of the campaign. Defaults to a compact summary shape ordered by most-recently-updated; pass detail: 'full' for the populated shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo'recent' (default) orders by updatedAt descending so the freshest sessions come back first; 'date' removes the gateway's `recent` override and defers to the play backend's default ordering for the endpoint.recent
limitNoCap the number of sessions returned. Hard-capped at 200 server-side.
detailNoResponse shape. 'summary' (default) returns id + name + status + date + campaign-ref only; 'full' returns the populated session document including battlemap refs and the full description body.summary
campaignIdYesMongo `_id` of the play campaign.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already establish that this is a safe, read-only, idempotent operation. The description adds useful behavioral context beyond those annotations: membership requirement, default compact summary shape, most-recently-updated ordering, and the `detail: 'full'` opt-in for the populated shape.

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

Conciseness5/5

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

Two sentences, no filler. The action and membership requirement are front-loaded, followed immediately by the most decision-relevant parameter behavior. Every sentence earns its place.

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

Completeness5/5

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

For a read-only listing tool with an output schema and full annotations, the description covers the essential operational context: campaign scope, membership precondition, and the shape/ordering defaults. Nothing critical is missing for an agent to invoke 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 schema carries the full parameter documentation. The description complements it by highlighting the practical choice between summary and full shapes and noting the default ordering, which reinforces the meaning of `sort` and `detail` without repeating schema details.

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

Purpose5/5

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

The description uses a specific verb and resource ('List sessions') and clearly scopes the operation to one campaign. The title and description together unambiguously distinguish this from sibling list tools like play_list_my_sessions.

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

Usage Guidelines4/5

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

The description states the key prerequisite ('Caller must be a member of the campaign') and gives clear context on default behavior. It does not explicitly name alternatives or state when not to use it, but the intended use case is clear from the one-campaign scope.

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

play_list_campaign_spellsList spells allowed in a campaignA
Read-onlyIdempotent
Inspect

List the spells the campaign DM has added to the campaign's allowlists. Subset of the broader vault catalog. Allowlists are per-leg: omit ruleset to union the spells across every leg, or set it to scope the list to that one leg.

ParametersJSON Schema
NameRequiredDescriptionDefault
rulesetNoOptional leg filter. Omitted, the list unions entries across every leg of the campaign; set to a ruleset to scope the list to that leg only.
campaignIdYesMongo `_id` of the campaign.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive behavior. The description adds the key behavioral trait that allowlists are per-leg and that omitting `ruleset` unions across legs while setting it scopes to one leg, which materially affects the result set.

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

Conciseness5/5

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

Three short sentences, each carrying useful information: the action/scope, the relationship to the vault catalog, and the leg-filtering behavior. There is no filler or repetition of the schema.

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 two-parameter read-only list tool with an output schema, the description covers the only non-obvious behavior (ruleset omission) and the relationship to the broader catalog. An agent has enough to select and call it correctly without additional context.

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

Parameters3/5

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

The schema already describes both parameters with 100% coverage, including the exact union-vs-scope behavior of `ruleset` and the Mongo `_id` nature of `campaignId`. The description's ruleset advice mirrors the schema rather than adding new parameter meaning, so the baseline 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('List') and resource ('spells the campaign DM has added to the campaign's allowlists'), and positions it as a 'subset of the broader vault catalog,' distinguishing it from vault_search_spells and the add/remove campaign spell siblings. The title and name are reinforced rather than merely restated.

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

Usage Guidelines4/5

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

It gives clear context for when to call this tool — when you need a campaign's DM-curated spell allowlists rather than the full vault catalog. It does not explicitly name an alternative or state when not to use it, but the scope and ruleset-union behavior make the usage context clear.

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

play_list_my_campaignsList campaigns I runA
Read-onlyIdempotent
Inspect

List campaigns where the calling user is the DM/owner. Each campaign's ruleset-specific material lives in its legs array — one entry per ruleset, each carrying { ruleset, active, ... }; there is no campaign-level ruleset field. Defaults to a compact summary shape: identification fields, counts of rules/items/spells/sessions/players/characters, and the character roster (playId + vaultId pairs). Pass detail: 'full' to receive the full campaign documents (raw ObjectId arrays for the legs' allowlists, full descriptions, X-card history).

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoResponse shape. 'summary' (default) trims raw-ObjectId arrays and full character sheets to a compact LLM-friendly form; 'full' returns the populated document with every field inline.summary

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Even though readOnlyHint and idempotentHint annotations already establish the safety profile, the description adds important behavioral detail: the `legs` array structure, the absence of a campaign-level ruleset field, and the difference between the default summary shape and `detail: 'full'`. This is exactly the kind of non-obvious behavior an agent needs to interpret results correctly.

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 every sentence earns its place: purpose, structural gotcha, default output, and full-output behavior are all covered in two sentences. The most important selection predicate is front-loaded, and no content is wasted on restating the name or obvious schema details.

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

Completeness5/5

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

With only one optional parameter, strong annotations, and an output schema present, the description covers everything needed to select and invoke the tool correctly: ownership filter, response shape, and the key `legs`-array nuance. Nothing essential is missing for an agent to make an informed call.

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

Parameters5/5

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

Schema coverage is 100%, and the schema already describes the `detail` enum. The description goes further by explaining what the summary shape contains (counts plus `playId`/`vaultId` roster pairs) and what full shape adds (raw ObjectId arrays, full descriptions, X-card history). This gives the agent concrete expectations for each parameter value beyond the schema text.

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: 'List campaigns where the calling user is the DM/owner.' This clearly distinguishes the tool from siblings like play_list_participated_campaigns, which would include campaigns the user merely participates in. The title and description align without being tautological.

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

Usage Guidelines4/5

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

The description clearly defines the selection predicate — campaigns the calling user owns — and explains the summary vs. full output choice, giving the agent enough context to know when it applies. However, it does not explicitly contrast itself with sibling alternatives such as play_list_participated_campaigns or play_get_campaign, so it stops short of full when-to-use/when-not-to-use guidance.

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

play_list_my_charactersList my play charactersA
Read-onlyIdempotent
Inspect

List the characters the calling user has in any of their campaigns (DM or player). For a single character's full sheet data, use vault_get_character with the returned id.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description only needs to add context beyond those. It does this by specifying the caller-scoped nature of the results and the DM-or-player coverage. Mentioning the returned id also implies the output contains character ids usable by vault_get_character, which is helpful.

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 crisp sentences with no filler. The primary action is stated first, and the alternative tool reference is placed second. Every sentence earns its place.

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

Completeness5/5

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

For a zero-parameter, read-only list tool with an output schema and safety annotations, the description is complete. It tells the agent what results are returned, who they belong to, and how to follow up for full character 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?

The input schema has zero parameters, and schema description coverage is 100%, so parameter semantics are trivially satisfied. The baseline of 4 for no-parameter tools applies; the description does not need to add parameter details.

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

Purpose5/5

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

The description clearly states the verb and resource: 'List the characters the calling user has in any of their campaigns (DM or player).' It also distinguishes itself from related tools like vault_get_character by noting that full sheet data belongs there. The scope is explicit and unambiguous.

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

Usage Guidelines4/5

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

The description gives clear context for when to use this tool versus vault_get_character: for a quick list of a user's characters across campaigns, and for full sheet data use vault_get_character with the returned id. It does not explicitly mention play_list_campaign_characters as an alternative for per-campaign listing, but it provides enough routing guidance to be useful.

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

play_list_my_friendsList my friendsA
Read-onlyIdempotent
Inspect

List the calling user's accepted friends. Returns each friend's display name and id, suitable for campaign-invite or friend-lookup workflows.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate read-only, idempotent, and non-destructive. The description adds context about the scope ('calling user's accepted friends') and the return content (display name and id), which is useful beyond the annotations. No contradictions.

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

Conciseness5/5

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

The description is very brief, front-loads the purpose and scope, and adds a single sentence on typical use cases. Every sentence earns its place, with no fluff.

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

Completeness4/5

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

The tool is simple with no parameters, and the description mentions the return fields (name and id), which is sufficient for an agent to know what to expect. An output schema exists, so detailed return structure is likely covered there. Slightly missing is whether the list is sorted or if pagination applies, but for a simple list tool this is adequate.

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?

There are zero parameters, and the schema is empty with 100% coverage. The description clarifies the output fields, which helps agents understand what they'll receive, but parameters are nonexistent, so the baseline of 4 (for no params) 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 clearly states the tool lists the calling user's accepted friends, specifies the returned data (display name and id), and mentions intended use cases (campaign-invite or friend-lookup). It is distinct from sibling tools like play_list_pending_friends and play_find_friend.

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

Usage Guidelines4/5

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

The description implies use for retrieving accepted friends, distinct from pending friend requests (play_list_pending_friends) and searching for specific friends (play_find_friend). However, it doesn't explicitly state when not to use this tool or mention alternatives, but the use-case mention provides decent guidance.

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

play_list_my_sessionsList my sessionsA
Read-onlyIdempotent
Inspect

List sessions the calling user is part of across all their campaigns (DM or player). Defaults to a compact summary shape ordered by most-recently-updated. Pass detail: 'full' to receive the populated session document (battlemap refs, full description). Use limit to cap the array size.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo'recent' (default) orders by updatedAt descending so the freshest sessions come back first; 'date' removes the gateway's `recent` override and defers to the play backend's default ordering for the endpoint.recent
limitNoCap the number of sessions returned. Hard-capped at 200 server-side.
detailNoResponse shape. 'summary' (default) returns id + name + status + date + campaign-ref only; 'full' returns the populated session document including battlemap refs and the full description body.summary

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already mark the tool read-only and idempotent; the description adds non-obvious behavior: the response defaults to a compact summary shape, is ordered by most-recently-updated, and can be expanded via detail='full' to include battlemap refs and full descriptions. It does not mention the sort='date' option, but the schema covers it.

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 compact sentences, front-loaded with the core purpose, then defaults, then configuration options. Every sentence adds 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?

For a read-only list tool with an output schema, 100% schema coverage, and clear annotations, this description provides all selection and invocation context: scope, default ordering, response shape, and how to request full detail or cap results. Nothing material 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 coverage is 100%, with every parameter (sort, limit, detail) already described in the input schema. The description reinforces detail and limit but adds no new parameter semantics beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

The description opens with a clear verb and resource: 'List sessions the calling user is part of across all their campaigns (DM or player).' This scope distinguishes it from sibling tools like play_list_campaign_sessions (campaign-scoped) and play_get_session (single session).

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

Usage Guidelines4/5

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

It clearly states this is the cross-campaign, user-centric listing tool ('across all their campaigns'), which implies when to prefer it over campaign-scoped alternatives. However, it does not explicitly name a sibling or state when not to use it, so it stops short of a 5.

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

play_list_pagesList play pagesA
Read-onlyIdempotent
Inspect

List play pages, optionally filtered by what they're attached to and/or by documentType. To find session recaps, pass refType: 'session', refId: '<sessionId>', documentType: 'player-recap'. Defaults to a compact summary shape; pass detail: 'full' for the page body markdown inline.

ParametersJSON Schema
NameRequiredDescriptionDefault
refIdNoFilter pages by the referenced entity's Mongo `_id`. Pair with `refType` to scope the lookup.
detailNoResponse shape. 'summary' (default) drops the markdown `description` body and trims the owner populate, keeping identification + `ref` + `documentType` + the short `summary` field. 'full' returns the populated page document including the full body.summary
refTypeNoFilter pages by the entity type they reference. One of: campaign, session, character.
documentTypeNoFilter pages by documentType: 'player-recap' (session recap), 'dm-notes' / 'player-notes' (character-attached notes), 'campaign-logistics' (the campaign's one logistics page, managed by its own endpoint), or 'generic' (free-form).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral detail beyond the annotations by explaining the default compact summary shape and the effect of passing 'full' for the page body markdown, which helps the agent anticipate response behavior.

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

Conciseness5/5

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

Three sentences with no fluff: the main action and filters come first, followed by a concrete recipe for the most likely use case, then the key response-shape toggle. Every sentence earns its place and the most important 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?

For a read-only list tool with four optional parameters, full schema coverage, and an output schema, the description covers the essential invocation patterns, the filter semantics, and the response-shape choice. There are no required parameters or hidden gotchas left unexplained.

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

Parameters5/5

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

Schema coverage is 100%, but the description goes further by clarifying that refId/refType constitute 'what they're attached to' and by giving an exact, actionable example for finding session recaps. It also interprets the 'detail' parameter in terms of the returned shape, adding meaning beyond the schema's raw enum/default definitions.

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

Purpose4/5

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

The description uses the specific verb 'List' with a clear resource, 'play pages', and states the optional filters (attachment and documentType). It doesn't explicitly differentiate itself from sibling tools like play_list_user_pages or play_get_page, so while the purpose is clear, the sibling distinction is left implicit.

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

Usage Guidelines4/5

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

The description gives concrete usage guidance with a worked example for session recaps ('pass refType: session, refId: <sessionId>, documentType: player-recap'), which tells the agent when this filter combination is appropriate. It doesn't explicitly state when not to use this tool versus alternatives, but the usage context is otherwise clear.

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

play_list_participated_campaignsList campaigns I play inA
Read-onlyIdempotent
Inspect

List campaigns where the calling user is a player (not the DM). Each campaign's ruleset-specific material lives in its legs array — one entry per ruleset, each carrying { ruleset, active, ... }; there is no campaign-level ruleset field. Pair with play_list_my_campaigns for a complete view of the user's campaign involvement.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds valuable behavioral context by explaining the structure of the legs array and the absence of a campaign-level ruleset field, which helps the agent anticipate response shape and interpret results correctly.

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

Conciseness5/5

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

The description is two sentences with no filler. The core purpose is front-loaded, and the additional structural detail about the legs array earns its place by clarifying a non-obvious data shape. It is both concise and well-organized.

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

Completeness5/5

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

For a zero-parameter read-only list tool with an output schema and strong annotations, the description covers everything needed: what it returns, the key structural nuance, and how it relates to the sibling tool. There is no significant missing 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?

The tool has zero parameters and the schema is an empty object, so parameter semantics are trivially complete. Baseline 4 is appropriate since the description doesn't need to add parameter details and doesn't introduce any confusion.

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 precisely what the tool does: it lists campaigns where the calling user is a player, explicitly excluding the DM role. It also distinguishes the tool from play_list_my_campaigns by positioning it as the player-only view, making sibling differentiation clear.

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

Usage Guidelines4/5

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

The description gives clear context for when to use this tool: when you need campaigns where the user is a player, not a DM. It also names the sibling play_list_my_campaigns and recommends pairing them for a complete view, though it doesn't explicitly say when to choose one over the other beyond the player/DM distinction.

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

play_list_pbem_inboxList a campaign's PBEM inboxA
Read-onlyIdempotent
Inspect

List the captured inbound emails on a play-by-email campaign. Each item carries the matched player (or null when unmatched), sender display name, sent time, subject, verbatim body, a distilled replyText (latest contribution with quoted history stripped), senderIsGamemaster (true when the sender is the campaign owner or an accepted gamemaster — the move builder boxes GM emails), and senderDisplayName (the GM-set attribution name for the matched player, empty when unset). GM-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoFilter by item status. 'new' (default) is the pending pile awaiting triage; 'consumed' items are linked to a published move; 'dismissed' items were discarded by the GM.new
campaignIdYesMongo `_id` of the play campaign.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already mark this read-only, idempotent, and non-destructive. The description adds value beyond annotations by explaining GM-only access, the null matched-player case, replyText stripping quoted history, and the senderIsGamemaster/senderDisplayName semantics.

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 purpose is front-loaded in the first sentence, and the follow-up sentence packs useful return-field semantics without filler. The long parenthetical about the move builder is slightly dense, but no sentence is wasted.

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 read-only listing tool, the description covers the access restriction, the status-filtered subject matter, and the meaning of the returned fields. With a full parameter schema, readOnly/idempotent annotations, and an output schema present, nothing essential is missing for an agent 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 coverage is 100%, with campaignId and status fully described including the enum meanings and default. The description reinforces the item-level concepts but does not add parameter-level details beyond what the schema already provides, so the baseline of 3 applies.

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

Purpose5/5

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

The description opens with the specific action 'List' and a precise resource: captured inbound emails on a play-by-email campaign. It also explains what each returned item contains, leaving no ambiguity about what the tool does and how it differs from mutation siblings like play_consume_pbem_emails or play_dismiss_pbem_email.

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

Usage Guidelines3/5

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

The 'GM-only' note gives an access constraint, and the title implies the use case of reviewing a campaign's PBEM inbox. However, the free-text description never explicitly says when to choose this over related tools such as play_consume_pbem_emails or play_resolve_pbem_email; the usage guidance is implied rather than stated.

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

play_list_pending_friendsList pending friend requestsA
Read-onlyIdempotent
Inspect

List friend requests directed at the calling user that have not yet been accepted or declined.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds the scoping constraint (pending requests for the calling user), which is useful for selection but does not disclose additional behavioral aspects like pagination, ordering, or return format beyond what the output schema presumably covers.

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

Conciseness5/5

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

The description is a single, tight sentence with no filler. It front-loads the verb and resource and clearly states the filtering condition, making it easy for an agent to parse quickly.

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

Completeness4/5

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

For a simple read-only list operation with no parameters and an output schema present, the description is complete. It clearly defines the input scope and result semantics. Minor missing details like pagination limits could be added but are not critical given the tool's simplicity and the presence of an 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?

The tool has zero parameters and the description correctly avoids repeating schema information. Since there are no params to explain, a baseline of 4 is appropriate; the description provides no additional parameter details because none are needed.

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

Purpose5/5

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

The description clearly states the verb 'List', the resource 'friend requests', and the specific scope: 'directed at the calling user that have not yet been accepted or declined.' This precisely distinguishes it from sibling tools like play_list_my_friends (which lists all friends) and accept/decline/cancel actions.

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

Usage Guidelines3/5

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

The description implies usage by specifying the pending status and target user, but it does not explicitly state when to use this tool versus alternatives (e.g., play_list_my_friends, play_accept_friend_request). No when-not or alternative guidance is provided beyond the inherent scope.

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

play_list_session_movesList a chapter's movesA
Read-onlyIdempotent
Inspect

List the moves grouped under one session (a play-by-email 'chapter'), in reading order with full bodies by default; detail: 'summary' trims each description to a ~240-character prose preview with a descriptionTruncated flag. Restricted moves are server-filtered to the caller's visibility. Caller must be a member of the session's campaign.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoResponse shape. 'full' (default) returns complete bodies in reading order. 'summary' trims each move's description to a ~240-character prose preview — image URLs and [[...]] markers don't count toward the budget and the cut lands on a word boundary — and adds a `descriptionTruncated` boolean flagging whether more remains.full
sessionIdYesMongo `_id` of the chapter session.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds genuinely valuable behavioral context beyond that: restricted moves are server-filtered to the caller's visibility, the summary mode truncates to a prose preview with a descriptionTruncated flag, and a campaign-membership auth requirement exists. 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.

Conciseness5/5

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

Three sentences, zero waste. The core action and default behavior are front-loaded, the summary-mode behavior is compressed into one semicolon clause (with full detail delegated to the schema), and the visibility filtering and membership requirement each earn their own sentence.

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 2-parameter, non-nested list operation with a full output schema and complete safety annotations, the description covers everything an agent needs: ordering, default vs summary modes, visibility filtering, and the caller prerequisite. Return-value shape is handled by the output schema, and pagination is not a meaningful gap given no pagination parameters exist.

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 fully documents both parameters — the detail param description is exceptionally thorough (truncation budget, word-boundary cuts, flag semantics). The description restates the detail behavior only briefly and adds no new syntactic or format information, 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 and resource — 'List the moves grouped under one session' — and clarifies the domain-specific term ('a play-by-email chapter'). The scope is further pinned down by 'in reading order with full bodies by default,' making it easily distinguishable from siblings like play_list_campaign_moves, play_get_move, or play_list_campaign_sessions without opening their schemas.

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

Usage Guidelines4/5

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

Provides clear context: this is the tool for listing moves within one session, with a stated prerequisite ('Caller must be a member of the session's campaign') and guidance on choosing summary vs full detail. It stops short of explicitly naming alternatives or exclusions (e.g., 'use play_get_move for a single move'), which the large sibling list would have benefited from.

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

play_list_user_pagesList pages authored by a userA
Read-onlyIdempotent
Inspect

List the pages a given user has authored. Pass own user id (from whoami) to see private pages too; for another user, only public pages come back. Defaults to summary shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoResponse shape. 'summary' (default) drops the markdown `description` body and trims the owner populate, keeping identification + `ref` + `documentType` + the short `summary` field. 'full' returns the populated page document including the full body.summary
userIdYesMongo `_id` of the user whose pages to list. Pass own user id (from `whoami`) to see private pages too; for another user, only public pages come back.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds useful context about privacy scoping based on whose userId is passed, and notes the default summary response shape. 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.

Conciseness5/5

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

Two concise sentences, with the main purpose front-loaded and the key usage nuance immediately following. Every sentence adds value 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?

For a low-complexity read tool with a rich schema, an output schema, and full annotations, this description covers the essential behavior, privacy semantics, and default response shape. Nothing critical is missing for an agent 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 coverage is 100% and the description largely repeats what the schema already documents, including the privacy behavior and default summary shape. The description adds no substantial new parameter meaning beyond the schema.

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

Purpose4/5

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

The description states a specific verb and resource: 'List the pages a given user has authored.' This is clear and distinct from a generic page-listing tool, but it does not explicitly differentiate from sibling tools like play_list_pages.

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

Usage Guidelines4/5

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

The description gives clear context: pass your own user id to see private pages, another user id to see only public pages. It does not explicitly mention alternatives or when-not-to-use the tool, but the provided usage context is practical and actionable.

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

play_regenerate_pbem_addressRegenerate a campaign's inbound addressA
DestructiveIdempotent
Inspect

Mint a fresh inbound address for the campaign (leak recovery). The old address stops routing IMMEDIATELY and every player must switch to the new one — confirm with the user first. GM-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYesMongo `_id` of the play campaign.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

The description adds rich behavioral context beyond the annotations: the old address stops routing immediately, every player must switch, confirmation is required, and the operation is GM-only. This substantially exceeds what 'destructiveHint: true' alone conveys and gives an agent the necessary risk framing.

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

Conciseness5/5

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

The description is two sentences, efficiently front-loading the core action and then the critical consequences. Every clause earns its place: leak recovery, immediate routing stop, player impact, user confirmation, and GM-only restriction.

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 destructive, non-obvious operation, the description covers all essential context: why to call it, what will happen, who is allowed, and what prerequisite coordination is needed. With an output schema and clear parameter documentation present, nothing necessary 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 coverage is 100% and the single parameter campaignId is already well-documented as a Mongo _id. The description does not need to add parameter detail, but it also does not add anything beyond the schema, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states a specific action ('Mint a fresh inbound address for the campaign') and identifies the purpose via 'leak recovery'. It also explains the concrete consequence—old address stops routing immediately—which distinguishes this from any similar-looking play_* tools.

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

Usage Guidelines4/5

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

The description gives clear context for when to use it: as leak recovery, with the explicit directives to confirm with the user first and only for GMs. It does not name alternatives or exclusions, but none of the siblings appear to be a direct substitute, so the guidance is sufficient.

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

play_remove_campaign_itemRemove an item from a campaign's allowlistA
DestructiveIdempotent
Inspect

Remove a vault item from a campaign's allowlist. Removal targets the leg matching the ITEM's own ruleset; the optional ruleset param only confirms that leg (mismatch answers 400), never retargets. Caller must have 'contribute'.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemIdYesVault document id (`itemId`) to remove. Required.
rulesetNoOptional confirmation of the target leg's ruleset. The entity always lands on the leg matching its OWN ruleset — this param never retargets; when present, play verifies it matches that leg and answers 400 on a mismatch. Omit unless you want the placement double-checked.
campaignIdYesCampaign id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations, the description discloses important behavioral nuance: removal targets the leg matching the item's own ruleset, the optional ruleset parameter only confirms rather than retargets, and a mismatch returns 400. It also states the required permission. This adds substantial value over the structured annotation 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?

Three concise sentences: the main action, the critical ruleset behavior, and the permission requirement. Every sentence carries necessary information and is front-loaded with the core purpose.

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 destructive mutation with an output schema and fully documented parameters, the description covers permission requirements, edge-case behavior (ruleset mismatch), and the core removal semantics. Nothing critical is missing for an agent to invoke 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. The description adds meaningful semantics for the ruleset parameter—clarifying that it never retargets and only confirms the target leg, with a 400 on mismatch—which goes beyond the schema's enum and description. itemId and campaignId are straightforward and already well documented.

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 and resource: 'Remove a vault item from a campaign's allowlist.' This clearly distinguishes it from sibling tools like play_remove_campaign_player, play_remove_campaign_rule, and play_remove_campaign_spell, which target different resource types.

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

Usage Guidelines4/5

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

The description gives clear context for when the tool is appropriate: removing a vault item from a campaign allowlist, and it specifies a prerequisite ('Caller must have 'contribute''). It does not explicitly name alternatives or exclusion conditions, but the resource-specific wording and sibling names make the intended usage unambiguous.

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

play_remove_campaign_playerRemove a player from a campaignA
DestructiveIdempotent
Inspect

Remove a player from a campaign. Caller must have 'contribute'. The campaign owner cannot be removed. playerId is the player-record id returned by play_list_campaign_players (the embedded player doc id, NOT the user's id).

ParametersJSON Schema
NameRequiredDescriptionDefault
playerIdYesEmbedded player document id from play_list_campaign_players.
campaignIdYesCampaign id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already convey destructive and idempotent behavior. The description adds non-obvious behavioral constraints: the permission requirement, the owner cannot be removed, and the critical clarification that playerId is the embedded player doc id, not the user's id. There is 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.

Conciseness5/5

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

Three concise sentences, front-loaded with the action, with each subsequent sentence adding a necessary constraint or disambiguation. There is no filler or repeated schema content.

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 two-parameter tool with an output schema and annotations already covering safety and idempotency, the description supplies the permission requirement, ownership constraint, and ID provenance. An agent has the information needed to select and invoke it 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. The description adds extra meaning for playerId by stressing that it is returned by play_list_campaign_players and is NOT the user's id, which reduces a likely mistake. campaignId is simple and already adequately described 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?

The description uses a specific verb ('Remove') with a clearly bounded resource ('a player from a campaign'). This distinguishes it from sibling removal tools targeting items, rules, or spells.

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

Usage Guidelines4/5

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

The description provides clear context: a required permission ('contribute'), an exclusion ('campaign owner cannot be removed'), and a pointer to play_list_campaign_players as the source of the playerId. It does not explicitly name alternative tools or provide when-not-to-use guidance, so it stops short of a 5.

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

play_remove_campaign_ruleRemove a rule from a campaign's allowlistA
DestructiveIdempotent
Inspect

Remove a vault rule from a campaign's allowlist. Removal targets the leg matching the RULE's own ruleset; the optional ruleset param only confirms that leg (mismatch answers 400), never retargets. Caller must have 'contribute'.

ParametersJSON Schema
NameRequiredDescriptionDefault
ruleIdYesVault document id (`ruleId`) to remove. Required.
rulesetNoOptional confirmation of the target leg's ruleset. The entity always lands on the leg matching its OWN ruleset — this param never retargets; when present, play verifies it matches that leg and answers 400 on a mismatch. Omit unless you want the placement double-checked.
campaignIdYesCampaign id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Beyond the destructiveHint=true annotation, the description adds valuable context: removal targets the leg matching the rule's own ruleset, the `ruleset` parameter only confirms (never retargets), mismatch yields 400, and caller must have 'contribute'. This exceeds the annotation coverage and clarifies the operation's behavior.

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

Conciseness5/5

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

Three sentences with no filler: the first states the core purpose, the second explains the critical targeting nuance, and the third states the required permission. Every sentence earns its place, and the most important information is front-loaded.

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

Completeness4/5

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

Given the presence of an output schema and annotations, the description covers the essential aspects: purpose, the unusual `ruleset` behavior, and the auth requirement. It doesn't spell out success/error responses beyond the 400 case, but the output schema and annotations reduce the need for that detail.

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 description largely repeats what the `ruleset` parameter schema already states (confirmation only, no retargeting, 400 on mismatch). It adds no new parameter-level meaning beyond the schema, so the baseline score of 3 applies.

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

Purpose5/5

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

The description uses a specific verb ('Remove') and resource ('vault rule') with a clear target ('campaign's allowlist'), which distinguishes it from sibling tools like play_add_campaign_rule, play_remove_campaign_item, and vault_delete_rule. The purpose is immediately understood without needing to inspect the schema.

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

Usage Guidelines3/5

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

The description implies usage ('Remove a vault rule from a campaign's allowlist') but provides no explicit when-to-use guidance or alternatives. It does not mention sibling tools or exclusion conditions, so an agent must infer the correct tool from the name and purpose alone.

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

play_remove_campaign_spellRemove a spell from a campaign's allowlistA
DestructiveIdempotent
Inspect

Remove a vault spell from a campaign's allowlist. Removal targets the leg matching the SPELL's own ruleset; the optional ruleset param only confirms that leg (mismatch answers 400), never retargets. Caller must have 'contribute'.

ParametersJSON Schema
NameRequiredDescriptionDefault
rulesetNoOptional confirmation of the target leg's ruleset. The entity always lands on the leg matching its OWN ruleset — this param never retargets; when present, play verifies it matches that leg and answers 400 on a mismatch. Omit unless you want the placement double-checked.
spellIdYesVault document id (`spellId`) to remove. Required.
campaignIdYesCampaign id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations' destructiveHint, the description reveals the key leg-selection rule (removal targets the leg matching the spell's own ruleset), the specific failure mode (400 on ruleset mismatch), and the auth requirement. These are non-obvious behaviors that materially affect how an agent should call and interpret the tool.

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

Conciseness5/5

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

Three compact sentences front-load the core action and then efficiently add the non-obvious ruleset behavior and permission requirement. Every sentence earns its place, and the code-formatted parameter names make the reference unambiguous.

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 description covers the destructive action, leg-selection semantics, mismatch response, and caller permission. An output schema exists, so return-value details need not be repeated. An agent has everything needed to select and invoke this 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%, so campaignId, spellId, and the ruleset enum/behavior are already documented in the schema. The description restates the important ruleset nuance but does not add parameter semantics beyond what the schema provides. A baseline of 3 is appropriate when the schema does the heavy lifting.

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

Purpose5/5

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

The description opens with an explicit verb ('Remove') and a precise target ('a vault spell from a campaign's allowlist'), clearly distinguishing this from deleting the vault spell itself (vault_delete_spell) and from removing other campaign resources (play_remove_campaign_item/rule/player). The title reinforces the same action, leaving no ambiguity about the resource affected.

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

Usage Guidelines4/5

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

The description clearly states the caller permission prerequisite ('Caller must have contribute') and explains when the optional ruleset parameter should be used: only as confirmation, never as a retargeting mechanism. It does not explicitly name alternative tools such as play_list_campaign_spells for inspecting the allowlist, but the context is sufficient to guide correct use.

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

play_remove_friendRemove a friendA
DestructiveIdempotent
Inspect

Remove an existing friend connection. Pass friendId from play_list_my_friends. Destructive on the social graph; both sides lose the connection.

ParametersJSON Schema
NameRequiredDescriptionDefault
friendIdYes`_id` of the friend record on the calling user's friends list. NOT the other user's id. Use play_list_pending_friends (for accept/decline) or play_list_my_friends (for remove) to obtain it.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already flag this as destructive and not read-only. The description adds meaningful behavioral context beyond those flags: 'Destructive on the social graph; both sides lose the connection,' which tells the agent the exact blast radius and impact. It does not address auth or reversibility, but the annotations carry the core safety signal.

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

Conciseness5/5

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

The description is three short sentences with no filler. It front-loads the action, then supplies the parameter source, then the destructive consequence. Every sentence earns its place.

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

Completeness5/5

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

For a single-parameter, destructive tool with an output schema and rich parameter documentation, the description is complete. It covers what the tool does, where the parameter comes from, and the social-graph consequence, leaving no important selection or invocation gap.

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

Parameters3/5

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

Schema coverage is 100% and the parameter description already explains that `friendId` is the friend record `_id` on the calling user's friends list, NOT the other user's id, and how to obtain it. The description repeats the provenance ('Pass `friendId` from play_list_my_friends') but adds no new parameter semantics, so the baseline of 3 applies.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Remove an existing friend connection.' It distinguishes this from pending-request operations by emphasizing 'existing friend connection,' which separates it from tools like play_cancel_friend_request, play_accept_friend_request, and play_decline_friend_request.

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

Usage Guidelines4/5

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

The description gives clear operational guidance by telling the agent to pass `friendId` from play_list_my_friends, which indicates the correct source and workflow. It does not explicitly name alternative tools for accept/decline/cancel, but the 'existing friend connection' framing implies the boundary; the schema's parameter description further clarifies that play_list_pending_friends is for accept/decline.

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

play_resolve_pbem_emailAssign an unmatched email to a playerA
Idempotent
Inspect

Resolve an unmatched inbox email to an accepted campaign member. Pass remember: true to auto-match future emails from the same sender address (stored as an HMAC key, never the address). GM-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemIdYesMongo `_id` of the inbox item.
playerIdYesUser `_id` of the accepted campaign member this email's sender is.
rememberNoWhen true, future emails from the same sender address auto-match this player (stored as an HMAC key, never the address).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations, it discloses GM-only authorization, the persistent side effect of auto-matching future emails when remember is true, and the privacy behavior of storing only an HMAC key, never the address. This adds meaningful behavioral context without contradicting 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?

Two tight sentences with no filler. The core action is front-loaded, followed by the optional remember behavior and the permission constraint, each earning 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?

The description is largely complete for a tool with a rich output schema and fully documented parameters. The only notable gap is the absence of explicit routing guidance against related PBEM email tools, such as dismissing instead of resolving.

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

Parameters3/5

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

The input schema already documents all three parameters with 100% coverage, including the HMAC-key note on remember. The description restates some of this information but does not substantially expand on the schema's parameter meanings.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Resolve an unmatched inbox email to an accepted campaign member.' It clearly separates this from siblings like play_dismiss_pbem_email and play_consume_pbem_emails by targeting unmatched emails and assigning them to a player.

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

Usage Guidelines4/5

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

It gives clear context about when the tool is appropriate: an unmatched inbox email should be resolved to an accepted campaign member, and GM-only restricts who may call it. It does not explicitly contrast with dismissal or bulk-consumption siblings, so it lacks explicit when-not guidance.

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

play_respond_to_campaign_inviteAccept or decline a campaign inviteAInspect

Respond to a pending campaign invite directed at the calling user. The campaign id is the campaign the invite belongs to; accept decides yes/no.

ParametersJSON Schema
NameRequiredDescriptionDefault
acceptYestrue to accept the invite; false to decline.
campaignIdYesCampaign id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already communicate that this is a mutating, non-idempotent operation, so the description does not need to restate that. It adds useful scope context ('pending', 'directed at the calling user'), but it does not disclose what happens after responding, such as whether the invite is consumed or what side effects accepting has.

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

Conciseness5/5

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

The description is two short, front-loaded sentences with no filler. The action and scope come first, then the parameter clarifications, making it easy to parse quickly.

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

Completeness5/5

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

For a simple two-parameter action with full schema coverage, an output schema, and relevant annotations, the description is complete enough. It identifies the target resource, the caller-scope constraint, and the meaning of the decision parameter.

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 both parameters already have clear descriptions ('Campaign id.' and 'true to accept the invite; false to decline.'). The prose adds only minor natural-language clarification that campaignId is the campaign the invite belongs to and that accept decides yes/no.

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: 'Respond to a pending campaign invite directed at the calling user.' It clearly distinguishes this from sibling friend-request tools like play_accept_friend_request and play_decline_friend_request by specifying the campaign-invite scope.

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

Usage Guidelines4/5

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

The phrase 'pending campaign invite directed at the calling user' gives clear conditions for when to use the tool. It does not explicitly name alternatives or exclusions, but the context is sufficient to route an agent to the correct tool without opening other schemas.

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

play_send_friend_requestSend a friend requestA
Idempotent
Inspect

Send a friend request to another user. Pass targetUserId (the recipient's User _id) — use play_find_friend to look them up first.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetUserIdYesMongo `_id` of the user to send the friend request to. Use play_find_friend to locate it.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

The annotations already signal a non-read-only, non-destructive, idempotent state change, and the description does not contradict them. It adds little beyond the schema (the targetUserId format and lookup step), but for this simple action the task-facing behavior is adequately implied. It could have noted that success creates a pending request that requires acceptance, but this is a minor gap.

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?

One compact, front-loaded sentence with no filler; the action, parameter, and lookup prerequisite all appear in the first clause.

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 a single required parameter, full schema coverage, an output schema, and annotations covering safety semantics, the description plus structured data leave no practical gap. The explicit lookup-first instruction completes the workflow.

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

Parameters3/5

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

Schema coverage is 100% and the schema already documents targetUserId as the recipient's Mongo _id and tells the agent to use play_find_friend. The description restates this, adding a slightly clearer sequencing cue ('look them up first') but no new 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?

The description opens with the specific action 'Send a friend request' and clearly identifies the resource ('another user'). It also names the target identifier and points to play_find_friend, which separates it from sibling request-management tools like play_accept_friend_request or play_cancel_friend_request.

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

Usage Guidelines4/5

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

It gives an explicit precondition: look up the recipient with play_find_friend before sending. It does not enumerate exclusions such as 'do not use for accepting/declining/cancelling', but the verb and the named lookup sibling make the context clear.

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

play_set_campaign_leg_activeActivate or deactivate a campaign legA
Idempotent
Inspect

Toggle a campaign leg's active flag by ruleset. Deactivating hides the leg from normal UI (the campaign stops appearing to viewers whose active ruleset matches it) but never deletes it — all of its content and attachments survive and reactivating restores them. Play refuses to deactivate the last active leg (400). Caller must be the campaign owner or an accepted gamemaster; ordinary players get 403.

ParametersJSON Schema
NameRequiredDescriptionDefault
activeYestrue to activate the leg; false to deactivate it (hidden from normal UI, never deleted). Play refuses to deactivate the last active leg (400).
rulesetNoRuleset of the leg to toggle. Required.
campaignIdYesCampaign id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

The description adds substantial behavioral detail beyond the annotations: deactivation is non-destructive, content survives, reactivation restores it, the last active leg cannot be deactivated (400), and callers must be the campaign owner or an accepted gamemaster (403). These are exactly the side effects and constraints an agent needs to know.

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

Conciseness5/5

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

The description is three focused sentences with no filler. It front-loads the core action, then covers the most important behavioral consequences, edge case, and permission boundary. Every sentence contributes necessary 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?

Given the annotations, output schema, and the tool's moderate complexity, the description is complete. It covers non-destructive behavior, UI effects, restoration semantics, failure conditions, and authorization. An agent has everything needed to decide whether and how to call the tool safely.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description reinforces that 'active' controls visibility and that ruleset selects the leg, but it does not add new parameter-level semantics beyond what the schema already states. The schema itself already documents the active flag's behavior and ruleset's requiredness.

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 and resource: 'Toggle a campaign leg's `active` flag by ruleset.' It clearly distinguishes this from sibling tools like play_add_campaign_leg or play_update_campaign, which are about creating or editing campaign structure rather than toggling a leg's active state.

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

Usage Guidelines4/5

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

The description gives clear context for when the tool is appropriate: it toggles the active flag, hides or restores UI visibility, and never deletes content. It also states limitations such as refusing to deactivate the last active leg and permission requirements. It does not explicitly name alternative tools, so it falls short of a 5.

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

play_set_pbem_display_nameSet a player's PBEM attribution nameA
Idempotent
Inspect

Set the name a campaign member's emails are attributed to when collated into a move (e.g. the character they play). Applies to all of that player's emails; blank clears it back to their Embers name. GM-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
playerIdYesUser `_id` of the accepted campaign member.
campaignIdYesMongo `_id` of the play campaign.
displayNameYesName this player's emails are attributed to when collated into a move (e.g. their character). Pass an empty string to clear it back to the player's Embers name.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate idempotentHint=true and destructiveHint=false, so the description doesn't need to restate those. It adds useful behavioral context: the setting applies globally to all of the player's emails, and blank clears it. It doesn't mention permissions (GM-only) or side effects beyond the attribution, but the core behavior is transparent.

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

Conciseness5/5

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

The description is two sentences, front-loads the main action, and includes the key edge case (blank clears) without any fluff. Every sentence earns its place.

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

Completeness4/5

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

Given the output schema exists and annotations cover idempotency and non-destructiveness, the description is nearly complete. It could mention GM-only permission or that this is a per-campaign setting, but the core behavior and parameter semantics are fully covered. A small gap remains around permissions and scope.

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 three parameters thoroughly. The description adds the 'applies to all of that player's emails' context and the blank-clears behavior, which complements the displayName parameter description. However, it doesn't add much beyond what the schema already says, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action ('Set the name a campaign member's emails are attributed to when collated into a move'), the resource (player/campaign), and the effect (applies to all of that player's emails; blank clears it). It distinguishes itself from siblings like play_create_move or play_update_move by focusing on email attribution display name.

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

Usage Guidelines4/5

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

The description explains the context: it applies to all of a player's emails and that passing an empty string clears it back to the player's Embers name. It doesn't explicitly name alternative tools or when not to use it, but the context is clear enough for an agent to select it for setting attribution names.

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

play_update_campaignUpdate a play campaignA
Idempotent
Inspect

PUT updates to one campaign by id. Caller must have campaign 'contribute' permission (DM or assigned co-DM). Only supplied fields are sent; play decides how to merge. legs is NOT writable here (it is stripped): add a leg with play_add_campaign_leg, toggle one with play_set_campaign_leg_active, and change a leg's contents with the add/remove rule/item/spell/character tools. REQUIRES baseUpdatedAt: copy updatedAt from a fresh play_get_campaign read; a stale or fabricated value is rejected with OUT_OF_SYNC and nothing is written.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Beyond annotations, it discloses PUT semantics, partial-update merge behavior, stripping of legs, the strict dependency on baseUpdatedAt, and the OUT_OF_SYNC error with 'nothing is written'. This gives an agent an accurate model of the write behavior and failure mode.

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 information-dense with no filler: identity, permission, merge semantics, exclusions, alternatives, and concurrency requirement each appear once and in logical order. Every sentence earns its place.

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

Completeness5/5

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

For a mutating, concurrency-sensitive update tool, the description covers authorization, partial-update behavior, non-writable fields, alternative tools, and the exact pre-read step. The output schema exists, so return details need not be restated.

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

Parameters4/5

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

The input schema exposes no parameters, so the description is the only source of parameter context. It adds the critical baseUpdatedAt requirement and its provenance, plus the legs exclusion, but it does not enumerate which other campaign fields may be supplied.

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 'PUT updates to one campaign by id', a specific verb, resource, and scope. It also carves out what this tool does not do ('legs is NOT writable here'), which separates it from sibling leg-management 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?

States the required caller permission ('contribute' permission, DM or assigned co-DM), tells the agent to read a fresh updatedAt via play_get_campaign before calling, and explicitly routes leg operations to play_add_campaign_leg, play_set_campaign_leg_active, and the rule/item/spell/character tools. This is explicit when-and-when-not guidance.

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

play_update_character_noteUpdate a character note (DM or player)A
Idempotent
Inspect

Update the DM-side or player-side note attached to a play character. PUT semantics — description replaces the current body. Authorization runs through the character's campaign 'contribute' permission. Triggers a notification (to the character owner if a GM updated, to GMs if a player updated). REQUIRES baseUpdatedAt: copy updatedAt from a fresh play_get_character_note read of the same note; a stale or fabricated value is rejected with OUT_OF_SYNC and nothing is written.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description goes well beyond the annotations by explaining PUT semantics (full replacement), the contribute-permission authorization model, notification side effects, and the OUT_OF_SYNC failure mode with 'nothing is written.' This gives an agent a precise model of what happens before invoking the tool.

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

Conciseness5/5

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

The description is dense but every sentence earns its place: purpose, replacement semantics, authorization, notification behavior, and concurrency requirement. The most critical requirement (baseUpdatedAt) is emphasized with caps and placed last for salience.

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

Completeness4/5

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

The description covers most operational context: authorization, notifications, concurrency, and failure behavior. The only notable gap is that it does not explicitly identify how the target note is selected (e.g., a note ID or DM/player side flag), though the reference to 'the same note' from play_get_character_note implies it.

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

Parameters5/5

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

Even though the input schema is empty, the description documents the two meaningful parameters: `description` (replaces the body) and `baseUpdatedAt` (must be a fresh copied timestamp or the call fails with OUT_OF_SYNC). This fully compensates for the sparse schema and is essential for 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?

The description uses a specific verb ('Update') and resource ('DM-side or player-side note attached to a play character'), making the tool's scope immediately clear. It also distinguishes this from sibling tools like play_get_character_note by focusing on mutation rather than retrieval.

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

Usage Guidelines4/5

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

The description gives strong usage context: it requires the caller to first read the note via play_get_character_note and copy updatedAt into baseUpdatedAt, and it explains the authorization path. However, it does not explicitly name alternative tools or state when NOT to use this tool, so it stops short of full exclusion guidance.

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

play_update_moveUpdate a moveA
Idempotent
Inspect

Update a move by id: name, description, number (game label), date, order (shelf position), sessionId (chapter; null detaches), parentId (child scene; null detaches; setting it clears the chapter), or playerIds (visibility; [] reopens to everyone). Only supplied fields are sent. GM-only. REQUIRES baseUpdatedAt: copy updatedAt from a fresh play_get_move read; a stale or fabricated value is rejected with OUT_OF_SYNC and nothing is written.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior1/5

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

The description provides rich behavioral detail about optimistic concurrency, partial updates, null semantics, and the OUT_OF_SYNC failure mode. However, it contradicts the annotation idempotentHint=true: a successful update changes updatedAt, so a second identical call with the same baseUpdatedAt would fail. This annotation contradiction is a significant reliability issue.

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 every clause earns its place. It front-loads the purpose incorrectly? Actually it front-loads resource and fields, then adds only necessary behavioral notes. 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?

Given no input schema parameters list, the description covers all relevant aspects: authorization, partial update behavior, concurrency requirement, failure mode, and special null/array semantics. Output schema exists, so return-format details are not required.

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

Parameters5/5

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

The input schema has zero properties, yet the description fully documents the intended parameters: name, description, number, date, order, sessionId, parentId, and playerIds. It enriches each with domain-specific meaning, including null-detach behavior and the [] reopens-to-everyone 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?

The description opens with a specific verb and resource, 'Update a move by id', and then enumerates the editable fields with precise semantics. This clearly distinguishes it from sibling tools like play_update_page or play_update_session.

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

Usage Guidelines4/5

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

It explicitly says this is GM-onlybool, explains that only supplied fields are sent, and mandates a fresh play_get_move read to obtain baseUpdatedAt. It does not explicitly compare against alternatives such as play_create_move or play_delete_move, but the usage context is clear.

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

play_update_pageUpdate a pageA
Idempotent
Inspect

Update a page by id. PUT semantics — supplied fields replace their current values. To append to a recap body, fetch first via play_get_page, concatenate, and send back. Caller must have page 'contribute' permission. REQUIRES baseUpdatedAt: copy updatedAt from a fresh play_get_page read; a stale or fabricated value is rejected with OUT_OF_SYNC and nothing is written — writing from memory of an earlier read is not possible.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description discloses critical behavioral traits beyond annotations: PUT replace semantics, OUT_OF_SYNC rejection, atomic failure ('nothing is written'), and the impossibility of writing from memory. This substantially exceeds the annotation hints and adds real concurrency context.

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

Conciseness5/5

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

The description is dense and front-loaded: it opens with the core operation, then layers PUT semantics, append pattern, permission, and concurrency requirements. Every sentence earns its place; no filler or redundant restating of the title.

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

Completeness4/5

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

The description is unusually complete for an update tool: it covers prerequisites, concurrency failure, and the read-append-send pattern. The only gap is that the schema is empty and the description does not enumerate which page fields can be supplied, though openWorldHint and the output schema mitigate this somewhat.

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

Parameters5/5

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

With zero parameters in the schema, the baseline is 4, and the description adds meaningful semantics. It names the conceptual baseUpdatedAt parameter, explains how to obtain it, and defines the failure mode for stale values, giving the agent actionable guidance the schema alone lacks.

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 operation: 'Update a page by id' with PUT semantics, clearly distinguishing it from read, create, and delete siblings. It is not a tautology; it explains what the update does and how it behaves.

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

Usage Guidelines4/5

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

The description provides strong usage context: caller must have 'contribute' permission, and baseUpdatedAt must come from a fresh play_get_page read. It also gives an explicit append workflow, but it does not explicitly state when NOT to use this tool versus alternatives like create or delete.

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

play_update_sessionUpdate a sessionA
Idempotent
Inspect

Update a session by id. Use this to append session notes, change the date, rename, or tag the session with the Imagine adventure it belongs to (imagineAdventureId — valid ids come from the campaign's imagineAdventures list on play_get_campaign; null untags). Only the fields you supply are sent. Caller must have session 'contribute' permission. REQUIRES baseUpdatedAt: copy updatedAt from a fresh play_get_session read; a stale or fabricated value is rejected with OUT_OF_SYNC and nothing is written.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

The description adds substantial behavioral context beyond the annotations: only supplied fields are sent, baseUpdatedAt must be copied from a fresh play_get_session read, stale or fabricated values are rejected with OUT_OF_SYNC, and nothing is written on rejection. It also clarifies that null untags an imagineAdventureId. This is exactly the kind of procedural detail an agent needs.

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 every sentence earns its place: usage, supported operations, partial-update behavior, permission requirement, and the critical baseUpdatedAt precondition are all front-loaded. The REQUIRES emphasis is justified because it prevents a common failure mode.

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 description covers what the tool does, what fields it can update, the permission needed, the optimistic-concurrency requirement, and the error behavior. Since an output schema exists, the description does not need to explain return values, and nothing essential for invoking the tool correctly is missing.

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

Parameters5/5

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

Although the input schema lists no properties, the description gives meaningful parameter semantics: baseUpdatedAt must be the updatedAt from a fresh read, imagineAdventureId must come from the campaign's imagineAdventures list, and null untags. This far exceeds the baseline for a zero-parameter schema.

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

Purpose5/5

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

The description states a specific verb and resource ('Update a session by id') and enumerates concrete use cases: appending session notes, changing the date, renaming, and tagging with an Imagine adventure. It clearly separates this from sibling session tools like play_get_session, play_create_session, and play_delete_session.

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

Usage Guidelines4/5

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

The description explains when to use the tool ('Use this to append session notes, change the date, rename, or tag the session') and adds important preconditions such as requiring 'contribute' permission and a fresh baseUpdatedAt. It does not explicitly call out when-not-to-use or name alternative tools, but the use cases are concrete enough for an agent.

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

reply_to_submissionReply on one of my submissionsAInspect

Post a reply on one of the calling user's submissions, for example to answer a clarification question from Embers. Pass submissionId and text; optional attachments are ids from upload_submission_screenshot. The original report cannot be edited, and a closed submission takes no replies.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoThe reply. Optional only when attachments are provided.
attachmentsNoUpload ids from upload_submission_screenshot to attach. Optional, up to ten.
submissionIdYesMongo `_id` of one of the caller's submissions.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Beyond the annotations (which only say the tool is not read-only, not idempotent, not destructive), the description discloses useful behavioral constraints: replies only work on the caller's submissions, the original report cannot be edited, and closed submissions reject replies. This gives the agent realistic expectations about side effects and failure conditions.

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 short and front-loaded: the core action appears in the first sentence, followed by parameter guidance and constraints in the next two sentences. Every sentence adds value, with no fluff or repetition of the title.

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 three-parameter mutation tool with a full schema and an output schema present, the description covers the essential context: what the tool does, who can use it, what parameters matter, how attachments relate to another tool, and the key edge case (closed submissions). Nothing critical is missing.

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

Parameters3/5

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

Schema description coverage is 100%, and each parameter already has a meaningful description in the schema. The tool description adds a little context by tying attachments to upload_submission_screenshot and emphasizing the text/attachment pairing, but does not significantly go beyond what the schema already documents. Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('Post a reply') and resource ('one of the calling user's submissions'), and includes a concrete motivating example ('answer a clarification question from Embers'). This clearly distinguishes it from sibling tools like create_submission or get_submission.

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

Usage Guidelines4/5

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

The description gives clear usage context: reply to a submission, optionally attach screenshots, and notes that a closed submission takes no replies. It also clarifies a limitation ('The original report cannot be edited'). It does not explicitly name alternative tools for when to use something else, but the guidance is sufficient for the primary workflow.

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

upload_submission_screenshotUpload a screenshot for a submissionAInspect

Upload one screenshot to attach to a bug report, request, or reply. Pass mimeType and the base64 data. Returns { id, url }; pass the id in attachments on create_submission or reply_to_submission.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesThe image bytes, base64-encoded (no data: prefix). Up to 8 MB decoded.
mimeTypeYesImage type of the screenshot.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

Annotations are all false and don't convey substantial safety or side-effect information. The description adds the useful fact that the tool returns `{ id, url }` and that the id is used later, but it doesn't disclose idempotency, storage, or auth considerations beyond the schema's size limit.

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

Conciseness5/5

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

Two sentences: the first states the tool's purpose, the second covers required parameters and the return/usage contract. It is front-loaded and free of 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 two-parameter upload tool with complete schema documentation, an output schema, and a clear workflow, the description covers everything needed to call it correctly and integrate the result with submission creation.

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?

Input schema coverage is 100%, with `data` and `mimeType` already documented including base64 formatting, size, and enum values. The description only repeats the parameter names, adding no semantics 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?

States a specific action: uploads a single screenshot to attach to a bug report, request, or reply. It also names the consumer tools (create_submission and reply_to_submission), which distinguishes it from sibling operations.

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

Usage Guidelines4/5

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

The description clearly defines the workflow: upload first, then pass the returned id in `attachments` on create_submission or reply_to_submission. It does not explicitly describe when not to use it or compare with alternatives, but no direct upload sibling exists.

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

vault_attach_companionAttach a companion to a characterAInspect

Attach a buddy (animal companion, hireling, follower, granted NPC, stock monster) to a Main character the user owns. The row appears in the sheet's Companions section. Mode is decided by ownership: 'owned' for a character the user already owns (its values are then edited on its own document via vault_update_character — the row is a live window, no copy is made, no character slot is used); 'link' for a character someone else owns (the source is never written; track its hit points and uses via vault_update_companion_state). The same source may be attached more than once — each row is independent. Response is { companion, companions, updatedAt }; ADOPT the returned updatedAt as the Main character's fresh stamp for any follow-up write.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the Main character (owned by the calling user) the companion is attached to.
modeYes'owned' when the calling user owns the companion character (edits then write through to that character's own document; vault answers 403 if the user does not own it). 'link' for a character someone else owns — stock monsters, a GM's NPC — tracked via a local overlay that never writes to the source. To get a fully-editable copy of a creature the user does NOT own, vault_clone_character it first, then attach the copy with mode 'owned'.
characterIdYesMongo `_id` of the character to attach as the companion.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations are all false, so the description carries the burden. It clearly discloses that no copy is made, no character slot is used, the source is never written in link mode, rows are independent, and that the returned updatedAt must be adopted as a fresh stamp. 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?

The description is fairly long but every sentence carries essential information: purpose, mode behavior, side effects, and response handling. It is front-loaded with the main action and results. Minor redundancy (e.g., restating the mode in the schema) but overall efficient and well-structured.

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 moderate-complexity tool with three parameters and an output schema (mentioned but not shown), the description covers the operation, side effects, cross-tool usage, and how to handle the response. Nothing an agent needs to call it 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 schema already documents all three parameters. The description adds value by reinforcing the mode semantics (403 if not owned, cloning path) and by explaining the response's updatedAt significance. This goes beyond the schema, though it doesn't add new syntax details for id/characterId.

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 ('Attach') and resource ('buddy... to a Main character'), and clarifies the result (row in Companions section). It distinguishes from siblings by referencing vault_update_character, vault_update_companion_state, and vault_clone_character, so an agent can easily tell it apart.

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 explicitly defines when to use 'owned' vs 'link' based on ownership, explains the prerequisite of cloning for non-owned creatures, and notes that the same source may be attached multiple times. This is precise and directly guides tool selection and mode.

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

vault_build_monsterBuild a 5e24 monsterAInspect

Create a complete 5e24 monster character in one call. Replaces the vault_create_character + multiple vault_update_character pattern for monster authoring — fully typed input schema, so structured fields cannot be silently stringified. Caller passes source-text values (final AC, skill bonuses, attack bonuses); gateway computes the stored base values, derives proficient / expertise / misc flags, formats spell-list markdown, creates recharge trackables, generates the Challenge / Legendary Actions / Speed-alternate-form notes. Sets type: 'monster', settings.autoPassiveBonuses: false, and the derived core.experience automatically. The authoring guide at vault_get_authoring_guide({ rulesetCode: '5e24', entityType: 'monster' }) documents every field's source-text meaning and is the conventions reference for what shape to send. Returns the created character document.

ParametersJSON Schema
NameRequiredDescriptionDefault
acYesAC block. `total` is the value the sheet should display (source-text value, like '16'). Gateway computes the stored base by subtracting DEX modifier (with medium/heavy armor weight caps) and any shield/magic/misc bonuses. Per the guide Rule 1.
crYesChallenge Rating. Must be one of the canonical 5e24 values: 0, 0.125 (CR 1/8), 0.25 (CR 1/4), 0.5 (CR 1/2), or any integer 1-30. Gateway looks up XP reward + level-equivalent XP + proficiency bonus.
hpYesMaximum hit points.
gearNoGear listed on the stat block ('Greatsword, Splint Armor'). Each becomes an items[] entry with `equipped: false` (monsters don't use equip slots) per Rule 19. Server-side template fill adds the four currency items separately.
nameYesDisplay name. Required.
sizeYesSize text — single value ('Medium') or variable form ('Medium or Small') per the guide Rule 18. Stored verbatim in `core.size`.
savesNoSaving throw bonuses for the proficient ones only. Gateway derives `attributes[].proficient = true` and a `misc` adjustment so the sheet's `ability + PB + misc` lands on the source bonus.
speedYesSpeed block. `walk` is the base walking speed in feet. Non-walking modes (climb / fly / swim / burrow) become rules[] Ability entries with the listed range. `alternateForm` carries the parenthetical text from lycanthrope-style stat blocks ('40 ft. in boar form') per the guide Rule 5; lands in notes[].
sensesNoSenses other than passive perception: darkvision, blindsight, tremorsense, truesight. Each becomes a rules[] Ability entry with `name` ('Darkvision') and `detail` ('120 ft.'). Passive Perception is NOT authored — sheet derives it from the Perception skill.
skillsNoSkill bonuses for proficient / expertise skills only. Gateway derives the proficient + expertise flags + misc so the sheet total matches the source bonus per the guide Rule 6.
traitsNoTrait entries (Web-Dweller, Molten Body, Pack Tactics, etc.). Use `summary` for parenthetical usage limits per Rule 14 (e.g. 'Legendary Resistance' name + '3/Day, or 4/Day in Lair' summary + body description). Use `detail` for the kind of short qualifier on entries like Darkvision (but darkvision itself goes under `senses`).
actionsNoAction entries. `type` per the guide Rule 3 (Melee / Range / Special / Reaction / Legendary / Bonus). For attacks, pass `attackBonus` + `attackAttribute` + `damageDice` + `damageType` + `damageAttribute`; gateway back-derives `attack.misc`. For ranged spell attacks (Hurl Flame etc.) use the spellcasting attribute, not strength/dexterity. `recharge: '5-6'` (or '6', '4-6') creates a matching trackables[] checkbox the sheet renders as a cooldown.
rulesetNoOnly '5e24' is supported. The authoring guide and the conversion math are 5e24-specific; other rulesets will land via their own build tools.
abilitiesYesSix ability scores as numbers. Gateway computes modifiers, attack/damage/save/skill/initiative derivations.
alignmentYesAlignment text, e.g. 'Unaligned' or 'Neutral Evil'.
languagesNoLanguages text, source-exact (e.g. '—' or 'Common, Draconic, telepathy 60 ft.'). Stored in `core.languages`.
immunitiesNo5e24 combined Immunities text (damage + condition, semicolon-separated): 'Fire, Poison; Frightened, Poisoned'. Use this when the source says 'Immunities'.
hitDiceSizeNoHit-die size mapped from creature size per 5e24 MM: Tiny d4, Small d6, Medium d8, Large d10, Huge d12, Gargantuan d20. Defaults to d8 when omitted (Medium creatures, by far the common case).
resistancesNoResistances row, source-exact text.
creatureTypeYesCreature type — source text, e.g. 'Elemental', 'Humanoid', 'Dragon (Chromatic)'. Preserved verbatim into `core.race` per the guide Rule 16 'preserve original text'.
hitDiceCountYesNumber of hit dice (the count, e.g. 12 for a creature with 12d8 listed in HP).
spellcastingNoInnate spellcasting block per the guide Rule 4. Gateway formats the spell list as markdown with two-space hard breaks between frequency rows and italic spell names: `**At will:** *detect evil and good* \n**1/day each:** *commune*, *raise dead*`. Lands as a single rules[] Ability entry named 'Innate Spellcasting'.
legendaryIntroNoLegendary Actions intro paragraph (the prose about how legendary actions work for this creature). Per the guide Rule 8, lands in notes[] under name 'Legendary Actions'. Individual legendary action entries go in `actions[]` with `type: 'Legendary'`.
additionalNotesNoAny free-form notes[] entries the LLM wants to author beyond the auto-generated Challenge / Legendary Actions / Speed-alternate-form rows. Use sparingly — most stat-block content has a dedicated structured field above.
initiativeBonusNoOverride the initiative bonus only if the listed value differs from the DEX modifier. Per the guide Rule 17, gateway sets `offense.initiative.misc = listed − DEX-mod`.
vulnerabilitiesNoVulnerabilities row.
damageImmunitiesNo5e (2014) split form: damage-only immunities. Use only if the source says 'Damage Immunities' as a separate row.
damageResistancesNo5e split form: damage-only resistances. Use only if the source says 'Damage Resistances'.
conditionImmunitiesNo5e split form: condition-only immunities. Use only if the source says 'Condition Immunities' as a separate row.
damageVulnerabilitiesNo5e split form: damage-only vulnerabilities.
sourceProficiencyBonusNoOverride the PB derived from CR. Use only when the source stat block explicitly lists a non-standard PB (e.g. a CR-low legendary creature with PB +5). For PB +7 and above the high-PB misc compensation per the guide Rule 15 kicks in automatically.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations carry little signal (all hints false), so the description carries the full burden — and it delivers. It discloses detailed gateway behavior: computing stored base values from source-text values, deriving proficient/expertise/misc flags, formatting spell-list markdown, creating recharge trackables, generating Challenge/Legendary Actions/Speed-alternate-form notes, and automatically setting `type`, `settings.autoPassiveBonuses`, and `core.experience`. This is far beyond what annotations provide.

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 long but dense, with every sentence adding information: purpose, differentiation, gateway behavior, automatic settings, authoring guide pointer, and return value. It is front-loaded with the core purpose and follows with operational details. No filler or tautology.

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 the tool's complexity (31 parameters, nested objects, 10 required fields) and an existing output schema, the description covers all decision-relevant aspects: what to pass, how the gateway transforms it, where to find the authoring guide, what gets set automatically, and what is returned. Nothing an agent needs to correctly invoke this tool 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. The tool description adds a key cross-cutting semantic: 'Caller passes source-text values (final AC, skill bonuses, attack bonuses); gateway computes the stored base values.' This clarifies the intent behind every numeric field and explains how the gateway transforms input. It doesn't enumerate parameters individually, but the schema already does, making the description a valuable supplement rather than a replacement.

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 and resource: 'Create a complete 5e24 monster character in one call.' It then explicitly distinguishes itself from the sibling pattern (`vault_create_character` + multiple `vault_update_character`) by stating it replaces that pattern for monster authoring. This immediately disambiguates it from vault_build_pc and other character-related tools.

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

Usage Guidelines5/5

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

The description clearly states when to use this tool — for monster authoring — and names the alternative pattern it replaces. It also gives a ruleset exclusion: 'Other rulesets will land via their own build tools.' Additionally, it points to `vault_get_authoring_guide` as the conventions reference, telling the agent where to get authoritative instructions on field shape.

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

vault_build_pcBuild a 5e24 player characterAInspect

Assemble a complete, playable 5e24 player character in one call from a flat draft of choices. Vault validates every pick against the user's own + stock content and builds the full sheet — ability scores (with background bump), skills, saves, hit points, starting equipment + derived weapon actions, granted rules / feats / abilities, trackables, and a creation-recap note. Read vault_get_pc_creation_options first to get legal ids and pools. Required: name, classRuleId, abilityScoreMethod, abilityScoreAssignments, skillProficiencies, toolProficiencies, startingEquipmentLabel. Required when present: backgroundFeatRuleId (an open featOpen background's Origin feat — the build rejects the draft without it). Optional: speciesRuleId, backgroundRuleId, backgroundSkillProficiencies (when the background grants skills as a choice), the background bump (backgroundBumpMode + backgroundBumpAssignments), backgroundFeatRuleId (as a swap on a fixed-feat background), languages, languageChoicePicks (background/species language-choice grants), alignment, description/image/appearances/token, and the choice maps (proficiencyChoicePicks, abilityChoices, speciesAbilityChoices, backgroundFeatChoices, equipmentChoices, weaponAbilityChoices, abilityBumpPicks) plus the spell maps (spellChoicePicks, spellListChoicePicks, preparedSpellPicks, castingAbilityPicks) for spellcasters / Magic-Initiate-style grants. proficiencyChoicePicks and spellChoicePicks are keyed ":" and only needed where a grant's count is smaller than its option pool. castingAbilityPicks is required for any spellChoices block surfacing castingAbilityOptions — the projection only surfaces that array when a pick is genuinely needed (a spellListChoices block's ability pick rides its spellListChoicePicks entry as castingAbility instead). The projected spellChoices/spellListChoices arrays may hold null entries (blocks inert at level 1) — count them when keying picks by index. A feat chosen via an ability's ruleChoice (in abilityChoices/speciesAbilityChoices) brings its own sub-choices — supply them in those same maps keyed by the picked feat's _id. A repeatable feat filling the background slot (backgroundFeatRuleId) instead prefixes its pick keys bg:<featId>. The created character is owned by the calling user and returned in full. On an invalid draft vault returns the specific reason (e.g. a pick out of pool, a wrong pick count, a missing required choice) as a tool error — fix the draft and retry.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Behavior is disclosed richly beyond the sparse annotations: the tool validates every pick, builds the full sheet, rejects drafts missing required feats, returns the created character in full, and returns specific error reasons on invalid drafts. Ownership is also stated: "The created character is owned by the calling user and returned in full." This is a high level of behavioral transparency for a creation action.

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 is information-dense with no filler; every sentence contributes. However, it is a single lengthy paragraph with heavy parentheticals, and it would be easier for an agent to parse with bullets or clearer section breaks. It is appropriately sized for the tool's complexity but not optimally structured.

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 the empty schema and minimal annotations, the description is remarkably complete. It covers the required prerequisite call, parameter categories, conditional requirements, key-encoding conventions, special background-feat cases, spellcaster handling, error behavior, and return value. An agent has enough context to attempt a correct call and to diagnose failures.

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

Parameters5/5

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

The input schema is empty, so the description carries the full parameter burden, and it does so excellently. It enumerates required fields, conditionally required fields, optional fields, choice-map key formats like "<ruleId>:<grantIndex>", null-entry handling, and prefix rules such as "bg:<featId>". This goes far beyond the baseline 4 expected when there are zero schema-defined parameters.

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

Purpose4/5

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

The description clearly states the tool's purpose: "Assemble a complete, playable 5e24 player character in one call from a flat draft of choices." This gives a specific verb, resource, and scope. However, it does not explicitly differentiate itself from the similarly named sibling vault_create_character, instead relying on the phrase "complete... in one call" to imply the distinction.

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

Usage Guidelines4/5

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

The description gives clear usage context: "Read vault_get_pc_creation_options first to get legal ids and pools," and it distinguishes required, conditionally required, and optional inputs. It does not, however, state explicit when-not-to-use cases or name alternative tools for simpler character creation flows, so it falls short of the full 5.

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

vault_clone_characterClone a vault characterAInspect

Duplicate any vault character the calling user can see — their own characters, stock template content, and other users' authored characters are all valid sources. The server does the deep-copy (stats, skills, items, rules, spells, trackables, all of it) — caller passes only the source id and optionally a new name. The new character is owned by the caller (not the source's original owner) and counts against the caller's character entitlement limit. When name is omitted, the clone is named <source name> (Copy). Use this instead of fetching the source sheet and re-POSTing it via vault_create_character.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the source character to clone.
nameNoOptional name for the new character. Defaults to `<source name> (Copy)` when omitted, matching the web client's clone behavior. Whitespace-only values are rejected at the schema layer so a silently-trimmed-to-empty name can't reach the backend.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Adds substantial behavior beyond annotations: deep-copy semantics, ownership transfer to the caller, entitlement/quota impact, and default naming when name is omitted. These are non-obvious consequences not inferable from readOnlyHint or destructiveHint.

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 tight, purposeful sentences. It front-loads the core scope, then covers mechanics, ownership/quota, and the alternative without filler or 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?

For a two-parameter tool with an output schema, this is complete: it covers source scope, deep-copy behavior, ownership, quota effects, naming, and the correct alternative. Nothing essential is missing for an agent 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%, and the schema already documents both parameters, including the default naming behavior and whitespace validation. The description reiterates that name is optional but adds no genuinely new 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 and resource ('Duplicate any vault character') and enumerates valid source types, which clearly distinguishes it from vault_create_character and other vault tools. It also names the key alternative 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?

Directly tells the agent when to use this tool: whenever cloning any visible character. It names the alternative (vault_create_character) and explains why this tool should be preferred over fetching and re-POSTing.

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

vault_create_characterCreate a vault characterAInspect

Create a new character in the user's vault. Requires name and ruleset. The vault server fills the per-ruleset sheet skeleton (six attributes, defense scaffolding, 18-skill array for 5e/5e24, etc.) for any sections the caller omits — a minimal { name, ruleset } body produces the same shape the web and iOS clients create. The passthrough schema accepts richer structure when you want to set sections inline at create time. Set type: "monster" (lowercase) to mark a monster. The new character is owned by the calling user. Note: characters can be linked to active play campaigns; modify them with care if so.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
_idNo

TDQS

A4.6/5.0
Behavior5/5

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

The description goes well beyond the annotations by disclosing that the server fills per-ruleset sheet skeletons, that minimal create calls match web/iOS client output, that the character is owned by the calling user, and that linked-campaign characters should be modified with care. This is rich, non-obvious behavioral context.

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

Conciseness5/5

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

The description is front-loaded with the core action and then efficiently covers requirements, server behavior, minimal-body equivalence, monster creation, ownership, and a safety caveat. Every sentence adds useful information without repetition or filler.

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

Completeness4/5

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

With an output schema present, return-value documentation is unnecessary. The description covers inputs, creation behavior, ownership, and linked-campaign caution. It is slightly incomplete in not differentiating from vault_build_pc/vault_build_monster or explaining which ruleset values are valid, but overall it is sufficient 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?

The schema exposes zero properties, so the description carries the parameter burden. It names the required parameters (`name`, `ruleset`), explains their necessity, and documents the `type: "monster"` special value. It could define valid ruleset formats or richer-structure shapes, but the baseline for zero schema parameters is met and meaningfully exceeded.

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

Purpose5/5

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

The description clearly states the action ('Create a new character'), the target resource ('in the user's vault'), and the required minimal inputs. It distinguishes itself from vault_create_item/spell/rule and build-oriented siblings by specifying the character creation scope and the optional monster type marker.

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

Usage Guidelines4/5

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

The description gives concrete context: minimal bodies work, richer structures can be passed inline, and monster creation is signaled with type: 'monster'. It does not explicitly enumerate when to choose this over vault_build_pc or vault_build_monster, but the use case is clear and no misleading guidance is present.

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

vault_create_itemCreate a vault itemAInspect

Create a new user-authored item (weapon, armor, tool, adventuring gear, magic item, etc.). Vault validates ruleset-specific fields (damage, properties, equip slots, weight); send them via the passthrough schema. The new item is owned by the calling user.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
_idNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already signal a non-read-only operation, but the description adds meaningful behavior: ownership on the calling user, validation of ruleset-specific fields, and the passthrough mechanism. This goes beyond the hints without contradicting them.

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

Conciseness5/5

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

Three sentences with the purpose first and no redundant filler; every sentence adds either scope, field semantics, or ownership behavior.

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 zero-argument tool with an output schema, the description covers purpose, validation, and side-effect ownership, so the agent can form a correct mental model. The only notable ambiguity is the reference to a 'passthrough schema' that is not represented in the exposed input 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?

With an empty input schema and zero parameters, the baseline is 4 and the description carries the load by naming concrete validated fields (damage, properties, equip slots, weight) and pointing to the passthrough schema. It adds meaning that the empty schema cannot, though it leaves the exact passthrough format unspecified.

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 and resource ('Create a new user-authored item') and enumerates concrete item types, so an agent can tell it apart from sibling creators like vault_create_character, vault_create_spell, and vault_create_rule. The extra detail about vault-validated fields further pins down what this tool does.

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

Usage Guidelines4/5

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

The description gives clear context: use this tool to create new user-authored items, and send ruleset-specific fields through the passthrough schema. It does not explicitly name alternatives or exclusion conditions, but the item-specific scope is strong enough to guide selection among the many vault siblings.

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

vault_create_ruleCreate a vault ruleAInspect

Create a new user-authored rule (class, race, background, feat, edge, hindrance, ancestry, ability, action card, stunt, or extra). The new rule is owned by the calling user and is a 'house rule' unless the caller is an admin. Vault validates the payload; missing required fields return a vault error.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
_idNo

TDQS

A4.6/5.0
Behavior5/5

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

The description goes beyond the annotations by explaining that the rule is owned by the calling user and defaults to 'house rule' unless the caller is an admin. It also discloses that the vault validates the payload and that missing required fields produce a vault error, adding concrete behavioral context.

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

Conciseness5/5

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

The description is concise and front-loaded with the primary purpose, followed by key behavioral facts in two sentences. Every sentence adds value without repetition or filler.

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

Completeness4/5

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

Given that an output schema exists and the tool has no formal input parameters, the description covers essential aspects: creation, ownership, validation, and error handling. It does not enumerate the required payload fields, but that information is likely available elsewhere (e.g., in API docs or 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?

The input schema has zero parameters, so the baseline is 4. The description mentions a 'payload' that the vault validates, hinting that the actual rule content is passed in the request body, which is useful context even though the schema is empty. It does not add parameter-level detail beyond that.

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

Purpose5/5

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

The description clearly states the action 'Create a new user-authored rule' and lists all supported rule categories (class, race, background, etc.), which immediately distinguishes it from sibling tools like vault_create_item and vault_create_spell. The explicit enumeration leaves no ambiguity about the resource type.

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

Usage Guidelines4/5

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

The description provides clear context: this is for creating user-authored rules, not for creating items or spells, and the admin nuance clarifies ownership behavior. However, it does not explicitly name alternatives or state when not to use the tool, though the sibling list makes alternatives obvious.

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

vault_create_spellCreate a vault spellAInspect

Create a new user-authored spell or power. Vault validates ruleset-specific required fields (level, casting time, components, range, duration, etc.); send them via the passthrough schema. The new spell is owned by the calling user.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
_idNo

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations providing behavioral hints, the description must carry the transparency burden. It discloses that the tool validates required fields and that the new spell is owned by the calling user, which are useful facts. However, it does not mention any side effects, error handling, idempotency, or auth requirements, leaving significant behavioral gaps for an unannotated create operation.

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

Conciseness5/5

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

The description is two sentences with no redundancy. It front-loads the primary purpose and then adds crucial information about validation and ownership. Every sentence earns its place, and the structure is clean and efficient.

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

Completeness3/5

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

For a create operation with no schema parameters and no annotations, the description covers validation and ownership but leaves gaps. It does not explain the passthrough schema mechanism, error behavior, or how to structure the request. The output schema exists, so return values are documented, but the missing details about parameter passing and failure modes make it incomplete for confident 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?

The input schema is empty, so the description's mention of sending ruleset-specific fields (level, casting time, components, etc.) via a passthrough schema adds essential meaning beyond the schema. It compensates for the schema's lack of parameters, though it doesn't list exact parameter names or structures, hence not a full 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?

The description clearly states the verb 'Create' and the resource 'user-authored spell or power,' which is specific and distinguishes it from other Vault creation tools. The mention of 'user-authored' adds a differentiating nuance, making 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 Guidelines3/5

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

The description gives some usage context by noting that Vault validates ruleset-specific required fields (level, casting time, components, etc.) and instructs to send them via the passthrough schema. However, it does not explicitly state when to use this tool versus alternatives like vault_create_item or vault_create_rule, nor does it mention exclusions, leaving the selection criteria partially implied.

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

vault_delete_characterDelete a vault characterA
DestructiveIdempotent
Inspect

Permanently delete a character by id. Caution: a deleted character is removed from any campaigns or expeditions referencing it. Run vault_get_character first to inspect linkage.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the vault document.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
deletedNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the description need not restate those. It adds valuable behavioral context beyond annotations by disclosing the cascade effect (removal from referencing campaigns/expeditions) and recommending a pre-deletion inspection step. 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.

Conciseness5/5

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

The description is two sentences with no filler. The first sentence immediately states the action and target; the second delivers the critical caution and prerequisite. This is front-loaded, focused, and every word earns its place.

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

Completeness4/5

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

For a single-parameter delete operation, the description covers the essential concerns: permanence, cascade effects, and a recommended pre-step. The presence of an output schema means return-value details do not need to be in the description. Minor gaps remain (e.g., failure conditions if the character is referenced), but the description is complete enough for an agent 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%; the schema already defines 'id' as the Mongo `_id` of the vault document. The description merely echoes 'by id' without adding further semantic detail (e.g., id format, validation constraints, or relationship to other resources). Baseline 3 is appropriate because the schema carries the 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?

The description states a specific verb ('Permanently delete') and resource ('a character by id'), making the tool's purpose unambiguous. It also differentiates from similar siblings like vault_delete_item or vault_delete_rule by explicitly targeting characters, and the 'vault' prefix separates it from play_delete_character.

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

Usage Guidelines4/5

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

The description provides clear context: deletion is permanent and cascades to campaigns/expeditions referencing the character. It gives a direct prerequisite ('Run vault_get_character first to inspect linkage'), which is actionable guidance, though it does not explicitly mention when not to use this tool or alternative tools like vault_unlink_character.

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

vault_delete_itemDelete a vault itemB
DestructiveIdempotent
Inspect

Permanently delete a user-authored item by id. Cannot delete stock content.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the vault document.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
deletedNo

TDQS

B3/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true and idempotentHint=true, so the description correctly states 'permanently delete' which aligns. However, it does not add context about irreversibility, potential cascading effects, or authorization requirements. The description adds minimal value beyond the annotations, but it does clarify permanence, which is slightly 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?

The description is only 2 sentences and is front-loaded with the action and restriction. It is concise and to the point, with no superfluous information. It could be slightly more structured, but it is efficient.

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

Completeness3/5

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

Given the tool's simplicity (one param, no output schema details, annotations cover destructive nature), the description is adequate but does not address how to distinguish vault items from stock content or what happens after deletion. Since an output schema exists, return value explanation is not needed, but the restrictions and implications are not fully fleshed out.

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

Parameters2/5

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

The schema description for the 'id' parameter is minimal ('Mongo `_id`'), and the tool description does not elaborate on what kind of identifier is needed or how to obtain it. Since schema coverage is 100%, but the schema description provides little semantic depth, the description should compensate but does not. It only says 'by id', which is redundant with the schema.

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

Purpose4/5

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

The description clearly states the verb 'delete' and the resource 'vault item', and explicitly notes that stock content cannot be deleted, which distinguishes it from other delete tools. It could be improved by contrasting with similar delete tools like vault_delete_character, but it is otherwise clear.

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

Usage Guidelines2/5

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

The description does not specify when to use this tool versus alternatives, such as vault_delete_character, or when not to use it. It only mentions the restriction on stock content, which is a constraint but not a usage guideline. No exclusions or alternative routing are provided.

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

vault_delete_ruleDelete a vault ruleA
DestructiveIdempotent
Inspect

Permanently delete a user-authored rule by id. Cannot delete stock content. Pair with vault_get_rule first to confirm the target.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the vault document.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
deletedNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the description doesn't need to restate those. The description adds the key behavioral constraint that stock content cannot be deleted, which is beyond the annotations. It also clarifies the operation is permanent, which reinforces the destructive nature. This adds value beyond the structured data without contradicting it.

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

Conciseness5/5

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

Two sentences with no filler. The first sentence states the action and scope; the second provides a critical safety guideline. Every word earns its place, and the most important information (permanence, user-authored only) is front-loaded.

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

Completeness4/5

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

For a single-parameter delete tool with a full output schema and annotations covering destructive/idempotent behavior, the description is nearly complete. The only minor gap is that it doesn't describe what happens if the id doesn't exist or if the user lacks permission, but the output schema likely covers error responses. The 'pair with vault_get_rule' guidance compensates for potential misuse. A 4 is fair given the tool's simplicity.

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%: the only parameter 'id' is fully described as the Mongo `_id` of the vault document. The description adds that the id refers to a user-authored rule, which is a slight semantic enrichment, but the schema already carries the main meaning. Baseline 3 is correct because the schema does the heavy lifting and the description adds only marginal context.

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 ('Permanently delete'), a specific resource ('user-authored rule'), and identifies it by id. It also distinguishes from stock content deletion, which is a clear scope boundary. The title 'Delete a vault rule' is reinforced with the permanent and user-authored qualifiers, making 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 Guidelines4/5

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

The description explicitly instructs to pair with vault_get_rule first to confirm the target, which is a clear usage guideline. It does not explicitly name alternatives or when-not-to-use, but the sibling list includes vault_delete_character, vault_delete_item, vault_delete_spell, and the 'Cannot delete stock content' exclusion provides context. A 4 is appropriate because it gives actionable guidance but doesn't fully enumerate alternatives.

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

vault_delete_spellDelete a vault spellA
DestructiveIdempotent
Inspect

Permanently delete a user-authored spell by id. Cannot delete stock content.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the vault document.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
deletedNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already mark the operation as destructive and non-read-only, and the description adds meaningful context: the deletion is 'permanent' and limited to user-authored spells. This goes beyond the annotation hints and clarifies an important behavioral boundary. 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.

Conciseness5/5

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

Two short sentences with no filler. The core action and the key restriction are both stated up front, and every word contributes to the agent's understanding.

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 single-parameter delete operation with annotations covering destructive behavior and an output schema present, the description is complete. The permanent-deletion warning and stock-content restriction give the agent the essential operational context it needs.

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

Parameters3/5

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

The schema already fully documents the single `id` parameter as a Mongo `_id` with 100% coverage. The description mentions deletion 'by id' but adds no additional semantic detail beyond what the schema provides, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Permanently delete a user-authored spell by id.' It also adds a scoping constraint ('Cannot delete stock content') that clearly distinguishes the tool's intended target from other content types. This is easily differentiated from sibling tools like vault_delete_character or vault_delete_rule.

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

Usage Guidelines4/5

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

The description makes the key usage condition explicit: only user-authored spells can be deleted, and stock content cannot. It does not name alternative tools, but the resource-specific scope and the exclusion are sufficient for an agent to decide when this tool applies.

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

vault_detach_companionDetach a companion from a characterA
DestructiveIdempotent
Inspect

Remove a companion row from a Main character's sheet by the ROW's _id (from the companions[] array — not the buddy's own character id). Detaching an 'owned' row leaves the referenced character in the user's vault untouched; detaching a 'link' row discards the locally-tracked overlay counters (the source character is untouched either way). Response is { companions, updatedAt }; ADOPT the returned updatedAt as the Main character's fresh stamp.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the Main character carrying the companion row.
companionIdYesThe companion ROW's `_id` from the Main character's `companions[]` array — NOT the buddy character's own `_id`. Read it off vault_get_character.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the destructiveHint annotation, the description discloses that detaching an 'owned' row leaves the referenced character untouched, while a 'link' row discards local overlay counters. It also explains the response shape and instructs the agent to adopt the returned `updatedAt`, adding valuable operational context.

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

Conciseness5/5

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

The description is dense but every sentence earns its place: the action, the identifier caveat, the two row-type behaviors, and the response/updatedAt instruction are all operational essentials. It is well-structured and front-loaded with the primary action.

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 two fully described parameters, clear annotations, and an output schema, and the description covers the behavioral nuances and response handling. An agent has everything it needs to select and invoke this tool correctly.

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

Parameters5/5

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

Schema coverage is already 100%, but the description adds critical disambiguation: `companionId` is the row `_id` from `companions[]`, not the buddy character's id, and should be sourced from vault_get_character. This prevents a highly plausible misuse that the schema alone might not fully communicate.

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

Purpose5/5

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

The description uses a specific verb ('Remove') and resource ('companion row from a Main character's sheet') and clarifies the exact identifier by which removal happens. It clearly differentiates from related vault operations by specifying the row `_id` rather than a character id.

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

Usage Guidelines4/5

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

The description gives clear context for when this tool applies by distinguishing 'owned' rows from 'link' rows and explaining the different consequences. It does not explicitly name alternatives like vault_attach_companion, but the use case is evident from the semantics and sibling tools.

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

vault_get_authoring_guideGet a vault authoring guideA
Read-onlyIdempotent
Inspect

Fetch a markdown reference guide that teaches the conventions for authoring a specific entity type in a specific ruleset. Returns the full markdown body, including front-matter metadata (ruleset, entityType, version) at the top. Published for 5e24: { entityType: 'monster' } — monster stat-block authoring (field map, AC base calc, CR-to-level-to-XP table, action types, spell formatting, resistances/immunities, keywords, high-PB adjustment, worked example), authored via vault_create_character + vault_update_character; { entityType: 'rule' } — classes / species / backgrounds / feats / abilities (the type taxonomy, the parent→Ability grant model, type-specific section fields, and the shared mechanics blocks: proficiencyChoices, spellChoices, spellListChoices, preparedSpells, freeCast, uses, ruleChoice, statBonuses), authored via vault_create_rule + vault_update_rule; { entityType: 'spell' } — the 5e24 Spell Detail header (casting time / range / area / components / duration), the categories (Class(es)) membership convention, and the damage/healing/effect mechanics blocks, authored via vault_create_spell + vault_update_spell. Call this BEFORE authoring the matching entity so the result follows the established conventions instead of inferring shape from one-off samples. Returns a 'not found' tool error when the requested entityType / rulesetCode combination does not have a published guide yet.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityTypeYesEntity the guide covers. Published for 5e24: 'monster', 'rule' (classes / species / backgrounds / feats / abilities), and 'spell'. Other entity types and rulesets land as separate guides over time. Lowercase.
rulesetCodeNoRuleset data value (e.g. '5th Edition', '5e24', 'PFRPG', 'PFRPG2', 'PF Playtest', 'Savage Worlds', 'Savage Embers', 'Solarian Conflict', 'Embers RPG'). Use the data value, not the display label.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, the description discloses the returned markdown structure (front-matter metadata, full body), the error behavior for unpublished combinations, and the taxonomy of published guides. 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?

The description is long but information-dense, with the core purpose in the first sentence and then structured content per entity type. Could be split into bullets for readability, but every sentence carries substance.

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 the 2-parameter schema and output schema, the description covers usage timing, return content, error cases, and per-type content. An agent can confidently invoke this tool for any supported entity type.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Even though schema covers all parameters, the description amplifies them: enumerates the valid entityType values with their authoring tools, and adds the crucial rule 'Use the data value, not the display label' for rulesetCode. This is exactly the kind of context agents need.

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 ('Fetch'), resource ('markdown reference guide'), and scope ('for authoring a specific entity type in a specific ruleset'). Clearly distinguishable from sibling authoring tools by its read-only guide role.

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 instructs to call this BEFORE authoring the matching entity, and names the upstream authoring tools (vault_create_character, vault_create_rule, etc.) for each entity type. The 'not found' error condition also helps the agent decide when the guide is unavailable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_get_characterGet a vault characterA
Read-onlyIdempotent
Inspect

Fetch one character document by id. Defaults to a summary shape: combat-relevant top-level fields (attributes, defense, offense, AC, HP, actions, skills) preserved; bulk text bodies on populated rule/item/spell refs and inline snapshots trimmed; notes/trackables reduced to names + key fields. Pass detail: 'full' for the populated shape with every description inline. The companions[] array (buddy ties — see vault_attach_companion) rides along untrimmed in both shapes, overlay state included; each row's _ref is a bare character id you can fetch with this tool. linkGroup, when present, is the id shared by this persona's linked sheets in other rulesets (created via vault_spawn_linked_character); it rides reads only and is not writable through the update tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the vault document.
detailNoResponse shape. 'summary' (default) trims the bulk text bodies on the populated rules / items / spells refs and on the inline snapshots, preserving combat-relevant top-level fields. 'full' returns the populated document with every description inline.summary

Output Schema

ParametersJSON Schema
NameRequiredDescription
_idNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly/not destructive/idempotent, and the description adds substantial behavioral detail: what the summary shape trims, what `full` restores, that `companions[]` rides along untrimmed with `state`, and that `linkGroup` is read-only. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: the core action is front-loaded, followed by shape behavior, then related fields and cross-tool references. No filler or 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?

Given an output schema exists and annotations cover the read-only safety profile, the description is complete for an agent to call this tool correctly: it explains the id-based fetch, both response shapes, companion array handling, and linkGroup read semantics. Nothing important is left 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 adds meaningful operational meaning beyond the schema, especially for `detail`: it explains exactly what gets preserved, trimmed, or inlined in each shape. It doesn't add anything new about `id`, but the schema already covers that fully.

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+resource: 'Fetch one character document by id.' The scope is unambiguous and the name vault_get_character matches the action, while the description clearly differentiates it from list/search tools and other vault_get_* tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for choosing the summary vs. full detail shape, explains how companion `_ref` values can be resolved by this tool, and warns that `linkGroup` is read-only via the update tool. It does not explicitly name when to prefer this over vault_search_characters, but the usage is otherwise clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_get_itemGet a vault itemA
Read-onlyIdempotent
Inspect

Fetch one item document by id, including damage info, weight, properties, equip slots, and ammo settings. Pair with vault_search_items to locate the id first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the vault document.

Output Schema

ParametersJSON Schema
NameRequiredDescription
_idNo

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the read-only nature is covered. The description adds the list of returned fields, which is useful context beyond the annotations, but it does not disclose any additional behavioral traits like error conditions, auth requirements, or return format. Since the annotations carry the safety profile, the description adds moderate value but doesn't go further.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no unnecessary words. The core action ('Fetch one item document by id') is front-loaded, and the pairing instruction is useful without redundancy. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, read-only getter with an output schema and comprehensive annotations, the description is complete. It tells the agent what the tool does, what fields are included, and how to obtain the id (via vault_search_items). The output schema covers return values, and annotations cover safety, so no further detail is necessary 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?

The schema already provides 100% coverage for the single parameter 'id' with a clear description ('Mongo `_id` of the vault document'). The description simply says 'by id', adding no new semantic information beyond what the schema already states. Therefore, the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Fetch'), resource ('item document'), and key operation (by id). It lists the included fields (damage info, weight, properties, equip slots, ammo settings), which distinguishes it from other vault_get_* tools, and explicitly names the sibling 'vault_search_items' as the way to locate the id first.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit workflow: 'Pair with vault_search_items to locate the id first.' This clearly tells the agent when to use this tool (when an id is available and full item details are needed) and points to the alternative for finding the id. It doesn't explicitly state when not to use it, but the pairing instruction is practical and sufficient for a get-by-id tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_get_levelup_optionsRead a character's 5e24 level-up planA
Read-onlyIdempotent
Inspect

Read the level-up plan for a 5e24 character — the same computation vault's web wizard renders. Without classRuleId: the CHOOSER (the character's class entries with stored levels, the multiclass candidates each with warn-only prerequisite warnings[], xp.minimumForNext, atMaxLevel). A character with NO class entries (a hand-made sheet) gets RECORD mode instead: needsClassRecord: true plus recordOptions[] (every usable base class with subclasses[] and its subclassLevel) — record the existing classes with vault_record_pc_classes first, then re-read; the target plan and vault_level_up_pc reject a class-less character. With classRuleId: the TARGET PLAN for advancing that class one level — features[] (gained at the new level) / subclassFeatures[] / growth[] (held rules whose choice counts grew; their counts are DELTAS, "pick N more") each carrying its open choice blocks in the creation-option shape, plus multiclassGrants (entering a new class: fixed proficiency lines + skill/tool pickers), hitPoints {hitDie, average, conModifier}, prerequisiteWarnings[] (multiclass entry is warn-only, the player may proceed), spellSlots (combined multiclass pool preview when 2+ classes contribute), and xp {current, minimumForNewTotal}. Add subclassRuleId (at a subclass level, before committing the pick) to preview that candidate's features. ruleChoice pools arrive prerequisite-FILTERED — every listed option is one the character qualifies for at the level being gained. Read this before vault_level_up_pc and key every pick off what it returns.

ParametersJSON Schema
NameRequiredDescriptionDefault
characterIdYes`_id` of the character to level (must belong to the calling user).
classRuleIdNoOmit for the CHOOSER (the character's class entries with their stored levels, the multiclass candidates with warn-only prerequisite warnings, the XP floor for the next level, atMaxLevel). Supply a base Class rule `_id` — one of the chooser's `classEntries[].classRuleId` to advance a held class, or a `multiclassOptions[]._id` to enter a new class at level 1 — for the TARGET PLAN: `features[]` / `subclassFeatures[]` / `growth[]` (each feature in the creation option shape with its open choice blocks: `choice` {label,count,options}, spellChoices (each block carries `prepared` — true = its spells land always-prepared and are EXCLUDED from the preparedSpellPicks pool), spellListChoices (same `prepared` flag), preparedSpells, proficiencyChoices, abilityScoreBump; `growth[]` entries are already-held rules whose counts grew this level — their `count`s are DELTAS, "pick N more"), `multiclassGrants` (when entering a new class), `hitPoints` {hitDie, average, conModifier}, `prerequisiteWarnings[]` (warn-only), `spellSlots` (the combined multiclass pool preview, null unless 2+ contributing casters), `openPickCount`, and `xp` {current, minimumForNewTotal}. ruleChoice pools arrive PREREQUISITE-FILTERED (an unqualified pick is also rejected on apply).
subclassRuleIdNoWith classRuleId, previews a tentative subclass pick before committing: the candidate's features (and their open choices) resolve into `subclassFeatures[]`. The pick itself still travels in `vault_level_up_pc.abilityChoices`, keyed by the class's subclass-choice ability.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description does not contradict them. Beyond that, it richly discloses behavior: RECORD mode for class-less characters, warn-only prerequisites, delta counts in growth[], prerequisite-filtered choice pools, null spellSlots when fewer than two casters contribute, and the fact that vault_level_up_pc rejects class-less characters. This goes well beyond what annotations or the schema alone convey.

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 long, but the length is justified by two modes, an edge case (no class entries), and important semantics like delta counts and prerequisite filtering. It is front-loaded with the core purpose and organized by mode. It loses a point because it partially restates details already present in the exhaustive schema, making it denser 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?

Given the tool's complexity — three parameters, dynamic modes, sub-flows for class-less characters, and a rich output schema — the description is complete. It covers preconditions (record classes first), sequencing (read before vault_level_up_pc), postconditions (picks must come from returned options), and exceptional states (warn-only multiclass entry), so an agent has enough context to invoke it correctly in the broader level-up workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/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 mode-level meaning to each parameter: no classRuleId yields the CHOOSER, classRuleId selects a held class or a multiclass candidate for the TARGET PLAN, and subclassRuleId previews a tentative pick before commitment. It also explains the relationship between classRuleId values and the chooser output, which the schema alone does not make explicit.

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 precise action ('Read the level-up plan for a 5e24 character') and names the exact resource and computation it mirrors. It distinguishes the tool's two modes (CHOOSER vs TARGET PLAN) and calls out related siblings like vault_level_up_pc and vault_record_pc_classes, so an agent can tell it apart 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?

The description gives explicit usage conditions: omit classRuleId for the chooser, supply it for a target plan, and add subclassRuleId to preview a subclass pick. It also prescribes the workflow — read before vault_level_up_pc, record classes first when class-less, and key picks off the returned data — which is actionable routing guidance beyond the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_get_pc_creation_optionsRead 5e24 character-creation optionsA
Read-onlyIdempotent
Inspect

Read the legal choices for guided 5e24 character creation — the same projections vault's web wizard reads. Pass kind to select one list: 'class' / 'species' / 'background' / 'feat' return the option projections (the calling user's own content plus stock, each option carrying its nested choices: skillChoices, toolChoices, startingEquipmentOptions, and per applied ability/feat — proficiencyChoices, spellChoices, spellListChoices, preparedSpells, and choice whose options carry a type; a background option also carries skillChoices + languages, a species option carries languages; background bump modes / feat, etc.); 'feat' returns every feat (a feat picked via an ability's choice carries its own proficiency/spell sub-choices); 'constants' returns the static reference data (skill list with attributes, ability-score methods with their arrays and point-buy costs, language options + pick count, alignments, background bump modes, max ability score, and originFeatCategory — the feat category the background's open feat slot is restricted to; filter the 'feat' list to it for the background pick). Use this BEFORE vault_build_pc so every id and pick you send is one the user is actually entitled to. Start with 'constants' and 'class', then read 'species' / 'background' / 'feat' as the build takes shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYesWhich 5e24 creation list to read. 'class' / 'species' / 'background' / 'feat' return the option projections (the user's own + stock content they may pick, with each option's nested choices — skillChoices, toolChoices, startingEquipmentOptions, and per applied ability/feat: proficiencyChoices {types,count,options}, spellChoices {count,options,prepared}, spellListChoices {categories,picks[].optionsByCategory,prepared}, preparedSpells {count} (a block's `prepared: true` = its spells land always-prepared and are EXCLUDED from the preparedSpellPicks pool), abilityScoreBump {options[].lines[]:{amount,count,eligible,max}} (supply the player's pick via `vault_build_pc.abilityBumpPicks`), and `choice` {count,options} where each option carries a `type`. The spellChoices / spellListChoices arrays are INDEX-ALIGNED with the authored blocks — a null entry holds the position of a block that grants nothing at level 1; skip it when rendering but count it when keying picks. A 'background' option ALSO carries its own `skillChoices {count,options}` (a background skill-choice grant → supply picks via `vault_build_pc.backgroundSkillProficiencies`) and `languages {fixed, choose:{count,options}}`; a 'species' option carries `languages {fixed, choose}`. For a `languages.choose` grant, supply the picks via `vault_build_pc.languageChoicePicks` keyed by that rule's `_id`; `languages.fixed` apply automatically). 'feat' returns EVERY feat (the background slot uses Origin-category feats; a feat picked via an ability's `choice` may be any) — a picked feat carries its own proficiency/spell sub-choices. Each 'feat' option carries `repeatable`; a `repeatable` feat filling the background slot keys its `vault_build_pc` picks with a `bg:` prefix. 'constants' returns the static reference data (skill list, ability-score methods and their arrays/point-buy costs, language options, alignments, background bump modes, max ability score, and originFeatCategory — the feat category the background's open feat slot is restricted to; filter the 'feat' list to it for the background pick). Read 'constants' plus 'class' first; read 'species'/'background'/'feat' as the build takes shape.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and idempotentHint=true, and the description adds critical behavioral nuances beyond those: the index-aligned arrays with null placeholders, the meaning of `prepared: true` (spells excluded from preparedSpellPicks), and the `bg:` prefix for repeatable feats in the background slot. 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.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense block of text with heavy parentheticals, repeating much of the schema description nearly verbatim. It is not structured with bullets or clear separation of the five kinds, making it hard to scan. While the opening sentence is clear and the 'Use this BEFORE' instruction is early, the bulk is unwieldy and redundant.

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?

Despite an output schema existing, the description covers all essential nuances: return structure per kind, the index alignment, the prepared flag exclusion, the bg prefix, and the recommended reading order. It is complete but overly verbose; a shorter version that pointed to the schema for details would have been sufficient given the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and already detailed, but the tool description adds essential extra semantics: the index-alignment note (null entries hold positions) and the `bg:` prefix for repeatable feats in background picks. It also clarifies the 'constants' kind includes originFeatCategory for filtering the feat list. These are not in the schema and are vital for 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?

The description opens with a specific verb ('Read') and a clear resource ('legal choices for guided 5e24 character creation'), explicitly stating it returns the same projections the web wizard uses. It differentiates from siblings by positioning itself as a pre-build step before vault_build_pc, and the sibling list shows vault_get_levelup_options is for leveling, not creation.

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 explicitly says 'Use this BEFORE vault_build_pc' and gives a recommended reading order: 'Start with constants and class, then read species/background/feat as the build takes shape.' This tells the agent exactly when and how to use the tool, though it does not explicitly say when not to use it, the positive guidance is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_get_ruleGet a vault ruleA
Read-onlyIdempotent
Inspect

Fetch one rule document by id, including nested abilities, requirements, ability score bonuses, and starting equipment references. Pair with vault_search_rules to locate the id first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the vault document.

Output Schema

ParametersJSON Schema
NameRequiredDescription
_idNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds behavioral detail by specifying that the returned document includes nested abilities, requirements, ability score bonuses, and starting equipment references, going beyond the bare schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, both functional: the first states the operation and result contents, the second gives the practical lookup workflow. There is no redundant phrasing or 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 simple one-parameter getter with an output schema present and annotations covering safety, the description is complete. It identifies the resource, the necessary id, the included content, and how to obtain the id via vault_search_rules. No critical usage information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already defines id as the MongoDB `_id` of the vault document. The description merely says "by id," adding no new semantic information about the parameter. This matches the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: "Fetch one rule document by id," which clearly distinguishes this from vault_search_rules (search/listing) and vault_create_rule/update_rule/delete_rule (mutations). It also enumerates the nested content included, leaving no ambiguity about what this tool returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit workflow: "Pair with vault_search_rules to locate the id first." This tells the agent when this tool is appropriate after a search. It does not spell out when not to use it, but for a single-document fetch tool this is acceptable and clear context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_get_spellGet a vault spellA
Read-onlyIdempotent
Inspect

Fetch one spell document by id, including its level, casting time, range, components, duration, and full description. Pair with vault_search_spells to locate the id first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the vault document.

Output Schema

ParametersJSON Schema
NameRequiredDescription
_idNo

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds useful context about what the fetched document includes (level, casting time, range, components, duration, full description), but does not mention missing-id or not-found behavior. Overall it adds some value beyond the annotations without being richly behaviorally descriptive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. The first sentence defines the operation and what is returned; the second sentence gives the companion workflow. Everything included 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?

This is a simple get-by-id operation with one well-documented parameter, rich annotations, and an output schema present. The description covers the essential workflow and the pointer to vault_search_spells closes the only real ambiguity: where the id comes from.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter id is already documented in the schema as a Mongo `_id` of the vault document. The description reinforces that this id is the retrieval key and points to vault_search_spells as the source of the id, but it does not need to add more detail because the schema already fully explains the parameter.

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 ('Fetch'), a specific resource ('one spell document'), and the retrieval mechanism ('by id'), while enumerating the key fields returned. It is clearly distinguishable from siblings like vault_search_spells, which locates documents rather than fetching a single one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly names vault_search_spells as the companion tool to use first for locating the id, giving the agent a concrete workflow. This handles the main routing decision: search to find the id, then fetch by id.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_level_up_pcLevel up a 5e24 player characterAInspect

Advance a 5e24 character one level in a class, in one call, from a flat draft of choices. A class-less character (no Class entries) is rejected — record its existing classes with vault_record_pc_classes first. Vault validates every pick against the plan's pools (prerequisites enforced; grown choices demand only their delta counts) and mutates the character: the class entry's stored level bumps (or a new class entry lands at level 1 with the restricted multiclass proficiency set — no saves, no equipment), the level's features snapshot onto the sheet (a subclass picked through the class's subclass-choice ability lands as its own Origin entry and cascades its features), ability-score increases bake (Constitution raises HP retroactively), HP and hit dice grow (average or the player's roll + Constitution), use-counters resize (spent uses stay spent), the combined multiclass spell-slot pool reconciles when 2+ classes contribute (Pact Magic stays separate), core.class updates to " , ...", XP floors at the new level's minimum (or your exact xp), and a level-up note records the choices. Read vault_get_levelup_options first — required: characterId, classRuleId, hitPoints. Supply abilityChoices for every feature choice the plan surfaced (the subclass pick at 3, the ASI's feat at 4+, grown invocation lists), the sub-pick maps for anything the picked options themselves carry, multiclassSkillProficiencies/multiclassToolProficiencies when entering a class, and optional exact xp. The updated character and a summary of what changed are returned. On an invalid draft vault returns the specific reason as a tool error — fix the draft and retry; if a surfaced pick genuinely cannot be satisfied, allowIncomplete: true applies the level and skips the shortfall instead.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses an unusual amount of mutation behavior beyond the annotations: class entry bumps, feature snapshots, ASI baking with retroactive HP, HP/hit-die growth, use-counter resizing, multiclass spell-slot reconciliation, core.class updates, XP flooring, and note recording. It also describes validation failure behavior, which annotations alone do not convey.

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 dense and every clause earns its place, with the main action and preconditions front-loaded. However, it is structured as one very long paragraph with many semicolon-separated outcomes, which makes parsing harder than a bulleted or sectioned layout would be.

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 complex mutation tool with zero schema parameters, the description covers purpose, prerequisites, exact parameter requirements, behavioral side effects, return expectations, and failure handling. Since an output schema exists, the return-value explanation is sufficient as written, and nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema is empty, so the description carries the entire parameter-documentation burden, and it does so thoroughly. It names required fields (characterId, classRuleId, hitPoints), optional fields (abilityChoices, sub-pick maps, multiclassSkillProficiencies, multiclassToolProficiencies, xp), and the special allowIncomplete flag, plus what each is for.

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 precise verb-resource pair: 'Advance a 5e24 character one level in a class, in one call, from a flat draft of choices.' It clearly distinguishes this from related actions like vault_get_levelup_options and vault_record_pc_classes, so an agent can tell what this tool is for immediately.

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 tells the agent to read vault_get_levelup_options first, warns that class-less characters are rejected, and directs the agent to vault_record_pc_classes to fix that precondition. It also explains when to use allowIncomplete, giving clear decision guidance for error recovery.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_list_linked_charactersList a character's linked sheetsA
Read-onlyIdempotent
Inspect

List the linked sibling sheets of a character the user owns — every OTHER sheet in its linkGroup (the same persona in other rulesets, created via vault_spawn_linked_character). Returns summary rows (_id, name, ruleset, image, dead, active, linkGroup); follow with vault_get_character on a returned id for a full sheet. A character with no linkGroup returns an empty list. 404 for an unknown or unowned character.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the character (owned by the calling user).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations already covering readOnlyHint, idempotentHint, and destructiveHint, the description adds substantive behavioral context: it returns only summary rows, returns an empty list when there is no linkGroup, and returns 404 for unknown or unowned characters. This ownership/error behavior goes beyond the annotations and does not contradict them.

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 purpose is front-loaded in the first sentence, and the description is compact—covering output shape, follow-up workflow, and error/edge cases in three sentences. The field enumeration overlaps somewhat with the declared output schema, but the overall structure is scannable and free of unrelated detail.

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 single-parameter read-only list tool, the description covers the purpose, ownership precondition, output semantics, empty-list edge case, error behavior, and the appropriate next tool for full details. Combined with the annotations and output schema, an agent has everything needed to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes the single `id` parameter as the Mongo _id of an owned character, so the baseline is 3. The description adds meaningful nuance by clarifying that this id refers to the source character and that the result contains every OTHER sheet in its linkGroup, meaning the input character itself is excluded from the output.

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 precise action and resource: 'List the linked sibling sheets of a character the user owns — every OTHER sheet in its linkGroup.' It clearly distinguishes itself from vault_get_character by stating it returns summary rows rather than full sheets, and it explicitly excludes the input character from the result set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: pass an owned character id and get its linked sibling sheets. It also names the explicit alternative follow-up, 'follow with vault_get_character on a returned id for a full sheet,' which tells the agent when to switch to the full-sheet tool, and it documents edge cases (empty list, 404).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_record_pc_classesRecord a class-less 5e24 character's existing classesAInspect

The class-less on-ramp to the level-up flow. A hand-made 5e24 character with no Class entries on its sheet can't level up (vault rejects the plan and the apply) — this tool records the class(es) and level(s) the character is ALREADY playing so the wizard can take over at the next level. It stamps identity snapshots ONLY: no features, proficiencies, HP, or trackables are granted — the sheet is trusted to already carry everything. Call vault_get_levelup_options first: RECORD mode (needsClassRecord: true) ships recordOptions[] (base classes with subclasses[] and subclassLevel) and totalLevel, the character's XP-derived level. The recorded levels must sum to EXACTLY that totalLevel (XP is the authority; vault never rewrites it) and a row may carry a subclass only at/above the option's subclassLevel. Rejected once any class entry exists. On success vault sets each class snapshot's stored level, attaches subclasses, updates core.class, appends a note, and returns { character, summary } — then call vault_get_levelup_options again for the normal chooser.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations by disclosing non-effects ('no features, proficiencies, HP, or trackables are granted'), constraints ('levels must sum to EXACTLY that totalLevel'), side effects ('updates core.class, appends a note'), and return shape. It also explains the rejection behavior clearly.

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 every sentence earns its place: purpose, prerequisite, constraints, non-effects, side effects, return value, and follow-up. It is front-loaded with the core purpose and avoids 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 tool with complex game-rule constraints, the description covers prerequisites, validation rules, side effects, and the follow-up call. The output schema exists for return-value details, and the description still summarizes the return shape as { character, summary }.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, which sets a baseline of 4. The description adds useful semantic context about the recordOptions[], subclassLevel, and totalLevel contract from the prerequisite call, even though it does not document actual invocation parameters because none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it records the existing class(es) and level(s) of a class-less 5e24 character so the level-up wizard can proceed. It clearly distinguishes this from the normal level-up flow and from vault_get_levelup_options by calling it the 'class-less on-ramp'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: only for a hand-made 5e24 character with no Class entries, and it names the prerequisite call to vault_get_levelup_options first. It also states when the tool is rejected ('Rejected once any class entry exists') and tells the agent to call vault_get_levelup_options again after success.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_search_charactersSearch vault charactersA
Read-onlyIdempotent
Inspect

Search PCs and NPCs (any character whose type is NOT the lowercase monster marker) the user owns, plus stock template characters. Use this to locate a player character or NPC the user has authored. Authored monsters are hidden — for creature stat blocks use the dedicated vault_search_monsters tool instead. Defaults to a compact summary shape (identification + image + class/race/background + linkGroup — the id tying a persona's per-ruleset linked sheets together; sheets sharing a linkGroup are the same persona in different rulesets); pass detail: 'full' to receive each character's full sheet (attributes, skills, rules, items, spells) inline.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSubstring match on character name (case-insensitive). Use `^name$` for an exact match.
skipNoPagination offset; pair with `limit` to walk results.
sortNoComma-separated field list. Prefix with `-` for descending (e.g. `-updatedAt,name`).
typeNoCharacter type filter (substring, case-insensitive). '^PC$' / '^NPC$' for the common user-authored cases. To search authored monsters, use the dedicated `vault_search_monsters` tool — this character search hides them by default (the lowercase `monster` type marker is filtered out unless you opt in via that sibling tool).
limitNoPage size; defaults to 50 when omitted. Hard cap of 200.
detailNoResponse shape. 'summary' (default) returns identification + summary fields; 'full' returns the complete document shape (every field inline) that non-MCP clients receive by default.summary
rulesetNoRuleset code (e.g. '5th Edition', '5e24', 'PFRPG', 'Savage Worlds', 'Universal').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsNo
paginationNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool read-only, idempotent, and non-destructive, and the description adds genuinely useful behavior: authored monsters are hidden by default, stock templates are included, the default response is a compact summary, and full sheets are only returned when `detail='full'`. It also explains the non-obvious `linkGroup` persona-linkage semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every clause earns its place: scope, exclusion, alternative tool, default shape, `linkGroup` meaning, and the full-detail option. Key routing information is front-loaded before output-shape details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a 100%-covered input schema, an output schema, and safety annotations in place, the description covers the remaining decision-relevant context: what is searched, what is excluded, how to request full output, and how linked personas behave. No significant gap remains 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 is 3; the description raises it by clarifying the `type` filter's 'NOT monster' behavior and by explaining what `detail:'full'` returns (full sheet inline). It doesn't separately discuss every parameter, but the schema already handles those, and the added semantics target the two least obvious ones.

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 precise scope: search PCs and NPCs (defined as any character whose `type` is not the lowercase `monster` marker) the user owns, plus stock templates. It draws an explicit boundary against `vault_search_monsters`, so an agent can distinguish this tool at a glance without inspecting 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 states the intended use ('locate a player character or NPC the user has authored') and gives an explicit when-not: authored monsters are hidden, so creature stat blocks should go to `vault_search_monsters`. The `type` parameter description reinforces this routing, leaving no ambiguity about alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_search_itemsSearch vault itemsA
Read-onlyIdempotent
Inspect

Search the item library the user has access to (stock items plus their own house items). Use this to locate a weapon, armor piece, tool, adventuring gear entry, or magic item by name, type, or ruleset. Defaults to a compact summary shape (identification + summary + weight + cost + publisher / source); pass detail: 'full' to receive each item's full description and properties array inline.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSubstring match on item name (case-insensitive). Use `^name$` for an exact match.
skipNoPagination offset; pair with `limit` to walk results.
sortNoComma-separated field list. Prefix with `-` for descending (e.g. `-updatedAt,name`).
typeNoItem type (substring, case-insensitive). Vault item types are ruleset-specific strings. Common 5e / 5e24 examples: 'Weapon', 'Armor', 'Tool', 'Adventuring Gear', 'Wondrous Item'.
limitNoPage size; defaults to 50 when omitted. Hard cap of 200.
stockNotrue = official content only; false = user-authored only; omit to include both.
detailNoResponse shape. 'summary' (default) returns identification + summary fields; 'full' returns the complete document shape (every field inline) that non-MCP clients receive by default.summary
rulesetNoRuleset code (e.g. '5th Edition', '5e24', 'PFRPG', 'Savage Worlds', 'Universal').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsNo
paginationNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, non-destructive behavior, so the description does not need to restate safety. It goes further by disclosing the default compact summary shape (identification + summary + weight + cost + publisher/source) and the `detail: 'full'` behavior that expands to the complete document. This adds real behavioral context beyond the structured 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 three sentences with no filler: scope, use case, and response-shape behavior are each covered concisely. It is front-loaded with the core search purpose before introducing the output detail option.

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 8-parameter search tool with no required parameters, full schema coverage, and an output schema, the description provides enough context to select and invoke it correctly. It explains what the tool searches, what the default result shape is, how to get full results, and who is in scope.

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 every parameter, including the `^name$` exact-match syntax, type examples, pagination, and sorting. The description reinforces how `detail` changes the response but does not add meaning beyond what the schema already 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 opens with a clear verb and resource: 'Search the item library the user has access to.' It also names the concrete item categories (weapon, armor, tool, adventuring gear, magic item) and the search dimensions (name, type, ruleset), making it easy to distinguish from sibling search tools like vault_search_characters, vault_search_monsters, vault_search_spells, and vault_search_rules.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the intended use case explicitly ('Use this to locate a weapon, armor piece, tool, adventuring gear entry, or magic item...') and clarifies the scope (stock items plus the user's own house items). It does not explicitly name sibling alternatives to exclude, but the domain boundary is clear enough for an agent to route correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_search_monstersSearch vault monstersA
Read-onlyIdempotent
Inspect

Search authored monsters (characters with the lowercase type: monster marker) the user owns, plus any stock template monsters. This is the right tool for creature stat-block lookups; vault_search_characters deliberately hides monsters by default and this sibling exists so the LLM doesn't have to remember the filter trick. The type filter is baked into the call. Defaults to a compact summary shape; pass detail: 'full' to receive each monster's full stat block (attributes, defense, offense, AC, HP, actions, skills) inline. Pair with vault_get_character on a returned id for the full document.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSubstring match on monster name (case-insensitive). Use `^name$` for an exact match.
skipNoPagination offset; pair with `limit` to walk results.
sortNoComma-separated field list. Prefix with `-` for descending (e.g. `-updatedAt,name`).
limitNoPage size; defaults to 50 when omitted. Hard cap of 200.
detailNoResponse shape. 'summary' (default) returns identification + summary fields; 'full' returns the complete document shape (every field inline) that non-MCP clients receive by default.summary
rulesetNoRuleset code (e.g. '5th Edition', '5e24', 'PFRPG', 'Savage Worlds', 'Universal').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsNo
paginationNo

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so safety is fully covered. The description adds meaningful behavioral details: the `type` filter is baked in, the default response is a compact summary, and `detail: 'full'` returns the full stat block inline. It does not contradict annotations and adds context beyond them, though it stops short of discussing pagination behavior or edge cases (which the schema covers).

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 four sentences, each earning its place: purpose, sibling contrast, default vs full detail, and pairing suggestion. It is front-loaded with the core function and uses no filler language. Structure is both concise and information-dense.

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 the tool's complexity (search, filtering, pagination, detail levels), the description covers all essential aspects: what is searched, the baked-in filter, default vs full shape, and a recommended follow-up. The output schema exists, so return-value details are not the description's burden. No critical usage information is missing for an agent to call it 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 all six parameters are already described. The description adds value by clarifying the `detail` parameter's effect, enumerating the fields included in a full stat block (attributes, defense, offense, AC, HP, actions, skills), and stating that `name` supports `^name$` for exact match. This goes beyond the schema's generic wording, justifying a score above 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?

The description opens with a precise definition of what the tool does: search authored monsters (characters with the `type: monster` marker) plus stock templates. It explicitly contrasts with the sibling `vault_search_characters`, which hides monsters by default, making the tool's purpose unmistakable and distinct from every sibling.

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 states this is 'the right tool for creature stat-block lookups' and explains why the sibling exists, directly addressing when to use this tool over `vault_search_characters`. It also suggests pairing with `vault_get_character` for full documents, giving actionable usage context. The guidance is explicit and includes alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_search_rulesSearch vault rulesA
Read-onlyIdempotent
Inspect

Search the rules library the user has access to (stock content plus their own house rules). Use this to locate a class, race, background, feat, edge, hindrance, ancestry, ability, stunt, or extra by name, type, or ruleset. Defaults to a compact summary shape (identification + summary + categories + publisher / source); pass detail: 'full' to receive each rule's full description and embedded sub-document arrays inline.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSubstring match on rule name (case-insensitive). Use `^name$` for an exact match.
skipNoPagination offset; pair with `limit` to walk results.
sortNoComma-separated field list. Prefix with `-` for descending (e.g. `-updatedAt,name`).
typeNoRule category to filter to.
limitNoPage size; defaults to 50 when omitted. Hard cap of 200.
stockNotrue = official/WOTC content only; false = user-authored house rules only; omit to include both.
detailNoResponse shape. 'summary' (default) returns identification + summary fields; 'full' returns the complete document shape (every field inline) that non-MCP clients receive by default.summary
rulesetNoRuleset code (e.g. '5th Edition', '5e24', 'PFRPG', 'Savage Worlds', 'Universal').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsNo
paginationNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond annotations: the default compact summary shape, the effect of detail='full', and that the search covers both stock content and user house rules.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no fluff: purpose and scope come first, followed by the key output-shape behavior. Every sentence 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?

Given the rich output schema, full parameter documentation, and complete annotation set, the description covers all essential context: scope, searchable content, query dimensions, and response behavior. Pagination and sort syntax are already handled in the schema, so nothing important 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 meaning for the detail parameter by specifying what summary returns (identification + summary + categories + publisher/source) and what full returns (complete documents with embedded sub-document arrays). This goes beyond the schema's brief enum descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: searching the rules library the user has access to, including stock content and house rules. It enumerates the rule types covered and the query axes (name, type, ruleset), making it easy to distinguish from sibling vault search tools like vault_search_characters or vault_search_spells.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states when to use the tool: to locate any of the listed rule categories by name, type, or ruleset. It provides clear context about the library scope, though it does not explicitly point to alternatives such as vault_get_rule or mention when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_search_spellsSearch vault spellsA
Read-onlyIdempotent
Inspect

Search the spell library the user has access to (stock spells plus their own house spells). Use this to locate a spell or power by name, ruleset, or type. Defaults to a compact summary shape (identification + summary + level + school + classes + categories + publisher / source); pass detail: 'full' to receive each spell's full description inline.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSubstring match on spell name (case-insensitive). Use `^name$` for an exact match.
skipNoPagination offset; pair with `limit` to walk results.
sortNoComma-separated field list. Prefix with `-` for descending (e.g. `-updatedAt,name`).
typeNoSpell type. 5e / 5e24 use 'Spell'; Savage Worlds uses 'Power'.
limitNoPage size; defaults to 50 when omitted. Hard cap of 200.
stockNotrue = official content only; false = user-authored only; omit to include both.
detailNoResponse shape. 'summary' (default) returns identification + summary fields; 'full' returns the complete document shape (every field inline) that non-MCP clients receive by default.summary
rulesetNoRuleset code (e.g. '5th Edition', '5e24', 'PFRPG', 'Savage Worlds', 'Universal').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsNo
paginationNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint, idempotentHint, and destructiveHint, so the description does not need to repeat safety. It adds valuable behavioral details beyond the schema: the default compact summary shape with specific fields (identification, summary, level, school, classes, categories, publisher/source) and the option to request 'full' detail. It also discloses the access scope (stock plus own house spells). This is solid context without overstating side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences are front-loaded with purpose and scope first, then response behavior. Every phrase earns its place: it avoids restating schema details while still providing the key usage and output shape. No filler or 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?

For a read-only search tool with 8 self-documenting parametersthis and an output schema present, the description covers everything an agent needs: what it searches, the scope of the library, the searchable fields, and the response shape options. Pagination and sorting are fully described in the schema, so their absence here is not a shortcoming.

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 by explaining the response shape implied by the `detail` parameter and enumerating the summary fields, which complements the schema's concise parameter descriptions. It does not repeat every parameter, but the schema already covers them thoroughly.

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 ('Search'), a resource ('spell library'), and a clear scope ('the user has access to (stock spells plus their own house spells)'). It also names the searchable criteria (name, ruleset, type), making it unambiguous and distinct from sibling search tools like vault_search_items or vault_search_rules.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context for use: 'Use this to locate a spell or power by name, ruleset, or type.' It also clarifies the library scope, which helps an agent decide when this tool is appropriate. However, it does not explicitly name alternatives or state when not to use this tool (e.g., comparing with vault_get_spell for exact-ID lookups), so a small gap exists.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_spawn_linked_characterSpawn a linked character sheet in another rulesetAInspect

Create a linked sibling sheet for a character the user owns, in a different ruleset — the same persona with sheets in multiple rulesets, tied together by a shared linkGroup id. The server builds the new sheet from the target ruleset's template and copies only the descriptive/identity fields in the sync manifest (name, description, image, appearance, personality, and similar); mechanical and build data (class, level, attributes, skills, rules/items/spells, notes) stays ruleset-local and starts fresh. After the spawn, edits to a manifest field on any linked sheet cascade to its siblings automatically. Play campaign assignments of the source are replicated onto campaign legs matching the new ruleset where they exist. One sheet per ruleset per group: vault answers 409 when the source is already that ruleset or a linked sibling already occupies it, 403 for an ungranted restricted ruleset, and 404 for an unknown or unowned source. This is NOT vault_clone_character — clone deep-copies the whole ruleset-specific sheet; spawn deliberately does not.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the source character (owned by the calling user).
rulesetNoRuleset code for the new linked sheet (e.g. '5th Edition', '5e24', 'Fate Core'). Required. Must differ from the source's ruleset; restricted rulesets require an entitlement grant (vault answers 403). Check list_rulesets for the codes this account can use.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say readOnly=false/destructive=false, so the description carries the burden, and it is unusually thorough: it discloses what is copied (sync-manifest fields) vs. reset (mechanical/build data), post-spawn cascade behavior, campaign assignment replication, one-sheet-per-ruleset constraint, and error responses. No annotation contradiction.

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 purpose is front-loaded, and the subsequent sentences each add distinct value: scope of copied data, sync semantics, campaign replication, error codes, and the clone contrast. Although long, it is dense rather than padded, appropriate for a tool with this complex behavior.

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 create tool with only two params and no destructive behavior, the description covers invocation constraints, identity rules, post-spawn behavior, and failure modes. An output schema exists, so return-value detail is not required; nothing needed to call 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 coverage is 100% and both parameter descriptions already document ownership, 'must differ,' restricted-ruleset grants, and list_rulesets. The description reinforces these and adds linkGroup context, but it does not substantially change parameter meaning beyond what the schema provides.

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 and object: 'Create a linked sibling sheet for a character the user owns, in a different ruleset,' and explains the linkGroup tie and multiple-ruleset persona. It explicitly differentiates from vault_clone_character, which deep-copies, so an agent can distinguish the two at a glance.

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 states when to use this tool (creating linked multi-ruleset sheets) and explicitly names the closest alternative with the deciding difference: 'This is NOT vault_clone_character — clone deep-copies the whole ruleset-specific sheet; spawn deliberately does not.' Error semantics (409/403/404) also tell the agent when a call is inappropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_update_characterUpdate a vault characterA
Idempotent
Inspect

Patch fields on an existing character by id. Only supplied fields change, with one distinction: object sub-docs (defense, core, offense, speed, personality, settings) deep-merge — nested keys you omit are preserved — but ARRAY fields (items, spells, rules, skills, actions, trackables, attributes, notes) are atomic: the array you send replaces the stored array wholesale. To add or edit one array entry, vault_get_character first, modify the returned array, and send the complete array back. Sending null for a field is treated the same as omitting it (the field keeps its current value) — null does NOT clear; to clear a text field send an empty string. This is also the canonical tool for editing a play campaign character's HP, conditions, or inventory; play characters are pointers to vault characters and play has no direct character-write endpoint. AC caution (5e24): when the character's settings.autoPassiveBonuses is true (the default for new 5e24 characters), the armor and shield rows of defense.armorClass are derived from equipped items and recomputed on every sheet load — change AC by setting equipped on the character's armor/shield items, not by writing those rows; when the toggle is false, defense.armorClass is manually authored and writing it directly is correct. Caution: mutations may affect any active play campaign or expedition referencing this character. Consider running vault_get_character first to inspect linkage. REQUIRES baseUpdatedAt: copy updatedAt from a fresh vault_get_character read; a stale or fabricated value is rejected with OUT_OF_SYNC and nothing is written — writing from memory of an earlier read is not possible. companions is NOT writable here (it is stripped): manage buddy ties with vault_attach_companion / vault_detach_companion, and a linked buddy's tracked values with vault_update_companion_state. linkGroup is NOT writable here either (also stripped): linked-sheet group membership is created by vault_spawn_linked_character and only vault's unlink endpoint clears it.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
_idNo

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses deep-merge vs atomic array semantics, null-as-omit behavior, the AC 5e24 derivation caveat, side effects on active play campaigns, the baseUpdatedAt concurrency requirement, and stripped fields. This vastly exceeds what the sparse annotations provide, with no contradictions.

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?

It is long, but every section earns its place given the tool's complexity: merge rules, null handling, the AC exception, concurrency, play-character scope, and non-writable fields are all dense, non-redundant warnings an agent needs. The core action is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no real input schema and minimal annotations, the description is remarkably complete: it covers preconditions, failure modes, side effects, and routing to sibling tools. An output schema exists, so return-value details are not required here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the input schema exposes zero properties and coverage is 100%, the description supplies essential semantic context: baseUpdatedAt is required and must come from a fresh read, field-level merge behavior is defined, and clear values are explained. It fully compensates for the absence of a useful schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Patch fields on an existing character by id.' It also distinguishes itself from related tools by declaring this is the canonical tool for editing play campaign character HP/conditions/inventory and by stating what is intentionally NOT writable here.

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 when-to-use guidance, including the play-character exception and alternatives for companion/link management. It also instructs the agent to read vault_get_character first, both for linkage inspection and to obtain a fresh baseUpdatedAt.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_update_companion_stateUpdate a linked companion's tracked valuesA
Idempotent
Inspect

Write a LINK-mode companion row's transient overlay — the locally-tracked hit points, temp HP, hit dice, death saves, exhaustion, stress marks, and trackable/free-cast counters for a buddy the user doesn't own. The source character is never written. The state you send replaces the row's stored overlay wholesale: vault_get_character the Main first, modify that row's state, send it back complete. Maximums never belong in the overlay (they derive from the source; vault drops them). Rows in 'owned' (or legacy 'clone') mode have no overlay — edit the referenced character directly with vault_update_character instead. REQUIRES baseUpdatedAt: copy updatedAt from a fresh vault_get_character read of the MAIN character; a stale value is rejected with OUT_OF_SYNC and nothing is written.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation as a write with idempotent and non-destructive hints; the description adds meaningful detail by stating the source character is never written, the state is replaced wholesale, maximums are dropped, and a stale baseUpdatedAt triggers OUT_OF_SYNC with no write. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence carries a distinct, necessary fact, and the most important scoping statement is front-loaded. The length is justified by the tool's complexity; there is no filler or repetition.

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 write operation with conditional applicability and a concurrency guard, the description covers what is written, what is not written, the required workflow, the failure mode, and the alternative tool. With an output schema present and the mutating behavior covered by annotations, nothing essential is missing for correct selection and 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?

Although the input schema declares zero properties, the description names two effective parameters (`state` and `baseUpdatedAt`) and explains their semantics — full replacement, no maximums, and the need to copy updatedAt from a fresh read. It does not supply exact types or a full state shape, so it stops short of a 5, but it meaningfully compensates for the empty 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?

Effectively identifies the operation as writing a LINK-mode companion row's transient overlay for locally-tracked values, naming concrete fields (hit points, temp HP, hit dice, etc.) and explicitly distinguishing from owned/clone mode rows. This clearly differentiates it from sibling vault_update_character.

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 routing rule: LINK-mode companions use this tool, while 'owned' (or legacy 'clone') rows should go to vault_update_character instead. It also prescribes the correct call sequence — vault_get_character the Main first, modify its state, send it back complete with a fresh updatedAt — leaving no ambiguity about when and how to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_update_itemUpdate a vault itemA
Idempotent
Inspect

Patch fields on an existing user-authored item by id. Only supplied fields change. Use vault_search_items / vault_get_item to confirm the id first. REQUIRES baseUpdatedAt: copy updatedAt from a fresh vault_get_item read; a stale or fabricated value is rejected with OUT_OF_SYNC and nothing is written.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
_idNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (not read-only, not destructive, idempotent), it discloses partial-update semantics, the optimistic-concurrency requirement, and the OUT_OF_SYNC rejection with 'nothing is written'. This adds crucial behavioral context not present in structured 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?

Three sentences, each earning its place: purpose, patch behavior, and the required concurrency token. No filler, and the most important constraint (baseUpdatedAt) is emphasized clearly.

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 empty input schema, the description covers the core requirements (id, baseUpdatedAt, partial patch) and the error behavior. It is slightly incomplete in that it does not specify the exact parameter names for id and patchable fields, which an agent would need for a flawless call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema is empty, so the description carries the parameter burden. It names baseUpdatedAt and refers to id, and clarifies that only supplied fields change. However, it does not enumerate the exact id parameter key or allowed field names, leaving some ambiguity for 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?

The description clearly states a specific verb ('patch'), resource ('existing user-authored item'), and scope ('by id'). It is distinct from vault_create_item and other vault_update_* siblings by naming the resource type 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?

It explicitly instructs to confirm the id via vault_search_items / vault_get_item before updating, and requires baseUpdatedAt from a fresh read. This provides clear preconditions and directs the agent to sibling read tools for correct usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_update_ruleUpdate a vault ruleA
Idempotent
Inspect

Patch fields on an existing user-authored rule by id. Only the fields you supply are changed; everything else is preserved. Use vault_search_rules / vault_get_rule first to confirm the id and current state. REQUIRES baseUpdatedAt: copy updatedAt from a fresh vault_get_rule read; a stale or fabricated value is rejected with OUT_OF_SYNC and nothing is written.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
_idNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses partial update behavior (only supplied fields changed), the OUT_OF_SYNC rejection with nothing written, and the need to copy updatedAt from a fresh read. This adds significant value beyond the annotations, which only indicate idempotent and non-destructive properties.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, each with a distinct purpose: core operation, prerequisite step, and critical requirement. It is front-loaded with the action and scoping, with no redundant or vague language.

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 the empty input schema, the description covers all essential invocation details: confirming existence via search/get, providing current updatedAt, and the error behavior on conflict. The output schema exists, so return format is not needed. It is complete for a partial-update tool with concurrency control.

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?

Even though the schema declares no parameters, the description provides the essential semantics: 'by id' implies an id parameter, and 'REQUIRES baseUpdatedAt' names the exact parameter and its provenance. This compensates for the empty schema and gives the agent enough to invoke correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (patch), the resource (user-authored rule), and the scoping (by id). It distinguishes this from create/delete operations by focusing on existing rules, making it unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly instructs to use vault_search_rules / vault_get_rule first to confirm the id and current state, and explains the baseUpdatedAt requirement for conflict handling. It does not explicitly name alternatives, but the precondition is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_update_spellUpdate a vault spellA
Idempotent
Inspect

Patch fields on an existing user-authored spell by id. Only supplied fields change. Use vault_search_spells / vault_get_spell to confirm the id first. REQUIRES baseUpdatedAt: copy updatedAt from a fresh vault_get_spell read; a stale or fabricated value is rejected with OUT_OF_SYNC and nothing is written.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
_idNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses important behavior beyond annotations: partial patch semantics ('Only supplied fields change'), optimistic concurrency via baseUpdatedAt, rejection with OUT_OF_SYNC, and atomic failure ('nothing is written'). This complements the idempotentHint and is consistent with readOnlyHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with no filler. The core purpose is front-loaded, followed immediately by the critical prerequisites and failure mode. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the concurrency semantics are well covered, the tool is not invocable from the description because the parameter shape is undefined: no id field, no field-patch structure, and no formal baseUpdatedAt parameter despite the schema showing zero properties. Given the empty schema, this is a major completeness gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema exposes no properties, so the description must carry the full parameter burden. It does explain baseUpdatedAt's meaning and source, but it never names the actual parameter keys for the spell id or the fields being patched, leaving the agent unable to construct a valid request from the description alone.

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 ('Patch'), a clear resource ('existing user-authored spell'), and identifies the operation mode ('by id', 'only supplied fields change'). This is easily distinguished from sibling tools like vault_search_spells and vault_get_spell, and from update tools targeting other resources.

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 instructs the agent to confirm the id first via vault_search_spells / vault_get_spell, and names the exact prerequisite for a successful write: a fresh baseUpdatedAt copied from vault_get_spell. This is strong precondition guidance that leaves little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whoamiWho am IA
Read-onlyIdempotent
Inspect

Returns the Embers user identity and OAuth scopes the connected client is authorized for.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, which cover the safe, side-effect-free nature. The description adds meaningful behavioral context by specifying that the returned scopes are specifically those the connected client is authorized for, which is not in 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?

A single, well-structured sentence delivers the complete purpose with no filler. Key information is front-loaded, and every word contributes value.

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 parameterless, read-only identity/scope lookup with an output schema and comprehensive annotations, the description is complete. It tells the agent what the tool returns and leaves the detailed return structure 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?

The tool has zero parameters and an empty input schema, so parameter semantics are trivially satisfied. The description does not need to document parameters and correctly focuses on the output.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb ('Returns') and resource ('Embers user identity and OAuth scopes'), making the tool's purpose immediately clear. It also distinguishes this introspection tool from all sibling tools, none of which overlap with identity/scope retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies the use case: checking who the connected client is and which OAuth scopes it has. There are no sibling alternatives for this purpose, and no additional exclusions are needed for such a simple, parameterless introspection tool.

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. 137 tool updates
    • First observedcreate_submission
    • First observedget_submission
    • First observedimagine_create_adventure
    • First observedimagine_create_adventure_page
    • First observedimagine_create_world
    • First observedimagine_create_world_page
    • First observedimagine_delete_adventure
    • First observedimagine_delete_adventure_page
    • First observedimagine_delete_world
    • First observedimagine_delete_world_page
    • First observedimagine_generate_draconic_name
    • First observedimagine_generate_npc
    • First observedimagine_get_adventure
    • First observedimagine_get_adventure_page
    • First observedimagine_get_adventure_pages
    • First observedimagine_get_adventure_recaps
    • First observedimagine_get_world
    • First observedimagine_get_world_page
    • First observedimagine_link_adventure_to_campaign
    • First observedimagine_link_world_to_campaign
    • First observedimagine_list_adventure_pages
    • First observedimagine_list_adventure_parts
    • First observedimagine_list_my_adventures
    • First observedimagine_list_my_worlds
    • First observedimagine_list_world_pages
    • First observedimagine_list_world_pages_by_tags
    • First observedimagine_replace_in_adventure_page
    • First observedimagine_search_world_pages
    • First observedimagine_unlink_adventure_from_campaign
    • First observedimagine_unlink_world_from_campaign
    • First observedimagine_update_adventure
    • First observedimagine_update_adventure_page
    • First observedimagine_update_world
    • First observedimagine_update_world_page
    • First observedlist_my_submissions
    • First observedlist_rulesets
    • First observedplay_accept_friend_request
    • First observedplay_add_campaign_character
    • First observedplay_add_campaign_item
    • First observedplay_add_campaign_leg
    • First observedplay_add_campaign_rule
    • First observedplay_add_campaign_spell
    • First observedplay_cancel_friend_request
    • First observedplay_check_recap_exists
    • First observedplay_consume_pbem_emails
    • First observedplay_create_campaign
    • First observedplay_create_move
    • First observedplay_create_page
    • First observedplay_create_session
    • First observedplay_decline_friend_request
    • First observedplay_delete_campaign
    • First observedplay_delete_character
    • First observedplay_delete_move
    • First observedplay_delete_page
    • First observedplay_delete_session
    • First observedplay_disable_pbem_inbox
    • First observedplay_dismiss_pbem_email
    • First observedplay_enable_pbem_inbox
    • First observedplay_find_friend
    • First observedplay_get_campaign
    • First observedplay_get_character_note
    • First observedplay_get_move
    • First observedplay_get_page
    • First observedplay_get_session
    • First observedplay_invite_campaign_player
    • First observedplay_list_campaign_characters
    • First observedplay_list_campaign_companions
    • First observedplay_list_campaign_items
    • First observedplay_list_campaign_moves
    • First observedplay_list_campaign_players
    • First observedplay_list_campaign_rules
    • First observedplay_list_campaign_sessions
    • First observedplay_list_campaign_spells
    • First observedplay_list_my_campaigns
    • First observedplay_list_my_characters
    • First observedplay_list_my_friends
    • First observedplay_list_my_sessions
    • First observedplay_list_pages
    • First observedplay_list_participated_campaigns
    • First observedplay_list_pbem_inbox
    • First observedplay_list_pending_friends
    • First observedplay_list_session_moves
    • First observedplay_list_user_pages
    • First observedplay_regenerate_pbem_address
    • First observedplay_remove_campaign_item
    • First observedplay_remove_campaign_player
    • First observedplay_remove_campaign_rule
    • First observedplay_remove_campaign_spell
    • First observedplay_remove_friend
    • First observedplay_resolve_pbem_email
    • First observedplay_respond_to_campaign_invite
    • First observedplay_send_friend_request
    • First observedplay_set_campaign_leg_active
    • First observedplay_set_pbem_display_name
    • First observedplay_update_campaign
    • First observedplay_update_character_note
    • First observedplay_update_move
    • First observedplay_update_page
    • First observedplay_update_session
    • First observedreply_to_submission
    • First observedupload_submission_screenshot
    • First observedvault_attach_companion
    • First observedvault_build_monster
    • First observedvault_build_pc
    • First observedvault_clone_character
    • First observedvault_create_character
    • First observedvault_create_item
    • First observedvault_create_rule
    • First observedvault_create_spell
    • First observedvault_delete_character
    • First observedvault_delete_item
    • First observedvault_delete_rule
    • First observedvault_delete_spell
    • First observedvault_detach_companion
    • First observedvault_get_authoring_guide
    • First observedvault_get_character
    • First observedvault_get_item
    • First observedvault_get_levelup_options
    • First observedvault_get_pc_creation_options
    • First observedvault_get_rule
    • First observedvault_get_spell
    • First observedvault_level_up_pc
    • First observedvault_list_linked_characters
    • First observedvault_record_pc_classes
    • First observedvault_search_characters
    • First observedvault_search_items
    • First observedvault_search_monsters
    • First observedvault_search_rules
    • First observedvault_search_spells
    • First observedvault_spawn_linked_character
    • First observedvault_unlink_character
    • First observedvault_update_character
    • First observedvault_update_companion_state
    • First observedvault_update_item
    • First observedvault_update_rule
    • First observedvault_update_spell
    • First observedwhoami

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables running tabletop RPG campaigns as interactive stories with a world model, narrative tools, and role enforcement, integrating rulebooks like D&D 5e and Starfinder.
    2
    28
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Connect to your TTRPG campaign's repository and database. Instead of retrieving prose, its 48 tools (20 read, 28 write) return typed state: 14 entity schemas (NPCs, factions, locations, sessions, lore), relationship and knowledge-graph queries, wiki blocks, and a narrative-state bundle of open threads and canon facts.
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides read-only SRD lookup and deterministic enrichment tools for D&D 5e content generation, including search, entity retrieval, and generation of monsters, spells, items, NPCs, and encounters.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources