Skip to main content
Glama

Server Details

Connect any AI to your Foundry VTT world: actors, combat, dice, journals, tokens, compendiums.

Ownership verified
Status
Healthy
Uptime
96.4% over 21 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.7/5.0

Scored across 121 tools

Disambiguation2/5

Many tools have heavily overlapping purposes, such as dnd5e-item-use vs dnd5e-item-activate, dnd5e-roll-attack/damage, and several compendium search/browse/filter variants. The descriptions try to differentiate them, but the sheer volume and near-duplicates (e.g., roll-perception explicitly duplicating dnd5e-roll-skill) make misselection likely. An agent has to wade through dozens of similar actions to find the right one.

Naming Consistency4/5

Most tools follow a clear verb_noun pattern, often prefixed by system (dnd5e-, pf2e-) or domain (world-, compendium-, roll-table-), which is predictable. Minor deviations exist: 'world-info' lacks a verb, 'game-pause-get' mixes pause as noun and verb, and generic tools like roll-perception/roll-dice break the system-prefix convention. Overall, the naming is largely consistent and readable.

Tool Count1/5

At 121 tools, this is an extreme count that exceeds even the 'too many' threshold of 25 and the 50+ extreme-mismatch calibration. While Foundry VTT is a broad platform, this many tools makes the surface overwhelming and forces an agent to choose from dozens of highly similar operations. A more focused set of 40-60 consolidated tools would be far more usable.

Completeness4/5

The tool surface is unusually comprehensive for the domain: actors, items (world/actor/compendium), journals, chat, combat, scenes, tokens, effects, folders, game state, time, and roll tables all have CRUD or lifecycle coverage. Notable gaps exist, such as no scene create/update/delete, no compendium write operations, and no pf2e world-actor structured filter, but these are workable. The coverage is strong enough that most DM workflows can be accomplished.

Available Tools

123 tools
actor-createInspect

Create an actor from scratch (custom NPCs, characters, creatures). type must fit the game system — dnd5e: character, npc, vehicle, group; pf2e: character, npc, hazard, loot, familiar, party, vehicle, army. A compendium monster: actor-create-from-compendium. system is deep-merged over the defaults.

ParametersJSON Schema
NameRequiredDescriptionDefault
imgNoOptional image path for the actor token/portrait
nameYesName of the actor
typeYesActor type for the world's game system (dnd5e: "character", "npc", "vehicle", "group")
folderNoOptional folder ID to place the actor in
systemNoOptional system-specific data (e.g., D&D 5e attributes, HP, abilities)
actor-create-from-compendiumAInspect

Import an actor (monster, NPC) from a compendium pack into the world. Pass either uuid — the "Compendium...Actor." value returned by dnd5e-compendium-filter-actors, pf2e-compendium-filter-actors and compendium-search — or packId + actorId from compendium-browse.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional custom name for the created actor (uses compendium name if not specified)
uuidNoCompendium UUID "Compendium.<scope>.<pack>.Actor.<id>". Replaces packId + actorId.
folderNoOptional folder ID to place the actor in
packIdNoCompendium pack ID (e.g., "dnd5e.monsters"). Required unless uuid is given.
actorIdNoActor ID within the pack (from compendium-browse). Required unless uuid is given.

TDQS

A3.7/5.0
Behavior2/5

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

Annotations already signal that this is a write operation (readOnlyHint=false) and not idempotent, and the description does not add behavioral context beyond 'Import... into the world.' It does not disclose whether repeated imports create duplicates, whether the imported actor is a copy or a reference, or any permission requirements. With no additional behavioral disclosure, the description does not enrich what annotations already 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 two sentences with no redundant wording. The core purpose is front-loaded, followed immediately by the essential identifier-mode guidance. Every sentence earns its place.

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

Completeness3/5

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

The description thoroughly explains how to specify the compendium source and mentions the optional name and folder parameters are covered by the schema. However, with no output schema, it does not describe the return value or how the agent can confirm success. It also omits any note about duplicate-import behavior. This is adequate for making a valid call but leaves some post-invocation context unclear.

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 covers each parameter, and the description adds relational semantics by explaining the two mutually exclusive identifier modes: uuid (with exact format and source tools) versus packId + actorId (from compendium-browse). This clarifies that packId/actorId are required only when uuid is absent, adding meaning beyond the individual property 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 states a specific verb and resource: 'Import an actor (monster, NPC) from a compendium pack into the world.' This clearly distinguishes it from sibling tools like actor-create by specifying the source (compendium) and the destination (world). The mention of 'monster, NPC' further disambiguates the actor type.

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 clear guidance on how to identify the target: either via uuid from filter/search tools or packId + actorId from compendium-browse. However, it does not explicitly contrast this tool with alternatives like actor-create or explain when to prefer this over creating an actor from scratch. Usage is implied rather than explicitly stated.

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

actor-deleteA
Destructive
Inspect

Delete an actor from the world. This action cannot be undone!

ParametersJSON Schema
NameRequiredDescriptionDefault
actorIdYesThe actor ID to delete

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds the irreversibility warning ('cannot be undone'), which is more specific than the generic destructive flag and provides useful behavioral context. It doesn't discuss cascading effects or permissions, but for a simple delete with annotations present, this is sufficient.

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 sentences with zero redundancy. The core action is stated first, and the irreversibility warning follows immediately. Every word adds value; there is no filler or repetition.

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

Completeness4/5

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

For a single-parameter destructive operation with no output schema, the description covers the essential facts: what it does and its irreversible nature. It could mention what happens if the actorId is invalid or non-existent, but for a simple delete that is a minor gap. The description is adequate 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%, so the schema already fully documents the sole parameter (actorId) with its purpose and type. The description does not add any extra meaning about the parameter, such as format or required semantics beyond what the schema states. Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('delete'), a specific resource ('actor'), and the scope ('from the world'). It clearly distinguishes from siblings like actor-update, actor-create, and actor-get. There is no ambiguity about what the tool does.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention any prerequisites, conditions, or exclusions. While the verb 'delete' implicitly suggests a lifecycle action, the description does not explicitly contrast with actor-update or other actor operations, leaving the agent to infer usage.

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

actor-filter
Read-onlyIdempotent
Inspect

Search WORLD actors with D&D 5e structured filters (dnd5e worlds only). Returns paginated {id, name} entries; call actor-get for full stats. Filters combine with AND, values inside one array with OR. Asks like "undead with CR 1-5", "dragons with AC 18+", "NPCs in folder Chapter 7". Unfiltered: actor-list; compendiums: dnd5e-compendium-filter-actors.

CRITICAL DATA FORMATS

  • CR is a NUMBER from the exact set 0, 0.125, 0.25, 0.5, 1..30 ("1/4" -> 0.25; 0.7 is rejected).

  • Sizes are SHORT codes: tiny, sm, med, lg, huge, grg ("small" is rejected).

  • creatureType: the 14 lowercase SRD types only; subtypes ("demon") are rejected, use the base type ("fiend").

  • Ranges are {min?, max?}, inclusive; min = max for an exact match. Actors lacking a filtered field are silently excluded (PCs have no CR, vehicles no abilities, root-level actors no folder).

  • Pagination: limit 1..200 (default 50), offset; the response has total and hasMore.

EXAMPLES { "creatureType": ["undead"], "cr": { "min": 0.25, "max": 2 }, "folder": { "name": "Chapter 3", "recursive": true } }

ParametersJSON Schema
NameRequiredDescriptionDefault
acNoArmor Class range.
crNoChallenge Rating range (numbers from the valid CR set). NPCs only.
nameNoSubstring of actor name, case-insensitive.
sizeNoSize short codes (OR).
typeNoActor types (OR).
levelNoCharacter level range. PCs only.
limitNoPage size, default 50, max 200.
maxHpNoMax HP range.
folderNoFolder by id or name; recursive includes subfolders.
offsetNoSkip first N results.
abilitiesNoPer-ability score ranges.
currentHpNoCurrent HP range ("find wounded actors").
dispositionNoPrototype token disposition (OR).
creatureTypeNoSRD creature types (OR), NPCs only. No subtypes: "demon" -> "fiend".
hasPlayerOwnerNotrue = actor has at least one player owner (typically PCs).
actor-getA
Read-onlyIdempotent
Inspect

Get full actor details: HP, AC, abilities, skills, speed, proficiency, inventory with item IDs. Use actor-list or actor-filter FIRST to find actorId. Item IDs from here are needed for dnd5e-roll-attack, dnd5e-roll-damage, dnd5e-item-use. The statblock layout follows the dnd5e data model; in other systems sections such as skills or currency stay empty — use uuid-resolve with "Actor." for the raw document.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorIdYesActor ID (from actor-list or actor-filter)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already carry readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: cross-system behavior (non-dnd5e sections such as skills or currency stay empty) and the fallback to uuid-resolve for the raw document. 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?

Four dense sentences with zero filler: purpose is front-loaded with the content list, followed by prerequisite sequencing, downstream consumers, and the cross-system caveat. 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 tool with rich safety annotations and no output schema, the description fully covers output contents, ID prerequisites, downstream tool dependencies, and system-specific behavior. 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.

Parameters3/5

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

Schema coverage is 100% — actorId is already documented as 'Actor ID (from actor-list or actor-filter)'. The description reinforces where the ID comes from and its downstream use, but adds no format, syntax, or example detail beyond the schema. Baseline 3 for high schema coverage 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 and resource ('Get full actor details') and enumerates the content (HP, AC, abilities, skills, speed, proficiency, inventory with item IDs). This clearly distinguishes it from siblings actor-list and actor-filter, which are the ID-finding tools referenced in the same sentence.

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 sequencing ('Use actor-list or actor-filter FIRST to find actorId'), names downstream consumers of the item IDs (dnd5e-roll-attack, dnd5e-roll-damage, dnd5e-item-use), and points to uuid-resolve as the alternative for raw document access. Lacks an explicit 'do not use when X' exclusion, but the routing guidance is strong.

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

actor-listA
Read-onlyIdempotent
Inspect

List actors in the world (name, type, ID), at most 200 rows. For anything beyond a plain listing — by name, CR, creature type, size, folder, HP, AC — use actor-filter, which also paginates. Actor IDs are needed for rolls, combat, items, and effects.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter by type: "character", "npc", "vehicle", or system-specific types

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds valuable behavioral context beyond that: the row limit ('at most 200 rows') and the scope ('in the world'). It also implies the limitation that only name, type, and ID are returned, which is useful for downstream 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 two sentences, each earning its place. The first sentence front-loads the core purpose and row limit. The second sentence gives usage guidance and a practical note about actor IDs. 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 simple listing tool with one optional parameter and no output schema, the description covers all essential aspects: what it returns, the row limit, the alternative tool, and why the results matter (actor IDs for rolls, combat, items, effects). Nothing an agent needs to invoke it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100% for the single optional 'type' parameter, so the schema already explains its meaning and allowed values. The description does not add any parameter-specific detail, but it doesn't need to since the schema fully documents it. The baseline of 3 applies: the description neither enhances nor detracts from parameter understanding.

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

Purpose5/5

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

The description states a specific verb ('List'), a clear resource ('actors in the world'), and the returned fields (name, type, ID). It also explicitly differentiates itself from actor-filter by naming exactly what actor-filter handles ('by name, CR, creature type, size, folder, HP, AC'). This is a precise, unambiguous purpose statement.

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

Usage Guidelines5/5

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

The description gives explicit guidance: 'For anything beyond a plain listing — by name, CR, creature type, size, folder, HP, AC — use actor-filter, which also paginates.' This names the alternative and the exact conditions for selecting it, leaving no ambiguity about when to use this tool versus its sibling.

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

actor-updateInspect

Update an actor's name, image, folder, or system data (HP, XP, abilities...), or ONE token's actor via tokenId. system is DEEP-MERGED: pass only the paths you change, e.g. {"attributes": {"hp": {"value": 25}}} sets current HP and leaves the rest intact; arrays are replaced whole. Common dnd5e paths: attributes.hp.value, details.xp.value. For HP after damage prefer dnd5e-apply-damage (resistances, temp HP).

ParametersJSON Schema
NameRequiredDescriptionDefault
imgNoNew image path for the actor
nameNoNew name for the actor
folderNoNew folder ID to move the actor to
systemNoSystem-specific data to update (e.g., {"attributes": {"hp": {"value": 25}}} to set HP to 25)
actorIdNoActor ID (from actor-list/actor-filter)
sceneIdNoScene of tokenId (default: active)
tokenIdNoToken ID (from token-list) instead of actorId: that token's own actor (module 8.14+)
canvas-pan
Idempotent
Inspect

Pan and/or zoom the canvas (canvas.animatePan) for everyone's view, in scene pixels, not grid squares. All fields optional: omit x/y to keep the centre, scale to keep the zoom. canvas-ping draws attention to a spot instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoScene-pixel X to centre on. Omit to keep current.
yNoScene-pixel Y to centre on. Omit to keep current.
scaleNoZoom level (1 = 100%). Omit to keep current.
durationNoAnimation duration in ms.
canvas-pingAInspect

Drop a ping marker on the canvas at scene-pixel coordinates (canvas.ping), visible to all clients. Use to draw players' attention to a spot. x and y are REQUIRED (scene pixels, not grid squares).

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesScene-pixel X.
yYesScene-pixel Y.
colorNoCSS colour string for the ping (e.g. "#ff0000").
styleNoPing animation: pulse (default), arrow, alert, chevron.
durationNoDuration in ms.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=false, so the description doesn't need to justify the write nature. The description adds valuable context beyond annotations: the ping is visible to all clients (broadcast behavior) and stresses that x/y are scene-pixel coordinates, not grid squares. This clarifies important behavioral expectations that annotations do not cover. 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 three concise sentences with zero filler. The core purpose is front-loaded, then usage context, then a crucial parameter requirement. Each sentence 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.

Completeness4/5

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

