Foundry MCP
Server Details
Connect any AI to your Foundry VTT world: actors, combat, dice, journals, tokens, compendiums.
- Status
- Healthy
- Uptime
- 97.9% over 39 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 129 tools
Given 129 tools with heavy conceptual overlap (item-create vs world-item-create vs item-create-from-compendium, dnd5e-item-use vs dnd5e-item-activate, compendium-search vs compendium-page-search vs the filter tools), the descriptions do an unusually good job of explicitly cross-referencing and steering the agent to the right one. A few pairs still require careful reading (compendium-document-get vs -raw, combat-next-turn vs combat-set-turn, roll-perception vs dnd5e-roll-skill), but boundaries are largely clear.
Namespacing prefixes (dnd5e-, pf2e-, combat-, token-, journal-, roll-table-, world-item-) are used consistently and help enormously. However verb/noun ordering is mixed: actor-create, item-create, token-create, compendium-search are noun-verb while roll-dice, chat-send, dnd5e-roll-attack, dnd5e-apply-damage are verb-noun, and the dnd5e/pf2e prefixes are absent on otherwise parallel tools. Readable but not a single predictable pattern.
129 tools is far beyond a comfortable surface for an agent, even accounting for the genuinely broad domain (full VTT control plus two game systems). The volume forces agents to sift through many near-parallel families (five compendium tools, five filter tools, four combat-turn tools) before acting.
Coverage is remarkably thorough: CRUD across actors, items (actor and world), journals, folders, macros, roll tables, scenes, tokens, effects, combat, world time, plus compendium browsing and UUID resolution. Minor gaps exist (e.g. no scene-create/update, limited user management), but almost every lifecycle has create/read/update/delete.
Available Tools
129 toolsactor-createAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| img | No | Optional image path for the actor token/portrait | |
| name | Yes | Name of the actor | |
| type | Yes | Actor type for the world's game system (dnd5e: "character", "npc", "vehicle", "group") | |
| folder | No | Optional folder ID to place the actor in | |
| system | No | Optional system-specific data (e.g., D&D 5e attributes, HP, abilities) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare this is a non-read-only, non-idempotent, non-destructive creation that stays within the world (openWorldHint=false). The description adds that 'system is deep-merged over the defaults', which explains how partial system data is handled — genuine context beyond the annotations. It stops short of disclosing validation errors, required permissions, or what a successful create returns, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact and front-loaded: the core action and examples come first, followed by type constraints, the sibling pointer, and the merge behavior. The type enumeration is a bit dense inline, but every sentence carries information an agent needs before calling.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with no output schema and full schema coverage, the description supplies the missing decision context: the sibling alternative, per-system type values, and merge semantics. Minor gaps remain around whether creation triggers sheet initialization or defaults, but nothing essential to a correct call is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real value: the type enum is expanded per game system (including pf2e types like hazard, loot, familiar, army that aren't in the schema text), and it explains that the type 'must fit the game system'. It also clarifies the deep-merge semantics of the system parameter, which the schema leaves as a bare 'additionalProperties' object.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create an actor from scratch') and enumerates concrete examples (custom NPCs, characters, creatures). It also explicitly distinguishes itself from the sibling actor-create-from-compendium, leaving no ambiguity about which tool builds an actor manually.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit alternative for creating from a compendium monster ('actor-create-from-compendium') and lays out the valid type values per game system (dnd5e, pf2e). The agent knows both when to use this tool and which argument values are legal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional custom name for the created actor (uses compendium name if not specified) | |
| uuid | No | Compendium UUID "Compendium.<scope>.<pack>.Actor.<id>". Replaces packId + actorId. | |
| folder | No | Optional folder ID to place the actor in | |
| packId | No | Compendium pack ID (e.g., "dnd5e.monsters"). Required unless uuid is given. | |
| actorId | No | Actor ID within the pack (from compendium-browse). Required unless uuid is given. |
TDQS
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.
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.
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.
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.
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.
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-deleteADestructiveInspect
Delete an actor from the world. This action cannot be undone!
| Name | Required | Description | Default |
|---|---|---|---|
| actorId | Yes | The actor ID to delete |
TDQS
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.
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.
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.
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.
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.
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-filterARead-onlyIdempotentInspect
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. 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).
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).
The response has total and hasMore.
EXAMPLES { "creatureType": ["undead"], "cr": { "min": 0.25, "max": 2 }, "folder": { "name": "Chapter 3", "recursive": true } }
| Name | Required | Description | Default |
|---|---|---|---|
| ac | No | Armor Class range. | |
| cr | No | Challenge Rating range (numbers from the valid CR set). NPCs only. | |
| name | No | Substring of actor name, case-insensitive. | |
| size | No | Size short codes (OR). | |
| type | No | Actor types (OR). | |
| level | No | Character level range. PCs only. | |
| limit | No | Page size, default 50, max 200. | |
| maxHp | No | Max HP range. | |
| folder | No | Folder by id or name; recursive includes subfolders. | |
| offset | No | Skip first N results. | |
| abilities | No | Per-ability score ranges. | |
| currentHp | No | Current HP range ("find wounded actors"). | |
| disposition | No | Prototype token disposition (OR). | |
| creatureType | No | SRD creature types (OR), NPCs only. No subtypes: "demon" -> "fiend". | |
| hasPlayerOwner | No | true = actor has at least one player owner (typically PCs). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent safety, but the description adds genuinely non-obvious behavior: actors lacking a filtered field are silently excluded (PCs have no CR, vehicles no abilities, root-level actors no folder), filters AND across fields but OR within an array, and the response carries total and hasMore. That silent-exclusion rule is exactly the kind of trap an agent would otherwise hit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence, then a CRITICAL DATA FORMATS block, then one concrete example. Given 15 nested parameters, every section carries information an agent needs; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Fifteen nested params, no output schema — yet the description compensates by declaring the return shape ({id, name} entries plus total/hasMore) and the field-availability exclusions. Nothing essential for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantics the schema cannot express: CR must come from the exact set 0/0.125/.../30 with the 1/4->0.25 mapping and 0.7 rejected, ranges are inclusive with min=max for exact match, and a worked example showing combined filters with recursive folder. This meaningfully reduces malformed calls.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search WORLD actors with D&D 5e structured filters'), gives the scope restriction (dnd5e worlds only) and the return shape ({id, name}, paginated), and explicitly names the two sibling tools it is not (actor-list, dnd5e-compendium-filter-actors). An agent can distinguish it from all 100+ siblings immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: use actor-list when unfiltered, dnd5e-compendium-filter-actors for compendium content, and this tool for filtered world searches. It also tells the caller to chain into actor-get for full stats, which is the key follow-up decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
actor-getARead-onlyIdempotentInspect
Get full actor details: HP, AC, abilities, skills, speed, proficiency, inventory with item IDs. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| actorId | Yes | Actor ID (from actor-list or actor-filter) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe, idempotent read, so the description spends its words on non-obvious behavior instead: the statblock follows the dnd5e data model and sections like skills or currency stay empty in other systems. That is a genuinely useful caveat an agent would otherwise misread as missing data. It does not discuss permissions or error cases, which keeps it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with what is returned, then downstream dependencies, then the system caveat and the raw-document escape hatch. No filler and no repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by listing the statblock contents and warning that some sections may be empty in non-dnd5e systems. For a one-parameter read tool with full annotation coverage, 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single actorId parameter is already documented in the schema as coming from actor-list or actor-filter. The description adds nothing further about the parameter's form or constraints, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 returned fields (HP, AC, abilities, skills, speed, proficiency, inventory). It is clearly distinguishable from actor-list and actor-filter, which return collections rather than a full statblock.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the condition that selects an alternative: use uuid-resolve with "Actor.<id>" when the raw document is wanted instead of the statblock. It also states the downstream workflow (item IDs are needed by dnd5e-roll-attack, dnd5e-roll-damage, dnd5e-item-use). It stops short of telling the agent to obtain the ID via actor-list/actor-filter, but the schema covers that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
actor-listARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by type: "character", "npc", "vehicle", or system-specific types |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, so the safety profile is handled. The description adds value beyond that with the hard 200-row cap and the returned field set (name, type, ID), which matters because there is no output schema. It stops short of describing ordering or what happens when the cap is hit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste. The primary behavior and row cap come first, the escalation path second — front-loaded exactly as an agent scanning tools would want.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with full annotations, this covers purpose, limits, returned fields, and the alternative. The only gap is the ambiguity around whether the `type` param belongs to this tool or should be delegated to actor-filter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter is fully documented in the schema (100% coverage), so the baseline is 3. However, there is mild friction: the description enumerates "creature type" as an actor-filter concern even though actor-list itself has a `type` filter param, which could make an agent second-guess whether to pass it here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb + resource ("List actors in the world") plus an explicit scope statement ("plain listing, at most 200 rows"). It names the returned fields and contrasts itself with actor-filter, so an agent can distinguish it from siblings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly routes the agent: use this for a plain listing, use actor-filter for anything by name, CR, creature type, size, folder, HP, AC. The when-to-use and the alternative are both named outright rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
actor-updateAInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| img | No | New image path for the actor | |
| name | No | New name for the actor | |
| folder | No | New folder ID to move the actor to | |
| system | No | System-specific data to update (e.g., {"attributes": {"hp": {"value": 25}}} to set HP to 25) | |
| actorId | No | Actor ID (from actor-list/actor-filter) | |
| sceneId | No | Scene of tokenId (default: active) | |
| tokenId | No | Token ID (from token-list) instead of actorId: that token's own actor (module 8.14+) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only state the safety profile (readOnly=false, idempotent=false, destructive=false). The description adds the crucial behavior the annotations cannot convey: system is DEEP-MERGED, pass only changed paths, and arrays are replaced whole, which is a real data-loss caveat. That is exactly the value-add expected beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, then merge semantics, then an example, then dnd5e path hints and the damage-tool routing. Every sentence carries distinct information with no filler or repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-param nested-object mutation tool with no output schema, the description covers the hard parts: merge behavior, tokenId scoping, and common paths. The notable gap is that the schema declares zero required parameters and the description never says an actorId or tokenId must be supplied for the operation to make sense.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 100%, so the baseline is 3. The description goes further by illustrating deep-merge semantics for `system` with a worked example and naming common dnd5e paths, plus disambiguating tokenId vs actorId. It doesn't compensate for the odd schema fact that no parameter is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Update an actor's name, image, folder, or system data', plus the tokenId scope variant. It explicitly names an alternative (dnd5e-apply-damage) and reaches into the actual mechanic (deep-merge of system), so an agent can tell it apart from actor-create, token-update, and item-update 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete when-not: 'For HP after damage prefer dnd5e-apply-damage (resistances, temp HP)', and clarifies that tokenId targets one token's own actor instead of actorId. It does not address the potential confusion with token-update for token-level changes, so the routing is good but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
canvas-panAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Scene-pixel X to centre on. Omit to keep current. | |
| y | No | Scene-pixel Y to centre on. Omit to keep current. | |
| scale | No | Zoom level (1 = 100%). Omit to keep current. | |
| duration | No | Animation duration in ms. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare it's non-destructive, idempotent, and not read-only. The description adds that changes apply 'for everyone's view' (broadcast effect) and clarifies units. But it omits permission requirements, whether the change is reversible, and what happens if the canvas isn't loaded. With annotations covering safety, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action and scope, followed by optional-parameter behavior and sibling contrast. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete enough for a niladic-ish (all-optional) view-control tool: purpose, scope, units, parameter omissibility, and sibling alternative are all covered. No output schema exists, so return values needn't be described. Only permission/prerequisite context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds meaning by explaining that all fields are optional and that omitting x/y keeps the centre and omitting scale keeps the zoom, which reinforces the schema's omissibility semantics and clarifies intent beyond the field-level descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb+resource: 'Pan and/or zoom the canvas (canvas.animatePan) for everyone's view.' It also distinguishes units ('in scene pixels, not grid squares') and points to the sibling alternative 'canvas-ping draws attention to a spot instead.' An agent can immediately understand what the tool does and that it affects the shared view.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states when to use this tool by explaining pan/zoom behavior and explicitly contrasting with canvas-ping for drawing attention. It also gives usage details about optional fields. However, it doesn't mention prerequisites (e.g., VIEW_CANVAS permission) or when not to use it beyond the single sibling contrast.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | Scene-pixel X. | |
| y | Yes | Scene-pixel Y. | |
| color | No | CSS colour string for the ping (e.g. "#ff0000"). | |
| style | No | Ping animation: pulse (default), arrow, alert, chevron. | |
| duration | No | Duration in ms. |
TDQS
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.
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.
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.
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.
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.
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-clearADestructiveInspect
Delete ALL chat messages. This action is IRREVERSIBLE. Use ONLY when the user explicitly asks to clear the entire chat log.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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-deleteADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| messageId | Yes | ID of the message to delete. Get from chat-list. |
TDQS
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.
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.
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.
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.
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.
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-exportARead-onlyIdempotentInspect
Export the full chat log as text or JSON (session summaries, recaps, archives). Text format: "[Speaker] Content" per line. JSON format: array of message objects with id, timestamp, author, speaker, content, flavor, isRoll.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Export format. "text" (default) = readable log, "json" = structured data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description goes further by disclosing the exact serialization contract (line format for text, field list for JSON), which is real behavioral value an agent needs to consume the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and modes, then a compact per-format spec. Every clause carries information about either selection or output shape; nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly shoulders the burden of describing returned data for both formats. It is nearly complete; only minor details such as ordering, scope limits, or whether the export can be triggered for a subset of the log are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the enum is documented, so the baseline is 3. The description earns an extra point by spelling out what each format value actually produces — '[Speaker] Content' per line versus message objects with id, timestamp, author, speaker, content, flavor, isRoll.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Export the full chat log') plus the two output modes, so the agent can tell it apart from chat-list or chat-send. It does not explicitly name a sibling, but the 'full export' framing is distinct from the incremental chat tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical 'session summaries, recaps, archives' implies when this is useful, but there is no explicit when-to-use/when-not guidance and no mention of chat-list as the alternative for paginated browsing. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chat-listARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ic = in-character, ooc = out-of-character, emote, roll. | |
| limit | No | Number of messages. Default 20, max 100. | |
| since | No | Messages AFTER this message ID (polling). | |
| before | No | Messages BEFORE this message ID (scrolling back). | |
| search | No | Case-insensitive text search across message content. | |
| actorId | No | Filter by actor ID (speaker.actor). | |
| authorId | No | Filter by Foundry user ID of the author. | |
| includeRolls | No | Include roll formula and total. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and non-destructive, so the safety bar is low; the description adds genuinely new context by stating results are plain text with HTML stripped and returned in chronological order, which tells the agent how to interpret the payload. It stops short of describing pagination behavior or how limit interacts with since/before.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with the resource, format and ordering stated first and the polling hint last. No filler, and the most load-bearing information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, zero-required read tool with full schema coverage and annotations, the description covers purpose, output format and ordering adequately. Minor gaps remain: it never mentions the default limit of 20, the available filters, or that returned messages carry the IDs needed for subsequent since/before calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented, and the description's only parameter remark ('since = a message ID to poll') largely restates the schema text. The seven other filters (type, limit, before, search, actorId, authorId, includeRolls) get no added meaning from the description, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
A specific verb and resource are coupled with concrete content cues ('what players discuss, roll results, combat narration'), so the agent immediately knows this is the chat-read tool. It does not explicitly name the sibling it differs from (chat-export, chat-clear, chat-update), leaving that differentiation to be inferred from the names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'since = a message ID to poll for newer messages' clause gives one concrete usage pattern, but there is no statement of when to prefer this over chat-export or how to page backwards versus forwards beyond the schema's own wording. Usage is implied rather than explicitly routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chat-sendAInspect
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}.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ic = in character, ooc = out of character, emote = action. | |
| flavor | No | Subheading above the message. | |
| actorId | No | Actor ID (from actor-list or actor-filter) to speak as: portrait and name. | |
| content | Yes | Message content (HTML allowed), not empty. | |
| speaker | No | Sender display name (default "Gamemaster"); actorId wins. | |
| whisperTo | No | User IDs to whisper to (visible to them and the GM). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-idempotent, non-destructive write, so the safety profile is covered. The description adds genuinely new behavioral context: the message is the sole visibility channel for players, HTML is passed through, and actorId changes how the post is attributed and rendered. It doesn't say what comes back (a message reference) for follow-up edits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause and the reminder about player visibility lands early. The single dense paragraph packs in a lot of useful detail, though the trailing document-link syntax is a run-on fragment rather than cleanly structured text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and a mutation annotation set, this covers the essentials an agent needs: what to send, how it renders, who sees it, and how to link documents. The only real gap is return-value information, which matters because follow-up edit/delete calls need the new message's ID.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a 3 is the floor, but the description earns more: it supplies the @UUID[Type.id]{Label} link syntax that appears nowhere in the schema, and gives concrete examples for flavor ("Narration", "The Tavern") plus the portrait behavior of actorId. The speaker/actorId precedence is left to the schema, which already covers it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Send a message to the Foundry chat log") and enumerates the content types it carries. It does not name the sibling boundary against chat-update or chat-list, so an agent must infer that this is the create path and the others are read/edit paths.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The list of use cases (narration, NPC dialogue, combat descriptions, OOC) implies when to reach for it, and the note that players only see what is posted here hints at why. But there is no explicit exclusion or pointer to chat-update for editing an existing message, which is the most likely confusion among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| flavor | No | New flavor text (subheading above message). | |
| content | No | New message content (HTML). Replaces existing content. | |
| messageId | Yes | ID of the message to update. Get from chat-list. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| hidden | No | Hide from players (for surprise/ambush) | |
| actorId | Yes | Actor ID to add (use actor-list to find) | |
| tokenId | No | Specific token ID if actor has multiple tokens | |
| combatId | No | Combat ID (uses active combat if omitted) | |
| initiative | No | Pre-set initiative value (otherwise roll later) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sceneId | No | Scene ID (uses active scene if omitted) | |
| activate | No | Activate combat immediately (default: true) |
TDQS
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.
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.
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.
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.
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.
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-deleteADestructiveInspect
Delete combat encounter immediately without confirmation. Use when combat is over or cancelled.
| Name | Required | Description | Default |
|---|---|---|---|
| combatId | No | Combat ID (uses active combat if omitted) |
TDQS
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.
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.
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.
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.
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.
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-getARead-onlyIdempotentInspect
Get combat state: combatants, round, turn, whose turn it is. Returns combatant IDs needed for combat-roll-initiative, combat-set-combatant-defeated, etc. combatId selects a specific encounter; omit it for the active combat.
| Name | Required | Description | Default |
|---|---|---|---|
| combatId | No | Combat ID (uses active combat if omitted) |
TDQS
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 without the description. The description adds that the result carries combatant IDs consumed by mutation tools, which is useful, but it says nothing about what happens when no active combat exists or whether the read reflects live state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences: purpose and returned fields first, then the interoperability hint, then the parameter rule. No filler, and the most decision-relevant information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description responsibly lists the returned fields (combatants, round, turn, current turn, combatant IDs), which is what an agent needs to know. The one meaningful gap is the empty state — whether a missing active combat yields an error or an empty result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter's own description already states "uses active combat if omitted," so the schema carries the semantics. The description only restates that default rule rather than adding format or validation detail; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get combat state") and immediately enumerates what is returned: combatants, round, turn, whose turn it is. It names the downstream sibling tools (combat-roll-initiative, combat-set-combatant-defeated) that depend on its output, so an agent can place it precisely among the combat-* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says "combatId selects a specific encounter; omit it for the active combat," which gives an unambiguous selection rule, and it signals the tool is a prerequisite for initiative/defeat tools. It stops short of stating when-not to call it (e.g., when no combat is active), so it is clear but not fully exhaustive.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| combatId | No | Combat ID (uses active combat if omitted) | |
| includeContext | No | Append tactical context (default true). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| combatId | No | Combat ID (uses active combat if omitted) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| combatId | No | Combat ID (uses active combat if omitted) | |
| combatantId | Yes | Combatant ID (from combat-get, NOT actorId) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| formula | No | Custom formula for all (uses each character's default if omitted) | |
| combatId | No | Combat ID (uses active combat if omitted) | |
| npcsOnly | No | Only roll for NPCs, skip player characters |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| formula | No | Custom formula like "1d20+5" (uses character's default if omitted) | |
| combatId | No | Combat ID (uses active combat if omitted) | |
| combatantIds | Yes | Combatant IDs to roll for (from combat-get) |
TDQS
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.
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.
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.
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.
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.
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-defeatedAIdempotentInspect
Mark combatant as defeated (shows skull icon, skips their turn). Use when creature reaches 0 HP or is otherwise eliminated.
| Name | Required | Description | Default |
|---|---|---|---|
| combatId | No | Combat ID (uses active combat if omitted) | |
| defeated | Yes | true = defeated, false = not defeated | |
| combatantId | Yes | Combatant ID (from combat-get) |
TDQS
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.
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.
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.
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.
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.
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-initiativeAIdempotentInspect
Manually set initiative value. Use for readied actions, special circumstances, or fixing rolls.
| Name | Required | Description | Default |
|---|---|---|---|
| combatId | No | Combat ID (uses active combat if omitted) | |
| initiative | Yes | Initiative value to set | |
| combatantId | Yes | Combatant ID (from combat-get) |
TDQS
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.
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.
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.
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.
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.
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-turnAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| combatId | No | Combat ID (uses active combat if omitted) | |
| combatantId | Yes | Combatant ID to set as current turn (from combat-get) | |
| includeContext | No | Append tactical context (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, idempotent, non-destructive. The description adds genuinely useful semantic context beyond them: no round increment and, crucially, that round-based effects (Rage expiry, concentration, durations) do not fire. It could still clarify whether turn-start effects trigger, so not a full 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, followed by the sibling contrast and then parameter provenance. It is dense but every clause carries weight; the em-dash-heavy phrasing is slightly harder to scan but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating, idempotent tool with no output schema, the description covers what it changes and what it deliberately avoids, which is the critical information. Edge cases such as an invalid/absent combatantId are left unstated, but nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and already documents combatantId, combatId, and includeContext – including '(from combat-get)' and '(default true)'. The description largely restates what the schema already carries, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (jump to a combatant's turn) on a specific resource, and immediately contrasts it with combat-next-turn so the agent can distinguish it from the sibling without reading schemas. The scope constraints (no intermediate cycling, no round increment) sharpen the purpose further.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative (repeated combat-next-turn) and the behavioral condition that selects this tool over it (no round-based effects firing). It also tells the agent where combatant IDs come from (combat-get), so invocation context is complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 (as combat-next-turn).
| Name | Required | Description | Default |
|---|---|---|---|
| combatId | No | Combat ID (uses active combat if omitted) | |
| includeContext | No | Append tactical context (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare non-readonly, non-idempotent, non-destructive, so the mutation profile is known; the description adds valuable facts beyond that: the exact state transition (round 1, turn 0), the return of combat state, and what includeContext appends (a combat-next-turn block). It does not address what happens if called on an already-started combat (reset vs. error), a meaningful gap for a non-idempotent op.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action and state, followed by timing and return behavior. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by stating that combat state is returned and what includeContext adds. Remaining ambiguity is about error/re-entry behavior on an already-running combat, which an agent would need for a non-idempotent tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema; the description's only added semantic is naming the appended payload 'as combat-next-turn,' which is a small but real elaboration over 'Append tactical context (default true).' Baseline 3 for fully covered params is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Begin combat') plus exact resulting state (round 1, turn 0), which immediately separates it from combat-create, combat-next-turn, and combat-set-turn 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit sequencing guidance: 'Call AFTER adding combatants and rolling initiative,' which tells the agent the prerequisite steps. It does not name the sibling tools that satisfy those prerequisites (combat-add-combatant, combat-roll-all-initiative) or say what to do if no combat exists yet, so it falls short of full alternative routing.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| hidden | No | true = hide from players, false = reveal. Omit to toggle. | |
| combatId | No | Combat ID (uses active combat if omitted) | |
| combatantId | Yes | Combatant ID (from combat-get) |
TDQS
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.
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.
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.
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.
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.
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-browseARead-onlyIdempotentInspect
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. For stat filters (CR, level, rarity, traits, price) use dnd5e-compendium-filter-* / pf2e-compendium-filter-*.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Only documents with these _id values — batch selection. Omit for all. | |
| limit | No | Page size, default 50, max 200. | |
| types | No | Only documents of these SUBtypes, e.g. ["spell"] or ["weapon","armor"]. Omit for all. | |
| offset | No | Skip the first N matching documents. | |
| packId | Yes | The compendium pack ID (e.g., "dnd5e.monsters", "dnd5e.items") | |
| search | No | Optional search query to filter documents by name (case-insensitive) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so safety is covered. The description still adds real behavioral context: ids triggers a batch fetch in one call rather than N separate calls, and types+ids combine with AND. It does not describe the shape of returned documents, which is the remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and packId dependency, and every clause carries routing or filtering information. The semicolon-chained style is dense and a touch crowded, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only browse tool with full schema coverage and strong annotations, the description covers identity, selection semantics, and the batch-vs-single-call tradeoff. No output schema exists, and the return shape (document summaries, pagination metadata) is never described, which is the one notable omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description genuinely adds semantics beyond the schema: 'types' selects SUBtypes, 'ids' is a batch selector for cases like every item a class grants or uuid-resolve output, and the two filters AND together. That combination rule is not stated in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Browse the contents of a compendium pack') plus concrete examples of content types (monsters, items, spells). It explicitly separates itself from compendium-list (which supplies packId) and from compendium-document-get, so an agent can distinguish it from siblings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: use compendium-list to get packId, use ids to batch-fetch instead of N compendium-document-get calls, and use dnd5e-compendium-filter-* / pf2e-compendium-filter-* for stat filters. It names alternatives and the exact condition that selects each, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compendium-document-getARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| packId | Yes | The compendium pack ID (e.g., "dnd5e.monsters") | |
| documentId | Yes | The document ID within the compendium |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile needs no repeating. The description adds genuinely new behavioral context — the shape of the rendered result (statblock fields for actors, core fields plus system data for other types) — which matters because there is no output schema. It stops short of noting size limits or pagination, hence a 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with no waste: purpose first, then the return shape, then sibling routing. Each clause earns its place and the most decision-relevant information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with no output schema, the description covers what is returned, how the return differs by document type, and how to obtain the required IDs. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are documented there, so the schema carries the load. The description adds no format or syntax detail for packId/documentId beyond the schema; it only implies where IDs come from. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a compendium document') plus the scope of the returned value ('as a readable summary'), including what an actor document becomes (statblock with HP, AC, abilities, attacks). It is clearly distinguishable from compendium-document-get-raw and uuid-resolve, which it names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use compendium-document-get-raw for raw JSON, uuid-resolve when holding a UUID, and compendium-browse to obtain document IDs. The conditions that select each sibling tool are stated rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compendium-document-get-rawARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| packId | Yes | The compendium pack ID | |
| documentId | Yes | The document ID within the compendium |
TDQS
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.
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.
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.
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.
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.
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-listARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Only packs holding this document type. |
TDQS
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.
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.
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.
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.
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.
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.
compendium-page-searchARead-onlyIdempotentInspect
Full-text search inside JournalEntry compendium packs — page NAMES and page CONTENT. The tool for rules/lore text ("what does grappled say?" → query "grappled", pageTypes ["rule"]; class write-ups, spell lists): compendium-search sees only document names. Requires bridge module 8.11.0+.
Each match carries the PAGE uuid — pass it to uuid-resolve for the full text. matchedIn tells what matched: name matches win (content not scanned, snippet null); content matches carry a ~200-char snippet. Query is a case-insensitive substring; packs are scanned in order until limit, results unsorted.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max matches, default 25. Scanning stops once reached. | |
| query | Yes | Case-insensitive substring; page names and (by default) content | |
| packIds | No | JournalEntry packs; omit = all | |
| pageTypes | No | Page subtypes: ["rule"], ["spells"], ["class","subclass"]; omit = all | |
| searchContent | No | Default true. Set false to match page NAMES only — much cheaper; use it when the page title is known. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the read-only/idempotent/safe profile, and the description adds substantial context beyond that: name matches stop content scanning and yield null snippets, content matches carry ~200-char snippets, packs are scanned in order until limit, and results are unsorted. That is exactly the behavior an agent needs to interpret results correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense paragraphs, each front-loaded with its point: what it searches, the sibling contrast and version requirement, then result semantics. No filler sentences; parentheticals carry real information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by explaining the match shape (page uuid, matchedIn, snippet) and pointing to uuid-resolve for full text. An agent has everything needed to call it and to act on the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes further by illustrating pageTypes values (rule, spells, class/subclass) and explaining the cost tradeoff of searchContent=false, which helps the agent choose parameter values rather than just parse them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: full-text search inside JournalEntry compendium packs, covering both page names and content. It explicitly distinguishes itself from the sibling compendium-search ("sees only document names"), so an agent can separate the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete when-to-use framing ("The tool for rules/lore text"), a worked example query with pageTypes, names the alternative and its limitation, and states the bridge module 8.11.0+ prerequisite. It also tells the agent when to prefer name-only matching via searchContent=false.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compendium-searchARead-onlyIdempotentInspect
Search for documents across ALL compendiums by name — when you do not know which pack holds a monster, item or spell. Name matching only: structured filters are dnd5e-compendium-filter-* / pf2e-compendium-filter-*, rules/lore TEXT in journal packs is compendium-page-search, a UUID in hand is uuid-resolve.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Optional filter by compendium type (e.g., "Actor", "Item") | |
| limit | No | Optional max number of matches to return | |
| query | Yes | Search query - will match documents whose names contain this text (case-insensitive) | |
| system | No | Optional filter by game system (e.g., "dnd5e") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world behavior, so safety is covered. The description adds genuine behavioral framing: 'Name matching only', which tells the agent this is not a full-text search and will not surface matches buried in document bodies. It stops short of describing result shape 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded before the routing clause, and every phrase earns its place – three siblings are dispatched in a single compact sentence with no filler. Density is high but readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only name search, the definition plus annotations cover invocation fully and no output schema exists to explain returns. The only minor gap is that it never hints at what a result looks like (name list vs. full documents) or how limit defaults, which an agent might want before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (query, type, limit, system) are already documented, including the case-insensitive substring semantics of query. 'Name matching only' reinforces the query parameter's scope but adds no syntax or format detail beyond the schema. Baseline 3 applies when the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Search'), resource ('documents across ALL compendiums') and a scope qualifier ('by name'), which immediately separates it from the filter and page-search siblings. The 'ALL compendiums' emphasis also communicates the cross-pack breadth that no sibling offers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the triggering condition ('when you do not know which pack holds a monster, item or spell') and routes to three concrete alternatives by name: dnd5e-compendium-filter-* / pf2e-compendium-filter-* for structured filters, compendium-page-search for journal text, uuid-resolve when a UUID is in hand. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dnd5e-apply-damageAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | dnd5e damage type: slashing, fire, … | |
| amount | Yes | Damage before resistances | |
| actorId | No | Actor ID (from actor-list/actor-filter) | |
| sceneId | No | Scene of tokenId (default: active) | |
| tokenId | No | Token ID (from token-list) instead of actorId: that token's own actor (module 8.14+) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety flags (readOnly=false, destructive=false, idempotent=false), and the description adds domain behavior the schema cannot express: temp HP absorbs first, and typed damage interacts with resistances, immunities and vulnerabilities. This is exactly the extra context the annotations do not carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and scope, then triggers, then the parameter rule. Slightly dense with parentheticals, but every clause carries information and nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers targeting, damage pipeline, and invocation timing. It omits what happens at 0 HP and what the call returns, minor gaps given the rest of the coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, and the description goes beyond it with a non-obvious selection rule: 'With several tokens of one actor pass tokenId, not actorId.' It does not explain the default when neither id is supplied, but it clearly adds value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Apply damage to an actor or to ONE token') and scopes it to dnd5e worlds/module 8.14+, which separates it cleanly from dnd5e-apply-healing and dnd5e-roll-damage without needing the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete triggers: 'Use after your own damage roll, or when dnd5e-item-activate reports applied false', plus a routing rule for tokenId vs actorId. It stops short of naming the sibling to prefer in adjacent cases (e.g. dnd5e-apply-healing) or stating when not to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dnd5e-apply-healingAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Healing amount | |
| actorId | No | Actor ID (from actor-list/actor-filter) | |
| sceneId | No | Scene of tokenId (default: active) | |
| tokenId | No | Token ID (from token-list) instead of actorId: that token's own actor (module 8.14+) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare a non-read-only, non-destructive, non-idempotent mutation, so the safety profile is already covered. The description adds a genuine behavioral trait not in the annotations: HP is clamped and stops at its maximum, and it discloses the module version prerequisite.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the leading verb tells the agent what the tool is at a glance. The stacked parentheticals make it slightly dense but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with full annotation coverage and no output schema, the description covers the essentials: target selection, the HP cap outcome, and the world/module prerequisites. Return-value detail is not needed since no output schema exists, though error/failure behavior is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 four parameters and the baseline would be 3. The description adds a disambiguation rule the schema lacks: when several tokens belong to one actor, pass tokenId to target the right one.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Heal an actor or ONE token') plus scope constraints (dnd5e worlds only, module 8.14+). This is clearly distinguishable from the sibling dnd5e-apply-damage, though the sibling is not named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real usage context: it only works in dnd5e worlds on module 8.14+, and it explains the multi-token case ('With several tokens of one actor pass tokenId'). It does not name an alternative tool or state when-not-to-use, so it stops short of the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dnd5e-compendium-filter-actorsARead-onlyIdempotentInspect
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).
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. 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"] }
| Name | Required | Description | Default |
|---|---|---|---|
| ac | No | Armor Class range. | |
| cr | No | Challenge Rating range (numbers from the valid CR set). NPCs only. | |
| name | No | Substring of document name, case-insensitive. | |
| size | No | Size short codes (OR). | |
| type | No | Actor types (OR). | |
| level | No | Character level range; type "character" only. | |
| limit | No | Page size 1..200, default 50. | |
| maxHp | No | Max HP range. | |
| offset | No | Skip first N results. | |
| packIds | No | Restrict to these Actor packs; omit for all. | |
| abilities | No | Per-ability score ranges. | |
| disposition | No | Prototype token disposition (OR). | |
| creatureType | No | SRD creature types (OR), NPCs only. No subtypes: "demon" -> "fiend". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe idempotent read, but the description adds substantive behavior: AND across filters, OR within arrays, inclusive ranges, exclusion of documents lacking a filtered field, response shape (total/hasMore), a bridge version requirement, and that results are thin {name, uuid} objects needing uuid-resolve or compendium-browse to hydrate. That is well beyond the annotation bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence, then scannable CRITICAL DATA FORMATS and EXAMPLES blocks, then a single runnable example. Every line carries a constraint or routing decision; nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter tool with nested range objects, no output schema, and no required parameters, the description covers the risk areas: data formats, filter combination logic, field-exclusion behavior, pagination signals in the response, and the follow-up call needed to turn results into documents. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, yet the description still adds meaning: it enumerates the exact valid CR set and shows the fraction conversion ('1/4' -> 0.25; 0.3 is rejected), spells out min = max for exact matching, and warns that creatureType has no subtypes ("demon" -> "fiend"). These are real constraints beyond what the schema text conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search), resource (compendium packs for actors), and differentiator (D&D 5e structured filters, dnd5e worlds only). It explicitly positions itself against two siblings, actor-filter and compendium-search, so the agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names both alternatives and the condition that selects them: actor-filter for world actors, compendium-search for plain name lookup. It also states the negative case (world-only filters such as folder, hasPlayerOwner, currentHp do not exist here), which prevents a whole class of failed calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dnd5e-compendium-filter-itemsARead-onlyIdempotentInspect
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
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. 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"] }
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Substring of document name, case-insensitive. | |
| type | No | Item types (OR). | |
| limit | No | Page size 1..200, default 50. | |
| price | No | Price range in gp. | |
| offset | No | Skip first N results. | |
| rarity | No | Rarity (OR), camelCase: veryRare. | |
| weight | No | Weight range in lb. | |
| packIds | No | Restrict to these Item packs; omit for all. | |
| identified | No | Filter by the identified flag. | |
| spellLevel | No | Spell level 0..9 (0 = cantrip); spells only. | |
| isContainer | No | Only containers. | |
| spellSchool | No | Spell schools (OR), full words. | |
| hasActivities | No | Only items with usable activities. | |
| requiresAttunement | No | Only items that require attunement. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description explains AND/OR filter combination, inclusive range semantics, exclusion of documents lacking a filtered field, response fields total and hasMore, result shape {name, uuid}, follow-up tool usage, and the bridge module version requirement. These are substantive behavioral details for correct invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, then organized into critical data formats, filter behavior, response shape, and an example. Despite its density, every section supports correct use of a 14-parameter tool and no content is redundant with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 14-parameter search tool with no output schema, the description supplies the missing response shape, pagination fields, follow-up workflow, filter logic, data formats, domain restriction, and an example. It provides enough context for an agent to call and use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 14 parameters. The description still adds valuable semantics beyond the schema: price is normalized to gp, weight is in lb, decimals are allowed, ranges are inclusive, and filters combine as AND across fields and OR within arrays.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: search COMPENDIUM packs for Item documents using D&D 5e structured filters. It scopes the tool to dnd5e worlds and explicitly identifies it as the compendium counterpart of world-item-filter, which helps separate it from unrelated siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for use: dnd5e worlds only, compendium item search, and follow-up paths via uuid-resolve or compendium-browse with IDs. It does not explicitly compare against compendium-search or state when not to use this tool, so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dnd5e-item-activateAInspect
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). dnd5e-item-use is the quick use without targets.
| Name | Required | Description | Default |
|---|---|---|---|
| itemId | Yes | Item ID (from item-list) | |
| actorId | Yes | Actor ID | |
| consume | No | What may be spent; omitted = the system decides | |
| advantage | No | ||
| activityId | No | Activity ID if several | |
| ammunition | No | Ammo item ID, or false = spend none | |
| attackMode | No | oneHanded, twoHanded, offhand, thrown, thrown-offhand | |
| spellLevel | No | Spell slot level (upcasting); omitted = base level | |
| attackBonus | No | One-off attack bonus: 2, "1d4" | |
| damageBonus | No | One-off damage bonus: "1d6" (Sneak Attack) | |
| fastForward | No | Skip dialogs and auto-roll (default true) | |
| activityType | No | Activity type: "attack", "damage", "save", "heal", "check", "utility" | |
| disadvantage | No | ||
| targetAcBonus | No | Added to each target AC (cover); Midi-QOL only | |
| targetTokenIds | No | Token IDs of the targets; required for attacks | |
| attackerTokenId | No | Act as this token of the actor (several copies) | |
| templatePosition | No | AoE template: circle = effect center; cone/line = caster position + direction |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses critical runtime behavior: Midi-QOL rolls and applies HP, fastForward skips dialogs, awaiting_user_dialog is not an error and must not be retried, and appliedDamage/appliedHealing report per-token results. It also warns against modeling one-off circumstances as effects because effects hit every copy of an unlinked token. No contradiction with annotations; the description substantially enriches the behavioral picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is dense but almost every clause carries operational value, and the core purpose is front-loaded before the edge-case guidance. It could be easier to scan if split into short bullets, but it is not padded or repetitive. Minor readability cost keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 17-parameter tool with no output schema, the description covers the important gaps: output semantics (appliedDamage/appliedHealing, applied false), dialog/status behavior, AoE coordinate conventions, target requirements, and the sibling alternative. Nothing essential for correct invocation appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is already high at 88%, the description adds cross-parameter meaning and pitfalls: targetTokenIds is for attacks, attackMode/ammunition/consume answer fastForwarded dialogs, attackerTokenId selects among multiple tokens, and templatePosition uses a pixel formula. It also clarifies how one-off modifiers should be supplied instead of effects. This is well beyond what the schema alone conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: 'Activate an item with full Foundry automation (Midi-QOL hooks, targets, AoE templates): attacks, spells, abilities.' It explicitly distinguishes this from the quick-use sibling by ending with 'dnd5e-item-use is the quick use without targets.' An agent can tell exactly what this tool does and when it differs from the simpler alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit routing rules: use targetTokenIds for attacks, use dnd5e-apply-damage when applied is false, and use dnd5e-item-use for quick use without targets. It also explains how to encode one-off circumstances via advantage/disadvantage, attackBonus, damageBonus, and targetAcBonus rather than creating effects. This is about as strong as usage guidance gets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dnd5e-item-useAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| itemId | Yes | Item ID (from item-list) | |
| actorId | Yes | Actor ID | |
| consume | No | Consume (default true for consumables) | |
| scaling | No | Spell slot level | |
| activityId | No | Activity ID if the item has several | |
| showInChat | No | Post to chat (default true) | |
| activityType | No | Activity type: "attack", "save", "heal", "utility" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare a mutating, non-idempotent, non-readonly operation, and the description adds real behavioral context beyond that: dialogs are suppressed, the return is raw JSON, and on module 8.14+ a self-targeted heal is applied with a result carrying status/appliedHealing or a no_roll_performed warning. It stops short of spelling out consumption semantics or failure modes, but the disclosure is well beyond what annotations carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded clauses with no filler: the action, the sibling routing rule, and the 8.14+ edge case. Dense but each sentence carries distinct information; the version-gated note is slightly tucked at the end but still earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description does the work of describing the return ('raw result as JSON' and the status/appliedHealing/warning fields). Combined with 100% schema coverage for inputs, an agent has enough to invoke and interpret results, though the consume side-effect and spell-slot interplay are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 seven parameters (consume, scaling, activityId, showInChat, activityType, etc.). The description adds only the general 'target-free' framing, not parameter-level meaning, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Use an inventory item via item.use()') and enumerates the item categories it covers (potions, scrolls, spells, weapons, features). It explicitly distinsecs itself from the sibling dnd5e-item-activate, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit when-to-use vs alternative rule: 'Quick, target-free use; dnd5e-item-activate when targets, AoE templates or Midi-QOL matter.' The selecting condition for the sibling is named, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dnd5e-roll-abilityAInspect
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+).
| Name | Required | Description | Default |
|---|---|---|---|
| ability | Yes | Ability code (str, dex, con, int, wis, cha) | |
| actorId | Yes | Actor ID (from actor-list/actor-filter) | |
| advantage | No | ||
| disadvantage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, destructive all false), so the bar is lower; the description still adds value by disclosing that results appear in Foundry chat and by stating the mutual-exclusion rule 'Never both advantage and disadvantage'. It does not mention permissions or what a failure/loss looks like, but the added constraints are meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place, with purpose stated first, routing second, and the behavioral constraint last. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-param roll tool with no output schema, the description covers purpose, routing, chat output, and the advantage/disadvantage rule. Remaining gaps (permissions, whether a target must be selected) are minor for a read-only dice roll.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: actorId and ability are documented, but advantage/disadvantage have no descriptions in the schema. The description partially compensates by constraining how advantage and disadvantage interact ('Never both'), which is exactly the rule an agent would otherwise get wrong.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Roll raw D&D 5e ability check') with a scope qualifier ('no skill proficiency') that cleanly distinguishes it from the sibling dnd5e-roll-skill. An agent can pick the right roll tool without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit usage conditions ('contested checks or when no skill applies'), which is real routing guidance rather than implied. It stops short of naming the alternative tool (dnd5e-roll-skill) directly, so it's clear but not fully explicit about exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dnd5e-roll-attackAInspect
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+).
| Name | Required | Description | Default |
|---|---|---|---|
| itemId | Yes | Item ID of weapon/spell (from actor-get items list) | |
| actorId | Yes | Actor ID making the attack | |
| advantage | No | ||
| disadvantage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the description needn't restate it. It adds real behavioral context: a versioned rule ("Never both advantage and disadvantage (module 8.13+)") and the actor-get prerequisite. It stops short of saying the result is posted to chat or how a hit/failure resolves, keeping it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly written sentences, each carrying a distinct piece of information, with the core action front-loaded ahead of prerequisites and alternatives. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and annotations covering safety, the description supplies prerequisites, alternative routing, and the adv/disadv constraint. It omits the return shape (e.g. success/failure, chat output) and the meaning of the version guard, so it is strong but not airtight for a 4-param tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50% – itemId and actorId are self-documented, but advantage/disadvantage carry no schema descriptions. The description partially compensates by stating they are mutually exclusive ("Never both..."), but adds no semantics for when to set either or the 8.13+ caveat's effect on them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Roll attack with a weapon/spell" states a specific verb and resource, and the actorId/itemId framing makes the target unambiguous. It also explicitly distinguishes itself from dnd5e-item-use, so an agent can separate the two roll tools without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the prerequisite ("Use actor-get FIRST to find itemId"), the alternative and the condition that selects it ("For full attack sequence... consider dnd5e-item-use instead"), plus a hard constraint (never both advantage and disadvantage). when/when-not/alternatives are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| itemId | Yes | Item ID of weapon/spell (from actor-get items list) | |
| actorId | Yes | Actor ID dealing damage | |
| critical | No | Roll critical damage (double dice) |
TDQS
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.
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.
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.
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.
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.
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-saveAInspect
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+).
| Name | Required | Description | Default |
|---|---|---|---|
| ability | Yes | Ability code (str, dex, con, int, wis, cha) | |
| actorId | Yes | Actor ID (from actor-list/actor-filter) | |
| advantage | No | ||
| disadvantage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is not read-only and not idempotent, but the description adds real value beyond them: the output destination ('Results appear in Foundry chat') and a validation constraint ('Never both advantage and disadvantage (module 8.13+)'). The prerequisite on actorId also flags a required lookup step. It stops short of describing what a save result contains or any failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short, front-loaded sentences with zero filler: purpose, usage context, output location, prerequisite, constraint. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully tells the agent where results surface (Foundry chat), covers the actorId prerequisite, and flags the advantage/disadvantage conflict. Complete enough to invoke correctly, though it leaves the mechanics of advantage/disadvantage and any error behavior unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% – actorId and ability are documented in the schema, while the advantage/disadvantage booleans are bare. The description compensates with the mutual-exclusivity rule for those two flags, which is genuine semantic information, but it still doesn't explain what setting advantage=true actually does. Adequate but not full compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Roll D&D 5e saving throw') that cleanly separates it from the sibling roll tools (dnd5e-roll-ability, dnd5e-roll-skill, dnd5e-roll-attack, dnd5e-roll-damage). An agent can pick it out without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage context ('Use when resisting spells, traps, or effects') and a prerequisite ('Use actor-list first to find actorId'). It does not explicitly name the alternative tools or state when not to use it, but the resource is narrow enough that no exclusion is really needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dnd5e-roll-skillAInspect
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+).
| Name | Required | Description | Default |
|---|---|---|---|
| skill | Yes | 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 | |
| actorId | Yes | Actor ID (from actor-list/actor-filter) | |
| advantage | No | ||
| disadvantage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds useful side-effect context ('Results appear in Foundry chat') and a constraint ('Never both advantage and disadvantage'), which goes beyond the annotations. Annotations already declare non-read-only, non-idempotent behavior; the description does not explain output format or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the action and ending with a hard constraint. Every sentence carries operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers actorId sourcing, skill-code usage, output destination, and the advantage/disadvantage rule. No output schema exists, and return-value detail is not described, but the chat-result note largely covers it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, so the description helps: it clarifies that skill codes (not names) are used via examples, and it states the advantage/disadvantage mutual exclusion, which the schema does not enforce. actorId points back to actor-list. Some fields like advantage semantics remain undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Roll D&D 5e skill check') and gives examples (Stealth, Perception). Not fully distinguished from dnd5e-roll-ability or roll-dice siblings, but the skill-check framing is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use for ability checks with proficiency' and directs the agent to actor-list first to get actorId. Does not compare against dnd5e-roll-ability or roll-dice, so the sibling routing is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
effect-createAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| img | No | Icon path | |
| name | Yes | Effect name ("Bless") | |
| origin | No | Source UUID (item, spell) | |
| actorId | No | Actor ID (from actor-list/actor-filter) | |
| changes | No | Attribute changes | |
| sceneId | No | Scene of tokenId (default: active) | |
| tokenId | No | Token ID (from token-list) instead of actorId: that token's own actor (module 8.14+) | |
| disabled | No | Add disabled | |
| duration | No | Duration | |
| statuses | No | Status IDs applied (["blinded"]) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, covering the safety/mutation profile. The description adds a useful behavioral note that changes carry string values and follow dnd5e data paths ('other systems differ'), plus the single-token scoping caveat. It does not address permissions, whether an existing effect is overwritten, or what happens on invalid paths.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and scope, followed by the changes/mode explanation and a compact worked example. It is appropriately sized for a 10-parameter nested tool, though the example JSON is dense and the final system-compatibility clause could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite 10 parameters and nested objects with no output schema, the description covers the two aspects an agent is most likely to get wrong: the actor-vs-token targeting and the shape/semantics of 'changes'. Remaining fields (duration, statuses, disabled, origin, img) are self-documenting at 100% schema coverage, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description meaningfully exceeds it: it provides a concrete worked example of a 'changes' entry and warns that paths are dnd5e-specific while other game systems differ. That path/format guidance is real added value over the raw schema, elevating it above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Add a custom active effect') and scopes the target precisely ('to an actor, or to ONE token via tokenId'). It distinguishes itself from the effect-update/effect-delete/effect-list siblings by making clear this is the creation path, and it names what is being created (buff, debuff, custom condition).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the creation use case and explains the actorId-vs-tokenId selection ('instead of actorId: that token's own actor'), which is useful routing. However, it never explicitly names effect-update, effect-delete, effect-toggle-status, or effect-list as alternatives, nor states when NOT to use this tool (e.g., to modify an existing effect).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
effect-deleteADestructiveInspect
Remove an active effect from an actor, or from ONE token via tokenId. Use effect-list first to find effect IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| actorId | No | Actor ID (from actor-list/actor-filter) | |
| sceneId | No | Scene of tokenId (default: active) | |
| tokenId | No | Token ID (from token-list) instead of actorId: that token's own actor (module 8.14+) | |
| effectId | Yes | Effect ID (from effect-list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered. The description adds the useful constraint that tokenId affects only ONE token's own actor, but says nothing about permanence, permissions, or side effects beyond what the annotations imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler; the destructive action and the necessary lookup step are both front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with full annotation coverage, no output schema, and a fully documented schema, the description covers what to delete and how to discover the ID. It could note whether the deletion is permanent, but nothing required to invoke correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are already documented in the schema. The description reinforces the effectId source (effect-list) and the single-token scope of tokenId, adding marginal value over the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Remove an active effect') and clarifies the two targeting modes (actor vs a single token via tokenId). It is not the name restated, but it doesn't explicitly differentiate itself from the adjacent effect-update or effect-toggle-status siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use effect-list first to find effect IDs' gives a clear prerequisite workflow for the required effectId. It stops short of stating when to prefer this over effect-toggle-status or effect-update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
effect-listARead-onlyIdempotentInspect
List the active effects on an actor, or on ONE token via tokenId (conditions, buffs, debuffs, custom effects).
| Name | Required | Description | Default |
|---|---|---|---|
| actorId | No | Actor ID (from actor-list/actor-filter) | |
| sceneId | No | Scene of tokenId (default: active) | |
| tokenId | No | Token ID (from token-list) instead of actorId: that token's own actor (module 8.14+) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is fully covered. The description adds only the scoping fact that tokenId targets a single token's own actor, without noting return format, ordering, or whether a missing token yields an error.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the actor/token scope first and the effect kinds in parentheses; there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-optional-parameter read tool with full schema coverage and clear annotations, the essentials are present, but the description omits what a caller gets back (no output schema) and whether no-actor means default/all, leaving some inference to the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter (actorId, sceneId, tokenId) is documented in the schema with defaults and sources. The description reinforces the actorId-vs-tokenId mutual exclusion, which is marginal added value over an already complete schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (active effects on an actor or one token), and enumerates what counts as an effect (conditions, buffs, debuffs, custom). Clearly distinguished from the mutating siblings effect-create/effect-update/effect-delete/effect-toggle-status, though it doesn't explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (to read effects) and clarifies that tokenId selects one token's effects 'instead of' actorId, but offers no explicit when-not guidance, no exclusion against siblings, and no prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
effect-toggle-statusAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| active | No | true = add, false = remove; omitted = toggle | |
| actorId | No | Actor ID (from actor-list/actor-filter) | |
| overlay | No | Show as the large overlay icon | |
| sceneId | No | Scene of tokenId (default: active) | |
| tokenId | No | Token ID (from token-list) instead of actorId: that token's own actor (module 8.14+) | |
| statusId | Yes | Status ID: "blinded", "poisoned", "prone", … |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-readOnly, non-destructive, non-idempotent and closed-world, so the safety profile is covered; the description adds real behavioral context about token-scoped application ("only that goblin prone") and world-type gating. It stops short of saying what happens when the status is already present/absent or how the change is reported.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded scoping rule and target-selection caveat come first, followed by the useful status-ID enumeration; no sentence is redundant and the status list compensates for the absent enum.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation tool with no output schema, the description covers target selection, world gating, alternatives and valid values adequately. Return/shape information and the no-op case (status already applied) are the only noticeable omissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: the semantic difference between actorId and tokenId in worlds with duplicate actor copies, and a concrete list of valid status IDs since no enum is defined. That is genuine value beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (toggle) and resource (a D&D 5e condition on an actor or a single token), and immediately distinguishes itself from the PF2e alternatives by naming pf2e-set-condition / pf2e-remove-condition. An agent can route between this and the sibling set without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly scopes usage to dnd5e worlds and names the PF2e replacement tools for the other case, plus clarifies the actorId-vs-tokenId selection rule when several copies of an actor exist. Both the when and the when-not are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
effect-updateAInspect
Update an existing active effect on an actor, or on ONE token via tokenId: name, icon, disabled state, changes, duration.
| Name | Required | Description | Default |
|---|---|---|---|
| img | No | New icon path | |
| name | No | New name | |
| actorId | No | Actor ID (from actor-list/actor-filter) | |
| changes | No | Replaces all changes | |
| sceneId | No | Scene of tokenId (default: active) | |
| tokenId | No | Token ID (from token-list) instead of actorId: that token's own actor (module 8.14+) | |
| disabled | No | Enable/disable | |
| duration | No | Duration | |
| effectId | Yes | Effect ID (from effect-list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false). The description adds targeting semantics (per-token application) beyond that, but says nothing about whether omitted fields are preserved (partial vs full update), what 'changes' replacement implies for existing data, or any 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the entity affected stated first and the mutable field list trailing. Efficient, though the trailing field enumeration is partly redundant with the parameter names and the shouted 'ONE' is a little stylized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter mutation tool with nested objects and no output schema, the description plus 100%-covered schema and safety annotations give an agent enough to invoke it. The remaining gap is update semantics (replace vs merge, and how 'changes' interacts with a tokenId-scoped effect) which neither description nor annotations resolve.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all 9 parameters, including the nested changes/duration objects and mode enum inlined in the schema, so the baseline is 3. The description's trailing field list (name, icon, disabled, changes, duration) merely restates a subset of the schema without adding format or interaction detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Update) and resource (existing active effect), scopes it correctly ('on an actor, or on ONE token via tokenId'), and enumerates the mutable fields. 'Existing active effect' cleanly separates it from sibling effect-create, effect-delete, and effect-toggle-status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies the tool is for modifying an effect that already exists, and it does route the agent between actorId and tokenId targeting ('on ONE token via tokenId'). However, it never states when to prefer effect-toggle-status over setting 'disabled' here, nor any preconditions such as needing the effect to be found via effect-list first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Folder display name | |
| sort | No | Sort order within parent. Foundry assigns one if omitted. | |
| type | Yes | Foundry document type the folder organises | |
| color | No | Hex color string (e.g. "#abcdef"). | |
| parentId | No | Parent folder ID. Omit for root. | |
| description | No | Free-form description |
TDQS
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.
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.
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.
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.
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.
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-deleteADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| folderId | Yes | Folder ID to delete | |
| deleteContents | No | Also delete documents inside the folder. Default false (orphan to root). | |
| deleteSubfolders | No | Recursively delete child folders. Default false (orphan to parent). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds substantive behavior beyond them: permanence, what happens to children/documents when flags default to false (they orphan to parent/root), and the compounding effect of setting both flags. It omits any note on permissions or failure modes, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the action and its permanence, followed by flag mechanics and finally the safety warning. No filler and the riskiest information is not buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description covers permanence, defaults, child/document handling, and a user-confirmation caution — enough detail to call it safely. Minor gaps remain around required privileges and post-delete state, but nothing that would cause a wrong invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema descriptions already state the defaults and orphan behavior for both flags. The description largely restates that semantics, though it helpfully conveys the combined effect of both flags being true. Baseline 3 is appropriate when the schema carries the parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('delete') and resource ('folder') with the scope qualifier 'permanently', which cleanly separates it from folder-update, folder-get, and folder-list in the sibling set. An agent can identify this as the destructive folder operation 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear operative context: which flags do what and the strong recommendation to 'confirm with the user first' before wiping a populated tree. It does not name an alternative tool (e.g., moving folders vs deleting), so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
folder-getARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| folderId | Yes | Folder ID (from folder-list). | |
| includeContents | No | List document ids directly inside THIS folder (not nested). | |
| includeSubfolders | No | Recursively include the subfolder tree. |
TDQS
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.
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.
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.
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.
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.
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-listARead-onlyIdempotentInspect
List folders in the world (id, name, type, parent), optionally one document type. No tree or contents: for subfolders and contents use folder-get.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Document type filter. Folders are typed: Actor folders hold Actors, Item folders hold Items, etc. Omit to list all 9 types interleaved. |
TDQS
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.
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.
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.
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.
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.
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-updateAInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New name. Omit to leave unchanged. | |
| sort | No | New sort position. Omit to leave unchanged. | |
| color | No | New hex color string. Omit to leave unchanged. | |
| folderId | Yes | Folder ID to update | |
| parentId | No | Tri-state: omit = leave alone, string = set new parent ID, null = move to root. | |
| clearParent | No | Alternative move-to-root signal for clients that cannot send literal JSON null. When true, overrides any parentId. | |
| description | No | New description. Omit to leave unchanged. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-destructive, non-idempotent mutation. The description goes beyond that by spelling out the tri-state parent semantics and the rejection case ('a string together with clearParent: true is rejected') — real behavioral nuance an agent must know. It does not cover permissions or side effects, keeping it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences; the field list and the tri-state rule are ordered so the most consequential detail (parent handling) comes immediately after the summary. No padding, though the bracket-free tri-state clause is slightly dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering the safety profile, full schema coverage, and no output schema, the description only needs to add behavioral nuance — which it does via the tri-state rule. It is largely complete, missing only auth/precondition context for a mutation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds value by explaining the parentId/clearParent interaction and the invalid combination. Note a minor tension with the schema: the schema says clearParent 'overrides any parentId' while the description says a string plus clearParent:true is 'rejected' — the conflict weakens but does not eliminate the added meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Update a folder') and enumerates the mutable fields (name, parent, color, description, sort), so the agent knows exactly what operation this performs. It does not explicitly contrast itself with folder-create/folder-delete/folder-get, but the operation is unambiguous from the name and text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the mutation semantics and the field list, but there is no explicit when-to-use guidance, no prerequisites (e.g. that the folder must exist or that the caller needs edit rights), and no routing to alternative siblings. Adequate but with clear gaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
game-pauseAIdempotentInspect
Pause the game for all connected clients (freezes the session pause indicator). Use game-resume to unpause.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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-getARead-onlyIdempotentInspect
Check whether the game is currently paused (game.paused). Returns paused: true/false.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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-resumeAIdempotentInspect
Resume (unpause) the game for all connected clients.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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-getARead-onlyIdempotentInspect
Get the full HTML of a handout template: a STYLE REFERENCE, not a text to copy. Write a unique variation with inline style="" attributes (Foundry strips tags) and save it with journal-page-create, type "text".
| Name | Required | Description | Default |
|---|---|---|---|
| templateId | Yes | Template ID from handout-template-list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so safety is covered; the description adds non-obvious environmental behavior — Foundry strips <style> tags, forcing inline styles — which genuinely changes how an agent must use the result. It does not mention failure modes for invalid IDs or the size/shape of the returned HTML.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core action and the critical constraint front-loaded, and zero filler. Every clause carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must characterize the return value, and it does: full HTML, a style reference, not literal text to copy. It stops short of describing structure, size, or what a template contains, which would help an agent plan around the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single templateId parameter is documented as coming from handout-template-list, so the schema does the work. The description adds meaning about the nature of the returned content rather than about the parameter itself, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get the full HTML of a handout template") and immediately characterizes the returned artifact as a style reference rather than copyable text, which distinguishes it from handout-template-list. An agent knows exactly what this returns 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete downstream guidance: write a unique variation, use inline style attributes, save via journal-page-create with type "text". It lacks an explicit when-not-to-use statement or a direct contrast with handout-template-list, but the templateId schema reference to handout-template-list implies the ordering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
handout-template-listARead-onlyIdempotentInspect
List available handout templates (wanted posters, letters, scrolls, etc.). Returns template IDs and descriptions; handout-template-get reads the full HTML.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Filter by category: wanted-poster, letter, scroll, decree, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds useful behavioral context by describing the return shape (template IDs and descriptions) and the handoff to the get tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the tool's purpose, followed by the return behavior and sibling relationship. There is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with no output schema, the description says enough: it names the resource, examples, return contents, and the follow-up tool. The only minor gap is that it does not mention filtering by category, though the schema documents that parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single optional category parameter has 100% schema description coverage, so the schema already documents its allowed values and meaning. The description does not add parameter-specific detail, which is acceptable given complete schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list handout templates) and gives concrete examples (wanted posters, letters, scrolls). It clearly distinguishes itself from the sibling handout-template-get by explaining that this tool returns IDs/descriptions while get reads the full HTML.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the usage pattern clear: call this to list templates and obtain identifiers/descriptions, then use handout-template-get for full HTML. It does not explicitly say when not to use it, but the alternative and its condition are unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
item-createAInspect
Create a new item directly in an actor's inventory (dnd5e data model): custom items, loot, simple gear. SRD content: item-create-from-compendium; the world Items Directory instead of an actor: world-item-create.
| Name | Required | Description | Default |
|---|---|---|---|
| img | No | Item icon path (optional) | |
| name | Yes | Item name | |
| type | Yes | dnd5e item type ("backpack" is accepted as the legacy name of "container") | |
| system | No | D&D 5e system data. | |
| actorId | Yes | Actor ID to add item to (from actor-list/actor-filter) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false), so the bar is lower. The description adds useful context that this writes directly onto an actor's inventory under the dnd5e data model, but it says nothing about what happens on repeat calls (a new duplicate item), whether the actor must exist, or what is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the capability front-loaded and the disambiguation clauses following. Every phrase carries information; nothing is restated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with a nested system object and no output schema, the description covers purpose, system applicability (dnd5e), and sibling routing well. The one remaining gap is the return value: with no output schema, an agent is not told whether the created item or its ID comes back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the type enum with the backpack/container note and the nested system object, so the schema carries the parameter burden. The description adds only the general signal that system follows the dnd5e data model and that actorId originates from actor-list/actor-filter (already stated in the schema). Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ("Create a new item directly in an actor's inventory") and immediately scopes the content type (custom items, loot, simple gear). It also names the two adjacent tools it is not (item-create-from-compendium, world-item-create), so an agent can distinguish it from siblings 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing rules are given: SRD content goes to item-create-from-compendium, and placing an item in the world Items Directory goes to world-item-create. That covers the two realistic alternatives an agent would otherwise confuse with this tool, leaving little to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
item-create-from-compendiumAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Custom name (uses compendium name if omitted) | |
| uuid | No | Compendium UUID "Compendium.<scope>.<pack>.Item.<id>". Replaces packId + itemId. | |
| itemId | No | Item ID within the pack (from compendium-browse). Required unless uuid is given. | |
| packId | No | Compendium pack ID (e.g., "dnd5e.items", "dnd5e.spells"). Required unless uuid is given. | |
| actorId | Yes | Actor ID to add item to (from actor-list/actor-filter) | |
| quantity | No | Quantity to add (default: 1) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds that the item is added 'with its full data', which implies the compendium data is copied into the actor rather than referenced. It does not mention what happens on duplicate additions (non-idempotent) or permission requirements, so the added behavioral value is moderate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the action and resource, then lists the accepted identifier sources. No wasted preamble. It is a bit packed, but every clause (item types, uuid format, source tools) carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has six parameters with full schema coverage and no output schema. The description covers the action, the accepted identifier formats, and the upstream tools that supply them, which is enough for an agent to invoke it correctly. It is slightly thin on mutation semantics (duplicate handling, permissions) given annotations cover only the basics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters in detail, including the uuid format and the uuid-replaces-packId+itemId relationship. The description reinforces the uuid format and the dual sourcing pattern, but adds no syntax or constraints beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Add an item ... from a compendium pack to an actor's inventory'. It also enumerates item types (weapon, spell, feat, gear), which helps an agent distinguish it from item-create (creating a fresh item). It does not explicitly contrast with the closest sibling item-create, but the compendium sourcing makes the distinction largely implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description names the upstream tools that produce the required identifiers (dnd5e-compendium-filter-items, pf2e-compendium-filter-items, compendium-search, compendium-browse), which is useful routing. However, it does not state when to prefer this over item-create or actor-create-from-compendium, nor any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
item-deleteADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| itemId | Yes | Item ID to delete (from item-list) | |
| actorId | Yes | Actor ID that owns the item |
TDQS
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.
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.
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.
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.
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.
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-listARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by item type (e.g., "weapon", "equipment", "consumable", "spell", "feat") | |
| actorId | Yes | The actor ID to get items from | |
| equipped | No | Filter by equipped status (true = only equipped, false = only unequipped) | |
| hasActivities | No | Filter to items that have activities (usable abilities like attacks, spells, item uses) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds return-content detail ('descriptions, damage and range') that matters since no output schema exists. It does not mention ordering or pagination, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose, then the exclusion, then filters and downstream usage. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description covers scope, exclusions, filters, and the shape of returned data (descriptions, damage, range). Ordering/pagination behavior is left unspecified, a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are already documented in the schema. The description merely restates the three optional filters (type, equipped, hasActivities) without adding syntax, defaults, or accepted values beyond what the schema provides. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (an ACTOR's inventory) with an enumerated scope of item kinds. It explicitly distinguishes itself from the sibling world-item-filter, so an agent can tell them apart without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the tool it is NOT (world-item-filter for the world directory) and the filter conditions available (type, equipped, hasActivities). It also routes the agent downstream, stating the returned item IDs feed dnd5e-item-use, dnd5e-item-activate, and dnd5e-roll-attack.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
item-updateAInspect
Update an item in an actor's inventory. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| img | No | New icon path | |
| name | No | New item name | |
| itemId | Yes | Item ID to update (from item-list) | |
| system | No | System data to deep-merge. | |
| actorId | Yes | Actor ID that owns the item |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare that this is a non-read-only, non-destructive mutation. The description adds important behavioral detail beyond the annotations: `system` is deep-merged, only changed fields should be sent, and arrays are replaced wholesale rather than merged.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with the core update behavior front-loaded. The second sentence provides merge semantics and examples without unnecessary exposition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the nested `system` schema and the absence of an output schema, the description provides enough context to call the tool correctly, especially around merge behavior. It does not cover permissions, errors, or return behavior, but those gaps are minor relative to the schema's richness and the annotation coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 parameters. The description still adds meaningful semantics for the `system` parameter by explaining deep-merge behavior, array replacement, and giving concrete examples such as `{"quantity": 3}` and `{"uses": {"value": 0}}`.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: update an item in an actor's inventory. This clearly distinguishes it from create/delete/list item operations and from world-item-update, which is not scoped to an actor's inventory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by saying to update an item in an actor's inventory and by explaining how to pass changed fields. However, it does not explicitly say when to use this tool versus siblings such as item-create, item-delete, or world-item-update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the journal entry | |
| folder | No | Folder ID (from folder-list with type "JournalEntry"); a unique folder name is also accepted. Omit for root. | |
| content | No | HTML content of the first page (optional) | |
| pageType | No | Type of the first page (default: text) |
TDQS
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.
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.
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.
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.
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.
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-deleteADestructiveInspect
Delete a journal entry and all its pages. This action cannot be undone!
| Name | Required | Description | Default |
|---|---|---|---|
| journalId | Yes | The journal ID to delete |
TDQS
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.
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.
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.
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.
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.
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-listARead-onlyIdempotentInspect
List journal folders by name with entry and page counts — a quick overview of journal organization. journal-list takes the folder name. Folder IDs (for journal-create / journal-update / folder-get) come from folder-list with type "JournalEntry".
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so safety is covered; the description adds the useful fact that results carry entry and page counts. However, with no output schema it leaves real ambiguity about whether nested folders are returned flat or as a hierarchy, and about ordering/pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, with the what-it-returns statement front-loaded and the routing hints after. The third sentence is about another tool but earns its place as disambiguation for the most likely mistake.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a zero-param read: it says what comes back at a high level. Still missing enough to call it complete — no mention of whether the list is flat vs. nested, whether it covers all folders or only top-level, and no ordering information, in 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so there is no per-parameter semantics to explain; the description correctly avoids inventing inputs. Baseline of 4 applies for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource plus what the output contains ('list journal folders by name with entry and page counts'), which is more than a restatement of the name. It implicitly separates itself from the generic folder-list by directing ID lookups there, though it never explicitly says 'this tool does not return folder IDs'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: journal-list takes the folder name, and IDs for journal-create / journal-update / folder-get must be obtained from folder-list with type 'JournalEntry'. No explicit when-not to use this tool, but the sibling relationships are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
journal-getARead-onlyIdempotentInspect
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). For one page of a long journal use journal-page-get.
| Name | Required | Description | Default |
|---|---|---|---|
| journalId | Yes | Journal ID (from journal-list or journal-search) | |
| formatAsText | No | Default true: pages as plain text (HTML stripped). false = raw JSON with HTML content and page metadata. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is free. The description adds real value by disclosing the return-shape split (plain text vs raw JSON with HTML and page metadata) and which mode is the default, which an agent needs to pick formatAsText correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, with the primary behavior and output format front-loaded and the sibling hand-off last. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of describing return values, and it does identify both return modes. It doesn't describe error behavior for an invalid journalId, which keeps it short of a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both params are documented structurally. The description still reinforces the meaning of formatAsText and its default, going marginally beyond the schema, though it doesn't add format examples or syntax hints for journalId.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a journal entry by ID') plus the two output formats, and explicitly names the sibling journal-page-get as the different tool. An agent can distinguish it from journal-list, journal-search, and journal-page-get without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: 'For one page of a long journal use journal-page-get.' This gives both the when-to-use and the concrete alternative, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
journal-listARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| folder | No | Folder name or folder ID to filter by (omit for all journals) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| src | No | Source file path or URL for image/video/pdf pages | |
| name | Yes | Name of the new page | |
| type | No | Type of page (default: text) | |
| content | No | HTML content for text pages | |
| journalId | Yes | The journal ID to add the page to |
TDQS
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.
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.
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.
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.
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.
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-deleteADestructiveInspect
Delete a specific page from a journal. This action cannot be undone!
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The page ID to delete | |
| journalId | Yes | The journal ID containing the page |
TDQS
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.
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.
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.
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.
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.
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-getARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The page ID (from journal pages list) | |
| journalId | Yes | The journal ID | |
| formatAsText | No | If true (default), returns plain text. If false, returns raw HTML/JSON. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| src | No | New source file path or URL for image/video/pdf pages | |
| name | No | New name for the page | |
| pageId | Yes | The page ID to update | |
| content | No | New HTML content for text pages | |
| journalId | Yes | The journal ID containing the page |
TDQS
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.
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.
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.
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.
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.
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-searchARead-onlyIdempotentInspect
Search journals across all folders by journal name AND page name (case-insensitive substring). Faster than listing all journals when you know the name. Returns journal IDs for journal-get and page IDs for journal-page-get.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Partial journal or page name to search for (case-insensitive) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description adds value by noting it searches across all folders, is case-insensitive, and returns IDs for subsequent tools. It also includes a performance note ('Faster than listing') which is beyond the annotations. Minor ambiguity remains about whether the search matches both fields simultaneously, but it is not a major gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero waste: the first sentence states the action and scope, the second gives a performance justification, and the third explains the return values. Information is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only search tool with full schema coverage and safety annotations, the description covers what the tool does, when to use it, and what it returns. No critical information is missing for an agent to invoke it correctly. The absence of an output schema is fine since the description explicitly mentions the IDs returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the query parameter is documented. The description adds meaning by stating the search is across all folders and that the query matches both journal and page names, reinforcing the schema's description. It also clarifies the output usage (IDs for journal-get and journal-page-get), which is beyond schema and aids the agent in chaining calls.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Search'), resource ('journals'), and scope ('across all folders'), and clarifies it matches by journal name AND page name with case-insensitive substring. It clearly distinguishes from journal-list (which lists all) and other search tools, so an agent can immediately understand the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Faster than listing all journals when you know the name,' which indicates when to use it over journal-list. It also mentions that returns are IDs for journal-get and journal-page-get, implying follow-up usage. However, it does not explicitly mention alternatives like compendium-search or state when not to use it, though the given context is sufficient for basic routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
journal-showAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Override Foundry permissions (default: false) | |
| users | No | Foundry User IDs to show to (omit for all players) | |
| pageId | No | Specific page ID to show (omit for entire journal) | |
| journalId | Yes | The journal ID to show |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), and the description layers on genuinely useful behavior the annotations cannot express: force=true bypasses Foundry permissions, it is a one-off popup, and permissions are left unchanged afterwards. It stops short of stating whether re-showing is safe or how 'force' interacts with the target users list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action, then the permission-override caveat, then parameter semantics. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter tool with full schema coverage, no output schema, and clear annotations, the description closes the remaining gaps: the effect of force, the audience default, and the ID provenance for users. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3. The description exceeds it by supplying provenance for 'users' (Foundry user IDs, i.e. authorId from chat-list) and the 'omit for everyone' default, plus the one-off semantics of 'force' — details the schema text alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Show) and resource (a journal entry or one page) plus the target audience ('on the players' screens'), which cleanly separates it from the read-oriented journal-get/journal-page-get siblings. An agent can tell this is a presentation/broadcast action rather than a data fetch without consulting any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The audience ('players screens') implies when to use it, but there is no explicit when/when-not statement and no sibling named as the alternative (e.g. journal-get for agent-side reads). Guidance is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New name for the journal | |
| folder | No | Target folder ID (from folder-list with type "JournalEntry"); a unique folder name is also accepted. | |
| journalId | Yes | The journal ID to update |
TDQS
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.
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.
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.
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.
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.
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.
macro-createAInspect
Create a macro without running it (macro-execute runs it). type chat holds a chat command such as "/roll 1d20"; type script holds JavaScript that runs with GM rights and is accepted only while the module setting Allow Script Macros is on (off by default; the user turns it on in Foundry).
| Name | Required | Description | Default |
|---|---|---|---|
| img | No | Icon path | |
| name | Yes | Macro name | |
| type | Yes | chat or script | |
| scope | No | What a script macro may address; default global. | |
| folder | No | Folder ID (from folder-list, type Macro); omit for root. | |
| command | Yes | Chat command or JavaScript source |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare non-destructive, non-idempotent, closed-world, but the description adds context annotations don't: script macros run with GM rights and are blocked unless the module setting Allow Script Macros is enabled (off by default). This security/permission disclosure is exactly the kind of behavioral value expected beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core differentiation (create vs execute), then the crucial caveat about script macros. No wasted words; every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-param create tool with a 100%-covered schema and no output schema, the description covers the key gotcha (script-macro gating) and clarifies type semantics. It does not touch folder/scope/img, but the schema fully documents those, so the gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds genuine meaning: it explains what the 'chat' and 'script' type values hold and the execution semantics of each. That enriches the most consequential enum beyond the bare 'chat or script' in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a macro') and immediately scopes it against the sibling ('without running it (macro-execute runs it)'). An agent can distinguish it from macro-execute and the other macro-* tools without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly signals creation rather than execution and names macro-execute as the alternative for running. It also gives the condition under which script macros are accepted (Allow Script Macros setting), which is real usage guidance. It stops short of enumerating when to prefer chat vs script beyond the type explanation, so not quite a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
macro-deleteADestructiveInspect
Permanently delete a macro.
| Name | Required | Description | Default |
|---|---|---|---|
| macroId | Yes | Macro ID (from macro-list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the safety profile is covered. The description's only added value is the word "permanently," reinforcing irreversibility; it does not mention what happens to dependent references, permissions required, or the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single five-word sentence with the destructive qualifier front-loaded and zero waste. Appropriate sizing for a one-parameter delete tool whose schema and annotations already carry the detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple destructive operation with full annotation coverage, a fully documented single parameter, and no output schema, the description supplies the core fact an agent needs. A brief note on irreversibility consequences or the macro-list source would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single macroId parameter, and the schema itself notes it comes from macro-list. The description adds no further semantics, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (delete) and resource (macro) plus a qualifier (permanently), which is enough to separate it from macro-create, macro-update, and macro-execute in the sibling list. It doesn't explicitly name those siblings, but 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Permanently" implies caution before invoking and signals there is no undo, but the description never says when to prefer this over alternatives or what preconditions apply. Usage is implied by the name and the irreversibility word rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
macro-executeADestructiveInspect
Run a macro the way its hotbar button does: a chat macro posts its command, a script macro runs its JavaScript with GM rights (needs the module setting Allow Script Macros, off by default). Returns only that it ran; the effect shows in chat (chat-list) or in the world.
| Name | Required | Description | Default |
|---|---|---|---|
| actorId | No | Actor ID (from actor-list or actor-filter); the macro sees it as actor | |
| macroId | Yes | Macro ID (from macro-list) | |
| tokenId | No | Token ID on the active scene (from token-list); the macro sees it as token |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: script macros execute with GM rights, are gated behind a default-off module setting, and there is no direct return payload ('returns only that it ran'). This tells the agent about privilege escalation and irreversibility concerns that destructiveHint=true alone does not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences: execution semantics first, then side effects and return behavior. Nothing is repeated from the schema or annotations and no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly closes the loop by saying where results appear (chat-list or the world) instead of what is returned. The module-setting gate and GM-rights caveat cover the main risk an agent needs to know before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema descriptions already explain that actorId/tokenId become 'actor' and 'token' inside the macro. The description adds no further parameter guidance, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Run a macro') and immediately distinguishes the two execution modes (chat macro posts a command, script macro runs JavaScript). Among siblings like macro-list/macro-get/macro-create, 'run' plus the hotbar-button analogy makes the operation unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the operational context (equivalent to clicking the hotbar button) and a prerequisite: the Allow Script Macros module setting, off by default. It does not explicitly say when to prefer macro-get or macro-update first, but the usage condition is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
macro-getARead-onlyIdempotentInspect
Get one macro with its command text: a chat command for type chat, JavaScript source for type script.
| Name | Required | Description | Default |
|---|---|---|---|
| macroId | Yes | Macro ID (from macro-list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false, and destructiveHint=false, so the safety profile is fully covered. The description adds genuine value by explaining that the returned text is interpreted differently per macro type, but it omits what happens when the ID is invalid or what fields accompany the command text.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the core action front-loaded and the type-dependent payload clarification packed into a subordinate clause. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with strong annotations, the description covers the essential question of what content comes back and why it differs by type. No output schema exists, so fuller return-value detail (field names, not-found behavior) would still help, keeping it below 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single macroId property is documented including its provenance ('from macro-list'). The description adds no format or lookup detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (get one macro) and clarifies what the payload contains — chat command text for type chat, JavaScript source for type script. That distinguishes it from macro-list, macro-create, and macro-execute by implication, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The schema's 'from macro-list' note implies the lookup workflow, but the description itself gives no when-to-use or when-not guidance, and never tells the agent to use macro-execute instead when the goal is running the macro rather than reading it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
macro-listARead-onlyIdempotentInspect
List the world's macros (id, name, type, scope, folder, author); no command text: macro-get returns one macro's source.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Only macros of this type. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, closed-world behavior, so the description need not repeat safety traits. It adds useful context by naming the fields returned and clarifying that command text is omitted, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single compact sentence with the core listing purpose front-loaded, followed by the returned fields and the macro-get alternative. There is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with one optional filter, annotations covering safety, and a fully described schema, the description supplies enough context. It even compensates for the missing output schema by naming the fields returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single optional 'type' parameter is fully documented as a chat/script filter. The description does not add parameter semantics beyond the schema, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: list the world's macros. It also lists the returned fields and explicitly contrasts with macro-get, which returns a single macro's source. An agent can distinguish this from sibling macro tools without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives the key routing rule: use this to list macros, but use macro-get when command text or a single macro's source is needed. This is an explicit alternative with the condition that selects it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
macro-updateAInspect
Update a macro; omitted fields stay unchanged. Script macros, and a change to type script, need the module setting Allow Script Macros. Folder is TRI-STATE: omit = unchanged, folder ID = move, null or clearFolder: true = root.
| Name | Required | Description | Default |
|---|---|---|---|
| img | No | New icon path | |
| name | No | New name | |
| type | No | New type | |
| scope | No | New scope | |
| folder | No | Folder ID (from folder-list, type Macro), or null for root. | |
| command | No | New chat command or JavaScript source | |
| macroId | Yes | Macro ID (from macro-list) | |
| clearFolder | No | Move to root when the client cannot send null; overrides folder. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it a non-read-only, non-destructive, non-idempotent mutation. The description adds valuable context beyond annotations: partial-update behavior, a module-setting prerequisite, and precise folder tri-state semantics (omit, ID, null/clearFolder). It doesn't cover error behavior or return values, but with annotations present this is a solid disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core update behavior, then important edge-case semantics. Every sentence adds specific value with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation tool with no output schema, the description covers the key behavioral edge cases (partial update, folder tri-state, script module setting). It could mention error conditions or return structure, but the essential calling information is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already documented. The description nevertheless adds crucial meaning for the folder parameter's tri-state behavior and the clearFolder override, plus the script-macro precondition for command/type. This is more than repeating the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Update a macro') and clarifies partial-update semantics ('omitted fields stay unchanged'). It does not explicitly differentiate from siblings like macro-create or macro-get, but the operation is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides actionable preconditions: script macros or changing type to 'script' require the Allow Script Macros module setting. The folder tri-state rule gives clear guidance on how to move or clear a macro. However, it doesn't name alternatives or when-not-to-use conditions.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| rank | No | Heightened rank 1-10 (default: spell rank) | |
| actorId | Yes | Actor ID | |
| spellId | Yes | Item ID of a spell (from item-list) | |
| showInChat | No | Post to chat (default true) |
TDQS
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.
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.
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.
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.
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.
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-actorsARead-onlyIdempotentInspect
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
traits are an open set of lowercase slugs ("undead", "kobold").
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. 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"] }
| Name | Required | Description | Default |
|---|---|---|---|
| ac | No | Armor Class range. | |
| name | No | Substring of document name, case-insensitive. | |
| size | No | Size short codes (OR). | |
| type | No | PF2e actor types (OR). | |
| level | No | Creature level range; negative bounds are valid. | |
| limit | No | Page size 1..200, default 50. | |
| maxHp | No | Max HP range. | |
| offset | No | Skip first N results. | |
| rarity | No | Rarity (OR). | |
| traits | No | ALL-OF: every listed trait must be present. Lowercase slugs. | |
| packIds | No | Restrict to these Actor packs; omit for all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description still adds substantial behavior: the bridge module version gate (8.11.0+), that documents lacking a filtered field are excluded, that results carry level (null when absent), and that output is sorted by level then name. The response envelope (total, hasMore, {name, uuid}) is disclosed even though there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in the first sentence, followed by clearly labeled sections for data formats, filter semantics, response shape, and a compact worked example. No filler sentences; each line contributes a rule or a pointer the agent would otherwise have to guess.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter, nested-object filter tool with no output schema, the description supplies the missing pieces: result envelope, result fields, sort order, null-level behavior, and the version prerequisite. Pagination is handled by the schema's limit/offset, and hasMore is described, so nothing essential is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantics the schema cannot express: cross-filter AND, in-array OR, inclusive range bounds with min = max for exact match, and exclusion of documents missing a filtered field. One flaw: the blanket 'values inside one array with OR' conflicts with the traits parameter, which the schema explicitly documents as ALL-OF, so an agent could mis-predict trait filtering.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search COMPENDIUM packs for actors'), scopes it to 'pf2e worlds only', and enumerates the structured facets (level, traits, rarity, size, HP, AC) that make it distinct from keyword search. It does not explicitly contrast itself with the closest siblings, compendium-search and pf2e-compendium-filter-items, or with actor-filter (world actors), leaving that differentiation implicit in the 'COMPENDIUM' emphasis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied through 'bestiary browsing' and the COMPENDIUM/pf2e-worlds scoping, and the description does route the agent to follow-ups ('uuid-resolve, or compendium-browse with ids to batch-load'). However, it never says when to prefer this over compendium-search, actor-filter, or the dnd5e sibling, and gives no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pf2e-compendium-filter-itemsARead-onlyIdempotentInspect
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
traits are ALL-OF, traditions ANY-OF; do not confuse the two.
priceGold is 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. 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 } }
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Substring of document name, case-insensitive. | |
| type | No | PF2e item types (OR). | |
| level | No | Item level range; spell RANK for spells. | |
| limit | No | Page size 1..200, default 50. | |
| offset | No | Skip first N results. | |
| rarity | No | Rarity (OR). | |
| traits | No | ALL-OF: every listed trait must be present. Lowercase slugs. | |
| packIds | No | Restrict to these Item packs; omit for all. | |
| category | No | Feat category (OR): class, skill, general, ancestry, ... | |
| priceGold | No | Price range in gp (5 sp -> 0.5). | |
| traditions | No | ANY-OF: at least one shared tradition. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile, and the description still adds substantive behavior: filter combination rules (AND across fields, OR within arrays), inclusive ranges, exclusion of documents lacking a filtered field, response shape (total/hasMore, {name, uuid}), sort order (level then name), and a bridge version requirement (8.11.0+). That is well beyond what annotations or schema disclose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose, then clearly labeled format rules, filter behavior, response contract and an example — easy to scan. A little padding is spent restating schema facts (ALL-OF traits vs ANY-OF traditions, level = spell rank), which are already in the parameter descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 11 parameters, nested objects and no output schema, the description carries the return-value burden itself, and it does: total/hasMore, {name, uuid}, level field and sort order. Combined with the version prerequisite and format caveats, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds real semantics the schema lacks, notably 'priceGold is per batch for batched goods like arrows' and a worked example payload showing nested range syntax. The traits/traditions and level-as-spell-rank restatements duplicate existing schema text, limiting the gain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: 'Search COMPENDIUM packs for items with Pathfinder 2e structured filters (pf2e worlds only)' and enumerates the covered item types. This clearly separates it from compendium-search, world-item-filter, pf2e-compendium-filter-actors and the dnd5e variant named 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit environment constraint ('pf2e worlds only') and routes the agent onward: 'uuid-resolve, or compendium-browse with ids to batch-load'. It does not say when to prefer this over compendium-search/page-search for a plain keyword lookup, so the when-not half of the guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | PF2e condition slug. Valued conditions (carry a number): clumsy, cursebound, doomed, drained, dying, enfeebled, frightened, sickened, slowed, stunned, stupefied, wounded. | |
| actorId | Yes | Actor ID |
TDQS
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.
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.
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.
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.
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.
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-conditionsARead-onlyIdempotentInspect
PF2e only. List the active conditions on an actor (slug, name, value, active).
| Name | Required | Description | Default |
|---|---|---|---|
| actorId | Yes | Actor ID |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | PF2e condition slug. Valued conditions (carry a number): clumsy, cursebound, doomed, drained, dying, enfeebled, frightened, sickened, slowed, stunned, stupefied, wounded. | |
| actorId | Yes | Actor ID |
TDQS
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.
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.
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.
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.
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.
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-strikesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| actorId | Yes | Actor ID |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| itemId | Yes | Item ID (from item-list) | |
| actorId | Yes | Actor ID | |
| showInChat | No | Post to chat (default true) |
TDQS
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.
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.
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.
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.
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.
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-conditionAIdempotentInspect
PF2e only. Remove a condition from an actor. Returns removed=true when the condition is gone.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | PF2e condition slug. | |
| actorId | Yes | Actor ID |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| actorId | Yes | Actor ID (from actor-list/actor-filter) | |
| showInChat | No | Post the roll to chat (default false) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| save | Yes | PF2e save: fortitude, reflex, will. | |
| actorId | Yes | Actor ID (from actor-list/actor-filter) | |
| showInChat | No | Post the roll to chat (default false) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| skill | Yes | PF2e skill slug. Lore skills are not supported. | |
| actorId | Yes | Actor ID (from actor-list/actor-filter) | |
| showInChat | No | Post the roll to chat (default false) |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Strike slug from pf2e-list-strikes | |
| actorId | Yes | Actor ID | |
| showInChat | No | Post the roll to chat (default false) | |
| mapIncrease | No | MAP step: 0, 1, or 2 (default 0) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Strike slug from pf2e-list-strikes | |
| actorId | Yes | Actor ID | |
| critical | No | Roll critical damage (default false) | |
| showInChat | No | Post the roll to chat (default false) |
TDQS
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.
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.
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.
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.
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.
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-conditionAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | PF2e condition slug. Valued conditions (carry a number): clumsy, cursebound, doomed, drained, dying, enfeebled, frightened, sickened, slowed, stunned, stupefied, wounded. | |
| value | No | Exact value for valued conditions (positive integer) | |
| actorId | Yes | Actor ID |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| itemId | Yes | Item ID of a consumable (from item-list) | |
| actorId | Yes | Actor ID | |
| quantity | No | How many to use (positive integer, default 1) |
TDQS
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.
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.
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.
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.
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.
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-diceAInspect
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+.
| Name | Required | Description | Default |
|---|---|---|---|
| formula | Yes | Dice formula: "1d20+5", "2d6", "4d6kh3" (keep highest 3), "2d20kh1" (advantage), "2d20kl1" (disadvantage) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are mostly negative (readOnly false, openWorld false, idempotent false, destructive false), so the description carries useful extra context: the isCritical/isFumble kept-d20 rule and the note that a 20 on the discarded advantage/disadvantage die does not count, plus a minimum module version (v8.5.0+). It does not mention that rolling likely emits to chat or requires an active world/chat context, a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and the sibling exclusion list before the finer crit/fumble and version details. It is dense and somewhat run-on in the middle clause, but every sentence carries selection-or-invocation value rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, no-output-schema tool it covers routing, the crit/fumble interpretation and a version prerequisite, which is enough to call it correctly. It stops short of describing what a roll returns or where output lands, but with no output schema that omission is understandable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (formula) with 100% schema coverage and worked examples, so the schema does the heavy lifting (baseline 3). The description nonetheless adds interpretation the schema lacks: which formulas map to crit/fumble outcomes and the 'kept d20' semantics for 2d20kh1/2d20kl1, which refines how the formula argument behaves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Roll arbitrary dice') and immediately scopes it to custom checks, random tables and DM-specified rolls. It explicitly names the sibling family (dnd5e-roll-skill, dnd5e-roll-save, dnd5e-roll-attack, dnd5e-roll-damage, dnd5e-item-use) it is not meant to replace, so an agent can separate it from the D&D 5e rollers without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use (custom checks, random tables, DM-specified rolls) and explicit when-not (D&D 5e mechanics route to the named dnd5e-* tools). This is exactly the routing information needed among ~80 siblings, with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roll-perceptionAInspect
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+).
| Name | Required | Description | Default |
|---|---|---|---|
| actorId | Yes | Actor ID (from actor-list/actor-filter) | |
| advantage | No | ||
| disadvantage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare the mutation/safety profile, so the description's job is to add context — and it does: results land in Foundry chat, advantage and disadvantage are mutually exclusive, and the exclusivity rule requires module 8.13+. It omits whether a roll dialog or permissions are involved, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, zero filler; the core action and world scope lead, and the routing and constraint notes follow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a stateless roll with no output schema, the description covers where results go (Foundry chat) and the key parameter constraint. Minor omissions remain around prerequisites and the effect of advantage/disadvantage, but nothing blocking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 33%: actorId is documented, but advantage/disadvantage are bare booleans. The description partially compensates by stating the two are mutually exclusive, yet never explains what advantage/disadvantage mean mechanically for the roll, leaving a real gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Roll a Perception check for an actor') and immediately scopes it to D&D 5e worlds, distinguishing it from its sibling dnd5e-roll-skill by naming the equivalent invocation. An agent can select it confidently 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes Pathfinder 2e worlds to pf2e-roll-perception, which is a real routing decision. It does not, however, clarify when to prefer this over the generalist dnd5e-roll-skill (it only says they are the same), nor when advantage/disadvantage should be requested.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roll-table-createAInspect
Create a roll table: a dice formula plus result entries with ranges, e.g. formula "1d6" with six results [1,1] … [6,6].
| Name | Required | Description | Default |
|---|---|---|---|
| img | No | Table icon path | |
| name | Yes | Table name | |
| folder | No | Folder ID to place table in | |
| formula | No | Dice formula, default "1d20" | |
| results | No | Result entries | |
| description | No | HTML description of the table | |
| displayRoll | No | Show roll in Foundry chat (default: true) | |
| replacement | No | true = results can repeat (default true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose that this is a non-read-only, non-destructive, non-idempotent, closed-world creation operation. The description adds the table's conceptual structure but does not mention persistence, permission/GM requirements, duplicate-name behavior, or what is returned after creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with a compact example; no wasted wording. It communicates the core concept quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter create tool with full schema descriptions and safety annotations, the description covers the core concept and a representative example. It does not cover optional fields or creation results, but those gaps are largely handled by the schema 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameter meaning is already documented in the input schema. The description's 1d6/[1,1]...[6,6] example clarifies how formula and result ranges relate, but it does not add syntax or constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Create) and resource (roll table) and explains the core composition as a dice formula plus result entries, which distinguishes it from roll-table-roll/update/delete siblings. The example further clarifies what a created table looks like.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The creation intent is clear, but the description does not explicitly say when to use this versus roll-table-update, roll-table-roll, or other table tools, nor does it note prerequisites or exclusions. Usage is implied by the tool name and create verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roll-table-deleteADestructiveInspect
Delete a roll table. This action cannot be undone!
| Name | Required | Description | Default |
|---|---|---|---|
| tableId | Yes | Roll table ID to delete |
TDQS
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.
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.
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.
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.
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.
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-getARead-onlyIdempotentInspect
Get full details of a roll table including all results with ranges and weights. Use roll-table-list FIRST to find the table ID.
| Name | Required | Description | Default |
|---|---|---|---|
| tableId | Yes | Roll table ID (from roll-table-list) |
TDQS
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.
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.
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.
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.
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.
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-listARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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-resetAIdempotentInspect
Reset all drawn results on a roll table, making all entries available again. Only relevant for tables with replacement=false.
| Name | Required | Description | Default |
|---|---|---|---|
| tableId | Yes | Roll table ID |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tableId | Yes | Roll table ID | |
| displayChat | No | Show result in Foundry chat (default: true) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| img | No | New icon path | |
| name | No | New table name | |
| formula | No | New dice formula | |
| tableId | Yes | Roll table ID to update | |
| description | No | New description (HTML) | |
| displayRoll | No | Show roll in chat | |
| replacement | No | New replacement mode |
TDQS
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.
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.
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.
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.
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.
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-activateAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sceneId | Yes | Scene ID to activate (use scene-list to find) |
TDQS
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.
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.
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.
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.
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.
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-getARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| sceneId | No | Scene ID (omit for active scene) | |
| includeMap | No | Append the ASCII tactical map (default true). | |
| includeScreenshot | No | Include canvas screenshot (~100-500KB). Recommended on first scene view or when visual context is needed. Skip during combat rounds to save context. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and non-destructive, so the safety profile is covered. The description still adds genuine behavioral context beyond them: the default-true map behavior, a concrete screenshot payload size (~100-500KB) and a usage cadence warning about context cost. It stops short of describing return shape or ordering, but the payload size and default disclosure are real added value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the payload contents, then the two optional flags, with nothing idle. It is dense — the em-dash clauses packed into the map and screenshot sentences make it read heavier than needed — but every clause carries operative information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and only three optional params, the description carries the burden and discharges it: it lists what is returned, gives defaults, sizes the screenshot cost, and explains the omitted-sceneId fallback. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 and the schema already documents all three parameters including their defaults. The description largely restates those same semantics (default true, size range, omit for active scene) rather than adding new parameter-level meaning, so it sits at, not above, the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('scene') and enumerates the payload contents: tokens with HP/AC/conditions/grid positions, walls, lights, notes, regions. It also differentiates itself from the sibling scene-list by noting that scene-list supplies the IDs, so an agent can route between them without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit conditional guidance: includeMap=false 'when you only need the lists', includeScreenshot=true for a first view but not every turn, and sceneId omitted means the active scene. It names the alternative tool (scene-list) for ID lookup, so the when-to-use decision is fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene-listARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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-stateAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| state | Yes | Door state: 0=closed, 1=open, 2=locked | |
| wallId | Yes | Wall ID of the door (from scene-get → walls[].id where door >= 1) | |
| sceneId | No | Scene ID (uses active scene if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-readonly, idempotent, non-destructive, closed-world write. The description adds useful domain behavior beyond that: the locked-door two-step interaction and the secret-door limitation. It does not describe failure modes (e.g. invalid wallId) but the annotation coverage lowers the bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action in the first sentence, then layers wall-ID sourcing, state encoding, and the locked/secret-door caveats. Dense but each clause carries information; the state enumeration slightly overlaps the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema but full annotation and parameter coverage, the description supplies the interaction rules an agent needs (unlocking sequence, secret-door handling). Remaining gaps are minor since annotations carry the safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds sourcing context for wallId (from scene-get → walls[] with door=1/2) that the schema only partially captures. State meanings are duplicated from the schema, so the added value is modest.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb set (open/close/lock) and resource (a door), and immediately distinguishes itself from the token-move sibling path for door handling. An agent can identify exactly what action this performs 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit procedural guidance: to open a locked door, call scene-set-door-state(wallId, 0) then token-move with canOpenDoors=true, and notes secret doors never open via token-move so their state must be set here. This names the alternative tool and the condition that selects each path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
token-createAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | X in pixels | |
| y | Yes | Y in pixels | |
| scale | No | Token scale multiplier (default 1) | |
| hidden | No | Hide token from players | |
| actorId | Yes | Actor ID (from actor-list or actor-filter) | |
| sceneId | No | Scene ID; default the active scene | |
| rotation | No | Rotation in degrees (0-360) | |
| actorLink | No | true = shares the actor, false = independent copy (module 8.14+) | |
| elevation | No | Elevation in game units |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-readOnly, non-destructive, non-idempotent behavior, so the bar is lower. The description adds genuinely new behavioral context: the coordinate system is pixel-based measured from the grid cell's top-left corner, and it depends on prior scene/actor lookups. It doesn't say what happens on duplicate placement or whether GM permission is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact clauses, front-loaded with the action, followed by the coordinate math and ID sources. Every sentence carries information needed to call the tool correctly; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the two nontrivial aspects of a 9-parameter mutation tool (coordinate space, prerequisite lookups) and the remaining optional fields are fully documented in the schema. With no output schema, it could still say whether the created token's ID is returned, which matters for chaining into token-update or token-move.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description earns a bump by explaining the pixel coordinate system and anchor point beyond the schema's bare 'X in pixels'. It also explains where the required actorId comes from, rather than just restating the field description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Place a token on the scene for an actor'), which is clearly distinct from token-move and token-update. It never explicitly names those siblings as alternatives, but the creation semantics are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete workflow guidance: coordinates are in pixels, the conversion formula is given, and it points to scene-get for gridSize and actor-list/actor-filter for actorId. It doesn't state when not to use this tool or how it differs from token-update, but the prerequisites are explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
token-deleteADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sceneId | No | Scene ID (uses active scene if omitted) | |
| tokenId | Yes | Token ID (use token-list to find) |
TDQS
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.
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.
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.
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.
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.
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-listARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sceneId | No | Scene ID (omit for active scene) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, and the description adds genuinely new behavioral context: HP is read from the token rather than the master Actor, which matters for unlinked tokens after damage. The unlinked_character_token warning and its prescribed remediation (module 8.14+) is exactly the kind of non-obvious operational detail structured fields cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and return fields, then layers caveats; every sentence carries information. Slightly awkward phrasing in the warning clause ('warning unlinked_character_token = ...') costs a point for readability but not for waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes on the burden of describing returns and does so by listing the emitted fields and the token IDs used by sibling tools. Combined with the unlinked-token caveat, an agent has everything needed to call it correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage; the schema already says 'Scene ID (omit for active scene)'. The description's 'Omit sceneId for the active scene' repeats that fact rather than adding format, default-resolution, or multi-scene semantics, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List all tokens on a scene') and enumerates the fields returned (positions, HP, AC, conditions, disposition, actorLink). It also distinguishes itself from the sibling mutators by naming token-move, token-update and token-delete as downstream consumers of the IDs it returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete conditional ('Omit sceneId for the active scene') and a routing rule for the unlinked_character_token warning ('fix it with token-update actorLink true, not by editing the actor'), which steers the agent away from a wrong alternative. It stops short of an explicit when-not-to-use statement, so it is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
token-moveAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | New X position in pixels | |
| y | Yes | New Y position in pixels | |
| animate | No | Animate movement (default: true) | |
| tokenId | Yes | Token ID (use token-list to find) | |
| canOpenDoors | No | Open closed doors along the path. Only when the user explicitly asks; default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safety profile (not read-only, not idempotent, not destructive), so the description carries the rest — and it does: pathfinding routes around walls/closed doors, pathCost (cells) signals multi-turn detours, Large+ tokens need wide corridors, and doorsOpened[] reports walls opened. Locked (ds=2)/secret (door=2) doors are called out as impassable with the remedy. This is far beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then dense but information-bearing clauses separated by semicolons; every sentence is relevant. The single wall-of-text paragraph is heavy to parse, costing a point versus fully structured prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with no output schema, the description covers prerequisites, door/wall behavior, turn-cost interpretation, and the doorsOpened[] return value. Nothing essential to calling it correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real meaning the schema lacks: the pixel = gridCoord * gridSize conversion for x/y and the doorsOpened[] side effect of canOpenDoors. tokenId sourcing is reinforced. It stops short of describing the animate parameter, but overall adds value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Move a token') plus the exact target semantics ('pixel coordinates (top-left corner; pixel = gridCoord * gridSize)'), which distinguishes it from token-update/list/delete without opening another schema. The coordinate convention alone tells an agent this is a positional move, not a generic field update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when/when-not guidance: tokenId comes from token-list, canOpenDoors should be used 'only when the user explicitly asks', and locked/secret doors require running scene-set-door-state first. It doesn't explicitly contrast against the sibling token-update, but the prerequisite and gating language is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
token-updateAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| hidden | No | Show/hide from players | |
| tokenId | Yes | Token ID (use token-list to find) | |
| rotation | No | Rotation in degrees (0-360) | |
| actorLink | No | true links the token to its actor (fixes an unlinked player character); module 8.14+ | |
| elevation | No | Elevation in game units |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, so the safety profile is covered. The description adds a genuine behavioral fact beyond them: position is out of scope for this call. It does not discuss reversibility, required permissions, or what happens to fields not supplied, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler. The action and its editable fields are front-loaded, and the position boundary plus alternative tool is placed last where a caller will check it before invoking.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple token mutation with no output schema and annotations carrying the safety profile, the definition covers purpose, the ID lookup path, and the scope exclusion. It omits any mention of permissions or side effects on linked actors, a minor gap given the annotation coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so hidden/tokenId/rotation/actorLink/elevation are all documented in the schema, including edge notes like the 0-360 range and module version. The description mostly re-lists those same field names, adding only the ''visibility'' framing for the hidden flag. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (Update) and resource (token properties), then enumerates the exact editable fields: visibility, elevation, rotation, actorLink. It also draws a hard boundary against token-move for position, letting an agent distinguish it from the sibling without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides the prerequisite ('Use token-list to find tokenId') and an explicit when-not with the correct alternative ('Position is NOT changed here — use token-move ... to relocate a token'). Both the lookup path and the routing decision are stated rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Severity/colour: info (default), warn, error, success. | |
| message | Yes | Notification text. | |
| permanent | No | When true, the notification stays until dismissed instead of auto-hiding. |
TDQS
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.
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.
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.
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.
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.
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-resolveARead-onlyIdempotentInspect
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 from reference fields inside a resolved document (a class item's system.advancement[].configuration.items[].uuid), one hop per call: class → granted features → their effects. Relative UUIDs (starting with ".") are not supported.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | Absolute Foundry UUID, e.g. "Actor.abc123", "Compendium.dnd5e.classes.Item.xyz", "Actor.abc.Item.def". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a read-only, idempotent, non-destructive call, so the description focuses on what those cannot convey: the return payload ('core fields plus the raw document data') and the hard prerequisite of bridge module 8.11.0+. It also warns that UUIDs are not guessed or traversed automatically, preventing a common misuse, though it says nothing about size or truncation of the raw document.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence carries a constraint, a source, or a limitation, with the scope statement front-loaded and the unsupported case last. The parenthetical UUID examples are long but disambiguating, not filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter lookup with no output schema, the description supplies the return shape, the version prerequisite, the traversal model, and the exclusion — everything an agent needs to call it correctly on the first attempt.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the single uuid parameter is already documented with examples; the description still adds real value by constraining it to absolute-only UUIDs and naming the acceptable source of those values rather than allowing free invention.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('Resolve any ABSOLUTE Foundry UUID to its full document') and then enumerates exactly which UUID families are covered (world, compendium, embedded). This makes it trivially distinguishable from siblings such as compendium-document-get or actor-get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly routes the agent to the producing tools (compendium-browse, compendium-page-search, compendium filter tools) and explains the one-hop-per-call traversal pattern (class → granted features → effects). It also states a clear exclusion: relative UUIDs starting with '.' are not supported.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
world-infoARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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-createAInspect
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; world-item-get shows the shape.
| Name | Required | Description | Default |
|---|---|---|---|
| img | No | Image path or URL | |
| name | Yes | Item name | |
| type | Yes | D&D 5e item type. weapon/equipment/consumable/tool/container/loot/spell/feat/background/race/class/subclass/feature. | |
| folder | No | Folder ID (NOT name). Omit for root. | |
| system | No | D&D 5e system data partial: rarity, weight {value,units}, price {value,denomination}, identified, attunement, etc. Foundry deep-merges with defaults. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (non-read-only, non-destructive, non-idempotent, closed-world). The description adds useful behavioral detail beyond that: unknown item types are rejected, folder responses return the folder NAME rather than ID, and system is a dnd5e blob found via world-item-get. It does not discuss permissions or duplicate-creation effects, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and sibling distinction, then moves efficiently through folder semantics, type validation, and system data. Every sentence carries operational value with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description is largely complete for correct invocation: it covers the directory distinction, folder ID behavior, type validation, and system data. It only partially describes the return shape beyond folder NAME and does not mention permissions or whether the created item's ID is returned, which leaves a small but real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 still adds meaning: it clarifies the folder parameter expects a folder ID while responses return a folder name, lists accepted D&D 5e types with a warning that other systems differ and unknown types are rejected, and clarifies system is the dnd5e blob whose shape can be seen via world-item-get.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: create an item in the world's Items Directory (game.items). It explicitly distinguishes this from the sibling item-create by saying this is not an actor's inventory, so an agent can select it confidently 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative (item-create) and clarifies the boundary: shared loot, master copies, and items independent of any actor. It also points to folder-list for folder IDs and world-item-get for system shape, giving explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
world-item-deleteADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| itemId | Yes | World item ID to delete |
TDQS
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.
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.
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.
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.
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.
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-filterARead-onlyIdempotentInspect
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
Ranges are {min?, max?}, inclusive. Items lacking a filtered field are excluded (rarity + spellLevel matches only rare spells).
The response has total and hasMore.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Substring of item name, case-insensitive. | |
| type | No | Item types (OR). | |
| limit | No | Page size 1..200, default 50. | |
| price | No | Price range in gp. | |
| folder | No | Folder by id or name; recursive includes subfolders. | |
| offset | No | Skip first N results. | |
| rarity | No | Rarity (OR), camelCase: veryRare. | |
| weight | No | Weight range in lb. | |
| identified | No | Filter by the identified flag. | |
| spellLevel | No | Spell level 0..9 (0 = cantrip); spells only. | |
| isContainer | No | Only containers. | |
| spellSchool | No | Spell schools (OR), full words; spells only. | |
| hasActivities | No | Only items with usable activities. | |
| requiresAttunement | No | Only items that require attunement. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds behavior beyond that: paginated response of {id, name} only, presence of total and hasMore, AND across filters with OR inside an array, and the non-obvious exclusion rule that items lacking a filtered field drop out (rarity+spellLevel matches only rare spells). Those are precisely the semantics an agent cannot infer from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and routing, then a short labeled block for the non-obvious data-format traps. Every sentence carries information an agent would otherwise get wrong; nothing is restated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter, zero-required filter tool with no output schema, the description covers response shape, pagination signals, combination logic, and exclusion behavior. The remaining gap is result ordering (no sort parameter or documented default order), which affects how an agent interprets offset/limit paging.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3 and the schema already documents each field, including enum casing (veryRare) and spell-only fields. The description earns extra credit for the combination semantics — filters AND together while values inside one array OR — which the schema does not state anywhere. It stops short of discussing interaction between specific filters beyond the rarity/spellLevel note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Search the world's Items Directory (game.items)") plus the scoping constraint (dnd5e worlds only), and explicitly names the two tools it is not (item-list for actor inventories, dnd5e-compendium-filter-items for compendiums). An agent can pick it out of the sibling list 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing rules: use world-item-get for full document data, item-list for an actor's inventory, dnd5e-compendium-filter-items for compendiums. The 'NOT ... NOT ...' phrasing supplies genuine exclusions rather than implied usage, which is exactly what the sibling set requires.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
world-item-getARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| itemId | Yes | World item ID (from world-item-filter). |
TDQS
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.
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.
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.
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.
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.
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-updateAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| img | No | New image path. Omit to leave unchanged. | |
| name | No | New name. Omit to leave unchanged. | |
| folder | No | Tri-state: omit = leave alone, string = set folder ID, null = move to root. | |
| itemId | Yes | World item ID to update | |
| system | No | System-data partial. Deep-merged into existing — pass only the keys you want to change. | |
| clearFolder | No | Alternative move-to-root signal for clients that cannot send literal JSON null. When true, overrides any folder value. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=false, and non-idempotent, and the description is consistent with them. It adds real behavioral context beyond the annotations: partial updates leave untouched fields alone, folder is tri-state, clearFolder overrides folder, and system is deep-merged rather than replaced. That materially aids safe invocation, though it doesn't discuss auth, side effects on linked documents, or return behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, scoping/clarifying the trickiest parameters first (folder tri-state, then system merge). Every clause carries information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter partial-update mutation with no output schema, the description covers the non-obvious semantics (tri-state, merge, clearFolder) that an agent needs to call it correctly. It is nearly complete, with only minor gaps around affected linked data or permission requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter's meaning, including tri-state folder, deep-merge system, and the clearFolder null-workaround. The description largely restates those same semantics (tri-state, deep-merge, clearFolder precedence) rather than adding new meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Update) and resource (world item) and enumerates the updatable facets: name, image, folder, system data. An agent can distinguish it from world-item-create/delete/get by name alone, but the description never explicitly contrasts itself with those siblings, keeping it short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tri-state rules ('omit = unchanged', 'null/clearFolder = move to root') and the deep-merge instruction effectively tell the agent how to call the tool in each case, which is useful conditional guidance. However, there is no explicit when-to-use/when-not or named alternative (e.g., vs world-item-create), so usage context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| seconds | Yes | Delta in seconds. Negative rewinds the clock. |
TDQS
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.
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.
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.
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.
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.
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-getARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety and side-effect profile need no restating. The description's added value is the return contract — raw epoch seconds plus a days/hours/minutes/seconds breakdown — which is meaningful because no output schema exists. It doesn't mention behavior when the world is paused or not yet initialized, keeping it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the primary fact (current world time in seconds since epoch) and then the convenience breakdown. No filler, nothing repeated from annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter getter with no output schema, the description does the essential job by explaining exactly what comes back in both raw and decomposed form. Minor gaps remain around edge-case behavior (paused world, uninitialized game.time), but the agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the description correctly implies no input is required. With no parameters to disambiguate, the baseline of 4 applies; nothing further is needed or expected.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource (get current in-world time) and grounds it in the underlying data path (game.time.worldTime, seconds since world epoch). It also states the exact output shape, which makes it trivially distinguishable from the mutating siblings world-time-set and world-time-advance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is clear from context: this is the read-only companion to world-time-advance and world-time-set, so an agent can infer when to read versus mutate. However, it never explicitly names those alternatives or states a 'use this when you only need the current value' rule, 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.
world-time-setAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| worldTime | Yes | Absolute world time in seconds (>= 0). |
TDQS
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.
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.
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.
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.
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.
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.
13 tool updates
- Changed
chat-list7 fields changed- changed
Input schema / properties / actorId / descriptionPrevious value: -"Filter by actor ID (speaker.actor). Use to see what a specific character said."New value: +"Filter by actor ID (speaker.actor)." - changed
Input schema / properties / authorId / descriptionPrevious value: -"Filter by Foundry user ID of the message author."New value: +"Filter by Foundry user ID of the author." - changed
Input schema / properties / before / descriptionPrevious value: -"Return messages BEFORE this message ID. Use for scrolling back."New value: +"Messages BEFORE this message ID (scrolling back)." - changed
Input schema / properties / includeRolls / descriptionPrevious value: -"Include roll data (formula + total) in results. Default: false."New value: +"Include roll formula and total. Default false." - changed
Input schema / properties / limit / descriptionPrevious value: -"Number of messages to return. Default: 20, max: 100."New value: +"Number of messages. Default 20, max 100." - changed
Input schema / properties / since / descriptionPrevious value: -"Return messages AFTER this message ID. Use for polling new messages."New value: +"Messages AFTER this message ID (polling)." - changed
Input schema / properties / type / descriptionPrevious value: -"Filter by message type: \"ic\" = in-character, \"ooc\" = out-of-character, \"emote\" = action, \"roll\" = dice roll."New value: +"ic = in-character, ooc = out-of-character, emote, roll."
- Changed
chat-send6 fields changed- changed
Input schema / properties / actorId / descriptionPrevious value: -"Actor ID to speak as — shows their portrait and uses their name. Use for NPC dialogue."New value: +"Actor ID (from actor-list or actor-filter) to speak as: portrait and name." - changed
Input schema / properties / content / descriptionPrevious value: -"Message content. Supports HTML: <p>, <strong>, <em>, <blockquote>, <ul>, <li>. Use @UUID[DocumentType.id]{Label} for clickable document links. Must not be empty."New value: +"Message content (HTML allowed), not empty." - changed
Input schema / properties / flavor / descriptionPrevious value: -"Subheading above the message. E.g. \"Narration\", \"The Rusty Dragon Inn\", \"Combat\"."New value: +"Subheading above the message." - changed
Input schema / properties / speaker / descriptionPrevious value: -"Display name of the sender. Defaults to \"Gamemaster\". Overridden by actorId if both provided."New value: +"Sender display name (default \"Gamemaster\"); actorId wins." - changed
Input schema / properties / type / descriptionPrevious value: -"Message style: \"ic\" = in character (NPC speech), \"ooc\" = out of character (meta), \"emote\" = action description."New value: +"ic = in character, ooc = out of character, emote = action." - changed
Input schema / properties / whisperTo / descriptionPrevious value: -"User IDs to whisper to. Message visible only to these users and GM."New value: +"User IDs to whisper to (visible to them and the GM)."
- Changed
item-create1 field changed- changed
Input schema / properties / system / descriptionPrevious value: -"D&D 5e system data: quantity, weight, price, rarity, equipped, range, damage, uses, etc."New value: +"D&D 5e system data."
- Changed
item-update1 field changed- changed
Input schema / properties / system / descriptionPrevious value: -"Updated system data (quantity, equipped, range, damage, uses, etc.)"New value: +"System data to deep-merge."
- Changed
journal-get1 field changed- changed
Input schema / properties / journalId / descriptionPrevious value: -"The journal ID"New value: +"Journal ID (from journal-list or journal-search)"
- Added
macro-create - Added
macro-delete - Added
macro-execute - Added
macro-get - Added
macro-list - Added
macro-update - Changed
roll-table-create3 fields changed- changed
Input schema / properties / formula / descriptionPrevious value: -"Dice formula (e.g., \"1d6\", \"1d100\", \"2d6\"). Default: \"1d20\""New value: +"Dice formula, default \"1d20\"" - changed
Input schema / properties / replacement / descriptionPrevious value: -"Draw with replacement? true = results can repeat (default: true)"New value: +"true = results can repeat (default true)" - changed
Input schema / properties / results / descriptionPrevious value: -"Array of result entries with text, range [low, high], optional weight"New value: +"Result entries"
- Changed
token-create5 fields changed- changed
Input schema / properties / actorId / descriptionPrevious value: -"Actor ID to create token for (use actor-list to find)"New value: +"Actor ID (from actor-list or actor-filter)" - changed
Input schema / properties / elevation / descriptionPrevious value: -"Elevation in game units (for flying, multi-level)"New value: +"Elevation in game units" - changed
Input schema / properties / sceneId / descriptionPrevious value: -"Scene ID (uses active scene if omitted)"New value: +"Scene ID; default the active scene" - changed
Input schema / properties / x / descriptionPrevious value: -"X position in pixels"New value: +"X in pixels" - changed
Input schema / properties / y / descriptionPrevious value: -"Y position in pixels"New value: +"Y in pixels"
20 tool updates
- Changed
actor-update4 fields changed- changed
Input schema / properties / actorId / descriptionPrevious value: -"The actor ID to update"New value: +"Actor ID (from actor-list/actor-filter)" - added
Input schema / properties / sceneIdAdded value: +{ + "description": "Scene of tokenId (default: active)", + "type": "string" +} - added
Input schema / properties / tokenIdAdded value: +{ + "description": "Token ID (from token-list) instead of actorId: that token's own actor (module 8.14+)", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "actorId" -]
- Changed
compendium-page-search3 fields changed- changed
Input schema / properties / packIds / descriptionPrevious value: -"Restrict to specific JournalEntry packs. Omit to search ALL journal packs in the world."New value: +"JournalEntry packs; omit = all" - changed
Input schema / properties / pageTypes / descriptionPrevious 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" - changed
Input schema / properties / query / descriptionPrevious 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"
- Added
dnd5e-apply-damage - Added
dnd5e-apply-healing - Changed
dnd5e-item-activate19 fields changed- changed
Input schema / properties / activityId / descriptionPrevious value: -"Specific activity ID if item has multiple"New value: +"Activity ID if several" - changed
Input schema / properties / actorId / descriptionPrevious value: -"Actor ID performing the action"New value: +"Actor ID" - added
Input schema / properties / advantageAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / ammunitionAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "const": false, + "type": "boolean" + } + ], + "description": "Ammo item ID, or false = spend none" +} - added
Input schema / properties / attackBonusAdded value: +{ + "description": "One-off attack bonus: 2, \"1d4\"", + "type": [ + "number", + "string" + ] +} - added
Input schema / properties / attackModeAdded value: +{ + "description": "oneHanded, twoHanded, offhand, thrown, thrown-offhand", + "type": "string" +} - added
Input schema / properties / attackerTokenIdAdded value: +{ + "description": "Act as this token of the actor (several copies)", + "type": "string" +} - added
Input schema / properties / consumeAdded value: +{ + "additionalProperties": false, + "description": "What may be spent; omitted = the system decides", + "properties": { + "ammunition": { + "type": "boolean" + }, + "itemUses": { + "type": "boolean" + }, + "spellSlot": { + "type": "boolean" + } + }, + "type": "object" +} - added
Input schema / properties / damageBonusAdded value: +{ + "description": "One-off damage bonus: \"1d6\" (Sneak Attack)", + "type": "string" +} - added
Input schema / properties / disadvantageAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / fastForwardAdded value: +{ + "description": "Skip dialogs and auto-roll (default true)", + "type": "boolean" +} - changed
Input schema / properties / itemId / descriptionPrevious value: -"Item ID to activate (from item-list)"New value: +"Item ID (from item-list)" - changed
Input schema / properties / spellLevel / descriptionPrevious 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" - added
Input schema / properties / targetAcBonusAdded value: +{ + "description": "Added to each target AC (cover); Midi-QOL only", + "type": "number" +} - changed
Input schema / properties / targetTokenIds / descriptionPrevious 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" - changed
Input schema / properties / templatePosition / descriptionPrevious 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" - changed
Input schema / properties / templatePosition / properties / direction / descriptionPrevious 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" - changed
Input schema / properties / templatePosition / properties / x / descriptionPrevious value: -"X coordinate in pixels"New value: +"X in pixels" - changed
Input schema / properties / templatePosition / properties / y / descriptionPrevious value: -"Y coordinate in pixels"New value: +"Y in pixels"
- Changed
dnd5e-item-use7 fields changed- changed
Input schema / properties / activityId / descriptionPrevious value: -"Specific activity ID to use if the item has multiple activities"New value: +"Activity ID if the item has several" - changed
Input schema / properties / activityType / descriptionPrevious value: -"Activity type to use (e.g., \"attack\", \"save\", \"heal\", \"utility\")"New value: +"Activity type: \"attack\", \"save\", \"heal\", \"utility\"" - changed
Input schema / properties / actorId / descriptionPrevious value: -"The actor ID that owns the item"New value: +"Actor ID" - changed
Input schema / properties / consume / descriptionPrevious value: -"Whether to consume the item (default: true for consumables)"New value: +"Consume (default true for consumables)" - changed
Input schema / properties / itemId / descriptionPrevious value: -"The item ID to use. Use item-list to find item IDs."New value: +"Item ID (from item-list)" - changed
Input schema / properties / scaling / descriptionPrevious value: -"Spell slot level for scaling spells"New value: +"Spell slot level" - changed
Input schema / properties / showInChat / descriptionPrevious value: -"Whether to show the result in chat (default: true)"New value: +"Post to chat (default true)"
- Changed
dnd5e-roll-ability3 fields changed- changed
Input schema / properties / ability / descriptionPrevious 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)" - added
Input schema / properties / advantageAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / disadvantageAdded value: +{ + "type": "boolean" +}
- Changed
dnd5e-roll-attack2 fields changed- added
Input schema / properties / advantageAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / disadvantageAdded value: +{ + "type": "boolean" +}
- Changed
dnd5e-roll-save3 fields changed- changed
Input schema / properties / ability / descriptionPrevious 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)" - added
Input schema / properties / advantageAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / disadvantageAdded value: +{ + "type": "boolean" +}
- Changed
dnd5e-roll-skill3 fields changed- added
Input schema / properties / advantageAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / disadvantageAdded value: +{ + "type": "boolean" +} - changed
Input schema / properties / skill / descriptionPrevious 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"
- Changed
effect-create17 fields changed- changed
Input schema / properties / actorId / descriptionPrevious value: -"The actor ID to add the effect to"New value: +"Actor ID (from actor-list/actor-filter)" - changed
Input schema / properties / changes / descriptionPrevious value: -"Array of attribute changes this effect applies"New value: +"Attribute changes" - changed
Input schema / properties / changes / items / properties / key / descriptionPrevious value: -"The data path to modify (e.g., \"system.attributes.ac.bonus\")"New value: +"Data path, e.g. \"system.attributes.ac.bonus\"" - changed
Input schema / properties / changes / items / properties / mode / descriptionPrevious 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" - changed
Input schema / properties / changes / items / properties / value / descriptionPrevious value: -"The value to apply (numbers as strings, e.g., \"2\")"New value: +"Value as a string (\"2\")" - changed
Input schema / properties / disabled / descriptionPrevious value: -"If true, effect is added but disabled"New value: +"Add disabled" - changed
Input schema / properties / duration / descriptionPrevious value: -"Effect duration (combat or time-based)"New value: +"Duration" - changed
Input schema / properties / duration / properties / rounds / descriptionPrevious value: -"Duration in combat rounds"New value: +"Combat rounds" - changed
Input schema / properties / duration / properties / seconds / descriptionPrevious value: -"Duration in seconds"New value: +"Seconds" - changed
Input schema / properties / duration / properties / turns / descriptionPrevious value: -"Duration in combat turns"New value: +"Combat turns" - changed
Input schema / properties / img / descriptionPrevious value: -"Icon path for the effect"New value: +"Icon path" - changed
Input schema / properties / name / descriptionPrevious value: -"Name of the effect (e.g., \"Bless\", \"Shield of Faith\", \"Temporary Buff\")"New value: +"Effect name (\"Bless\")" - changed
Input schema / properties / origin / descriptionPrevious value: -"UUID of the source (item, spell, etc.) that created this effect"New value: +"Source UUID (item, spell)" - added
Input schema / properties / sceneIdAdded value: +{ + "description": "Scene of tokenId (default: active)", + "type": "string" +} - changed
Input schema / properties / statuses / descriptionPrevious value: -"Array of status IDs this effect applies (e.g., [\"blinded\", \"deafened\"])"New value: +"Status IDs applied ([\"blinded\"])" - added
Input schema / properties / tokenIdAdded value: +{ + "description": "Token ID (from token-list) instead of actorId: that token's own actor (module 8.14+)", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "actorId", - "name" -]New value: +[ + "name" +]
- Changed
effect-delete5 fields changed- changed
Input schema / properties / actorId / descriptionPrevious value: -"The actor ID to remove the effect from"New value: +"Actor ID (from actor-list/actor-filter)" - changed
Input schema / properties / effectId / descriptionPrevious value: -"The effect ID to remove. Use effect-list to find IDs."New value: +"Effect ID (from effect-list)" - added
Input schema / properties / sceneIdAdded value: +{ + "description": "Scene of tokenId (default: active)", + "type": "string" +} - added
Input schema / properties / tokenIdAdded value: +{ + "description": "Token ID (from token-list) instead of actorId: that token's own actor (module 8.14+)", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "actorId", - "effectId" -]New value: +[ + "effectId" +]
- Changed
effect-list4 fields changed- changed
Input schema / properties / actorId / descriptionPrevious value: -"The actor ID to get effects from"New value: +"Actor ID (from actor-list/actor-filter)" - added
Input schema / properties / sceneIdAdded value: +{ + "description": "Scene of tokenId (default: active)", + "type": "string" +} - added
Input schema / properties / tokenIdAdded value: +{ + "description": "Token ID (from token-list) instead of actorId: that token's own actor (module 8.14+)", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "actorId" -]
- Changed
effect-toggle-status7 fields changed- changed
Input schema / properties / active / descriptionPrevious value: -"Explicitly set active state (true = add, false = remove). If not specified, toggles current state."New value: +"true = add, false = remove; omitted = toggle" - changed
Input schema / properties / actorId / descriptionPrevious value: -"The actor ID to toggle status on"New value: +"Actor ID (from actor-list/actor-filter)" - changed
Input schema / properties / overlay / descriptionPrevious value: -"If true, shows as large overlay icon on token"New value: +"Show as the large overlay icon" - added
Input schema / properties / sceneIdAdded value: +{ + "description": "Scene of tokenId (default: active)", + "type": "string" +} - changed
Input schema / properties / statusId / descriptionPrevious value: -"The status/condition ID (e.g., \"blinded\", \"poisoned\", \"prone\")"New value: +"Status ID: \"blinded\", \"poisoned\", \"prone\", …" - added
Input schema / properties / tokenIdAdded value: +{ + "description": "Token ID (from token-list) instead of actorId: that token's own actor (module 8.14+)", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "actorId", - "statusId" -]New value: +[ + "statusId" +]
- Changed
effect-update15 fields changed- changed
Input schema / properties / actorId / descriptionPrevious value: -"The actor ID that has the effect"New value: +"Actor ID (from actor-list/actor-filter)" - changed
Input schema / properties / changes / descriptionPrevious value: -"New array of attribute changes (replaces existing changes)"New value: +"Replaces all changes" - changed
Input schema / properties / changes / items / properties / key / descriptionPrevious value: -"The data path to modify"New value: +"Data path" - changed
Input schema / properties / changes / items / properties / mode / descriptionPrevious 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" - changed
Input schema / properties / changes / items / properties / value / descriptionPrevious value: -"The value to apply"New value: +"Value as a string" - changed
Input schema / properties / disabled / descriptionPrevious value: -"Enable/disable the effect"New value: +"Enable/disable" - changed
Input schema / properties / duration / descriptionPrevious value: -"New effect duration"New value: +"Duration" - changed
Input schema / properties / duration / properties / rounds / descriptionPrevious value: -"Duration in combat rounds"New value: +"Combat rounds" - changed
Input schema / properties / duration / properties / seconds / descriptionPrevious value: -"Duration in seconds"New value: +"Seconds" - changed
Input schema / properties / duration / properties / turns / descriptionPrevious value: -"Duration in combat turns"New value: +"Combat turns" - changed
Input schema / properties / effectId / descriptionPrevious value: -"The effect ID to update. Use effect-list to find IDs."New value: +"Effect ID (from effect-list)" - changed
Input schema / properties / name / descriptionPrevious value: -"New name for the effect"New value: +"New name" - added
Input schema / properties / sceneIdAdded value: +{ + "description": "Scene of tokenId (default: active)", + "type": "string" +} - added
Input schema / properties / tokenIdAdded value: +{ + "description": "Token ID (from token-list) instead of actorId: that token's own actor (module 8.14+)", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "actorId", - "effectId" -]New value: +[ + "effectId" +]
- Changed
item-create7 fields changed- removed
Input schema / properties / system / properties / damage / descriptionRemoved value: -"Damage" - removed
Input schema / properties / system / properties / damage / properties / base / properties / types / descriptionRemoved value: -"e.g. [\"slashing\"]" - removed
Input schema / properties / system / properties / range / descriptionRemoved value: -"Weapon/spell range" - changed
Input schema / properties / system / properties / range / properties / long / descriptionPrevious value: -"Long range (e.g. 600)"New value: +"e.g. 600" - changed
Input schema / properties / system / properties / range / properties / reach / descriptionPrevious value: -"Melee reach in ft (default 5)"New value: +"reach ft" - removed
Input schema / properties / system / properties / range / properties / units / descriptionRemoved value: -"ft or m" - changed
Input schema / properties / system / properties / range / properties / value / descriptionPrevious value: -"Normal range (e.g. 150)"New value: +"e.g. 150"
- Changed
item-update7 fields changed- removed
Input schema / properties / system / properties / damage / descriptionRemoved value: -"Damage" - removed
Input schema / properties / system / properties / damage / properties / base / properties / types / descriptionRemoved value: -"e.g. [\"slashing\"]" - removed
Input schema / properties / system / properties / range / descriptionRemoved value: -"Weapon/spell range" - changed
Input schema / properties / system / properties / range / properties / long / descriptionPrevious value: -"Long range (e.g. 600)"New value: +"e.g. 600" - changed
Input schema / properties / system / properties / range / properties / reach / descriptionPrevious value: -"Melee reach in ft (default 5)"New value: +"reach ft" - removed
Input schema / properties / system / properties / range / properties / units / descriptionRemoved value: -"ft or m" - changed
Input schema / properties / system / properties / range / properties / value / descriptionPrevious value: -"Normal range (e.g. 150)"New value: +"e.g. 150"
- Changed
roll-perception2 fields changed- added
Input schema / properties / advantageAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / disadvantageAdded value: +{ + "type": "boolean" +}
- Changed
token-create1 field changed- added
Input schema / properties / actorLinkAdded value: +{ + "description": "true = shares the actor, false = independent copy (module 8.14+)", + "type": "boolean" +}
- Changed
token-update1 field changed- added
Input schema / properties / actorLinkAdded value: +{ + "description": "true links the token to its actor (fixes an unlinked player character); module 8.14+", + "type": "boolean" +}
2 tool updates
- Changed
item-create7 fields changed- changed
Input schema / properties / system / properties / uses / additionalPropertiesPrevious value: -falseNew value: +true - added
Input schema / properties / system / properties / uses / properties / max / anyOfAdded value: +[ + { + "type": [ + "number", + "string" + ] + }, + { + "type": "null" + } +] - removed
Input schema / properties / system / properties / uses / properties / max / typeRemoved value: -[ - "number", - "null" -] - changed
Input schema / properties / system / properties / uses / properties / per / descriptionPrevious value: -"Recovery: \"sr\", \"lr\", \"day\", \"charges\""New value: +"dnd5e 3.x" - added
Input schema / properties / system / properties / uses / properties / recoveryAdded value: +{ + "description": "[{ period: \"lr\" }]", + "items": { + "additionalProperties": true, + "properties": { + "period": { + "type": "string" + } + }, + "required": [ + "period" + ], + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / system / properties / uses / properties / spentAdded value: +{ + "description": "dnd5e 4+: spent", + "minimum": 0, + "type": "integer" +} - changed
Input schema / properties / system / properties / uses / properties / value / descriptionPrevious value: -"Remaining uses"New value: +"dnd5e 3.x"
- Changed
item-update7 fields changed- changed
Input schema / properties / system / properties / uses / additionalPropertiesPrevious value: -falseNew value: +true - added
Input schema / properties / system / properties / uses / properties / max / anyOfAdded value: +[ + { + "type": [ + "number", + "string" + ] + }, + { + "type": "null" + } +] - removed
Input schema / properties / system / properties / uses / properties / max / typeRemoved value: -[ - "number", - "null" -] - changed
Input schema / properties / system / properties / uses / properties / per / descriptionPrevious value: -"Recovery: \"sr\", \"lr\", \"day\", \"charges\""New value: +"dnd5e 3.x" - added
Input schema / properties / system / properties / uses / properties / recoveryAdded value: +{ + "description": "[{ period: \"lr\" }]", + "items": { + "additionalProperties": true, + "properties": { + "period": { + "type": "string" + } + }, + "required": [ + "period" + ], + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / system / properties / uses / properties / spentAdded value: +{ + "description": "dnd5e 4+: spent", + "minimum": 0, + "type": "integer" +} - changed
Input schema / properties / system / properties / uses / properties / value / descriptionPrevious value: -"Remaining uses"New value: +"dnd5e 3.x"
121 tool updates
- First observed
actor-create - First observed
actor-create-from-compendium - First observed
actor-delete - First observed
actor-filter - First observed
actor-get - First observed
actor-list - First observed
actor-update - First observed
canvas-pan - First observed
canvas-ping - First observed
chat-clear - First observed
chat-delete - First observed
chat-export - First observed
chat-list - First observed
chat-send - First observed
chat-update - First observed
combat-add-combatant - First observed
combat-create - First observed
combat-delete - First observed
combat-get - First observed
combat-next-turn - First observed
combat-previous-turn - First observed
combat-remove-combatant - First observed
combat-roll-all-initiative - First observed
combat-roll-initiative - First observed
combat-set-combatant-defeated - First observed
combat-set-initiative - First observed
combat-set-turn - First observed
combat-start - First observed
combat-toggle-combatant-visibility - First observed
compendium-browse - First observed
compendium-document-get - First observed
compendium-document-get-raw - First observed
compendium-list - First observed
compendium-page-search - First observed
compendium-search - First observed
dnd5e-compendium-filter-actors - First observed
dnd5e-compendium-filter-items - First observed
dnd5e-item-activate - First observed
dnd5e-item-use - First observed
dnd5e-roll-ability - First observed
dnd5e-roll-attack - First observed
dnd5e-roll-damage - First observed
dnd5e-roll-save - First observed
dnd5e-roll-skill - First observed
effect-create - First observed
effect-delete - First observed
effect-list - First observed
effect-toggle-status - First observed
effect-update - First observed
folder-create - First observed
folder-delete - First observed
folder-get - First observed
folder-list - First observed
folder-update - First observed
game-pause - First observed
game-pause-get - First observed
game-resume - First observed
handout-template-get - First observed
handout-template-list - First observed
item-create - First observed
item-create-from-compendium - First observed
item-delete - First observed
item-list - First observed
item-update - First observed
journal-create - First observed
journal-delete - First observed
journal-folder-list - First observed
journal-get - First observed
journal-list - First observed
journal-page-create - First observed
journal-page-delete - First observed
journal-page-get - First observed
journal-page-update - First observed
journal-search - First observed
journal-show - First observed
journal-update - First observed
pf2e-cast-spell - First observed
pf2e-compendium-filter-actors - First observed
pf2e-compendium-filter-items - First observed
pf2e-decrease-condition - First observed
pf2e-get-conditions - First observed
pf2e-increase-condition - First observed
pf2e-list-strikes - First observed
pf2e-post-item - First observed
pf2e-remove-condition - First observed
pf2e-roll-perception - First observed
pf2e-roll-save - First observed
pf2e-roll-skill - First observed
pf2e-roll-strike - First observed
pf2e-roll-strike-damage - First observed
pf2e-set-condition - First observed
pf2e-use-consumable - First observed
roll-dice - First observed
roll-perception - First observed
roll-table-create - First observed
roll-table-delete - First observed
roll-table-get - First observed
roll-table-list - First observed
roll-table-reset - First observed
roll-table-roll - First observed
roll-table-update - First observed
scene-activate - First observed
scene-get - First observed
scene-list - First observed
scene-set-door-state - First observed
token-create - First observed
token-delete - First observed
token-list - First observed
token-move - First observed
token-update - First observed
ui-notify - First observed
uuid-resolve - First observed
world-info - First observed
world-item-create - First observed
world-item-delete - First observed
world-item-filter - First observed
world-item-get - First observed
world-item-update - First observed
world-time-advance - First observed
world-time-get - First observed
world-time-set
Related MCP Connectors
D&D and TTRPG campaign manager for GMs: your AI reads and writes a live, typed campaign database.
Create AI Characters and generate their DM and comment replies from any MCP client.
Characters, campaigns, adventures & worlds for D&D 5e/5.5e, Pathfinder, Savage Worlds, Fate, & more.
MCP server for Argo RPG Platform — connects AI assistants to campaign data via OAuth2
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to act as co-GMs and GM assistants within Foundry Virtual Tabletop, providing tools for game mechanics, actors, tokens, combat, canvas placeables, scenes, and world management.15 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to interact with Foundry Virtual Tabletop, supporting reading world data, managing combat, rolling dice, and updating actor attributes via a sidecar architecture.15 npmMIT
- AlicenseAqualityAmaintenanceEnables AI-powered image generation and curation for Foundry VTT tabletop art, letting users create portraits, tokens, handouts, and scene backgrounds from prompts via a local headless ComfyUI workflow.4MIT
- AlicenseNot gradedqualityFmaintenanceEnables AI-powered campaign management for Foundry Virtual Tabletop through natural language, supporting multiple RPG systems with tools for quest creation, character management, combat resolution, and more.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.