The description is adequate for a tool with 5 parameters (2 required) and no output schema. All parameters are documented in the schema, and the description adds the coordinate-system clarification and the broadcast visibility. It does not explain default values for style/duration, but those are derivable from the schema descriptions. The absence of output schema means no need to describe return values. Overall, an agent has enough 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 description coverage is 100%, so the baseline is 3. The description adds crucial clarification that x and y are REQUIRED and are in scene pixels (not grid squares), which directly impacts how an agent constructs valid calls. It also reiterates the purpose of these parameters. This added value justifies a 4 rather than a baseline 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 states a specific verb ('drop'), a specific resource ('ping marker'), and the coordinate system (scene-pixel). It also names the effect ('visible to all clients') and the intended use ('draw players' attention to a spot'), clearly distinguishing it from sibling tools like canvas-pan (which moves the view) and ui-notify (which sends notifications).

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 states when to use this tool ('Use to draw players' attention to a spot'), giving clear context. It does not explicitly name alternatives or exclude other tools, but the purpose is specific enough that an agent could infer the appropriate scenario. The absence of an explicit 'instead of X' is a minor gap.

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

chat-clearA
Destructive
Inspect

Delete ALL chat messages. This action is IRREVERSIBLE. Use ONLY when the user explicitly asks to clear the entire chat log.

ParametersJSON Schema
NameRequiredDescriptionDefault

No 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 the description reinforces this with 'IRREVERSIBLE.' It also specifies what gets destroyed ('ALL chat messages'), adding useful context beyond the annotation. 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 short sentences, each carrying essential information: the action, its irreversibility, and the strict usage condition. 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 zero-parameter destructive tool, the description covers the scope, the risk, and the only acceptable trigger condition. It is complete enough for an agent to invoke this tool safely and avoid misuse.

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

Parameters4/5

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

The tool has zero parameters, so the baseline is 4. The description does not need to elaborate on parameters, and the schema confirms 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: 'Delete ALL chat messages.' The use of 'ALL' and 'entire chat log' clearly distinguishes this from the sibling chat-delete tool, which presumably targets individual messages. The scope 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 description explicitly states when to use the tool: 'Use ONLY when the user explicitly asks to clear the entire chat log.' This is a clear condition with an implicit exclusion, though it does not name chat-delete as the alternative for deleting individual messages.

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

chat-deleteA
Destructive
Inspect

Delete a specific chat message by ID. Use to remove erroneous messages or clean up chat. Use chat-list FIRST to find the message ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageIdYesID of the message to delete. Get from chat-list.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the destructive nature is known. The description adds minimal extra context—it only says 'Delete a specific chat message', which doesn't go beyond the annotations. It could have mentioned permanence or that only that message is affected, but those are already implicit. Thus it adds little beyond what structured data provides.

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 efficient: three short sentences that front-load the action, then give usage context and the prerequisite. Every sentence earns its place with no fluff, 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 single-parameter tool with annotations covering destructiveness and no output schema, the description covers the action, usage context, and how to obtain the ID. It does not discuss error handling or return values, but those are not critical given the tool's simplicity and absence of an output schema. Overall, it is complete enough for correct invocation.

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

Parameters3/5

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

The schema already describes the messageId parameter and says to get it from chat-list. The description repeats this instruction, adding no new semantic meaning beyond what the schema provides. Since schema coverage is 100%, the baseline of 3 applies, and the description does not significantly enhance parameter understanding.

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

Purpose5/5

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

The description clearly states the action (delete), the resource (chat message), and the specificity (by ID). It also conveys the use case (remove erroneous messages, clean up chat), which distinguishes it from siblings like chat-clear or chat-update 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 Guidelines4/5

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

It provides clear context for when to use the tool ('remove erroneous messages or clean up chat') and gives a prerequisite ('Use chat-list FIRST to find the message ID'). However, it does not explicitly state when not to use it (e.g., for bulk deletion use chat-clear), so exclusions are only implied.

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

chat-exportA
Read-onlyIdempotent
Inspect

Export the full chat log as text or JSON. Use for session summaries, recapping what happened, or saving chat history. Text format: "[Speaker] Content" per line. JSON format: array of message objects with id, timestamp, author, speaker, content, flavor, isRoll.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoExport format. "text" (default) = readable log, "json" = structured data.

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 clear. The description adds meaningful behavioral detail by specifying the exact output structure for both text and JSON formats, which goes beyond the schema. 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 two sentences with no filler. The purpose and use cases are front-loaded, followed by concise format examples. Every sentence adds useful information 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?

For a simple read-only export tool with one parameter and no output schema, the description fully covers what it does, when to use it, and what the output looks like. Nothing an agent needs to correctly invoke it 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 single parameter 'format' is already fully described in the schema (enum with 'text' default and 'json' for structured data), so schema coverage is 100%. The description adds extra value by detailing what each format contains (e.g., '[Speaker] Content' lines and message object fields like id, timestamp, author, etc.), which is not in the schema.

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

Purpose5/5

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

States a specific verb (export) and resource (full chat log), and specifies the two output formats (text/JSON). It clearly separates itself from siblings like chat-list and chat-get by emphasizing 'full chat log' and 'export' rather than listing or retrieving individual messages.

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 use cases ('session summaries, recapping what happened, saving chat history') which helps an agent decide when to invoke it. However, it does not name alternative tools or state when not to use it, leaving some inference required given the many chat-related siblings.

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

chat-list
Read-onlyIdempotent
Inspect

Read recent chat messages (plain text, HTML stripped) in chronological order: what players discuss, roll results, combat narration. since = a message ID to poll for newer messages. Filters: authorId, actorId, type (ic/ooc/emote/roll), search text.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter by message type: "ic" = in-character, "ooc" = out-of-character, "emote" = action, "roll" = dice roll.
limitNoNumber of messages to return. Default: 20, max: 100.
sinceNoReturn messages AFTER this message ID. Use for polling new messages.
beforeNoReturn messages BEFORE this message ID. Use for scrolling back.
searchNoCase-insensitive text search across message content.
actorIdNoFilter by actor ID (speaker.actor). Use to see what a specific character said.
authorIdNoFilter by Foundry user ID of the message author.
includeRollsNoInclude roll data (formula + total) in results. Default: false.
chat-sendInspect

Send a message to the Foundry chat log: narration, NPC dialogue, combat descriptions, out-of-character talk — players watching Foundry only see what is posted here. HTML is supported. actorId speaks as an NPC (portrait); flavor is a subtitle ("Narration", "The Tavern"). Document links: @UUID[Actor.actorId]{Name}, @UUID[Item.itemId]{Sword}, @UUID[JournalEntry.journalId]{Quest}.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoMessage style: "ic" = in character (NPC speech), "ooc" = out of character (meta), "emote" = action description.
flavorNoSubheading above the message. E.g. "Narration", "The Rusty Dragon Inn", "Combat".
actorIdNoActor ID to speak as — shows their portrait and uses their name. Use for NPC dialogue.
contentYesMessage content. Supports HTML: <p>, <strong>, <em>, <blockquote>, <ul>, <li>. Use @UUID[DocumentType.id]{Label} for clickable document links. Must not be empty.
speakerNoDisplay name of the sender. Defaults to "Gamemaster". Overridden by actorId if both provided.
whisperToNoUser IDs to whisper to. Message visible only to these users and GM.
chat-updateAInspect

Edit content or flavor of an existing chat message. Use to fix typos in DM narration or update descriptions. Use chat-list FIRST to find the message ID. At least one of content or flavor must be provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
flavorNoNew flavor text (subheading above message).
contentNoNew message content (HTML). Replaces existing content.
messageIdYesID of the message to update. Get from chat-list.

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, indicating a mutating, non-idempotent operation. The description's 'Edit' aligns with this but adds no new behavioral detail beyond the prerequisite of chat-list. It doesn't clarify what happens when both content and flavor are provided (likely both are updated), but that's not a major gap given the schema covers the parameters.

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 (two sentences) and front-loaded with the purpose. Every sentence earns its place: it states the action, gives concrete use cases, provides a necessary prerequisite, and states a key constraint. No fluff or redundancy.

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

Completeness4/5

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

For a simple update tool with three parameters (one required) and no output schema, the description covers the essentials: what it does, how to obtain the required ID, and a usage constraint. It doesn't mention the return value or error behavior, but these are not critical for a basic mutation. It could clarify that both fields can be updated simultaneously, but that's a minor omission.

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 all three parameters are documented. The description adds value by specifying that at least one of content or flavor must be provided—a constraint not enforced by the schema (only messageId is required). It also points to chat-list as the source for messageId, which is useful. This exceeds the baseline 3 for full coverage.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Edit content or flavor of an existing chat message.' It distinguishes from siblings like chat-send (creating new messages) and chat-delete (removing), and even gives specific use cases ('fix typos in DM narration or update descriptions'), making it easy for an agent to know when this tool applies.

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 a clear prerequisite: 'Use chat-list FIRST to find the message ID.' It also states a necessary constraint: 'At least one of content or flavor must be provided.' However, it does not explicitly mention when NOT to use it (e.g., for new messages use chat-send), though this is implied by the sibling names and context.

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

combat-add-combatantAInspect

Add actor to combat. Use actor-list or actor-filter FIRST to find actorId. After adding all combatants, use combat-roll-all-initiative before combat-start.

ParametersJSON Schema
NameRequiredDescriptionDefault
hiddenNoHide from players (for surprise/ambush)
actorIdYesActor ID to add (use actor-list to find)
tokenIdNoSpecific token ID if actor has multiple tokens
combatIdNoCombat ID (uses active combat if omitted)
initiativeNoPre-set initiative value (otherwise roll later)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only indicate this is a non-read-only, non-destructive call. The description adds behavioral context by revealing that the tool does not automatically roll initiative or start combat, and that actorId must be resolved beforehand. It does not address edge cases like duplicate actors, but the key sequencing behavior is disclosed.

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 convey both the operation and the full prerequisite/follow-up workflow. There is no filler 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?

For a simple mutation tool with full schema coverage and an explicit workflow, the description is largely complete. It omits return-value details, but no output schema exists and the core invocation path is fully specified.

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 beyond the schema by directing the agent to use actor-list or actor-filter FIRST to obtain the required actorId, which directly supports 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 'Add actor to combat', a concrete verb-resource pair that clearly distinguishes it from sibling tools like combat-remove-combatant or combat-set-initiative. The operation 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 description gives an explicit workflow: use actor-list or actor-filter FIRST to find actorId, then add combatants, then call combat-roll-all-initiative before combat-start. It does not list explicit 'when not to use' conditions, but the sequential context is clear and actionable.

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

combat-createAInspect

Create new combat encounter. First step in combat workflow. After creating: use combat-add-combatant to add actors, then combat-roll-all-initiative, then combat-start.

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneIdNoScene ID (uses active scene if omitted)
activateNoActivate combat immediately (default: true)

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the description doesn't need to repeat those. It adds the workflow context but does not disclose any additional behavioral traits, such as what happens if a combat already exists or how the 'activate' parameter affects the result. The description is consistent with annotations but adds minimal behavioral detail beyond creation.

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: the first states the core action, the second provides the workflow context. It is front-loaded with the purpose and wastes no words. Every sentence earns its place, making it efficient and easy to scan.

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 create tool with two optional parameters and no output schema, the description covers the essential usage context through the workflow sequence. It doesn't explain edge cases like what happens if a combat already exists, but that is a minor gap given the tool's simplicity and the schema's parameter documentation. Overall, the agent has enough 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?

The input schema provides 100% coverage for both parameters (sceneId and activate) with clear descriptions. The description does not add any extra meaning to the parameters, nor does it need to given the schema's thoroughness. Baseline of 3 is appropriate because the schema carries the semantic load.

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 'Create new combat encounter' – a specific verb and resource. It also positions itself as the 'First step in combat workflow', which distinguishes it from sibling tools like combat-add-combatant or combat-start. The purpose is unambiguous and well-scoped.

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 provides the workflow sequence: 'After creating: use combat-add-combatant to add actors, then combat-roll-all-initiative, then combat-start.' This tells the agent exactly when to use this tool and what to do next, leaving no ambiguity about its role in the combat lifecycle.

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

combat-deleteA
Destructive
Inspect

Delete combat encounter immediately without confirmation. Use when combat is over or cancelled.

ParametersJSON Schema
NameRequiredDescriptionDefault
combatIdNoCombat ID (uses active combat if omitted)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, so the destructive nature is known. The description adds the key behavioral detail 'without confirmation', which is not in the annotations. This informs the agent that no user confirmation step will occur, which is valuable beyond the structured hints. 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 no filler. The primary action is front-loaded, followed by the usage condition. Every word earns its place, and the description is easily scannable for an agent.

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 destructive action with one optional parameter and no output schema, the description covers the purpose, the usage context, and the behavioral nuance (no confirmation). Nothing essential is missing for an agent to correctly invoke this tool.

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 description for combatId states 'Combat ID (uses active combat if omitted)', covering the parameter's meaning and optionality. The tool description does not add any additional parameter guidance, so with 100% schema coverage, the baseline score of 3 applies. The parameter is adequately documented in the schema itself.

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

Purpose5/5

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

The description states the verb 'Delete', the resource 'combat encounter', and adds 'immediately without confirmation' for precision. It clearly distinguishes from other combat tools like combat-create or combat-get, and its specificity leaves no ambiguity about what the tool does.

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

Usage Guidelines4/5

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

The description provides an explicit condition: 'Use when combat is over or cancelled.' This tells the agent when to invoke the tool, though it doesn't mention explicit alternatives or when not to use it. Given the sibling set includes many combat tools, the guidance is adequate but not exhaustive.

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

combat-getA
Read-onlyIdempotent
Inspect

Get combat state: combatants, round, turn, whose turn it is. Call FIRST to check if combat exists before other combat operations. Returns combatant IDs needed for combat-roll-initiative, combat-set-combatant-defeated, etc. combatId selects a specific encounter; omit it for the active combat.

ParametersJSON Schema
NameRequiredDescriptionDefault
combatIdNoCombat ID (uses active combat if omitted)

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, destructiveHint=false, idempotentHint=true, so the description doesn't need to repeat those. It adds behavioral context about the return value (combatant IDs needed for other operations) and the sequencing instruction. It doesn't specify behavior when no combat exists, but the 'check if combat exists' phrasing adequately implies that case.

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 purpose, then usage guidance and parameter clarification. No wasted words; each 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 simple getter with one optional parameter and no output schema, the description covers the return contents and how to use it in a workflow. It's sufficient for an agent to call correctly, especially given the strong annotation coverage.

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

Parameters3/5

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

The schema already documents combatId with a description 'Combat ID (uses active combat if omitted)'. The tool description adds a slightly richer phrasing 'selects a specific encounter; omit it for the active combat' but essentially repeats the schema. Since schema coverage is 100%, 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 clearly states the tool retrieves combat state including combatants, round, turn, and whose turn it is. It distinguishes itself from sibling combat tools by being the getter and explicitly positions it as the first call before other combat operations.

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 call first to check if combat exists before other operations, and explains how to select a specific encounter via combatId or use active combat by omitting it. This is clear when-to-use guidance that differentiates from alternatives.

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

combat-next-turnAInspect

Advance to next combatant's turn. Auto-advances round when all have acted. includeContext (default true) appends the tactical context: current combatant position, nearby enemies with distances and line of sight, ASCII map; set false on routine turns to save context.

ParametersJSON Schema
NameRequiredDescriptionDefault
combatIdNoCombat ID (uses active combat if omitted)
includeContextNoAppend tactical context (default true).

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses key behaviors beyond annotations: auto-advancing rounds and the optional tactical context (position, enemies, distances, line of sight, ASCII map). Annotations indicate this is not read-only, which is consistent. The description adds meaningful state-change details that an agent needs to set expectations.

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

Conciseness5/5

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

Two sentences, front-loaded with the main action, then key behavioral notes. Every word earns its place; no fluff or repetition.

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

Completeness4/5

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

For a simple two-optional-param tool, the description covers the primary action, round advancement, and context options. It does not elaborate on edge cases (e.g., invalid combatId, combat already ended), but those are likely handled by the system and not critical for an agent to decide to call the tool. The description is sufficient for a competent agent to invoke correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. However, the description adds significant value for includeContext by detailing exactly what the tactical context includes and when it is advisable to turn it off. For combatId, it relies on the schema's 'uses active combat if omitted', which is already clear. Overall, the description enriches parameter understanding.

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

Purpose5/5

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

The description states a specific verb ('advance') and resource ('next combatant's turn'), and explicitly mentions auto-advancing rounds. This clearly distinguishes it from sibling tools like combat-previous-turn (previous turn) and combat-set-turn (explicit turn selection). No ambiguity remains about what the tool does.

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

Usage Guidelines4/5

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

The description gives clear context about the tool's behavior (auto-advance round) and provides guidance on when to set includeContext false ('routine turns to save context'). It does not explicitly name alternatives or exclusions, but the context is sufficient for an agent to infer when to use this tool versus others in the combat family. Lacks explicit 'when not to use' but is clear enough.

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

combat-previous-turnAInspect

Go back to previous combatant's turn. Use to undo an accidental combat-next-turn.

ParametersJSON Schema
NameRequiredDescriptionDefault
combatIdNoCombat ID (uses active combat if omitted)

TDQS

A4/5.0
Behavior3/5

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

Annotations already convey that this is a non-read-only, non-idempotent mutation that isn't destructive. The description adds the precise effect (moving to the previous combatant), but doesn't disclose edge behavior such as what happens when already at the first combatant or whether it wraps around. 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 short sentences with zero wasted words. The core action is front-loaded, and the use-case clarification follows immediately, making it easy 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 one-parameter tool whose schema and annotations already cover the safety profile and the optional combatId, the description is nearly complete. It explains what the tool does and when to use it; only niche edge behavior (e.g., starting position) is omitted, which is unlikely to affect 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?

There is only one optional parameter, combatId, and the schema description covers it 100% ('Combat ID (uses active combat if omitted)'). The tool description does not add parameter-level detail, but with full schema coverage and a clearly named parameter, no additional explanation is necessary.

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 uses a specific verb and resource: 'Go back to previous combatant's turn', immediately followed by the intended use case 'undo an accidental combat-next-turn'. This clearly differentiates it from combat-next-turn and from more generic combat-set-turn, so an agent can distinguish it without opening the schema.

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

Usage Guidelines4/5

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

The description explicitly names the situation where it should be used: after an accidental combat-next-turn. It does not mention alternatives such as combat-set-turn for jumping multiple turns, but the primary use case is clearly scoped, which is sufficient for a simple tool.

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

combat-remove-combatantAInspect

Remove combatant from combat. Use combat-get to find combatantId (not same as actorId). Use when creature flees or is removed from encounter.

ParametersJSON Schema
NameRequiredDescriptionDefault
combatIdNoCombat ID (uses active combat if omitted)
combatantIdYesCombatant ID (from combat-get, NOT actorId)

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the description doesn't need to restate those. The description adds useful context about the combatantId being distinct from actorId, but doesn't disclose what happens to the combatant's token, whether the combatant is permanently deleted or just removed from the current combat, or whether the combat must be active. With annotations covering the basic safety profile, a 3 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?

Three short sentences with zero waste. The core action is front-loaded, the critical identifier warning is second, and the usage condition is third. 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?

For a simple two-parameter removal tool with full schema coverage and annotations, the description is nearly complete. It covers the action, the key parameter source, and the usage scenario. The only minor gap is not describing what happens after removal (e.g., is the combatant deleted or just removed from the encounter?), but this is a small omission for a straightforward tool.

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 both parameters. The description reinforces that combatantId comes from combat-get and is NOT actorId, which adds practical meaning beyond the schema. However, it doesn't add detail about combatId's 'active combat if omitted' behavior 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 states a specific verb and resource ('Remove combatant from combat') and immediately distinguishes the key identifier from a common confusion ('not same as actorId'). It clearly differentiates from sibling tools like combat-set-combatant-defeated and combat-toggle-combatant-visibility by focusing on removal from the encounter.

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 ('when creature flees or is removed from encounter') and tells the agent to use combat-get to find the correct combatantId. This provides clear context and a direct alternative/helper tool reference.

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

combat-roll-all-initiativeAInspect

Roll initiative for all combatants at once. Call AFTER combat-add-combatant, BEFORE combat-start. Use npcsOnly=true to let players roll their own.

ParametersJSON Schema
NameRequiredDescriptionDefault
formulaNoCustom formula for all (uses each character's default if omitted)
combatIdNoCombat ID (uses active combat if omitted)
npcsOnlyNoOnly roll for NPCs, skip player characters

TDQS

A4.2/5.0
Behavior3/5

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

Annotations indicate readOnlyHint=false, destructiveHint=false, and idempotentHint=false. The description confirms it's a mutation (rolling initiative) but doesn't elaborate on side effects like overwriting existing initiative values or setting turn order. Since annotations are minimal, the description carries some burden but only partially fulfills 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, zero wasted words. The primary purpose is front-loaded, followed by ordering guidance and a flag hint. 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 essential usage: what it does, when to call it, and the key flag. It doesn't describe the return value, but no output schema exists and the tool is simple enough that this isn't critical. The schema handles parameter details like combatId defaulting. Adequate for the tool's complexity.

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 all three parameters. The description adds value by explaining the npcsOnly flag's rationale ('to let players roll their own'), which goes slightly beyond the schema's 'Only roll for NPCs, skip player characters'. This practical context justifies 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 clearly states a specific verb and resource: 'Roll initiative for all combatants at once.' It distinguishes itself from the sibling combat-roll-initiative (singular) by emphasizing 'all at once', making the tool's 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?

It provides explicit ordering context ('Call AFTER combat-add-combatant, BEFORE combat-start') and explains the npcsOnly flag's purpose. While it doesn't explicitly mention the singular combat-roll-initiative as an alternative, the 'all at once' phrasing and naming make the distinction clear. Slight deduction for not naming the alternative directly.

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

combat-roll-initiativeAInspect

Roll initiative for specific combatants. Use combat-get to find combatantIds. For rolling all at once, use combat-roll-all-initiative instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
formulaNoCustom formula like "1d20+5" (uses character's default if omitted)
combatIdNoCombat ID (uses active combat if omitted)
combatantIdsYesCombatant IDs to roll for (from combat-get)

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already convey that this is a non-read-only, non-idempotent operation, so the description does not need to restate the safety profile. However, it adds no behavioral context beyond the act of rolling—such as whether existing initiative values are overwritten or whether the roll affects combat state. The lack of contradiction keeps it at an adequate 3.

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

Conciseness5/5

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

Two purposeful sentences: the core purpose is front-loaded, the ID lookup hint is included, and the sibling alternative is stated without extra detail. No word is wasted.

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?

Everything needed to select and invoke the tool correctly is present: the target combatant IDs, how to obtain them, a sibling disambiguation, and optional parameters are covered by the schema. The only minor gap is that no return/result behavior is described, but the tool is simple and the invocation path is complete.

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

Parameters3/5

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

Schema coverage is 100%, and the schema already documents combatantIds from combat-get, optional formula syntax, and default active combat. The description's mention of combat-get adds no meaning beyond what the parameter schema already states, 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 and object—'Roll initiative for specific combatants'—and immediately distinguishes it from the sibling combat-roll-all-initiative. An agent can tell exactly what resource and scope this tool 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?

It gives a concrete prerequisite ('Use combat-get to find combatantIds') and an explicit alternative for the when-not-to-use case ('For rolling all at once, use combat-roll-all-initiative instead'). This leaves no ambiguity about which situation selects this tool.

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

combat-set-combatant-defeatedA
Idempotent
Inspect

Mark combatant as defeated (shows skull icon, skips their turn). Use when creature reaches 0 HP or is otherwise eliminated.

ParametersJSON Schema
NameRequiredDescriptionDefault
combatIdNoCombat ID (uses active combat if omitted)
defeatedYestrue = defeated, false = not defeated
combatantIdYesCombatant ID (from combat-get)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true and destructiveHint=false; the description adds useful behavioral context by mentioning the skull icon and that defeated combatants skip their turn. 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 the main action first and a when-to-use clause second. 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 simple boolean setter with full schema coverage and idempotency annotation, the description plus schema fully covers what the tool does, when to use it, and how the optional combatId behaves. An output schema is not essential for this mutation.

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 descriptions for combatantId, defeated, and optional combatId including the active-combat fallback. The description does not add parameter-specific meaning beyond the schema, 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?

States a specific verb ('Mark') and resource ('combatant') and adds observable outcomes (skull icon, skipped turn), making it distinct from sibling combat-set-initiative, combat-set-turn, and combat-toggle-combatant-visibility.

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 gives a trigger condition: 'Use when creature reaches 0 HP or is otherwise eliminated.' It doesn't name alternatives or exclusions, but the context is clear enough for selecting among combat siblings.

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

combat-set-initiativeA
Idempotent
Inspect

Manually set initiative value. Use for readied actions, special circumstances, or fixing rolls.

ParametersJSON Schema
NameRequiredDescriptionDefault
combatIdNoCombat ID (uses active combat if omitted)
initiativeYesInitiative value to set
combatantIdYesCombatant ID (from combat-get)

TDQS

A4/5.0
Behavior3/5

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

Annotations already convey readOnlyHint=false and destructiveHint=false. The description consistently implies a write operation but adds no behavioral detail beyond purpose — it doesn't mention overwriting behavior, permissions, or side effects. It doesn't contradict the annotations, but also doesn't significantly enrich behavioral understanding beyond what structured data provides.

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 action is front-loaded, and the use-case sentence earns its place by guiding selection. Every word is purposeful.

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 setter with full schema coverage and no output schema, the description plus annotations cover the essential information. It could briefly mention that setting overwrites the existing value, but that is strongly implied by 'set' and the idempotentHint. Minor gap, but overall complete enough.

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 each parameter is already documented. The description mentions 'initiative value' but adds no parameter-level detail (e.g., range, format) or relationships between parameters. Baseline 3 applies because the schema carries the full 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?

Description clearly states 'Manually set initiative value' and differentiates from the rolling siblings by naming specific scenarios ('readied actions, special circumstances, or fixing rolls'). The verb-resource pair is specific and the tool's role among combat tools 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 description gives explicit context for when to use the tool ('Use for readied actions, special circumstances, or fixing rolls'), which implies the alternative is rolling initiative. However, it does not explicitly name the alternative tools (e.g., combat-roll-initiative) or provide 'when not to use' exclusions.

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

combat-set-turn
Idempotent
Inspect

Jump to a specific combatant's turn without cycling the intermediate turns or incrementing the round — unlike repeated combat-next-turn, no round-based effects fire (Rage expiry, concentration, durations). Combatant IDs from combat-get; includeContext (default true) appends the tactical context.

ParametersJSON Schema
NameRequiredDescriptionDefault
combatIdNoCombat ID (uses active combat if omitted)
combatantIdYesCombatant ID to set as current turn (from combat-get)
includeContextNoAppend tactical context (default true).
combat-startAInspect

Begin combat (round 1, turn 0). Call AFTER adding combatants and rolling initiative. Returns the combat state; includeContext (default true) appends the tactical context: current combatant position, nearby enemies with distances and line of sight, ASCII map.

ParametersJSON Schema
NameRequiredDescriptionDefault
combatIdNoCombat ID (uses active combat if omitted)
includeContextNoAppend tactical context (default true).

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 not read-only and not destructive. The description adds behavioral detail by stating it sets round 1, turn 0, returns the combat state, and that includeContext appends tactical context (combatant position, nearby enemies, line of sight, ASCII map). This goes beyond the schema and gives agents a clear picture of the tool's 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, front-loaded with the core action and prerequisites, and every clause adds useful information. 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.

Completeness4/5

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

The description covers the essential usage prerequisite, the initial state, and return behavior. With no output schema, the note about returning combat state and tactical context is valuable. A minor gap is that it doesn't mention what happens if combatId is omitted and no active combat exists, but the schema already covers the fallback behavior.

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 elaborating on includeContext: it explains the default (true) and exactly what tactical context is appended. It also reinforces that combatId can be omitted to use the active combat, matching the schema's 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: 'Begin combat (round 1, turn 0).' It clarifies the initial state and the ordering prerequisite ('Call AFTER adding combatants and rolling initiative'), which clearly distinguishes this from sibling tools like combat-create, combat-add-combatant, and combat-roll-all-initiative.

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?

Explicit sequencing is provided: 'Call AFTER adding combatants and rolling initiative.' This gives a clear condition for when to use the tool. It does not name specific alternatives or explain when not to use it, but the prerequisite is strong context.

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

combat-toggle-combatant-visibilityAInspect

Set or toggle a combatant's visibility to players (hidden enemies, invisible creatures, surprise). Pass hidden to set the state explicitly; omit it to flip the current state.

ParametersJSON Schema
NameRequiredDescriptionDefault
hiddenNotrue = hide from players, false = reveal. Omit to toggle.
combatIdNoCombat ID (uses active combat if omitted)
combatantIdYesCombatant ID (from combat-get)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate this is not read-only and not idempotent, and the description adds useful behavioral nuance: passing hidden sets the state explicitly, while omitting it flips the current state. This clarifies the non-idempotent toggle behavior beyond the bare annotation flags.

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 front-loaded sentences convey the action, purpose, and the critical set-vs-toggle distinction with no wasted words. 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?

For a simple three-parameter tool with no output schema, the description plus schema covers the required combatantId, optional hidden semantics, and combatId fallback described in the schema. It could add a note about the return value, but 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%, so all three parameters are already documented in the schema. The description restates the hidden/toggle behavior rather than adding new parameter-level meaning, which matches the baseline for complete 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 the specific verb pair 'Set or toggle' with the clear resource 'a combatant's visibility to players', then grounds it with concrete use cases (hidden enemies, invisible creatures, surprise). No sibling tool covers this visibility behavior, so it is readily distinguishable from the combat sibling set.

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 context: use this to hide or reveal combatants to players, with examples of when that matters. It does not name explicit alternatives or exclusions, but there is no closely competing sibling tool for this action, so the context is sufficient.

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

compendium-browse
Read-onlyIdempotent
Inspect

Browse the contents of a compendium pack (monsters, items, spells…); compendium-list gives the packId. types selects subtypes (["spell"]); ids BATCH-fetches specific documents in one call — every item a class grants, from uuid-resolve output — instead of N compendium-document-get calls; types+ids combine with AND (selected inside Foundry on bridge module 8.11.0+, gateway-side on older ones). Paginate with limit (default 50, max 200) and offset. For stat filters (CR, level, rarity, traits, price) use dnd5e-compendium-filter-* / pf2e-compendium-filter-*.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNoOnly documents with these _id values — batch selection. Omit for all.
limitNoPage size, default 50, max 200.
typesNoOnly documents of these SUBtypes, e.g. ["spell"] or ["weapon","armor"]. Omit for all.
offsetNoSkip the first N matching documents.
packIdYesThe compendium pack ID (e.g., "dnd5e.monsters", "dnd5e.items")
searchNoOptional search query to filter documents by name (case-insensitive)
compendium-document-get
Read-onlyIdempotent
Inspect

Get a compendium document as a readable summary: actors as a statblock (HP, AC, abilities, attacks), other types as core fields plus system data. Raw JSON: compendium-document-get-raw; a UUID in hand: uuid-resolve. compendium-browse gives the document IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
packIdYesThe compendium pack ID (e.g., "dnd5e.monsters")
documentIdYesThe document ID within the compendium
compendium-document-get-rawA
Read-onlyIdempotent
Inspect

Get the complete raw JSON data of a compendium document including all system fields. Use this when you need the full statblock data for calculations or detailed information.

ParametersJSON Schema
NameRequiredDescriptionDefault
packIdYesThe compendium pack ID
documentIdYesThe document ID within the compendium

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds valuable context beyond that: it specifies that the tool returns complete raw JSON, including all system fields, which informs the agent about the response's nature and completeness. This goes beyond the annotations 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?

The description is two sentences with no redundancy. The core purpose ('Get the complete raw JSON data') is front-loaded, followed by a concise usage guideline. 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 simple retrieval tool with two clearly documented parameters and annotations covering safety, the description is nearly complete. It clearly states what the tool returns and when to use it. The only minor omission is the lack of mention of potential errors or size concerns, but these are not critical for agent selection and 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%: both packId and documentId have clear descriptions in the input schema. The tool description does not add any additional parameter semantics beyond what the schema provides, which 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 clearly states the action ('Get the complete raw JSON data') and the resource ('compendium document'), explicitly mentioning 'including all system fields'. It differentiates from the sibling compendium-document-get by the word 'raw', making the tool's specific 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 provides explicit guidance on when to use the tool: 'Use this when you need the full statblock data for calculations or detailed information.' This gives clear context but does not explicitly mention alternatives or when not to use it, though the sibling compendium-document-get is implied as the more structured alternative.

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

compendium-listA
Read-onlyIdempotent
Inspect

List all available compendium packs. Compendiums contain pre-made content like monsters, items, spells, etc. Use this to discover what compendiums are available, then use compendium-browse to see their contents.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoOnly packs holding this document type.

TDQS

A4.4/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 context about the purpose and the discovery flow, but does not mention the optional type filtering or that the listing can be scoped by document type. Still, it adds value beyond annotations 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?

Two sentences with no wasted words. The purpose is front-loaded, followed by a brief explanation and a clear next-step pointer. Highly efficient.

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 list tool with one optional parameter and no output schema, the description is largely complete. It covers the main use case and routing. A minor gap is the lack of mention that the 'type' parameter can filter results, though the schema documents this. The description could also state what the response contains (e.g., pack names and IDs), but that is not critical.

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 optional 'type' parameter, which has an enum and description. The description does not add any additional parameter meaning beyond what the schema 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?

Description clearly states the verb 'List' and the resource 'compendium packs', and explicitly contrasts with compendium-browse ('use compendium-browse to see their contents'), making the tool's role unambiguous among many compendium-related siblings.

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

Usage Guidelines5/5

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

Provides explicit guidance: 'Use this to discover what compendiums are available, then use compendium-browse to see their contents.' This tells the agent exactly when to use this tool and points to the next appropriate action.

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

dnd5e-apply-damageInspect

Apply damage to an actor or to ONE token (dnd5e worlds only; module 8.14+): temp HP absorbs first; with type, resistances, immunities and vulnerabilities apply. Use after your own damage roll, or when dnd5e-item-activate reports applied false. With several tokens of one actor pass tokenId, not actorId.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNodnd5e damage type: slashing, fire, …
amountYesDamage before resistances
actorIdNoActor ID (from actor-list/actor-filter)
sceneIdNoScene of tokenId (default: active)
tokenIdNoToken ID (from token-list) instead of actorId: that token's own actor (module 8.14+)
dnd5e-apply-healingInspect

Heal an actor or ONE token (dnd5e worlds only; module 8.14+); HP stops at its maximum. With several tokens of one actor pass tokenId.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesHealing amount
actorIdNoActor ID (from actor-list/actor-filter)
sceneIdNoScene of tokenId (default: active)
tokenIdNoToken ID (from token-list) instead of actorId: that token's own actor (module 8.14+)
dnd5e-compendium-filter-actors
Read-onlyIdempotent
Inspect

Search COMPENDIUM packs for actors with D&D 5e structured filters (dnd5e worlds only). Compendium counterpart of actor-filter, which searches world actors; for a plain name lookup use compendium-search.

CRITICAL DATA FORMATS

  • CR is a NUMBER from the exact set 0, 0.125, 0.25, 0.5, 1..30 ("1/4" -> 0.25; 0.3 is rejected).

  • Sizes are SHORT codes: tiny, sm, med, lg, huge, grg. creatureType: the 14 lowercase SRD types, no subtypes ("demon" -> "fiend").

  • level applies only to type "character" (NPCs have CR). World-only filters (folder, hasPlayerOwner, currentHp) do not exist here.

Filters combine with AND, values inside one array with OR; ranges {min?, max?} inclusive (min = max for exact). Documents lacking a filtered field are excluded. limit 1..200 (default 50), offset; the response has total and hasMore. Results are {name, uuid}: uuid-resolve, or compendium-browse with ids to batch-load. Requires bridge module 8.11.0+.

EXAMPLES { "packIds": ["dnd5e.monsters"], "creatureType": ["dragon"], "cr": { "min": 5 }, "size": ["huge", "grg"] }

ParametersJSON Schema
NameRequiredDescriptionDefault
acNoArmor Class range.
crNoChallenge Rating range (numbers from the valid CR set). NPCs only.
nameNoSubstring of document name, case-insensitive.
sizeNoSize short codes (OR).
typeNoActor types (OR).
levelNoCharacter level range; type "character" only.
limitNoPage size 1..200, default 50.
maxHpNoMax HP range.
offsetNoSkip first N results.
packIdsNoRestrict to these Actor packs; omit for all.
abilitiesNoPer-ability score ranges.
dispositionNoPrototype token disposition (OR).
creatureTypeNoSRD creature types (OR), NPCs only. No subtypes: "demon" -> "fiend".
dnd5e-compendium-filter-items
Read-onlyIdempotent
Inspect

Search COMPENDIUM packs for items with D&D 5e structured filters (dnd5e worlds only): gear, spells, feats, class features and other Item documents. Compendium counterpart of world-item-filter.

CRITICAL DATA FORMATS

  • rarity is camelCase: veryRare (not "very rare"). spellSchool is the full word (evocation, not "evo").

  • spellLevel 0..9 (0 = cantrip) only affects type "spell"; other types are silently excluded by it.

  • price in GP (denominations normalized), weight in lb, decimals allowed.

Filters combine with AND, values inside one array with OR; ranges {min?, max?} inclusive (min = max for exact). Documents lacking a filtered field are excluded. limit 1..200 (default 50), offset; the response has total and hasMore. Results are {name, uuid}: uuid-resolve, or compendium-browse with ids to batch-load. Requires bridge module 8.11.0+.

EXAMPLES { "type": ["spell"], "spellLevel": { "min": 0, "max": 0 }, "spellSchool": ["evocation"], "rarity": ["rare", "veryRare"] }

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSubstring of document name, case-insensitive.
typeNoItem types (OR).
limitNoPage size 1..200, default 50.
priceNoPrice range in gp.
offsetNoSkip first N results.
rarityNoRarity (OR), camelCase: veryRare.
weightNoWeight range in lb.
packIdsNoRestrict to these Item packs; omit for all.
identifiedNoFilter by the identified flag.
spellLevelNoSpell level 0..9 (0 = cantrip); spells only.
isContainerNoOnly containers.
spellSchoolNoSpell schools (OR), full words.
hasActivitiesNoOnly items with usable activities.
requiresAttunementNoOnly items that require attunement.
dnd5e-item-activateInspect

Activate an item with full Foundry automation (Midi-QOL hooks, targets, AoE templates): attacks, spells, abilities. targetTokenIds for attacks — Midi-QOL rolls attack and damage and applies HP. Module 8.14+: dialogs are skipped (fastForward) and answered by attackMode, ammunition, consume; cover, invisibility, prone and other one-off circumstances go in advantage/disadvantage, attackBonus, damageBonus, targetAcBonus — NOT as effects on the actor (an effect hits every copy of an unlinked token); several tokens of one actor: attackerTokenId. Status awaiting_user_dialog is not an error: a dialog opened on the GM's client and the use finishes when they click; do not repeat the call. appliedDamage/appliedHealing give HP per token; applied false = not applied (dnd5e-apply-damage does). AoE: templatePosition in pixels (gridCoord * gridSize + gridSize / 2); circle = effect center; cone/line = caster position + direction (0=right, 90=down). dnd5e-item-use is the quick use without targets.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemIdYesItem ID (from item-list)
actorIdYesActor ID
consumeNoWhat may be spent; omitted = the system decides
advantageNo
activityIdNoActivity ID if several
ammunitionNoAmmo item ID, or false = spend none
attackModeNooneHanded, twoHanded, offhand, thrown, thrown-offhand
spellLevelNoSpell slot level (upcasting); omitted = base level
attackBonusNoOne-off attack bonus: 2, "1d4"
damageBonusNoOne-off damage bonus: "1d6" (Sneak Attack)
fastForwardNoSkip dialogs and auto-roll (default true)
activityTypeNoActivity type: "attack", "damage", "save", "heal", "check", "utility"
disadvantageNo
targetAcBonusNoAdded to each target AC (cover); Midi-QOL only
targetTokenIdsNoToken IDs of the targets; required for attacks
attackerTokenIdNoAct as this token of the actor (several copies)
templatePositionNoAoE template: circle = effect center; cone/line = caster position + direction
dnd5e-item-useInspect

Use an inventory item via item.use() with dialogs suppressed (potions, scrolls, spells, weapons, features); raw result as JSON. Quick, target-free use; dnd5e-item-activate when targets, AoE templates or Midi-QOL matter. Module 8.14+: a self-targeted heal (Second Wind) is applied — the result carries status, appliedHealing or warning no_roll_performed.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemIdYesItem ID (from item-list)
actorIdYesActor ID
consumeNoConsume (default true for consumables)
scalingNoSpell slot level
activityIdNoActivity ID if the item has several
showInChatNoPost to chat (default true)
activityTypeNoActivity type: "attack", "save", "heal", "utility"
dnd5e-roll-abilityInspect

Roll raw D&D 5e ability check (no skill proficiency). Use for contested checks or when no skill applies. Results appear in Foundry chat. Never both advantage and disadvantage (module 8.13+).

ParametersJSON Schema
NameRequiredDescriptionDefault
abilityYesAbility code (str, dex, con, int, wis, cha)
actorIdYesActor ID (from actor-list/actor-filter)
advantageNo
disadvantageNo
dnd5e-roll-attackInspect

Roll attack with a weapon/spell. Use actor-get FIRST to find itemId. For full attack sequence (roll + damage if hit), consider dnd5e-item-use instead. Never both advantage and disadvantage (module 8.13+).

ParametersJSON Schema
NameRequiredDescriptionDefault
itemIdYesItem ID of weapon/spell (from actor-get items list)
actorIdYesActor ID making the attack
advantageNo
disadvantageNo
dnd5e-roll-damageAInspect

Roll damage for a weapon/spell. Use actor-get FIRST to find itemId. Call after dnd5e-roll-attack confirms a hit, or set critical=true for crits.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemIdYesItem ID of weapon/spell (from actor-get items list)
actorIdYesActor ID dealing damage
criticalNoRoll critical damage (double dice)

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already mark the tool as non-read-only and non-idempotent, and the description consistently says it performs a damage roll. However, it does not disclose side effects such as chat output, resource consumption, or whether a result is returned, so it adds only modest 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?

Two tightly written sentences with the purpose front-loaded and the usage sequence following immediately. There is no filler or repetition of schema text.

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 three-parameter roll tool with no output schema, the description covers the required prerequisite, the triggering condition, and the critical-case behavior. An agent has enough information to call it at the correct point in the attack flow.

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 all three parameters with 100% coverage, establishing a baseline of 3. The description goes further by explaining how to obtain itemId via actor-get and by clarifying the critical parameter's role in a crit flow, adding value 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 the exact verb and resource ('Roll damage for a weapon/spell') and ties the action to the attack-then-damage flow. This clearly distinguishes it from dnd5e-roll-attack and other roll 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?

It explicitly says to call after dnd5e-roll-attack confirms a hit, and gives the critical alternative ('set critical=true for crits'). It also provides a prerequisite ('Use actor-get FIRST to find itemId'), though it does not contrast with other item-usage tools like dnd5e-item-use.

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

dnd5e-roll-saveInspect

Roll D&D 5e saving throw. Use when resisting spells, traps, or effects. Results appear in Foundry chat. Use actor-list first to find actorId. Never both advantage and disadvantage (module 8.13+).

ParametersJSON Schema
NameRequiredDescriptionDefault
abilityYesAbility code (str, dex, con, int, wis, cha)
actorIdYesActor ID (from actor-list/actor-filter)
advantageNo
disadvantageNo
dnd5e-roll-skillInspect

Roll D&D 5e skill check. Use for ability checks with proficiency (Stealth, Perception, etc). Results appear in Foundry chat. Use actor-list first to find actorId. Never both advantage and disadvantage (module 8.13+).

ParametersJSON Schema
NameRequiredDescriptionDefault
skillYesSkill code, not the name: ste=Stealth, prc=Perception, per=Persuasion, prf=Performance, itm=Intimidation, slt=SleightOfHand, ani=AnimalHandling, inv=Investigation, ins=Insight, dec=Deception, rel=Religion
actorIdYesActor ID (from actor-list/actor-filter)
advantageNo
disadvantageNo
effect-createInspect

Add a custom active effect (buff, debuff, custom condition) to an actor, or to ONE token via tokenId. Each change targets a data path with a mode; values are strings. EXAMPLE changes: [{"key": "system.attributes.ac.bonus", "value": "2", "mode": 2}] adds +2 AC. Paths are dnd5e; other systems differ.

ParametersJSON Schema
NameRequiredDescriptionDefault
imgNoIcon path
nameYesEffect name ("Bless")
originNoSource UUID (item, spell)
actorIdNoActor ID (from actor-list/actor-filter)
changesNoAttribute changes
sceneIdNoScene of tokenId (default: active)
tokenIdNoToken ID (from token-list) instead of actorId: that token's own actor (module 8.14+)
disabledNoAdd disabled
durationNoDuration
statusesNoStatus IDs applied (["blinded"])
effect-delete
Destructive
Inspect

Remove an active effect from an actor, or from ONE token via tokenId. Use effect-list first to find effect IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorIdNoActor ID (from actor-list/actor-filter)
sceneIdNoScene of tokenId (default: active)
tokenIdNoToken ID (from token-list) instead of actorId: that token's own actor (module 8.14+)
effectIdYesEffect ID (from effect-list)
effect-list
Read-onlyIdempotent
Inspect

List the active effects on an actor, or on ONE token via tokenId (conditions, buffs, debuffs, custom effects).

ParametersJSON Schema
NameRequiredDescriptionDefault
actorIdNoActor ID (from actor-list/actor-filter)
sceneIdNoScene of tokenId (default: active)
tokenIdNoToken ID (from token-list) instead of actorId: that token's own actor (module 8.14+)
effect-toggle-statusInspect

Toggle a D&D 5e condition on an actor, or on ONE token via tokenId (dnd5e worlds only; in PF2e worlds use pf2e-set-condition / pf2e-remove-condition). Several copies of one actor: tokenId makes only that goblin prone.

Core D&D 5e status IDs: blinded, charmed, deafened, exhaustion, frightened, grappled, incapacitated, invisible, paralyzed, petrified, poisoned, prone, restrained, stunned, unconscious.

ParametersJSON Schema
NameRequiredDescriptionDefault
activeNotrue = add, false = remove; omitted = toggle
actorIdNoActor ID (from actor-list/actor-filter)
overlayNoShow as the large overlay icon
sceneIdNoScene of tokenId (default: active)
tokenIdNoToken ID (from token-list) instead of actorId: that token's own actor (module 8.14+)
statusIdYesStatus ID: "blinded", "poisoned", "prone", …
effect-updateInspect

Update an existing active effect on an actor, or on ONE token via tokenId: name, icon, disabled state, changes, duration.

ParametersJSON Schema
NameRequiredDescriptionDefault
imgNoNew icon path
nameNoNew name
actorIdNoActor ID (from actor-list/actor-filter)
changesNoReplaces all changes
sceneIdNoScene of tokenId (default: active)
tokenIdNoToken ID (from token-list) instead of actorId: that token's own actor (module 8.14+)
disabledNoEnable/disable
durationNoDuration
effectIdYesEffect ID (from effect-list)
folder-createAInspect

Create a folder of the given document type. Foundry keeps a separate folder tree per type (Actor folders only hold Actors, etc.). parentId nests it inside another folder; omit for root level.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesFolder display name
sortNoSort order within parent. Foundry assigns one if omitted.
typeYesFoundry document type the folder organises
colorNoHex color string (e.g. "#abcdef").
parentIdNoParent folder ID. Omit for root.
descriptionNoFree-form description

TDQS

A4.4/5.0
Behavior4/5

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

Beyond the mutation implied by readOnlyHint=false, the description adds the key behavioral invariant that Foundry maintains separate folder trees per document type, and it defines parentId's nesting/root semantics. It doesn't describe return value or failure modes, but annotations already signal non-read-only behavior, lowering the burden.

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

Conciseness5/5

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

Two sentences: the first states the core action and object; the second explains the two contextual behaviors that matter for correct invocation. No filler.

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

Completeness4/5

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

Given six parameters fully described in the schema and no nested objects, the description supplies the missing system-level context (type separation, nesting, root omission) needed to call the tool confidently. The only notable omission is the response/return behavior, which is not covered because no output schema exists, but the call itself is fully specified.

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 six parameters. The description adds non-redundant meaning for type (separate tree per type) and parentId (nests inside another folder; omit for root), helping the agent map those fields 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 states a precise action – 'Create a folder of the given document type' – and differentiates from sibling folder-delete/get/list/update by naming the creation operation. The per-type folder-tree note further clarifies what a folder creation means in Foundry.

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 makes the invocation context clear: use when creating a new folder of a known document type, including the root-vs-nested choice via parentId. It does not explicitly name alternatives like folder-update, but no competing create tool exists among siblings, so the lack of exclusion is not a real gap.

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

folder-delete
Destructive
Inspect

Permanently delete a folder. deleteSubfolders: true also deletes child folders, deleteContents: true the documents inside; both default false, so sub-folders and documents move to the parent (or root). Both true on a populated tree wipes a lot of data — confirm with the user first.

ParametersJSON Schema
NameRequiredDescriptionDefault
folderIdYesFolder ID to delete
deleteContentsNoAlso delete documents inside the folder. Default false (orphan to root).
deleteSubfoldersNoRecursively delete child folders. Default false (orphan to parent).
folder-getA
Read-onlyIdempotent
Inspect

Get a single folder. includeSubfolders=true returns the full subfolder tree; includeContents=true lists the ids of documents directly inside this folder (not inside subfolders: fetch each subfolder for its own contents). Both default false.

ParametersJSON Schema
NameRequiredDescriptionDefault
folderIdYesFolder ID (from folder-list).
includeContentsNoList document ids directly inside THIS folder (not nested).
includeSubfoldersNoRecursively include the subfolder tree.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, it discloses that both flags default to false and, crucially, that includeContents is not recursive despite the subfolder option. The parenthetical 'fetch each subfolder for its own contents' exposes a non-obvious behavior an agent must know before invoking.

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 the essential operation, flag semantics, defaults, and the nested-content caveat with no filler. The headline verb/resource appears first, and each clause earns its place.

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

Completeness4/5

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

For a read-only single-folder fetch, this covers the required folderId, both optional behaviors, defaults, and the non-nested nuance. It does not describe the shape of the base folder object or not-found behavior, but with no output schema those are minor gaps for this small 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?

The schema already documents all three parameters, so the baseline is 3. The description adds the default-false behavior for both booleans and explains how the two flags interact, which goes beyond the field-level 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?

The description opens with 'Get a single folder', which names a specific verb and resource and distinguishes it from folder-list and folder-create. It also clarifies the scope of the two optional include flags, so an agent immediately knows this returns one folder, optionally with its subfolder tree or direct document IDs.

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 conditional guidance: includeSubfolders=true returns the full tree, includeContents=true only direct document IDs, and it explicitly tells the agent to fetch each subfolder when nested contents are needed. It stops short of naming sibling alternatives such as folder-list for retrieving multiple folders, so it is not a full 5.

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

folder-listA
Read-onlyIdempotent
Inspect

List folders in the world (id, name, type, parent), optionally one document type. No tree or contents: for subfolders and contents use folder-get.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoDocument type filter. Folders are typed: Actor folders hold Actors, Item folders hold Items, etc. Omit to list all 9 types interleaved.

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, covering the safety profile. The description adds valuable behavioral context by naming the output fields, stating the optional document type filter, and explicitly excluding tree structure and contents. This goes beyond what the annotations provide, though it does not discuss pagination or ordering.

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

Conciseness5/5

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

The description is two tightly written sentences, with the core purpose and output shape front-loaded. The second sentence efficiently states exclusions and routes to the relevant sibling tool. Every phrase earns its place without fluff.

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 endpoint with one optional enum parameter and no output schema, the description gives enough to invoke it correctly: what it lists, what fields are returned, the optional filter, and what it intentionally omits. The annotations cover safety, and the schema covers parameter semantics, leaving no critical 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 sole parameter is fully documented in the schema with an enum and a detailed description of what each type represents and what omitting it does. The tool description merely paraphrases "optionally one document type" without adding new semantic information. Schema coverage is 100%, so 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 uses the specific verb "List" with resource "folders in the world" and states the returned fields (id, name, type, parent). It explicitly distinguishes itself from folder-get by noting it does not return a tree or contents. This is unambiguous and differentiates from sibling folder 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 versus folder-get: for a flat folder listing, not subfolders or contents. It also explains the optional type filter, directing agents toward the right invocation. No competing list tool is named, but the primary routing decision is fully covered.

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

folder-updateInspect

Update a folder: name, parent, color, description, sort. Parent is TRI-STATE: omit parentId and clearParent = unchanged; parentId string = new parent; parentId null or clearParent: true = move to root (a string together with clearParent: true is rejected).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew name. Omit to leave unchanged.
sortNoNew sort position. Omit to leave unchanged.
colorNoNew hex color string. Omit to leave unchanged.
folderIdYesFolder ID to update
parentIdNoTri-state: omit = leave alone, string = set new parent ID, null = move to root.
clearParentNoAlternative move-to-root signal for clients that cannot send literal JSON null. When true, overrides any parentId.
descriptionNoNew description. Omit to leave unchanged.
game-pauseA
Idempotent
Inspect

Pause the game for all connected clients (freezes the session pause indicator). Use game-resume to unpause.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true and destructiveHint=false. The description adds context about the scope (all connected clients) and the specific effect on the session pause indicator, which goes 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?

Two concise sentences with zero fluff. The primary action and scope are front-loaded, followed by the alternative. 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 zero-parameter tool with annotations covering safety and idempotency, the description fully equips an agent to call it correctly. It states what happens, to whom, and how to reverse it. No output schema is present, 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.

Parameters4/5

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

The tool has 0 parameters, so the baseline is 4. The description adds no parameter-specific information because there are none; it correctly focuses on the action and scope.

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 the exact verb 'pause' and resource 'game', specifies scope 'all connected clients', and clarifies the effect 'freezes the session pause indicator'. Clearly distinguishes from the sibling 'game-resume' which reverses the action.

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

Usage Guidelines5/5

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

Explicitly names the complementary tool 'game-resume' and the condition for using it ('to unpause'), providing clear guidance on when to use this tool vs the alternative.

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

game-pause-getA
Read-onlyIdempotent
Inspect

Check whether the game is currently paused (game.paused). Returns paused: true/false.

ParametersJSON Schema
NameRequiredDescriptionDefault

No 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 and idempotentHint, so the safety profile is covered. The description adds value by naming the underlying property (game.paused) and specifying the return format (paused: true/false), giving the agent more behavioral context than the annotation metadata 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?

Two short sentences deliver all essential information with no fluff. The action, target field, and return value are each present and 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 zero-parameter, read-only status tool, this description is fully complete. It covers what the tool does, the relevant state field, and the exact returned value, while the annotations cover side-effect safety. There is nothing an agent needs to know to call it correctly that is missing.

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

Parameters4/5

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

The tool accepts zero parameters, so there are no parameter semantics to clarify. The baseline for a zero-parameter tool is 4, and the description accurately reflects that no arguments are needed by simply being about a state check.

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 checks the current pause state via a specific verb ('Check') and resource ('game paused'), even referencing the underlying field game.paused. It is immediately distinguishable from the sibling game-pause and game-resume tools because it queries rather than mutates.

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 'Check whether the game is currently paused' makes the read-only usage context clear and implies it should be used to inspect state rather than change it. However, it does not explicitly name alternatives or state when not to use it, such as 'use game-pause to pause the game.'

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

game-resumeA
Idempotent
Inspect

Resume (unpause) the game for all connected clients.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already supply idempotentHint=true and destructiveHint=false, so the core safety profile is covered. The description adds the meaningful scope 'for all connected clients,' but it does not describe what happens if the game is already running or any client-visible effects beyond resuming.

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 conveys the action, the target resource, and the scope without wasted words. The parenthetical 'unpause' usefully reinforces the verb without adding bulk.

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, side-effect-reaching command, the description is complete: it states exactly what happens and who is affected. The no-output-schema case does not create a gap because the return value is unlikely to be central for this simple control action.

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 there are no parameter semantics for the description to clarify. Baseline 4 is appropriate because no parameter documentation burden exists.

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 ('Resume (unpause)') and names the exact resource ('the game') affected. It also clarifies scope ('for all connected clients'), making it immediately distinguishable from the sibling game-pause and game-pause-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 Guidelines2/5

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

The description explains what the tool does but gives no explicit guidance on when to invoke it or when to choose an alternative. It does not mention preconditions such as the game being paused, nor does it point to game-pause or game-pause-get as related tools.

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

handout-template-getA
Read-onlyIdempotent
Inspect

Get the full HTML of a handout template. Use this as a STYLE REFERENCE — do not copy it verbatim. Generate a unique variation with the required content, using inline style="" attributes (Foundry VTT strips tags). Save the result via journal-page-create with type "text".

ParametersJSON Schema
NameRequiredDescriptionDefault
templateIdYesTemplate ID from handout-template-list

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the safety profile is covered. The description adds behavioral context beyond annotations: it states the output is HTML, and it warns about Foundry VTT stripping <style> tags, implying the returned HTML may include style tags that must be converted to inline attributes. This practical context about output format and constraints adds value without contradicting 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 compact and front-loaded: the core purpose is in the first sentence, followed immediately by usage constraints and downstream actions. Every sentence carries essential information, and there is no redundancy with annotations or schema. It's 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 single-parameter retrieval tool with robust annotations (read-only, idempotent), the description fully equips the agent: it explains what the output is (full HTML), how to use it (as style reference, not copy), and what to do next (generate variation, save via journal-page-create with 'text' type). There's no output schema, but the description covers the return value sufficiently for the agent's task. 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?

The input schema has one parameter, templateId, with description 'Template ID from handout-template-list' which already fully explains its meaning and source. Since schema_description_coverage is 100%, the description adds no additional parameter-specific information. Baseline 3 is appropriate; the tool description doesn't need to repeat schema content.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get the full HTML of a handout template.' It uses a specific verb ('get'), names the resource ('handout template'), and adds that it returns full HTML. This distinguishes it from the sibling handout-template-list, which presumably returns metadata or IDs. The unique purpose 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 Guidelines5/5

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

Explicit guidance is given: 'Use this as a STYLE REFERENCE — do not copy it verbatim.' It then instructs the agent to generate a unique variation and save via journal-page-create, including implementation details like inline styles because Foundry VTT strips <style> tags. This tells the agent exactly when and how to use the tool, and what to do with the result. No other tool has similar guidance in the sibling set.

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

handout-template-listA
Read-onlyIdempotent
Inspect

List available handout templates (wanted posters, letters, scrolls, etc.). Returns template IDs and descriptions. Use handout-template-get to read the full HTML. Then generate a unique variation with your own content and save via journal-page-create.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoFilter by category: wanted-poster, letter, scroll, decree, etc.

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, destructiveHint=false, and idempotentHint=true. The description adds value by specifying that it 'Returns template IDs and descriptions' and implies it does not return full HTML (since it directs to handout-template-get for that). This clarifies the scope of the read operation beyond the annotation's 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 three concise sentences with no fluff. It front-loads the primary purpose, states the output, and then gives workflow context. Every sentence earns its place, making it easy to scan and understand.

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 listing tool with one optional parameter and no output schema, the description is complete. It covers what the tool returns, how it differs from the sibling, and the recommended workflow. Annotations already cover safety, so nothing critical 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?

The schema description for the 'category' parameter is already informative ('Filter by category: wanted-poster, letter, scroll, decree, etc.'), covering 100% of the schema. The tool description does not add additional insight about the parameter, so it meets the baseline but does not exceed it.

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

Purpose5/5

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

The description clearly states the verb 'List' and the resource 'handout templates', with concrete examples ('wanted posters, letters, scrolls, etc.'). It explicitly differentiates from the sibling 'handout-template-get' by stating it returns only IDs and descriptions, not the full HTML, making the tool's scope unambiguous.

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

Usage Guidelines5/5

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

The description provides explicit workflow guidance: 'Use handout-template-get to read the full HTML. Then generate a unique variation with your own content and save via journal-page-create.' This tells the agent exactly when to use this tool (to browse templates) and what to do next, effectively routing to the correct siblings without ambiguity.

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

item-createInspect

Create a new item directly in an actor's inventory (dnd5e data model). Use for custom items, loot, or simple gear; for official SRD content use item-create-from-compendium. For an item that lives in the world Items Directory rather than on an actor use world-item-create.

ParametersJSON Schema
NameRequiredDescriptionDefault
imgNoItem icon path (optional)
nameYesItem name
typeYesdnd5e item type ("backpack" is accepted as the legacy name of "container")
systemNoD&D 5e system data: quantity, weight, price, rarity, equipped, range, damage, uses, etc.
actorIdYesActor ID to add item to (from actor-list/actor-filter)
item-create-from-compendiumInspect

Add an item (weapon, spell, feat, gear) from a compendium pack to an actor's inventory with its full data: uuid ("Compendium...Item." from dnd5e-compendium-filter-items, pf2e-compendium-filter-items, compendium-search) or packId + itemId from compendium-browse.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoCustom name (uses compendium name if omitted)
uuidNoCompendium UUID "Compendium.<scope>.<pack>.Item.<id>". Replaces packId + itemId.
itemIdNoItem ID within the pack (from compendium-browse). Required unless uuid is given.
packIdNoCompendium pack ID (e.g., "dnd5e.items", "dnd5e.spells"). Required unless uuid is given.
actorIdYesActor ID to add item to (from actor-list/actor-filter)
quantityNoQuantity to add (default: 1)
item-deleteA
Destructive
Inspect

Remove an item from actor's inventory permanently. Use item-list FIRST to find itemId. Cannot be undone! An item that is already gone counts as deleted (success), so retries are safe.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemIdYesItem ID to delete (from item-list)
actorIdYesActor ID that owns the item

TDQS

A3.6/5.0
Behavior1/5

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

The description contradicts the annotations: it claims 'retries are safe' and that an already-deleted item counts as success, which implies idempotent behavior, while idempotentHint is false. This is a clear contradiction. The description does add transparency about permanence, but the contradiction is a severe 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?

Two sentences with no filler. The core action is front-loaded, followed by a required prerequisite and critical warnings (permanence, retry safety). 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?

For a simple 2-parameter delete with no output schema, the description covers the essentials: how to find the ID, the permanence, and retry behavior. It doesn't discuss errors or side effects, but given the simplicity and annotations, it's largely complete. The idempotency contradiction is noted but doesn't directly detract from this dimension.

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 both parameters already described in the schema. The description reiterates 'from item-list' but adds no new meaning beyond that, so it's at the baseline for high-coverage schemas.

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

Purpose5/5

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

The description clearly states the verb ('Remove') and resource ('item from actor's inventory') with a permanent consequence, distinguishing it from update/create tools and other delete tools. It is specific 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?

Provides explicit sequencing ('Use item-list FIRST to find itemId') and retry guidance ('retries are safe'). It doesn't explicitly state when not to use, but the purpose is clear enough that alternatives aren't needed; the guidance is actionable and context-rich.

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

item-list
Read-onlyIdempotent
Inspect

List an ACTOR's inventory (weapons, gear, spells, feats, class features) with descriptions, damage and range — not the world Items Directory (world-item-filter). Filter by type, equipped, hasActivities. The item IDs feed dnd5e-item-use, dnd5e-item-activate, dnd5e-roll-attack.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter by item type (e.g., "weapon", "equipment", "consumable", "spell", "feat")
actorIdYesThe actor ID to get items from
equippedNoFilter by equipped status (true = only equipped, false = only unequipped)
hasActivitiesNoFilter to items that have activities (usable abilities like attacks, spells, item uses)
item-updateInspect

Update an item in actor's inventory. Use item-list FIRST to find itemId. system is DEEP-MERGED into the existing data: pass only the fields you change, e.g. {"quantity": 3} or {"uses": {"value": 0}}; arrays are replaced whole.

ParametersJSON Schema
NameRequiredDescriptionDefault
imgNoNew icon path
nameNoNew item name
itemIdYesItem ID to update (from item-list)
systemNoUpdated system data (quantity, equipped, range, damage, uses, etc.)
actorIdYesActor ID that owns the item
journal-createAInspect

Create a new journal entry, optionally with a first page. content is HTML (see journal-page-create for the HTML rules). folder takes a folder ID; a unique folder NAME is resolved to its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the journal entry
folderNoFolder ID (from folder-list with type "JournalEntry"); a unique folder name is also accepted. Omit for root.
contentNoHTML content of the first page (optional)
pageTypeNoType of the first page (default: text)

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already mark this as non-read-only and non-destructive, and the description adds useful behavioral details: content must be HTML and a unique folder name is resolved to its ID. It does not go deeper into creation outcomes or error behavior, but the baseline disclosure is adequate.

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 front-loaded sentences with no filler: the core action, the optional page behavior, and the two cross-references all earn their 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 simple create operation with fully documented parameters, the description plus schema is sufficient to invoke the tool. The only notable gap is not specifying what the successful response returns (e.g., the new journal's ID), and no output schema exists to cover that.

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 explains name, folder, content, and pageType. The description's folder-name resolution and HTML cross-reference add only modest extra value beyond the structured fields.

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 first sentence states a specific action and object: 'Create a new journal entry, optionally with a first page.' That is clear and immediately separates creation from the many journal mutation siblings, though it does not explicitly contrast with journal-update or journal-page-create.

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?

Creation context is implied by the verb and resource, and the description usefully points to journal-page-create for HTML rules. However, it never states when to prefer this tool over journal-update or journal-page-create, and it does not mention how first pages are added after creation.

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

journal-deleteA
Destructive
Inspect

Delete a journal entry and all its pages. This action cannot be undone!

ParametersJSON Schema
NameRequiredDescriptionDefault
journalIdYesThe journal ID to delete

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, but the description adds valuable context beyond that by disclosing the cascade behavior ('and all its pages') and irreversibility ('This action cannot be undone!'). This gives the agent a clear picture of the operation's consequences.

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

Conciseness5/5

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

Two short sentences with the core action front-loaded and the important warning immediately after. Every word contributes value, and there is no redundancy with the schema or 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-required-parameter destructive action with annotations already covering the safety profile, the description provides all needed behavioral context: what is deleted, the cascading scope, and irreversibility. No output schema is necessary for a delete operation, so 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%, and the journalId parameter is already described as 'The journal ID to delete.' The description adds no additional meaning or constraints for the parameter, 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?

The description states a specific verb and resource: 'Delete a journal entry and all its pages.' This clearly distinguishes it from journal-page-delete and other journal-related siblings by specifying the full scope of deletion.

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 that this tool is for deleting an entire journal entry, not just individual pages, but it never explicitly states when to use it over alternatives like journal-page-delete or journal-update. The destructive warning adds caution but no direct usage conditions.

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

journal-folder-listA
Read-onlyIdempotent
Inspect

List journal folders by name with entry and page counts — a quick overview of journal organization. Then use journal-list with a folder name, or omit folder to list all journals. Folder IDs (for journal-create / journal-update / folder-get) come from folder-list with type "JournalEntry".

ParametersJSON Schema
NameRequiredDescriptionDefault

No 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 and idempotentHint=true, covering safety. The description adds behavioral value by specifying the output includes entry and page counts, which is not evident from the schema or 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?

Two sentences with no filler. The first sentence states the core purpose and output; the second provides forward navigation and clarification on where to obtain folder IDs. Perfectly 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 parameterless, read-only listing tool with annotations covering safety, the description fully explains what it returns and how to proceed. It also clarifies the source of folder IDs, removing any ambiguity with folder-list. Nothing essential is missing.

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

Parameters4/5

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

The tool has zero parameters and the schema is fully described (empty). The baseline for 0 params is 4; the description adds no parameter details because none exist, which 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 ('List journal folders by name with entry and page counts') and distinguishes it from the broader folder-list by specifying it's a journal-specific overview. This clearly differentiates it from sibling tools like journal-list and folder-list.

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 directs the agent to use journal-list next (with or without a folder name) and clarifies that folder IDs come from folder-list with type 'JournalEntry' — making the alternative tool and the selection condition explicit.

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

journal-getA
Read-onlyIdempotent
Inspect

Get a journal entry by ID with all its pages as plain text (default) or as raw JSON with HTML and page metadata (formatAsText=false). Use journal-list or journal-search to find journal IDs; for one page of a long journal use journal-page-get.

ParametersJSON Schema
NameRequiredDescriptionDefault
journalIdYesThe journal ID
formatAsTextNoDefault true: pages as plain text (HTML stripped). false = raw JSON with HTML content and page metadata.

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 and destructiveHint=false, so the safety profile is known. The description adds behavior beyond annotations by specifying the two output modes (plain text vs raw JSON with HTML and metadata) and the default. This gives the agent a clear expectation of what the tool returns without needing to guess.

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 main action and output modes are front-loaded, followed by routing guidance. Every clause earns its place.

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

Completeness5/5

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

Despite no output schema, the description covers the essential return format (plain text or raw JSON) and the parameter behavior. It also provides pointers to sibling tools for ID discovery and page-level retrieval, making it self-sufficient for an agent to call 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 covers both parameters (100% coverage), but the description adds value by explaining the formatAsText parameter's meaning and default ('Default true: pages as plain text (HTML stripped). false = raw JSON with HTML content and page metadata.'). This enriches the schema description, so it's more than just a 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 (get), resource (journal entry), and scope (all its pages) and differentiates between two output formats. It names sibling tools (journal-list, journal-search, journal-page-get) that serve different purposes, so an agent can clearly distinguish it.

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 this tool vs alternatives: 'Use journal-list or journal-search to find journal IDs; for one page of a long journal use journal-page-get.' This provides clear routing and exclusions.

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

journal-listA
Read-onlyIdempotent
Inspect

List journal entries with IDs, grouped by folder. Omit folder to list ALL journals. Returns IDs needed for journal-get. Use journal-search if you know the name.

ParametersJSON Schema
NameRequiredDescriptionDefault
folderNoFolder name or folder ID to filter by (omit for all journals)

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 known. The description adds behavioral context: grouping by folder and returning IDs needed for journal-get, which is useful beyond 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?

Three sentences, each earns its place: purpose, scope variation, and alternative routing. Front-loaded and free of redundancy.

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

Completeness4/5

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

For a single-parameter list tool, it covers the key aspects: what it lists, how to broaden scope, what it returns, and when to use another tool. It lacks only minor details like output structure or pagination, but these are not critical given the simple nature and annotations.

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

Parameters3/5

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

Schema coverage is 100%, and the schema already documents the folder parameter with the same 'omit for all' nuance. The description reinforces but does not add new meaning beyond the schema, so it stays at 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 uses a specific verb ('List') and resource ('journal entries'), states the grouping behavior, and explicitly differentiates from journal-search. It clearly answers what the tool does and how it differs from its 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?

Provides explicit usage guidance: 'Omit folder to list ALL journals' and directs users to journal-search when the name is known. This clearly indicates when to use this tool versus the alternative.

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

journal-page-createAInspect

Add a page to an existing journal entry. Text pages take HTML content: style with inline style="" attributes (Foundry strips and ), link documents with @UUID[Actor.]{Label}. handout-template-list offers ready-made layouts.

ParametersJSON Schema
NameRequiredDescriptionDefault
srcNoSource file path or URL for image/video/pdf pages
nameYesName of the new page
typeNoType of page (default: text)
contentNoHTML content for text pages
journalIdYesThe journal ID to add the page to

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=false and destructiveHint=false, so the description doesn't need to cover basic mutation safety. It adds a behavioral detail about Foundry stripping <style> and <script> tags, which is valuable. It doesn't discuss permissions or reversibility, but for a creation tool this is acceptable. 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 a single, front-loaded sentence stating the primary purpose, followed by one sentence with practical guidance. Every word contributes—no filler or redundancy. It is appropriately concise.

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 5 parameters, 2 required, and no output schema, the description covers the main usage scenario (adding text pages with HTML) and points to a template resource. It doesn't mention the return value, but for a creation tool that's minor. It also implicitly differentiates from update/delete siblings. Overall, it is fairly complete for the tool's complexity.

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 significant value for the 'content' parameter by explaining how to structure HTML, use inline styles, and link documents. It also mentions handout-template-list as a source of ready-made layouts, which is beyond the schema's simple 'HTML content for text pages'. This elevates the score to 4.

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 ('Add'), a resource ('a page to an existing journal entry'), and differentiates from siblings like journal-create (creates a journal) and journal-page-update (updates a page). It is clear 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 provides usage context for text pages: how to use inline styles, link documents via @UUID, and mentions handout-template-list as an alternative for ready-made layouts. It doesn't explicitly state when not to use this tool, but the context for the main text-page case is clear and hints at alternatives.

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

journal-page-deleteA
Destructive
Inspect

Delete a specific page from a journal. This action cannot be undone!

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesThe page ID to delete
journalIdYesThe journal ID containing the page

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already mark this as destructive, but the description adds the important context that the action cannot be undone. This is genuinely useful behavioral information beyond the structured hints, though it does not mention other effects such as permission requirements or cascading deletions.

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 wasted words. The core action is front-loaded, and the irreversibility warning is a valuable addition that fits naturally.

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 delete operation with two well-documented required parameters and no output schema, the description is sufficient. An agent can correctly identify the resource and understand the destructive consequence without additional explanation.

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 both pageId and journalId already described clearly. The tool description adds no additional parameter-level meaning beyond what the schema provides, so 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 ('Delete') and resource ('a specific page from a journal'), making it immediately clear what the tool does. It also distinguishes itself from the sibling journal-delete by emphasizing 'specific page.'

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 purpose implies the usage scenario: call this when deleting a journal page rather than a journal itself. However, it does not explicitly state when not to use it, nor does it name alternatives such as journal-page-update or journal-delete.

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

journal-page-getA
Read-onlyIdempotent
Inspect

Get a specific page from a journal. Useful when you only need one page from a multi-page journal. Returns plain text content by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesThe page ID (from journal pages list)
journalIdYesThe journal ID
formatAsTextNoIf true (default), returns plain text. If false, returns raw HTML/JSON.

TDQS

A4.2/5.0
Behavior4/5

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

With annotations already declaring readOnlyHint, idempotentHint, and destructiveHint false, the description adds a new behavioral detail: 'Returns plain text content by default.' This informs the agent of the output format without relying on schema inspection. It does not discuss edge cases like invalid IDs, but that is minor given annotation coverage.

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 core action and key usage context are front-loaded, followed by the default return behavior. 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?

For a simple read tool with full schema coverage and safety annotations, the description covers the purpose, usage context, and default return format. It does not describe error behavior or the exact structure of the returned output, but given no output schema and the simplicity of the operation, this is acceptable.

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 documented (journalId, pageId, formatAsText). The description mentions plain text default, which overlaps with the schema's formatAsText explanation, adding no new parameter-level meaning. Thus 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 ('Get a specific page from a journal') and identifies the resource (page within a journal). It also distinguishes itself from retrieving the whole journal by noting the multi-page scenario, making it clear how this tool differs from sibling tools like journal-get.

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 'Useful when you only need one page from a multi-page journal' gives a clear context for use. It implies the alternative of retrieving the full journal, though it does not explicitly name that sibling tool or state when not to use it.

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

journal-page-updateAInspect

Update a journal page. content REPLACES the whole page text (no append): read it with journal-page-get, edit, and send the full HTML back. Same HTML rules as journal-page-create.

ParametersJSON Schema
NameRequiredDescriptionDefault
srcNoNew source file path or URL for image/video/pdf pages
nameNoNew name for the page
pageIdYesThe page ID to update
contentNoNew HTML content for text pages
journalIdYesThe journal ID containing the page

TDQS

A4.3/5.0
Behavior4/5

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

The description discloses the critical replace behavior (content replaces the whole page text) and the need to read first, which is important context beyond the annotations (which do not indicate destructive behavior). It also references HTML rules from create. However, it does not clarify that other fields (src, name) are optional and only updated if provided, which could lead to misinterpretation of partial updates.

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 exceptionally concise and well-structured. Two sentences front-load the core behavior (replace semantics) and reference sibling tools for additional context without redundancy. Every sentence earns its place, making it easy for an agent to parse and act on.

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 is incomplete for a mutation tool with no output schema. It doesn't mention the return value, doesn't clarify that only provided fields are updated, and doesn't address non-text pages (e.g., image/video) where content may not be used. This could cause an agent to unnecessarily read a page or send full content when only renaming is desired.

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 covers all 5 parameters with descriptions (100% coverage), so the baseline is 3. The description adds meaningful value by explaining the content parameter's role: it replaces the entire page text and must be sent back in full. It doesn't add detail for src and name, but those are self-explanatory from the schema. The extra insight into content justifies a 4.

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 updates a journal page, emphasizing the replace behavior ('content REPLACES the whole page text') and distinguishes it from create/delete/get via explicit references to sibling tools. It is specific about the resource and action, leaving no ambiguity about its purpose.

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 an explicit workflow: read with journal-page-get, edit, and send full HTML back. It also references journal-page-create for HTML rules, implying when to use this tool vs create. However, it does not explicitly state when not to use it (e.g., for appending) beyond the 'no append' note, and it lacks guidance for non-content updates (like renaming only).

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

journal-showInspect

Show a journal entry or one page on the players' screens. force=true reveals it even without permission (a one-off popup; permissions unchanged). users = Foundry user IDs (authorId from chat-list); omit for everyone.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoOverride Foundry permissions (default: false)
usersNoFoundry User IDs to show to (omit for all players)
pageIdNoSpecific page ID to show (omit for entire journal)
journalIdYesThe journal ID to show
journal-updateAInspect

Rename a journal entry or move it to another folder (metadata only; pages are edited with journal-page-update). folder takes a folder ID; a unique folder NAME is resolved to its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew name for the journal
folderNoTarget folder ID (from folder-list with type "JournalEntry"); a unique folder name is also accepted.
journalIdYesThe journal ID to update

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already mark readOnlyHint=false, so the description's 'rename' and 'move' verbs are consistent. It adds useful context by stating 'metadata only' and explaining that a unique folder name resolves to its ID, which goes beyond the schema and annotations.

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

Conciseness5/5

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

The description is a single, dense sentence that front-loads the core action (rename/move) and includes the critical metadata-only caveat. Every clause earns its place with no wasted words.

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

Completeness4/5

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

For a simple rename/move tool with three parameters and one required, the description covers the main behaviors and the folder resolution nuance. It doesn't mention return values or error handling, but those are not essential given the tool's simplicity and the lack of an output schema.

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

Parameters3/5

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

Schema coverage is 100% and each parameter has a clear description. The tool description reinforces the folder name resolution behavior but doesn't add meaning beyond what the schema already provides for the parameters themselves, 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 clearly states the tool renames a journal entry or moves it to another folder, and explicitly scopes it to metadata only, distinguishing it from journal-page-update. It names the sibling for page edits, making its 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?

It provides clear when-to-use guidance by specifying rename/move operations and pointing to journal-page-update as the alternative for page content. It doesn't explicitly list exclusions, but the reference to the sibling tool is sufficient for an agent to choose correctly.

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

pf2e-cast-spellAInspect

PF2e only. Cast a spell via its spellcasting entry. spellId must be a "spell" item on the actor (from item-list). rank heightens the spell (1-10); defaults to the spell's own rank.

ParametersJSON Schema
NameRequiredDescriptionDefault
rankNoHeightened rank 1-10 (default: spell rank)
actorIdYesActor ID
spellIdYesItem ID of a spell (from item-list)
showInChatNoPost to chat (default true)

TDQS

A4/5.0
Behavior3/5

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

Annotations already establish this is not read-only, not idempotent, and not destructive. The description adds useful rank-heightening and default-rank behavior, but does not disclose side effects such as resource/slot consumption or whether the cast triggers rolls or chat output. 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?

Three short, purposeful sentences with no filler. The PF2e-only scope is front-loaded, followed by the required item constraint and the key optional parameter 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 four-parameter tool with a fully-covered schema alert, the description covers system, valid spellId source, rank range/default, and chat projection via schema. It does not explain broader cast consequences, but all invocation-critical information is present.

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 carries most parameter meaning. The description adds the important constraint that spellId must be a spell item on the actorjos, and restates rank behavior already present in the schema, providing only small additional 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 ('Cast') and resource ('spell via its spellcasting entry'), scoped to PF2e and tied to a spell item on an actor. It is clearly distinguishable from sibling item-use/consumable tools even without naming them explicitly.

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?

'PF2e only' is an explicit scoping exclusion, and 'spellId must be a "spell" item on the actor (from item-list)' gives concrete sourcing guidance. It does not name alternative sibling tools, but the usage context is clear and actionable.

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

pf2e-compendium-filter-actors
Read-onlyIdempotent
Inspect

Search COMPENDIUM packs for actors with Pathfinder 2e structured filters (pf2e worlds only): bestiary browsing by level, traits, rarity, size, HP, AC.

CRITICAL DATA FORMATS

  • level is an INTEGER range; negative bounds are valid ({ "min": -1 }).

  • traits are ALL-OF (every listed trait must be present), an open set of lowercase slugs ("undead", "kobold").

  • rarity: common, uncommon, rare, unique (PF2e ladder). Sizes: tiny, sm, med, lg, huge, grg.

Filters combine with AND, values inside one array with OR; ranges {min?, max?} inclusive (min = max for exact). Documents lacking a filtered field are excluded. limit 1..200 (default 50), offset; the response has total and hasMore. Results are {name, uuid}: uuid-resolve, or compendium-browse with ids to batch-load. Requires bridge module 8.11.0+. Results carry level (null when absent), sorted by level then name.

EXAMPLES { "type": ["npc"], "traits": ["kobold"], "level": { "min": -1, "max": 1 }, "rarity": ["unique"] }

ParametersJSON Schema
NameRequiredDescriptionDefault
acNoArmor Class range.
nameNoSubstring of document name, case-insensitive.
sizeNoSize short codes (OR).
typeNoPF2e actor types (OR).
levelNoCreature level range; negative bounds are valid.
limitNoPage size 1..200, default 50.
maxHpNoMax HP range.
offsetNoSkip first N results.
rarityNoRarity (OR).
traitsNoALL-OF: every listed trait must be present. Lowercase slugs.
packIdsNoRestrict to these Actor packs; omit for all.
pf2e-compendium-filter-items
Read-onlyIdempotent
Inspect

Search COMPENDIUM packs for items with Pathfinder 2e structured filters (pf2e worlds only): equipment, spells, feats, ancestries, classes and 20 more Item types.

CRITICAL DATA FORMATS

  • For spells, level is the spell RANK.

  • traits are ALL-OF (every trait present); traditions are ANY-OF (arcane, divine, occult, primal). Do not confuse the two.

  • category is the feat category (class, skill, general, ancestry, ...). rarity: common, uncommon, rare, unique.

  • priceGold is gp with decimals (5 sp -> 0.5), per batch for batched goods like arrows.

Filters combine with AND, values inside one array with OR; ranges {min?, max?} inclusive (min = max for exact). Documents lacking a filtered field are excluded. limit 1..200 (default 50), offset; the response has total and hasMore. Results are {name, uuid}: uuid-resolve, or compendium-browse with ids to batch-load. Requires bridge module 8.11.0+. Results carry level (null when absent), sorted by level then name.

EXAMPLES { "type": ["spell"], "level": { "min": 3, "max": 3 }, "traditions": ["arcane"], "priceGold": { "max": 5 } }

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSubstring of document name, case-insensitive.
typeNoPF2e item types (OR).
levelNoItem level range; spell RANK for spells.
limitNoPage size 1..200, default 50.
offsetNoSkip first N results.
rarityNoRarity (OR).
traitsNoALL-OF: every listed trait must be present. Lowercase slugs.
packIdsNoRestrict to these Item packs; omit for all.
categoryNoFeat category (OR): class, skill, general, ancestry, ...
priceGoldNoPrice range in gp (5 sp -> 0.5).
traditionsNoANY-OF: at least one shared tradition.
pf2e-decrease-conditionAInspect

PF2e only. Decrease a valued condition by 1; the condition is removed when it reaches 0 (condition is null in the result then).

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesPF2e condition slug. Valued conditions (carry a number): clumsy, cursebound, doomed, drained, dying, enfeebled, frightened, sickened, slowed, stunned, stupefied, wounded.
actorIdYesActor ID

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate a non-read-only, non-destructive operation. The description adds valuable context: the condition is removed at 0 and the result can be null. This goes beyond the annotations and helps the agent anticipate the outcome, though it does not cover edge cases like missing conditions or already-at-0.

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 sentence that front-loads the PF2e scope and clearly states the operation and its result. Every word earns its place with no redundancy.

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

Completeness4/5

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

For a simple two-parameter tool with no output schema, the description covers the core action and result behavior. It does not mention error handling or prerequisites, but these are not critical for a basic decrement operation, and the schema already documents the parameter domain.

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 descriptions, including the list of valued conditions in the slug enum. The description itself adds no parameter-specific information, so it does not improve on the schema. Baseline 3 is appropriate given full 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 states a specific verb ('Decrease'), a specific resource ('a valued condition'), and a concrete effect (by 1, removal at 0). It also scopes to PF2e and distinguishes from sibling tools like increase/set/remove by implying a decrement operation on valued conditions only.

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 makes the intended use clear (decrease valued condition by 1) and implicitly restricts to valued conditions, but it does not explicitly mention alternatives or when not to use it. The agent must infer from the context that this is for valued conditions only, and that set/increase/remove are alternatives.

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

pf2e-get-conditionsA
Read-onlyIdempotent
Inspect

PF2e only. List the active conditions on an actor (slug, name, value, active).

ParametersJSON Schema
NameRequiredDescriptionDefault
actorIdYesActor ID

TDQS

A4/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 safety profile is covered. The description adds behavioral context by specifying that only active conditions are listed and what output fields to expect (slug, name, value, active). 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?

A single, front-loaded sentence with zero filler. Every word contributes: the system scope, the action, the resource, and the output fields. Excellent structure.

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 single-parameter read-only lookup with no output schema, the description adequately conveys behavior and return shape. Minor details like empty-list behavior or error handling are not critical given the tool's simplicity and the annotations' coverage.

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

Parameters3/5

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

The single parameter actorId is fully described in the schema ('Actor ID'), so the description adds no extra meaning beyond the schema. It references an 'actor' but does not elaborate on the ID format or any constraints. Baseline 3 applies due to full 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 specific verb ('List'), resource ('active conditions on an actor'), system scope ('PF2e only'), and enumerates the returned fields (slug, name, value, active). Clearly distinguishes itself from sibling mutation tools like pf2e-set-condition and from generic effect-list.

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?

Provides a system-restriction clue ('PF2e only') but does not explicitly state when to prefer this tool over alternatives, nor does it mention exclusions. No guidance on when not to use it or which sibling to use instead.

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

pf2e-increase-conditionAInspect

PF2e only. Increase a valued condition by 1 (creates it at 1 if absent). Meaningful only for valued conditions.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesPF2e condition slug. Valued conditions (carry a number): clumsy, cursebound, doomed, drained, dying, enfeebled, frightened, sickened, slowed, stunned, stupefied, wounded.
actorIdYesActor ID

TDQS

A4.2/5.0
Behavior4/5

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

Annotations are minimal (all hints false, no readOnly or destructive flags), so the description carries the behavioral burden. It discloses the key side effect: 'creates it at 1 if absent', and restricts applicability via 'PF2e only' and 'valued conditions'. It does not mention error behavior for non-valued conditions, but the main mutation behavior is transparent. No contradiction with annotations (readOnlyHint=false aligns with a mutating action).

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

Conciseness5/5

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

The description is two short sentences, zero filler, and front-loads the system restriction ('PF2e only') before the action. Every phrase earns its place: the mechanism (increase by 1), the create-if-absent behavior, and the valued-condition scope are all covered.

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 mutation tool with 2 parameters and no output schema, the description covers the essential behavior: what it does, under what conditions, and how it handles absent conditions. It doesn't describe return values or failure modes, but these are less critical for a direct increment action. Given the sibling context and schema coverage, the description is nearly complete.

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

Parameters3/5

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

Schema coverage is 100%: both parameters (actorId, slug) have descriptions, and the slug enum lists valued conditions with explicit examples. The description reinforces that the operation is meaningful only for valued conditions, which is also implied by the schema's slug description. No significant added meaning 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 clearly states the operation ('Increase a valued condition by 1'), the resource (condition), and the scope ('PF2e only', 'Meaningful only for valued conditions'). It distinguishes from sibling tools like pf2e-decrease-condition, pf2e-set-condition, and pf2e-remove-condition by specifying direction (increase) and value-type restriction, so an agent can select it correctly 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 Guidelines4/5

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

The description provides clear usage context: it is for PF2e valued conditions where you want to increment by 1, and explicitly scopes to valued conditions ('Meaningful only for valued conditions'). However, it does not explicitly name alternative tools or state when not to use it (e.g., 'use pf2e-set-condition to set to a specific value'). The sibling list makes alternatives evident, so this is a clear context without explicit exclusions.

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

pf2e-list-strikesA
Read-onlyIdempotent
Inspect

PF2e only. List an actor's weapon strikes. This is the source of the strike slug used by pf2e-roll-strike / pf2e-roll-strike-damage. variants are MAP-step labels by index.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorIdYesActor ID

TDQS

A4.2/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, covering the safety profile. The description adds a specific behavioral detail: 'variants are MAP-step labels by index,' which enriches understanding of the output. It 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.

Conciseness5/5

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

The description is concise and well-structured, front-loading the core purpose ('List an actor's weapon strikes') followed by two sentences of valuable context (PF2e scope and relationship to roll tools). 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?

While there is no output schema, the description covers the key return element (strike slug and variants) and its purpose. It doesn't detail the full return structure, but for a simple listing tool with one parameter, it provides enough for an agent to call it correctly and understand the output's relevance.

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 actorId described as 'Actor ID.' The description adds no additional meaning beyond what the schema already provides, so 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 clearly states the tool's purpose: 'List an actor's weapon strikes.' It also specifies it is PF2e-specific and identifies its role as the source of the strike slug used by roll tools, distinguishing it from sibling tools that perform rolls.

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 for when to use this tool: to obtain strike slugs for pf2e-roll-strike and pf2e-roll-strike-damage. It doesn't explicitly state exclusions or alternatives, but the association with roll tools gives strong guidance on its typical use case.

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

pf2e-post-itemAInspect

PF2e only. Post any item's card to chat (description, traits, actions) without consuming or casting it. itemId is any item on the actor (from item-list).

ParametersJSON Schema
NameRequiredDescriptionDefault
itemIdYesItem ID (from item-list)
actorIdYesActor ID
showInChatNoPost to chat (default true)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only say readOnlyHint=false, so the description carries the responsibility of explaining the side effect. It does so by saying the tool posts to chat and, importantly, guarantees the item is not consumed or cast. It also clarifies the prerequisite that itemId must come from item-list and belong to the actor. The only gap is that the behavior when showInChat=false is not disclosed.

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 sentences with no filler. It front-loads the system requirement ('PF2e only'), states the core action, and immediately gives the critical constraint about not consuming or casting. Every sentence contributes useful guidance.

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 post-to-chat tool with 100% schema coverage and no output schema, the description is nearly complete: it states scope, item source, and the absence of consumption/casting. The main remaining gap is the unspecified behavior of showInChat=false, which prevents full completeness.

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, but the description adds meaningful linkage: itemId must be an item on the provided actor and should be obtained from item-list. This helps prevent the common mistake of supplying a world item or an item from another actor. The semantics of showInChat=false remain under-specified, but the default true is clear.

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 ('Post'), a specific resource ('any item's card to chat'), and defines what the card contains ('description, traits, actions'). It also distinguishes itself from related PF2e tools by explicitly stating it does so 'without consuming or casting it,' so an agent can tell it apart from pf2e-use-consumable and pf2e-cast-spell.

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: PF2e only, and the purpose is to share an item card rather than consume or cast the item. This implies when to use it versus related item-affecting tools, and it points to item-list as the source for itemId. It does not explicitly name sibling alternatives or state when not to use them, but the exclusion is clear enough.

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

pf2e-remove-conditionA
Idempotent
Inspect

PF2e only. Remove a condition from an actor. Returns removed=true when the condition is gone.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesPF2e condition slug.
actorIdYesActor ID

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover idempotency and non-destructiveness. The description adds a concrete return behavior ('Returns removed=true when the condition is gone'), which is valuable beyond the annotations. It does not contradict annotations, and while it doesn't clarify edge cases (e.g., condition not present), it adds useful 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 two short sentences with zero filler. It front-loads the scope ('PF2e only'), then the action, then the return behavior. 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 simple two-parameter removal tool, the description is nearly complete: it specifies scope, action, and return value. The main gap is not stating behavior when the condition is absent (though idempotentHint implies it's safe). Given the simplicity and existing annotations, it is adequate without being 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?

Both parameters (actorId and slug) are fully documented in the schema with descriptions and an enum for slug. The tool description does not add extra parameter-specific meaning, but since schema coverage is 100%, the baseline 3 applies. The description's use of 'condition' and 'actor' aligns with the parameter names.

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

Purpose5/5

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

The description states the exact action ('Remove a condition from an actor') and specifies the scope ('PF2e only'), clearly distinguishing it from sibling tools like pf2e-set-condition, pf2e-increase-condition, and pf2e-decrease-condition. The return-value note adds further precision.

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 clear context (PF2e system, remove operation) but does not explicitly compare against alternatives or state when not to use it. An agent can infer usage from the name and sibling set, but no direct guidance is provided.

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

pf2e-roll-perceptionAInspect

PF2e only. Roll a Pathfinder 2e Perception check. isCritical/isFumble reflect critical success/failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorIdYesActor ID (from actor-list/actor-filter)
showInChatNoPost the roll to chat (default false)

TDQS

A4/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false, so the tool is expected to have side effects (e.g., chat posting), but the description does not elaborate on those side effects. It does add value by disclosing that isCritical/isFumble reflect critical success/failure, which is not in the schema or annotations. Since annotations already cover the mutation aspect partially, the description provides some extra context but not rich behavioral 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?

The description is two short sentences with no filler. The key scope constraint 'PF2e only' is front-loaded, followed by the action and a note on criticals. Every phrase contributes to understanding the tool.

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

Completeness4/5

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

For a simple roll tool with two well-documented parameters and no output schema, the description covers the essential aspects: the system, the action, and the critical handling. It does not mention prerequisites beyond actorId, but those are implied by the schema. The description is slightly limited by not stating what happens when showInChat is false (which is the default), but the schema covers that. Overall, it is nearly complete for its 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?

The schema already provides descriptions for both parameters: actorId is sourced from actor-list/actor-filter, and showInChat has a clear boolean meaning. The description does not add any additional parameter-specific information beyond what the schema offers. With 100% schema coverage, the baseline of 3 is appropriate; the description does not need to compensate but also does not exceed the schema.

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

Purpose5/5

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

The description clearly states the verb 'Roll' and the resource 'Perception check', combined with 'PF2e only' which distinguishes it from the generic roll-perception and other system-specific roll tools. It also mentions isCritical/isFumble, which clarifies the expected output behavior. This makes it unambiguous what the tool does and how it differs 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 begins with 'PF2e only', providing a clear system context for when this tool is appropriate. However, it does not explicitly mention when to avoid it or name alternative tools like roll-perception or pf2e-roll-skill, leaving some inference to the agent. The condition is clear for PF2e perception checks, but not exhaustive.

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

pf2e-roll-saveAInspect

PF2e only. Roll a Pathfinder 2e saving throw (fortitude/reflex/will). isCritical = critical success, isFumble = critical failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
saveYesPF2e save: fortitude, reflex, will.
actorIdYesActor ID (from actor-list/actor-filter)
showInChatNoPost the roll to chat (default false)

TDQS

A4/5.0
Behavior3/5

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

The description adds useful result semantics by defining isCritical and isFumble, and annotations show this is not read-only/destructive. However, it does not disclose side effects such as whether the roll is posted to chat or whether any actor state changes beyond the roll result, so the description only partially carries the behavioral burden.

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

Conciseness5/5

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

Two compact sentences with the system restriction and core action front-loaded; every phrase earns its place and there is no redundant restatement 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?

For a simple three-parameter roll tool, the schema covers input details and the description covers outcome labels. An explicit note on where the result appears (chat vs direct return) would make it fully complete, but nothing critical is missing for invoking 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%, so the schema already documents actorId, save, and showInChat. The description reinforces which values save accepts (fortitude/reflex/will) but adds no new meaning beyond the enum and tool scope.

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 strong verb ('Roll'), a specific resource ('Pathfinder 2e saving throw'), and explicitly enumerates the three sub-types (fortitude/reflex/will). The 'PF2e only' opener separates it from dnd5e-roll-save and other system-specific roll 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?

'PF2e only' is an explicit system-level condition and the phrase 'saving throw' tells the agent when to select it over perception, skill, or strike rolls. It does not name a sibling alternative or give an explicit when-not-to-use, 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.

pf2e-roll-skillAInspect

PF2e only. Roll a Pathfinder 2e skill check. isCritical = critical success, isFumble = critical failure. Use actor-list/actor-get first for actorId.

ParametersJSON Schema
NameRequiredDescriptionDefault
skillYesPF2e skill slug. Lore skills are not supported.
actorIdYesActor ID (from actor-list/actor-filter)
showInChatNoPost the roll to chat (default false)

TDQS

A4/5.0
Behavior3/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 explains critical outcomes (isCritical/isFumble) but does not disclose side effects like chat posting (only the schema mentions showInChat) or whether the roll modifies any state. The behavior of a dice roll is implied but not fully specified.

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 plus a terse critical-success/failure mapping. Every sentence earns its place, and the 'PF2e only' scoping 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?

No output schema exists, so the description should explain return values. It hints at the result via isCritical/isFumble but does not specify the full return shape (e.g., dice total, success/failure). For a simple roll tool this is acceptable, though more detail would be helpful.

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 already has 100% coverage, so baseline is 3. The description adds value by instructing how to obtain actorId via actor-list/actor-get, which clarifies the intended workflow beyond the schema's generic 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?

States a specific verb and resource: 'Roll a Pathfinder 2e skill check.' It clearly distinguishes from sibling roll tools (save, strike, perception) by naming the skill check domain, and the 'PF2e only' qualifier prevents cross-system confusion.

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?

Provides a prerequisite ('Use actor-list/actor-get first for actorId') but does not explicitly contrast with alternatives like pf2e-roll-save or pf2e-roll-strike. The tool name implies the context, but the description leaves the choice of roll type to the agent's inference.

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

pf2e-roll-strikeAInspect

PF2e only. Roll a weapon strike (attack). Get the slug from pf2e-list-strikes first. mapIncrease applies the multiple attack penalty: 0 (none), 1 (−5/−4 agile), 2 (−10/−8 agile).

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesStrike slug from pf2e-list-strikes
actorIdYesActor ID
showInChatNoPost the roll to chat (default false)
mapIncreaseNoMAP step: 0, 1, or 2 (default 0)

TDQS

A4.2/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false and destructiveHint=false, so the description is not required to repeat those. It adds the MAP penalty mechanics and the PF2e scope, but does not disclose side effects like chat posting (though showInChat parameter hints at it) or the nature of the result. This is adequate but not rich.

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

Conciseness5/5

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

The description is two sentences: it front-loads the primary purpose, then provides the prerequisite and MAP penalty details. No filler or redundant information; every clause earns its place.

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

Completeness4/5

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

For a roll tool with 4 parameters and no output schema, the description covers the core behavior, prerequisite, and MAP penalty mechanics. It omits explicit return-value details and chat-posting behavior, but these are partially inferable from the schema and typical roll semantics. Overall, it is sufficiently complete 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% with all parameters described, so the baseline is 3. The description adds value by explaining the slug origin and giving explicit MAP penalty values with agile modifiers, which goes beyond the schema's brief 'MAP step: 0, 1, or 2'.

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 ('roll a weapon strike') and resource (weapon strike), explicitly scopes it to PF2e, and references a prerequisite sibling (pf2e-list-strikes) for obtaining the slug. This clearly differentiates it from other roll tools like pf2e-roll-strike-damage and pf2e-roll-save.

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 a direct prerequisite ('Get the slug from pf2e-list-strikes first') and details the mapIncrease values, which is essential for correct usage. However, it does not explicitly state when not to use it (e.g., for damage rolls) or name alternatives, though the sibling list makes this inferable.

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

pf2e-roll-strike-damageAInspect

PF2e only. Roll damage for a weapon strike. Get the slug from pf2e-list-strikes. Set critical=true for critical damage. Damage rolls carry no isCritical/isFumble flags.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesStrike slug from pf2e-list-strikes
actorIdYesActor ID
criticalNoRoll critical damage (default false)
showInChatNoPost the roll to chat (default false)

TDQS

A4.5/5.0
Behavior4/5

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

The description adds a meaningful behavioral note beyond the annotations: 'Damage rolls carry no isCritical/isFumble flags.' This helps an agent avoid misinterpreting roll metadata. The annotations provide minimal signal (all hints false), so this extra disclosure is valuable, though it does not describe chat-side effects or return payload.

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

Conciseness5/5

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

Three short sentences with no filler. The PF2e scope is front-loaded, followed by the action, required input source, optional flag, and a useful caveat. 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 roll tool with no output schema, the description covers the essential call path: required slug source, critical behavior, and the lack of status flags on damage rolls. The schema already documents actorId and showInChat defaults, so nothing critical is missing for an agent to call 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 coverage is 100%, so the baseline is 3. The description enriches the slug parameter by pointing to pf2e-list-strikes as the source, which is not in the schema. It also clarifies the critical parameter's effect, reinforcing but adding little beyond the schema's own 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 names a specific verb and resource ('Roll damage for a weapon strike'), scopes it to PF2e, and distinguishes it from sibling pf2e-roll-strike by focusing on damage rather than the attack roll. It also tells the agent where to get the required slug, so the tool's role 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 description gives clear operational guidance: obtain the slug from pf2e-list-strikes and set critical=true for critical damage. It does not explicitly enumerate when to prefer this over pf2e-roll-strike, but the 'damage' wording plus the sibling name makes the intended usage evident.

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

pf2e-set-conditionA
Idempotent
Inspect

PF2e only. Apply a condition to an actor. For valued conditions, value is the EXACT value to set (e.g. frightened=2). For binary conditions, value is ignored. Omit value to just apply.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesPF2e condition slug. Valued conditions (carry a number): clumsy, cursebound, doomed, drained, dying, enfeebled, frightened, sickened, slowed, stunned, stupefied, wounded.
valueNoExact value for valued conditions (positive integer)
actorIdYesActor ID

TDQS

A4.5/5.0
Behavior4/5

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

Annotations provide readOnlyHint=false and idempotentHint=true, and the description adds meaningful behavioral detail: value is exact for valued conditions, ignored for binary conditions, and omitting value applies without a specific number. This goes beyond the annotations, though the meaning of omitting value for a valued condition is slightly ambiguous.

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, purposeful sentences. 'PF2e only' is front-loaded, the core action is stated first, and 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.

Completeness4/5

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

For a simple 3-parameter tool with no output schema, the description plus schema covers invocation well. The only minor gap is not clarifying what 'just apply' does for valued conditions, but the core semantics are clear enough for correct use.

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 adds interpretive value by explaining the valued/binary distinction, the exact-set semantics, and the omission behavior. This meaningfully exceeds what the schema enum and parameter descriptions provide.

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

Purpose5/5

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

The description states a specific verb and resource ('Apply a condition to an actor') and scopes it to PF2e. It differentiates itself from sibling tools like pf2e-increase-condition, pf2e-decrease-condition, and pf2e-remove-condition by emphasizing that value is the 'EXACT value to set' and supporting simple application when omitted.

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 guidance for valued vs binary conditions and explains when to omit value. However, it does not explicitly route to sibling alternatives (e.g., 'to increment use pf2e-increase-condition'), so the when-not-to-use 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.

pf2e-use-consumableAInspect

PF2e only. Use a consumable item (potion, scroll, etc.). itemId must be a "consumable" item — find it via item-list. Always posts a card to chat.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemIdYesItem ID of a consumable (from item-list)
actorIdYesActor ID
quantityNoHow many to use (positive integer, default 1)

TDQS

A4/5.0
Behavior3/5

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

It adds a useful behavioral detail beyond annotations: 'Always posts a card to chat.' However, it doesn't state whether the item's quantity is decremented or the item is destroyed, which is central to consuming an item. The annotations signal mutation via readOnlyHint=false, but the description could be more explicit about the mechanical effect.

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: system restriction, action, itemId constraint, and chat side effect each earn their place. No filler or redundant elaboration.

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 three-parameter tool with no output schema and minimal annotations, the description covers the essentials: system, item type, lookup path, and a side effect. It omits explicit notes about quantity decrement or permission requirements, which prevents a perfect score.

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 itemId, actorId, and quantity. The description reinforces that itemId must be consumable and found via item-list, but this mostly repeats schema information rather than adding new parameter-level 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 'PF2e only' to scope the system, then names a specific action and resource: 'Use a consumable item (potion, scroll, etc.)'. The consumable constraint differentiates it from spell-casting or item-posting siblings like pf2e-cast-spell and pf2e-post-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 gives clear context: PF2e only, itemId must be a consumable, and item-list is the source for finding one. It doesn't explicitly name alternative tools for non-consumable actions, but the consumable requirement is a clear exclusion criterion.

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

roll-diceInspect

Roll arbitrary dice for custom checks, random tables or DM-specified rolls; D&D 5e mechanics have their own tools (dnd5e-roll-skill, dnd5e-roll-save, dnd5e-roll-attack, dnd5e-roll-damage, dnd5e-item-use). isCritical / isFumble follow the KEPT d20: plain 1d20, advantage 2d20kh1, disadvantage 2d20kl1 (a 20 on the discarded die does not count). Module v8.5.0+.

ParametersJSON Schema
NameRequiredDescriptionDefault
formulaYesDice formula: "1d20+5", "2d6", "4d6kh3" (keep highest 3), "2d20kh1" (advantage), "2d20kl1" (disadvantage)
roll-perceptionInspect

Roll a Perception check for an actor (D&D 5e worlds; same as dnd5e-roll-skill with skill prc). In Pathfinder 2e worlds use pf2e-roll-perception instead. Results appear in Foundry chat. Never both advantage and disadvantage (module 8.13+).

ParametersJSON Schema
NameRequiredDescriptionDefault
actorIdYesActor ID (from actor-list/actor-filter)
advantageNo
disadvantageNo
roll-table-createAInspect

Create a new roll table with results. Specify a dice formula and result entries with ranges. Example: formula "1d6" with 6 results having ranges [1,1], [2,2], ..., [6,6].

ParametersJSON Schema
NameRequiredDescriptionDefault
imgNoTable icon path
nameYesTable name
folderNoFolder ID to place table in
formulaNoDice formula (e.g., "1d6", "1d100", "2d6"). Default: "1d20"
resultsNoArray of result entries with text, range [low, high], optional weight
descriptionNoHTML description of the table
displayRollNoShow roll in Foundry chat (default: true)
replacementNoDraw with replacement? true = results can repeat (default: true)

TDQS

A4/5.0
Behavior3/5

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

Annotations declare it is not read-only, and the description's 'Create' correctly signals a mutation. However, the description does not add behavioral context beyond that, such as required permissions, whether creation fails if the name already exists, or what the response contains. With minimal annotation coverage, the description carries some burden but only partially fulfills 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?

The description is two sentences with zero waste. The core purpose and a useful example are front-loaded, making it immediately actionable. Every phrase contributes meaning.

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 creation tool with 8 parameters and no output schema, the description, combined with the schema, provides sufficient detail to call the tool correctly. It includes a concrete usage scenario. It does not mention defaults (e.g., formula defaults to '1d20') but the schema covers these, so the description is arguably 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 covers all 8 parameters with descriptions (100% coverage), meeting the baseline of 3. The description adds a concrete example of the 'formula' and 'results' with range pairs, clarifying the format beyond generic schema text, which justifies 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 clearly states the verb (create) and resource (roll table) and adds specifics about results and dice formula. It is instantly distinguishable from sibling tools like roll-table-delete, roll-table-get, and roll-table-update, which have 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 Guidelines3/5

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

The description implies usage (when you want to create a new roll table) but does not explicitly contrast with alternatives like roll-table-update for existing tables. No exclusion criteria or context for when to use one over another is provided, leaving it to the agent to infer.

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

roll-table-deleteA
Destructive
Inspect

Delete a roll table. This action cannot be undone!

ParametersJSON Schema
NameRequiredDescriptionDefault
tableIdYesRoll table ID to delete

TDQS

A4/5.0
Behavior4/5

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

The description adds 'This action cannot be undone!' which goes beyond the annotation destructiveHint:true by specifying irreversibility. This is valuable context that reinforces the permanent nature of the deletion, though it doesn't discuss other potential side effects like dependencies or permission requirements.

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

Conciseness5/5

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

The description is a single, concise sentence that front-loads the action and includes the key warning. There is no wasted wording, and the structure is optimal for quick comprehension.

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, one-parameter delete operation with a clear annotation (destructiveHint:true), the description is sufficient. It communicates the action and irreversibility, and no output schema exists to explain. Minor gaps like side effects or prerequisites are not critical for this tool.

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 the single parameter tableId, so the schema already documents it fully. The description adds no additional parameter-specific context, which is acceptable given the complete 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 clearly states the verb 'Delete' and the resource 'roll table', which unambiguously distinguishes it from sibling tools like roll-table-create, roll-table-get, and roll-table-update. It is specific and immediately understandable.

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 (you use it to delete a roll table) but provides no explicit guidance on when to choose this over alternatives or any exclusions. For a simple delete operation, the intent is obvious, but the guidance is minimal and relies on inference.

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

roll-table-getA
Read-onlyIdempotent
Inspect

Get full details of a roll table including all results with ranges and weights. Use roll-table-list FIRST to find the table ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableIdYesRoll table ID (from roll-table-list)

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 valuable behavioral context beyond annotations by specifying exactly what the response includes ('all results with ranges and weights'), which is not present in the schema or annotations. This is a meaningful addition without contradicting any 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?

The description is two sentences: the first clearly states the purpose, and the second provides a necessary usage instruction. It is front-loaded with the core function and has zero filler or repetition. 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 simple read-only tool with a single parameter, no output schema, and annotations covering safety, the description is complete. It tells the agent what the tool does, what data it returns, and how to obtain the required ID. 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.

Parameters3/5

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

The schema description for tableId is 100% covered ('Roll table ID (from roll-table-list)'), and the tool description reinforces the same prerequisite. While the description does not add new semantic meaning beyond the schema, it reiterates the workflow. With high schema coverage, the baseline of 3 is appropriate; the description provides marginal but not substantial added value for parameter understanding.

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

Purpose5/5

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

The description states a specific action ('Get full details of a roll table') and resource, and distinguishes itself by specifying the content ('including all results with ranges and weights'). It also implies differentiation from roll-table-list and roll-table-roll by focusing on details rather than listing or rolling. The prerequisite to use roll-table-list is explicit, which further clarifies 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 description provides clear context for when to use this tool by instructing the agent to call roll-table-list FIRST to obtain the table ID, establishing a workflow. It does not explicitly state when not to use it (e.g., for rolling, use roll-table-roll), but the context is unambiguous enough for an agent to infer the correct choice among siblings.

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

roll-table-listA
Read-onlyIdempotent
Inspect

List all roll tables in the world. Roll tables provide random outcomes: encounters, loot, weather, NPC traits. Use roll-table-get to see full details, roll-table-roll to draw a result.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/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 the safety profile. The description adds useful context about what roll tables are and the 'all' scope, but does not disclose details like response format or ordering. For a simple list tool this is acceptable but not exceptional.

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 function, the second defines the domain context, and the third routes to sibling tools. 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 zero-parameter list tool with annotations covering safety and no output schema, this description is complete enough. It explains what roll tables are, what the tool does, and how to follow up with related tools.

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

Parameters4/5

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

The tool has zero parameters, so the baseline is 4. The description provides domain context about roll tables but is not required to explain parameter semantics since 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?

States a specific verb ('List') and resource ('all roll tables in the world'), clearly distinguishing it from siblings like roll-table-get and roll-table-roll. The definition is unambiguous and immediately tells an agent what operation this tool performs.

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 names alternatives and when to use them: 'Use roll-table-get to see full details, roll-table-roll to draw a result.' This provides clear routing guidance beyond the tool's own function.

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

roll-table-resetA
Idempotent
Inspect

Reset all drawn results on a roll table, making all entries available again. Only relevant for tables with replacement=false.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableIdYesRoll table ID

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already state readOnlyHint=false and destructiveHint=false, so the agent knows this is a mutation but not destructive. The description adds behavioral meaning by stating the effect ('making all entries available again') and the precondition ('only relevant for tables with replacement=false'). It doesn't discuss permanent changes to table entries or side effects on past rolls, but for a reset operation with idempotentHint=true, the key behavioral facts are sufficiently disclosed.

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 outcome; the second gives the only relevant condition. Every word earns its place and the content 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 one-parameter mutation with idempotentHint=true and destructiveHint=false, the description covers the action, the condition of relevance, and the intended effect. It doesn't describe the return value or whether the reset also clears historical results, but those are minor for an idempotent reset operation and no output schema is expected. The sibling list confirms no other roll-table reset tool exists, so the context is sufficiently complete.

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

Parameters3/5

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

Schema coverage is 100% and the only parameter (tableId) is described as 'Roll table ID' in the schema. The description doesn't add meaning beyond that identifier, but with full schema coverage the baseline is 3. There is no additional parameter nuance needed since the single parameter's semantics are already clear from schema and 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 names a specific verb ('Reset') and resource ('drawn results on a roll table'), and distinguishes the tool's scope from possible sibling operations like roll-table-roll or roll-table-update. It also clarifies the only-relevant-when condition (replacement=false), which makes the purpose unambiguous.

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

Usage Guidelines4/5

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

The description states the primary when-to-use condition: resetting drawn results when replacement=false. It doesn't explicitly name sibling alternatives or say when NOT to use it, but the condition 'Only relevant for tables with replacement=false' is a clear usage boundary. A small gap is not identifying the sibling that handles replacement=true behavior (roll-table-roll), but the guidance is still clear.

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

roll-table-rollAInspect

Roll on a table and get random result. Uses table.draw() — marks result as drawn (for no-replacement tables) and shows in Foundry chat. Use roll-table-list to find the table ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableIdYesRoll table ID
displayChatNoShow result in Foundry chat (default: true)

TDQS

A4.2/5.0
Behavior4/5

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

The description discloses the key side effect beyond the annotations: it 'marks result as drawn (for no-replacement tables)' and 'shows in Foundry chat.' This is valuable because readOnlyHint is false and an agent needs to know the call mutates table state. There is no contradiction with destructiveHint=false, since marking a result drawn is not destructive deletion.

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 wasted words: the core action, the side-effect behavior, and the prerequisite are each clearly and concisely stated. The description is front-loaded with the primary purpose.

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 two-parameter tool with full schema coverage, the description covers the action, side effects, and prerequisite. There is no output schema, but the description adequately conveys that the result is a random table result. It could mention edge cases like an exhausted no-replacement table, but that is minor given roll-table-reset exists as a sibling.

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 parameters already have clear descriptions: tableId is the 'Roll table ID' and displayChat controls chat display with a default. The description adds a small hint about finding tableId via roll-table-list, but otherwise does not enrich parameter 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?

States a specific verb and resource: 'Roll on a table and get random result.' It also distinguishes itself from sibling roll-table tools by referencing table.draw() and the Foundry chat display, so an agent can tell it apart from roll-table-create/get/list/reset/update.

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?

Gives clear usage context: use this when you want a random result from a table. It explicitly provides the prerequisite step, 'Use roll-table-list to find the table ID,' which is practical and actionable. It does not explicitly name alternatives or when-not-to-use cases, but the context is sufficient for selection.

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

roll-table-updateAInspect

Update a roll table's properties (name, formula, replacement mode, etc.). Does not modify individual results.

ParametersJSON Schema
NameRequiredDescriptionDefault
imgNoNew icon path
nameNoNew table name
formulaNoNew dice formula
tableIdYesRoll table ID to update
descriptionNoNew description (HTML)
displayRollNoShow roll in chat
replacementNoNew replacement mode

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate this is not read-only (readOnlyHint=false) and not destructive (destructiveHint=false), and the description's 'Update' aligns with that. The description adds a specific behavioral trait: 'Does not modify individual results', which clarifies the scope of the mutation. No additional side effects or permissions are mentioned, but the given annotations cover the safety profile sufficiently.

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

Conciseness5/5

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

The description is a single, concise sentence that front-loads the action and key scope, and adds a crucial exclusion at the end. There is no fluff or redundancy; every part 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 simple update tool with full schema coverage, an output schema absent, and annotations covering the safety profile, the description provides the essential facts: what it updates and what it does not. It could explicitly mention partial-update behavior (only provided fields change), but that is a minor gap. Overall, it is sufficient 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%, so every parameter already has a description in the schema. The description adds only a brief mention of example fields ('name, formula, replacement mode, etc.'), which doesn't provide new semantic meaning beyond what the schema already contains. Since the schema does the heavy lifting, a 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 clearly states the verb 'Update' and the resource 'roll table's properties', listing example fields (name, formula, replacement mode). It also explicitly distinguishes itself by stating 'Does not modify individual results', which differentiates it from other roll-table tools like roll-table-roll or roll-table-reset. This makes the purpose unambiguous.

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

Usage Guidelines4/5

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

The description provides clear context for when to use it (updating properties) and includes an exclusion ('Does not modify individual results') that hints at what it is not for. However, it does not explicitly name alternative tools for modifying results or resetting, so guidance on alternatives is only implicit. Still, the boundary is clear enough.

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

scene-activateA
Idempotent
Inspect

Switch the active scene in Foundry VTT. All players will see the new scene. Use scene-list to find available scenes and their IDs. Only one scene can be active at a time.

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneIdYesScene ID to activate (use scene-list to find)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate a mutation (readOnlyHint=false) with idempotent and non-destructive behavior. The description adds valuable behavioral context beyond annotations: 'All players will see the new scene' and 'Only one scene can be active at a time,' which implies deactivating the previously active scene. This is meaningful side-effect disclosure.

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

Conciseness5/5

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

Three sentences, each earning its place: the action, the player-visible side effect, and the ID lookup instruction. The most important information is front-loaded, with no redundant or filler content.

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 one-parameter activation tool with supportive annotations, the description covers the core action, the side effect, the lookup prerequisite, and the exclusivity constraint. It does not mention return values or error cases, but those are not essential for correct invocation given the tool's simplicity and the absence of an output schema.

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

Parameters3/5

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

The input schema has 100% description coverage, with sceneId described as 'Scene ID to activate (use scene-list to find)'. The tool description repeats the same guidance ('Use scene-list to find available scenes and their IDs') without adding new parameter-level semantics. Baseline 3 is appropriate since the schema already fully documents 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 and resource: 'Switch the active scene in Foundry VTT.' It also clarifies the exclusive nature ('Only one scene can be active at a time') and the player-visible effect, clearly distinguishing it from sibling tools like scene-list, scene-get, and scene-set-door-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 provides explicit guidance to use scene-list to find available scenes and their IDs, which is the key prerequisite for calling this tool. It implies the correct workflow (list first, then activate) but does not explicitly mention when not to use this tool or name alternative tools other than scene-list.

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

scene-get
Read-onlyIdempotent
Inspect

Get full scene details: tokens (HP, AC, conditions, grid positions), walls, lights, notes, regions. includeMap (default true) appends an ASCII tactical map — walls, doors, numbered tokens with a legend — for spatial reasoning; false when you only need the lists. includeScreenshot=true adds a canvas screenshot (~100-500KB) for terrain, art and ambiance the map cannot convey — first view, not every turn. sceneId omitted = the active scene (scene-list has the IDs).

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneIdNoScene ID (omit for active scene)
includeMapNoAppend the ASCII tactical map (default true).
includeScreenshotNoInclude canvas screenshot (~100-500KB). Recommended on first scene view or when visual context is needed. Skip during combat rounds to save context.
scene-listA
Read-onlyIdempotent
Inspect

List all scenes in the world with id, name, active status, and background image path. Use to find scene IDs for scene-get or scene-activate. The active scene is where tokens and combat currently happen.

ParametersJSON Schema
NameRequiredDescriptionDefault

No 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. The description adds useful behavioral context beyond the annotations by stating that the active scene is where tokens and combat currently happen, and by listing the returned fields. There is no contradiction between description and 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 concise sentences with no filler. The first sentence states the operation and return values, and the second sentence provides the usage purpose, making the most important information 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 simple, parameterless read-only list tool, the description is complete: it identifies what is returned, why the tool should be used, and what the active scene concept means. Annotations cover safety and idempotency, and no output schema is needed because the returned fields are explicitly listed.

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 carries no parameter documentation burden. The schema coverage is 100% because the schema is empty, matching the baseline for a no-parameter tool.

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: 'List all scenes in the world' and enumerates the exact fields returned (id, name, active status, background image path). It also names the downstream tools scene-get and scene-activate, giving the tool a clear purpose distinct from those 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 an explicit use case: 'Use to find scene IDs for scene-get or scene-activate.' It also clarifies the meaning of the active scene. It does not explicitly list when not to use it, but for a parameterless list tool this is a minor gap.

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

scene-set-door-state
Idempotent
Inspect

Open, close, or lock a door. Wall IDs: scene-get → walls[] with door=1 (normal) or door=2 (secret). States: 0=closed, 1=open, 2=locked. A locked door: scene-set-door-state(wallId, 0), then token-move with canOpenDoors=true; secret doors never open through token-move — set their state here.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateYesDoor state: 0=closed, 1=open, 2=locked
wallIdYesWall ID of the door (from scene-get → walls[].id where door >= 1)
sceneIdNoScene ID (uses active scene if omitted)
token-createInspect

Place a token on the scene for an actor. Coordinates are pixels (top-left corner of the grid cell): pixel = gridCoord * gridSize; scene-get gives gridSize, actor-list or actor-filter the actorId.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX position in pixels
yYesY position in pixels
scaleNoToken scale multiplier (default 1)
hiddenNoHide token from players
actorIdYesActor ID to create token for (use actor-list to find)
sceneIdNoScene ID (uses active scene if omitted)
rotationNoRotation in degrees (0-360)
actorLinkNotrue = shares the actor, false = independent copy (module 8.14+)
elevationNoElevation in game units (for flying, multi-level)
token-deleteA
Destructive
Inspect

Remove a token from the scene. Use token-list to find tokenId. This removes the token from the map, not the actor from the world.

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneIdNoScene ID (uses active scene if omitted)
tokenIdYesToken ID (use token-list to find)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already provide destructiveHint=true and readOnlyHint=false, so the description doesn't need to restate destructiveness. It adds useful context beyond annotations: the scope of deletion (map vs. world) and the dependency on token-list for finding the ID. This helps the agent anticipate the precise side effect.

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 deliver the core action, a prerequisite, and a crucial scope clarification with zero filler. The information 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?

For a simple destructive operation with two parameters, the description, combined with the annotations and 100% schema coverage, fully covers what the agent needs: what is removed, how to find the tokenId, and that sceneId is optional via the schema. A no-output-schema delete tool needs no return-value documentation.

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 parameters are already documented clearly in the input schema. The description reinforces that tokenId comes from token-list but adds no new semantic detail beyond the 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 verb ('Remove') and resource ('a token from the scene'), and explicitly clarifies that this removes the token from the map, not the actor from the world, distinguishing it from the sibling actor-delete tool. The purpose is unambiguous and immediately understandable.

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 a concrete prerequisite ('Use token-list to find tokenId') and the scope clarification ('not the actor from the world') implicitly warns against using this tool when the intent is to delete the underlying actor. It doesn't name the alternative tool explicitly, but the guidance is sufficient for correct selection among siblings.

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

token-list
Read-onlyIdempotent
Inspect

List all tokens on a scene with positions, HP, AC, conditions, disposition and actorLink. HP is read from the token (not the master Actor) — correct for unlinked tokens after damage. warning unlinked_character_token = a player character placed as an unlinked copy; fix it with token-update actorLink true, not by editing the actor (module 8.14+). Omit sceneId for the active scene. Returns the token IDs for token-move, token-update, token-delete.

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneIdNoScene ID (omit for active scene)
token-moveInspect

Move a token to pixel coordinates (top-left corner; pixel = gridCoord * gridSize); token-list gives tokenId. Pathfinding routes around walls and closed doors; pathCost (cells) reports a detour — pathCost * gridDistance > speed means more than one turn; Large+ tokens need wide corridors. Closed doors count as walls unless the user asks to open them (canOpenDoors=true; doorsOpened[] lists the walls). Locked (ds=2) and secret (door=2) doors are impassable: scene-set-door-state first.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesNew X position in pixels
yYesNew Y position in pixels
animateNoAnimate movement (default: true)
tokenIdYesToken ID (use token-list to find)
canOpenDoorsNoOpen closed doors along the path. Only when the user explicitly asks; default false.
token-updateInspect

Update token properties: visibility, elevation, rotation, actorLink. Use token-list to find tokenId. Position is NOT changed here — use token-move (pathfinding, door handling) to relocate a token.

ParametersJSON Schema
NameRequiredDescriptionDefault
hiddenNoShow/hide from players
tokenIdYesToken ID (use token-list to find)
rotationNoRotation in degrees (0-360)
actorLinkNotrue links the token to its actor (fixes an unlinked player character); module 8.14+
elevationNoElevation in game units
ui-notifyAInspect

Show a toast notification in the Foundry UI of every connected client (ui.notifications): a transient banner, not a chat message (use chat-send for chat). type controls the colour/severity (default info). permanent keeps it on screen until dismissed.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoSeverity/colour: info (default), warn, error, success.
messageYesNotification text.
permanentNoWhen true, the notification stays until dismissed instead of auto-hiding.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the description doesn't need to restate those. The description adds useful behavioral context: the notification is transient by default, appears for every connected client, and 'permanent' keeps it on screen until dismissed. It also clarifies that 'type' controls colour/severity. This goes beyond the annotations 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?

The description is two sentences with zero waste. It front-loads the core purpose, then adds the key distinction from chat-send and the parameter semantics. 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?

For a simple notification tool with 3 parameters, full schema coverage, and no output schema, the description is complete enough. It covers the tool's scope, the key alternative, and the behavioral effect of the parameters. The only minor gap is that it doesn't mention whether the notification is visible to the GM only or all players, but 'every connected client' already implies broad visibility.

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 (message, type, permanent). The description adds a little extra meaning by explaining that 'type' controls colour/severity and that 'permanent' keeps it on screen until dismissed, but it doesn't add substantial new semantics beyond the 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 verb ('Show a toast notification'), a specific resource ('in the Foundry UI of every connected client (ui.notifications)'), and explicitly distinguishes itself from chat-send ('not a chat message'). This clearly differentiates it from sibling tools like chat-send and chat-update.

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 ('Show a toast notification...') and when not to ('not a chat message (use chat-send for chat)'). It also explains the effect of the 'permanent' parameter, giving clear context for choosing this tool over alternatives.

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

uuid-resolve
Read-onlyIdempotent
Inspect

Resolve any ABSOLUTE Foundry UUID to its full document: world ("Actor."), compendium ("Compendium....") and embedded ("Actor..Item.", journal pages). Returns core fields plus the raw document data. Requires bridge module 8.11.0+.

UUIDs are NOT guessed — take them from the uuid fields of compendium-browse, compendium-page-search, the compendium filter tools, or reference fields inside a resolved document (a class item's system.advancement[].configuration.items[].uuid). Walk a reference graph one hop per call: class → granted features → their effects; page found by compendium-page-search → its full text. Relative UUIDs (starting with ".") are not supported; a missing or malformed UUID returns "Document not found for UUID: ".

ParametersJSON Schema
NameRequiredDescriptionDefault
uuidYesAbsolute Foundry UUID, e.g. "Actor.abc123", "Compendium.dnd5e.classes.Item.xyz", "Actor.abc.Item.def".
world-infoA
Read-onlyIdempotent
Inspect

Get world overview: game system, content counts, compendium list. Call FIRST when starting a session to understand available content. Then use actor-list, journal-list, compendium-list to explore specific content.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value by specifying the kind of information returned (game system, content counts, compendium list), which is useful 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 two sentences with no wasted words. The first sentence front-loads the purpose and content, and the second sentence provides usage context and alternatives. 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 overview tool with no output schema, the description is complete. It states what the tool provides, when to call it, and how to proceed afterward. 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.

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 coverage is 100% (empty properties object). Per baseline for 0-parameter tools, a score of 4 is appropriate. The description adds no parameter details because none exist, and 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 states a specific verb ('Get') and resource ('world overview') and enumerates exactly what it returns: game system, content counts, compendium list. It also distinguishes itself from sibling list tools by positioning it as an overview rather than a detailed explorer.

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 instructs to call this tool FIRST when starting a session and then names the specific alternatives (actor-list, journal-list, compendium-list) for exploring specific content. This provides clear when-to-use and 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.

world-item-createInspect

Create an item in the world's Items Directory (game.items) — not an actor's inventory (item-create): shared loot, master copies, items independent of any actor. folder is a folder ID (folder-list); responses return the folder NAME. type for D&D 5e: weapon, equipment, consumable, tool, container, loot, spell, feat, background, race, class, subclass, feature — other systems differ, unknown types are rejected. system is the dnd5e blob (rarity, weight, price, identified, attunement); world-item-get shows the shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
imgNoImage path or URL
nameYesItem name
typeYesD&D 5e item type. weapon/equipment/consumable/tool/container/loot/spell/feat/background/race/class/subclass/feature.
folderNoFolder ID (NOT name). Omit for root.
systemNoD&D 5e system data partial: rarity, weight {value,units}, price {value,denomination}, identified, attunement, etc. Foundry deep-merges with defaults.
world-item-deleteA
Destructive
Inspect

Permanently delete a world item from the Items Directory. Cannot be undone — Foundry has no item undo. Use world-item-filter or world-item-get FIRST to confirm the right id.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemIdYesWorld item ID to delete

TDQS

A4.5/5.0
Behavior5/5

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

The annotations already mark destructiveHint=true ratio, but the description goes further by stating 'Cannot be undone' and explaining 'Foundry has no item undo.' This directly informs the agent about the irreversible consequence beyond what the annotation flags.

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 operation, the irreversibility warning, and the prerequisite verification step. Every sentence earns its place, and the most critical 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 simple one-parameter delete tool with destructive annotations already present, the description fully covers what the tool does, why caution is needed, and how to use it safely. No output schema is necessary for a deletion operation.

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 itemId described as 'World item ID to delete', so the schema already documents the only parameter. The description adds context about confirming the ID but no additional semantic detail about the parameter format or 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?

States a specific verb ('delete') and resource ('world item from the Items Directory'), making the operation unambiguous. It also adds a key qualifier ('Permanently') and distinguishes the scope from generic item operations 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?

Explicitly instructs the agent to use world-item-filter or world-item-get FIRST to confirm the correct ID, which is clear actionable guidance for safe use. It does not mention alternatives or exclusions, so it falls just 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.

world-item-filter
Read-onlyIdempotent
Inspect

Search the world's Items Directory (game.items) with D&D 5e structured filters (dnd5e worlds only). Returns paginated {id, name} entries; world-item-get gives full data. Filters combine with AND, values inside one array with OR. NOT an actor's inventory (item-list), NOT compendiums (dnd5e-compendium-filter-items).

CRITICAL DATA FORMATS

  • rarity is camelCase: veryRare (not "very rare"). spellSchool is the full word (evocation).

  • Weight in lb, price in gp. spellLevel 0..9 (0 = cantrip), spells only.

  • Ranges are {min?, max?}, inclusive. Items lacking a filtered field are excluded (rarity + spellLevel matches only rare spells).

  • limit 1..200 (default 50), offset; the response has total and hasMore.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSubstring of item name, case-insensitive.
typeNoItem types (OR).
limitNoPage size 1..200, default 50.
priceNoPrice range in gp.
folderNoFolder by id or name; recursive includes subfolders.
offsetNoSkip first N results.
rarityNoRarity (OR), camelCase: veryRare.
weightNoWeight range in lb.
identifiedNoFilter by the identified flag.
spellLevelNoSpell level 0..9 (0 = cantrip); spells only.
isContainerNoOnly containers.
spellSchoolNoSpell schools (OR), full words; spells only.
hasActivitiesNoOnly items with usable activities.
requiresAttunementNoOnly items that require attunement.
world-item-getA
Read-onlyIdempotent
Inspect

Get full ItemData for a single world item — id, uuid, name, type, image, folder NAME (read-side), and the complete system blob with rarity, weight, price, identified, attunement, damage, range, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemIdYesWorld item ID (from world-item-filter).

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, so the safety profile is covered. The description adds value by specifying the exact return payload (full ItemData with system blob fields), which is useful behavioral context beyond the annotations. However, it doesn't disclose potential error conditions (e.g., what happens if the itemId doesn't exist) or any rate limits, but for a simple read operation with strong annotations, this is adequate.

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 front-loads the core purpose ('Get full ItemData for a single world item') and then enumerates the return fields. Every word earns its place; there is no fluff or repetition. The parenthetical '(read-side)' adds a useful nuance about the folder name being the read-side representation, which is valuable without being verbose.

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 single-item read tool with one parameter, strong annotations (readOnly, idempotent, non-destructive), and no output schema, the description is nearly complete. It tells the agent what it returns, where the ID comes from, and the annotations cover safety. The only minor gap is the lack of explicit error behavior (e.g., not-found handling), but that is not critical for a read operation. The description is sufficient 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 description coverage is 100%: the only parameter, itemId, is described as 'World item ID (from world-item-filter).' The description adds a small amount of context by clarifying that the ID comes from world-item-filter, which is helpful for the agent to know how to obtain it. However, the description doesn't add much beyond the schema's own description, 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 clearly states the tool's purpose: retrieving full ItemData for a single world item. It enumerates the specific fields returned (id, uuid, name, type, image, folder NAME, and the complete system blob with examples), which distinguishes it from sibling tools like world-item-filter (which lists/filters items) and world-item-update (which modifies items). The verb 'Get' plus the resource 'world item' is specific 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 implies this is the read tool for a single world item, and the parameter description 'World item ID (from world-item-filter)' provides a clear source for the required ID, effectively guiding the agent to first use world-item-filter to obtain the ID. However, it does not explicitly state when to use this tool versus alternatives like world-item-filter or item-get, nor does it mention exclusions (e.g., 'use world-item-filter to list items'). The context is clear but not fully explicit.

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

world-item-updateInspect

Update a world item: name, image, folder, system data. folder is TRI-STATE: omit = unchanged, a string = new folder, EXPLICIT null (or clearFolder: true when the client cannot send null) = move to root. system is deep-merged — pass only the paths you change.

ParametersJSON Schema
NameRequiredDescriptionDefault
imgNoNew image path. Omit to leave unchanged.
nameNoNew name. Omit to leave unchanged.
folderNoTri-state: omit = leave alone, string = set folder ID, null = move to root.
itemIdYesWorld item ID to update
systemNoSystem-data partial. Deep-merged into existing — pass only the keys you want to change.
clearFolderNoAlternative move-to-root signal for clients that cannot send literal JSON null. When true, overrides any folder value.
world-time-advanceAInspect

Advance the in-world clock by a number of seconds (game.time.advance). Use NEGATIVE seconds to rewind. Common deltas: 6 (one combat round), 60 (a minute), 3600 (an hour), 86400 (a day). Affects time-based effects/durations for all clients. Returns the new world time.

ParametersJSON Schema
NameRequiredDescriptionDefault
secondsYesDelta in seconds. Negative rewinds the clock.

TDQS

A4.5/5.0
Behavior4/5

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

It discloses that the operation affects time-based effects/durations for all clients, which is important global side-effect context beyond the annotations. It also states the return value, which is useful because no output schema exists. The description does not contradict 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?

Four short sentences, each earning its place: the core action, negative-value behavior, useful examples, and the global side effect plus return value. 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 tool with no output schema, the description covers everything an agent needs: what the tool does, how to reverse it, common delta values, global effects, and what is returned. No important 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?

The schema already documents the seconds parameter at 100% coverage, so the baseline is 3. The description adds value by clarifying negative values rewind the clock and providing concrete common deltas for combat rounds, minutes, hours, and days.

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 (Advance) and resource (in-world clock) with a precise unit of change (seconds). It also distinguishes itself from world-time-set/get by framing the action as a relative delta rather than an absolute set.

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 primary usage clear: advance or rewind the world clock by a delta in seconds. It provides common delta values but does not explicitly contrast this tool with world-time-set or world-time-get, 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.

world-time-getA
Read-onlyIdempotent
Inspect

Get the current in-world time (game.time.worldTime) as whole seconds since the world epoch, plus the same value broken down into days / hours / minutes / seconds so no conversion is needed. Use to read the clock before world-time-advance or world-time-set.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context about the output format (whole seconds plus breakdown) and the phrase 'so no conversion is needed' clarifies the value proposition. No contradictions or missing safety disclosures.

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 function and output, the second gives usage context. Information is front-loaded and every clause earns its place.

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

Completeness5/5

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

For a parameterless, read-only getter with rich annotations, the description fully covers what an agent needs: what it returns, in what units, and when to use it. No output schema exists, but the description adequately describes the return content. Nothing essential is missing.

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

Parameters4/5

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

The tool has zero parameters, and schema description coverage is trivially 100%. There is nothing for the description to explain about parameters, and the baseline for 0-parameter tools is 4. The description does not need to add parameter-specific 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 clearly states the tool retrieves the current in-world time (game.time.worldTime) and provides it in both whole seconds and broken-down components. It also explicitly distinguishes itself from sibling tools by noting it is for reading the clock before world-time-advance or world-time-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 explicitly says 'Use to read the clock before world-time-advance or world-time-set,' giving precise context for when to invoke this tool versus its mutation siblings. This is direct and actionable.

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

world-time-setA
Idempotent
Inspect

Set the in-world clock to an ABSOLUTE value in seconds since the world epoch (game.time.set). Must be >= 0. To make a relative change use world-time-advance instead. Affects all connected clients.

ParametersJSON Schema
NameRequiredDescriptionDefault
worldTimeYesAbsolute world time in seconds (>= 0).

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already supply readOnlyHint=false, destructiveHint=false, and idempotentHint=true, so the safety profile is covered. The description adds useful behavioral context beyond annotations: 'Affects all connected clients' indicates a global-side-effect, and it reveals the underlying API call. 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?

Four short sentences, each earning its place: operation, constraint, alternative, and side-effect. The main purpose is front-loaded, and there is no filler or repetition of 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 single-parameter setter with no output schema, this is complete. It explains what the value means, the valid range, the sibling tool for relative changes, and the impact on all clients. 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.

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 worldTime as an absolute number >= 0. The description adds meaning by clarifying 'seconds since the world epoch', which specifies the reference frame, and reinforces the absolute-vs-relative distinction. This adds value over the bare 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: 'Set the in-world clock to an ABSOLUTE value in seconds since the world epoch.' It also names the underlying game.time.set function and explicitly distinguishes itself from the sibling world-time-advance, leaving no ambiguity about what the tool does.

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

Usage Guidelines5/5

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

It gives explicit when-to-use and when-not-to-use guidance: 'To make a relative change use world-time-advance instead.' This directly tells an agent that this tool is for absolute values only and routes to the correct alternative, which is exactly what usage guidelines should do.

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. 20 tool updates
    • Changedactor-update4 fields changed
      • changedInput schema / properties / actorId / description
        Previous value: -"The actor ID to update"New value: +"Actor ID (from actor-list/actor-filter)"
      • addedInput schema / properties / sceneId
        Added value: +{
        +  "description": "Scene of tokenId (default: active)",
        +  "type": "string"
        +}
      • addedInput schema / properties / tokenId
        Added value: +{
        +  "description": "Token ID (from token-list) instead of actorId: that token's own actor (module 8.14+)",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "actorId"
        -]
    • Changedcompendium-page-search3 fields changed
      • changedInput schema / properties / packIds / description
        Previous value: -"Restrict to specific JournalEntry packs. Omit to search ALL journal packs in the world."New value: +"JournalEntry packs; omit = all"
      • changedInput schema / properties / pageTypes / description
        Previous value: -"Page subtypes to include, e.g. [\"rule\"], [\"spells\"], [\"class\",\"subclass\"], [\"text\"]. Omit for all types."New value: +"Page subtypes: [\"rule\"], [\"spells\"], [\"class\",\"subclass\"]; omit = all"
      • changedInput schema / properties / query / description
        Previous value: -"Substring to find, case-insensitive. Matched against page names and (by default) page text content."New value: +"Case-insensitive substring; page names and (by default) content"
    • Addeddnd5e-apply-damage
    • Addeddnd5e-apply-healing
    • Changeddnd5e-item-activate19 fields changed
      • changedInput schema / properties / activityId / description
        Previous value: -"Specific activity ID if item has multiple"New value: +"Activity ID if several"
      • changedInput schema / properties / actorId / description
        Previous value: -"Actor ID performing the action"New value: +"Actor ID"
      • addedInput schema / properties / advantage
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / ammunition
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "const": false,
        +      "type": "boolean"
        +    }
        +  ],
        +  "description": "Ammo item ID, or false = spend none"
        +}
      • addedInput schema / properties / attackBonus
        Added value: +{
        +  "description": "One-off attack bonus: 2, \"1d4\"",
        +  "type": [
        +    "number",
        +    "string"
        +  ]
        +}
      • addedInput schema / properties / attackMode
        Added value: +{
        +  "description": "oneHanded, twoHanded, offhand, thrown, thrown-offhand",
        +  "type": "string"
        +}
      • addedInput schema / properties / attackerTokenId
        Added value: +{
        +  "description": "Act as this token of the actor (several copies)",
        +  "type": "string"
        +}
      • addedInput schema / properties / consume
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "What may be spent; omitted = the system decides",
        +  "properties": {
        +    "ammunition": {
        +      "type": "boolean"
        +    },
        +    "itemUses": {
        +      "type": "boolean"
        +    },
        +    "spellSlot": {
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / damageBonus
        Added value: +{
        +  "description": "One-off damage bonus: \"1d6\" (Sneak Attack)",
        +  "type": "string"
        +}
      • addedInput schema / properties / disadvantage
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / fastForward
        Added value: +{
        +  "description": "Skip dialogs and auto-roll (default true)",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / itemId / description
        Previous value: -"Item ID to activate (from item-list)"New value: +"Item ID (from item-list)"
      • changedInput schema / properties / spellLevel / description
        Previous value: -"Spell slot level for casting. Enables upcasting (e.g. Fireball at 5th level = 10d6). Skips slot selection dialog. If omitted, uses spell base level."New value: +"Spell slot level (upcasting); omitted = base level"
      • addedInput schema / properties / targetAcBonus
        Added value: +{
        +  "description": "Added to each target AC (cover); Midi-QOL only",
        +  "type": "number"
        +}
      • changedInput schema / properties / targetTokenIds / description
        Previous value: -"Token IDs of targets on the scene. Required for attacks — Midi-QOL needs targets to auto-resolve hits and damage"New value: +"Token IDs of the targets; required for attacks"
      • changedInput schema / properties / templatePosition / description
        Previous value: -"AoE template placement. Circle spells: x,y = center of effect. Cone/line spells: x,y = caster position, direction = angle toward targets."New value: +"AoE template: circle = effect center; cone/line = caster position + direction"
      • changedInput schema / properties / templatePosition / properties / direction / description
        Previous value: -"Direction angle in degrees (0-360). 0=right, 90=down, 180=left, 270=up. Required for cone/line spells (Cone of Cold, Lightning Bolt). Not needed for circle AoE (Fireball)."New value: +"Degrees 0-360 (0=right, 90=down); cone/line only"
      • changedInput schema / properties / templatePosition / properties / x / description
        Previous value: -"X coordinate in pixels"New value: +"X in pixels"
      • changedInput schema / properties / templatePosition / properties / y / description
        Previous value: -"Y coordinate in pixels"New value: +"Y in pixels"
    • Changeddnd5e-item-use7 fields changed
      • changedInput schema / properties / activityId / description
        Previous value: -"Specific activity ID to use if the item has multiple activities"New value: +"Activity ID if the item has several"
      • changedInput schema / properties / activityType / description
        Previous value: -"Activity type to use (e.g., \"attack\", \"save\", \"heal\", \"utility\")"New value: +"Activity type: \"attack\", \"save\", \"heal\", \"utility\""
      • changedInput schema / properties / actorId / description
        Previous value: -"The actor ID that owns the item"New value: +"Actor ID"
      • changedInput schema / properties / consume / description
        Previous value: -"Whether to consume the item (default: true for consumables)"New value: +"Consume (default true for consumables)"
      • changedInput schema / properties / itemId / description
        Previous value: -"The item ID to use. Use item-list to find item IDs."New value: +"Item ID (from item-list)"
      • changedInput schema / properties / scaling / description
        Previous value: -"Spell slot level for scaling spells"New value: +"Spell slot level"
      • changedInput schema / properties / showInChat / description
        Previous value: -"Whether to show the result in chat (default: true)"New value: +"Post to chat (default true)"
    • Changeddnd5e-roll-ability3 fields changed
      • changedInput schema / properties / ability / description
        Previous value: -"Ability code: str=Strength, dex=Dexterity, con=Constitution, int=Intelligence, wis=Wisdom, cha=Charisma"New value: +"Ability code (str, dex, con, int, wis, cha)"
      • addedInput schema / properties / advantage
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / disadvantage
        Added value: +{
        +  "type": "boolean"
        +}
    • Changeddnd5e-roll-attack2 fields changed
      • addedInput schema / properties / advantage
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / disadvantage
        Added value: +{
        +  "type": "boolean"
        +}
    • Changeddnd5e-roll-save3 fields changed
      • changedInput schema / properties / ability / description
        Previous value: -"Ability code: str=Strength, dex=Dexterity, con=Constitution, int=Intelligence, wis=Wisdom, cha=Charisma"New value: +"Ability code (str, dex, con, int, wis, cha)"
      • addedInput schema / properties / advantage
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / disadvantage
        Added value: +{
        +  "type": "boolean"
        +}
    • Changeddnd5e-roll-skill3 fields changed
      • addedInput schema / properties / advantage
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / disadvantage
        Added value: +{
        +  "type": "boolean"
        +}
      • changedInput schema / properties / skill / description
        Previous value: -"Skill code: acr=Acrobatics, ani=AnimalHandling, arc=Arcana, ath=Athletics, dec=Deception, his=History, ins=Insight, itm=Intimidation, inv=Investigation, med=Medicine, nat=Nature, prc=Perception, prf=Performance, per=Persuasion, rel=Religion, slt=SleightOfHand, ste=Stealth, sur=Survival"New value: +"Skill code, not the name: ste=Stealth, prc=Perception, per=Persuasion, prf=Performance, itm=Intimidation, slt=SleightOfHand, ani=AnimalHandling, inv=Investigation, ins=Insight, dec=Deception, rel=Religion"
    • Changedeffect-create17 fields changed
      • changedInput schema / properties / actorId / description
        Previous value: -"The actor ID to add the effect to"New value: +"Actor ID (from actor-list/actor-filter)"
      • changedInput schema / properties / changes / description
        Previous value: -"Array of attribute changes this effect applies"New value: +"Attribute changes"
      • changedInput schema / properties / changes / items / properties / key / description
        Previous value: -"The data path to modify (e.g., \"system.attributes.ac.bonus\")"New value: +"Data path, e.g. \"system.attributes.ac.bonus\""
      • changedInput schema / properties / changes / items / properties / mode / description
        Previous value: -"Change mode: 0=CUSTOM, 1=MULTIPLY, 2=ADD, 3=DOWNGRADE, 4=UPGRADE, 5=OVERRIDE"New value: +"0=CUSTOM, 1=MULTIPLY, 2=ADD, 3=DOWNGRADE, 4=UPGRADE, 5=OVERRIDE"
      • changedInput schema / properties / changes / items / properties / value / description
        Previous value: -"The value to apply (numbers as strings, e.g., \"2\")"New value: +"Value as a string (\"2\")"
      • changedInput schema / properties / disabled / description
        Previous value: -"If true, effect is added but disabled"New value: +"Add disabled"
      • changedInput schema / properties / duration / description
        Previous value: -"Effect duration (combat or time-based)"New value: +"Duration"
      • changedInput schema / properties / duration / properties / rounds / description
        Previous value: -"Duration in combat rounds"New value: +"Combat rounds"
      • changedInput schema / properties / duration / properties / seconds / description
        Previous value: -"Duration in seconds"New value: +"Seconds"
      • changedInput schema / properties / duration / properties / turns / description
        Previous value: -"Duration in combat turns"New value: +"Combat turns"
      • changedInput schema / properties / img / description
        Previous value: -"Icon path for the effect"New value: +"Icon path"
      • changedInput schema / properties / name / description
        Previous value: -"Name of the effect (e.g., \"Bless\", \"Shield of Faith\", \"Temporary Buff\")"New value: +"Effect name (\"Bless\")"
      • changedInput schema / properties / origin / description
        Previous value: -"UUID of the source (item, spell, etc.) that created this effect"New value: +"Source UUID (item, spell)"
      • addedInput schema / properties / sceneId
        Added value: +{
        +  "description": "Scene of tokenId (default: active)",
        +  "type": "string"
        +}
      • changedInput schema / properties / statuses / description
        Previous value: -"Array of status IDs this effect applies (e.g., [\"blinded\", \"deafened\"])"New value: +"Status IDs applied ([\"blinded\"])"
      • addedInput schema / properties / tokenId
        Added value: +{
        +  "description": "Token ID (from token-list) instead of actorId: that token's own actor (module 8.14+)",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "actorId",
        -  "name"
        -]New value: +[
        +  "name"
        +]
    • Changedeffect-delete5 fields changed
      • changedInput schema / properties / actorId / description
        Previous value: -"The actor ID to remove the effect from"New value: +"Actor ID (from actor-list/actor-filter)"
      • changedInput schema / properties / effectId / description
        Previous value: -"The effect ID to remove. Use effect-list to find IDs."New value: +"Effect ID (from effect-list)"
      • addedInput schema / properties / sceneId
        Added value: +{
        +  "description": "Scene of tokenId (default: active)",
        +  "type": "string"
        +}
      • addedInput schema / properties / tokenId
        Added value: +{
        +  "description": "Token ID (from token-list) instead of actorId: that token's own actor (module 8.14+)",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "actorId",
        -  "effectId"
        -]New value: +[
        +  "effectId"
        +]
    • Changedeffect-list4 fields changed
      • changedInput schema / properties / actorId / description
        Previous value: -"The actor ID to get effects from"New value: +"Actor ID (from actor-list/actor-filter)"
      • addedInput schema / properties / sceneId
        Added value: +{
        +  "description": "Scene of tokenId (default: active)",
        +  "type": "string"
        +}
      • addedInput schema / properties / tokenId
        Added value: +{
        +  "description": "Token ID (from token-list) instead of actorId: that token's own actor (module 8.14+)",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "actorId"
        -]
    • Changedeffect-toggle-status7 fields changed
      • changedInput schema / properties / active / description
        Previous value: -"Explicitly set active state (true = add, false = remove). If not specified, toggles current state."New value: +"true = add, false = remove; omitted = toggle"
      • changedInput schema / properties / actorId / description
        Previous value: -"The actor ID to toggle status on"New value: +"Actor ID (from actor-list/actor-filter)"
      • changedInput schema / properties / overlay / description
        Previous value: -"If true, shows as large overlay icon on token"New value: +"Show as the large overlay icon"
      • addedInput schema / properties / sceneId
        Added value: +{
        +  "description": "Scene of tokenId (default: active)",
        +  "type": "string"
        +}
      • changedInput schema / properties / statusId / description
        Previous value: -"The status/condition ID (e.g., \"blinded\", \"poisoned\", \"prone\")"New value: +"Status ID: \"blinded\", \"poisoned\", \"prone\", …"
      • addedInput schema / properties / tokenId
        Added value: +{
        +  "description": "Token ID (from token-list) instead of actorId: that token's own actor (module 8.14+)",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "actorId",
        -  "statusId"
        -]New value: +[
        +  "statusId"
        +]
    • Changedeffect-update15 fields changed
      • changedInput schema / properties / actorId / description
        Previous value: -"The actor ID that has the effect"New value: +"Actor ID (from actor-list/actor-filter)"
      • changedInput schema / properties / changes / description
        Previous value: -"New array of attribute changes (replaces existing changes)"New value: +"Replaces all changes"
      • changedInput schema / properties / changes / items / properties / key / description
        Previous value: -"The data path to modify"New value: +"Data path"
      • changedInput schema / properties / changes / items / properties / mode / description
        Previous value: -"Change mode: 0=CUSTOM, 1=MULTIPLY, 2=ADD, 3=DOWNGRADE, 4=UPGRADE, 5=OVERRIDE"New value: +"0=CUSTOM, 1=MULTIPLY, 2=ADD, 3=DOWNGRADE, 4=UPGRADE, 5=OVERRIDE"
      • changedInput schema / properties / changes / items / properties / value / description
        Previous value: -"The value to apply"New value: +"Value as a string"
      • changedInput schema / properties / disabled / description
        Previous value: -"Enable/disable the effect"New value: +"Enable/disable"
      • changedInput schema / properties / duration / description
        Previous value: -"New effect duration"New value: +"Duration"
      • changedInput schema / properties / duration / properties / rounds / description
        Previous value: -"Duration in combat rounds"New value: +"Combat rounds"
      • changedInput schema / properties / duration / properties / seconds / description
        Previous value: -"Duration in seconds"New value: +"Seconds"
      • changedInput schema / properties / duration / properties / turns / description
        Previous value: -"Duration in combat turns"New value: +"Combat turns"
      • changedInput schema / properties / effectId / description
        Previous value: -"The effect ID to update. Use effect-list to find IDs."New value: +"Effect ID (from effect-list)"
      • changedInput schema / properties / name / description
        Previous value: -"New name for the effect"New value: +"New name"
      • addedInput schema / properties / sceneId
        Added value: +{
        +  "description": "Scene of tokenId (default: active)",
        +  "type": "string"
        +}
      • addedInput schema / properties / tokenId
        Added value: +{
        +  "description": "Token ID (from token-list) instead of actorId: that token's own actor (module 8.14+)",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "actorId",
        -  "effectId"
        -]New value: +[
        +  "effectId"
        +]
    • Changeditem-create7 fields changed
      • removedInput schema / properties / system / properties / damage / description
        Removed value: -"Damage"
      • removedInput schema / properties / system / properties / damage / properties / base / properties / types / description
        Removed value: -"e.g. [\"slashing\"]"
      • removedInput schema / properties / system / properties / range / description
        Removed value: -"Weapon/spell range"
      • changedInput schema / properties / system / properties / range / properties / long / description
        Previous value: -"Long range (e.g. 600)"New value: +"e.g. 600"
      • changedInput schema / properties / system / properties / range / properties / reach / description
        Previous value: -"Melee reach in ft (default 5)"New value: +"reach ft"
      • removedInput schema / properties / system / properties / range / properties / units / description
        Removed value: -"ft or m"
      • changedInput schema / properties / system / properties / range / properties / value / description
        Previous value: -"Normal range (e.g. 150)"New value: +"e.g. 150"
    • Changeditem-update7 fields changed
      • removedInput schema / properties / system / properties / damage / description
        Removed value: -"Damage"
      • removedInput schema / properties / system / properties / damage / properties / base / properties / types / description
        Removed value: -"e.g. [\"slashing\"]"
      • removedInput schema / properties / system / properties / range / description
        Removed value: -"Weapon/spell range"
      • changedInput schema / properties / system / properties / range / properties / long / description
        Previous value: -"Long range (e.g. 600)"New value: +"e.g. 600"
      • changedInput schema / properties / system / properties / range / properties / reach / description
        Previous value: -"Melee reach in ft (default 5)"New value: +"reach ft"
      • removedInput schema / properties / system / properties / range / properties / units / description
        Removed value: -"ft or m"
      • changedInput schema / properties / system / properties / range / properties / value / description
        Previous value: -"Normal range (e.g. 150)"New value: +"e.g. 150"
    • Changedroll-perception2 fields changed
      • addedInput schema / properties / advantage
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / disadvantage
        Added value: +{
        +  "type": "boolean"
        +}
    • Changedtoken-create1 field changed
      • addedInput schema / properties / actorLink
        Added value: +{
        +  "description": "true = shares the actor, false = independent copy (module 8.14+)",
        +  "type": "boolean"
        +}
    • Changedtoken-update1 field changed
      • addedInput schema / properties / actorLink
        Added value: +{
        +  "description": "true links the token to its actor (fixes an unlinked player character); module 8.14+",
        +  "type": "boolean"
        +}
  2. 2 tool updates
    • Changeditem-create7 fields changed
      • changedInput schema / properties / system / properties / uses / additionalProperties
        Previous value: -falseNew value: +true
      • addedInput schema / properties / system / properties / uses / properties / max / anyOf
        Added value: +[
        +  {
        +    "type": [
        +      "number",
        +      "string"
        +    ]
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / system / properties / uses / properties / max / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • changedInput schema / properties / system / properties / uses / properties / per / description
        Previous value: -"Recovery: \"sr\", \"lr\", \"day\", \"charges\""New value: +"dnd5e 3.x"
      • addedInput schema / properties / system / properties / uses / properties / recovery
        Added value: +{
        +  "description": "[{ period: \"lr\" }]",
        +  "items": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "period": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "period"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / system / properties / uses / properties / spent
        Added value: +{
        +  "description": "dnd5e 4+: spent",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedInput schema / properties / system / properties / uses / properties / value / description
        Previous value: -"Remaining uses"New value: +"dnd5e 3.x"
    • Changeditem-update7 fields changed
      • changedInput schema / properties / system / properties / uses / additionalProperties
        Previous value: -falseNew value: +true
      • addedInput schema / properties / system / properties / uses / properties / max / anyOf
        Added value: +[
        +  {
        +    "type": [
        +      "number",
        +      "string"
        +    ]
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / system / properties / uses / properties / max / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • changedInput schema / properties / system / properties / uses / properties / per / description
        Previous value: -"Recovery: \"sr\", \"lr\", \"day\", \"charges\""New value: +"dnd5e 3.x"
      • addedInput schema / properties / system / properties / uses / properties / recovery
        Added value: +{
        +  "description": "[{ period: \"lr\" }]",
        +  "items": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "period": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "period"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / system / properties / uses / properties / spent
        Added value: +{
        +  "description": "dnd5e 4+: spent",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedInput schema / properties / system / properties / uses / properties / value / description
        Previous value: -"Remaining uses"New value: +"dnd5e 3.x"
  3. 121 tool updates
    • First observedactor-create
    • First observedactor-create-from-compendium
    • First observedactor-delete
    • First observedactor-filter
    • First observedactor-get
    • First observedactor-list
    • First observedactor-update
    • First observedcanvas-pan
    • First observedcanvas-ping
    • First observedchat-clear
    • First observedchat-delete
    • First observedchat-export
    • First observedchat-list
    • First observedchat-send
    • First observedchat-update
    • First observedcombat-add-combatant
    • First observedcombat-create
    • First observedcombat-delete
    • First observedcombat-get
    • First observedcombat-next-turn
    • First observedcombat-previous-turn
    • First observedcombat-remove-combatant
    • First observedcombat-roll-all-initiative
    • First observedcombat-roll-initiative
    • First observedcombat-set-combatant-defeated
    • First observedcombat-set-initiative
    • First observedcombat-set-turn
    • First observedcombat-start
    • First observedcombat-toggle-combatant-visibility
    • First observedcompendium-browse
    • First observedcompendium-document-get
    • First observedcompendium-document-get-raw
    • First observedcompendium-list
    • First observedcompendium-page-search
    • First observedcompendium-search
    • First observeddnd5e-compendium-filter-actors
    • First observeddnd5e-compendium-filter-items
    • First observeddnd5e-item-activate
    • First observeddnd5e-item-use
    • First observeddnd5e-roll-ability
    • First observeddnd5e-roll-attack
    • First observeddnd5e-roll-damage
    • First observeddnd5e-roll-save
    • First observeddnd5e-roll-skill
    • First observedeffect-create
    • First observedeffect-delete
    • First observedeffect-list
    • First observedeffect-toggle-status
    • First observedeffect-update
    • First observedfolder-create
    • First observedfolder-delete
    • First observedfolder-get
    • First observedfolder-list
    • First observedfolder-update
    • First observedgame-pause
    • First observedgame-pause-get
    • First observedgame-resume
    • First observedhandout-template-get
    • First observedhandout-template-list
    • First observeditem-create
    • First observeditem-create-from-compendium
    • First observeditem-delete
    • First observeditem-list
    • First observeditem-update
    • First observedjournal-create
    • First observedjournal-delete
    • First observedjournal-folder-list
    • First observedjournal-get
    • First observedjournal-list
    • First observedjournal-page-create
    • First observedjournal-page-delete
    • First observedjournal-page-get
    • First observedjournal-page-update
    • First observedjournal-search
    • First observedjournal-show
    • First observedjournal-update
    • First observedpf2e-cast-spell
    • First observedpf2e-compendium-filter-actors
    • First observedpf2e-compendium-filter-items
    • First observedpf2e-decrease-condition
    • First observedpf2e-get-conditions
    • First observedpf2e-increase-condition
    • First observedpf2e-list-strikes
    • First observedpf2e-post-item
    • First observedpf2e-remove-condition
    • First observedpf2e-roll-perception
    • First observedpf2e-roll-save
    • First observedpf2e-roll-skill
    • First observedpf2e-roll-strike
    • First observedpf2e-roll-strike-damage
    • First observedpf2e-set-condition
    • First observedpf2e-use-consumable
    • First observedroll-dice
    • First observedroll-perception
    • First observedroll-table-create
    • First observedroll-table-delete
    • First observedroll-table-get
    • First observedroll-table-list
    • First observedroll-table-reset
    • First observedroll-table-roll
    • First observedroll-table-update
    • First observedscene-activate
    • First observedscene-get
    • First observedscene-list
    • First observedscene-set-door-state
    • First observedtoken-create
    • First observedtoken-delete
    • First observedtoken-list
    • First observedtoken-move
    • First observedtoken-update
    • First observedui-notify
    • First observeduuid-resolve
    • First observedworld-info
    • First observedworld-item-create
    • First observedworld-item-delete
    • First observedworld-item-filter
    • First observedworld-item-get
    • First observedworld-item-update
    • First observedworld-time-advance
    • First observedworld-time-get
    • First observedworld-time-set

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources