fvtt-mcp-molten5e
This server is a D&D 5e MCP bridge that lets Claude Code read and edit a live Foundry VTT world on Molten Hosting — authoring actors, items, scenes, journals, and more, plus managing static assets over WebDAV.
Actors & PCs — list/get/search actors, copy premium-book creatures, author custom NPCs, build and level PCs with real dnd5e advancement, set ownership, delete actors.
Items & equipment — create/edit/delete world items, import official gear from compendiums, author structured weapons/armor/consumables/containers, manage activities (attacks, saves, heals, cast) and active effects/conditions.
Compendium discovery — search premium PHB/DMG/MM packs for creatures, spells, and items with faceted filters; fetch full stat blocks.
Journals & quests — build styled multi-page quest journals, link quests to real NPCs, append session logs, search, and control player visibility.
Scenes & placeables — create/update/delete scenes and place walls, lights, sounds, tiles, drawings, tokens, map-note pins, and regions/teleporters; screenshot scenes for visual QA.
Combat & world state — apply conditions, read combat stats and chat logs, manage the in-world calendar and dnd5e 6.0 automation settings.
Asset file management (WebDAV) — list, upload, download, move, copy, delete, and URL-map files under Data/, with reference-aware safety checks.
Reference integrity — find and relink asset references across documents.
Adventure map-pack import — read Tom-Cartos-style scene-pack modules off disk and recreate their scenes/journals in the world.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@fvtt-mcp-molten5elist all NPCs in the current scene"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
fvtt-mcp-dnd5e
An MCP server and a set of Claude Code skills that build D&D 5e content in a live Foundry VTT world. A pasted stat block becomes a complete NPC with its loot; a map image becomes a walled, lit scene; an adventure becomes journals, tables and handouts; a Discord recording becomes the session recap. Everything is built from the 2024 premium books you own, never the SRD.
Targets dnd5e 6.0.3+ on Foundry 14.368+, on any host — a hosting provider, this machine, a URL.
Setup
git clone https://github.com/Txpple/fvtt-mcp-dnd5e && cd fvtt-mcp-dnd5e
npm install && npx playwright install chromium && npm run build
cp .env.example .env # FOUNDRY_URL, FOUNDRY_USER / FOUNDRY_PASSWORD
cp .mcp.json.example .mcp.json # absolute paths; one registration per Foundry instance
node scripts/install-skills.mjs ~/my-campaign # optional: link the skills into another projectIn Foundry, create the user the server joins as (Gamemaster or Assistant GM; default name
MCP-Claude). Start Claude Code and say "start the world": the server wakes the instance if
it sleeps, launches the world if FOUNDRY_ADMIN_KEY is set, joins, and reports the world, the
host, its role and which premium books it found. Then ask for content.
Requirements: Node.js 22+ · Foundry 14.368+ with dnd5e 6.0.3+ (the tools refuse a pre-6.0
world; an older world is upgraded Foundry-first, then dnd5e —
docs/hosts.md) · the Monster Manual,
Player's Handbook and Dungeon Master's Guide modules for authoring (Heroes of Faerûn and
Ravenloft: The Horrors Within are optional).
Related MCP server: FoundryVTT MCP Server
Skills
Say it in plain words; the matching skill calls the tools.
Skill | Does |
| boot the world and report its state (read-only) |
| a complete NPC from a stat block — stats, actions, spells, effects, inventory, loot, art |
| a complete player character — class, species, background, choices, spells, gear, art, owner |
| weapons, armor, wondrous items, potions, loot — the real PHB / DMG item first |
| a map image into a ready-to-play scene: walls, lights, mood, playlist, journal |
| quests, handouts, lore, boxed text, GM notes, recaps — linked to each other |
| roll tables, card decks, music and ambience |
| atmospheric sound for a scene (companion module — below) |
| a scene-pack module into your world: scenes, walls, lights, teleporters, legend |
| a cut-out token image onto an actor |
| narration, NPC dialogue, whispers, roll requests, item cards; export or prune the log |
| a Craig (Discord) recording → transcript aligned with the chat log → recap, combat report, GM notes |
| audit next session's encounters; diff the world against the plot; log what the party fought |
The campaign-facing skills keep your campaign's facts and house style in a repo of your own
(campaign.json + STYLE.md — campaign-repo.md);
nothing about one table lives here.
Tools
81 tools. One family tool per document type, selected by action: manage-actors,
manage-scenes, manage-placeables (with a kind: walls, lights, tokens, regions, sounds,
tiles, drawings, notes), manage-items, manage-journals, manage-rolltables, manage-cards,
manage-playlists, manage-folders, manage-macros. Around them:
D&D authoring —
author-npc,create-pc/level-up-pc,add-feature,add-item,manage-effect,manage-activity,apply-condition,set-actor-art, the quest journals,content-audit.Reading —
get-world-info,search-compendium(creatures / spells / items, with facets),get-compendium-entry,read-pack,search-journals,screenshot-scene.At the table —
send-chat-message,request-roll,post-item-card,export-chat-log,roll-on-table,configure-combat-tracker,activate-scene,configure-dnd5e-settings,manage-calendar.Files — upload, list, download, copy, move, delete, relink; on every host through Foundry's own file picker, faster with a direct plane.
Users and organization — ownership, groups and the primary party,
move-documents,bulk-delete.
A list answers one line per record, a get answers JSON, a miss is an error, an unknown argument
is refused by name. The full table is src/registry.ts. FOUNDRY_TOOLSETS
lets a registration advertise a subset (chat,combat is 12 tools instead of 81).
Three tools need a companion module and warn when it is absent: configure-soundscape
(fvtt-mod-soundscape), get-combat-stats
(fvtt-mod-battleflow), set-landing-scene
(fvtt-mod-openserver).
Hosts
Where the world runs is a preset chosen per registration with FOUNDRY_HOST
(docs/hosts.md):
| Means |
| any Foundry at |
| Molten Hosting: the panel's wake URL, WebDAV derived from the URL |
| an install on this machine — its |
One .env serves every registration; .env.example explains each variable.
How it works
Foundry has no server-side plugin API, so the server drives a headless Chromium (Playwright):
it joins the world as the dedicated user, waits for game.ready, and injects a page-side library;
every tool call runs inside that live page through Foundry's own client APIs. The connection is
lazy — the first real tool call is what wakes and joins. The sister repos drive a world through
the same bridge as a library: import { connectFoundry } from 'fvtt-mcp-dnd5e/client'
(docs/contracts.md).
Development
The offline gate is npm run check && npm run typecheck && npm test && npm run build && npm run knip
(npm test prints and ratchets the context budgets). Live proof runs against a sandbox:
FOUNDRY_HOST=local node scripts/verify-<family>.mjs and
FOUNDRY_HOST=local RUN_LIVE=1 npm run test:integration. House rules:
CONTRIBUTING.md · release gate: docs/RELEASE.md · design:
design.md · changes: CHANGELOG.md.
Out of scope: other game systems; a live in-session assistant; AI map generation; D&D Beyond import.
Security
Outbound only — the server and the browser run on your machine and authenticate to Foundry as a
user. Secrets stay in .env (gitignored); errors name a missing variable, never its value. Agent
inputs are untrusted: writes go through Foundry's own APIs, destructive file operations refuse a
live world's database and delete only on an exact match. Anything under Foundry's Data/ is
served to the world's users — don't upload anything sensitive.
License
MIT — see LICENSE.
Available Tools
151 toolsactivate-sceneA
ACTIVATE a scene — make it the one active scene, which is where connected clients land and where users log in. Foundry allows exactly ONE active scene world-wide, so this deactivates whatever was active; the previous scene is reported back so you can put it back. Activating an already-active scene is a no-op and says so (alreadyActive) rather than pretending it did something. Kept separate from update-scene (which is scene-DOCUMENT-only and never activates) because this changes every connected player's screen. To move only SOME players, leave the active scene alone and use pull-users-to-scene instead. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| sceneIdentifier | Yes | Scene id or exact name to make the active scene. STRICT — no fuzzy matching. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so well. It discloses that only one active scene exists world-wide, that the previous scene is deactivated and reported back, and that activating an already-active scene is a no-op. It also notes the GM-only permission requirement.
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 dense but every sentence earns its place: it front-loads the core action, explains global consequences, reports the no-op behavior, and routes to alternatives. There is no filler or repetition of schema details.
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 tool with a single parameter and no output schema, the description is complete. It covers the effect on connected clients, the deactivation behavior, the no-op case, the GM-only restriction, and the sibling tools to use instead.
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 the single parameter. The description adds value by explaining that matching is strict with no fuzzy matching, and that the value can be a scene id or exact name, which helps the agent use the parameter 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 specific verb and resource: activating a scene to make it the single active scene where clients land and users log in. It explicitly differentiates itself from update-scene and pull-users-to-scene, so an agent can distinguish it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance and names alternatives: use update-scene for document-only changes, and pull-users-to-scene for moving only some players. It also states the GM-only restriction, 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.
add-featureA
Add a feature/spell/ability to an existing actor (NPC or PC). Set mode: • 'compendium-features' — import named class/monster features from an official compendium (PREFERRED for official content, e.g. Pack Tactics, Multiattack, Spellcasting). Params under compendiumFeatures. • 'feature' — author a feature/attack/spellcasting setup/spells from scratch (use only when not available in a compendium). Params under feature (select feature.featureType). • 'items' — attach world items by raw data. For real GEAR prefer import-item (copy from a compendium, keeps art+stats) or add-item (author); use this mode only for free-form item data. Params under items[]. actorIdentifier (exact name or ID) is always required — find it with list-actors / get-actor.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | Which granting path to use. 'compendium-features' (preferred) imports named features from a pack; 'feature' authors one from scratch; 'items' attaches world items. | |
| items | No | World items to attach when mode='items'. Each needs a name and a valid dnd5e item type (e.g. 'weapon', 'equipment', 'consumable', 'feat'); pass system-specific data via system. | |
| feature | No | Parameters when mode='feature' — author a feature/attack/spellcasting/spells. Select feature.featureType; actorIdentifier is taken from the top level. | |
| actorIdentifier | Yes | Target actor (exact name or ID). | |
| compendiumFeatures | No | Parameters when mode='compendium-features' — import named features from a compendium pack. actorIdentifier is taken from the top level. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description details additive behavior for each mode, includes caveats about unresolvedScale tokens in compendium imports and sourcing restrictions, though it could mention permanent data modification more explicitly.
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?
Well-structured with bullet points for modes, front-loads core purpose, but is somewhat lengthy due to complexity; could be slightly more concise without losing essential 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?
Given the complexity (three modes, many parameters, no output schema), the description covers all necessary aspects including mode selection, parameter usage, sourcing rules, and caveats like unresolvedScale, making it comprehensive.
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 detailed property descriptions; the description adds high-level organization and usage context but does not significantly enhance 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?
The description clearly states the tool adds features/spells/abilities to actors, outlines three distinct modes with clear explanations, and differentiates from sibling tools like add-item and import-item by explicitly recommending their use for gear.
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 on when to use each mode (compendium-features preferred for official content, feature for custom authoring, items only for free-form data) and references sibling tools for gear, along with instructions to find actorIdentifier using list-actors/get-actor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add-free-castA
[D&D 5e] Grant "cast without a spell slot, N per rest" the native 2024 way — Magic Initiate, Favored Enemy, lineage grants. TWO sheet entries result: the spell stays in the repertoire as a normal ALWAYS-PREPARED spell (castable with slots; imported from the compendium if missing), and a cast activity ON the granting feature projects a " - " entry into the sheet's native "Additional Spells" spellbook section with its own tracked pool (default 1/long rest) — no slot, no use-dialog. Also MIGRATES the old shape (on-spell use pool + forward activity) off the spell, and dedupes dnd5e's cached spellbook copies. Idempotent. NEVER track a free cast as a separate tracker feat or as a forward on the spell.
| Name | Required | Description | Default |
|---|---|---|---|
| uses | No | Free casts per recovery period. A number, or a formula string like "@scale.ranger.favored-enemy" for level-scaled pools. Default 1. | |
| grantedBy | Yes | The granting feature ITEM on the actor (name or id) — e.g. "Magic Initiate", "Favored Enemy", a lineage feature. The cast activity lands ON this item and the Additional Spells entry is titled "<Spell> - <feature name>". | |
| recoveryPeriod | No | When the free casts come back: "lr" long rest (default — the 2024 wording for feat-granted casts), "sr" short rest, "day", "dawn", or "dusk". | |
| actorIdentifier | Yes | Name or id of the actor (partial name match supported). Also accepts a placed TOKEN id (from list-tokens): the edit then lands on that token INSTANCE's own delta. | |
| spellIdentifier | Yes | The spell to grant a free cast of — an embedded spell on the actor (name or id), or a premium compendium uuid ("Compendium.dnd-players-handbook.spells.Item.…") to also ADD it to the repertoire (always prepared) when the actor lacks it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and excels: it details all permanent effects (spell becomes ALWAYS-PREPARED, cast activity lands on the granting feature, Additional Spells entry is created), the MIGRATION of the old shape off the spell, deduping of cached copies, and idempotency. The explicit 'NEVER' warning further clarifies what the tool will not do, leaving no behavioral surprises for the agent.
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 dense with high-value information and the purpose is front-loaded before the mechanism details. Every sentence earns its place, including the migration, dedupe, and idempotency notes. However, it is a single punctuation-heavy wall of text with multiple emphasized phrases, which reduces scannability relative to a structured multi-sentence layout.
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 tool with no annotations and no output schema, this description covers an exceptional amount: the full dual-entry mechanism, defaults, migration, dedupe, idempotency, and anti-patterns. It falls slightly short of a 5 because it does not describe what the agent will receive back after invocation (no return-value note compensates for the missing output schema), nor does it cover failure cases like a missing granting feature.
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 genuine value on top by explaining the end-state interplay between parameters — how spellIdentifier can be imported from the compendium and become always prepared, how grantedBy hosts the activity and names the Additional Spells entry, and how uses/recoveryPeriod default to 1/long rest. This connective tissue helps the agent reason about the parameters as a system rather than isolated 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 description states a specific verb and resource — 'Grant cast without a spell slot, N per rest' on a D&D 5e actor via the 'native 2024 way' — with concrete examples (Magic Initiate, Favored Enemy, lineage grants). It specifies the resulting two sheet entries in detail, making it unmistakable what the tool accomplishes and clearly distinct from siblings like add-feature or manage-activity.
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 when the tool applies: granting free-cast abilities through native 2024 features and migrating the legacy shape. It includes an explicit never-do-this instruction that prevents the obvious wrong implementation. However, it never names an alternative sibling for comparison, so an agent comparing it to add-feature or manage-activity must infer the boundary from the mechanism described.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add-itemA
[D&D 5e only] Create a structured physical item (loot/gear) on an actor or in the world Items sidebar. Pick itemType, then supply only the fields you need — sensible defaults fill the rest:
• weapon — to-hit weapon. damage (base die), weaponClass, attackType, reach/range, magicalBonus, properties. Builds a rollable attack activity by default (withAttack).
• armor / shield — armorValue, dex, strength; magicalBonus = +N AC. Pass wireAc (BODY ARMOR only) to make the actor derive AC from the worn armor; a shield needs no wireAc (its +2 applies under any AC calc).
• wondrous — rings/cloaks/etc. (equipmentType); use magical:true + attunement (a wondrous item has no numeric +N field — model a bonus with manage-effect).
• consumable — potion/scroll/ammo/wand. consumableType, uses {max, recovery, autoDestroy}. Ammo can carry damage + ammoReplace + magicalBonus.
• tool — toolType, ability, proficient, toolBonus.
• loot — gems/art/trade goods (lootType, price). NOT equippable/attunable.
• container — bag/chest with capacity and an inner currency pile. Place items inside any container with the container param (id or name).
Cross-cutting: price, weight, quantity, rarity, identified, equipped, attunement (""/required/optional) + attuned, magicalBonus (the +N), properties (incl. "mgc"). Setting magicalBonus/magical adds the mgc flag; the numeric +N is stored for weapons, body armor, and magic ammo (wondrous/potion have no +N field). Unlike add-feature, add-item does NOT reject a duplicate name — intentional, so you can author stacks/copies; de-dupe yourself if you need uniqueness.
Target: actorIdentifier embeds on that actor; omit it to create a reusable world Item (optionally in folder). This authors documents — it does NOT roll, equip-in-combat, or spend charges. For features/attacks-as-abilities use add-feature; for free-form system data use create-item / add-feature. To COPY a real item from a compendium (keeps art + stats), prefer import-item.
| Name | Required | Description | Default |
|---|---|---|---|
| dex | No | [armor] Max Dex bonus to AC (omit = unlimited/light; 2 = medium; 0 = heavy). | |
| img | No | Icon path (e.g. "icons/weapons/swords/sword-runed.webp"). A path that does NOT resolve on the server is auto-replaced with a real icon (rule 8) and reported as a warning — omit img to auto-fill, or copy a verified path from a compendium item rather than guessing. | |
| name | Yes | Item name. | |
| uses | No | [consumable] Limited uses / charges. | |
| price | No | Item price. | |
| damage | No | [weapon] Base damage die. [consumable ammo] Added damage. | |
| folder | No | When creating a world Item (no actorIdentifier), place it in this folder (created if absent). | |
| rarity | No | Magic-item rarity ("" = mundane) — or a LIST for a "Rarity Varies" item (dnd5e 6.0 `system.rarities`, e.g. ["uncommon", "rare"] for a Potion of Healing line). Written natively. | |
| weight | No | Item weight. | |
| wireAc | No | [body armor, actor target only] Also switch the actor to default (armor-derived) AC so worn armor changes AC. Ignored for shields (their +2 always applies) and for world items. | |
| ability | No | [tool] Default ability for the tool check. | |
| attuned | No | Whether this item is currently attuned by its owner. | |
| magical | No | Flag the item as magical (adds the "mgc" property). Implied when magicalBonus is set. | |
| rangeFt | No | [weapon, ranged] Normal range in feet. | |
| reachFt | No | [weapon, melee] Reach in feet. Default 5. | |
| subtype | No | [consumable/loot] Finer subtype (e.g. ammo "arrow"). | |
| baseItem | No | [weapon/armor/tool] Specific base-item key (e.g. "longsword", "plate", "smith"). | |
| capacity | No | [container] Carrying capacity. | |
| currency | No | [container] Coins stored inside the container. | |
| equipped | No | Whether worn/wielded (default true for an NPC). Set false for stowed loot. | |
| itemType | Yes | Kind of physical item. weapon; armor/shield/wondrous (all dnd5e "equipment"); consumable (potion/scroll/ammo/…); tool; loot (gems/trade goods/junk); container (bag/chest). | |
| lootCopy | No | [actor target] Also mint a matching WORLD Item (same stats + icon) so the party can loot this gear after the fight. DEFAULT ON for magic items (rarity set, "mgc", or a +N); pass false to suppress, or true to force a loot copy of a mundane item too. Ignored for a world-item target. | |
| lootType | No | [loot] Loot category. Default "gear". | |
| quantity | No | Stack count (e.g. 20 arrows). Default 1. | |
| strength | No | [armor] Min Strength to wear without a speed penalty. | |
| toolType | No | [tool] Category key (art/game/music/…). | |
| armorType | No | [armor] Armor weight class. Default "medium". | |
| container | No | Id or name of an EXISTING container item on the same target to place this item inside. | |
| toolBonus | No | [tool] Flat bonus formula added to the check. | |
| versatile | No | [weapon] Two-handed (versatile) damage (needs the "ver" property). | |
| armorValue | No | [armor] Base AC (shield = AC bonus, default 2). | |
| attackType | No | [weapon] Attack kind. Default "melee". | |
| attunement | No | Attunement requirement: "" none, required, or optional. | |
| identified | No | Whether the item is identified (default true). Set false for mystery loot. | |
| proficient | No | [weapon/armor/tool] Proficiency (weapon/armor 0|1; tool 0|0.5|1|2). Omit to infer. | |
| properties | No | Property codes Set (e.g. ["fin","lgt"]). Weapon codes: ada,amm,fin,fir,foc,hvy,lgt,lod,mgc,rch,rel,ret,sil,spc,thr,two,ver. "mgc" marks magical. | |
| withAttack | No | [weapon] Attach a rollable attack activity built from damage + attackType (default: true when damage is given). Set false for a weapon that is pure loot with no attack. | |
| ammoReplace | No | [consumable ammo] If true, ammo damage replaces the weapon base instead of adding. | |
| attackBonus | No | [weapon] Flat bonus to the attack roll only (separate from magicalBonus). | |
| description | No | HTML description. | |
| longRangeFt | No | [weapon, ranged] Long (disadvantage) range. | |
| sourceRules | No | [weapon] Rules edition for the attack activity. Default "2024" (pass "2014" for legacy). | 2024 |
| weaponClass | No | [weapon] Category. "natural" for monster attacks. Default "natural". | |
| magicalBonus | No | Numeric +N magic bonus (to attack & damage for weapons, to AC for armor). | |
| equipmentType | No | [wondrous] Equipment subtype (clothing/trinket/ring/rod/wand/…). Default "trinket". | |
| consumableType | No | [consumable] Category. Default "potion". | |
| lootCopyFolder | No | Folder for the loot copy (created if absent). Default "Loot". | |
| abilityModifier | No | [weapon, 2024] Attack/damage ability override. | |
| actorIdentifier | No | Target actor (name or id) to attach the item to (partial match). Also accepts a placed TOKEN id (from list-tokens) — the item is then added to that token INSTANCE's own delta, not the base actor. Omit to create a reusable world Item in the Items sidebar instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behaviors: 'This authors documents — it does NOT roll, equip-in-combat, or spend charges.' It notes the duplicate-name non-rejection, the lootCopy default for magic items, the wireAc effect on AC, and how magicalBonus is stored. No contradictions with (absent) 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?
Though long, the description is tightly structured with bullet-point item types, a cross-cutting section, and a target section. Every sentence carries unique information; there is no filler. The front-loading of purpose and immediate item-type breakdown makes it navigable despite 49 parameters.
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 tool with 49 parameters, nested objects, and many enums, and no output schema, the description covers every item type, parameter interaction, default, and limitation. It explains target selection, folder creation, and the distinction between world items and actor items. An agent can invoke it correctly without external reference.
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 substantial meaning beyond field names. It explains cross-cutting interactions (e.g., 'Setting magicalBonus/magical adds the mgc flag', 'wondrous items have no +N field'), per-item-type defaults, and conditional behaviors like wireAc applying only to body armor. This is far more than the schema provides.
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 precise verb-resource pair: 'Create a structured physical item (loot/gear) on an actor or in the world Items sidebar.' It enumerates all item types and explicitly differentiates from siblings like add-feature, create-item, and import-item by naming them and stating the distinctions.
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 guidance: 'For features/attacks-as-abilities use add-feature; for free-form system data use create-item / add-feature. To COPY a real item from a compendium (keeps art + stats), prefer import-item.' It also explains the duplicate-name behavior difference from add-feature, and clarifies the actor vs world-item target choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add-journal-imageA
Composition. Append an image page to a journal entry from a Data-relative image path, with an optional caption. GM-only by default; set playerVisible to expose it as a handout.
| Name | Required | Description | Default |
|---|---|---|---|
| caption | No | Optional image caption. | |
| pageName | No | Page title (defaults to the file name). | |
| imagePath | Yes | Data-relative path to the image. | |
| playerVisible | No | If true, players can OBSERVE this image page (a handout). Default: GM-only. | |
| journalIdentifier | Yes | Journal id or exact name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the default GM-only visibility and how to make it a handout, but does not explain error handling, return value, or side effects like image validation.
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, front-loaded with the action, and contains no fluff. Every sentence adds value.
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?
Without an output schema, the description should ideally mention return value or success confirmation. It does not. Given moderate complexity and good schema descriptions, the description is minimally complete but lacks closure on what the agent can expect 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 coverage is 100%, baseline 3. The description adds context like 'Data-relative path' and 'defaults to file name' but largely duplicates schema descriptions. It does not significantly enhance parameter understanding 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 clearly states the tool appends an image page to a journal entry, specifies the input (Data-relative image path) and optional caption, and distinguishes from siblings like create-journal or update-journal.
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 (append image to existing journal) and mentions GM-only vs. player-visible as a key consideration. However, it does not explicitly state when to prefer this over alternatives or what prerequisites exist (e.g., journal must exist).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add-region-behaviorA
Add ONE behavior to an EXISTING region — the write create-region only offers at creation time and update-region deliberately never touches. Creates a real RegionBehavior embedded document (validated against the registered behavior types). For teleporters, pass teleportTo {sceneIdentifier, regionIdentifier} and the destination UUID is resolved for you; the landing region's geometry is then sanity-checked and you are WARNED when it contains no grid-snapped token position (the silent teleport no-op: off-grid pads). GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Behavior label (defaults to the type's standard name). | |
| type | Yes | Behavior type key, validated against the live registry — core v14: teleportToken, executeMacro, executeScript, adjustDarknessLevel, changeLevel, displayScrollingText, modifyMovementCost, pauseGame, suppressWeather, toggleBehavior, defineSurface; dnd5e 6.0: dnd5e.applyActiveEffect (an area that applies effects to tokens inside it — lava, a poison cloud, consecrated ground; use `effects`), dnd5e.difficultTerrain (use `terrainTypes` / `magical`), dnd5e.rotateArea (a turning platform — use `rotate`). | |
| sizes | No | applyActiveEffect: only creatures of these sizes (omit = all). | |
| rotate | No | dnd5e.rotateArea: a turning platform / puzzle room — the listed placeables (ids from list-tiles / list-walls / list-lights / list-regions / list-sounds, validated to exist on the scene) rotate together around the region's first shape, stopping at `positions`. A turn is triggered from the region config or a script, not by walking in. | |
| system | No | Behavior system data carried verbatim (the v14 shape for the type) — e.g. executeMacro {uuid}, adjustDarknessLevel {mode, modifier}. | |
| effects | No | dnd5e.applyActiveEffect: the effects applied on entry and removed on exit. Each is a NAME from the stock dnd5e.effects pack ("Poisoned", "Prone", "Fire Resistance", "Blinded" …) or from a world item's effects, an ActiveEffect uuid, or an Item uuid + "#<effect name>" (a premium-pack spell's effect). Never an effect on an actor. Resolved and echoed back. | |
| magical | No | difficultTerrain: magical terrain (Spike Growth) vs mundane (rubble). Default false. | |
| disabled | No | Create the behavior disabled (default false). | |
| teleportTo | No | teleportToken convenience: resolve this scene+region to the destination UUID and append it to system.destinations — no hand-built "Scene.<id>.Region.<id>" needed. A teleportToken with system.choice unset defaults to choice:true (the confirm-before-moving house pattern); pass system.choice:false explicitly for silent trap/plot teleports. | |
| dispositions | No | applyActiveEffect: only tokens with these dispositions are affected (omit = all). difficultTerrain: these dispositions IGNORE the terrain. | |
| terrainTypes | No | difficultTerrain: what kind of terrain it is (a creature may ignore some kinds — e.g. web, plants, ice). Omit for generic difficult terrain. | |
| creatureTypes | No | applyActiveEffect: only these creature types (omit = all). | |
| sceneIdentifier | Yes | Scene id or exact name holding the region. | |
| regionIdentifier | Yes | Region id or EXACT region name on that scene (an ambiguous name errors — use the id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool creates a real embedded document (write operation), performs validation against registered behavior types, resolves destination UUIDs for teleporters, and warns about off-grid landing pads (silent teleport no-op). It also states GM-only access. It does not mention return values or error conditions, but the provided behavioral traits are substantive and beyond what schema implies.
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 four sentences and each one earns its place: purpose and distinction, creation validation, teleporter behavior, access restriction. It is front-loaded with the core purpose. While slightly dense, it avoids fluff and remains efficient for a tool with this complexity.
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 tool's complexity (14 params, nested objects, type-specific behaviors) and the rich schema, the description provides the essential high-level context: existing-region scope, sibling distinctions, validation, teleporter convenience and warning, GM-only. It does not explain outputs, but no output schema exists and it is a create operation. The schema covers parameter details, making this description adequately 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 description coverage is 100%, so the schema already documents all 14 parameters thoroughly. The description adds minimal extra parameter semantics beyond what the schema provides (e.g., the teleporter workflow is also explained in the teleportTo property description). Baseline 3 is appropriate; the description does not need to compensate.
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 begins with 'Add ONE behavior to an EXISTING region', clearly stating the action, resource, and scope. It distinguishes this tool from create-region and update-region by explaining what they do not do, and specifies it creates a 'RegionBehavior embedded document' validated against registered types. This allows an agent to identify the tool's purpose 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 states when to use this tool vs. alternatives: create-region only offers behaviors at creation time and update-region deliberately never touches them. It also gives a specific usage pattern for teleporters and notes the GM-only restriction, providing clear context and exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply-conditionA
[D&D 5e only] Apply or remove one or more conditions on an actor (blinded, frightened, grappled, poisoned, prone, restrained, stunned, unconscious, exhaustion, ...). Set active=false to remove. Exhaustion is leveled — pass exhaustionLevel (1-6; 0 removes). This authors condition state on a creature; it is NOT a combat-automation loop (no duration countdown / save-ends handling). Use list-actors or get-actor to find the actorIdentifier.
| Name | Required | Description | Default |
|---|---|---|---|
| active | No | true applies the conditions (default); false removes them. | |
| conditions | Yes | Condition ids to toggle: blinded, charmed, deafened, frightened, grappled, incapacitated, invisible, paralyzed, petrified, poisoned, prone, restrained, stunned, unconscious, exhaustion, and the other dnd5e conditionTypes/statusEffects (coverHalf, coverThreeQuarters, coverTotal, concentrating, heavilyEncumbered, ...). Matched case-insensitively. | |
| actorIdentifier | Yes | Name or id of the actor (partial name match supported). Also accepts a placed TOKEN id (from list-tokens) — the condition then applies to that token INSTANCE only, not the base actor. | |
| exhaustionLevel | No | Exhaustion level 1-6 (0 removes it). Only affects the "exhaustion" condition, and only when applying — with active=false the condition is removed regardless of this value. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses D&D 5e-only scope, active=false toggling removal, leveled exhaustion, token-instance behavior, and that this authors state rather than automating combat. Missing permission/reversibility details, but strong overall.
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 well-structured: purpose first, then key modifiers, then an explicit non-goal, then a lookup hint. Every sentence adds value 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?
Covers operation, removal behavior, exhaustion special case, token-id nuance, and how to find the required identifier. No output schema exists, but for a state-mutating tool the return value is not essential for correct selection or 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 every parameter is already documented. The description reinforces active=false and exhaustionLevel semantics but does not add meaning beyond what the schema already provides.
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 or remove one or more conditions on an actor,' with concrete condition examples. It also distinguishes itself by explicitly saying it is NOT a combat-automation loop, helping an agent separate it from related effect/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?
Gives explicit when-not guidance: no duration countdown or save-ends handling, and directs the user to list-actors or get-actor to find the actorIdentifier. It does not name a specific sibling tool for automation, but the exclusion is clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asset-infoA
Plane B (file channel, read-only). Report whether a single path under the Foundry Data/ root exists, and (for files) its size, content-type, last-modified, and public HTTPS URL. A cheap existence/metadata check before uploading or linking.
| Name | Required | Description | Default |
|---|---|---|---|
| remotePath | Yes | Path relative to the Foundry `Data/` root, e.g. "worlds/your-world/assets/maps/cavern.webp". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description is the sole source of behavioral details. It states read-only nature (Plane B, file channel, read-only) and lists returned attributes. However, it does not address error states (e.g., path not found) or behavior for directories beyond 'for files' note, leaving some gaps.
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 extremely concise: two short sentences that front-load the core purpose and usage context. Every phrase 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?
Given the tool's simplicity (1 parameter, no output schema, basic annotations), the description is largely complete. It explains what the tool returns, when to use it, and the read-only nature. Minor gaps (error handling, directory behavior) prevent 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%, and the input schema already fully describes the parameter including the relative path root. The tool description adds no new meaning beyond the schema, so baseline score 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's purpose: checking existence and retrieving metadata for a single path under Foundry's Data/ root. It distinguishes from siblings like list-assets by emphasizing it's a cheap, single-path check before uploads or linking.
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 includes explicit guidance: 'A cheap existence/metadata check before uploading or linking.' This tells the agent when to use it, but does not explicitly list when not to use it or mention alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asset-urlA
Plane B (file channel). Return the public HTTPS URL for a file under the Foundry Data/ root. Pure mapping (no network): everything under Data/ is served at the server root (DESIGN §6), e.g. Data/worlds/w/maps/x.jpg → /worlds/w/maps/x.jpg. Useful for turning an uploaded/known asset path into a link Foundry or a player can load.
| Name | Required | Description | Default |
|---|---|---|---|
| remotePath | Yes | Path relative to the Foundry `Data/` root (a leading "Data/" or "/" is tolerated and stripped), e.g. "worlds/your-world/assets/maps/cavern.webp". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states 'Pure mapping (no network)', indicating no side effects or network calls. This transparency is crucial as no annotations are provided. The behavior is fully disclosed without 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 concise sentences: introduction, mapping explanation, and use case. No redundant information; every sentence adds value.
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 tool with one parameter, no output schema, and no annotations, the description is fully complete. It covers functionality, behavior, input format, and usage context.
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 has 100% coverage for the single parameter 'remotePath', describing its format. The description adds minimal extra value by mentioning the mapping rule, but it largely repeats schema content, so 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 verb 'return' and the resource 'public HTTPS URL for a file under the Foundry Data/ root'. It distinguishes from siblings by specifying it is a pure mapping (no network call) for generating URLs, contrasting with tools like download-asset.
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 for converting asset paths to loadable links (e.g., 'Useful for turning an uploaded/known asset path into a link Foundry or a player can load'), but it does not explicitly compare with alternatives or state when not to use. No exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
author-npcA
Author a custom NPC (type:npc) from a hand-written stat block — the LAST-RESORT path in the §6 ladder, used ONLY when nothing in the premium MM/PHB/DMG books is a workable base. Prefer create-actor-from-compendium (copy a real Monster Manual creature, optionally with prefab-as-base modifications); if the books are missing what you need, tell the user and ask before authoring rather than inventing content. Prefer the 2024 ruleset (sourceRules:'2024'). Required: name, creatureType (humanoid/undead/beast/dragon/fiend/…), size (tiny…gargantuan), cr (number or fraction string like '1/4'), abilities {str,dex,con,int,wis,cha}, hpAverage, hpFormula (e.g. '5d8+10'), acMode ('default'|'flat'; acValue required if 'flat'). Optional: alignment, savingThrows[], skills[{skill,proficiency}], walk/fly/swim/climb/burrowSpeed, darkvision/blindsight/tremorsense/truesight, damage immunities/resistances/vulnerabilities[], conditionImmunities[], languages[], biography, sourceBook/sourcePage/sourceRules, disposition ('hostile' default | 'friendly' for allies/townsfolk | 'neutral' | 'secret'). Add features, attacks, and spells afterward with add-feature; copy gear from a compendium with import-item.
| Name | Required | Description | Default |
|---|---|---|---|
| cr | Yes | ||
| name | Yes | ||
| size | Yes | ||
| hover | No | ||
| acMode | Yes | ||
| skills | No | ||
| acValue | No | ||
| flySpeed | No | ||
| abilities | Yes | ||
| alignment | No | ||
| biography | No | ||
| hpAverage | Yes | ||
| hpFormula | Yes | ||
| languages | No | ||
| swimSpeed | No | ||
| truesight | No | ||
| walkSpeed | No | ||
| blindsight | No | ||
| climbSpeed | No | ||
| darkvision | No | ||
| sourceBook | No | ||
| sourcePage | No | ||
| burrowSpeed | No | ||
| disposition | No | ||
| sourceRules | No | 2024 | |
| tremorsense | No | ||
| creatureType | Yes | ||
| savingThrows | No | ||
| specialSenses | No | ||
| creatureSubtype | No | ||
| languagesCustom | No | ||
| damageImmunities | No | ||
| damageResistances | No | ||
| conditionImmunities | No | ||
| damageVulnerabilities | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It clearly implies creation of a new actor, lists required and optional parameters, and suggests follow-up actions (add-feature, import-item). It doesn't explicitly state side effects or authorization needs, but the creation context is clear and non-destructive.
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 and usage guidelines, then lists required and optional params. It is somewhat lengthy due to comprehensive parameter coverage, but every sentence adds value. Could be slightly more concise without losing 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?
Given 35 parameters, no output schema, and no annotations, the description addresses the core purpose, usage context, all required params, and many optional ones. It also provides post-creation guidance (add-feature, import-item). Missing return value description, but the creation context makes that less 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 description coverage is 0%, but the description extensively explains each parameter's meaning and usage. It provides examples (e.g., cr as number or fraction), clarifies default behaviors (e.g., disposition default 'hostile'), and links parameters to game concepts (e.g., 'friendly for allies/townsfolk'). This adds significant 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 clearly states the tool authors a custom NPC from a stat block, specifies it's a last-resort path, and distinguishes from compendium-based creation. The verb 'author' and resource 'custom NPC' are precise, and the 'LAST-RESORT' label immediately clarifies its role.
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 states when to use ('used ONLY when nothing in the premium MM/PHB/DMG books is a workable base'), when not to use (prefer create-actor-from-compendium), and provides explicit guidance to ask the user before authoring. Also recommends 2024 ruleset and lists required fields.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk-deleteA
Permanently delete many world documents of a single type by exact id or exact name. STRICT resolution — no fuzzy/substring matching. IRREVERSIBLE — pass dryRun:true first to preview exactly what would be deleted. For folders use delete-folder. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | Preview only: report exactly which documents WOULD be deleted (and which were not found) without deleting anything. Run a dry-run first to confirm an irreversible bulk delete. | |
| identifiers | Yes | Exact ids (preferred) or exact names to delete. | |
| documentType | Yes | Type of the documents being deleted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Highlights permanence, irreversibility, strict resolution, and GM-only requirement. Without annotations, the description fully compensates with critical behavioral details.
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 succinct sentences, front-loaded with key information. Every sentence adds value with no 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?
No output schema, but description explains what is deleted, irreversibility, and how to preview. Covers all necessary context for a bulk delete 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 100%. The description adds context beyond schema: 'exact id or name' for identifiers, 'single type' for documentType, and dry-run recommendation. One point above baseline due to helpful extra 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?
The description clearly states the tool deletes many world documents by exact ID or name, specifying strict resolution and a single type. It distinguishes from sibling 'delete-folder'.
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 suggests using dryRun first, directs to delete-folder for folders, and notes GM-only restriction, providing clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure-combat-trackerA
Read or configure the combat tracker (the world's core.combatTrackerConfig setting): the custom TURN MARKER shown under the active combatant (enabled / animation / image src / disposition tint), the tracked resource, and skip-defeated. Call with NO arguments to read the current config and the valid animation ids. Changed fields echo previous → new; re-applying the current value is a clean no-op. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| resource | No | Actor system attribute shown beside each combatant in the tracker, e.g. "attributes.hp". Pass "" to track nothing. | |
| turnMarker | No | Turn-marker appearance — the animated ring under the active combatant. | |
| skipDefeated | No | Skip defeated combatants when advancing the turn order. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: it discloses the read-versus-write nature, the echo of previous→new for changed fields, the no-op behavior for re-applying current values, and the GM-only permission. It does not explicitly state that changes persist to the world config or describe error handling for invalid values, but those are partially covered by the schema and the overall context is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loads the core purpose, and packs essential usage directives (no-arg read, echo, no-op, GM-only) without redundancy. Every sentence earns its place and 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?
Given the nested turnMarker object, three optional parameters, no output schema, and no annotations, the description covers the key context an agent needs: how to read, what fields are configurable, the no-op guarantee, and access restrictions. It does not describe the exact output shape, but it names what the read returns (current config and valid animation ids), which is sufficient for a first call. Slightly more detail on error behavior would push it to a 5, but it is adequate.
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 a conceptual grouping of the three parameters (turn marker, resource, skip-defeated) and explains the read-mode behavior with no arguments, but it does not significantly deepen parameter-level meaning beyond what the schema already provides. It meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (read or configure), the exact resource (the world's core.combatTrackerConfig setting), and the three configurable areas (turn marker, tracked resource, skip-defeated). It distinguishes this tool from any sibling by naming its unique setting; no other sibling tool covers combat-tracker configuration.
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 guidance on when to call with no arguments (to read) and clarifies that re-applying the current value is a no-op, which prevents redundant writes. It also states the GM-only access restriction. It does not mention alternatives, but no sibling tool is a direct alternative, so this is not a significant gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure-dnd5e-settingsA
[D&D 5e] Read or set the dnd5e 6.0 AUTOMATION settings — falling damage, token size ↔ creature size, senses ↔ token vision, exhaustion, initiative grouping, auto-apply Unconscious/Dead at 0 HP, encounter placement, the player damage / effects trays, the bastion system, and the calendar (enabled, daily recovery mode, which calendar). Call with NO arguments to read every switch; pass any of them to change it — each change echoes previous → new, re-applying the current value is a clean no-op, and the switches that need a client reload are named. Allow-listed: nothing else in the settings menu is reachable. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| bloodied | No | Who sees the Bloodied status. all (every token) · player (default — only tokens the players own/see) · none (off). | |
| calendar | No | Calendar in use. gregorian (default) · greyhawk · harptos (Forgotten Realms) · khorvaire (Eberron); modules may add more. Takes effect after clients reload. Validated against the live list. | |
| pietyScore | No | Piety score (optional rule). Adds the Piety score to character sheets (default false; registered config:false — this tool is the lever). | |
| tokenSizeSync | No | Sync token size to creature size. A Large creature gets a 2×2 token automatically (default true). Takes effect after clients reload. | |
| allowSummoning | No | Players may summon. Players place summons from their own summon activities (default false — GM-only). | |
| bastionEnabled | No | Bastion system. Turns on bastion turns + the bastion tab (default false). | |
| disableFalling | No | Disable falling automation. true turns OFF fall damage / falling from Levels (default false — falling is automated). | |
| autoApplyDowned | No | Auto-apply Unconscious / Dead at 0 HP. none (default) · deadOnly (NPCs die at 0) · npcs (NPCs die, PCs go unconscious) · all. | |
| bastionDuration | No | Days per bastion turn. How many in-world days make one bastion turn (default 7). | |
| calendarEnabled | No | Calendar. Turns on the date/time HUD, dawn / dusk / day recovery and bastion-turn progression (default false). | |
| senseVisionSync | No | Sync senses to token vision. Darkvision / blindsight on the sheet drive the token vision modes (default true). | |
| allowPolymorphing | No | Players may polymorph / transform actors. Players run the transform flow on actors they own (default false — GM-only). | |
| disableExhaustion | No | Disable exhaustion automation. true turns OFF the exhaustion d20 penalties (default false). Takes effect after clients reload. | |
| movementAutomation | No | Movement automation. full (default — difficult terrain + creature blocking) · noBlocking (terrain only) · none. | |
| initiativeGroupRoll | No | Roll initiative once per group. A grouped set of combatants rolls one initiative (default true). | |
| disableConcentration | No | Disable concentration tracking. true turns OFF automatic concentration effects + prompts (default false). | |
| allowPlayerDamageTray | No | Players may use the damage tray. Players apply damage from chat cards to their own tokens (default false). | |
| calendarDailyRecovery | No | Daily recovery mode. auto = the system default (calendar when the calendar is enabled, else manual) · calendar (uses recover on time advance) · manual ("New Day" in rest dialogs). | |
| allowPlayerEffectsTray | No | Players may use the effects tray. Players apply effects from chat cards to their own tokens (default false). | |
| initiativeGroupCombatants | No | Group identical combatants in the tracker. Six goblins share one tracker row (default true). | |
| encounterPlacementBehavior | No | When an encounter is placed on the map. none (default) · createCombatants (add them to the tracker) · rollInitiative (and roll). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, and it delivers: it states that changes echo previous → new, re-applying is a no-op, certain switches require a client reload (and names them), the tool is GM-only, and it is allow-listed to automation settings only. This goes well beyond a bare CRUD statement.
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?
Although the description is long, it is dense and front-loaded: it states the verb, scope, and key usage pattern in the first sentence, then enumerates categories, behavior, and constraints. Every sentence adds operational value, and no filler or repetition is present.
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 21-parameter configuration tool with no output schema and no annotations, the description covers everything needed for correct invocation: read vs. set behavior, no-op semantics, reload requirements, GM-only restriction, and the exact allow-listed scope. The schema covers per-parameter defaults and enums, so the combination 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 description coverage is 100%, so the baseline is 3 even if the description adds no per-parameter details. The description groups the settings into categories and explains global behavior, but it does not add meaning beyond the already-rich schema descriptions for individual parameters. This meets the baseline without exceeding 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?
The description names a specific verb pair (read/set), a specific resource (dnd5e 6.0 AUTOMATION settings), and enumerates the exact categories involved. It also distinguishes itself from the broader settings menu by stating 'Allow-listed: nothing else in the settings menu is reachable,' so an agent can separate it from siblings like manage-calendar or configure-combat-tracker.
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 call patterns: call with NO arguments to read every switch, pass any argument to change it, and re-applying the current value is a clean no-op. It does not explicitly name alternative tools or exclusion cases, but the read-vs-write usage is clear enough for correct selection and invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure-soundscapeA
Author a scene's atmospheric SOUND SETS — the house module fvtt-mod-soundscape (#6), which does what core Foundry cannot: a POOL of small audio files played at randomized intervals with silence between (a crow, quiet, a distant dog), or overlapped into a seamless crossfaded bed. AmbientSound placeables are positional single-file loops and Playlists have no silence-with-variation, so neither covers this. A scene carries any number of sets, stacked and independent. Actions: "list" (what the scene has, plus what would be playing right now and why a set is idle), "library" (browse the prebaked template catalog by section/category/name), "add" (copy a template by name, or author one from explicit files), "update" (patch one set — named fields only; files replaces the whole pool), "remove" (one set, or "all"). Defaults to the ACTIVE scene when no sceneIdentifier is given. Out-of-range numbers are CLAMPED to the module's limits and the clamp is reported, not applied silently. Audio paths are HEAD-checked: a 404 is kept and warned about (a track has no sensible substitute). Sets are inert data without the module, so this WARNS when it is missing or disabled instead of reporting a working soundscape. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Set name. Required when adding from `files`; optional rename on update. | |
| files | No | Data-relative audio paths making up the pool (what upload-asset returns). On UPDATE this REPLACES the whole pool. A path that does not resolve is kept and warned about, never swapped. | |
| limit | No | action "library": maximum templates to return (default 40). | |
| query | No | action "library": match on template name, category, or section (e.g. "tavern"). | |
| action | Yes | list = the scene's sound sets (with what would be playing right now); library = browse the prebaked template catalog; add/update/remove = author them. | |
| active | No | Whether the set runs at all (default true). | |
| volume | No | Set volume 0–1 (default 0.8), under the Ambient channel. | |
| section | No | Restrict to one section. Interval Sounds = randomized one-shots; Ambient Loops = continuous beds. Filters action "library", and narrows which `template` action "add" resolves when one name exists in both sections. | |
| category | No | Restrict to a category (substring match, e.g. "Forest"). Filters action "library", and narrows `template` resolution on action "add". | |
| interval | No | Interval sets: seconds of silence between one-shots (1–3600, default 25). | |
| template | No | action "add": copy this LIBRARY template (its exact name, from action "library") — files, play style, and timing all come along. Any other field passed alongside overrides the template's value. A handful of names exist in BOTH sections, so pair this with `section` when the name is ambiguous. Omit to author a set from explicit `files` instead. | |
| crossfade | No | Loop sets: overlap between members in seconds (0.5–30, default 4). | |
| playStyle | No | interval = a random file, then `interval ± intervalVariation` seconds of silence. loop = a continuous bed, members overlapped under a crossfade. Default interval. | |
| whenToPlay | No | Darkness gate, re-evaluated live: day = scene darkness < 0.5, night = ≥ 0.5 (default always). | |
| verifyFiles | No | action "list": HEAD-check every pool file and report the missing ones. Off by default because it costs one request per file — turn it on when a set is silent and you want to know why. | |
| setIdentifier | No | Which set to update/remove — its id or exact name (ids come from action "list"; a name that matches two sets is an error, not a coin flip). On "remove", the literal "all" clears every set from the scene. | |
| pitchVariation | No | Per-play pitch jitter in OCTAVES, 0–1 (default 0). 0.1 is a subtle, natural wobble. | |
| sceneIdentifier | No | Scene id or exact name. STRICT — no fuzzy matching. Omit to target the ACTIVE scene. Ignored by action "library" (the catalog is world-wide). | |
| volumeVariation | No | Per-play volume jitter 0–1, attenuate-only — never louder than `volume` (default 0). | |
| intervalVariation | No | Interval sets: ± jitter on the silence, in seconds (default 5). Clamped to never exceed `interval`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and delivers: out-of-range values are CLAMPED and reported, audio paths are HEAD-checked with 404s kept and warned about, and missing/disabled modules produce a warning instead of a fake success. It also discloses that updates replace whole pools on `files`, that `remove` accepts 'all', and that the tool is GM-only.
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 long but every sentence earns its place; it is front-loaded with the core purpose and module context, then moves compactly through actions and behavioral caveats. For a 20-parameter tool with no annotations, this density is appropriate and well organized.
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 tool's complexity, full schema coverage, and no output schema, the description is complete enough: it covers all five actions, default scene selection, clamping, file verification behavior, module-dependency warning behavior, and key edge cases. An agent has what it needs to invoke the tool correctly and interpret non-2xx outcomes.
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 already documents every parameter at 100% coverage, so the baseline is 3. The description adds real value on top by explaining action-specific behavior ('update' patches named fields only while `files` replaces the whole pool, 'remove' takes one set or 'all'), clarifying template-name ambiguity via `section`, and warning that a duplicate set name is an error. It doesn't materially change parameter meaning beyond that, though the cross-parameter guidance is strong.
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 — 'Author a scene's atmospheric SOUND SETS' — and immediately explains the module's niche: randomized pools of small audio files with silence, or crossfaded beds. It distinguishes itself from AmbientSound placeables and Playlists, so an agent can tell it apart from sibling sounds 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?
It states exactly when this tool is the right choice: core Foundry cannot do pools with silence or crossfaded beds, and explicitly rules out single-file positional AmbientSound placeables and Playlists as non-covering alternatives. It also gives operational conditions such as defaulting to the ACTIVE scene, strict scene identifiers, and GM-only access.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
content-auditA
[D&D 5e only] Finishing check for authored content — scan documents for the five strict authoring-quality rules and report violations to fix (read-only; never mutates): • rule 8 — placeholder icons (icons/svg/...) on an actor, item, or authored feature. • rule 7 — GM-fudge / pretend-reskin language in a description or biography ("treat its X as Y", "reflavor", "deals necrotic in place of bludgeoning", "pretend", "is really "). • rule 9 — a magic item on an NPC with no matching world-Item loot twin. • rule 12 — a GM-note / spoiler leaked into a PLAYER-VISIBLE item description ("GM:" asides, "the DM", "fill in the …", "ready-made hook", "to suit your table"). Item descriptions only — an NPC biography is GM-facing, so it is not scanned for this.
RUN THIS before declaring a build done. Target what you built: actorIdentifiers (NPCs, with their gear/features), itemFolders (your loot folder), and/or worldItemIds. With NO target it runs a full sweep of every NPC + every world Item. Fix each finding (set a real icon via update-actor-item/update-item/set-actor-art; replace fudge with real mechanics; mint the missing loot copy; rewrite the item description to innocuous in-world flavor and move the GM note to a GM-only journal) then re-run until clean.
| Name | Required | Description | Default |
|---|---|---|---|
| itemFolders | No | World-Item folders to audit (name or id) — e.g. the loot/treasure folder you created. | |
| worldItemIds | No | Specific world Items to audit, by id. | |
| actorIdentifiers | No | Actors to audit (name or id) — each is scanned along with its embedded items/features. Pass the NPCs you just built. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well: it declares read-only behavior, D&D 5e-only scope, the specific rules scanned, and a scope caveat that NPC biographies are not scanned for rule 12. It loses a point because it says 'five strict authoring-quality rules' but lists only four bullets, and it never describes the shape of the violation report.
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 long but tightly structured and front-loaded: purpose and safety first, then a scannable bulleted list of rules, then usage trigger and targeting semantics, then concrete remediation steps. Every sentence earns its place, and the length is justified by the number of distinct rules and options an agent must understand.
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, zero-annotation tool with no output schema, this is unusually complete: it names all scan rules, distinguishes player-visible item descriptions from GM-facing NPC biographies, describes full-sweep behavior, and tells the agent how to fix findings. The main missing piece is the exact return/report structure, which would help an agent consume and act on the results automatically.
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 already describes all three parameters fully, so the baseline is 3. The description adds operational meaning beyond the schema: actorIdentifiers refers to the NPCs just built with their gear/features, itemFolders maps to the loot folder, and omitting all targets triggers a full sweep. This is enough to move above baseline, though the schema already covers the literal parameter meanings.
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-resource pair: 'scan documents for the five strict authoring-quality rules and report violations to fix,' and immediately disambiguates it from mutation tools with '(read-only; never mutates)'. It enumerates the exact rule categories, so an agent can clearly tell this audit tool apart from the many update/fix siblings in the namespace.
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 an explicit trigger: 'RUN THIS before declaring a build done.' It explains the targeting modes — 'Target what you built' with actorIdentifiers, itemFolders, or worldItemIds — and the no-target full-sweep behavior. It also names follow-up fix tools, giving the agent a clear workflow instead of leaving usage to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy-assetA
Plane B (file channel, write). Copy a file under the Foundry Data/ root over WebDAV; missing destination parent folders are created automatically. (Copying does not affect existing references, so no reference check is needed.) Refuses live world-DB destination paths. Requires MOLTEN_WEBDAV_PASSWORD.
| Name | Required | Description | Default |
|---|---|---|---|
| toPath | Yes | Destination Data-relative path. | |
| fromPath | Yes | Source Data-relative path. | |
| overwrite | No | Allow overwriting an existing file at the destination. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the burden. It discloses automatic parent folder creation, no effect on references, and path restrictions. It also signals it is a write operation ('Plane B (file channel, write)'). Could be improved by mentioning error handling for overwrite=false.
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 plus a parenthetical and requirement note. It is front-loaded with key context ('Plane B (file channel, write)') and every sentence adds essential information 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?
Given no output schema and 3 parameters, the description covers core behavior well. It lacks details on whether folders can be copied (only files are implied). Also does not specify return value. However, it is fairly complete for a file copy 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 coverage is 100%, baseline 3. The description adds value by explaining that missing destination parent folders are created automatically (relevant to toPath). This goes beyond the schema's description. No additional info for fromPath or overwrite, but sufficient.
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 copies a file under Foundry's Data/ root. It specifies the file channel (Plane B write), mentions automatic parent folder creation, and distinguishes from world-DB operations. The verb 'Copy' and resource 'file under Data/ root' are 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 implicitly tells when to use (to copy files within Data/ root) and includes important constraints (refuses live world-DB paths, requires MOLTEN_WEBDAV_PASSWORD). It does not explicitly name alternatives like move-asset, but the context of copying vs moving is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-actor-from-compendiumA
Copy one or more actors from a premium-book compendium pack — the DEFAULT, preferred path for official content (e.g. pull the Owlbear from the Monster Manual). Find the entry with search-compendium / get-compendium-entry, then pass its packId + itemId plus names[] for the new actors. PREFAB-AS-BASE (the §6 step-2 bridge): to make a CUSTOM creature, copy the closest Monster Manual match and pass modifications (update-actor-shaped stat edits — cr/hp/ac/abilities/skills/defenses/biography/currency) to layer onto the world copy in the SAME call; the edits land on the copy only, never the source entry. Pass folder (id or exact name, created if absent) to file the copies directly — no move-documents follow-up. For a fully hand-authored NPC with no compendium base, use author-npc (last resort).
| Name | Required | Description | Default |
|---|---|---|---|
| names | Yes | Custom names for the created actors (e.g., ["Flameheart", "Sneak", "Peek"]) | |
| folder | No | Actor folder to file the created copies under — a folder id or exact name (created if absent), so the actor lands in its folder in ONE call instead of create + move-documents. Omit for the default "Foundry MCP Creatures" folder. | |
| itemId | Yes | ID of the specific creature entry within the pack (get this from search-compendium results) | |
| packId | Yes | ID of the premium-book pack containing the creature (e.g., "dnd-monster-manual.actors"). Premium MM/PHB/DMG only — never the dnd5e.* SRD (design.md §2.3). | |
| quantity | No | Number of actors to create (default: based on names array length) | |
| placement | No | Token placement options (only used when addToScene is true) | |
| addToScene | No | Whether to add created actors to the current scene as tokens | |
| disposition | No | Prototype-token disposition for the created copies — YOUR judgment call (shared authoring-policy house token rules): 'neutral' for civilians/townsfolk/bystanders, 'friendly' for allies, 'hostile' for enemies. Omit to default by source type (copied PC pregen → friendly, copied monster → hostile). | |
| modifications | No | PREFAB-AS-BASE bridge: stat edits to layer onto the instantiated WORLD COPY — copy a close-matching Monster Manual creature, then customize it in one call (the §6 step-2 path). Same shape as update-actor, e.g. {cr, hp:{value,max,formula}, ac:{override} or ac:{natural}, abilities:{str,…}, skills:[{skill,proficiency}], damageResistances:{values}, biography, currency:{mode,gp,…}}. Applied to the copy ONLY — the source compendium entry is never modified. Use names[] for the name, not this. Applies to every copy when quantity > 1. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits: it modifies only the copy, never the source entry, and can layer modifications in the same call. It also explains folder creation behavior. Since annotations are absent, the description carries the burden, and it does a good job of revealing the non-obvious aspect of modifying only the world copy.
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 detailed and comprehensive, but it is relatively long. It uses clear formatting with dashes and section headers, which aids navigation. It front-loads the core purpose and main parameters, and then provides secondary context. It earns its length due to the complexity of the tool, but a few sentences could be tightened without losing meaning.
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 tool's complexity (9 params, nested objects, multiple modes), the description is exceptionally complete. It covers the entire workflow: search, copy, and modify. It explains the difference between creating actors and placing tokens, and clarifies the disposition parameter. No output schema exists, but the description implies the result (created actors) without needing to detail return values.
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 has 100% description coverage, so the baseline is 3. The description adds value by clarifying the relationship and usage of the modifications, folder, and names parameters, especially the PREFAB-AS-BASE bridge requirement and the relationship between placement and addToScene. It explains that quantity is defaulted based on names length, which is not 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?
The description clearly identifies the tool's purpose: copying actors from premium-book compendium packs. It explains the process of finding the entry, passing the packId, itemId, and names, and highlights that it is the default preferred path for official content. It also distinguishes itself from author-npc for hand-authored NPCs.
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 this tool: for premium-book compendium content, and explicitly states that it is the preferred path. It references the alternative author-npc as a last resort for fully hand-authored NPCs, and mentions the PREFAB-AS-BASE bridge for custom creatures. This gives a clear decision framework.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-asset-folderA
Plane B (file channel, write). Create a folder (and any missing parents) under the Foundry Data/ root over WebDAV. Idempotent — succeeds if the folder already exists. Refuses paths inside a live world DB. Requires MOLTEN_WEBDAV_PASSWORD.
| Name | Required | Description | Default |
|---|---|---|---|
| remotePath | Yes | Folder path relative to the Foundry `Data/` root, e.g. "worlds/your-world/assets/audio/tavern". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses idempotency, requirement for MOLTEN_WEBDAV_PASSWORD, refusal of live world DB paths, and creation of missing parents. Lacks details on return values or error responses, but overall sufficient given no 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 plus a requirement note, all front-loaded with key identifiers ('Plane B'). 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?
Covers idempotency, constraints, and requirement. The 'Plane B' term is unexplained, and no output description is given, but for a simple creation tool with no output schema, it is fairly 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?
The single parameter 'remotePath' is described in schema with an example, and the description adds that missing parents are created. This exceeds the schema alone. No further parameter details 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 clearly states the tool creates a folder under Foundry's Data/ root over WebDAV, is idempotent, and has specific constraints (refuses live world DB paths). It distinguishes itself from sibling tools like 'create-folder' by specifying the 'Plane B (file channel, write)' context.
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 context: use for creating folders via WebDAV, idempotent, and warns against live world DB paths. However, no explicit comparison to similar sibling tools (e.g., 'create-folder') is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-cardsA
Create a Cards stack (deck, hand, or pile) with optional initial cards. Each card has a name and optional face text (HTML shown on the card — e.g. a Deck of Many Things outcome) and/or img (a Data-relative path), plus a card-level description (GM/meta note). Use for custom themed decks (Deck of Many Things, tarokka, encounter decks). GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Cards stack name. | |
| type | No | Stack type (default "deck"). | |
| cards | No | Optional initial cards. | |
| folderName | No | Optional folder to place the stack in (created if absent). | |
| description | No | Optional description. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses GM-only permission requirement, the optional folder creation, and the structure of cards (face text/img vs plain). This is good behavioral coverage for a creation 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 sentences with key information front-loaded. First sentence covers primary action and scope; second adds card structure; third provides use cases and permission. 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?
Given 5 parameters, high schema coverage, and no output schema, the description sufficiently covers creation behavior, card structure, and use cases. It lacks error/edge-case details but is adequate for typical 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%, baseline 3. The description adds value by explaining `text` as HTML shown on the card, `img` as Data-relative path, `description` as GM/meta note, and `folderName` behavior. This context is beyond the schema 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 it creates a Cards stack (deck, hand, or pile) with optional initial cards, specifying the verb and resource. It distinguishes from siblings like list-cards, delete-cards, and import-cards by focusing on creation for custom themed decks.
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 advises use for custom themed decks and notes GM-only, providing clear context. It does not explicitly exclude other scenarios, but the sibling set is large and the purpose is well-defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-drawingsA
Place one or more DRAWINGS (GM annotation shapes: secret-area boxes, trap outlines, zone labels) on a scene. x/y are the TOP-LEFT origin in absolute canvas pixels; pick a shapeType — rectangle/ellipse (width+height), circle (radius), or polygon (flat relative points list). Style with stroke (width/color/alpha), fill (fillType 1 solid / 2 pattern + fillTexture), and an optional centered text label (fontSize/textColor). hidden:true keeps it GM-only; interface:true floats it above fog. The default stroke makes a bare shape visible as an outline. Per-drawing error isolation. Returns created ids. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| drawings | Yes | One or more drawings (annotation shapes / labels) to place. | |
| sceneIdentifier | Yes | Scene id or exact name holding the placeables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses behavioral traits: it creates drawings, supports per-drawing error isolation, returns created IDs, and is GM-only. It explains default stroke behavior and flags like hidden/interface. 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?
The description is moderately concise given the complexity; it front-loads the purpose and covers key parameters efficiently. A minor reduction in verbosity could improve clarity, but it is well-structured.
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 usage, parameter details, behavior (error isolation, GM-only), and return value (created ids). For a tool with many parameters and no output schema, it is remarkably 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 description adds value by explaining the coordinate origin (top-left absolute), shape type specifics, and default styles (e.g., 'default stroke makes a bare shape visible'). This enriches the schema definitions.
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 it places DRAWINGS (GM annotation shapes) on a scene, enumerating shape types, coordinate system, styling options, and special flags. It distinguishes itself from siblings like create-tiles or create-lights by specifying the exact use case (secret-area boxes, trap outlines, zone labels).
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 for GM-only annotations and mentions per-drawing error isolation, but does not explicitly state when to use this tool over alternatives like create-tiles or create-lights. The context of sibling tools is not directly addressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-folderA
Create a sidebar Folder for any world document type, optionally nested under a parent folder of the same type. Use to organize generated content. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Folder name. | |
| type | Yes | Document type this folder holds (Actor, Item, JournalEntry, …). | |
| color | No | Optional hex color, e.g. "#4a90e2". | |
| parentFolder | No | Optional parent folder id or exact name (must be the same type). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses GM-only permission, creation of sidebar folders, and nesting constraint. Does not detail error handling or side effects, but for a simple create operation 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?
Two concise sentences with no filler. Purpose is front-loaded, critical details (nesting, GM-only) are included. 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?
Simple tool with no output schema. Description covers what it creates, how it can be used (nested, for organizing), and who can use it. Sufficient for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all 4 parameters. Description reinforces nesting constraint for parentFolder but adds no new meaning for other parameters like color. 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?
Description explicitly states it creates sidebar folders for any world document type, with optional nesting. It distinguishes from create-* siblings (which create documents) and includes usage context ('organize generated content') and visibility ('GM-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?
States 'organize generated content' and 'GM-only', providing clear context. However, it does not explicitly say when not to use or mention alternatives (e.g., deleting folders via delete-folder). Still, the sibling list implies the tool is for folders only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-groupA
Create a dnd5e GROUP actor (type:group) — the shared party stash / travel group. Enrolls world actors as members, can grant every player default ownership (defaultOwnership:'owner' = the classic shared stash), seed shared coin, and optionally crown it the world's PRIMARY PARTY. Member resolution is fail-closed: one bad name and nothing is created. Stock the inventory afterwards with add-item / import-item against the group.
| Name | Required | Description | Default |
|---|---|---|---|
| img | No | Portrait image path under Data/ or URL. A path that does not resolve on the server is dropped (dnd5e stamps its default group art) with a warning. | |
| name | Yes | Name of the group actor, e.g. "The Party". | |
| members | No | World actors to enroll (name or id; partial name match supported). FAIL-CLOSED: a member that does not resolve, or is itself a group, rejects the whole create — nothing is made. | |
| summary | No | One-line summary shown in group embeds. | |
| currency | No | Starting shared coin (whole non-negative amounts per denomination). | |
| folderName | No | Actor-sidebar folder to file the group under (created if missing). | |
| description | No | Full description (HTML allowed) shown on the group sheet. | |
| defaultOwnership | No | The document's DEFAULT ownership — what every player gets. 'owner' is the shared party stash: all players can open it and move items. Per-user grants: set-actor-ownership. | |
| makePrimaryParty | No | Also point the world's dnd5e primaryParty setting at this new group (the party shown in the players sidebar; XP awards and party overviews target it). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden, and it delivers: fail-closed member resolution ('one bad name and nothing is created'), default ownership semantics, and the optional global primaryParty side effect. It doesn't mention permissions or return shape, but the most important behavioral traits are 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?
Four sentences with no filler: purpose, capabilities, failure mode, and follow-up step. Each sentence earns its place, and the most identifying 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 9-parameter creation tool with no output schema and no annotations, the description plus rich schema covers purpose, failure atomicity, side effects, and next steps. It doesn't state return values or auth prerequisites, but an agent has enough 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% and every parameter already has a detailed description, so the baseline is 3. The description reinforces the fail-closed members behavior and the 'owner' default ownership meaning, but doesn't add unique parameter detail 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 opens with a specific verb and resource — 'Create a dnd5e GROUP actor (type:group)' — and immediately clarifies its purpose as the shared party stash / travel group. This clearly distinguishes it from sibling actor-creation tools like create-pc or author-npc.
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 'shared party stash / travel group' phrasing gives a clear use case, and the closing sentence explicitly routes subsequent inventory work to add-item / import-item. It doesn't exhaustively list when-not cases, but the context is strong enough for an agent to select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-itemA
Create world-level Item document(s) in the Items sidebar — reusable library items (weapons, equipment, consumables, feats, spells). For dnd5e prefer the 2024 data model; pass system-specific data via the "system" field. GM-only. To put items on an actor instead, copy from a compendium with import-item, author one with add-item, or attach raw item data with add-feature (mode "items").
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | One or more items to create. Each requires a name and a valid dnd5e item type (e.g. "weapon", "equipment", "consumable", "feat", "spell"). Pass system-specific data via the "system" field. | |
| folder | No | Folder name/ID to place the items in (created if absent). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behaviors: world-level creation, GM-only access, preference for 2024 data model, and the role of the 'system' field. Lacks details on failure modes or duplicate handling, but covers essential aspects.
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?
Multi-sentence but efficient; front-loads the core action then provides alternative guidance. Every sentence serves a purpose, though could be slightly more 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?
For a tool with 2 parameters and no output schema, the description covers creation scope, target audience, data model preference, and alternatives. No significant gaps.
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 description adds meaningful context: explaining the purpose of the 'system' field, noting valid types, and setting usage scope. Adds 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?
Clearly states the verb 'Create', the resource 'world-level Item document(s) in the Items sidebar', and enumerates the types of reusable library items. Distinguishes from sibling tools by listing alternatives for actor-level operations.
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 states it is GM-only and provides clear guidance on when not to use it ('To put items on an actor instead...') with named alternatives (import-item, add-item, add-feature).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-journalA
Create a generic multi-page JournalEntry from caller-supplied pages. Each page is either a TEXT page ({name, content} — HTML, Foundry v13 ProseMirror) or an IMAGE page ({name, kind:"image", src, caption?} — a picture page, e.g. a map legend key), so an image-only journal builds in one call. Unlike create-quest-journal (styled blocks, auto-folders), this takes explicit pages and only folders when folderName is given. Per-page playerVisible exposes a handout; otherwise GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Journal entry name. | |
| pages | Yes | Ordered pages — each a TEXT page (HTML content) or an IMAGE page (kind:"image" + src). Each needs a name; text content is HTML (may be empty). | |
| folderName | No | Optional folder to place the journal in (created if absent). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It explains behavioral traits like GM-only default, page visibility (playerVisible), folder creation, and page types. However, it does not mention idempotency or error conditions, but overall provides good context beyond 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?
Four sentences, front-loaded with purpose, then details page types, differentiates from sibling, and covers folder and visibility. Every sentence adds value; no redundant 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?
Given no output schema and high schema coverage, description covers key aspects: creation of journal, page types, folder option, and visibility. It misses explicit mention of default page kind (text) and return value, but is complete enough for a creation tool with good parameter 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%, so baseline is 3. Description adds value by explaining the distinction between text and image pages, the requirement of src for images, the optional caption, and the meaning of playerVisible. This goes beyond schema 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?
Description clearly states it creates a multi-page JournalEntry from supplied pages. It distinguishes from sibling 'create-quest-journal' by noting it takes explicit pages and only folders when folderName is given. The verb and resource are specific.
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 contrasts with sibling tool 'create-quest-journal', stating that this tool is for generic journals with explicit pages, while the sibling has styled blocks and auto-folders. This gives clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-lightsA
Place one or more AMBIENT LIGHTS (torches, braziers, magical glows) on a scene. x/y are the light CENTER in absolute canvas pixels; dim/bright are radii in grid-distance units (feet), NOT pixels. Set color, alpha (tint intensity), angle (cone), luminosity, attenuation (edge softness), an animation (animationType "torch"/"flame"/"pulse" + speed/intensity for flicker), and a darkness activation range (darknessMin ~0.1 so a torch only lights once the scene dims). walls confines it, vision lets it grant sight. Per-light error isolation. Returns created ids. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| lights | Yes | One or more ambient lights (torches, glows, magical light) to place. | |
| sceneIdentifier | Yes | Scene id or exact name holding the placeables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses behavioral traits: units for x/y and radii, darkness activation range, walls/vision effects, per-light error isolation, return of created ids, and GM-only restriction. It adds context beyond the schema, such as 'NOT pixels' and 'torch only lights once the scene dims'.
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 paragraph of moderate length (approx. 100 words) that front-loads purpose and then details parameters. It is packed with information but remains readable; however, it could be slightly more structured (e.g., bullet points) for even easier scanning.
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 complexity (nested array, many optional parameters, no output schema), the description covers main behaviors, parameters, and outcomes (returns created ids). It mentions per-light error isolation but could elaborate on what that entails. Overall, it is fairly 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%, so baseline is 3. The description adds extra meaning beyond the schema: clarifies units for dim/bright (grid-distance units, NOT pixels), gives examples for animationType (torch, flame, pulse), and mentions default values (alpha ~0.3, luminosity 0.5, darknessMin ~0.1). This adds significant 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 clearly states the verb 'Place' and the resource 'AMBIENT LIGHTS', with specific examples (torches, braziers, magical glows). It distinguishes from sibling tools like create-drawings or create-tiles by focusing exclusively on light sources, and notes it is GM-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 implicitly indicates usage for placing ambient lights on a scene. However, it does not explicitly state when not to use or provide alternatives, relying on the sibling list for distinction. This is clear but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-macroA
Create a world Macro — a hotbar button. type "script" (default) runs JavaScript as the clicking user (e.g. dnd5e.documents.macro.rollItem("Graze") rolls that item on their assigned character); type "chat" posts its text to chat. Optionally grant a player OWNER access and pin the button to their hotbar (hotbarUser + optional hotbarSlot, default first free slot) in the same call — the way to hand a player a one-click ability. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| img | No | Icon path or URL for the hotbar button. Omit for Foundry's stock macro icon. A path that does not resolve on the server is replaced with the stock icon (rule 8) with a warning. | |
| name | Yes | Macro name — the hotbar tooltip and its Macro Directory entry. | |
| type | No | 'script' (default) executes JavaScript; 'chat' posts its text to the chat log. | script |
| owner | No | User id or name granted OWNER on the macro. The hotbarUser is always granted OWNER — pass this only to grant a DIFFERENT user as well. | |
| command | Yes | The macro body. For type 'script': JavaScript run as the clicking user — e.g. dnd5e.documents.macro.rollItem("Graze") rolls the item named Graze on that user's assigned character. For type 'chat': text posted to chat verbatim (inline rolls like [[/roll 1d6]] work). | |
| hotbarSlot | No | Hotbar slot 1–50 (page 1 = slots 1–10). Default: the first free slot. An occupied slot is replaced with a warning. | |
| hotbarUser | No | User id or name whose hotbar gets the button (also granted OWNER so it's theirs to see and edit). Omit to create the macro without pinning it anywhere. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does it well: scripts run as the clicking user, chat macros post text, owner/hotbar permissions are granted, and the call is GM-only. The only behavioral detail left to the schema rather than the description is the occupied-hotbar-slot replacement warning.
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?
Dense but efficient: it front-loads the core purpose, packs the type behavior and example into one sentence, then covers optional ownership and hotbar pinning. The GM-only constraint closes it 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 7-parameter creation tool with no output schema, the description covers required inputs, defaults, side effects, permissions, and a realistic example. It does not spell out every schema edge case, such as invalid image replacement, but those are in the schema and the high-level flow is fully actionable.
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 explains the owner/hotbarUser relationship, command behavior, defaults, and image fallback. The description gives a helpful overview and an example but adds little parameter-level information beyond what the schema provides, so 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?
Opens with a specific action and resource: 'Create a world Macro — a hotbar button.' It immediately distinguishes the two macro types and explains what they do, and it sits cleanly apart from siblings like list-macros and delete-macro by focusing on creation plus optional hotbar pinning.
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?
States the intended use ('the way to hand a player a one-click ability') and adds the hard constraint 'GM-only.' It does not explicitly mention alternative tools for inspecting or deleting macros, but the creation context and permission boundary are clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-pcA
Build a player character (type:character) headlessly from premium class + species + background by NAME, running real dnd5e advancement so @scale.* (rage damage, sneak attack, breath weapon, …) resolves natively — unlike an NPC. Compendium-first, premium books only, never the SRD (design.md §2.3); a missing class/species/background is an error, not invented. The SKILL owns the math: pass FINAL ability scores (point-buy/array/ASI already applied) and the player CHOICES (skills, fighting style, ancestry…) in choices (level → advancement-id → {chosen|selected|uuid}). Call with no/partial choices first to get a needsChoices[] dry-run (legal options per choice — incl. the available subclasses at level 3 — NOTHING is created); fill the map and re-call. Levels 1-20: HP/features/subclass/spell-slots scale with level (subclass at L3 via a choices uuid; HP per level hpMode avg|max). Multiclass in ONE call via multiclass:[{className,levels}] (className/level is the primary; each multiclass class gets the 2024 proficiency subset; total ≤ 20). Caster spell slots auto-derive from the class; pass spells.cantrips/spells.prepared (names) to add chosen spells. ASI ability-increases ride in the FINAL scores (not applied separately); a feat taken at an ASI tier is added by the skill via add-feature/import-item, like equipment — this tool adds no gear or ASI-feats. If a required advancement (a forced grant / supplied pick / subclass embed) FAILS to apply, the PC is NOT persisted (no junk actor) and success:false is returned with errors[]. Returns {success, actor, applied[], needsChoices[], unresolvedScale[], errors[], warnings[]}.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| level | No | ||
| folder | No | ||
| hpMode | No | avg | |
| spells | No | ||
| choices | No | ||
| species | No | ||
| abilities | No | ||
| className | Yes | ||
| background | No | ||
| multiclass | No | ||
| sourceRules | No | 2024 | |
| acceptDefaults | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: it runs real advancement, does not persist on failure (success:false with errors), returns detailed output fields, and explains the dry-run behavior. It also clarifies that ASI ability-increases are expected final and feats are not added by this tool, ensuring no surprises.
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 long but well-structured, with front-loaded main purpose and progressive details. Every sentence adds value, covering all key aspects. Minor verbosity is justified by the tool's complexity, but it could be slightly more terse without losing clarity.
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 complexity (13 parameters, nested objects, multiclass, dry-run, error handling) and no output schema, the description is fully complete. It explains the return value structure, the multi-step workflow, edge cases like missing class or failed advancements, and provides enough detail for an AI agent to 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?
Despite 0% schema description coverage, the description explains the purpose and usage of most parameters: name, className, level, abilities (final scores), choices (with structure), multiclass, spells, hpMode, sourceRules, acceptDefaults. It adds critical context like 'abilities must be final' and 'choices map format', compensating fully for the missing schema 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 it builds a player character headlessly using premium compendium content, with real dnd5e advancement and native scale feature resolution. It distinguishes itself from NPCs and sibling tools like 'create-pc-from-prefab' and 'level-up-pc' by detailing its specific functionality, such as dry-run mode and multiclass support.
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 extensive usage guidance: it explains the two-step process (dry-run then fill choices), what inputs to provide (final abilities, choices map, multiclass array), and what not to include (gear, ASI-feats). It also specifies constraints like premium books only and error handling. However, it doesn't explicitly compare with sibling tools or say when to choose this over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-pc-from-prefabA
Create a player character by COPYING a premium-book PREGEN (a complete type:character template — e.g. the PHB class pregens Barbarian…Wizard in dnd-players-handbook.actors, each a ready level-1 build with gear/feats/art) and layering your changes, INSTEAD of building via advancement. The PC family's prefab-as-base path — the §6/§7 analog of create-actor-from-compendium for NPCs, but PC-correct (files under the PC folder, never the NPC one). Resolve the source by prefab NAME (e.g. "Fighter") OR explicit packId+actorId; premium books only, never the SRD (design.md §2.3). Override the pregen's ability array via abilities (final scores) and/or any update-actor-shaped modifications — applied to the COPY only, the source is never touched. @scale resolves natively (it is a real character, no advancement run). Assign the player as owner afterward with set-actor-ownership. Returns {success, from, actor, modificationsApplied, unresolvedScale, warnings}.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| folder | No | ||
| packId | No | ||
| prefab | No | ||
| actorId | No | ||
| abilities | No | ||
| modifications | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully bears the burden of behavioral disclosure. It reveals that the tool copies the source (never modifies the original), applies modifications to the copy, resolves @scale natively, and does not set ownership (requires a separate step). It also specifies the return shape. This is a complete and honest description of the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately concise at around 150 words, packing essential information without significant fluff. It is well-structured: purpose first, then method, resolution, overrides, behavioral notes, and returns. However, some sentences are long and dense, which slightly reduces readability. Minor improvements could make it more streamlined.
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 complexity (7 parameters, nested objects, no output schema, no annotations), the description is quite comprehensive. It covers the core workflow, constraints (premium only), resolution options, and return structure. The main gaps are the lack of explanation for the 'folder' parameter and the exact shape of 'modifications'. Still, it provides enough context for correct usage.
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?
Despite 0% schema description coverage, the description adds substantial meaning to several parameters: it explains how 'prefab' resolves (by name or explicit packId+actorId), what 'abilities' expects (array of final scores), and what 'modifications' are (update-actor-shaped updates applied to copy). 'folder' and other basic parameters are not elaborated, but the critical ones are covered. It compensates well for the lack of schema documentation.
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: creating a player character by copying a premium-book pregen template. It uses specific verbs ('Create', 'COPYING', 'layering'), identifies the resource (premium-book PREGEN), and distinguishes this approach from building via advancement. It also contrasts with create-actor-from-compendium for NPCs, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool: for creating a PC from a pregen template instead of advancement. It provides guidance on source resolution (by prefab name or packId+actorId), specifies that premium books only are allowed (never SRD), and mentions a follow-up step (set-actor-ownership). It also implies when not to use it (if not using a pregen or using SRD). This is comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-playlistA
Create a Foundry Playlist from a list of Data-relative sound paths (e.g. ones just returned by upload-asset). Modes: sequential, shuffle, simultaneous, soundboard. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| fade | No | Crossfade duration in milliseconds (optional). | |
| mode | No | Playback mode (default sequential). | sequential |
| name | Yes | Playlist name. | |
| repeat | No | Whether each track loops (default false). | |
| soundPaths | Yes | Data-relative paths to the sound files, in order. | |
| defaultVolume | No | Volume 0–1 applied to each track (default 0.5). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Mentions creation and modes, but lacks details on side effects, error handling, or dependencies (e.g., valid paths). Adequate but not comprehensive.
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; first states purpose, second adds modes and restrictions. No redundant 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?
No output schema, so expected return value (created playlist) is not described. Lacks error conditions or prerequisites. Adequate for a creation tool but could be more 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%, baseline 3. Description adds context for soundPaths (data-relative paths) and lists modes, enhancing understanding beyond schema 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?
Clearly states 'Create a Foundry Playlist from a list of Data-relative sound paths' with specific verb and resource. Distinguishes from sibling tools like update-playlist and delete-playlist.
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 states 'GM-only' for authorization and references typical use case with upload-asset. Could be more explicit about when not to use vs update-playlist, but implied by the create verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-quest-journalA
Create a multi-page journal (quest log, handout, lore, GM notes) from STRUCTURED typed blocks — a STRUCTURING tool, it never writes the words. You pass pages of blocks (heading / lead / paragraph / readaloud / gmnote / list / grid / html); the tool renders them in the house style and sets per-page visibility (playerVisible -> players can observe a handout; omit -> GM-only). Compose the prose yourself (that's the journal-builder skill's job). For plain raw-HTML pages use create-journal instead.
| Name | Required | Description | Default |
|---|---|---|---|
| pages | Yes | Ordered pages (e.g. a player Handout page + a GM Notes page), each a list of blocks. | |
| title | Yes | Journal entry name. | |
| folderName | No | Optional folder to organize the journal into (created if it does not exist). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors: it never writes the prose, renders in house style, sets per-page visibility. Without annotations, it provides good transparency, though could include details on error handling or limits.
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 well-structured and front-loaded with key information, but slightly verbose in listing block types; still clear and 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?
Given the tool's complexity (multi-page journal with multiple block types), the description covers purpose, usage, block types, visibility, and alternative tool, making 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%, and the description adds value by summarizing the block types, explaining the structuring role, and clarifying visibility vs schema 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 the tool creates a multi-page journal from structured typed blocks, and distinguishes it from the sibling tool 'create-journal' which handles plain raw-HTML pages.
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 (for structured blocks) and when not to, providing the alternative 'create-journal' for plain raw-HTML pages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-regionA
Create one or more Regions on an EXISTING scene (the general primitive behind create-teleporter). Each region carries its v14 shapes whole (rectangle/ellipse/polygon in canvas px) plus optional color/visibility/behaviors. Behaviors pass through verbatim: a teleportToken here must already have system.destinations = ["Scene..Region."] (use create-teleporter for the two-new-region convenience, or add-region-behavior to wire one onto an EXISTING region). Returns the created region ids. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| regions | Yes | One or more regions to create. | |
| sceneIdentifier | Yes | Scene id or exact name to add the region(s) to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that behaviors pass through verbatim, that teleportToken requires pre-existing system.destinations, that shapes are carried whole, and that the tool is GM-only. It also states the return value (created region ids). This is substantial behavioral disclosure beyond the 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 description is dense but well-structured, front-loading the core purpose and then adding necessary caveats. Every sentence earns its place, though the parenthetical about v14 shapes and the teleportToken explanation make it slightly long. Still, it is efficient for the complexity it covers.
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 tool with no output schema and no annotations, the description covers the key context: prerequisites, alternatives, GM-only restriction, return value, and shape/behavior semantics. It could mention error cases or what happens if the scene is not found, but overall it is complete enough for an 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. The description adds meaning by explaining that shapes are carried whole in canvas px, that behaviors pass through verbatim, and that teleportToken needs system.destinations already set. It also clarifies the visibility values and the sceneIdentifier format. This goes beyond the schema's field 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 the tool creates one or more Regions on an existing scene, and explicitly distinguishes it from create-teleporter and add-region-behavior. It names the resource (Regions), the action (create), and the context (existing scene), making it easy for an agent to select correctly.
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 when-to-use guidance: use create-teleporter for the two-new-region convenience, and add-region-behavior to wire a behavior onto an existing region. It also states the prerequisite that a teleportToken must already have system.destinations set, and notes GM-only access. This is strong routing and usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-rolltableA
Create a RollTable from a list of results. Each result is literal text and/or a uuid referencing a REAL premium-book item (rendered as a clickable @UUID link — the way the published loot tables are built; SRD refs are refused). Ranges are auto-assigned from weights (and the formula defaults to 1d) unless you provide explicit ranges/formula. Use for random encounter/loot/rumour/treasure tables. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Table name. | |
| formula | No | Roll formula (default 1d<total weight>), e.g. "1d20". | |
| results | Yes | Table entries. | |
| folderName | No | Optional folder to place the table in (created if absent). | |
| description | No | Optional table description. | |
| displayRoll | No | Show the roll when drawing (default true). | |
| replacement | No | Draw with replacement (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and delivers: it discloses premium-book-only refs, that SRD refs are refused, that ranges are auto-assigned from weights, that the formula defaults to 1d<total weight>, and that results render as clickable @UUID links. Failure/error behavior and the return contract are not covered, but the disclosed behaviors go well beyond a typical create stub.
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 information-dense sentences with the core action front-loaded. The premium/SRD restriction, auto-assignment behavior, defaults, and use case each earn their place; no words are 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 7-parameter create tool with no annotations and no output schema, the description plus a 100%-covered schema give an agent everything needed to construct valid results (text/uuid rules, weights, ranges, GM-only authorization). The only real gap is the return value, which is not described in either the description or the 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 the schema already documents the formula default and range auto-assignment, so the baseline is 3. The description adds cross-parameter semantics — how literal text and/or uuid combine per result and how weights drive range mapping — which adds value beyond the individual parameter 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?
Leads with a specific verb+resource ('Create a RollTable from a list of results'), names the input form (a list of results) and the target use (random encounter/loot/rumour/treasure tables). This distinguishes it from siblings like create-cards, import-rolltable, and update-rolltable.
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 for random encounter/loot/rumour/treasure tables' is explicit when-to-use direction, and the GM-only constraint adds a clear authorization guard. It doesn't name alternatives or negative cases (e.g., when to prefer import-rolltable over this), so it stops one step short of full routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-sceneA
Create a Foundry Scene from a Data-relative background image path (e.g. an uploaded map). Width/height auto-detect from the image when omitted. Places it in a folder (created if absent) and sets navigation (false = a DM-only scene off the player nav bar) in the same call. AUTO-GENERATES the navigation thumbnail from the background (Foundry-native) when no explicit thumb is given — no more thumbnail-less scenes. Optionally set grid size/type/distance/units/color/alpha, token vision, fog mode, lighting (darkness, global light, or a whole environment{}/fog{} mood object + saved camera for pack imports), weather, a linked playlist/journal, a nav thumbnail, padding, provenance flags, and activate it. Can also IMPORT walls + ambient lights from a map sidecar JSON (the walls/lights arrays many battlemaps ship alongside the image): pass them and they are placed on the new scene (legacy or v14 shapes both accepted, normalized to v14). GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| fog | No | A v12+ scene's full fog{} object (exploration, overlay, colors), carried whole (deep-merged). | |
| name | Yes | Scene name. | |
| flags | No | Document flags namespaced by scope — e.g. {"tom-cartos-import":{sourceModule,sourceId}} for import provenance/dedup. Deep-merged over any existing flags (re-stampable on update). | |
| thumb | No | Data-relative path to a pre-rendered navigation thumbnail (e.g. an uploaded <id>-thumb.webp shipped by a map pack). Foundry may regenerate it on a later in-app edit, so treat it as a nice-to-have, not load-bearing. | |
| walls | No | Walls to import from a map sidecar JSON (the `walls` array of a Foundry scene-export sidecar that ships next to a map). Created after the scene exists; coordinates are absolute canvas pixels, so pass the sidecar width/height/gridSize/padding too. | |
| width | No | Scene width in pixels (optional — auto-detected from the image when omitted). | |
| folder | No | Scene folder id or exact name to place the scene in (created if absent). | |
| height | No | Scene height in pixels (optional — auto-detected from the image when omitted). | |
| lights | No | Ambient lights to import from a map sidecar JSON (the `lights` array). | |
| fogMode | No | Fog of war: disabled | individual (classic per-player) | shared (party-wide). | |
| initial | No | The saved initial camera view {x,y,scale} to restore on scene load (deep-merged). | |
| journal | No | JournalEntry id or exact name to attach as scene notes. "" clears it. | |
| padding | No | Scene padding fraction (optional). | |
| regions | No | Regions (v12+ RegionDocument incl. teleporters) to import from a scene-pack payload. Created after the scene exists; each is stamped with its source id, and cross-scene teleporter destinations are rewritten afterward by a single remap-teleporters call. | |
| weather | No | Weather effect key (e.g. rain, snow, fog, leaves, rainStorm, blizzard). "" = none. | |
| activate | No | Activate the scene after creating it. | |
| darkness | No | Darkness/day-night level: 0 = full daylight, 1 = full night. | |
| gridSize | No | Grid size in pixels (default 100). | |
| gridType | No | Foundry grid type (0 gridless, 1 square, 2+ hex). Default 1. | |
| playlist | No | Playlist id or exact name to auto-play on scene activation. "" clears it. | |
| gridAlpha | No | Grid line opacity 0–1 (e.g. 0.2 for a faint grid). | |
| gridColor | No | Grid line color as a hex string, e.g. "#000000". | |
| gridUnits | No | Distance unit label per cell, e.g. "ft" (dnd5e default). | |
| navigation | No | Whether the scene appears in the player navigation bar. Set false for a DM-only scene (keeps it off the nav bar). Omit for Foundry default. | |
| environment | No | A v12+ scene's full environment{} mood object, carried whole (darknessLevel, globalLight{...}, cycle, base, dark{hue,luminosity}…). Deep-merged, so a partial mood patch layers onto the scene; prefer this over the flat darkness/globalLight knobs when importing or re-mooding a pack scene. | |
| globalLight | No | Globally illuminate the whole scene (turn the lights on). | |
| tokenVision | No | Require token line-of-sight to see the scene. Turn OFF for overland/illustration maps. | |
| gridDistance | No | Real-world distance per grid cell (dnd5e default 5). | |
| backgroundPath | Yes | Data-relative path to the background/map image. | |
| placeablesPath | No | Server-local path to a JSON file of {walls,lights,regions} to place (as written by read-pack for a scene-pack import). Read SERVER-SIDE and merged with any inline placeables — this routes a pack's hundreds of walls/lights/regions tool→tool without passing them through the agent (the MCP response cap makes inline placeables infeasible at scene scale). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It reveals several non-obvious behaviors: width/height auto-detection, folder creation when absent, automatic navigation thumbnail generation, sidecar import normalization from legacy to v14, and the distinction between DM-only and player-visible scenes. This goes well beyond a simple 'creates a scene' and helps the agent anticipate side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph, but it is well organized: core action first, then key behaviors, optional settings, and finally the import caveat. Every sentence adds value, though the length borders on overwhelming. Splitting into a few sentences would improve scannability, but it remains appropriately sized for a tool with this many features.
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 large parameter count (30) and the lack of an output schema or annotations, the description covers the critical aspects: what the tool creates, how it behaves by default, how to import supplementary data, and access restrictions. It does not mention what the tool returns after creation, which is a minor gap, but the schema's per-parameter documentation fills in the remaining details. Overall, an agent has enough to decide when and how to invoke 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 schema already describes all 30 parameters in depth (100% coverage). The description adds high-level semantic context that the per-parameter entries do not: auto-detection of width/height, folder creation, thumbnail auto-generation, and the sidecar import workflow. This supplements the schema rather than repeating 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?
The description opens with a specific verb-resource pair ('Create a Foundry Scene from a Data-relative background image path') and goes on to list concrete behaviors (auto-detection, folder placement, thumbnail generation) that distinguish it from sibling tools like update-scene or create-walls. It is immediately clear what the tool does and what it is for.
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 strong usage context: it is for creating a new scene from an image, with optional import of walls/lights from a sidecar, and states 'GM-only' as an access constraint. It does not explicitly name alternative tools (e.g. 'for editing an existing scene use update-scene'), so exclusions are implied rather than stated, but the intended use case is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-scene-notesA
Place map-note PINS on a scene, each linked to a JournalEntry (and optionally a specific page) — the deterministic half of the legend→GM-room-pins feature. Pass absolute canvas pixel x/y (see get-scene-dimensions for the padding-aware math), an optional label/icon/size, and the journal id|name. Per-note error isolation: a pin whose journal does not resolve is reported and skipped, not fatal. GM-only secrecy is the linked journal's ownership, not the pin; global only controls fog occlusion. Returns each created note id (for update-note/delete-note). GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | Yes | The map-note pins to create. | |
| sceneIdentifier | Yes | Scene id or exact name to place the notes on. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the burden of behavioral disclosure. It explains deterministic behavior, error isolation per note, that GM-only secrecy is from journal ownership not the pin, and that 'global' only controls fog occlusion. It also states the return value (each created note id). 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?
The description is a single paragraph that front-loads the main purpose and then provides essential details. Every sentence adds value. It is concise but could be slightly better organized (e.g., separate sections for usage, behavior, return). Still, it is 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?
Given no annotations, no output schema, and nested input (notes array), the description covers purpose, parameters, error handling, and return. It is mostly complete, though it lacks details on error behavior for unresolved scene identifiers. Overall, it provides sufficient context for an AI 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 description coverage is 100%, so baseline is 3. The description adds meaningful context beyond the schema, such as referencing 'get-scene-dimensions' for padding-aware math and clarifying the 'global' parameter's role. This enhances 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 ('Place map-note PINS on a scene') and the resource (linked to a JournalEntry), and distinguishes it from siblings by calling it 'the deterministic half of the legend→GM-room-pins feature'. It is specific and informative.
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 on how to use the tool, including guidance on x/y coordinates referencing 'get-scene-dimensions', per-note error isolation, and the meaning of the 'global' parameter. However, it does not explicitly mention when not to use this tool or suggest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-soundsA
Place one or more positional AMBIENT SOUNDS on a scene (a crackling hearth, a waterfall, dripping cave water) from Data-relative audio paths. x/y are the emitter CENTER in absolute canvas pixels; radius is in grid-DISTANCE units (feet), NOT pixels. Optionally set volume, repeat (loop), walls (muffle through walls), easing (fade by distance), a darkness activation range (night-only sounds), and listener effects (baseEffect/muffledEffect, e.g. "lowpass"). A 404 audio path keeps the path but warns. Distinct from a scene playlist: this is a point emitter players walk into. Returns created ids. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| sounds | Yes | One or more positional ambient sounds to place. | |
| sceneIdentifier | Yes | Scene id or exact name holding the placeables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses behavioral traits: x/y are absolute canvas pixels, radius is in grid-distance units, optional parameters like walls (muffle through walls), easing (fade by distance), darkness activation range (night-only sounds), listener effects (baseEffect/muffledEffect), and that a 404 path warns but keeps. It also states the return behavior ('Returns created ids').
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 paragraph that is both comprehensive and concise. It front-loads the main purpose and example, then covers essential details without unnecessary fluff. Every sentence adds value.
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 tool's complexity (many optional parameters, nested array input, no output schema), the description covers all critical aspects: input structure, key unit distinctions, behavior of each option, and return value. It is complete without needing 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%, but the description adds significant meaning beyond the schema: clarifies units for radius (grid-distance vs. pixels), explains the purpose of walls, easing, darknessMin/darknessMax, baseEffect/muffledEffect, and default values (volume 0.5, repeat false). This enriches the agent's 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 'Place one or more positional AMBIENT SOUNDS on a scene' and provides concrete examples (crackling hearth, waterfall). It distinguishes from a sibling tool by noting 'Distinct from a scene playlist: this is a point emitter players walk into.' This leaves no ambiguity about the tool's 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 explicitly marks the tool as 'GM-only' and mentions that a 404 audio path 'keeps the path but warns'. It contrasts with scene playlist implicitly, but does not provide extensive when-to-use/when-not-to-use guidance. Still, the context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-teleporterA
Create a two-way (or one-way) region TELEPORTER between two points on existing scenes — the thing create-scene can only do at import time. Give a CENTER point (canvas px) on each scene (from/to, may be the same scene); a rectangle trigger is placed at each (sized in whole grid cells, grid-snapped by default) and a teleportToken behavior on each points at the OTHER — so a token that walks onto one is sent to the other. Both regions are created before either link is wired (the destination-UUID chicken-and-egg). twoWay:false makes it one-directional. By default the player is ASKED before moving (confirmation dialog — the house pattern for map transitions); confirm:false makes it fire silently (traps/plot teleports only). Regions default to GM/Regions-layer visibility (no player-visible overlay). GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | The second endpoint (may be the same scene). | |
| from | Yes | The first endpoint. | |
| color | No | Region tint hex (default "#3fb0ff"). | |
| toName | No | Name for the to-side region. | |
| twoWay | No | Wire the return teleporter too (default true). false = one-way from→to. | |
| confirm | No | Ask before moving (default true — the house pattern for transitions): the moving player gets core v14's "Teleport / Do Not Teleport" confirmation dialog (`choice` flag). Pass false ONLY for trap/plot teleports that should fire silently. | |
| fromName | No | Name for the from-side region. | |
| snapToGrid | No | Snap each trigger rectangle to the grid cell(s) under its center (default true). | |
| widthCells | No | Trigger width in whole grid cells, applied to both ends. Default 1. | |
| heightCells | No | Trigger height in whole grid cells. Default 1. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it delivers: trigger placement, grid snapping, teleportToken wiring, creation order, confirmation dialog default, silent mode, and default GM/Regions-layer visibility. It also flags GM-only permissions. Nothing in the description conflicts with the absent 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 text is dense but purposeful: every clause addresses a non-obvious behavior such as endpoint semantics, wiring order, confirmation behavior, and visibility. It is front-loaded with the core purpose and avoids repeating schema field definitions.
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 10-parameter tool with no output schema and no annotations, the description covers the main behavioral surface: endpoint construction, sizing/snapping, one- vs two-way, confirmation behavior, layer visibility, and GM restriction. The schema documents remaining field-level details, so nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description adds meaning beyond the schema by explaining how from/to map to trigger rectangles, what twoWay:false does, what confirm controls, and the default region visibility. This elevates it 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 ('Create') and resource ('region TELEPORTER') with explicit scope ('between two points on existing scenes') and distinguishes it from create-scene, which can only do this at import time. The from/to endpoint semantics make the action 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?
Gives clear context: used when a teleporter is needed on existing scenes rather than at scene creation, and notes it is GM-only. It also clarifies mode selection with twoWay:false and when confirm:false is appropriate (traps/plot teleports only). It does not explicitly name related alternatives like remap-teleporters, so it stops just 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.
create-tilesA
Place one or more TILES (props, roof/overhead pieces, decals, video overlays) on a scene from Data-relative image paths. A tile's on-map SIZE is width/height in canvas pixels; x/y are the absolute-canvas-pixel TOP-LEFT (see get-scene-dimensions for padding-aware cell→px math; the tool converts to v14's center-anchored doc coords — never pre-add width/2 yourself). Optionally set rotation, alpha, elevation, sort, texture tint/fit/scale, roof occlusion (occlusionMode: 1 fade / 4 radial so it fades when a token walks under), light/weather restrictions, video loop/autoplay/volume, hidden, locked. Per-tile error isolation; a 404 texture keeps the path but warns. Returns created ids. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| tiles | Yes | One or more tiles (props/roofs/overlays) to place on the scene. | |
| sceneIdentifier | Yes | Scene id or exact name holding the placeables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, and it excels: it discloses coordinate conversion to v14's center-anchored doc coords, warns against pre-adding width/2, explains per-tile error isolation with 404 behavior, states that created ids are returned, and notes the GM-only restriction. This goes well beyond the schema and title.
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 dense but well-structured: purpose first, coordinate semantics second, optional capabilities next, then error behavior, return value, and permission. Each sentence adds distinct value, and nothing is wasted or 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?
Despite the tool's complexity and lack of an output schema, the description covers placement semantics, coordinate conversion, optional behaviors, error isolation, return value, and GM-only access. It is complete enough for an agent to call the tool correctly, especially with the fully described input 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 schema already documents all parameters with 100% coverage, so the baseline is 3. The description adds meaningful integrated guidance about how parameters relate: width/height define on-map canvas size, x/y are absolute-canvas top-left, occlusionMode 1/4 makes roofs fade under tokens, and scaleX/scaleY zoom the texture inside the frame rather than resizing the tile. This extra context earns 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 uses a specific verb ('Place') and a specific resource ('TILES') while enumerating tile subtypes (props, roofs/overhead pieces, decals, video overlays), which clearly separates it from sibling tools like place-tokens or create-drawings. It also names the scene as the target and the data-relative path source, so the tool's 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 clearly implies this tool is for placing tiles on scenes, and it points to get-scene-dimensions for coordinate math, which is helpful context. However, it does not explicitly state when to prefer this over alternatives such as update-tiles, delete-tiles, or place-tokens, nor does it give any 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.
create-wallsA
Create one or more WALL segments on a scene — surgical additions (block a corridor, add a door/secret door) to walls normally drawn in the app or shipped by a map pack. Each wall is a segment x0,y0→x1,y1 (or c:[4]) in absolute canvas pixels. Channels: move (0/20), light/sight/sound (0 none / 10 limited / 20 normal / 30 proximity / 40 distance — omitted channels default to 20 blocking), dir (one-way), door (1 door / 2 secret) + ds (state) + doorSound, and proximity thresholds. Per-wall error isolation. Returns created ids. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| walls | Yes | One or more wall segments to create (omitted channels default to blocking). | |
| sceneIdentifier | Yes | Scene id or exact name holding the placeables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states key behaviors: per-wall error isolation (so partial failures are possible), returns created ids, and GM-only restriction. It also discloses default channel values (omitted channels default to 20 blocking) and explains door state semantics. This goes well beyond a bare 'create walls' and covers the main operational 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?
The description is a single, dense paragraph that front-loads the core purpose and then layers in defaults, channels, and error handling. Every sentence adds new information, and nothing is wasted. It could be split into bullet points for readability, but it remains compact and 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 tool with many parameters and no output schema, the description covers the essential operational aspects: what the tool does, coordinate system (absolute canvas pixels), channel defaults, door and threshold semantics, error isolation, return value, and access restriction. It does not explicitly state the walls are added to the scene's walls layer, but that is implied by 'on a scene'. No critical information appears 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 the schema provides 100% coverage with per-parameter descriptions, the description adds a higher-level interpretation: it groups channels (move, light/sight/sound) and explains the meaning of threshold values and the alternative 'c' array syntax. It also gives a concrete example of doorSound ('woodBasic', 'metal'), which is not in the schema. This enriches the schema and helps an agent choose correct values.
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-resource pair ('Create one or more WALL segments') and immediately clarifies scope: 'surgical additions' to walls normally drawn in the app or shipped by a map pack. This distinguishes it from sibling tools like update-walls (modifying) and delete-walls, and the door/secret door examples make the intent 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?
It states the intended use case ('surgical additions') and contrasts with the normal workflow of drawing walls in the app, implying when to use this tool vs. manual drawing. However, it does not explicitly name alternatives like update-walls or list-walls, and there is no direct 'when not to use' guidance. The context is clear enough for an agent to infer the primary scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-actorA
Permanently delete one or more world actors (NPCs/characters) by exact name or ID. IRREVERSIBLE — Foundry has no undo for document deletion; the actor is removed from the world directory. GM-only. Resolution is STRICT (exact id or exact name — no fuzzy matching), so look up the precise name/ID with list-actors first. If the deletion empties a folder the bridge itself created (e.g. "Foundry MCP Creatures"), that folder is auto-removed unless removeEmptyFolder is false.
| Name | Required | Description | Default |
|---|---|---|---|
| identifiers | Yes | Exact actor names or IDs to delete (e.g., ["ZZ MCP Smoke Test NPC"] or ["5GRD8GE7GJUWEbB2"]) | |
| removeEmptyFolder | No | When true (default), also delete a bridge-created folder left completely empty by this deletion. Only ever removes mcp-generated, empty folders — never a user folder or one with remaining contents. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description fully discloses key behaviors: irreversibility, GM-only requirement, strict matching (no fuzzy), and auto-removal of bridge-created empty folders. 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?
Single paragraph with three sentences, front-loaded with main action. Every sentence adds value; no fluff. Efficiently covers critical details.
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 delete tool with no output schema, description covers all essential aspects: action, resolution, prerequisites, permissions, and side effects (folder removal). Complete given 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 coverage is 100%, baseline 3. Description adds meaning: explains 'identifiers' as exact names/IDs and strict resolution, and clarifies 'removeEmptyFolder' only affects bridge-created empty folders. Adds value beyond 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?
Description clearly states 'Permanently delete one or more world actors (NPCs/characters) by exact name or ID.' It uses specific verb (delete) and resource (actors), and distinguishes from sibling tools that delete other types (e.g., delete-asset).
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?
Description advises looking up precise name/ID with list-actors first and notes GM-only access. It implies caution due to irreversibility, but does not explicitly state when not to use or alternatives like bulk-delete for multiple actors.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-assetA
Plane B (file channel, write). Delete a file under the Foundry Data/ root over WebDAV. REFERENCE-AWARE: consults find-asset-references first and REFUSES if any scene/actor/journal/playlist still points at it (pass force:true to override). Deleting a directory requires recursive:true. Refuses live world-DB paths. Requires MOLTEN_WEBDAV_PASSWORD.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Delete even if references exist or the bridge is unavailable to check them. | |
| recursive | No | Required to delete a directory (and everything under it). | |
| remotePath | Yes | Path relative to the Foundry `Data/` root to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: consults find-asset-references, refuses if references exist, requires recursive for directories, and refuses live world-DB paths. It lacks explicit error handling or success output details.
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?
Five focused sentences with no fluff, each conveying key information. Slightly dense but efficient; could be reordered for better flow.
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 purpose, prerequisites, key behaviors, and parameter usage. Missing details on return value or confirmation of success, but given the tool's simplicity and lack of output schema, it is adequately 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 descriptions are 100% covered, but the tool description adds extra context for `force` (overrides reference check failure) and `recursive` (required for directories), enhancing understanding 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 clearly states 'Delete a file under the Foundry `Data/` root over WebDAV,' providing a specific verb and resource. It distinguishes from sibling delete tools (e.g., delete-actor, delete-scene) by targeting file assets.
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 describes when to use (with reference-awareness and directory deletion requirements), when not to use (refuses live world-DB paths), and alternatives (pass force:true to override). Also notes required password.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-cardsA
Permanently delete one or more Cards stacks by exact id or exact name. STRICT resolution — no fuzzy/substring matching. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| identifiers | Yes | Exact ids (preferred) or exact names of Cards stacks to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description adequately discloses behavioral traits: permanent deletion, strict exact matching, and GM-only permission requirement. It covers the key aspects of how the tool behaves, though it could mention if deletion is reversible or affects related data.
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 sentence conveying all essential information: action, resource, matching constraint, and permission requirement. No redundant or unnecessary 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?
Given the tool's simplicity (one parameter, no output schema, no nested objects), the description covers the necessary context: what it does, how to use it (exact match), and who can use it (GM). It could mention if it only deletes stacks, not individual cards, but 'Cards stacks' implies 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?
The schema covers 100% of the parameter with a description. The description adds 'STRICT resolution' which reinforces the schema's 'exact' qualifier, but provides little additional meaning beyond what the schema already 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 clearly states the tool permanently deletes Cards stacks by exact id or exact name. It specifies the resource ('Cards stacks') and the action ('permanently delete'), distinguishing it from other delete tools like delete-folder or delete-actor. The mention of 'GM-only' adds an important constraint.
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 guidelines: use exact ids or names, no fuzzy/substring matching, and the tool is GM-only. However, it does not explicitly mention when to use this tool over other deletion tools or alternatives like list-cards to find exact names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-chat-messagesA
Delete chat messages: by exact id(s) (a single id is an array of one), or all messages older than a timestamp (beforeTimestamp + confirm:true — handy for the known Molten big-log perf drag), or the entire log (clearAll + confirm:true). Both bulk modes need confirm:true. IRREVERSIBLE. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Exact message ids to delete (a single id is just an array of one). | |
| confirm | No | Must be true to run a bulk delete (clearAll or beforeTimestamp) — an explicit guard, both are irreversible. Not needed for a targeted ids delete. | |
| clearAll | No | Delete EVERY chat message. Requires confirm:true. | |
| beforeTimestamp | No | Delete all messages with timestamp (ms epoch) older than this — purge an old log. Bulk + irreversible, so requires confirm:true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It explicitly states the operation is IRREVERSIBLE and GM-only, and explains the confirm guard for bulk modes. This covers the key behavioral traits beyond what the schema 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 concise—three short sentences covering all modes, constraints, and key warnings. Every sentence adds value, with no fluff or redundancy. The most critical information (IRREVERSIBLE, GM-only) is highlighted.
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 tool with no output schema and 4 parameters, the description provides complete context: all deletion modes, parameter relationships, confirm guard, and usage restrictions. It also includes a real-world performance hint. No gaps remain for an agent to safely invoke the 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 100%, but the description adds significant meaning by explaining how parameters combine into three usage patterns (ids, beforeTimestamp+confirm, clearAll+confirm) and provides a performance-related use case for beforeTimestamp. This enhances understanding beyond the schema 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 the verb 'Delete' and resource 'chat messages', and distinguishes three distinct deletion modes (by ids, before timestamp, clear all). This differentiates it from sibling tools like list-chat-messages and export-chat-log.
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 when to use each mode, including the requirement for confirm:true in bulk operations. It provides a specific use case ('handy for the known Molten big-log perf drag'). However, it does not explicitly compare with sibling delete tools for other resources, though the name makes it clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-drawingsA
Delete one or more Drawings from a scene by id (from list-drawings). Missing ids are reported, never fatal. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| drawingIds | Yes | Drawing ids to delete (from list-drawings). | |
| sceneIdentifier | Yes | Scene id or exact name holding the placeables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses id source, non-fatal error handling for missing ids, and GM-only restriction. This is comprehensive for a delete 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, no redundancy. All information is relevant and front-loaded. 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?
Covers all essential aspects for a simple delete tool: what, how (by id), where (scene), error handling, access restriction. No output schema needed; description is sufficient for an 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%, baseline 3. Description adds little beyond schema: drawingIds already mentions 'from list-drawings' and sceneIdentifier already says 'id or exact name'. The overall behavior note on missing ids is not parameter-specific, so minimal added 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?
Clearly states the verb 'Delete', the resource 'Drawings', and the scope 'from a scene by id'. References list-drawings for ids. Distinguishes from sibling delete tools by explicit resource type and additional notes (missing ids non-fatal, GM-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?
Provides context on when to use (for deleting drawings, ids from list-drawings) and behavior (missing ids reported, non-fatal) and access (GM-only). Lacks explicit when-not or alternatives, but context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-folderA
Permanently delete a folder by exact name or ID. GM-only, IRREVERSIBLE. By default refuses to delete a folder that still contains documents or subfolders (safe for cleaning up empty leftover folders). Pass deleteContents:true to delete the folder AND everything inside it. Defaults to Actor folders; set type for other document folders.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Folder document type (default "Actor"). E.g. "Actor", "Item", "JournalEntry", "Scene". | Actor |
| identifier | Yes | Exact folder name or ID to delete (e.g., "Foundry MCP Creatures") | |
| deleteContents | No | When true, delete the folder and all documents/subfolders inside it. When false (default), only delete the folder if it is already empty. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: irreversible deletion, default refusal for non-empty folders, and the option to delete contents. This covers safety and destructive nature comprehensively.
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?
Five sentences, each essential: action, restrictions, default behavior, optional override, param note. No redundancy. Front-loaded with critical warnings.
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 no output schema, the description covers purpose, usage, parameters, and behavioral nuances completely. No gaps remain for a deletion tool of this 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?
All three parameters have schema descriptions, and the tool description adds context: defaults to Actor folders, explains 'identifier' can be name or ID, and clarifies the avoidContents flag. The description matches the schema and 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?
Clearly states 'Permanently delete a folder by exact name or ID', distinguishing from sibling tools like delete-actor or delete-item. The verb 'delete' and resource 'folder' are precise, and the scope 'GM-only, IRREVERSIBLE' adds specificity.
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 when-to-use: GM-only, safe for cleaning empty folders, and when to pass deleteContents:true for forced deletion. Implies when not to use (when contents should be preserved). Could explicitly mention alternatives like moving items first, but the guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-itemA
Permanently delete one or more world-level Item documents (Items sidebar) by exact id or exact name. STRICT resolution — no fuzzy/substring matching, so it never deletes the wrong item. GM-only. To remove an item embedded on an actor instead, use remove-from-actor.
| Name | Required | Description | Default |
|---|---|---|---|
| identifiers | Yes | Exact ids (preferred) or exact names of world Items to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses destructive nature ('permanently delete'), permission requirements ('GM-only'), and matching strictness ('STRICT resolution'). However, it does not mention error handling or side effects if identifiers are not found.
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 purposeful. No redundancy. Front-loads action and resource, then adds constraints and alternatives.
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 core action, input format, and when to use alternative. Missing explicit mention of return value or success/failure behavior, but for a deletion tool 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 describes parameter generically; description adds crucial context: 'exact ids (preferred) or exact names', and reinforces strict matching. This goes beyond the schema's own parameter 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 clearly states the action ('permanently delete'), the resource ('world-level Item documents from Items sidebar'), and the method ('by exact id or exact name'). It distinguishes itself from the sibling tool 'remove-from-actor' by specifying 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?
Explicitly states 'GM-only' for permission context, specifies when not to use it (for embedded actor items, use 'remove-from-actor'), and emphasizes strict matching to avoid accidental deletion. 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.
delete-journalA
Permanently delete one or more JournalEntry documents by exact id or exact name. STRICT resolution — no fuzzy/substring matching. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| identifiers | Yes | Exact ids (preferred) or exact names of journals to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses destructive and irreversible operation ('permanently delete') and access restriction ('GM-only'), but with no annotations, it lacks details on effects (e.g., cascading deletes) or error handling. Adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no fluff. Front-loaded with action and resource, followed by constraints. Every sentence adds value.
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 no output schema, the description does not mention return values (e.g., success/failure count). It covers the operation adequately but lacks completeness on expected output. With simple deletion and no annotations, a score of 3 reflects this 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% with description of identifiers as exact ids or names. The description adds 'STRICT resolution' but does not provide additional meaning beyond schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool deletes JournalEntry documents by exact id or name, distinguishing it from create, update, list, and search siblings. The 'GM-only' and 'permanently' further specify scope and nature.
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 specifies when to use (exact identifiers) and constraints (no fuzzy matching, GM-only), but does not explicitly mention when not to use or compare with alternatives. However, sibling tools cover other operations, making the context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-journal-pageA
Delete ONE page from a JournalEntry by page id (from list-journals), leaving the rest of the entry intact. Use to remove a stray/mistaken page instead of deleting and rebuilding the whole journal. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | Page id to delete (from list-journals). | |
| journalId | Yes | Journal entry id or exact name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that it deletes one page and leaves the rest intact, and that it is GM-only. Without annotations, this sufficiently describes behavior. Could mention permanence but it is implied.
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?
Extremely concise: two sentences plus 'GM-only' tag. No redundant information, front-loaded with key action and 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?
Complete for a simple delete tool with clear schema and no output schema. Addresses what, how, and who.
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 describes both parameters with clear descriptions (pageId from list-journals, journalId as id or name). The description adds little beyond schema, but reinforces the source of pageId. Baseline 3 due to 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 it deletes one page from a journal entry, specifying the use case of removing a stray/mistaken page. It distinguishes itself from sibling tools like delete-journal (deletes entire journal) and set-journal-page-visibility (hides 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?
Explicitly states when to use this tool ('use to remove a stray/mistaken page instead of deleting and rebuilding the whole journal') and notes it is 'GM-only,' indicating the intended user.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-lightsA
Delete one or more AmbientLights from a scene by id (from list-lights). Missing ids are reported, never fatal. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| lightIds | Yes | AmbientLight ids to delete (from list-lights). | |
| sceneIdentifier | Yes | Scene id or exact name holding the placeables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses that missing ids are not fatal and that the tool is GM-only, but does not detail side effects, irreversibility, or cascading impacts on the scene.
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, no wasted words. Front-loads the core action and follows with important behavioral notes.
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 tool with two parameters and no output schema, the description covers the essential behavior, error handling, and access control. It is sufficiently 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 coverage is 100%, so the schema already describes both parameters. The description adds minimal value by referencing 'list-lights' for id sourcing, but does not elaborate on format 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?
Description clearly states it deletes AmbientLights from a scene by id, specifying the resource and action. It differentiates from sibling delete tools by explicitly mentioning AmbientLights and scene context.
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 useful guidance: missing ids are reported but not fatal, and only GMs can use it. Implicitly suggests using 'list-lights' to get ids. However, it lacks explicit when-not-to-use or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-macroA
Delete world macros by id or exact name, scrubbing any user hotbar slots that pointed at them so no dead buttons are left behind. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| macros | Yes | Macro ids or exact names (case-insensitive) to delete. Find them with list-macros. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description discloses a critical side effect: it scrubs hotbar slots that referenced the deleted macros, preventing dead buttons. This goes beyond simple deletion and is not visible in annotations (none provided). It also notes 'GM-only' permission requirement. These are valuable behavioral details.
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?
Single sentence with two pieces of information: deletion method and side effect. Extremely concise and front-loaded with the core action. No filler 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?
Given the tool's simplicity (one parameter, no output schema), the description covers the essential context: deletion method, side effect, and permission requirement. It doesn't elaborate on error handling or return behavior, but those are likely not critical for a delete operation with no 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 description emphasizes that the 'macros' parameter accepts ids or exact names (case-insensitive), which is additional guidance beyond the schema's generic description. Schema coverage is 100% but the description adds clarity on matching semantics, which is useful.
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 'Delete', the resource 'world macros', and the two identification methods ('by id or exact name'). It also distinguishes itself from siblings like delete-rolltable by focusing on macros. The distinction from list-macros is implicit but 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?
The description mentions the tool deletes macros, which is a clear context of use, but does not explicitly state when to use it vs alternatives (e.g., delete-item for items). However, the sibling list is diverse, and the tool's purpose is unambiguous enough that an agent would know to use it for macro deletion. No explicit exclusions or alternatives named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-noteA
Remove one or more map-note pins from a scene by note id (from create-scene-notes). Missing ids are reported, never fatal. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| noteIds | Yes | Note ids to delete (from create-scene-notes/list-notes). | |
| sceneIdentifier | Yes | Scene id or exact name holding the pins. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the disclosure of missing ids being non-fatal is valuable, but it omits details like whether deletion cascades, is reversible, or affects other data. 'GM-only' covers authorization, but more behavioral context would help.
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?
Extremely concise with three sentences, each adding unique value. The action is front-loaded, and no redundant information is present.
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 tool, the description covers input, behavior on missing ids, and permission. It is slightly incomplete by not discussing idempotency or side effects on the scene, but this is forgivable given the tool's nature.
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 covers both parameters with descriptions. The description adds contextual meaning by specifying that note ids come from 'create-scene-notes', which clarifies the expected format 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 uses a specific verb 'Remove' and clearly identifies the resource as 'map-note pins' from a scene, distinguishing it from siblings that delete other entity types.
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 states 'GM-only' for permission and notes that missing ids are not fatal, providing context for when to use. However, it lacks explicit guidance on when not to use or alternatives, though the sibling list implies this tool is for notes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-playlistA
Permanently delete one or more Playlist documents by exact id or exact name. STRICT resolution — no fuzzy/substring matching. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| identifiers | Yes | Exact ids (preferred) or exact names of playlists to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes permanent deletion, strict resolution, and GM-only requirement. Does not mention potential side effects like cascading deletes, but for a simple delete operation this is sufficient without 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, no wasted words, front-loaded with action and target. Every sentence adds value.
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 tool, the description covers what it does, how it identifies targets, and its constraints. No output schema needed; behavior is predictable.
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 a clear description of the 'identifiers' parameter. The description adds the 'STRICT resolution' context, but the parameter is already well-documented in the schema. Meets baseline with minor added 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 clearly states the action (permanently delete), target (Playlist documents), and method (by exact id or exact name). It distinguishes itself from siblings like update-playlist and other delete tools for different document types.
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 states 'GM-only' for authorization and 'STRICT resolution — no fuzzy/substring matching' to clarify when not to use. Provides clear constraints for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-regionA
Delete one or more Regions from a scene by id. Missing ids are reported, never fatal — and if a surviving teleporter elsewhere still points at a deleted region, that orphan is warned. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| regionIds | Yes | Region ids to delete. | |
| sceneIdentifier | Yes | Scene id or exact name holding the region(s). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It discloses non-fatal missing id handling, orphan teleporter warnings, and GM-only restriction—valuable behavioral details beyond the basic delete 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 sentences, each providing essential information: the core action in the first, edge cases and access restriction in the second. No redundant text, well-structured.
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 main behavior and important edge cases (missing ids, orphan warnings) and access control. It does not mention return values, but for a deletion tool, the provided information is largely sufficient.
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 clear descriptions for both parameters. The tool description adds minimal extra meaning beyond the schema, matching 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 clearly states the tool deletes one or more regions by id, specifying the action, target, and method. It distinguishes from sibling delete tools by targeting regions and adds unique details like reporting missing ids and orphan teleporter warnings.
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 for deleting regions and indicates GM-only access, but it does not explicitly explain when to use this over alternatives like updating a region or when not to use it. No direct comparison to siblings is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-rolltableA
Permanently delete one or more RollTable documents by exact id or exact name. STRICT resolution — no fuzzy/substring matching. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| identifiers | Yes | Exact ids (preferred) or exact names of tables to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, but the description itself discloses permanent deletion, exact matching requirement, and GM-only restriction. This adequately informs the agent of behavioral traits beyond the 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?
Two concise sentences with no waste. The key information is front-loaded: action, target, method, constraints. 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 tool with one simple parameter and no output schema, the description covers all necessary context: what it does, how to specify documents, who can use it, and important caveats (permanent, strict matching). It is 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?
The input schema already describes the 'identifiers' parameter as 'Exact ids (preferred) or exact names'. The tool description reinforces 'STRICT resolution', but adds minimal new meaning. Baseline 3 due to 100% 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 (permanently delete), the target (RollTable documents), and the method (exact id or name). It also specifies strict resolution and GM-only access, distinguishing it from sibling tools like create-rolltable or update-rolltable.
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 guidance on when to use the tool (delete RollTables by exact id/name) and constraints (strict resolution, GM-only). It does not explicitly mention alternatives or when not to use, but 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.
delete-sceneA
Permanently delete one or more Scene documents by exact id or exact name. STRICT resolution — no fuzzy/substring matching. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| identifiers | Yes | Exact ids (preferred) or exact names of scenes to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description fully discloses permanent deletion, GM-only requirement, and strict matching. No behavioral gaps.
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, no fluff. Purpose, method, restrictions all covered efficiently.
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 deletion tool with no output schema, description covers all necessary aspects: action, identifiers, strictness, access.
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?
Parameter 'identifiers' is well-described in the schema. Description repeats but adds 'preferred' for ids. With 100% schema coverage, baseline is 3, no significant extra 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?
Clearly states it deletes Scene documents by exact id or name, with strict resolution. Distinguishes from siblings like bulk-delete by specifying exact matching.
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?
States GM-only and strict resolution, implying use when exact identifiers are known. Does not explicitly mention alternatives but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-soundsA
Delete one or more AmbientSounds from a scene by id (from list-sounds). Missing ids are reported, never fatal. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| soundIds | Yes | AmbientSound ids to delete (from list-sounds). | |
| sceneIdentifier | Yes | Scene id or exact name holding the placeables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that missing IDs are reported but never fatal, and that the tool is GM-only. It does not mention permanence or side effects, but for a delete tool 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?
Single sentence, front-loaded with verb and resource. No unnecessary words; every phrase adds value.
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 tool with 2 parameters and no output schema, the description covers auth (GM-only) and error handling (missing IDs non-fatal). Could mention return value, but 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%, so baseline is 3. The description adds minimal value by referencing 'from list-sounds', which the schema parameters already include. No additional syntax or format details beyond 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 tool deletes one or more AmbientSounds by id, sourced from list-sounds, which distinguishes it from sibling tools like create-sounds, update-sounds, etc.
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 mentions GM-only, indicating restricted usage. It does not explicitly state when not to use or alternatives, but given it's a delete tool, the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-tilesA
Delete one or more Tiles from a scene by id (from list-tiles). Missing ids are reported, never fatal. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| tileIds | Yes | Tile ids to delete (from list-tiles). | |
| sceneIdentifier | Yes | Scene id or exact name holding the placeables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description discloses that missing IDs are reported but not fatal, and that the tool is GM-only. It does not detail all side effects, but the destructive nature is clear.
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 extremely concise—one sentence plus 'GM-only'—with no wasted words. It front-loads the action and key constraints.
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 action, input source, behavior on missing IDs, and authorization. Without an output schema, it would benefit from mentioning return behavior, but it is sufficient for the tool's 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?
Schema coverage is 100%, so the description adds minimal value beyond the schema. It references 'from list-tiles' for tileIds, but that is also in the schema description. 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 it deletes tiles from a scene by ID, specifies the source of IDs ('from list-tiles'), and explains behavior for missing IDs. It distinguishes the resource (tiles) from siblings like delete-drawings.
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 (when needing to delete tiles) and provides context via 'from list-tiles' and 'GM-only'. It lacks explicit when-not-to-use or alternatives, but the tool is straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-tokensA
Remove one or more PLACED tokens from a scene by token id (from list-tokens) — clears the map instance only; the sidebar actor survives (delete-actor removes that). Missing ids are reported, never fatal. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| tokenIds | Yes | Placed-token ids to remove (from list-tokens). The sidebar actor is untouched. | |
| sceneIdentifier | Yes | Scene id or exact name holding the placeables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: it only affects the map instance (not actor), missing IDs are reported but never fatal, and it requires GM permissions. This is comprehensive and honest.
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 efficient sentences that front-load the core action and add necessary nuance (survival of actor, missing IDs, GM-only). Every sentence 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 2-param tool with full schema coverage and no output schema, the description covers key aspects. It could explicitly mention return behavior (e.g., list of missing IDs), but the note that missing IDs are reported implies this. Overall very solid.
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 have descriptions). The description adds value by clarifying that tokenIds come from list-tokens and are 'placed tokens', and that the sceneIdentifier refers to a scene holding placeables. This enhances understanding beyond 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 tool removes placed tokens from a scene by token ID. It distinguishes from delete-actor by specifying that only the map instance is cleared while the sidebar actor survives. This is a specific verb-resource combination.
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: use this tool to remove placed tokens without deleting the actor; use delete-actor for full removal. It also mentions prerequisites (token IDs from list-tokens), that missing IDs are safe (non-fatal), and that the tool is GM-only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-wallsA
Delete one or more Walls from a scene by id (from list-walls) — e.g. open up a sealed passage. Missing ids are reported, never fatal. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| wallIds | Yes | Wall ids to delete (from list-walls). | |
| sceneIdentifier | Yes | Scene id or exact name holding the placeables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behaviors: GM-only authorization, non-fatal missing IDs, and the destructive nature (deleting walls). It could add details about irreversibility or response, but for a simple tool 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 efficient sentence with three clear clauses covering purpose, example, error handling, and authorization. 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 2-parameter tool with no output schema, the description covers operation, error handling, and authorization. It lacks mention of prerequisites (scene/wall existence) or permanence, but the example and GM-only note provide reasonable 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?
Schema coverage is 100%, so the schema already describes both parameters. The description adds the example context but no new semantic details beyond reinforcing the IDs source and scene identifier purpose.
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 it deletes walls by ID from a scene, provides a concrete example ('open up a sealed passage'), and references the source tool ('list-walls'). This distinguishes it from other deletion tools among 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?
It indicates when to use (delete walls), who can use it ('GM-only'), and error handling ('missing ids reported, never fatal'). Though it does not explicitly list alternatives, the context of 'by id from list-walls' implies a prerequisite, and the sibling list shows other delete tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disconnect-bridgeA
Log the DM Assistant bridge user out of the live Foundry world: closes the persistent headless browser session so the user goes inactive (drops off the active-player list). The world itself keeps running and the MCP server stays up — the NEXT tool call transparently reconnects (wake → join → ready), so nothing needs to be restarted. Use at the end of a work session ("log out please"); safe to call any time — already disconnected is a clean no-op.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so thoroughly. It discloses that the world keeps running, the server stays up, the next call reconnects, and the operation is a clean no-op if already disconnected. No behavior is left opaque.
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, front-loaded with the primary action, and every sentence earns its place: the first states what it does, the second covers consequences, safety, and usage. 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?
Given zero parameters, no output schema, and no annotations, the description fully covers what the tool does, when to use it, and the resulting state. 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 tool has zero parameters, and schema description coverage is 100% vacuously. Per the rubric, 0 params gives a baseline of 4. The description adds no parameter info (none needed) and does not need to compensate for any schema gaps.
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: 'Log the DM Assistant bridge user out of the live Foundry world.' It explains the exact effect (closes the headless browser session, user drops off the active-player list) and is clearly distinguishable from any sibling tool, none of which deal with session logout.
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 when-to-use guidance: 'Use at the end of a work session' and states it is 'safe to call any time.' It also clarifies the no-op behavior when already disconnected, which fully covers usage conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download-assetA
Plane B (file channel, read-only). Download a file from under the Foundry Data/ root (over WebDAV) to a local path on this machine. For grabbing an existing asset to inspect or re-process.
| Name | Required | Description | Default |
|---|---|---|---|
| localPath | Yes | Absolute local destination path. Parent directories are created if missing. | |
| remotePath | Yes | Source path relative to the Foundry `Data/` root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions 'read-only' and downloads via WebDAV, which adds transparency. However, it does not disclose whether files are overwritten, error handling for missing files, or authentication 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 short and front-loaded with key information. The 'Plane B (file channel, read-only)' prefix is somewhat obscure but still concise. Every sentence serves a 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 download tool with two parameters and no output schema, the description provides adequate context: source, destination, and use case. Missing error handling or auth details, but acceptable for this complexity level.
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 context that remotePath is relative to 'Data/ root', which clarifies the schema. No additional parameter semantics beyond what schema already provides.
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 downloads a file from the Foundry Data/ root to a local path, specifying direction and resource. It distinguishes from upload, copy, delete, and list siblings by focusing on remote-to-local transfer for inspection or reprocessing.
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 hints at usage ('for grabbing an existing asset to inspect or re-process') but does not explicitly state when not to use it or compare to alternatives like copy-asset or asset-url. Guidance is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
duplicate-actorA
Clone one or more existing WORLD actors as full copies — the whole sheet travels (system data, embedded items, spells, effects, prototype token), so every copy stays fully rollable. THE sandbox path: clone PCs as "(Sim)" copies (suffix: " (Sim)") so a player can re-run a battle without touching the real sheets. Resolution is STRICT (exact id or exact name — look up with list-actors first); a missing source is reported per-actor, never fatal to the batch. Name the copies with newNames[] (index-aligned) or a suffix on every source name (default " (Copy)"). Pass folder (id or exact name, created if absent) to file the copies together — omit to file each beside its source. Pass owner (user id or exact/partial name; + ownershipLevel, default OWNER) to set each copy's ownership to exactly {default: NONE, that user: level} — omit to copy the source's ownership unchanged. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | No | User who should own the copies — a user id or exact/partial user name. When set, each copy's ownership becomes exactly {default: NONE, this user: ownershipLevel}. Omit to copy the source actor's ownership unchanged. | |
| folder | No | Actor folder to file ALL the copies under — a folder id or exact name (created if absent), same contract as create-actor-from-compendium. Omit to file each copy beside its source (the source actor's own folder). | |
| suffix | No | Appended to each SOURCE name to build a copy's name when newNames does not supply one (e.g. " (Sim)" → "Gren (Sim)"). Default: " (Copy)". | |
| newNames | No | Names for the copies, aligned by index with actorIdentifiers. Entries the array does not cover fall back to the source name + suffix. Omit to name every copy that way. | |
| ownershipLevel | No | Permission level the `owner` user gets on each copy (default OWNER — full control, the sandbox use case). Only meaningful together with owner. | OWNER |
| actorIdentifiers | Yes | Source actors to duplicate — exact actor names or IDs (e.g., ["Gren"] or ["5GRD8GE7GJUWEbB2"]). Resolution is STRICT (exact id, then exact name — no fuzzy matching), so look up the precise name/ID with list-actors first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and excels: it discloses strict resolution rules, per-actor non-fatal error handling, default and custom naming behavior, automatic folder creation, exact ownership override semantics, and GM-only access. This goes far beyond the schema's parameter descriptions.
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 dense and front-loaded, putting the core purpose and sandbox use case first, then flowing through resolution, naming, folder, owner, and GM restriction in a structured order. It is slightly redundant in places ('full copies' vs. 'whole sheet travels') and could be trimmed, but every sentence still conveys useful 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?
Given the tool's moderate complexity (6 params, batch behavior, optional folder/ownership), the description covers the key operational details: copy completeness, strict resolution, error handling, naming, folder location, ownership override, and permission level. It does not mention the return value or potential rate limits, but for a duplication tool this is a minor gap, especially since no output schema exists.
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 during the initial. The description adds value beyond the schema by explaining the newNames/suffix fallback relationship, giving an explicit example ('(Sim)' → 'Gren (Sim)'), clarifying that folder creation is automatic, and specifying that ownership is replaced exactly to {default: NONE, user: level}. This pushes 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?
The description opens with a precise action and resource: 'Clone one or more existing WORLD actors as full copies.' It specifies the full-copy scope (system data, embedded items, spells, effects, prototype token) and positions itself as the sandbox duplication tool, distinguishing it from sibling tools like get-actor, export-actor, or create-actor-from-compendium.
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 a concrete use case ('clone PCs as "(Sim)" copies ... so a player can re-run a battle without touching the real sheets') and the prerequisite to 'look up with list-actors first.' It also clarifies when to omit folder/owner. However, it does not explicitly name alternative tools or situations where a different approach (e.g., creating a new actor from a compendium) would be preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export-actorA
Write ONE actor to a LOCAL file as a full-fidelity native Foundry JSON export — the complete document source (system, every embedded item with its uses/charges and flags, effects, prototype token, ownership), stamped with the exportSource envelope so the file round-trips through the sheet's Import Data button. THE character backup/restore path (get-actor is a lossy summary view). Accepts a placed token id to capture an unlinked token instance. Refuses to overwrite an existing file unless overwrite:true.
| Name | Required | Description | Default |
|---|---|---|---|
| localPath | Yes | Absolute local destination path for the JSON file (parent dirs created), e.g. "D:\\campaign\\party-snapshots\\2026-08-25\\Gren.json". | |
| overwrite | No | Allow overwriting an existing file at localPath. | |
| identifier | Yes | Actor name or ID to export. Also accepts a placed TOKEN id (from list-tokens) to export that token INSTANCE's live state — an unlinked token can differ from its base actor. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full transparency burden, and it does so well. It discloses the local file-write side effect, full-fidelity document contents, the exportSource envelope, round-trip compatibility with Import Data, token-instance capture, and the overwrite refusal unless overwrite:true is set. These are the key behavioral traits an agent needs to invoke it safely.
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 front-loads the core action and uses three information-dense sentences with no filler. Each clause adds necessary context: fidelity, round-tripping, token support, and overwrite behavior. The structure makes the tool's purpose immediately clear.
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 export operation with no annotations and no output schema, the description covers the purpose, the backup/restore use case, the full-fidelity format, the token-instance option, and the overwrite guard. The schema covers all three parameters, so an agent has everything needed to 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%, so the schema already documents identifier, localPath, and overwrite completely. The prose reinforces identifier's token-instance meaning and the local-file nature of localPath, but it does not add material parameter-level semantics beyond the schema. The added value is mostly about output fidelity, not parameter 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 names a specific verb and resource: Write ONE actor to a LOCAL file as a full-fidelity native Foundry JSON export. It also distinguishes itself from get-actor by calling that path a lossy summary view, so an agent can confidently tell this export tool apart from sibling read/update 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 explicitly positions this tool as THE character backup/restore path and references get-actor as the lossy alternative, giving a clear when-to-use signal. It also documents the special placed-token-id case for capturing unlinked token instances. This is explicit routing guidance rather than an implied usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export-chat-logA
Export the chat transcript to a LOCAL absolute file AND/OR a WebDAV Data/ path (returns its public URL). Formats: markdown | html | json | plaintext. Refuses to overwrite an existing file at either destination unless overwrite:true. WebDAV needs MOLTEN_WEBDAV_PASSWORD.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Export only the most recent N messages (omit for the whole log). | |
| format | No | Transcript format. markdown/plaintext strip HTML (roll totals kept); html keeps raw message markup (unstyled, not the rendered card); json is the structured records. | markdown |
| localPath | No | Absolute local destination path (parent dirs created). At least one destination required. | |
| overwrite | No | Allow overwriting an existing file at either destination. | |
| remotePath | No | Destination relative to the Foundry Data/ root for the WebDAV copy, e.g. "worlds/your-world/exports/session-3.md". Returns a public HTTPS URL. Requires MOLTEN_WEBDAV_PASSWORD. | |
| sinceTimestamp | No | Only messages at/after this ms-epoch timestamp. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full transparency burden. It discloses the safe read-only nature (no mention of deletion), overwrite refusal, remote password requirement, and formats. It could mention that it only exports the current chat log but the parameters allow filtering. Good overall transparency.
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—three sentences that front-load the main purpose and key behaviors. No unnecessary words or repetition. Every sentence adds 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 description covers the tool's primary functions and constraints well. However, it does not specify the return value for local exports (only mentions public URL for WebDAV) and omits that parent directories are created for localPath (though schema mentions it). Given the complexity (6 params, no output schema), the description is nearly complete but has a minor gap in 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%, so the baseline is 3. The description adds value by summarizing the overall workflow (local and/or remote, overwrite policy, format kinds) and implying that at least one destination is needed (despite none being required in schema). This clarifies parameter relationships 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 clearly states the tool exports a chat transcript to a local file and/or WebDAV path, specifying formats and overwrite behavior. It distinguishes itself from sibling tools like list-chat-messages or delete-chat-messages by focusing on export to persistent storage.
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 on when to use the tool (exporting chat logs), including prerequisites like MOLTEN_WEBDAV_PASSWORD for remote destinations and overwrite behavior. However, it does not explicitly compare to alternatives or state when NOT to use it (e.g., for simply reading messages instead).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find-asset-referencesA
Reference integrity. Find every world document (scenes, actors, items, journals, playlists, macros, roll tables) that references a given asset path under Data/. Use this BEFORE deleting or moving a file to see what would break. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | Yes | One or more Data-relative asset paths to look up, e.g. ["worlds/your-world/assets/maps/cavern.webp"]. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states 'Read-only,' which is a clear safety signal. However, it does not elaborate on side effects, rate limits, or return format beyond the implicit finding of documents.
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 extremely concise with three short sentences that front-load the purpose and usage. No unnecessary words, every sentence adds value.
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 tool with no output schema, the description covers purpose, usage guidance, document types, and safety. It is adequately complete for an agent to understand 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%, with the parameter 'paths' fully described in the schema. The description does not add extra semantics beyond what is already in the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finds references to an asset path across multiple document types, using a specific verb ('Find') and resource ('world documents'). It distinguishes itself from siblings like delete-asset or move-asset by specifying it should be used before destructive actions.
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 'Use this BEFORE deleting or moving a file to see what would break,' providing clear when-to-use guidance. It does not explicitly mention alternatives, but the context implies this tool is for pre-deletion/move checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-actorA
Retrieve D&D 5e character information optimized for minimal token usage. Returns: full stats (abilities, skills, saves, AC, HP, 2024 weapon-mastery kinds), action names, active effects/conditions (name only), and ALL items with minimal metadata (name, type, equipped status, attunement, weapon mastery property) without descriptions. Perfect for checking equipment or identifying what to investigate further. Use get-actor-entity to fetch full details for specific items, spells, or effects.
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes | Character name or ID to look up. Also accepts a placed TOKEN id (from list-tokens) to read that token INSTANCE's live state — an unlinked NPC token can differ from its base actor. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden, and it does so well: it lists exact output categories, notes that effects/conditions are name-only, and explicitly omits item descriptions to optimize token usage. It could add an explicit 'read-only/no side effects' statement, but 'Retrieve' plus the detailed return list sufficiently communicates a non-mutating lookup.
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 earns its place: purpose, return contents, use case, and the alternative tool. The return list is compact but informative, and the most important distinction (get-actor vs get-actor-entity) appears at the end 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?
Despite no output schema, the description compensates by itemizing what is returned (stats, actions, effects, items with specific metadata) and what is intentionally omitted. The identifier parameter is fully documented in the schema, and the token-instance nuance is explained. An agent has enough information to call this tool correctly and interpret the high-level 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?
The input schema covers the single parameter with 100% coverage, including the nuance about accepting token IDs and reading live instance state. The description itself adds no additional parameter-level information beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Retrieve') and resource ('D&D 5e character information'), then enumerates exactly what it returns. It also distinguishes itself from the sibling tool get-actor-entity by noting that the latter fetches full details, so an agent can tell them apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names the alternative get-actor-entity for fetching full details, and the schema explains when to pass a token ID from list-tokens to read live instance state. 'Perfect for checking equipment or identifying what to investigate further' gives a concrete use case. This is explicit when-to-use and when-to-use-the-alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-actor-entityA
Retrieve full details for a specific entity from a character. Works for items (feats, equipment, spells), actions (strikes, special abilities), or effects/conditions. Returns complete description, all system data, and (for items) module flags — the read path for flag forensics like item-piles transfer residue. Use this after get-actor when you need detailed information about a specific entity.
| Name | Required | Description | Default |
|---|---|---|---|
| entityIdentifier | Yes | Entity name or ID (can be item ID, action name, spell name, or effect name) | |
| characterIdentifier | Yes | Character name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It explicitly labels this a 'read path' and states outputs (complete description, all system data, and module flags for items), including a concrete forensic use case. It doesn't detail error behavior or a formal read-only guarantee, but the read-path label and output inventory sufficiently convey non-destructive 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 sentences, front-loaded with the action and scope, followed by a compact enumeration of supported types, return contents, and usage guidance. Every clause carries information with no padding 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 two-parameter, no-output-schema read tool, the description supplies the key context: entity categories, expected return payload, a use case (flag forensics), and the relationship to get-actor. It does not cover failure semantics or an explicit read-only statement, but the read-path label and 'returns' framing make the behavior adequately clear.
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 already documents both parameters at 100% coverage, so the baseline is 3. The description adds value by expanding what entityIdentifier may refer to (feats, equipment, spells, strikes, special abilities, effects/conditions), which is more specific than the schema's generic list. This clarifies that the parameter accepts both IDs and names across multiple entity categories.
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 object ('Retrieve full details for a specific entity from a character'), enumerates the supported entity types (items, actions, effects), and clearly differentiates from get-actor by saying 'Use this after get-actor'. It states what the tool returns and who it targets, so an agent can distinguish it from broader siblings like get-actor and get-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 final sentence gives explicit sequencing: 'Use this after get-actor when you need detailed information about a specific entity.' This provides a clear condition for use. However, it does not name alternative tools or explicitly state when not to use this tool, so it falls short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-combat-statsA
Fold Battle Flow's stat-stamped chat messages into per-combat analytics: damage dealt/taken (with per-round rate), healing + overheal, verdict-flip credits, spend economy (resource pools AND spell slots), buff-die (Bless) margin flips, and session flavor (nat 20s/1s, advantage economy, death saves). Read-only scan; reverted applications are subtracted; unlinked monsters aggregate by archetype. GM-facing — filter at call time via sections/actor/combat/since. includeLedger:true appends the folded JSON for charts.
| Name | Required | Description | Default |
|---|---|---|---|
| actor | No | Filter report lines to actors whose name contains this (case-insensitive). | |
| since | No | Only scan messages at/after this moment — an ISO date ("2026-08-27") or epoch-ms. Omit to scan the whole log (the ledger starts when the stamps do, 2026-08-27; older messages are counted as legacy and excluded). | |
| combat | No | Report a single combat by its combat id (the ledger keys buckets by the stamp's "combatId:round:turn"). Also accepts "out-of-combat" for the null bucket. Omit for all. | |
| sections | No | Which report sections to render (default all): damage, healing, flips, spends, moments (masteries/holds/saves/concentration counts), bless (buff-die margin flips), flavor (nat 20s/1s, advantage economy, death saves). | |
| includeLedger | No | Append the folded ledger as JSON (for charts or downstream analysis). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it explicitly states 'Read-only scan', says reverted applications are subtracted, and notes unlinked monsters aggregate by archetype. It also explains the includeLedger output behavior. It does not cover permissions or data-source prerequisites, but the core side-effect and data-processing traits are 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 dense but front-loaded: purpose first, then behavioral notes, then usage. The long list of analytics categories is verbose but informative; no sentence 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?
No output schema exists, but the description compensates by enumerating report sections and the optional ledger payload. It is sufficiently complete for a read-only analytics tool, though it doesn't describe the exact JSON shape or empty-result behavior.
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 by grouping sections/actor/combat/since as filters and explaining includeLedger:true appends folded JSON for charts, going beyond the schema's bare field 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 names a specific operation (fold stat-stamped chat messages into per-combat analytics) and enumerates the exact analytics categories, making the resource and output clear. It does not explicitly name a sibling tool to differentiate from, though its read-only/GM-facing framing distinguishes it from chat-log and combat-tracker utilities.
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 call-time filtering guidance (sections/actor/combat/since) and identifies the audience as GM-facing, which implies when it is appropriate. It does not explicitly state when to prefer this over list-chat-messages/export-chat-log or 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.
get-compendium-entryA
Retrieve a specific compendium entry (monster, item, spell, etc.) by pack id + entry id. Returns the full stat block — items, spells, abilities, effects, system data — needed for actor/item creation. Set compact=true for a condensed stat block when full detail is not needed. An SRD (dnd5e.*) pack id is refused — author only from the premium books (design.md §2.3).
| Name | Required | Description | Default |
|---|---|---|---|
| itemId | Yes | ID of the specific item to retrieve | |
| packId | Yes | ID of the compendium pack containing the item | |
| compact | No | Return condensed stat block (recommended for UI performance). Includes key stats, abilities, and actions but omits lengthy descriptions and technical data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read operation via the verb 'retrieve' and mentions that SRD packs are refused. However, it does not explicitly state that the operation is read-only, nor does it disclose any potential side effects or authentication requirements. This is adequate but not comprehensive.
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 long, front-loading the core purpose and output, then adding two key usage guidelines. No redundant information, 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?
Given the tool has three parameters, no output schema, and no nested objects, the description adequately covers the purpose, parameter constraints, and return type (full stat block). It references external documentation for further detail. Slightly more detail on the return format could improve completeness, but it is sufficient for an agent to decide when to use the 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%, providing a baseline of 3. The description adds value by explaining the compact parameter's purpose (condensed stat block) and the restriction on pack IDs (only premium books, not SRD). This goes beyond the schema's basic parameter 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 the tool retrieves a specific compendium entry by pack and entry ID, listing examples (monster, item, spell) and explicitly mentions the full stat block returned. This differentiates it from sibling tools like search-compendium or list-compendium-packs.
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 guidance on when to use the compact parameter and explicitly states that SRD pack IDs are refused, referencing design documentation. However, it does not explicitly state when not to use this tool versus other retrieval or search tools, though context implies it for specific entry retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-current-sceneA
Get information about the currently active scene, including tokens and layout
| Name | Required | Description | Default |
|---|---|---|---|
| includeHidden | No | Whether to include hidden tokens and elements (default: false) | |
| includeTokens | No | Whether to include detailed token information (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description implicitly suggests a read-only operation but does not explicitly state it is non-destructive or require permissions. The behavioral traits are somewhat transparent for a getter, but could be more explicit about side effects or prerequisites.
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 short sentence with no redundant words. It is concise and front-loaded with the core purpose. However, it could be slightly more structured by separating the main purpose from the included elements.
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 tool is simple with two optional boolean parameters and no output schema, the description is fairly complete. It covers what the tool does and what is included, though it omits specifics about the returned format or potential limitations.
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 described. The description does not add extra meaning beyond the schema; it mentions 'tokens' and 'layout' which align with includeTokens but does not elaborate on includeHidden. 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 retrieves information about the currently active scene, specifying it includes tokens and layout. It distinguishes from sibling tools like 'list-scenes' (lists all) and 'update-scene' (modifies), providing a specific verb and resource.
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?
No guidance is provided on when to use this tool versus alternatives. For example, it doesn't mention that to get a specific scene by ID, one might use another tool, or that this tool is only for the active scene. The description lacks usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-groupA
Read a dnd5e group actor the group-shaped way: member roster (with dangling ids flagged), shared currency, shared inventory, ownership (default + per-user), and whether it is the primary party. Use this instead of get-actor for type:group.
| Name | Required | Description | Default |
|---|---|---|---|
| groupIdentifier | Yes | The group actor to read (name or id; partial name match supported). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. The verb 'Read' clearly signals a non-mutating operation, and the mention of 'dangling ids flagged' adds a specific behavioral detail. It does not disclose error behavior or permission requirements, but for a read tool 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, compact sentence that leads with the purpose, uses a colon to enumerate features, and ends with a clear routing directive. Every word earns its place, and the alternative 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 one-parameter read tool with no output schema, the description tells the agent exactly what data to expect and which sibling to avoid. No essential information 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 coverage is 100% for the single parameter, and the description adds no extra meaning beyond what the schema already provides. The baseline of 3 applies because the schema fully documents the parameter, and the description does not need to compensate.
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 ('Read'), a resource ('dnd5e group actor'), and enumerates the exact data it returns (member roster, currency, inventory, ownership, primary party). It also distinguishes itself from the sibling get-actor by explicitly calling out the use case for type:group, making the tool's role 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 explicitly instructs to use this tool instead of get-actor for type:group, naming the alternative and the condition that selects it. This is a clear when-to-use directive with a sibling reference, fully satisfying the dimension.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-itemA
Retrieve a single world-level Item document with its full system data, embedded effects, flags, and flattened description. Resolves by id (most reliable), exact name, or case-insensitive name. Use list-items first to find ids. For an UNIDENTIFIED dnd5e item (system.identified=false) name is the mystery mask; the real source name is returned as trueName.
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes | World Item id (preferred) or name to look up. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses resolution by id, exact name, or case-insensitive name, and the special behavior for unidentified items (trueName). No annotations exist, so description carries burden well.
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, no filler. Front-loaded with core purpose, then resolution methods, then edge case. Every sentence adds value.
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?
Describes returned data comprehensively (system data, effects, flags, description) and covers the unidentified item case. No output schema, so description fills the 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?
Adds case-insensitivity and reliability details to the schema's identifier description. With 100% schema coverage, this provides meaningful extra 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 clearly states it retrieves a single world-level Item document with full data, distinguishing it from sibling list-items. The verb 'Retrieve' and resource 'Item' are specific.
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 advises using list-items first to find ids, providing clear context. Does not cover when not to use or all alternatives, but sufficient for a retrieval tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-rolltableA
Read a RollTable's FULL contents — every entry with its roll range, weight, drawn flag, the result text (HTML/@UUID enrichers intact), and any linked items surfaced as uuid + label — sorted low-to-high so a d table reads 1..N. The deterministic way to inspect or audit a table's entries without brute-force rolling (list-rolltables gives only a per-table summary; roll-on-table draws one random entry). Resolves by id or exact name.
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes | Table id or exact name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It details return content (every entry, roll range, weight, drawn flag, result text with enrichers, linked items) and sorting order (low-to-high). It implies read-only behavior ('Read', 'inspect or audit') without side effects. Sufficient for transparency.
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 primary action and data details. Every clause serves a purpose: describes content, sorting, determinism, sibling contrast, and resolution method. 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?
Given a single parameter, no output schema, and no annotations, the description thoroughly covers what the tool returns, its sorting, and its deterministic nature. An agent can fully understand the tool's behavior and output without additional information.
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 parameter 'identifier', which already states 'Table id or exact name.' The description adds the phrase 'Resolves by id or exact name', slightly reinforcing but not adding substantial new meaning. 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 uses a specific verb ('Read') and resource ('RollTable's FULL contents'), lists the exact data returned, and distinguishes from siblings 'list-rolltables' (summary only) and 'roll-on-table' (random draw). It clearly states 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 explicitly positions the tool as 'the deterministic way to inspect or audit' and contrasts with alternative tools ('list-rolltables' gives summary, 'roll-on-table' draws random). It also specifies resolution by 'id or exact name'. Lacks explicit 'when not to use', but the contrast is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-scene-dimensionsA
Read a scene's live PADDED-CANVAS geometry (by id or exact name): total width/height, the background rect within the padding (sceneX/sceneY/sceneWidth/sceneHeight), grid size/distance, and rows/columns. A scene insets its background by a padding border, so a placeable's canvas pixel is NOT just gridCell×size — use sceneX/sceneY to offset. Feeds the legend→pins cell→px math. Works on any scene (no need to activate it).
| Name | Required | Description | Default |
|---|---|---|---|
| sceneIdentifier | Yes | Scene id or exact name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the behavioral disclosure. It explains the padding inset and its implication for placeable pixel calculations ('NOT just gridCell×size'), provides the exact returned fields, and notes that no scene activation is needed. No contradictions present.
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 sentences, each serving a clear purpose: stating the main function and return values, explaining the padding nuance, and noting the usage context. It is front-loaded with the key action and is free of extraneous 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?
Given the single parameter and no output schema, the description comprehensively explains what the tool returns and the behavioral nuance about padding. It fully informs an agent about the tool's purpose and output without needing additional schema details.
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 the parameter 'sceneIdentifier' described as 'Scene id or exact name.' The description adds minimal extra meaning by reiterating 'by id or exact name' and adding 'works on any scene,' but does not significantly deepen understanding 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 clearly states it reads a scene's live padded-canvas geometry, specifying exact properties like total width/height, background rect, grid size/rows/columns. This distinguishes it from siblings like 'get-current-scene' which returns general scene data, and 'list-scenes' which lists scenes.
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 indicates the tool is for coordinate math ('feeds the legend→pins cell→px math') and notes that it works on any scene without activation. While it doesn't explicitly contrast with alternatives, the context implies use for geometry calculations, and sibling tools like 'get-current-scene' serve different purposes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-world-infoA
Get basic information about the Foundry world and system, including the world description (HTML) and join-page background path. READ-ONLY: world metadata has no write tool (the /setup editWorld route needs a role-4 GAMEMASTER session; the bridge user is deliberately an ASSISTANT) — hand edits go through the in-app "Edit World" dialog.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description must carry behavioral disclosure. It explicitly states READ-ONLY, explains that no write tool exists, and details the limitation of the bridge user being an ASSISTANT with role restrictions. This goes beyond mere read-only claim by explaining why and the alternative. This is rich context given no 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 paragraph of moderate length. It front-loads the core purpose and then explains the read-only nature and alternative. The sentence about the setup route is somewhat tangential but adds essential context. It could be slightly tighter, but is appropriately succinct for a tool with no parameters.
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 zero parameters and no output schema, the description provides sufficient information for a simple read-only tool. It covers the purpose, the read-only limitation, and the reason for that limitation. The agent can call it without further clarification. No missing details that would affect usage.
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 are no parameters, and the schema is empty with 100% coverage implies no need for parameter descriptions. The description adds value by clarifying what the tool returns (world description and background path), which aids the agent in understanding the result even though parameters are trivial. Baseline for 0 params is 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 it retrieves basic world information, including world description (HTML) and join-page background path. It is distinct from siblings as it is a read-only metadata tool, though the name already implies this. Sibling differentiation is implicit via the read-only note, but not explicitly naming alternatives.
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 context on when to use it: when you need world metadata, and clarifies it is read-only. It also mentions an alternative write path (the editWorld route) but that requires GAMEMASTER role)Skip. It does not explicitly say 'when not to use' but the read-only note implies not for editing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import-cardsA
Instantiate a core Foundry PRESET deck into the world (e.g. "pokerDark"/"pokerLight" — a standard 52-card deck). Cards have no premium-book compendium, so this is the ready-made deck path; build themed D&D decks with create-cards. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional name for the imported stack. | |
| preset | Yes | Core preset deck key — e.g. "pokerDark" / "pokerLight" (a standard 52-card deck). | |
| folderName | No | Optional folder to place the stack in (created if absent). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It notes that cards have no premium-book compendium and that the tool is GM-only, which adds behavioral context. However, it does not disclose side effects, permissions beyond GM, or whether the operation is destructive or read-only.
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 that front-load the action and key details. Every sentence adds value: purpose, example, alternative, and GM restriction. 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 3-parameter tool with no output schema, the description adequately covers purpose, usage, and constraints. It could briefly mention that the deck is imported as a stack, but overall it is sufficiently complete given the tool's 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?
Schema coverage is 100%, so baseline is 3. The description adds examples for 'preset' ('pokerDark'/'pokerLight') but does not significantly enhance understanding beyond the schema. The optional parameters 'name' and 'folderName' are not elaborated upon.
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 imports a Foundry PRESET deck with examples ('pokerDark'/'pokerLight'). It distinguishes itself from 'create-cards' for themed D&D decks, providing a clear verb+resource 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 explicitly says to use this tool for ready-made decks and directs to 'create-cards' for themed D&D decks. It implies GM-only usage, which serves as a usage constraint, though it does not explicitly state when not to use it beyond the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import-itemA
[D&D 5e only] COPY an existing item from a compendium pack onto an actor (or into the world Items sidebar), keeping its artwork, full system data, and activities. PREFER THIS over add-item for any real piece of gear — a plain greatsword, a Potion of Healing, a +1 shield, a magic weapon: copying brings the correct PHB/DMG 2024 stats AND the graphic, where authoring from scratch does not.
WORKFLOW: 1) find the item with search-compendium (prefer the 2024 packs: "dnd-players-handbook.equipment", "dnd-dungeon-masters-guide.equipment" — premium books ONLY, never the dnd5e.* SRD); 2) import-item with its packId + itemId; 3) for a CUSTOM item, copy the closest base then refine it with update-actor-item / manage-activity / manage-effect and rename via name.
Optional on-copy tweaks: name (rename), quantity, equipped, identified, container (nest in a bag/chest), folder (world target only). Target an actor with actorIdentifier, or omit it to build a reusable world Item. Use add-item only for genuine homebrew with no compendium base.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Rename the copy (e.g. when adapting a base item into a custom magic item). | |
| folder | No | When copying to the world (no actorIdentifier), place the item in this folder. | |
| itemId | Yes | Entry id within the pack (from search-compendium / get-compendium-entry results). | |
| packId | Yes | Compendium pack id holding the item (e.g. "dnd-players-handbook.equipment", "dnd-dungeon-masters-guide.equipment"). Premium MM/PHB/DMG books ONLY — never the dnd5e.* SRD (design.md §2.3). Find it with list-compendium-packs / search-compendium. | |
| equipped | No | Set equipped state on the copy (equippable items only; ignored otherwise). | |
| lootCopy | No | [actor target] Also mint a matching WORLD Item (same art + stats) so the party can loot this gear afterward (rule 9). DEFAULT ON for magic items (rarity set or "mgc"); pass false to suppress, or true to force a loot copy of a mundane item too. Ignored for a world-item target. | |
| quantity | No | Override the stack count on the copy. | |
| container | No | Id or name of an EXISTING container on the same target to nest the copy inside. | |
| identified | No | Set identified state (false = mystery/unidentified loot). | |
| lootCopyFolder | No | Folder for the loot copy (created if absent). Default "Loot". | |
| actorIdentifier | No | Target actor (name or id, partial match) to copy the item onto. Also accepts a placed TOKEN id (from list-tokens) — the copy then lands on that token INSTANCE's own delta, not the base actor. Omit to copy into the world Items sidebar instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavioral traits. It explains that the tool copies artwork, full system data, and activities, and it details optional on-copy tweaks. It also describes the different behaviors when targeting an actor versus the world, including the lootCopy mechanism and token instance treatment. However, it omits potential side effects like duplicate handling or error behavior on invalid inputs, preventing a perfect score.
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 structured well: it starts with the main purpose and preference, then provides a workflow, and finally details optional parameters. It is somewhat lengthy but each sentence adds value—no fluff. While it could be more concise, the structure is logical and front-loaded, earning a 4.
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 complexity (11 parameters, no output schema), the description covers the essential context: the tool's core behavior, when to use it, the target distinction (actor vs world), loot handling, and SRD restrictions. It does not explain return values, but that is acceptable without an output schema. Some minor edge cases (e.g., error handling) are missing, but overall it is sufficiently complete for effective 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?
The input schema already has 100% description coverage for all 11 parameters, so the baseline is 3. The description adds meaningful context beyond the schema, such as explaining the lootCopy default for magic items, the SRD restriction for packId, and the token instance nuance for actorIdentifier. It also provides a workflow that ties parameters together, which enhances understanding. Thus, a score of 4 is warranted.
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: COPY an existing item from a compendium pack onto an actor or world Items sidebar. It uses a specific verb ('COPY') and resource ('existing item'), and explicitly distinguishes itself from the sibling add-item by stating a preference for real gear. This leaves no ambiguity about what the tool does and how it differs from alternatives.
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 usage guidelines: it advises to prefer import-item over add-item for any real piece of gear, provides a three-step workflow (search-compendium, import-item, refine), and specifies when to use add-item (genuine homebrew). It also warns against using SRD packs. This level of detail gives the agent clear when-to-use and when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import-rolltableA
Copy a whole RollTable from a compendium pack into the world (e.g. a DMG treasure / magic-item table). Roll tables are world-only at roll time, so a published table must be imported before roll-on-table can use it; the embedded results — including their @UUID item links — come along intact. Premium-book packs only (SRD refused). GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| itemId | Yes | The RollTable document id within the pack. | |
| packId | Yes | Compendium pack id holding the table (e.g. dnd-dungeon-masters-guide.tables). | |
| folderName | No | Optional folder to place the imported table in (created if absent). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations, the description carries full burden. It discloses that embedded results with @UUID links come intact, that the tool is GM-only, and that it only works with premium-book packs. It doesn't mention if the import is additive or overwrites, but 'Copy' implies duplication. The description provides reasonable transparency.
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 extremely concise with three sentences that front-load the core action, then add context and constraints. Every sentence adds value, and there is no redundant 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 description explains why the tool is needed (world-only roll tables), what is copied (embedded results with UUIDs), and user restrictions (GM, premium packs). It lacks details on error handling or exact outcome, but for a simple import tool without output schema, it 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 description coverage is 100%, so the schema already documents each parameter. The tool description does not add meaningful detail beyond what is in the schema. Baseline score 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 action ('Copy a whole RollTable from a compendium pack into the world') and provides a concrete example (DMG treasure/magic-item table). It distinguishes from siblings like create-rolltable and roll-on-table by explaining the import necessity.
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 when to use this tool (before roll-on-table) and why (roll tables are world-only at roll time). It also specifies constraints: premium-book packs only (SRD refused) and GM-only. However, it does not explicitly compare to alternative tools like import-item or list-rolltables.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect-pc-advancementA
Read-only: report the player CHOICE points a premium class exposes up to a level — each advancement's id, type (Trait/ItemChoice/Subclass), how many to pick, and the legal options — so the skill can ask the DM and fill create-pc's choices map without inventing anything. Resolve by className OR classUuid (exactly one); premium books only, never the SRD. Touches no actor.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | ||
| className | No | ||
| classUuid | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden. It explicitly states the tool is read-only and touches no actor, disclosing key behavioral traits. Constraints like premium-only are also included.
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, concise and front-loaded with 'Read-only'. It is efficient with no wasted words, though the second sentence could be slightly more structured.
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 no output schema or annotations, the description covers what it does, key constraints, and how to use parameters. However, it lacks details on output structure, error handling, and default behavior when no identifier is provided.
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 0%, so the description must add meaning. It explains that className and classUuid are resolution keys and that exactly one should be used. The level parameter is mentioned but its default and behavior if omitted are not clarified.
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 it's a read-only tool that reports player choice points for a premium class up to a level, specifying the information returned. It does not explicitly differentiate from sibling tools but the unique function is evident.
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 states that resolution is by className OR classUuid (exactly one) and that it works only for premium books, not SRD. This provides clear usage context, though alternatives are not mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
level-up-pcA
Add ONE level to an existing PC (type:character) and apply that level's advancement IN PLACE. Same className as a class the PC already has → a single-class level-up; a class it does NOT have → a MULTICLASS add (the PC gets the 2024 multiclass proficiency SUBSET, not the full first-level kit). HP/features/subclass(@ the class's level 3)/spell-slots scale; @scale stays native. Like create-pc: call with no/partial choices to get a needsChoices[] dry-run (e.g. the subclass options at level 3 — the actor is NOT touched); fill choices (level → advancement-id → {chosen|selected|uuid}) and re-call. ASI ability bumps are NOT applied here — raise the final scores with update-actor; a feat taken at an ASI tier is added with add-feature. If a required advancement FAILS to apply, the PC is rolled back to its prior level and success:false is returned with errors[]. Required: actorIdentifier, className. Returns {success, actor (incl. classLevel + classes[]), applied[], needsChoices[], unresolvedScale[], errors[], warnings[]}.
| Name | Required | Description | Default |
|---|---|---|---|
| hpMode | No | avg | |
| choices | No | ||
| className | Yes | ||
| acceptDefaults | No | ||
| actorIdentifier | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description thoroughly discloses behavioral traits: in-place application, rollback on failure, dry-run mode that doesn't modify the actor, multiclass proficiency subset, HP/feature/spell-slot scaling, and the return structure. 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?
The description is efficient: every sentence adds value, starting with the core action, then nuances, then alternatives and error handling. It is well-structured and not 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?
Given the tool's complexity, no output schema, and no annotations, the description is remarkably complete. It covers all key aspects: input parameters, behavior, dry-run, rollback, return values, and cross-references to sibling 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?
With 0% schema coverage, the description adds significant meaning for most parameters: className behavior, actorIdentifier requirement, choices structure detailed as level->advancement-id->{chosen,selected,uuid}. However, acceptDefaults and hpMode are not explicitly mentioned, relying on inference. Still, it compensates well overall.
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 it adds one level to an existing PC, distinguishing between single-class and multiclass levels. It also explicitly distinguishes from sibling tools like create-pc, update-actor, and add-feature by specifying their roles.
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 this tool versus alternatives: ASI bumps must be done via update-actor, feats via add-feature. It also explains the dry-run pattern and rollback behavior, giving clear context for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link-quest-to-npcA
Append a link from a quest journal to a REAL world NPC: resolves the actor, inserts a Foundry @UUID[Actor.id]{Name} enricher link (clickable on render) in a GM note, labelled with the relationship. Refuses an unknown NPC (no dead links) — create the actor first.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | Page to add the link to (id from list-journals). Omit to use the first text page. | |
| npcName | Yes | Name (or id) of a REAL world Actor to link. Must resolve — a dead link is refused. | |
| journalId | Yes | ID of the quest journal entry. | |
| relationship | Yes | Relationship between the NPC and the quest. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description fully discloses behavioral traits: it resolves the actor name, appends a specific UUID link to a GM note, labels with the relationship, and refuses unknown NPCs to prevent dead links. Since no annotations are provided, the description carries the full burden and does so comprehensively.
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 redundant words. The first sentence front-loads the main action and mechanism; the second provides a key 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?
The description covers the tool's purpose, behavior, and a precondition (NPC must exist). However, it does not mention the return value or confirm what happens on success (e.g., modified journal). Without an output schema, this information would help completeness, but the tool is relatively simple.
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 description adds meaning beyond the schema by explaining that 'npcName' is resolved to an existing actor and 'relationship' becomes the label on the link. It also clarifies the optional 'pageId' parameter implicitly via the 'GM note' context. Schema coverage is 100%, so the baseline is 3, but the description adds valuable behavioral 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 clearly states the tool's action: 'Append a link from a quest journal to a REAL world NPC', and details the mechanism (resolving actor, inserting UUID enricher link in GM note). It uniquely distinguishes itself from sibling tools like update-quest-journal or create-note by its specific purpose of linking to an NPC.
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 implicit usage context: it's for linking a quest journal to an existing NPC. It explicitly warns that the NPC must exist ('create the actor first'). However, it does not compare to alternatives or explicitly state when not to use it, missing a clear when-not clause.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-actor-ownershipA
List current ownership permissions for actors, showing which players have what access levels. Each row reports the EFFECTIVE level plus its source: 'explicit' (the actor's ownership map holds an entry for that player) or 'inherited' (the actor's default, also reported per actor as defaultPermission). Use it to tell an explicit NONE — a stored deny that overrides a permissive default — from a player who simply has no entry.
| Name | Required | Description | Default |
|---|---|---|---|
| actorIdentifier | No | Optional: specific actor name/ID to check, or "all" for all actors | |
| playerIdentifier | No | Optional: specific player name to check ownership for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It thoroughly explains the output semantics: each row reports the effective level and its source ('explicit' or 'inherited'), and it notes that the actor's default is reported as defaultPermission. It also clarifies a subtle edge case (distinguishing explicit NONE from absence of an entry). This is substantial transparency beyond the bare 'list' action, though it does not discuss side effects, authentication, or rate limits.
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 paragraph that front-loads the core purpose and then explains the output details and the key distinction it enables. Every sentence contributes useful information without redundancy. It is slightly longer than minimal but remains efficient given the complexity of the ownership model it clarifies.
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 explains the output format (rows with effective level and source), the meaning of the source field, and the defaultPermission reporting. It also addresses a common misinterpretation. It does not mention pagination, result limits, or error cases, but for this tool's scope, the information provided is sufficient for an agent to call it and interpret the result 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 already provides 100% coverage with clear descriptions for both parameters (actorIdentifier and playerIdentifier). The description does not add new information about the parameters themselves, but it does tie them to the output semantics by implying how filtering by actor or player affects the rows shown. Since the schema covers the parameters, a baseline of 3 is appropriate, and the description adds only marginal value 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?
The description states a specific action (list), a specific resource (actor ownership permissions), and the exact information returned (which players have what access levels, including the effective level and its source). It clearly distinguishes itself from the sibling set-actor-ownership by focusing on reading rather than writing, and it goes beyond a generic 'list' by explaining the explicit vs. inherited distinction.
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 a concrete use case: 'Use it to tell an explicit NONE — a stored deny that overrides a permissive default — from a player who simply has no entry.' This gives clear guidance on when the tool is valuable. It does not explicitly name alternatives or exclusion criteria, but the context of the sibling set-actor-ownership makes the read/write distinction obvious, so a 4 is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-actorsC
List all available characters with basic information
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Optional filter by character type (e.g., "character", "npc") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full responsibility for behavioral disclosure. It only states 'list all available characters' without indicating read-only nature, pagination, response size, or what 'basic information' entails. This is minimal transparency.
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 with no redundancy. It is front-loaded with the verb and resource, but could be more efficient by including key details.
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 lack of output schema, the description does not specify return fields (e.g., name, id, type) or any limits. It is incomplete for a listing operation, leaving the agent uncertain about the response structure.
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 parameter 'type', and its description is present in the schema. The tool description adds no extra meaning beyond the schema, so baseline score 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 'List all available characters with basic information', clearly indicating the action (list) and resource (characters/actors). It implicitly differentiates from sibling tools like 'get-actor' (singular) and other list-* tools by naming the entity, but lacks explicit differentiation.
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?
No guidance is provided on when to use this tool over alternatives such as 'get-actor' for specific actors or 'search-actor-contents' for filtered searches. The agent must infer from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-assetsA
Plane B (file channel, read-only). List the immediate contents of a directory under the Foundry Data/ root over WebDAV (folders + files, with size / type / public URL). Use to browse uploaded assets, e.g. worlds/your-world/assets/audio. Empty/omitted path lists the Data/ root.
| Name | Required | Description | Default |
|---|---|---|---|
| remotePath | No | Directory path relative to the Foundry `Data/` root (a leading "Data/" or "/" is tolerated). Omit or "" for the Data/ root, e.g. "assets" or "worlds/your-world". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: it labels itself 'read-only', states it lists only immediate (non-recursive) contents, and specifies return details (size/type/public URL). 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 sentences: the first defines the tool's function, the second provides usage guidance. No unnecessary words; information is front-loaded and efficiently presented.
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 parameter and no output schema, the description covers what the tool returns (folders + files with size/type/public URL) and the default behavior. Could mention limits or authentication but is adequate for agent 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% and the schema already provides a detailed description for the remotePath parameter. The description adds the default behavior (empty/omitted lists root) but does not add significant 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?
The description clearly states the verb 'List' and the resource 'contents of a directory under Foundry Data/ root'. It specifies return items (folders + files with size/type/public URL) and gives an example path. This differentiates it from sibling tools like asset-info (single asset) and upload-asset.
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 says 'Use to browse uploaded assets' with an example, clearly indicating when to use this tool. It does not explicitly mention when not to use or compare to alternatives, but the context of sibling tools makes this clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-cardsB
List Cards stacks with id, name, type (deck/hand/pile), and card count.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose any behavioral traits such as read-only nature, side effects, or permissions required. With no annotations, the description carries full burden for safety info but fails to deliver.
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 is front-loaded with the essential action and resource. No unnecessary 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?
Given the tool has no parameters and no output schema, the description provides the key return fields. However, the term 'cards stacks' is not explained, and there is no mention of ordering or filtering. Still, it is reasonably complete for a simple list 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?
There are no parameters, so schema coverage is 100%. The description adds value by specifying the returned fields (id, name, type, card count), which is useful for understanding the output.
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 lists cards stacks with specific fields (id, name, type, card count). The verb 'list' and resource 'cards stacks' are specific. However, it does not define what a 'cards stack' is, which could be ambiguous.
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?
No guidance is provided on when to use this tool over alternatives (e.g., list-actors, list-items). There is no context about when not to use it or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-chat-messagesA
List recent chat messages (id, author, time, whisper/blind, content preview). Use to find ids for delete, verify a post, or preview before export. contentMode:"none" keeps it cheap on a huge log.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Return the most recent N messages (chronological, newest last). | |
| contentMode | No | Return raw content HTML, HTML stripped to text, or omit content (cheap on big logs). | text |
| sinceTimestamp | No | Only messages with timestamp (ms epoch) at/after this value. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description provides some behavioral info: it lists returned fields and notes that contentMode:none is cheap. However, it does not disclose ordering (which is in schema but not in description) or scope (all messages or only current user's). No side effects or read-only indication.
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 only two sentences, immediately stating the tool's purpose and then providing use cases and a tip. No filler 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?
Given the low complexity (3 parameters, no output schema), the description covers purpose, use cases, fields returned, and a performance tip. Missing details like ordering and scope, but overall adequate.
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 each parameter already described. The description adds minimal value beyond the schema, only repeating the cheapness tip for contentMode:none. 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 lists recent chat messages with specific fields (id, author, time, whisper/blind, content preview), and it provides explicit use cases (find ids for delete, verify a post, preview before export) that help differentiate it from siblings like delete-chat-messages and export-chat-log.
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 (to find ids for delete, verify, preview) and provides a usage tip (contentMode:none for cheap operation). However, it does not mention when not to use it or mention alternatives like export-chat-log for full export.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-compendium-packsA
List the available compendium packs. SRD (dnd5e.*) packs are excluded — only the premium book packs (and any other non-SRD packs) are listed (design.md §2.3).
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Optional filter by pack type |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses the exclusion of SRD packs, but lacks details about whether the operation is read-only, permissions needed, or return format.
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, no fluff, directly conveys purpose and key constraint.
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 references an external document (design.md §2.3) that the agent cannot access, and fails to describe the return value shape, which is critical given no 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 the description adds no additional meaning to the optional 'type' parameter beyond the schema's 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 clearly states the verb 'list' and the resource 'compendium packs', and specifies the exclusion of SRD packs (dnd5e.*), distinguishing it from siblings like 'read-pack' and search-compendium 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 provides clear context for when to use this tool (listing premium/non-SRD packs) but does not explicitly state when not to use it or name alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-drawingsA
List every Drawing on a scene — id, origin (x/y), shape type + dimensions (width/height/radius/pointCount), rotation, label text, fill type, stroke color, hidden/locked/interface. Read-only; the inspect step before update-drawings / delete-drawings.
| Name | Required | Description | Default |
|---|---|---|---|
| sceneIdentifier | Yes | Scene id or exact name holding the placeables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It explicitly states 'Read-only', which is a key behavioral trait for a listing tool. It also implies no filtering by saying 'List every Drawing on a scene', which informs the agent about data volume and scope.
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 is front-loaded with the action and resource, then efficiently lists all returned fields. No unnecessary words 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?
Given the tool's simplicity (one parameter, no output schema), the description is comprehensive. It explains what the tool lists, the fields returned, its read-only nature, and its role in a sequence with update/delete. No gaps remain.
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. The description does not add any additional meaning beyond the schema's description of sceneIdentifier. The parameter's purpose is already clear from the tool name and 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 specifies the verb 'List' and the resource 'Drawings on a scene'. It enumerates the exact fields returned (id, origin, shape type, dimensions, etc.), distinguishing it from sibling tools like update-drawings and delete-drawings by noting its role as the 'inspect step' before those.
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 states 'the inspect step before update-drawings / delete-drawings', giving clear guidance on when to use this tool and pointing to alternative tools for subsequent mutations. Also declares it is 'Read-only', which helps the agent decide safety.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-foldersA
Read the sidebar folder TREE — every world folder (or one document type) in tree order with its id, nesting depth + "/"-joined path, hex color, raw sort value, parent, direct document count, and subfolder count. Siblings are listed ALPHABETICALLY — which matches how the v14 sidebar actually renders FOLDERS (it ignores sort for them), so this listing order IS the sidebar order. The inspect step the folder tools were missing: find the ids/names for update-folder (rename/recolor/reparent), delete-folder, move-documents, and the folder params on the create tools — without guessing what exists. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter to one document type (Actor, Scene, …). Omit for the whole sidebar. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and meets it well: it declares 'Read-only,' explains the alphabetical ordering and why that matches the v14 sidebar, and details the data fields returned. It also explains the optional type filtering behavior, making the tool's behavior predictable.
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 detailed but every sentence earns its place: it lists return fields, describes ordering behavior, and ties the tool to real downstream use cases. The key concept ('Read the sidebar folder TREE') is front-loaded, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a read-only listing tool: it names output fields, explains ordering, states the optional filter, and tells the agent exactly why and when to call it. With no output schema present, this level of detail is sufficient for correct invocation and interpretation.
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 already documents the optional 'type' parameter with a full enum and description at 100% coverage. The description adds valuable semantic context by explaining that omitting type returns the whole sidebar and that it filters to one document type, going slightly beyond the schema's static enum list.
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 ('Read') and resource ('sidebar folder TREE'), and enumerates exactly what is returned: tree order, id, nesting depth, path, color, sort value, parent, and counts. It clearly differentiates this listing tool from siblings like create-folder, update-folder, and delete-folder.
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 positions itself as 'the inspect step the folder tools were missing' and tells the agent to use it to find ids/names for update-folder, delete-folder, move-documents, and create tool folder params. This gives concrete when-to-use guidance and names the downstream alternatives it supports.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-itemsA
List world-level Item documents, optionally filtered by type, name substring, or folder.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by item type (e.g. "weapon", "spell"). Omit to return all types. | |
| folder | No | Filter to items inside this folder (name or ID). | |
| nameFilter | No | Case-insensitive substring match on item name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states it lists items but does not disclose any behavioral traits such as pagination, ordering, read-only nature, or potential limits. The description is minimal and does not sufficiently inform the agent about the tool's behavior beyond its basic function.
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 of 12 words, front-loading the core function ('List world-level Item documents') and immediately following with the optional filters. There is no redundant or unnecessary 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?
Given no output schema, the description does not specify the return format (e.g., full item details, IDs) or any constraints like pagination or maximum results. For a listing tool among many siblings, it is adequate but lacks completeness in setting expectations for 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?
The input schema has 100% description coverage, so each parameter is already documented within the schema. The tool description adds no additional meaning or usage context beyond what is in the schema, resulting in a baseline score of 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 clearly states the verb 'List', the resource 'world-level Item documents', and specifies optional filters (type, name substring, folder). It distinguishes from sibling tools like 'list-actors' or 'list-assets' by explicitly naming the resource.
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 does not provide explicit guidance on when to use this tool versus alternatives. While it is clear from context that this is for listing items, there is no mention of when not to use it or which sibling tool might be more appropriate for similar but different queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-journalsA
List all journal entries, or read a specific journal/page. Without parameters: lists all journals with their pages (id, name, type). With journalId: reads the journal's first text page content and shows all available pages. With journalId + pageId: reads a specific page's full content.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | If provided with journalId, read this specific page's content. Get page IDs from the pages array returned when listing journals or reading a journal. | |
| journalId | No | If provided, read this journal's content instead of listing all journals. Returns full page content and a list of all pages in the journal. | |
| filterQuests | No | Only show journals that appear to be quest-related (default: false) | |
| includeContent | No | Include journal content preview (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden of disclosing behavior. It explains that without parameters it lists journals with pages, with journalId it reads first page content and shows pages, and with both reads full content. This is sufficient for a read-only operation. It doesn't mention side effects (none) or other traits, but the description is transparent about what happens in each mode.
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 long and conveys the necessary information efficiently. The key behavior is front-loaded ('List all journal entries, or read a specific journal/page'). It could be slightly more structured (e.g., bullet points) but is concise and clear.
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 tool has 4 optional parameters, no required fields, no output schema, and the sibling tools include many similar list/read operations, the description adequately covers the different usage modes. It explains what the agent can expect for each parameter combination, which is sufficient for effective use. Could mention pagination or limits, but 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?
The schema already provides descriptions for all 4 parameters (100% coverage), setting a baseline of 3. The description adds value by explaining the combined effect of parameters (e.g., how journalId and pageId interact) and clarifying what each mode returns. This goes beyond the schema's individual parameter 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 specifies exactly what the tool does: list all journal entries or read a specific journal or page. It distinguishes three modes based on parameter presence, using verbs like 'list' and 'read' with the resource 'journal entries/pages'. This clearly differentiates it from sibling tools like 'search-journals' and other document listing 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 provides clear guidance on when to use each parameter combination (without params, with journalId, with both). It implicitly tells the agent what to expect in each case. However, it does not explicitly exclude use cases or compare with alternatives like 'search-journals', so it misses some guidance on when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-lightsA
List every AmbientLight on a scene — id, center (x/y), rotation, dim/bright radii, color, cone angle, animation type, hidden, walls/vision. Read-only; the inspect step before update-lights / delete-lights.
| Name | Required | Description | Default |
|---|---|---|---|
| sceneIdentifier | Yes | Scene id or exact name holding the placeables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
States 'Read-only' which is critical behavioral information. Lists all returned fields in the description. No annotations provided, so the description carries the burden well.
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, no filler. Front-loaded with key action and scope. 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 list tool with one parameter and no output schema, the description is sufficiently complete: it lists return fields, states read-only, and provides usage context. Minor omissions like handling of null positions are 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 coverage is 100% and the parameter description is adequate. The tool description adds context by specifying the operation scope ('on a scene') but doesn't add meaning beyond the schema for 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?
Description clearly states it lists AmbientLight objects on a scene and enumerates all returned fields. Distinguishes itself from siblings by specifying 'AmbientLight' and the inspect step before update/delete.
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 frames the tool as a read-only inspect step before update-lights or delete-lights, providing clear context for when to use it. Could be slightly more explicit about when not to use, but sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-macrosA
List every macro in the world: id, name, type (script/chat), author, icon, a command preview, and every user hotbar slot it is pinned to. The read to run before delete-macro.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for disclosing behavior. It explicitly labels the operation as 'the read,' implying no side effects, and clarifies global scope with 'every macro in the world.' It also discloses the return contents, including hotbar slots, which is more than minimal.
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 conveys scope, output fields, and usage context without waste. The closing phrase 'The read to run before delete-macro' is compact and 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 no-parameter, no-output-schema list tool, the description supplies everything needed: what it lists, the returned fields, the global scope, and the intended workflow position before deletion.
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 parameter semantics are trivially satisfied; the baseline is 4. The description further confirms the unfiltered global scope, matching the empty 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 opens with a specific verb and resource, 'List every macro in the world,' and enumerates the exact fields returned. It also distinguishes itself from delete-macro by naming itself as the read that precedes it.
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 this tool is appropriate: 'The read to run before delete-macro.' Since no alternative macro-listing tool exists among siblings, this targeted usage guidance fully resolves selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-notesA
List every MAP-NOTE PIN on a scene — id, position (x/y), label text, linked journal entryId/pageId, icon src + size, fog global, font. Read-only; the inspect step that feeds update-note / delete-note (create-scene-notes places them).
| Name | Required | Description | Default |
|---|---|---|---|
| sceneIdentifier | Yes | Scene id or exact name holding the placeables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description takes full responsibility for behavioral disclosure. It explicitly declares the tool as read-only, implying no side effects. It also lists the returned attributes, giving the agent a clear expectation of the output. No contradictions are present.
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, front-loading the action and key information. Every word adds value: the action, what is returned, data types, and usage context. No unnecessary 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?
Given the low complexity (single parameter, no output schema, no nested objects), the description is complete. It explains what the tool does, what it returns, and how it fits into a workflow (inspect → update/delete). No critical information 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 has 100% coverage (single 'sceneIdentifier' parameter with a description). The tool description adds value by specifying that the parameter refers to the scene holding 'placeables' and by explaining the return fields, which helps contextualize the parameter's role. This goes slightly beyond the baseline of 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 uses a specific verb ('List') and resource ('MAP-NOTE PIN on a scene'), and enumerates the exact fields returned (id, position, label, etc.), making the tool's purpose unambiguous. It clearly differentiates from sibling tools like create-scene-notes, update-note, and delete-note.
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 'Read-only' and positions the tool as 'the inspect step that feeds update-note / delete-note', providing clear context on when to use it. While it does not list alternatives or when not to use it, the context is sufficient for an AI agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-playlistsA
List Playlist documents with id, name, mode, track count, and whether each is currently playing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must carry the full burden. It states the output fields but does not disclose any behavioral traits such as being read-only, performance implications, or any ordering. The lack of annotations is partially mitigated by the tool's simplicity.
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 sentence that directly states the action, resource, and returned fields. Every word adds value; 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 no-parameter, no-output-schema tool, the description adequately tells the agent what fields will be returned. It could mention that 'all' playlists are listed, but that is implied by the tool name and absence of filters.
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. According to the rubric, 0 parameters warrants a baseline of 4. No further parameter explanation is 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 uses the verb 'List' and specifies the resource 'Playlist documents'. It enumerates specific fields returned (id, name, mode, track count, playing status), clearly distinguishing this from other playlist-related tools like create, delete, or 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?
No explicit guidance on when to use this tool versus alternatives. The purpose is implied by the name and description (list all playlists), but there is no mention of when not to use it or even a hint about alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-regionsA
List every Region on a scene — id, name, each shape's bounds, and any teleporter destinations. Read-only; use it to find region ids for update-region / delete-region.
| Name | Required | Description | Default |
|---|---|---|---|
| sceneIdentifier | Yes | Scene id or exact name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden and discloses it is read-only and returns specific data. No mention of authorization or limits, but for a list tool 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?
Two sentences, front-loaded with action and output, then use-case. Every sentence is essential and 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?
Completeness is high: describes input parameter fully, explains return fields, and provides context for usage. No output schema needed as description 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 100% with a description for sceneIdentifier. The tool description does not add additional meaning beyond the schema, so baseline score 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 lists regions on a scene with specific fields (id, name, bounds, teleporter destinations). It distinguishes itself from siblings like update-region and delete-region by indicating its use for finding region 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 states the tool is read-only and should be used to find region IDs before using update-region or delete-region, providing clear guidance on when to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-rolltablesB
List RollTable documents with id, name, formula, result count, and description.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry full burden. It only states what fields are returned but does not disclose any behavioral traits like read-only nature, pagination, or side effects. For a list operation, basic transparency is missing.
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 sentence that quickly conveys the purpose and output fields. It is front-loaded and concise, though it could be slightly more structured (e.g., bullet points) but still 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?
Given 0 parameters and no output schema, the description gives the minimum viable information: it lists what fields are returned. However, it omits any details on scope (e.g., all rolltables? filtered?), ordering, or whether it's read-only. Adequate but with clear gaps.
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?
Tool has zero parameters, so schema coverage is 100% by default. Description does not need to add parameter meaning beyond schema, which is empty. Baseline 4 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?
Description clearly states the action 'list' and the resource 'RollTable documents', and specifies the fields returned (id, name, formula, result count, description). It effectively distinguishes from sibling tools like create-rolltable, delete-rolltable, and roll-on-table.
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?
No usage guidance provided; description does not indicate when to use this tool versus alternatives like search-rolltables or roll-on-table. Lacks context on prerequisites or 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.
list-scenesA
List Scene documents with id, name, active flag, dimensions, grid size, and background path. Optionally filter by name substring or show only the active scene.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Case-insensitive substring match on scene name. | |
| includeActiveOnly | No | Return only the currently active scene (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool lists scenes and specifies returned fields, implying a read operation. However, it does not explicitly declare it as read-only or disclose any other behavior (e.g., pagination, ordering, default scope).
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 sentence that efficiently conveys the tool's purpose and key features. It is front-loaded with the primary action and resources. Minor improvement could be breaking into two sentences for readability, but current structure is concise and clear.
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 operation with no output schema, the description adequately covers the returned fields and filtering options. It does not mention ordering, pagination, or default behavior (e.g., returns all scenes by default), but those are not critical given the tool's simplicity. Overall, it provides sufficient context for an agent to use the tool effectively.
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 mentions both parameters ('filter by name substring', 'show only the active scene') but adds no new semantics beyond what the schema already provides (e.g., case-insensitivity, default values).
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 specifies the verb 'List' and resource 'Scene documents', and enumerates the returned fields (id, name, active flag, etc.). This clearly distinguishes it from sibling tools like create-scene or get-current-scene.
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 mentions optional filtering (by name substring or active scene only), implying when you might use these options, but provides no explicit guidance on when to use this tool versus other scene-related tools. It lacks 'when to use' and 'when not to use' context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-soundsA
List every AmbientSound on a scene — id, name, center (x/y), radius, audio path, volume, repeat/walls/easing flags, darkness range, base effect. Read-only; the inspect step before update-sounds / delete-sounds.
| Name | Required | Description | Default |
|---|---|---|---|
| sceneIdentifier | Yes | Scene id or exact name holding the placeables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description declares the tool is 'Read-only', a key behavioral trait. It also lists the fields returned. With no annotations, the description carries full burden, and while it doesn't detail error conditions or performance, it sufficiently covers the read-only nature.
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, front-loading the action and fields, followed by behavioral and usage context. No wasted words, every sentence serves a 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?
Given the tool's simplicity (single parameter, no output schema), the description is fairly complete. It covers what is returned and the read-only nature. It could be slightly improved by specifying the output format (e.g., array of objects), but the listed fields provide sufficient detail.
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 parameter 'sceneIdentifier' is already documented. The description adds marginal value by implying it refers to the scene containing the sounds, but does not provide additional format 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?
The description clearly states the verb 'List' and resource 'AmbientSound on a scene', enumerating the fields returned. It also distinguishes itself from siblings by stating it's the 'inspect step before update-sounds / delete-sounds'.
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 (before modification) and references sibling tools update-sounds/delete-sounds. However, it does not explicitly state when not to use it or provide alternatives for other scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-tilesA
List every Tile on a scene — id, position (x/y = the TOP-LEFT in canvas pixels, converted from v14's center-anchored doc coords), size (width/height), rotation, elevation, sort, texture src, image scale, hidden/locked. Read-only; the inspect step before update-tiles / delete-tiles (you need the ids + current values to edit).
| Name | Required | Description | Default |
|---|---|---|---|
| sceneIdentifier | Yes | Scene id or exact name holding the placeables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explicitly states 'Read-only' and discloses the important coordinate conversion detail (top-left canvas pixels vs v14's center-anchored coords). It also lists all fields returned, which is transparent about the output. Minor gaps like error behavior are not critical for a list operation.
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 ('List every Tile') then enumerates fields and the conversion note. Every clause adds value; there is no filler. It could be slightly restructured for readability, but it remains concise and well-ordered.
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 list tool with no output schema, the description provides all needed call context: what is returned, the coordinate transformation, the read-only nature, and the intended workflow. It does not describe the exact response structure, but the field list compensates.
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 parameter (sceneIdentifier has a description: 'Scene id or exact name holding the placeables.'). The description adds no additional parameter semantics beyond reinforcing 'on a scene', so a 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 and resource: 'List every Tile on a scene' followed by an exhaustive enumeration of returned fields. It clearly differentiates from sibling list tools (list-tokens, list-walls) by targeting tiles and naming update-tiles/delete-tiles as its follow-up operations.
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 positions the tool as 'the inspect step before update-tiles / delete-tiles', telling the agent when to use it (before edits) and that it's read-only. It does not explicitly contrast with other list tools, but the naming of the exact sibling pair provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-tokensA
List every PLACED TOKEN on a scene (by id or exact name — any scene, not just the active one) — id, name, position (x/y), size, rotation, elevation, hidden, disposition, actorId, art src + scale, lockRotation. Read-only; the inspect step that feeds update-token / delete-tokens. The token ids also work as the actorIdentifier of the actor tools (get-actor, update-actor, update-actor-item, remove-from-actor, add-item/add-feature, import-item, manage-activity/-effect, apply-condition) — targeting a token id edits THAT instance's own delta, the way to re-gear/wound ONE placed copy of an unlinked NPC (base-actor edits never reach tokens already on a scene).
| Name | Required | Description | Default |
|---|---|---|---|
| sceneIdentifier | Yes | Scene id or exact name holding the placeables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Declares read-only behavior, specifies it works on any scene (not just active), lists all returned fields, and explains token-actor relationship. Does not mention pagination or rate limits, but for a list tool 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?
First sentence clearly states purpose. Second sentence is dense but packs multiple pieces of useful information concisely. Slightly could be more structured, but no 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?
Given no output schema, description adequately explains all returned fields. It also explains integration with other tools. Missing mention of pagination or limits, but sufficient for typical 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% with one parameter described. Description adds context that sceneIdentifier can be id or exact name and applies to any scene. This adds meaning beyond the schema 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?
Description clearly states the tool lists every placed token on a scene (by id or exact name) and enumerates returned fields. It distinguishes from siblings like place-tokens, update-token, delete-tokens by specifying it is the read-only inspect step.
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 states it is the read-only inspect step that feeds update-token/delete-tokens, and explains token ids work as actorIdentifier for actor tools. Provides clear context for when to use but does not explicitly list when not to use or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-usersA
List every user account in the world: id, name, role (player/trusted/assistant/gamemaster), whether they are currently connected, player color, pronouns, avatar, their assigned character, and their LANDING SCENE if one is set (where they come up at login — shown only when assigned, since an unassigned user just follows the active scene). The read to run before update-user and set-landing-scene.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that it lists all users in the world (no filtering), and explains the special behavior of the 'landing scene' field (only shown when set; otherwise users follow the active scene). This provides important behavioral context beyond the simple list operation.
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, long sentence that front-loads the core purpose and enumerates fields. It is somewhat verbose but each detail serves a purpose (clarifying output and usage). It earns its length by providing significant 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?
Given that there are no parameters and no output schema, the description fully covers what the tool does, what it returns, and when to use it. It mentions the field list and the landing scene exception, leaving no critical gaps for the 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?
The tool has zero parameters, so there is no schema to compensate for, and the description already explains what data is returned. The description adds meaning to the output by enumerating all fields and clarifying the landing scene nuance, which is valuable given the lack of an output 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 ('list') and resource ('user accounts'), enumerates the returned fields in detail, and distinguishes it from related tools like update-user and set-landing-scene. It goes beyond a generic 'list users' by specifying the exact data returned, making it easy for an agent to know what to expect.
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 this tool is 'the read to run before update-user and set-landing-scene', giving clear guidance on when to use it. It does not mention when not to use it or list alternatives, but this context is strong enough to guide an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-wallsA
List walls on a scene — id, segment c:[x0,y0,x1,y1], move/sight/light/sound channels, one-way dir, door kind + state + sound. A populated scene carries HUNDREDS of walls: pass doorsOnly:true to get just the doors (the usual edit loop). Read-only; the inspect step before update-walls / delete-walls.
| Name | Required | Description | Default |
|---|---|---|---|
| doorsOnly | No | Return only DOOR walls (door > 0) — a populated scene carries hundreds of plain walls, and the usual edit loop is doors. Default false (all walls). | |
| sceneIdentifier | Yes | Scene id or exact name holding the placeables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description fully discloses that the tool is read-only and serves as an inspection step before modification. It also warns about the large number of walls in populated scenes and recommends the doorsOnly filter. No behavioral traits are omitted.
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 sentences, each serving a distinct purpose: what the tool returns, guidance on filtering, and behavioral context. It is front-loaded with the most critical information (purpose and field list) and contains no redundant phrases.
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 tool's low complexity (2 parameters, no output schema, no annotations), the description provides sufficient context: return fields, filtering advice, read-only nature, and relation to sibling tools. An AI agent can confidently decide when and how to use 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 input schema already provides full descriptions for both parameters (100% coverage). The description reinforces the doorsOnly parameter by contextualizing its use ('the usual edit loop'), but does not add new semantic information beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List walls on a scene' and enumerates the fields returned (id, segment, channels, etc.). It distinguishes this from sibling tools like create-walls, update-walls, and delete-walls by positioning it as the 'inspect step before update-walls / delete-walls.' This provides a specific verb+resource combination with clear 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 explicitly guides usage: 'A populated scene carries HUNDREDS of walls: pass doorsOnly:true to get just the doors (the usual edit loop).' It also labels the tool as 'Read-only; the inspect step before update-walls / delete-walls,' clarifying when to use this tool versus its mutating siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage-activityA
[D&D 5e only] Add / edit / remove / list Activities on an item — the rollable things (attack, damage, save, heal, check, utility, cast). Target an item on an actor (set actorIdentifier) or a world item (omit it). This authors actions like a Multiattack (action="add", type="utility", name="Multiattack"), a heal, an ability-check, a saving-throw activity, OR a spell-casting item (action="add", type="cast", spellUuid=…, charges=…, saveDC/attackBonus=… to pin a fixed challenge) — the cast LINKS a real compendium spell so its measured template + save/attack fire for free. appliesEffects puts real ActiveEffects on the targets (dnd5e 6.0) — e.g. [{ref:"Poisoned", onSave:false}] on a save activity; they inherit the activity duration/expiry. Use action="list" (or get-actor-entity) to find activityIds, then edit/remove by id. EDIT changes only name, duration, template, affects, behaviors and appliesEffects — every other field goes through patch (dot-paths relative to the activity, e.g. {"attack.bonus":"3"}) or a remove + add. Authoring only — it does not run combat.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Activity name (e.g. "Multiattack"). Used by add and edit (rename). | |
| type | No | Activity type. Required for add. "utility" = descriptive action (e.g. Multiattack). "cast" = link & cast a real compendium spell (e.g. a wand/staff) — see spellUuid. dnd5e 6.0: "teleport" moves the target up to teleportDistance (Misty Step); "transform" changes the actor into another creature or one of its own forms (Wild Shape, Polymorph, a lycanthrope's Shape-Shift) — see transformMode / profiles / forms. | |
| forms | No | Transform activity (form mode): the names of effects ON THIS ITEM, one per form — author them first with manage-effect (actorIdentifier + itemIdentifier), e.g. ["Humanoid Form", "Hybrid Form", "Tiger Form"]. Each form's changes ARE the transformation. | |
| patch | No | Edit: dot-paths RELATIVE to the activity root, e.g. {"attack.bonus":"3"}, {"save.dc.formula":"16"}, {"damage.onSave":"half"}. | |
| action | Yes | add a new activity, edit/remove an existing one (by activityId), or list activities. | |
| onSave | No | Save activity: damage on a successful save. | |
| saveDC | No | Save activity: the DC. Cast activity: pins a FIXED save DC for the linked spell (else the cast defers the DC to the casting actor). | |
| skills | No | Check activity: associated skill keys (e.g. ["acr","ath"]). | |
| ability | No | Attack ability override (attack activity). | |
| affects | No | Target affects (with or without a template). | |
| charges | No | Cast activity: uses per cast. On an item with its own uses pool (a wand) this many charges are consumed FROM that pool per cast; on an item WITHOUT one (e.g. a feature) a pool of this size is created ON the activity (recovering per recoveryPeriod), one use per cast. Omit for an at-will cast. | |
| checkDC | No | Check activity: the DC. | |
| duration | No | Duration OVERRIDE for the activity (sets duration.override so it beats the item's). dnd5e 6.0: the effects this activity applies (see `appliesEffects`) INHERIT this duration, including `expiry` — they carry no duration of their own. E.g. {value: 1, units: "minute"} for a 1-minute effect, or {expiry: "targetEnd"} for "until the end of the target's next turn". | |
| formless | No | Transform activity (form mode): may the actor revert to "no form" from the prompt. | |
| profiles | No | Transform activity (cr / direct modes): the profiles offered. Wild Shape 2024 = cr profiles [{cr: 0.25, creatureTypes: ["beast"], restrictMovement: ["fly", "swim"], level: {max: 3}}, {cr: 0.5, creatureTypes: ["beast"], restrictMovement: ["fly"], level: {min: 4, max: 7}}, …]. | |
| template | No | Area template the activity places (sets target.override). Required for any `behaviors` — e.g. Web = {type: "cube", size: 20}, Spike Growth = {type: "sphere", size: 20}. | |
| behaviors | No | dnd5e 6.0 area behaviors carried by the template (needs `template`). On edit this REPLACES the list. E.g. an authored Web: type "save", template {type:"cube", size:20}, behaviors [{type:"applyActiveEffect", effects:["Restrained"]}, {type:"difficultTerrain", terrainTypes:["web"]}]. | |
| castLevel | No | Cast activity: level to cast at (0 = cantrip). Defaults to the spell's base level. | |
| spellUuid | No | Cast activity (REQUIRED): the Compendium uuid of the spell to LINK, e.g. "Compendium.dnd-players-handbook.spells.Item.phbsplFireball00". The activity CASTS this spell — its measured template (fireball sphere, lightning line…), save/attack, and effects come for free. The spell must be a real premium-book spell (off-book/SRD is refused — if it is not in the books, STOP and ASK; do not hand-roll a fake save/damage activity). | |
| activityId | No | Activity id — required for edit/remove. Get it from action "list" or get-actor-entity. | |
| attackType | No | Attack activity: melee or ranged. | |
| healAmount | No | Heal activity: healing dice (type "healing" or "temphp"). | |
| attackBonus | No | Attack activity: flat to-hit bonus. Cast activity: pins a FIXED spell-attack bonus (else the cast defers the attack to the casting actor). | |
| damageParts | No | Damage dice — for attack (extra parts), damage, and save activities. | |
| includeBase | No | Attack: also roll the item base damage (default true). | |
| saveAbility | No | Save activity: the saving-throw ability. | |
| checkAbility | No | Check activity: the ability rolled. | |
| transformMode | No | Transform activity: "cr" (default) = pick any creature up to a CR (Wild Shape, Polymorph — profiles carry the max CR + size / type / movement filters); "direct" = a fixed list of creatures (profiles carry an `actor`); "form" = Select Form — the forms are EFFECTS on the item (a lycanthrope's Humanoid / Hybrid / Beast forms, Disguise Self) named in `forms`. | |
| activationType | No | Action economy. Default "action". | |
| appliesEffects | No | dnd5e 6.0: the ActiveEffects this activity APPLIES to its targets (activity.effects[]). The effects inherit the activity `duration` (including its `expiry`) — do not give them one of their own. E.g. a save activity that poisons on a failed save: appliesEffects [{ref: "Poisoned", onSave: false}] + duration {value: 1, units: "minute"}. On edit this REPLACES the list. Not for a transform activity — its effects[] ARE its `forms`. | |
| itemIdentifier | Yes | Item to operate on (id or name). On an actor when actorIdentifier is set, else a world item. | |
| recoveryPeriod | No | Cast activity with charges on a poolless item: when the activity-side pool recovers. Default "lr" (long rest). | |
| actorIdentifier | No | If set, the item is embedded on this actor; omit to target a world (sidebar) item. Also accepts a placed TOKEN id (from list-tokens) — the activity edit then lands on that token INSTANCE's own delta, not the base actor. | |
| transformPreset | No | Transform activity (cr / direct): the transformation settings preset — wildshape (keep mental stats, merge features), polymorph (full replacement), polymorphSelf (appearance only). | |
| teleportDistance | No | Teleport activity: how far the target may be moved, in feet (a number or a deterministic formula like "@prof * 10"). Omit for ANY distance. Targets default to self — pass `affects` ({type: "willing", count: 1}) for "you and one willing creature". | |
| transformSettings | No | Transform activity (cr / direct): CUSTOM transformation settings instead of the bare preset (sets customize). Start from a preset and override — e.g. Wild Shape that also keeps resistances: transformPreset "wildshape" + {keep: ["bio","class","feats","hp","languages","mental","tempHP","type","resistances"]}. Not available in form mode. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses critical side effects: edit only touches certain fields, others go through `patch` or remove+add; appliesEffects attaches real ActiveEffects; cast links to a compendium spell and refuses off-book spells; it is authoring-only and 'does not run combat'. The only gaps are ambiguous behaviors like what happens when an invalid activityId is passed or whether remove is destructive — but the edit/remove distinction and the 'does not run combat' disclaimer are strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long and information-dense, but this is justified by the tool's complexity. It front-loads the core purpose and targeting rule in the first two sentences, then flows through actions and major activity types. However, the middle section bundles many concepts (Multiattack, heal, check, cast, appliesEffects) into a single run-on paragraph, and the ending gets a bit repetitive with the 'authoring only' disclaimer. Still, it avoids fluff and each clause earns its keep.
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 36-parameter tool with no output schema, the description covers the key integration points extremely well: it explains how to get activityIds, how edit differs from patch, how cast links spells, and how to compose template+behaviors+effects for area effects. It also nods to the sibling tools (get-actor-entity, manage-effect, list-tokens). It does not narrate the return format, but given the schema is so self-documenting 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%, and most parameters have rich inline descriptions that add RPG-specific semantics beyond the bare type. The description itself adds crucial coordination: it explains how `spellUuid`, `charges`, and `saveDC` interact for cast activities, how `appliesEffects` inherits `duration`, and how `transformPreset` and `transformSettings` combine. This goes beyond the schema's per-field text and compensates for the sheer volume of parameters (36).
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 dense but specific verb set — add / edit / remove / list Activities on an item — and immediately names the concrete outcomes (attack, damage, save, heal, check, utility, cast). It distinguishes itself clearly from generic item/actor tools in the sibling list by centering on the D&D 5e activity authoring concept, and it disambiguates the targeting model (actor item vs. world item) right upfront.
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 tells when to use each action ('Use action="list" (or get-actor-entity) to find activityIds, then edit/remove by id'), names the sibling tool for listing, and gives detailed branching guidance for each activity type (cast links a real spell, transform uses profiles, etc.). It even instructs the agent to STOP and ASK when a spell is off-book — a clear when-to-use and when-not-to-use directive that preempts misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage-calendarA
[D&D 5e] The in-world date and time (dnd5e 6.0 calendar on Foundry v14 game.time). action "read" (default) reports the calendar in use, whether it is enabled, and the current date / time (year as displayed, month name + number, day, weekday, hour, minute, plus the system's own formatted / approximate strings). "advance" moves time by rounds / minutes / hours / days / seconds (negative rewinds) — this is what triggers dawn / dusk / day recovery and bastion turns when the calendar is enabled. "set" jumps to a date (year / month by number or name / day) and/or a time of day (hour / minute); omitted parts keep their value. Writes report before → after. Enable the calendar / pick one with configure-dnd5e-settings. GM-only writes.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | set: the day of the month (1-based). | |
| days | No | advance: days; negative rewinds. | |
| hour | No | set: the hour (0–23). | |
| year | No | set: the year as displayed (e.g. 1492 DR). | |
| hours | No | advance: hours; negative rewinds. | |
| month | No | set: the month — its number (1-based) or its name in the active calendar ("Mirtul"). | |
| action | No | read the calendar (default); advance the world time; set the date / time of day. | read |
| minute | No | set: the minute (0–59). | |
| rounds | No | advance: combat rounds (6 s each); negative rewinds. | |
| minutes | No | advance: minutes; negative rewinds. | |
| seconds | No | advance: seconds; negative rewinds. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It details side effects (dawn/dusk recovery, bastion turns), the 'Writes report before → after' convention, GM-only writes, and the effect of negative values for rewinding. This is comprehensive for a calendar manipulation 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?
The description is dense yet well-organized, front-loading the resource and then systematically explaining each action with its parameters and effects. Every sentence contributes essential information, avoiding redundancy or 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 tool with 11 optional parameters and no output schema, the description covers all necessary aspects: what each action does, the return content for 'read' (including formatted strings), side effects, permissions, and linkage to a related tool. An agent has everything needed to invoke it correctly without additional inference.
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 meaningful context beyond the schema: it groups parameters by action (rounds/minutes/hours/days/seconds for advance; year/month/day/hour/minute for set) and explains that omitted parts in 'set' retain their values. This clarifies interaction semantics the schema does not convey, justifying 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 identifies the tool as managing the in-world date and time for D&D 5e, with three distinct actions (read, advance, set) and a precise resource (dnd5e 6.0 calendar). It distinguishes itself from siblings by naming the only related configuration tool (configure-dnd5e-settings) and specifying what each action does, 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 explicitly explains when to use each action: 'read' for reporting, 'advance' for moving time and triggering events, 'set' for jumping to a date/time. It also directs users to configure-dnd5e-settings for enabling the calendar, and notes that writes are GM-only, providing clear context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage-effectA
[D&D 5e] Create / edit / delete / list ActiveEffects on an actor or an item. Effects carry changes ({key, value, type}) that modify the target — e.g. +1 AC ({key:"system.attributes.ac.bonus", value:"1", type:"add"}) or resist fire — or, with a dnd5e 6.0 RULES type, modify a ROLL: type "dnd5e.advantage" | "dnd5e.bonus" | "dnd5e.minimum" | "dnd5e.maximum" on key "attack" | "check" | "d20" | "save" (damage / healing: bonus only), e.g. +1d4 on History checks = {key:"check", value:"1d4", type:"dnd5e.bonus", conditions:{k:"roll.skill", v:"his"}}, disadvantage on STR d20 tests = {key:"d20", value:"-1", type:"dnd5e.advantage", conditions:{k:"roll.ability", v:"str"}}. 6.0 conditions (a Filter) gate the whole effect ("while Bloodied") or one change; duration.expiry takes the combat / rest / source-target turn events. Target the actor (actorIdentifier), an embedded item (actorIdentifier + itemIdentifier), or a world item (itemIdentifier alone). Use action="list" to find effectIds (it reads conditions + rules back). Item effects transfer to the owning actor by default. Authoring only — it sets effect data, it does not run combat.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Effect name. Required (create); optional rename (edit). | |
| patch | No | Edit: extra dot-paths relative to the effect, e.g. {"duration.value": 10, "duration.units": "rounds"} or {"tint": "#ff0000"}. Changes live at "system.changes". | |
| action | Yes | create a new effect, edit/delete one by effectId, or list effects. | |
| changes | No | The effect changes. On edit this REPLACES the whole changes list. | |
| magical | No | dnd5e 6.0: mark the effect as magical (e.g. a magic-item or spell effect). | |
| disabled | No | Whether the effect is disabled (inactive). | |
| duration | No | Effect duration ({value, units, expiry?}); omit for a permanent/passive effect. | |
| effectId | No | Effect id — required for edit/delete. Get it from action "list". | |
| statuses | No | Status/condition ids this effect confers (e.g. ["prone"]). | |
| transfer | No | Item effects: whether the effect transfers to the owning actor. Default true for items. | |
| conditions | No | Effect-level Filter — the WHOLE effect is suppressed while it is false, e.g. {k:"statuses.bloodied", v:1} ("while Bloodied") or, on an enchantment, {o:"OR", v:[{k:"item.type.value", o:"in", v:["simpleR","martialR"]}, {k:"item.properties", o:"has", v:"thr"}]}. roll.* keys are NOT available here (use a change condition). On edit, pass null / {} to clear. | |
| description | No | Effect description (HTML). | |
| itemIdentifier | No | Item to target: embedded on the actor (with actorIdentifier) or a world item (alone). Omit to target the actor itself. | |
| actorIdentifier | No | Actor that owns the effects (or owns the item when itemIdentifier is also set). Also accepts a placed TOKEN id (from list-tokens) — the effect then lands on that token INSTANCE's own delta, not the base actor. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden entirely. It discloses key mutation semantics: it sets effect data but doesn't run combat, changes list is entirely replaced on edit, item effects transfer by default, and token support lands on token instance delta rather than base actor. It also explains the duration expiration behavior and the boundaries of conditions (roll.* keys only on change-level). The only minor omissions are permission requirements and rollback semantics.
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 long but justified given the tool's complexity; it front-loads the core purpose and main change examples before diving into parameter-specific details. Every section (targets, list for effectIds, transfer default, authoring-only) earns its place, and density is high 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 14-parameter tool with nested objects and no output schema, this description is exceptionally complete. It covers action handling, targeting (actor, item, token), duration behavior, condition evaluation timing, and effect types. It even preempts common pitfalls like deprecated aliases and replacement semantics. The absence of explicit caveats about permission requirements is minor given the depth elsewhere.
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?
Despite 100% schema coverage, the description adds extensive semantic value: it explains the difference between core types and dnd5e rules types, clarifies value formats for advantage (e.g., +1/-1), disambiguates expiry semantics (no value vs value+units), and provides concrete filter examples. It also warns about deprecated aliases and substitutes static data for @attributes in replacement. This goes far beyond what the schema says.
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 set (create/edit/delete/list) and clear targets (actor or item), and distinguishes supported effect types (core data-path changes vs dnd5e 6.0 roll rules). It goes beyond a generic statement by naming concrete examples and clarifying that it is authoring-only, not for running combat, which further separates it from siblings like manage-activity.
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 when to use list to get effectIds, how to target different entities (actor, embedded item, world item), and clarifies that item effects transfer by default. It does not explicitly name alternatives or when not to use this tool, but its scope is substantial and self-contained; the clear targeting and list guidance provide strong usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage-group-membersA
Add and/or remove members on an existing dnd5e group actor. Uses the system addMember/removeMember API; every requested actor gets a reported outcome (added / removed / skipped with reason) and the final roster is echoed back.
| Name | Required | Description | Default |
|---|---|---|---|
| add | No | World actors to enroll (name or id). Already-members are skipped and reported. | |
| remove | No | Members to remove (name or id — a raw member id also works when the underlying actor was deleted). Non-members are skipped and reported. | |
| groupIdentifier | Yes | The group actor to edit (name or id; partial name match supported). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It meaningfully explains side effects through 'Uses the system addMember/removeMember API', reports per-actor outcomes, and mentions the final roster is echoed back. This gives the agent useful expectations about results and partial failures, though it does not cover permissions or rollback 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 sentences, front-loaded with the core action, followed by implementation and result details. No filler or redundant restatement of the tool name.
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 complete for a moderately complex tool. The schema covers parameters, and the description explains the API used, per-request outcome reporting, and the echoed final roster. Since there is no output schema, mentioning the roster echo compensates for the missing return structure.
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 thoroughly, including defaults, skip behavior, and partial name matching. The description adds context about reported outcomes but does not need to restate parameter details, making baseline 3 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 a specific verb phrase 'Add and/or remove members' and identifies the resource as 'an existing dnd5e group actor.' It clearly separates this tool from siblings like create-group or add-item by focusing on member management on an existing group.
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 'existing dnd5e group actor' indicates this tool is for editing groups that already exist, not for creating them. It does not explicitly name alternatives or state when not to use it, but the context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move-assetA
Plane B (file channel, write). Move/rename a file under the Foundry Data/ root over WebDAV; missing destination parent folders are created automatically. REFERENCE-AWARE: by default REFUSES with a report if anything references the source (moving would break those pointers). Pass relink:true to move AND rewrite all references (old→new), or force:true to move without relinking. Refuses live world-DB paths. Requires MOLTEN_WEBDAV_PASSWORD.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Move even if references exist (without relinking) or the bridge is down. | |
| relink | No | After moving, rewrite all references from the old path to the new one. | |
| toPath | Yes | New Data-relative path. | |
| fromPath | Yes | Current Data-relative path. | |
| overwrite | No | Allow overwriting an existing file at the destination. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description thoroughly discloses behaviors: auto-creates missing folders, default refusal with report, relink/force options, refusal of world-DB paths, and required password.
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?
Single focused paragraph with all key information front-loaded (purpose, constraints, authentication). No unnecessary 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?
Covers all relevant aspects for a complex move tool: behavior with references, folder creation, overwrite, authentication, and constraints on paths.
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%, baseline 3. Description adds context to boolean flags (force, relink) and explains path behavior (auto-create folders). Does not repeat schema descriptions, adding 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?
Clearly states the tool moves/renames a file under the Foundry Data/ root over WebDAV, with specific reference-aware behavior. Distinguishes from simple move by detailing relink/force options.
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 on when to use relink:true vs force:true, and notes that it refuses live world-DB paths. However, does not explicitly contrast with sibling tools like copy-asset or relink-asset.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move-documentsA
Move one or more world documents of a single type into a target folder (resolved by id or name; created at root if absent). Pass an empty targetFolder to move them to the root. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| identifiers | Yes | Exact ids (preferred) or exact names of documents to move. | |
| documentType | Yes | Type of the documents being moved. | |
| targetFolder | No | Target folder id or name (created at root if missing). Empty = root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses GM-only access, folder creation if absent, and root movement. However, it omits details like error handling, what happens to duplicates, or confirmation of success.
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, conditions, and parameter behavior are front-loaded and efficiently conveyed.
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 tool with no output schema, the description adequately covers core functionality. It could mention what happens on failure or the return value, but it is sufficient for selection and basic invocation given the sibling context.
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 description adds value by explaining that identifiers are 'exact ids (preferred) or exact names', and that targetFolder empty equals root and missing creates a folder. This goes beyond schema 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 the verb 'move' for 'world documents of a single type' into a folder, with specific details on folder resolution and creation. It distinguishes from sibling tools like 'move-asset' which handles asset files.
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 indicates when to use (moving documents to a folder, including root) and includes a restriction (GM-only). It does not explicitly mention when not to use or provide alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place-tokensA
Place one or more actors' tokens on a scene (batch encounter prep — e.g. drop the whole hobgoblin band on the bridge). Each entry names an actor (id or EXACT name) + an absolute canvas-pixel x/y; the token is built from the actor's PROTOTYPE (so the house token defaults — auto-rotate, ring, disposition — carry over), with optional per-copy hidden/elevation/rotation/name/disposition overrides. Repeat an actor for several copies. The GM can always drag tokens in the app instead — this is for scripted/batch placement. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| tokens | Yes | The tokens to place (one per entry — repeat an actor to place several copies). | |
| sceneIdentifier | Yes | Scene id or exact name holding the placeables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully explains how tokens are built from prototypes with overrides, and that actors can be repeated. It could mention immediate placement or scene activation, but overall transparent enough.
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 well-structured sentences front-loading the purpose, followed by details. No fluff, every sentence adds value.
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?
Lacks output schema, but the tool is a command with no return value expected. The description covers input behavior well. Could mention result or side effects, but 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?
The description adds significant meaning beyond the schema: it explains that tokens inherit prototype defaults, that 'actor' accepts ID or exact name, and coordinates are in absolute canvas pixels. This enriches the schema's 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 the tool places actors' tokens on a scene, using batch encounter prep as an example. It distinguishes from sibling tools like create-tokens or update-token by focusing on placing from prototypes in bulk.
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 states that this is for scripted/batch placement, contrasting with manual dragging in the app. Also specifies GM-only access, giving clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post-item-cardA
Post a rich dnd5e card for an actor's item/feature/spell with WORKING buttons (Attack/Damage/Apply-Effects), or roll an attack/damage to chat. Drives the dnd5e Activity system — the only way to get interactive buttons without a module. Items with no activity return a clear reason (use send-chat-message for a plain card). GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| item | Yes | Item / feature / spell id or exact name on that actor. | |
| actor | Yes | Actor id / exact name / name-substring (or scene token id) that owns the item. | |
| action | No | use = post the usage card with its buttons (primary path); attack = roll the attack to chat; damage = roll damage to chat. attack/damage auto-targeting is degraded headless (no targets). | use |
| consume | No | Spend the item/spell resources (uses/slots). Default false = just post the card. | |
| activity | No | Optional activity id/name when the item has several (default: the first activity). | |
| critical | No | For action=damage: roll a critical (best-effort). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Details the Activity system, behavior for items without activities, auto-targeting degradation headless, and GM-only restriction. Lacks explicit mention of side effects or permissions beyond GM-only, but adds significant context beyond 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?
Single paragraph, front-loaded with main purpose, no wasted words. Every sentence adds essential 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 main use cases, error condition (no activity), and headless behavior. No output schema exists, but description hints at return (clear reason or card). Minor gaps in error handling details, but sufficient for effective 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?
Each parameter's description adds value beyond the schema: explains action enum values (use/attack/damage), consume resource spending, activity selection, and critical option for damage. Schema coverage is 100%, but description enriches 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 it posts a rich dnd5e card with interactive buttons or rolls attack/damage, specifying the resource (actor's item/feature/spell) and distinguishing from plain cards via send-chat-message.
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 tells when to use this tool (for interactive buttons without a module) and when to use an alternative (send-chat-message for plain cards). Also notes GM-only restriction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pull-users-to-sceneA
Pull specific users' VIEW to a scene WITHOUT changing which scene is active — the party-split path (one player off in a side scene while everyone else stays put). This is what a cross-scene teleporter does as a side effect of moving a token; here it is the whole operation, so no token has to move. Viewing needs NO scene ownership — Scene#view() has no permission gate, which is why players already move between scenes they do not own. ⚠️ Only CONNECTED users can be pulled: core silently skips offline ones, so this reports pulled vs offline vs notFound per user instead of a blanket success. ⚠️ It also cannot pull the BRIDGE user itself — pullUsers rides a socket emit, which is never echoed back to the sending client (reported as selfSkipped). Look up names with list-users. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| sceneIdentifier | Yes | Scene id or exact name to pull the users to. STRICT — no fuzzy matching. | |
| userIdentifiers | Yes | Users to pull — user ids or exact user names (e.g. ["Tom"]). Look them up with list-users. Only CONNECTED users can be pulled; offline ones are reported back, not silently dropped. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the transparency burden. It discloses the permission model (Scene#view has no ownership gate), the connected-user requirement with per-user reporting instead of blanket success, the bridge-user self-skip due to socket emit behavior, and the GM-only restriction. This is exceptionally informative.
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, and each sentence adds useful context or a warning. It is somewhat dense, with implementation details like socket emits and Scene#view internals, but these earn their place by explaining real behavioral constraints. Slightly more compact than this would be ideal.
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 nuanced behavior—active-scene preservation, connected-user limits, bridge-user skipping, GM-only access, and no ownership gate—and the description covers all of it. Even without an output schema, it conveys the per-user result categories (pulled vs offline vs notFound vs selfSkipped), so an agent has what it needs to call and interpret 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 both parameters, including strict matching and connected-user reporting. The description adds only minor usage pointers like 'Look up names with list-users,' which is helpful but not substantial additional parameter meaning. 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 precise verb and resource: pulling specific users' VIEW to a scene while explicitly NOT changing the active scene. It distinguishes this from a cross-scene teleporter side effect and from scene-activation operations, making the tool's unique role 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?
It gives strong contextual guidance: this is the party-split path, requires no token movement, needs no scene ownership, is GM-only, and only works on connected users. It does not explicitly name an alternative tool for changing the active scene, but the 'WITHOUT changing which scene is active' phrasing supplies the necessary boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read-packA
Read a Tom-Cartos-style Foundry SCENE-PACK MODULE off disk (a module.json + LevelDB/NeDB compendium packs — Scene/JournalEntry packs AND modern type:"Adventure" packs whose single Adventure doc embeds every scene/journal) and return its era-normalized documents for import. OFF-LINE and Node-only: it reads files, never the live world. Detects the pack's Foundry era from field shape (older v10/NeDB vs newer v13/LevelDB), extracts each Scene (dimensions, grid, background, thumbnail, walls, lights, regions/teleporters) and JournalEntry (pages), strips cli pack artifacts, and — when given the destination root the skill chose — emits per-asset path REWRITE HINTS (the module-relative %-encoded src → a clean Data-relative path). Also discovers any standalone TILE images the pack ships (building/prop pieces with a Tile_<W>x<H> grid footprint in the name, not referenced by any scene) so the skill can make them available for the GM to drop onto scenes. The heavy per-scene walls/lights/regions are written to PAYLOAD FILES and referenced by placeablesPath (NOT inline — the response cap truncates them at scene scale); pass that path to create-scene, which reads it server-side. The skill then uploads the assets, recreates the scenes/journals, and (modern packs) remaps the cross-scene teleporters. Handles all eras: modern v13/LevelDB (via the @foundryvtt/foundryvtt-cli child process) AND legacy v10/NeDB .db (parsed directly — no cli needed). The full manifest is PAGED to fit the response cap: returns totalScenes + a page of scenes + nextOffset (call again with offset until null). Pass index:true first for a tiny names-only survey of the whole pack (variant planning + dedup) before paging the heavy import.
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | Survey mode: return ONLY the lightweight scene list ({sourceId, name, counts}) + descriptor + journal names — no paths, payloads, or assets. Call this ONCE to plan variant selection and dedup across the whole pack before paging the full import (the full manifest is capped/paged). | |
| offset | No | Index of the first Scene to return (for paging a big pack). Default 0. | |
| destRoot | No | Data-relative asset destination root the skill chose (e.g. "worlds/<world>/assets/tom-cartos/<module-id>"). When set, every referenced asset gets a `dataPath` rewrite hint (modules/<id>/<rel> → <destRoot>/<rel>, percent-decoded) so the create tools receive already-correct paths. Omit to get the decoded module-relative paths only. | |
| packName | No | Only read this pack (matched against module.json packs[].name). Default: all packs. | |
| modulePath | Yes | Absolute path to the unzipped module folder OR directly to its module.json. | |
| sceneLimit | No | Page size: how many Scene records to return this call (default 10). The manifest must fit the MCP response cap, so a big pack is read in pages — import a page, then call again with `offset` advanced by the returned count until `nextOffset` is null. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It extensively discloses key behaviors: off-line and Node-only, reads files rather than live world, writes heavy per-scene data to payload files (referenced by placeablesPath), pages results to fit response cap, has an index mode, and handles different Foundry eras. It also mentions stripping cli pack artifacts and discovering standalone tile images. This is a thorough behavioral disclosure for a complex 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?
The description is long but appropriately so for a tool of this complexity. It is front-loaded with the primary purpose in the first sentence, then progressively details behaviors, paging, and usage. Each sentence adds necessary context—off-line nature, era detection, extraction scope, payload files, index mode. It could be slightly more concise, but it is well-organized and not redundant.
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 must explain what the tool returns. It does so clearly: returns totalScenes, a page of scenes, nextOffset for paging, and in index mode a lightweight list. It also explains the payload file mechanism and the rewrite hints. Given the tool's complexity and the absence of structured output metadata, the description covers everything an agent needs to call and process results 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 baseline is 3. The description adds operational meaning beyond the schema: it explains the purpose of index mode for survey and dedup, how offset and sceneLimit interact for paging, and that destRoot triggers rewrite hints. It clarifies the role of modulePath and packName in the import flow. This adds real value, though the schema already describes each parameter, so not a 5.
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 ('Read'), a specific resource ('Tom-Cartos-style Foundry SCENE-PACK MODULE'), and its purpose ('return its era-normalized documents for import'). It clearly distinguishes itself from siblings like create-scene by emphasizing it is off-line and reads files, not the live world. 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 clearly indicates when to use this tool: it is for reading a pack from disk in an import workflow, explicitly noting it is 'OFF-LINE and Node-only' and 'never the live world', which differentiates it from live-world tools. It also provides usage flow (index first, then page, then pass placeablesPath to create-scene). However, it does not explicitly name alternative tools to use instead, only downstream steps, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
relink-assetA
Reference integrity. Rewrite every reference from one asset path to another (e.g. after moving/renaming a file) so nothing breaks. Pass dryRun:true to preview the documents that would change without writing. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | Report what would change without writing. | |
| newPath | Yes | New Data-relative path to point references at. | |
| oldPath | Yes | Current Data-relative path being referenced. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the tool performs a write operation ('rewrite every reference') and offers a dry-run preview. However, it does not explain the scope of changes (e.g., all documents in the world), irreversibility, or what happens if oldPath is invalid.
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 extremely concise: two sentences that cover purpose, usage tip, and authorization. Every sentence adds value with no superfluous 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?
Given no output schema, the description does not explain what the tool returns (e.g., count of changed documents or list of affected files). It adequately covers core functionality and a key parameter tip, but lacks details on expected output and error handling.
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% (all three parameters described). The description adds value by explaining the dryRun parameter's use ('preview without writing'), which goes beyond the schema's default description. For oldPath and newPath, the schema already provides adequate 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 that the tool rewrites every reference from one asset path to another after moving/renaming a file, using specific action-oriented language. It distinguishes from siblings like move-asset (which moves the file itself) and copy-asset (which copies).
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 usage guidance: 'Pass dryRun:true to preview the documents that would change without writing' and 'GM-only' for authorization. It implies use after asset relocation, but does not explicitly mention when not to use it or compare to alternatives like find-asset-references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remap-teleportersA
Second pass of a scene-pack import: rewrite cross-scene teleporter destinations after the scenes + regions have been created. A pack teleporter points at Scene..Region., but the import mints FRESH ids, so every destination is stale until remapped. Pass the import sourceModule; this reconstructs the old→new scene/region id maps from the provenance flags the scenes + regions carry and rewrites every teleportToken destination. Idempotent (safe to re-run), and reports destinations that point outside the import (e.g. a variant you skipped) rather than dropping them silently. Call it ONCE after all chosen scenes are imported. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| sourceModule | Yes | The module id stamped in flags["tom-cartos-import"].sourceModule on the imported scenes (e.g. the read-pack module.id). All scenes carrying it are scanned together. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It details the mechanism: reconstructs old→new id maps from provenance flags and rewrites teleportToken destinations. Discloses idempotency, GM-only restriction, and non-destructive handling of external pointers. Fully transparent.
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?
Concise six-sentence paragraph. Front-loaded with main purpose. Every sentence adds essential context: why needed, mechanism, idempotency, error behavior, and usage instruction. 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?
Given the complexity (import process, teleporter remapping) and lack of output schema, the description covers all necessary aspects: purpose, why fresh IDs cause issues, required parameter, invocation timing, idempotency, and reporting of out-of-import destinations. Complete for intended 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?
Only one parameter (sourceModule) with 100% schema coverage. The description adds significant meaning: explains how it's used ('reconstructs the old→new scene/region id maps from the provenance flags') and provides an example ('the read-pack module.id'). Clearly explains role beyond 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 tool's purpose: 'Second pass of a scene-pack import: rewrite cross-scene teleporter destinations after the scenes + regions have been created.' It identifies the specific verb (remap), resource (teleporter destinations), and context (post-import). This distinguishes it from sibling tools, none of which handle teleporter remapping.
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 usage guidance: 'Call it ONCE after all chosen scenes are imported. GM-only.' It explains when to use (after scenes created, before teleporters functional), idempotency (safe to re-run), and error handling (reports external destinations rather than silent drop). This leaves no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove-from-actorA
Delete items already on an actor, identified by itemIds and/or itemNames (optionally constrained by type). GM-only. Use get-actor to find item ids.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Constrain itemNames to this item type. | |
| itemIds | No | Ids of items on the actor to delete (most reliable; get them from get-actor). | |
| itemNames | No | Names of items on the actor to delete (case-insensitive). Combine with "type" to disambiguate. | |
| actorIdentifier | Yes | Actor name or ID to remove the items from. Also accepts a placed TOKEN id (from list-tokens) — the removal then hits that token INSTANCE's own delta, not the base actor. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the destructive nature ('Delete'), authorization ('GM-only'), and a behavioral nuance about token IDs affecting the instance's delta. Minor gaps include lack of return value or error handling information.
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 cover purpose, identification methods, and an important additional context (token usage). No extraneous words, front-loaded with the main action.
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 adequately covers the tool's function, authorization, and identification methods. It does not explain return values (e.g., success/failure), which would be helpful, but overall it is sufficient for a simple deletion 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?
Although schema coverage is 100%, the description adds significant extra meaning: actorIdentifier can be a token ID affecting only that instance, itemIds are 'most reliable' and suggested from get-actor, itemNames are case-insensitive and can be combined with type. This enriches the schema's basic 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 the action ('Delete items'), the target ('already on an actor'), and the identification methods (itemIds and/or itemNames, optionally constrained by type). It also distinguishes from sibling tools that add items or delete other entities.
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 notes 'GM-only' for authorization and advises using 'get-actor' to find item IDs, providing clear context for when and how to use the tool. However, it does not explicitly compare with alternatives like 'delete-item' or mention 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.
request-rollA
Post a click-to-roll request card (saving throw / ability check / skill) that players click to roll their OWN check — the table-facing "everyone make a DEX save (DC 15)" prompt. Uses the dnd5e inline roll enricher. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| dc | No | Target DC shown on the card. | |
| kind | Yes | save = ability saving throw; check = ability check; skill = skill check. | |
| skill | No | Skill key for kind=skill, e.g. "ste", "prc", "ath". | |
| flavor | No | Optional label, e.g. "Trap! Reflexes". | |
| ability | No | Ability key for save/check, e.g. "dex", "wis", "con". | |
| visibility | No | public = the whole table; gm = GMs only. | public |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses it posts a card using dnd5e inline roll enricher, that players click to roll their own check. Does not detail what happens after clicking, error handling, or the resulting message format. Adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, no extraneous information. Every sentence earns its place. Efficient and clear.
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 6 parameters, no output schema, and no annotations, the description covers the core functionality (posting a request card). Lacks details on return value or error cases, but the tool's simplicity and clear use case compensate. Sufficient for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter is already well-described in the schema (e.g., ability, skill, kind, dc). Description adds context about dnd5e enricher and GM-only but does not provide additional meaning beyond schema for parameters. 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?
Description clearly states it posts a click-to-roll request card for saving throws, ability checks, or skills. Distinguishes from siblings like 'roll-on-table' (table rolling) and 'send-chat-message' (generic message) by specifying it's a table-facing prompt for players to roll their own checks.
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 GM-only, indicating it's for GMs to prompt players. Implicitly for group challenges where each player rolls individually, but does not explicitly state when not to use or mention alternatives like 'send-chat-message' for custom messages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roll-on-tableA
Roll on a world RollTable and return the drawn result(s). Evaluates without marking results drawn or posting to chat. Any @UUID item links in a drawn result are surfaced as importable (uuid + label) so loot can be pulled into the world. (World tables only — copy a compendium/DMG table in first with import-rolltable.)
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes | Table id or exact name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors: no marking results drawn, no posting to chat, surfaces UUID item links as importable. Notes world table limitation. With no annotations, description carries burden well.
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-loading purpose, no extraneous words. Every sentence provides value.
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 tool with no output schema, description covers purpose, behavior, return value hints, and usage prerequisite. Complete for 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 coverage is 100% and the schema description already states 'Table id or exact name', so description adds no new meaning. Baseline score 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?
Description clearly states the verb 'Roll', the resource 'world RollTable', and the outcome 'drawn result(s)'. It distinguishes from siblings like 'list-rolltables' and 'update-rolltable' by specifying rolling 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?
Provides context that rolling evaluates without marking results drawn or posting to chat, and notes world tables only with a prerequisite to copy compendium tables. Lacks explicit alternatives but offers clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenshot-sceneA
Render a scene in the headless bridge and capture a PNG to a local file — visual QA for imports/maps. Views the scene, waits for the WebGL canvas to draw, fits the whole map into the viewport (or keeps the saved camera with fit:false), and optionally draws numbered markers over each map-note pin (mark:true) to check legend-pin placement (a view-only overlay, no document changes). Returns the file path + scene metadata; open/read that file to view the image. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| fit | No | Fit the whole scene into the viewport (default). false keeps the saved camera view. | |
| mark | No | Draw a transient numbered marker over each map-note pin (QA for legend-pin placement). No document changes — the overlay is view-only. | |
| outputPath | No | Absolute local path to write the PNG to. Default: a temp file (path returned). | |
| sceneIdentifier | Yes | Scene id or exact name to screenshot. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes headless operation, WebGL wait, viewport fitting, marker overlay (view-only), and output, but could mention error handling or prerequisites.
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?
Single paragraph, front-loaded with core purpose, every sentence adds value, no 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?
Given no output schema and no annotations, the description adequately covers all parameters, behavior, and output for a screenshot 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?
Description adds context beyond schema (e.g., fit:true/false, mark:true for QA, outputPath default), enhancing understanding despite 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 clearly states the tool renders a scene and captures a PNG for visual QA, distinguishing it from sibling scene tools that perform CRUD or get info.
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 explains usage for visual QA, imports/maps, and notes GM-only restriction, but doesn't explicitly exclude alternatives or state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-actor-contentsA
Search within a character's items, spells, actions, and effects. More token-efficient than get-actor when you need specific items. Supports text search (name/description) and type filtering. Returns matching items with full details including targeting info for spells. Use this to find specific spells, equipment, feats, or abilities without loading the entire character.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by item type: "spell", "weapon", "armor", "equipment", "consumable", "feat", "feature", "action", "effect", or system-specific types. Leave empty to search all types. | |
| limit | No | Maximum number of results to return (default: 20) | |
| query | No | Text to search for in item names and descriptions (case-insensitive). Leave empty to return all items of specified type. | |
| category | No | Additional category filter. For spells: "cantrip", "prepared", "innate", "focus". For items: "equipped", "carried", "invested". | |
| characterIdentifier | Yes | Character name or ID to search within |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must cover behavioral traits. It describes the search features (text search, type filtering), return behavior (full details, targeting info for spells), and non-destructive nature. It lacks details on pagination or error handling, but for a search tool, 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 concisely written in four sentences, each serving a purpose: purpose, efficiency comparison, features, and usage recommendation. No redundancy or filler. It is front-loaded with the main action.
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 5 parameters, no output schema, and no annotations, the description adequately covers the essential aspects: input behavior, output details (full details with targeting info), and use case differentiation. It could mention the output format more thoroughly, but it is complete enough for effective 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% and descriptions are provided. The description adds value by explaining the 'query' parameter searches name/description (case-insensitive), and the 'category' parameter for spells and items. It also clarifies that leaving 'query' empty returns all items of the specified type. This goes 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 clearly states the purpose: 'Search within a character's items, spells, actions, and effects.' It distinguishes itself from the sibling tool 'get-actor' by noting it is more token-efficient and avoids loading the entire character. The verb 'Search' and resource 'character contents' are specific.
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 tells when to use this tool: 'Use this to find specific spells, equipment, feats, or abilities without loading the entire character.' It also implies when not to use by contrasting with 'get-actor'. The phrase 'More token-efficient than get-actor' provides clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-compendiumA
Broad NAME search across the premium book compendium packs (any document type). The SRD (dnd5e.*) packs are NOT searched and never appear in results — the authoring library is the premium books only (design.md §2.3). Matches entity NAMES only (all whitespace-separated terms must appear); descriptions and traits are NOT searchable. Premium-first ranked, exact-name first. For faceted discovery by real system data (CR/type/size, spell level/school, item rarity/type), use the type-specific tools instead: search-compendium-creatures, search-compendium-spells, search-compendium-items. Use this for a quick name lookup, then inspect with get-compendium-entry.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (default: 50 for discovery searches, max: 50) | |
| query | Yes | Search query to find items in compendiums by name only. Use broad, simple terms (e.g., "dragon", "sword", "feat"). Descriptions and traits are NOT searchable. | |
| packType | No | Optional filter by pack type (e.g., "Item", "Actor", "JournalEntry") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavioral traits. It does so comprehensively: it searches names only (not descriptions/traits), matches all whitespace-separated terms, sorts premium-first and exact-name first, and limits results to 50. There are 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?
The description is concise at three sentences, front-loaded with the main purpose, then detailing constraints and alternatives. Every sentence adds necessary information without redundancy. It is well-structured 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?
Given no output schema and moderate complexity, the description explains the search scope, limitations, and suggested follow-up tool (get-compendium-entry). It could be slightly more explicit about the output format (e.g., returns a list of matching pack entries), but it is sufficient for an AI agent to understand usage and next steps.
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 value by explaining the search behavior (e.g., 'Use broad, simple terms') beyond the schema. For example, it clarifies that the query is matched only against names, not descriptions, which the schema's description doesn't explicitly state.
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: 'Broad NAME search across the premium book compendium packs'. It distinguishes from siblings by noting that SRD packs are not searched and that type-specific tools exist for faceted discovery. This is precise 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 explicitly tells when to use this tool ('quick name lookup') and when not to ('for faceted discovery by real system data... use the type-specific tools instead'). It also specifies that SRD packs never appear, setting correct expectations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-compendium-creaturesA
D&D 5e CREATURE DISCOVERY: find creatures matching faceted criteria (Challenge Rating, type, size, spellcasting, legendary actions) across the premium book Actor packs only — the SRD (dnd5e.*) packs are excluded and never appear in results (design.md §2.3). Backed by the system Compendium Browser, so CR/type/size check real system data (not name heuristics); hasSpells/hasLegendaryActions are approximate index flags. Returns minimal hits ({id,name,type,uuid,pack,packLabel,img,facets}) premium-first ranked — identify candidates by name, then pull full stat blocks with get-compendium-entry. High result limits for complete encounter-building surveys.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Filter by creature size | |
| limit | No | Maximum results to return (default: 500 for comprehensive surveys, max: 1000) | |
| hasSpells | No | Filter for spellcasting creatures | |
| creatureType | No | Filter by creature type | |
| challengeRating | No | Filter by Challenge Rating - accepts number, string, or range object. Use ranges for broader discovery (e.g., {"min": 10, "max": 15}) or exact values (12 or "12") | |
| hasLegendaryActions | No | Filter for creatures with legendary actions (D&D 5e) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses that CR/type/size check real system data rather than name heuristics, that hasSpells/hasLegendaryActions are approximate index flags, that results are premium-first ranked, and that the tool returns minimal hits rather than full stat blocks. It also notes high result limits for complete encounter-building surveys. This is substantial behavioral context beyond what the schema provides, though it doesn't cover every edge case like error behavior or exact ranking algorithm.
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 dense but well-organized: it front-loads the core purpose and scope, then covers data source behavior, return format, and routing. Every sentence earns its place, though the parenthetical design.md reference and the slightly long final sentence could be trimmed. It's appropriately sized for a tool with six parameters and no 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 discovery tool with no output schema, the description covers the key things an agent needs: what it searches, what it excludes, how the filters behave, what the return shape is, and how to follow up for full stat blocks. The main gap is that it doesn't describe pagination or what happens when no results are found, but the high result limits and minimal-hit return format are disclosed. Given the tool's complexity and the absence of annotations, this 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 description coverage is 100%, so the schema already documents all six parameters. The description adds context about the faceted criteria (CR, type, size, spellcasting, legendary actions) and clarifies that hasSpells/hasLegendaryActions are approximate flags, which adds meaning beyond the schema. However, it doesn't add syntax details for the parameters beyond what the schema already provides, 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 opens with a specific verb and resource ('find creatures matching faceted criteria') and immediately distinguishes itself from sibling search tools by scoping to premium book Actor packs only, explicitly excluding SRD packs. It also names the companion tool get-compendium-entry for pulling full stat blocks, which clarifies its role as a discovery/identification tool rather than a retrieval tool.
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 (discovery across premium Actor packs) and when not to (SRD packs are excluded and never appear). It also provides routing guidance: use this to identify candidates by name, then use get-compendium-entry for full stat blocks. This is explicit when/when-not guidance with a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-compendium-itemsA
D&D 5e ITEM/GEAR DISCOVERY: find equipment, weapons, armor, consumables, and treasure matching faceted criteria (rarity, subtype, properties, magical, name) across the premium book packs only — the SRD (dnd5e.*) packs are excluded and never appear in results (design.md §2.3). Backed by the system Compendium Browser, so filters check real item data (not name heuristics). Returns minimal hits ({id,name,type,uuid,pack,packLabel,img,facets}) premium-first ranked — identify candidates here, then pull full detail with get-compendium-entry. Use documentType to narrow the item family (gear=all, or weapon/armor/consumable).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Case-insensitive substring to narrow by item name (e.g., "flame", "healing"). | |
| limit | No | Maximum results to return (default: 50, max: 200) | |
| rarity | No | Rarity/-ies: common · uncommon · rare · very rare · legendary · artifact (case- and space-insensitive; one value or an array). | |
| magical | No | If true, keep only items flagged magical (the "mgc" property). | |
| itemType | No | dnd5e item SUBTYPE key (system.type.value), e.g. "wand" · "wondrous" · "rod" · "ring" · "potion" · "scroll" · "ammo"; for weapons the weapon-type key (e.g. "martialM"). One value or an array. | |
| properties | No | Keep items carrying ANY of these dnd5e property keys (e.g. "mgc" = magical, "fin" = finesse, "ver" = versatile). | |
| documentType | No | Item family to search: "gear" = everything (weapons, armor/equipment, consumables, tools, loot, containers); or narrow to "weapon", "armor", or "consumable". | gear |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that it excludes SRD packs, uses real item data, returns minimal hits with a specific field list, ranks premium-first, and is for identification. This is substantial behavioral disclosure, though it doesn't cover error cases or rate limits. Given no annotations, this is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but each sentence adds value: it defines the tool's purpose, scope, behavior, return format, and workflow. It's not as concise as possible but it's appropriately structured with key info front-loaded. It earns a 4.
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 tool's scope, exclusions, return format, ranking, and workflow, and it mentions the underlying system. Given the tool has 7 parameters but they are fully documented in the schema, and there is no output schema, the description provides sufficient context for an agent to use it correctly. It even references a design doc section. It's 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 description coverage is 100%, so the baseline is 3. The description adds some context by summarizing the faceted criteria and mentioning the documentType usage, but it doesn't add meaning beyond the schema's own descriptions. It doesn't clarify relationships between parameters or provide examples. Thus a 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 it finds D&D 5e items matching faceted criteria, specifies the resource (premium book packs only, SRD excluded), and distinguishes itself from related tools like search-compendium-spells and get-compendium-entry by indicating it's for candidate identification. The verb 'discovery' and explicit scope make it 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 context for when to use: when searching for items across premium packs, and it suggests a follow-up with get-compendium-entry for full detail. It also instructs to use documentType to narrow the item family. However, it does not explicitly mention when not to use it or alternatives like search-compendium, so it's clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-compendium-spellsA
D&D 5e SPELL DISCOVERY: find spells matching faceted criteria (level, school, damage type, name) across the premium book packs only — the SRD (dnd5e.*) packs are excluded and never appear in results (design.md §2.3). Backed by the system Compendium Browser, so filters check real spell data (not name heuristics). Returns minimal hits ({id,name,type,uuid,pack,packLabel,img,facets}) premium-first ranked — identify candidates here, then pull full detail with get-compendium-entry. damageType is a two-stage refine (loads candidate spells to inspect their activities).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Case-insensitive substring to narrow by spell name (e.g., "fire", "cure wounds"). | |
| limit | No | Maximum results to return (default: 50, max: 200) | |
| damageType | No | Keep only spells that deal this damage type (e.g., "fire", "cold", "radiant"). Two-stage: candidate spells are loaded to inspect their activities, so this narrows an already facet-filtered set. | |
| spellLevel | No | Filter by spell level — exact number (0 = cantrip … 9) or a {"min","max"} range for surveys. | |
| spellSchool | No | Spell school(s): abjuration · conjuration · divination · enchantment · evocation · illusion · necromancy · transmutation (full name or dnd5e 3-letter key; one value or an array). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description reveals key behaviors: premium-only scope, real data checks (not heuristics), premium-first ranking, and the two-stage damageType process. It stops short of mentioning authentication or rate limits but is thorough.
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 paragraph but logically ordered: purpose, scope, backend, return format, usage tip, special note. It's concise yet informative, with minimal 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?
Given 5 parameters, no annotations, and no output schema, the description covers the essential context: return fields, ranking, scope, and follow-up tool. It could list more example values but is 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 coverage is 100% with descriptions. The free-text adds value by explaining the two-stage refinement for damageType and the scope restriction (premium packs only) not in 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 it's for discovering D&D 5e spells with faceted criteria, limited to premium book packs, and explicitly excludes SRD. This distinguishes it from sibling search tools like search-compendium-creatures and search-compendium-items.
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 usage guidance: use this to find candidates and then get-compendium-entry for full details. It explains the two-stage refine for damageType. While not explicitly excluding alternatives, the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-journalsA
Search through all pages of all journal entries for specific content or keywords. Returns which specific page matched, so you can read it with list-journals using journalId + pageId.
| Name | Required | Description | Default |
|---|---|---|---|
| searchType | No | Where to search (default: both) | both |
| searchQuery | Yes | Text to search for in journal entries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It states the search scope (all pages of all journals) and return value (page matched). It implies a read-only operation, but does not explicitly state safety or performance considerations. However, the behavior is adequately described for a search 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?
The description consists of two clear, front-loaded sentences with no superfluous information. It efficiently conveys the action and output usage.
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 is simple (search journals), and the description covers its main behavior and output. It links to list-journals for reading. No output schema exists, but the description explains the return format. It does not specify details like case sensitivity or result limits, but is reasonably complete for its purpose.
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 (searchQuery, searchType) with descriptions. The description does not add new parameter meanings beyond what is in the schema, so 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 searches journal entries for specific content/keywords and returns the matched page. It distinguishes itself from sibling search tools (e.g., search-actor-contents, search-compendium) by specifically targeting journals and linking to list-journals for reading results.
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 when to use the tool (to search journals) and how to use the result (via list-journals with journalId+pageId). It does not explicitly mention when not to use it or compare to other search tools, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send-chat-messageA
Post a message to the Foundry chat log as the GM bridge user. Content is HTML. Choose a visibility mode (public / gm whisper / blind / self) and optionally speak AS a character (speakerActor). Embed images via the images param (local files upload over WebDAV; Data-relative paths and https URLs link directly — uploaded files are PUBLIC). GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| style | No | Presentation style (defaults to ic when speakerActor is set, else ooc). | |
| enrich | No | Pre-enrich content (resolve @UUID links and inline rolls) before posting. | |
| flavor | No | Optional secondary header line, e.g. "Perception Check". | |
| images | No | Images to embed. Local files are uploaded to the world over WebDAV and linked; Data-relative paths and https URLs are linked directly. PRIVACY: uploaded files are served publicly with no auth. | |
| content | Yes | Message body as HTML (all formatting is just HTML). Inline rolls like [[/r 1d20+5]] and @UUID[Type.id]{label} links are enriched on render. Use the images param to attach images rather than hand-writing <img>. | |
| visibility | No | public = everyone; gm = whisper to all GMs; blind = whisper to GMs (mainly meaningful for rolls — for plain text it behaves like gm but also sets blind); self = only the bridge user. For "public as a character", use public + speakerActor. | public |
| imageFolder | No | Data-relative folder for uploaded local images (default "worlds/<world>/assets/chat"). | |
| speakerActor | No | Actor id / exact name / name-substring (or scene token id) to speak AS — the message renders with that character as speaker (the "public as character" mode). | |
| overwriteImages | No | Overwrite an existing uploaded image of the same name instead of refusing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description discloses key behaviors: messages posted as GM bridge user, HTML content, image uploads are public, visibility modes explained, and speakerActor capability. Good transparency for a messaging 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?
Concise single paragraph, front-loads primary action. Could be more structured but effective.
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 for a message posting tool with 9 parameters. Covers main use cases, privacy warning, and GM restriction. No output schema needed.
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%, baseline 3. Description adds value beyond schema: explains public nature of uploads, 'public as a character' usage, enrich default, etc.
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 tool posts a message to Foundry chat as GM bridge user with HTML content, visibility modes, and optional speaker. Distinguishes from sibling tools like post-item-card or request-roll by focusing on general chat.
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 states GM-only usage and describes when to use visibility modes and speakerActor. Lacks explicit 'when not to use' but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set-actor-artA
Composition. Set an actor's portrait image, and by default its prototype token art too, from a Data-relative path. The portrait (actor.img) must be a STILL image; pass tokenImagePath to give the prototype TOKEN an animated video (.webm/.mp4) while keeping a still portrait (the JB2A-effect pattern). GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| imagePath | Yes | Data-relative path to the PORTRAIT image. Must be a STILL image — actor.img rejects video. Also used for the token texture unless tokenImagePath is given. | |
| applyToToken | No | Also set the prototype token texture (default true). | |
| tokenImagePath | No | Optional Data-relative path for the prototype TOKEN texture, which (unlike the portrait) accepts an animated VIDEO (.webm/.mp4/.m4v/.ogg) — e.g. a JB2A effect. Defaults to imagePath. | |
| actorIdentifier | Yes | Actor id or exact name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that setting token art is default (applyToToken true), the portrait must be still, and token can accept video. It also mentions GM-only permission. No contradictions or hidden side effects are omitted.
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 sentences, each with a clear purpose: core action, nuance about animation, and permission. No redundant words; it is front-loaded with the primary action.
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 tool with 4 parameters (2 required), 100% schema coverage, and no output schema or annotations, the description covers the key behavioral aspects, use case, and permission. It could mention the effect on actor.img and token.texture explicitly, but the schema covers parameter details.
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%, baseline 3. The description adds value by explaining the still vs animated distinction and the pattern (JB2A-effect), which goes beyond the schema descriptions. It ties the parameters together meaningfully.
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 sets an actor's portrait and, by default, the prototype token art. It specifies the verb 'set', the resource 'actor's portrait image' and 'prototype token art', and the constraint of using a Data-relative path. It also distinguishes between still portrait and animated token, providing unique purpose clarity.
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 'GM-only', indicating who can use it. It explains when to use tokenImagePath (for animated token while keeping still portrait), implying when not to use it. However, it does not directly compare to sibling tools like 'update-actor' which might also modify images, but the specialized nature is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set-actor-ownershipA
Set ownership permissions for actors. Use permissionLevel OWNER/OBSERVER/LIMITED to grant access, NONE to explicitly deny it (a stored level-0 entry that OVERRIDES the actor's default ownership), or INHERIT to remove the player's entry so the actor's default applies again. On an actor whose default is permissive (e.g. a shared party stash defaulting to OWNER), NONE revokes access the player would otherwise inherit and INHERIT is what restores it. Supports individual assignments like "Make John the owner of Aragorn" and bulk operations like "Give the party observer access to all friendly NPCs".
| Name | Required | Description | Default |
|---|---|---|---|
| actorIdentifier | Yes | Actor name, ID, or "all friendly NPCs" for bulk operations. Use "party characters" for all player-owned actors. | |
| permissionLevel | Yes | Permission level to assign: LIMITED (basic view), OBSERVER (full view, no control), OWNER (full control), NONE (explicitly DENY — stores a level-0 entry that overrides the actor's default, so it revokes access the player would otherwise inherit), INHERIT (remove the player's entry entirely so the actor's default ownership applies again) | |
| playerIdentifier | Yes | Player name, character name, or "party" for all connected players. Supports partial matching. | |
| confirmBulkOperation | No | Required confirmation for bulk operations affecting multiple actors/players |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It transparently explains the nuanced behavior of NONE (stores a level-0 entry that overrides default) and INHERIT (removes entry), and how these interact with permissive defaults. It does not mention that bulk operations require the confirmBulkOperation flag, nor potential side effects like reversibility, but the core semantics are well 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 detailed but not overly long. It front-loads the purpose and then explains permission levels and examples. Every sentence adds value, though it could be tightened by removing the parenthetical example (e.g., shared party stash) which is illustrative but not essential. Overall it is well-structured and informative.
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 tool's complexity, the description covers the core behavior, permission semantics, and usage examples. It misses the confirmBulkOperation requirement for bulk operations and does not mention error handling or prerequisites, but these are partly covered by the schema. It is nearly complete for an agent to call it correctly, but the missing confirmation detail is a notable 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 schema already documents each parameter. The description adds value by explaining the conceptual meaning of permission levels, giving examples for actor and player identifiers, and illustrating bulk operations. It enriches the parameter meaning beyond the enum descriptions, justifying a score above the baseline of 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 clearly states the tool's purpose: setting ownership permissions for actors. It specifies the verb 'set', the resource 'ownership permissions for actors', and details the permission levels and their effects. It also differentiates from siblings like list-actor-ownership by focusing on assignment rather than listing. Examples of individual and bulk operations reinforce the 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 gives clear usage context with examples like 'Make John the owner of Aragorn' and 'Give the party observer access to all friendly NPCs', and explains when to use NONE vs INHERIT based on the actor's default. However, it does not explicitly mention alternatives or when not to use this tool (e.g., use list-actor-ownership for querying). It implies usage but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set-journal-page-visibilityA
Flip one journal PAGE between player-visible (a handout players can OBSERVE) and GM-only, WITHOUT rewriting its content. Sets the page ownership default. Use this to reveal/hide an existing page — e.g. a page that came up GM-only from an append — instead of rebuilding the whole journal. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | Page id (from list-journals). | |
| journalId | Yes | Journal entry id or exact name. | |
| playerVisible | Yes | true = players can OBSERVE this page (a handout); false = GM-only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that it sets page ownership default and does not modify content, which is key behavioral trait. With no annotations, description carries full burden; it is adequate but does not cover permissions or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise two sentences that front-load the key action. Could be slightly tighter, but no unnecessary 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?
Adequate for a simple toggle tool with no output schema. Explains the core behavior and usage scenario. Lacks details on error cases or return value, but that's acceptable given 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 already describes all parameters (100% coverage), but description adds context: 'flip' implies toggling, and explains playerVisible as 'a handout players can OBSERVE' and GM-only. Enhances understanding beyond raw 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?
Clearly states it flips a journal page between player-visible and GM-only, specifying the verb 'flip' and resource 'journal PAGE'. Distinguishes from updating the whole journal by explicitly noting it does not rewrite content.
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 on when to use: to reveal/hide an existing page instead of rebuilding the whole journal. Includes a concrete example (page from an append). Lacks explicit when-not-to-use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set-landing-sceneA
Assign where a user LOGS IN — a per-user landing scene that persists, so a party split survives a refresh. Core Foundry has no such thing: every user lands on the one ACTIVE scene, and the User document has no scene field to change that (verified on v14.364). This writes a durable User FLAG that the house module fvtt-mod-openserver reads on ready and acts on with Scene#view() — so the module must be installed and enabled for it to do anything, and this tool WARNS when it is not, instead of reporting a working assignment. Unlike pull-users-to-scene, this works on OFFLINE users — that is the whole point. Sticky until cleared: pass sceneIdentifier "none" to put users back on the active scene. Reports who is assigned and who still follows the active scene. Needs NO scene ownership. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| sceneIdentifier | Yes | Scene id or exact name the users should LOG IN to. STRICT — no fuzzy matching. Pass "none" to CLEAR the assignment and put them back on the active scene with everyone else. | |
| userIdentifiers | Yes | Users to assign — user ids or exact user names (e.g. ["Tom"]). Look them up with list-users, which also reports each user's current landingScene. Works on OFFLINE users (that is the point) — nobody has to be connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, and it excels: it reveals persistence across refresh, the durable flag mechanism, the module dependency and warning behavior, offline-user support, sticky-until-cleared semantics, and reporting behavior. It also notes no scene ownership is needed and that it is GM-only. Nothing is hidden.
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 dense but front-loaded, opening with the core purpose before adding context about Foundry limitations, module dependency, and the sibling comparison. Every clause contributes useful information; it is not padded. It could be slightly trimmed without loss, but the structure and signal-to-noise ratio are strong.
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 tool with no annotations and no output schema, this description is remarkably complete: it covers prerequisites, failure behavior, side effects, clearing semantics, offline operation, reporting, and access restrictions. It even identifies the relevant sibling tool and the module dependency. An agent has everything needed 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?
The input schema already covers both parameters at 100%, so the baseline is 3. The description adds meaningful context beyond the schema: it explains the durable flag effect, reinforces the special 'none' clearing behavior, and points to list-users to look up users and see their current landing scenes. This goes above the schema's own parameter 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 opens with a specific verb and resource: 'Assign where a user LOGS IN — a per-user landing scene.' It clearly distinguishes itself from the sibling tool pull-users-to-scene by highlighting offline-user support, and it explains the Foundry limitation it addresses. An agent can confidently tell exactly what this tool does and why it exists.
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 ('Unlike pull-users-to-scene, this works on OFFLINE users — that is the whole point'), its prerequisite (module fvtt-mod-openserver must be installed and enabled), how to clear assignments ('none'), and that it is GM-only. This is direct when/why guidance with a clear alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set-primary-partyA
Read or change the world's dnd5e PRIMARY PARTY (the group shown in the players sidebar; XP awards and party overviews target it). No arguments → report the current primary party. groupIdentifier → point it at that group. clear:true → unset.
| Name | Required | Description | Default |
|---|---|---|---|
| clear | No | Unset the primary party instead. | |
| groupIdentifier | No | Group actor to crown as the primary party (name or id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It explains the impact of the primary party (sidebar display, XP awards, party overviews) and explicitly covers read, set, and clear behaviors. It does not mention persistence, permissions, or the behavior when both clear and groupIdentifier are supplied, but the core mutating/reading nature is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with the core purpose stated first and the mode behavior summarized in short, scannable fragments. Every sentence contributes new, useful information without unnecessary detail 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 low-complexity tool with two optional parameters and no output schema, the description covers the main usage modes and the domain meaning of a primary party. It does not specify what set/clear return or how errors like invalid group identifiers are handled, but these are limited gaps given the tool's 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 input schema already describes both parameters well, so the baseline is 3. The description adds value by explaining the no-argument read mode and mapping each parameter to an action ('point it at that group' vs 'unset instead'), clarifying their roles beyond individual schema descriptions. It leaves the combination case unspecified, which is a minor 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?
The description begins with 'Read or change the world's dnd5e PRIMARY PARTY' and defines the resource precisely: the group shown in the players sidebar, targeted by XP awards and party overviews. It clearly distinguishes this tool from generic group-management siblings by focusing on the primary-party concept and its specific read/set/clear operations.
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 mode-based guidance: no arguments reports the current party, groupIdentifier points it at a group, and clear:true unsets it. It does not name alternative tools or say when not to use it, but no direct sibling exists among the listed tools, so the mode instructions are the primary usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set-user-avatarA
Set a Foundry user's avatar — the portrait shown next to that user's chat messages. Defaults to the bridge user (MCP-Claude), so this is how you give the MCP's own chat posts a portrait instead of the default mystery-man. Pass a Data-relative path or https URL (upload local files with upload-asset first). GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | User id or exact name to update. Default: the bridge user that posts (MCP-Claude). | |
| avatar | Yes | Avatar image: a Data-relative asset path (e.g. "assets/mcp/mcp-claude.jpg"), an https URL, or a Foundry built-in icon path. Upload local files first with upload-asset, then pass the returned path/URL here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses mutation (set avatar), default behavior (bridge user), permission requirement (GM-only), and accepted input types. It lacks details on side effects or success indicators, but is otherwise transparent.
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: three sentences covering purpose, default behavior, input format, and prerequisite. No redundant information, front-loaded with key action, making it efficient and easy to parse.
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 tool with 2 params and no output schema, the description covers purpose, defaults, input types, prerequisite, and permissions. It does not mention what the tool returns on success, but overall it is sufficiently complete 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 covers both parameters with descriptions (100% coverage), so baseline is 3. The description adds value by clarifying the default for 'user', providing example paths for 'avatar', and referencing upload-asset. This extra context enhances understanding beyond 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 'Set a Foundry user's avatar', specifying the exact verb and resource. It distinguishes this tool from siblings like set-actor-art by focusing on user avatars, and mentions the default behavior for the bridge user, 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?
The description explicitly explains when to use (setting user avatar, especially for MCP-Claude), notes the prerequisite of using upload-asset for local files, and states 'GM-only' to indicate access restrictions. This provides clear context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-actorA
[D&D 5e only] Edit an EXISTING actor's own stat-block fields. Supply only the groups you want to change: • identity + prototype token — name, tokenName (prototype nameplate ≠ actor name), img, disposition (friend/foe), tokenAutoRotate (face movement / lockRotation), tokenRing (dynamic ring), tokenScale (art size), tokenRotation (facing), tokenDisplayName / tokenDisplayBars (nameplate / HP-bar visibility) — the PROTOTYPE-token editor. (elevation / hidden / x / y are placement-only: edit those on a dropped token with update-token) • details — size, cr*, creatureType*, creatureSubtype*, swarmSize*, alignment, biography, source • abilities — abilities.{str..cha}, savingThrows (replace), skills (merge; proficiency none/proficient/expert) • weaponMasteries [PC] — {mode: replace|add|remove, values: ["greatsword", ...]} — 2024 Weapon Mastery weapon KINDS (base weapon ids, not mastery names) • vitals — hp, ac, initiative • movement, senses • defenses — damageImmunities / damageResistances / damageVulnerabilities / conditionImmunities / languages (each {mode: replace|add|remove, values, custom?}), telepathy • resources* — legendaryActions, legendaryResistances, lair • spellcasting* — {level, ability}: caster level (the sheet's "Spellcasting Level", which DERIVES the slot pools) + casting ability (which drives save DC / attack bonus) • 2024* — habitat, treasure • currency — coins {mode: set|add, pp, gp, ep, sp, cp} (carried money)
Fields marked * are NPC-only (skipped with a warning on player characters). This authors the stat block; it does NOT edit embedded items (use update-actor-item / add-feature / manage-activity) or run combat. Use list-actors or get-actor to find the actorIdentifier.
| Name | Required | Description | Default |
|---|---|---|---|
| ac | No | Armor class (dnd5e 6.0 model): override = fixed AC; natural = natural armor; calcs / formulas = what the sheet may calculate from. | |
| cr | No | [NPC] Challenge rating (0.125 / 0.25 / 0.5 allowed). | |
| hp | No | Hit points (value / max / temp / tempmax / formula). | |
| img | No | Portrait image path or URL. | |
| lair | No | [NPC] Lair actions — sets the lair initiative count (marks the creature as having a lair). | |
| name | No | Rename the actor. | |
| size | No | Creature size (long name or short code). | |
| senses | No | Senses ranges (feet) plus special-sense free text. | |
| skills | No | Set skill proficiencies — merge: only the listed skills change. | |
| source | No | [NPC] Source metadata (book / page / rules edition) — system.source. | |
| habitat | No | [NPC, 2024] Habitats (replace the whole list), e.g. [{type:"forest"},{type:"planar",subtype:"nine hells"}]. | |
| currency | No | Carried coins (pp/gp/ep/sp/cp). Only the coins you list change. | |
| movement | No | Movement speeds (in the given units, default feet). Stored under movement.speeds.*. | |
| treasure | No | ||
| abilities | No | Ability scores to set — only the abilities you list change. | |
| alignment | No | Alignment free text (e.g. "Lawful Evil"). | |
| biography | No | Biography / description (HTML). | |
| languages | No | ||
| swarmSize | No | [NPC] Swarm member size, or "" if the creature is not a swarm. | |
| telepathy | No | Telepathy range (0 = none). | |
| tokenName | No | Prototype-token nameplate, decoupled from the actor name — e.g. actor "Morgash the Gravemaker" whose dropped tokens read just "Morgash". A plain `name` rename keeps the two in lockstep; pass tokenName (alone or alongside name) to make them differ. Placed tokens keep their own name — retitle those with update-token. | |
| tokenRing | No | Prototype-token dynamic ring: false = plain token (the house default; new creations already get it), true = re-enable the ring (its colors/subject config is preserved). | |
| initiative | No | Initiative bonus and/or ability override. | |
| tokenScale | No | Prototype-token art scale — the "Scale (Ratio)" slider on the token Appearance tab (sets texture.scaleX and scaleY together). 1 = normal, 1.5 = 50% larger, 2 = double. Scales only the art within the token's grid footprint; it does NOT change the token's size (grid spaces). | |
| disposition | No | Prototype-token disposition (friend vs foe). Set 'friendly' to mark an NPC an ally (e.g. a freed captive), 'hostile' for an enemy, 'neutral' for a bystander. | |
| creatureType | No | [NPC] Creature type: aberration, beast, celestial, construct, dragon, elemental, fey, fiend, giant, humanoid, monstrosity, ooze, plant, undead. | |
| savingThrows | No | Replace the proficient saving throws: the listed abilities become proficient, all others non-proficient. | |
| spellcasting | No | [NPC] Spellcasting configuration — caster level and/or casting ability. PCs derive both from their class advancement, so this group is skipped with a warning on a player character. | |
| tokenRotation | No | Prototype-token facing in degrees (0–359) — the default angle a dropped token faces. Same behavior as update-token for placed tokens: a lock-rotation prototype (tokenAutoRotate false) HIDES the angle, so setting a rotation without also setting tokenAutoRotate AUTO-UNLOCKS rotation (and warns) so the facing shows. (elevation / hidden / x / y are PLACEMENT-only — a prototype has no such fields; set those on a dropped token with update-token.) | |
| actorIdentifier | Yes | Name or id of the actor to edit (partial name match supported). Also accepts a placed TOKEN id (from list-tokens): the edit then lands on that token INSTANCE's own actor (its delta), not the base actor — the way to edit ONE placed copy of an unlinked NPC, since base-actor edits never reach tokens already on a scene. | |
| creatureSubtype | No | [NPC] Creature subtype free text (e.g. "Devil"). | |
| tokenAutoRotate | No | Prototype-token auto-rotation: true = the token turns to face its movement (lockRotation off — the house default; new creations already get it), false = fixed facing. | |
| weaponMasteries | No | [PC] 2024 Weapon Mastery selections — the kinds of weapons whose mastery property the character can use (system.traits.weaponProf.mastery). Swappable on a Long Rest per the class feature; the count allowed is the class's business (fighter 3, paladin/ranger 2 at low levels) — the tool does not enforce it. | |
| damageImmunities | No | ||
| legendaryActions | No | [NPC] Legendary action points per round (resources.legact.max). | |
| tokenDisplayBars | No | Prototype-token RESOURCE-BAR (HP) visibility — the default for dropped tokens, same modes as tokenDisplayName. Set "none" to hide the health bar on background / window-dressing NPCs. | |
| tokenDisplayName | No | Prototype-token NAMEPLATE visibility — the default for tokens dragged from this actor: none (never) · control (only when selected) · owner-hover · hover (anyone hovering) · owner (always, to owners) · always (always, to everyone). Same modes as update-token for placed tokens; set "none" for window-dressing NPCs that should show no name. | |
| damageResistances | No | ||
| conditionImmunities | No | ||
| legendaryResistances | No | [NPC] Legendary resistance uses per day (resources.legres.max). | |
| damageVulnerabilities | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It clearly indicates this is a mutation ('Edit'), explains that NPC-only fields are skipped with a warning on player characters, clarifies that it edits the actor's own stat block and not placed tokens, and documents side effects (e.g., tokenRotation auto-unlocks rotation if not combined with tokenAutoRotate, weaponMasteries count not enforced). These details go well beyond a simple 'update' and inform the agent of 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?
The description is long but well-structured with bullet points and clear grouping. It front-loads the purpose and then systematically lists each field group. While it is verbose, the complexity of a 41-parameter tool justifies the length; every sentence adds value, and the structure aids skimming. A small deduction for verbosity that could be trimmed without losing essential 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?
Given the tool's complexity (41 parameters, nested objects, many overlapping concepts), the description is remarkably complete. It covers which fields are prototype-token vs placement-only, which are NPC-only or PC-only, how to find the target (actorIdentifier), and explicitly names sibling tools for out-of-scope operations. It also explains key derivations (spellcasting level, AC calculations). No output schema exists, but for a mutation this is acceptable; the description fully equips 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?
The description adds substantial meaning beyond the schema: it groups parameters by function (identity+prototype token, details, abilities, etc.), explains merge vs replace semantics, flags NPC-only vs PC-only fields, and clarifies subtle interactions (e.g., tokenName decoupling from name, spellcasting level deriving slot pools, tokenScale scaling only art). Even though schema coverage is high (85%), the description enriches understanding of every group and many individual parameters.
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 ('Edit') and resource ('an EXISTING actor's own stat-block fields'), then enumerates the editable groups. It explicitly distinguishes from siblings like update-token (placement-only), update-actor-item / add-feature / manage-activity (embedded items), and notes it does not run combat. This makes the tool's scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the agent when to use this tool: to author an actor's stat block, and explicitly points to alternatives for other operations ('use update-token' for placement fields, 'use update-actor-item / add-feature / manage-activity' for embedded items, 'Use list-actors or get-actor to find the actorIdentifier'). It also states what is NOT done, so an agent can route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-actor-itemA
[D&D 5e] Edit an item embedded on an actor (weapon / feature / spell / equipment). Apply a dot-path patch (values applied as-is; arrays/Sets replace whole) and/or deletePaths (remove keys, e.g. an activity by id), and/or change name/img. This is the low-level item editor — to add/edit/remove activities (attacks, saves, heals, etc.) prefer manage-activity, which knows the shapes. Use get-actor or get-actor-entity to find the item and the exact paths/ids to change.
| Name | Required | Description | Default |
|---|---|---|---|
| img | No | Item image path or URL. | |
| name | No | Rename the item. | |
| type | No | Optional item type to disambiguate the lookup (e.g. "weapon", "feat", "spell"). | |
| patch | No | Map of Foundry dot-path -> value, applied as-is. Examples: {"system.damage.base.number": 3}, {"system.damage.base.types": ["fire"]} (arrays REPLACE whole), {"system.activities.<id>.attack.bonus": "2"}, {"system.equipped": true}, {"system.description.value": "<p>...</p>"}. | |
| deletePaths | No | Dot-paths to delete from the item, e.g. "system.activities.<id>" to remove an activity. Converted to the Foundry "-=" deletion form for you. | |
| itemIdentifier | Yes | Name or id of the embedded item to edit (id, exact name, then substring). | |
| actorIdentifier | Yes | Name or id of the actor that owns the item (partial name match supported). Also accepts a placed TOKEN id (from list-tokens): the edit then lands on that token INSTANCE's own delta, not the base actor — the way to re-gear ONE placed copy of an unlinked NPC (base-actor edits never reach tokens already on a scene). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully describes behavior: patch applies values as-is, arrays replace whole; deletePaths are converted to Foundry deletion form; actorIdentifier accepts token IDs for delta edits on placed tokens. This goes beyond schema details.
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, with no wasted words. Key information is front-loaded regarding purpose and operations, and supplementary details follow logically.
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 7 parameters with only 2 required and no output schema, the description covers all essential aspects: the capabilities, how parameters work, and important nuances (e.g., token handling). It is fully sufficient for an agent to use 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?
Although schema coverage is 100%, the description adds significant meaning with concrete examples for patch and deletePaths, and explains the token instance behavior for actorIdentifier, providing practical context beyond 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 tool edits an embedded item on an actor, detailing specific operations (patch, deletePaths, name/img). It explicitly distinguishes from the sibling manage-activity tool, making its purpose distinct.
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 guidance on when to use this tool (low-level item editing) versus when to use manage-activity (activities). It also recommends using get-actor or get-actor-entity to find the item and paths, offering clear context for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-drawingsA
Edit one or more placed DRAWINGS by id (from list-drawings): MOVE via x/y, RESIZE via width/height/radius or replace polygon points, restyle stroke/fill, change or clear the text label (text:""), toggle hidden/locked/interface. The shape KIND cannot change — delete and recreate for that. Patches only the fields you pass. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| drawings | Yes | The drawing patches to apply (each targets one id). | |
| sceneIdentifier | Yes | Scene id or exact name holding the placeables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must explain behavioral traits. It covers mutation behavior, patching semantics, and the constraint that shape KIND cannot change. It does not detail safety, reversibility, or auth beyond GM-only. Adequate but not comprehensive.
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?
Single, well-structured paragraph with clear categories and front-loaded action. No superfluous words. Efficiently conveys key 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 description covers major operations, patching behavior, GM-only restriction, and the inability to change shape kind. It lacks return value details (no output schema) and error cases, but for a modification tool with many parameters, it is largely 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%, so baseline is 3. The description adds value by explaining the shape KIND constraint not in schema, but does not elaborate on parameter details beyond what schema provides. Meets minimum expectation.
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 edits existing DRAWINGS by ID, listing specific operations (move, resize, restyle, change text, toggle hidden/locked/interface). It distinguishes from siblings like create-drawings, delete-drawings, and list-drawings by specifying modification of existing entities.
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 mentions 'Patches only the fields you pass' and 'GM-only', indicating when to use. It references list-drawings for IDs. However, it lacks explicit 'when not to use' or comparison to alternatives, but the purpose is distinct enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-folderA
Update a sidebar Folder in place — rename it, recolor it, set its raw sort, and/or reparent it (nest under another folder of the same type, or pass parentFolder:"" to move it to the root). Resolves the folder by exact id or exact name+type. Use this to RENAME a folder without the move-documents + delete-folder dance. To reposition a folder, RENAME it — sort does not drive folder order in the v14 sidebar. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New folder name (rename). | |
| sort | No | The Folder document's sort value. ⚠️ ADVISORY, not a lever: writing it persists and reads back, but the v14 sidebar was observed rendering sibling FOLDERS ALPHABETICALLY BY NAME regardless of it (verified live 2026-08-12 on Scene folders — 100000/200000/300000 against siblings at 0 did not move them). To control folder ORDER, control the NAME (this world uses "NN - " prefixes, 99 for undetermined). | |
| type | No | Folder document type (needed to resolve by name; default Actor). | Actor |
| color | No | New hex color, e.g. "#4a90e2". | |
| identifier | Yes | Folder id or exact name to update. | |
| parentFolder | No | Reparent under this folder id or exact name (same type). "" = move to root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does well: it explains resolution by exact id or name+type, reveals that `sort` is advisory and verified not to reorder folders, and notes GM-only access. It could add what happens on failure (e.g., not-found behavior), but the coverage is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-organized: it front-loads the primary purposeaine the operations, then adds resolution and usage caveats. The long `sort` warning is essential and earns its place because it prevents a plausible misuse. 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 6-parameter mutation tool with no output schema, the description covers every operation, all parameter semantics, resolution rules, permission scope, and a key behavioral caveat about sidebar ordering. An agent has enough information to invoke this tool correctly and avoid the main trap.
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 substantial semantic context beyond the schema: `sort` is explicitly labeled as non-driving for folder order, `parentFolder: ""` means move to root, and `identifier` resolution semantics are clarified. This meaningfully helps an agent choose and fill parameters 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 names a specific verb ('Update'), a specific resource ('sidebar Folder'), and lists the concrete operations: rename, recolor, set sort, and reparent. It also explicitly differentiates this tool from siblings by stating 'Use this to RENAME a folder without the move-documents + delete-folder dance,' which makes 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?
The description gives clear when-to-use guidance: renaming a folder without the move-documents/delete-folder workaroundhol. It also warns against using `sort` to reposition folders because it does not drive v14 sidebar order, and states GM-only permission. These exclusions and alternatives are explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-itemA
Update existing world-level Item(s) by id — change name, img, system data, or folder. GM-only. Renaming an UNIDENTIFIED dnd5e item works on the true source name; the echo shows the mystery-mask name plus trueName so the rename is visible.
| Name | Required | Description | Default |
|---|---|---|---|
| updates | Yes | One or more item patches. Each entry must include "id" plus at least one field to change (name, img, system, folder). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses authorization requirement (GM-only) and a special rename behavior for dnd5e. With no annotations, the description partially carries the behavioral burden but does not mention side effects, destructiveness, or what happens on 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?
Two sentences with no waste: purpose, constraint, and a critical special case all front-loaded. 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?
Covers key aspects (purpose, authorization, special case) but lacks information about return values (no output schema) and does not explain what 'world-level' means in contrast to actor-owned items. For a mutation tool with no annotations, some gaps remain.
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 description adds meaningful extra context beyond the schema: it explains the rename behavior for unidentified dnd5e items, which is not in the schema. The description also reiterates the 'world-level' scope, reinforcing the parameter's 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?
Clearly states verb (update) and resource (world-level Items by id), lists changable fields (name, img, system data, folder), and specifies GM-only. Distinguishes from sibling tools like create-item and update-actor-item by explicitly saying 'world-level'.
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 states GM-only constraint and provides specific guidance for renaming unidentified dnd5e items. However, lacks explicit guidance on when to use this versus alternatives like update-actor-item, though the world-level scope is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-journalA
Generic JournalEntry update: rename the entry (name) and/or set page content. Content replaces the target page — pass pageId to target a specific page, newPageName to add a new page, or neither to update the first text page. For quest-style append updates use update-quest-journal instead. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New journal entry name (rename). | |
| pageId | No | Target a specific page by id (get ids from list-journals). | |
| content | No | HTML content to set on the target page (replaces existing content). | |
| journalId | Yes | Journal entry id or exact name. | |
| newPageName | No | If set (without pageId), create a new page with this name from content. | |
| playerVisible | No | Set the written page visibility: true = players can OBSERVE it (a handout), false = GM-only. Omit to leave it unchanged. To flip an EXISTING page without rewriting its content, use set-journal-page-visibility. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses destructive behavior (content replaces existing), creation of new pages (newPageName), and that tool is GM-only. No annotations present, so description fully handles transparency.
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?
Concise, four sentences with clear front-loading. No redundant information; every sentence adds value.
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 main use cases and distinguishes from sibling, but lacks description of return value or error handling. Acceptable for a straightforward update 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?
Adds meaning beyond schema by explaining interactions between pageId, newPageName, and content. Schema coverage is 100%, but description provides additional context on conditional behavior.
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 it updates a journal entry by renaming or modifying page content, and distinguishes from update-quest-journal for quest-style updates. Specific verb 'update' with resource 'JournalEntry'.
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 tells when to use (generic update) and when not to (use update-quest-journal instead). Provides conditional logic for page targeting and notes GM-only restriction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-lightsA
Edit one or more placed AMBIENT LIGHTS by id (from list-lights): MOVE via x/y, change dim/bright radii, color, alpha, angle, luminosity, attenuation, the animation (animationType/Speed/Intensity — e.g. add torch flicker), the darkness activation range, walls/vision, hidden. Emission fields nest under config internally — patches only the fields you pass, so a partial change never wipes the rest. Unresolved ids reported. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| lights | Yes | The light patches to apply (each targets one id). | |
| sceneIdentifier | Yes | Scene id or exact name holding the placeables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description fully bears the behavioral transparency burden. It discloses that updates are partial ('patches only the fields you pass'), unresolved ids are reported, and the tool is GM-only. It also explains internal nesting of emission fields and provides examples like torch flicker.
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, efficient paragraph that front-loads the main purpose. Every sentence adds value, covering scope, partial update behavior, error handling, and permissions 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?
Given the tool's complexity (many parameters) and no output schema, the description is thorough. It lists all editable aspects and explains behavior. It lacks explicit return value info, but the partial update and error reporting context suffices.
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?
With 100% schema coverage, the baseline is 3. The description adds semantic value beyond the schema by providing real-world examples ('warm torch', 'add torch flicker'), explaining default values (alpha ~0.3), and clarifying the behavior of partial updates and darkness ranges.
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 'Edit one or more placed AMBIENT LIGHTS by id' with specific editable fields like x/y, dim, bright, color, etc. It distinguishes from sibling tools like create-lights and delete-lights by mentioning 'update' and referencing 'list-lights'.
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 after listing lights and for updating existing lights. It provides context on partial updates and GM-only access, but does not explicitly state when not to use it or mention alternatives like create or delete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-noteA
Nudge ONE existing map-note pin by id (the legend→pins review loop): move it (x/y), relabel it, resize/restyle its icon, toggle fog global, or re-point it to a different journal/page. Patches only the fields you pass; at least one is required. Strict scene + note-id resolution. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | New pin X in absolute canvas pixels. | |
| y | No | New pin Y in absolute canvas pixels. | |
| icon | No | New Data-relative icon image src. | |
| page | No | Page id or exact name within the (re-pointed) journal; only used with `journal`. | |
| label | No | New text shown on the pin. | |
| global | No | Render the pin through fog/vision occlusion (NOT a permission control). | |
| noteId | Yes | The Note id to update (from create-scene-notes/list-notes). | |
| journal | No | Re-point the pin to a different JournalEntry (id or exact name, strict resolve). | |
| iconSize | No | New icon size in px (min 32). | |
| sceneIdentifier | Yes | Scene id or exact name holding the pin. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses key behaviors: partial updates (patches only fields passed), at least one required field, GM-only execution, and strict scene+note-id resolution. It does not mention error handling or response format, but the disclosed traits are sufficient for safe 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 two sentences, packed with information. The first sentence front-loads the primary action and key capabilities. It is efficient, but the first sentence is slightly long. Overall, it 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?
Given the 10 parameters, no output schema, and no annotations, the description provides substantial context: the patch behavior, required fields, scene/note resolution, and GM-only restriction. It lacks details on return values or error conditions, but these are partially mitigated by the schema's parameter descriptions.
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%, baseline is 3. The description adds semantic value beyond the schema by grouping actions (nudge, relabel, resize, etc.) and explaining the 'global' field's purpose (fog occlusion, not permission control). This helps an agent understand parameter intent better than the schema alone.
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 it updates an existing map-note pin by id and lists all modifiable attributes (position, label, icon, etc.). It distinguishes from create/delete siblings by specifying 'Nudge ONE existing map-note pin' and refers to the 'legend→pins review loop', making its purpose highly specific and actionable.
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 (GM-only, part of review loop, strict resolution) but does not explicitly state when not to use this tool or suggest alternatives. However, the context strongly implies it is for modifying existing notes, and sibling tool names like create-scene-notes and delete-note cover the other cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-playlistA
Update a Playlist's document fields: rename, change playback mode, or set the crossfade duration. Does not add/remove tracks. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| fade | No | Crossfade duration in milliseconds. | |
| mode | No | New playback mode. | |
| name | No | New playlist name. | |
| identifier | Yes | Playlist id or exact name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors: updates document fields, does not add/remove tracks, and is GM-only. With no annotations, description carries full burden and covers essential traits. Could mention idempotency or error conditions, but sufficient for typical use.
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 action and scope. No redundant information. Every sentence adds value.
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?
Adequately covers tool purpose and constraints for a low-complexity tool (4 params, no nested objects, no output schema). Could mention return value or confirm action, but not essential given the context.
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 good parameter descriptions. Description adds context by naming the fields (rename, playback mode, crossfade) but does not provide additional semantic detail beyond what schema already offers. 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?
Description clearly states the tool updates playlist fields (rename, change playback mode, set crossfade) and explicitly excludes adding/removing tracks. Also notes GM-only restriction. Distinguishes from sibling tools like create-playlist or delete-playlist.
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 context on what the tool does and what it does not do (add/remove tracks). Implies it's for modifying existing playlists. No explicit alternative sibling mentioned, but the exclusion helps guide usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-quest-journalA
Append a new styled section to a quest/journal page from typed blocks (e.g. a heading "Session 3" + paragraphs of what happened) — the §8 session-log/progress path. You supply the words as blocks; the tool styles + appends them. By default appends to the first text page; use pageId to target a page, or newPageName to start a new page. Structuring only.
| Name | Required | Description | Default |
|---|---|---|---|
| blocks | Yes | Typed blocks to APPEND as a new styled section (e.g. a heading "Session 3 — date" + paragraphs). You supply the words; the tool styles them. Include a heading block to label it. | |
| pageId | No | Page to append to (id from list-journals). Omit to use the first text page. | |
| journalId | Yes | ID of the quest journal to update. | |
| newPageName | No | If set (without pageId), create a NEW page with this name from the blocks instead. | |
| playerVisible | No | Set the target/new page visibility: true = players can OBSERVE it (a handout), false = GM-only. Omit to leave visibility unchanged (a new page then inherits GM-only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool 'styles + appends' the blocks, is 'append-only,' and mentions visibility inheritance for new pages. These are behavioral traits beyond basic schema details.
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 front-loaded with the main action. Every sentence adds value without redundancy. It efficiently covers purpose, usage, and key parameters.
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 tool's complexity and absence of output schema, the description provides sufficient context: block types, page targeting, visibility options, and a note about requiring a heading block. An agent can correctly invoke the 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 baseline is 3. The description adds minimal extra meaning (e.g., 'you supply the words as blocks; the tool styles + appends them'), but the schema already thoroughly describes each block type and 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 clearly states the tool's purpose: 'Append a new styled section to a quest/journal page from typed blocks'. It specifies the verb 'append', the resource 'quest/journal page', and the mechanism 'typed blocks'. It also mentions the specific context '§8 session-log/progress path', distinguishing it from general journal update 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 provides clear context for usage: 'By default appends to the first text page; use pageId to target a page, or newPageName to start a new page.' It also notes 'Structuring only,' implying the tool handles structure rather than raw content. However, it does not explicitly state when not to use it or mention alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-regionA
Update ONE region by id: rename, recolor, change visibility, replace its shapes whole, or reshape to a single grid rectangle via the rect convenience (center px + cells + snap — the move/resize you'd do reviewing a teleporter). Patches only what you pass; behaviors are left untouched. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New region label. | |
| rect | No | Convenience: reshape to ONE grid rectangle centered at (x,y), sized in cells, grid-snapped by default (the move/resize the review loop wants). Ignored if `shapes` is given. | |
| color | No | New region tint hex. | |
| shapes | No | Replace the region shapes whole (v14 shapes in canvas px). | |
| regionId | Yes | Region id (from create-region / create-teleporter / list-regions). | |
| visibility | No | New visibility mode (0 layer / 1 gamemaster / 2 always). | |
| sceneIdentifier | Yes | Scene id or exact name holding the region. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility. It discloses that it's a partial update (patches only passed parameters), leaves behaviors untouched, and is GM-only. While it doesn't detail return values or error handling, it provides essential behavioral context for safe use.
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, front-loaded with the main purpose and capabilities. Every word serves a purpose—no redundancy. It efficiently conveys all key details without unnecessary 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?
Given the complexity of 7 parameters and nested objects, the description covers core functionality: partial update, GM restriction, and rect convenience. It omits the interaction between rect and shapes (schema covers it), but overall provides sufficient context for correct tool 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?
The schema has 100% description coverage, so baseline is 3. The description adds value by explaining the rect convenience as a 'move/resize' action and clarifying shapes replacement. It reinforces the patch semantics, enhancing understanding beyond the schema alone.
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 single region by ID and lists specific attributes: rename, recolor, change visibility, replace shapes, or reshape via rect. It distinguishes from sibling tools like create-region and delete-region, and notes it's GM-only, providing a specific verb and resource focus.
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 for modifying existing regions, mentioning 'GM-only' as a constraint and explaining the rect convenience. It does not explicitly state when not to use or compare to alternatives, but the context of sibling tools makes usage clear. The patch behavior is highlighted, aiding decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-rolltableA
Update a RollTable's fields (name, description, formula, replacement, displayRoll) and/or its entries, two ways: editResults = TARGETED per-entry edits — name an entry by its roll face (e.g. 7 on a d12) or resultId (from get-rolltable) and patch just its text, linked uuid, weight, and/or range; every OTHER entry (ranges, weights, @UUID item links) stays byte-identical — the right way to fix a typo on one entry of a tuned table. text/uuid REPLACE that entry's content (copy the raw text from get-rolltable and change only what you need). results = DESTRUCTIVE whole-set replace (all entries deleted and recreated with auto-assigned ranges). Bad edits are isolated + reported; an introduced range overlap/gap is warned. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New table name. | |
| formula | No | New roll formula. | |
| results | No | DESTRUCTIVE: replaces ALL existing results (deleted + recreated with auto-assigned ranges). To change one entry, use editResults instead. | |
| identifier | Yes | Table id or exact name. | |
| description | No | New description. | |
| displayRoll | No | Show the roll when drawing. | |
| editResults | No | TARGETED per-entry edits — fix one entry's text/link/weight/range in place; every other entry (ranges, weights, @UUID item links) is left byte-identical. Mutually exclusive with `results`. | |
| replacement | No | Draw with replacement. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and delivers: `results` deletes and recreates all entries, `editResults` leaves every other entry 'byte-identical', bad edits are 'isolated + reported', and range overlap/gap is 'warned, not blocked'. It also discloses the GM-only permission gate. This is rich, honest disclosure of side effects and failure behavior beyond anything the schema states.
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 long (~140 words across three sentences) but every clause earns its place; the tool genuinely has two complex modes that need explanation. It front-loads the core purpose and the editResults/results distinction before diving into details, and uses formatting cues to keep the structure 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?
For a complex 8-parameter mutation tool with no annotations and no output schema, the description plus rich schema covers purpose, both modes, destruction semantics, error reporting, permission requirements, and how to obtain identifiers. The only gap is the success return value/confirmation shape, which is minor given no output schema exists.
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 already-detailed parameter descriptions, so the baseline is 3. The description adds meaningful semantics on top: it explains the targeting mechanism (roll face vs resultId), the byte-identical guarantee of editResults, and the destructive auto-assign behavior of results — semantics the schema alone does not synthesize.
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 RollTable's fields ... and/or its entries') and goes further by distinguishing the two update modes (`editResults` targeted vs `results` destructive). It names `get-rolltable` as a companion for sourcing resultIds and raw text, differentiating itself from the read/lookup sibling 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?
The description gives explicit in-tool usage guidance: `editResults` is 'the right way to fix a typo on one entry of a tuned table,' while `results` is flagged as a destructive whole-set replace. It also states the GM-only prerequisite and points to `get-rolltable` for the ids/text needed. It does not explicitly contrast with create/import/delete-rolltable siblings, but the mode-level guidance 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.
update-sceneA
Update an existing Scene document — rename, swap its background image (Data-relative path), toggle navigation, set the navigation label, change dimensions/grid (size/type/distance/units)/padding, token vision, fog mode, lighting (darkness, global light), weather, a nav thumbnail, or the linked playlist/journal ("" clears a link). Also (parity with create-scene) deep-merges a full environment{}/fog{} mood object, re-points the saved camera (initial{x,y,scale}), or re-stamps document flags on an existing scene. Scene-document only: never touches placeables (walls/lights/tokens) and never activates the scene. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| fog | No | A v12+ scene's full fog{} object (exploration, overlay, colors), carried whole (deep-merged). | |
| name | No | New scene name. | |
| flags | No | Document flags namespaced by scope — e.g. {"tom-cartos-import":{sourceModule,sourceId}} for import provenance/dedup. Deep-merged over any existing flags (re-stampable on update). | |
| thumb | No | Data-relative path to a pre-rendered navigation thumbnail (e.g. an uploaded <id>-thumb.webp shipped by a map pack). Foundry may regenerate it on a later in-app edit, so treat it as a nice-to-have, not load-bearing. | |
| width | No | Scene width in pixels. | |
| height | No | Scene height in pixels. | |
| fogMode | No | Fog of war: disabled | individual (classic per-player) | shared (party-wide). | |
| initial | No | The saved initial camera view {x,y,scale} to restore on scene load (deep-merged). | |
| journal | No | JournalEntry id or exact name to attach as scene notes. "" clears it. | |
| navName | No | Navigation label shown in the scene nav bar. | |
| padding | No | Scene padding fraction (0–0.5). | |
| weather | No | Weather effect key (e.g. rain, snow, fog, leaves, rainStorm, blizzard). "" = none. | |
| darkness | No | Darkness/day-night level: 0 = full daylight, 1 = full night. | |
| gridSize | No | Grid size in pixels. | |
| gridType | No | Foundry grid type (0 gridless, 1 square, 2+ hex). | |
| playlist | No | Playlist id or exact name to auto-play on scene activation. "" clears it. | |
| gridAlpha | No | Grid line opacity 0–1 (e.g. 0.2 for a faint grid). | |
| gridColor | No | Grid line color as a hex string, e.g. "#000000". | |
| gridUnits | No | Distance unit label per cell, e.g. "ft" (dnd5e default). | |
| navigation | No | Whether the scene appears in the navigation bar. | |
| environment | No | A v12+ scene's full environment{} mood object, carried whole (darknessLevel, globalLight{...}, cycle, base, dark{hue,luminosity}…). Deep-merged, so a partial mood patch layers onto the scene; prefer this over the flat darkness/globalLight knobs when importing or re-mooding a pack scene. | |
| globalLight | No | Globally illuminate the whole scene (turn the lights on). | |
| tokenVision | No | Require token line-of-sight to see the scene. Turn OFF for overland/illustration maps. | |
| gridDistance | No | Real-world distance per grid cell (dnd5e default 5). | |
| backgroundPath | No | Data-relative path to a new background/map image. | |
| sceneIdentifier | Yes | Scene id or exact name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It details deep-merge behavior for environment/fog, re-pointing of initial, re-stamping flags, empty-string clearing for playlist/journal links, the GM-only permission, and the explicit non-effects on placeables and activation. This goes well beyond what the schema or annotations alone would 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?
The description is dense but every clause maps to a real parameter set or boundary condition, and the opening phrase 'Update an existing Scene document' is front-loaded. For a 26-parameter tool, it is appropriately sized and avoids restating schema-level details.
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 no annotations, no output schema, and high tool complexity, the description covers the full call surface: all updateable field groups, deep-merge semantics, target identity, GM-only permission, and explicit non-effects. The only minor omission is return value details, but with no output schema and this level of behavioral coverage, the agent has enough to invoke the tool correctly and understand the outcome.
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?
All 26 parameters already have schema descriptions, so the baseline is 3. The description adds meaningful cross-parameter semantics by grouping fields into functional categories and by clarifying that environment/fog/initial/flags are deep-merged or re-stamped with parity to create-scene, rather than flat overwrites. It does not add syntax details per parameter, but the schema already covers those.
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 leads with a specific verb and resource: 'Update an existing Scene document' and enumerates the exact field categories it can change, from name and background to environment/initial/flags. It also draws a clear boundary with 'Scene-document only: never touches placeables (walls/lights/tokens) and never activates the scene,' which distinguishes it from create-scene, activate-scene, and placeable-specific update 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 makes when/when-not explicit: it targets an existing document, is marked 'GM-only', and explicitly says it never activates the scene and never touches placeables, signaling that activation or wall/light/token edits belong elsewhere. 'Parity with create-scene' also gives an alternative anchor for the same environment/fog/initial/flags semantics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-soundsA
Edit one or more placed AMBIENT SOUNDS by id (from list-sounds): MOVE via x/y, resize the audible radius, swap the track (path), change volume/repeat/walls/easing, the darkness activation range, or the listener effects. Patches only the fields you pass. Unresolved ids reported, never fatal. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| sounds | Yes | The sound patches to apply (each targets one id). | |
| sceneIdentifier | Yes | Scene id or exact name holding the placeables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description covers key behaviors: partial updates (patches only passed fields), error handling (unresolved ids reported not fatal), and permission (GM-only). Could add details on concurrency or reversibility but 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?
One well-structured sentence that fronts the core purpose and lists key capabilities without fluff. 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 complex tool with many fields and no output schema, the description explains what can be edited and the patching pattern. It misses details on return values (e.g., confirmation or updated objects), but overall is complete enough for 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%, baseline 3. The description adds context beyond schema by explaining how fields are used (e.g., 'MOVE via x/y') and the patching behavior.
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 it edits placed ambient sounds by id, lists specific editable fields (x/y, radius, path, volume, etc.), and distinguishes from sibling tools like create-sounds and delete-sounds.
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 specifies using ids from list-sounds, mentions unresolved ids are non-fatal, and that it's GM-only. However, it could be more explicit about when to use this vs other editing tools like update-tiles.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-tilesA
Edit one or more placed TILES by id (from list-tiles). RESIZE via width/height (the tile's on-map size — this is "tile scale"; the top-left corner stays put unless x/y is also given); MOVE via x/y (the new TOP-LEFT in canvas pixels — center-anchor conversion is handled for you); also rotation, alpha, elevation, sort, texture src/tint/fit/scaleX/scaleY (image zoom within the frame), occlusion, light/weather restrictions, video, hidden, locked. Patches only the fields you pass; unresolved ids are reported, not fatal. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| tiles | Yes | The tile patches to apply (each targets one id). | |
| sceneIdentifier | Yes | Scene id or exact name holding the placeables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it delivers: partial-patch semantics ('Patches only the fields you pass'), non-fatal error handling ('unresolved ids are reported, not fatal'), access restriction ('GM-only'), and coordinate/anchor behavior ('center-anchor conversion is handled for you', top-left stays put on resize). It does not disclose the return format or whether the batch is atomic, which keeps 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?
The description is front-loaded with the core purpose and the highest-value semantics (resize/move behavior, patch model, error handling). It is a dense single paragraph, and the trailing enumeration of fields ('rotation, alpha, elevation, sort...') is partly redundant with the schema's property descriptions, so it is not maximally tight.
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?
This is a complex tool (21 mutable properties, nested array parameter) with no output schema and no annotations. The description covers the essential invocation knowledge: operation semantics, patch behavior, unresolved-id handling, and GM-only access. The main gaps are the unspecified return/response format and batch atomicity, which matter given 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 coverage is 100%, so baseline is 3. The description adds meaning beyond the schema: it groups fields into RESIZE vs MOVE operations, clarifies that width/height are 'tile scale' (the on-map size), explains that center-anchor conversion is handled automatically, and disambiguates scaleX/scaleY as 'image zoom within the frame'. These are genuinely additive semantics.
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+resource+mechanism: 'Edit one or more placed TILES by id (from list-tiles).' It clearly differentiates from siblings like create-tiles (creates new), list-tiles (source of ids), and delete-tiles (removes), with zero ambiguity about what operation this 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?
The description gives clear usage context: ids come from list-tiles, the tool uses a patch model ('Patches only the fields you pass'), and it is 'GM-only'. It does not explicitly name exclusions or alternatives (e.g., 'use create-tiles to add new tiles'), so the guidance is strong context without explicit when-not statements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-tokenA
Edit one or more PLACED tokens on a scene — a token INSTANCE already dropped on the map, NOT the actor's prototype token (that's update-actor). Resolve the scene by id/exact name (default: the ACTIVE scene), then target tokens by tokenIds and/or actorIds (an actor id OR exact name — updates EVERY placed copy of that actor, e.g. all "Dead Guard" corpses). Patch any of: rotation (or randomizeRotation for an independent per-token angle), scale (token art size — sets texture.scaleX/scaleY together), imagePath (RESKIN the placed instance — new token art, still image or animated video, existence-checked so a 404 never breaks working art; no more delete+re-place), elevation, hidden, lockRotation, x/y, name, displayName (nameplate visibility), displayBars (resource-bar visibility), bar1/bar2 (which resource each bar tracks — the health bar is bar1 = attributes.hp), ring (dynamic token ring on/off), and hp (this token's CURRENT hit points, per-token on its own delta — so two copies of one actor can be wounded differently, which update-actor cannot do) — all matched tokens update in one batch. GOTCHA handled for you: a token whose actor had auto-rotate OFF carries lockRotation:true, which HIDES a set rotation — so when you rotate a locked token the tool auto-unlocks it and warns. Reports matched/updated counts + any unresolved ids. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | New token X in absolute canvas pixels. | |
| y | No | New token Y in absolute canvas pixels. | |
| hp | No | Set THIS placed token's hit points on its own actor — PER-TOKEN, so two copies of the same actor can differ (e.g. a band wounded to different HP). Writes system.attributes.hp.* on the token's (unlinked) delta, NOT the prototype/statblock — the right home for a token's current HP. For a linked token it writes the shared base actor. Only the sub-fields you pass change; 0 is valid (a downed creature). | |
| bar1 | No | Bar 1 resource attribute path (health bar is "attributes.hp"); "" clears it. | |
| bar2 | No | Bar 2 resource attribute path (e.g. "attributes.hp"); "" clears it. | |
| name | No | Rename the placed token (its nameplate). | |
| ring | No | Dynamic token ring: false = plain token (the house default), true = ring on. Sets ring.enabled on the placed token. | |
| scale | No | Token ART scale (sets texture.scaleX and scaleY together). 1 = normal, 1.5 = 50% larger. | |
| hidden | No | Hide (true) or reveal (false) the token from players. | |
| actorIds | No | Actor id OR exact actor name — updates ALL placed copies of each (e.g. every "Dead Guard" token on the map). Combined (union) with tokenIds. | |
| rotation | No | Facing in degrees (0–359), applied to every matched token. | |
| tokenIds | No | Placed-token ids to update (from list-tokens). Combined (union) with actorIds. | |
| elevation | No | Token elevation in grid-distance units (e.g. feet). | |
| imagePath | No | RESKIN the placed token(s): new token art (texture.src) — a world-relative path (e.g. "assets/tokens/morgash.png") or URL; a still IMAGE or an animated VIDEO (.webm/.mp4) both work on a token. Applied to every matched token; the path is existence-checked first, and a 404 leaves the current art unchanged (with a warning) instead of breaking it. Changes ONLY the placed instance(s) — the actor's portrait/prototype art is set-actor-art. | |
| displayBars | No | Resource (health) bar visibility, same modes as displayName: none | control | owner-hover | hover | owner | always. | |
| displayName | No | Nameplate visibility: none | control (only when selected) | owner-hover | hover | owner (always, to owners) | always (always, to everyone). | |
| lockRotation | No | Lock the token art from rotating. NOTE: lockRotation:true HIDES any `rotation` you set, so when you rotate a locked token and omit this, the tool AUTO-UNLOCKS it (and warns) so the angle is visible. | |
| sceneIdentifier | No | Scene id or exact name holding the token(s). Omit to use the ACTIVE scene. | |
| randomizeRotation | No | Give each matched token its OWN random angle (0–359) instead of one shared `rotation` — e.g. to strew corpses naturally. Overrides `rotation` when true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full disclosure burden and meets it. It discloses the auto-unlock gotcha for lockRotation, the existence-check on imagePath (404 leaves art unchanged), per-token hp deltas, batch behavior, and the returned report of matched/updated counts and unresolved ids. It even states GM-only.
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 dense but every clause contributes: core scope, non-goals, parameter semantics, gotcha, and reporting. The single-paragraph structure makes it harder to scan than a bulleted list, but it is front-loaded and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 19-parameter tool with no annotations and no output schema, the description covers all non-obvious behavior: scene resolution, targeting strategies, batch update, per-token HP, reskin semantics, and the lockRotation gotcha. The schema already documents every parameter exhaustively, so the description only needs to add interactions and context, which it does.
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 pushes above it by explaining cross-parameter interactions: randomizeRotation overrides rotation, scale sets texture.scaleX/scaleY together, lockRotation:true hides rotation and triggers auto-unlock, and hp is written per-token. It also clarifies bar1/bar2 semantics with the health-bar example.
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?
Opens with 'Edit one or more PLACED tokens on a scene', naming the verb, resource, and scope. Immediately contrasts with 'NOT the actor's prototype token (that's update-actor)', distinguishing it from a key sibling. The list of patchable fields makes the tool's purpose 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?
Explicitly names update-actor as the alternative for prototype tokens and set-actor-art for changing actor art, and states the condition for using this tool ('PLACED tokens'). Explains when to use actorIds vs tokenIds (every placed copy vs specific instances) and that randomizeRotation overrides rotation. This is strong routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-userA
Update a Foundry user account: permission role (e.g. demote a trusted player to player), login name, player color, pronouns, or assigned character. GM admin — guarded so the bridge user's own role and the world's last gamemaster cannot be demoted.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Rename the user account (their login name). | |
| role | No | Permission role: 'none' (banned) | 'player' | 'trusted' (trusted player) | 'assistant' (assistant GM) | 'gamemaster'. Guarded: the bridge user's own role and the world's last gamemaster cannot be demoted. | |
| user | Yes | User id or exact name to update (case-insensitive name match allowed). No default — account edits are always explicit. | |
| color | No | Player color as #rrggbb — used for cursors, targeting, and chat borders. | |
| pronouns | No | Pronouns shown next to the user name. | |
| character | No | Actor id or name to assign as the user's character (their default speaker / PC). Pass "none" to clear the assignment. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses the guardrail (bridge user's role and last gamemaster cannot be demoted) and notes GM admin requirement. However, it does not describe side effects, return value, or error behavior. The guardrail is also present in the schema's role description, so duplication, but the GM admin note is new.
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 the main purpose front-loaded. No redundant phrasing. The guardrail is appended without bloat. Efficient and well-structured.
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 6 parameters and no annotations or output schema, the description gives a good overview but omits return behavior and error conditions. The guardrail is mentioned but not the success/failure response. It is adequate but not fully complete for a mutation 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 baseline is 3. The description merely lists the fields already detailed in the schema without adding new meaning. It provides an example for role demotion but that's also in schema. No additional semantics.
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 (update a Foundry user account) and enumerates the editable fields (role, login name, color, pronouns, character). The example 'demote a trusted player to player' makes it concrete. It is distinct from siblings like set-user-avatar or list-users.
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 for updating user accounts but does not explicitly state when to use it over alternatives or when not to. It mentions GM admin as a prerequisite, which gives clear context, but lacks explicit alternative routing or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-wallsA
Edit one or more WALLS by id (from list-walls): flip a door to secret (door:2), open/close/LOCK it (ds: 0/1/2), change what it blocks (move/light/sight/sound: 0 none / 10 limited / 20 normal / 30 proximity / 40 distance), set one-way dir, doorSound, or proximity thresholds; MOVE by giving the full segment (all of x0,y0,x1,y1 or c:[4] — a wall never half-moves). Patches only the fields you pass; an off-enum value skips that patch with a warning. GM-only.
| Name | Required | Description | Default |
|---|---|---|---|
| walls | Yes | The wall patches to apply (each targets one id). | |
| sceneIdentifier | Yes | Scene id or exact name holding the placeables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and handles it well: it discloses GM-only authorization, partial-patch semantics ('Patches only the fields you pass'), validation behavior ('an off-enum value skips that patch with a warning'), and the move atomicity constraint ('a wall never half-moves').
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 dense but well-organized, front-loading the core action before enumerating fields. Each clause carries useful information, and the GM-only and patch-behavior notes are placed at the end without wasting space.
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 call semantics, id sourcing, move constraints, and warning behavior. It does not describe the return value or what happens on invalid ids, but for a patch tool with a rich schema, the provided context is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema coverage, the description adds real semantic value: it maps door:2 to 'secret', ds values to open/close/LOCK, blocking values to their meanings, and explains that MOVE requires the full segment. It also clarifies the practical effect of off-enum values on patching.
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 'Edit one or more WALLS by id' and enumerates the supported operations, including door state, blocking senses, movement, and direction. It also points to list-walls as the id source, which distinguishes this mutation tool from the listing 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?
It gives clear context: edit existing walls by id, with ids sourced from list-walls, and notes GM-only access. It does not explicitly contrast with create-walls or delete-walls, but the intended use is clear and no misleading alternatives are suggested.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload-assetA
Plane B (file channel, write). Upload an ASSET (map/token/audio/handout image) from a local file to the Foundry data area over WebDAV and return its public HTTPS URL, so large media bypass the bridge entirely. Missing parent folders are created automatically. ASSETS ONLY — never world-DB files (LevelDB writes while the server runs corrupt it; such paths are refused). PRIVACY: anything under Data/ is served publicly with no auth — do not upload anything sensitive. Requires MOLTEN_WEBDAV_PASSWORD.
| Name | Required | Description | Default |
|---|---|---|---|
| localPath | Yes | Absolute path to the local file to upload. | |
| overwrite | No | Allow overwriting an existing file at remotePath. | |
| remotePath | Yes | Destination path RELATIVE TO the Foundry `Data/` root, e.g. "worlds/your-world/assets/maps/cavern.webp". Must be an asset location, never inside a world's `data/` (LevelDB) directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: WebDAV channel, automatic folder creation, public serving of uploaded files, and the risk of LevelDB corruption for disallowed paths. Also mentions required password.
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?
Concise but packed with essential information. Front-loaded with channel and purpose. Every sentence adds value, though could be slightly more streamlined.
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?
Comprehensive for a tool with no annotations and no output schema. Covers purpose, usage, behavioral traits, and parameter details. Could mention failure handling, but return value is stated.
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 description adds value by clarifying remotePath is relative to Data/ root, providing an example, and warning against world data/ directories. Overwrite default is noted.
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?
Clear verb (Upload), resource (ASSET), and channel (WebDAV). Explicitly states it returns public HTTPS URL. Distinguishes itself from siblings like upload-asset-tree and download-asset by specifying it's for single asset uploads and not for world-DB files.
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 context (Plane B, file channel, write), conditions (ASSETS ONLY, not world-DB), privacy warning, and password requirement. Does not explicitly name alternative tools but implies alternatives for non-asset files.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload-asset-treeA
Plane B (file channel, write). Recursively upload a LOCAL directory tree of ASSETS to the Foundry data area over WebDAV, preserving the subtree layout (each file → remoteRoot/), creating parent folders as needed. Use for BULK imports — a scene pack's images, a tiles folder — instead of one upload-asset per file. Skips files that already exist unless overwrite:true; optional includeExt filter (e.g. ["webp"]). ASSETS ONLY — refuses live world-DB paths. Reports uploaded/skipped/error counts. PRIVACY: anything under Data/ is served publicly with no auth. Requires MOLTEN_WEBDAV_PASSWORD.
| Name | Required | Description | Default |
|---|---|---|---|
| localRoot | Yes | Absolute path to a LOCAL directory; every file under it (recursive) is uploaded. | |
| overwrite | No | Overwrite existing files (otherwise an already-present file is skipped). | |
| includeExt | No | Only upload files with these extensions (no dot, case-insensitive), e.g. ["webp","png","jpg"]. Omit to upload every file. | |
| remoteRoot | Yes | Destination directory RELATIVE TO the Foundry `Data/` root, e.g. "worlds/your-world/assets/tom-cartos/<id>/tiles". Each local file lands at remoteRoot/<path-relative-to-localRoot>. Never inside a world's `data/` (LevelDB) dir. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behaviors: creating parent folders, skipping existing files unless overwrite, optional includeExt filter, reporting counts, and privacy implications. It does not mention rate limits or performance but covers essential traits.
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 somewhat lengthy but well-structured with bullet points. Every sentence provides important information. The opening label 'Plane B (file channel, write)' is jargon but still informative.
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 4 parameters, no output schema, and no annotations, the description is fairly complete. It covers privacy, required environment variable, behavior on existing files, and error reporting. Could explicitly mention the return format, but the report counts are implied.
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. The description adds context beyond the schema: explains localRoot as absolute path, remoteRoot relative to Data/, the resulting file layout, and clarifies includeExt filtering. This adds value for correct usage.
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: recursively uploading a local directory tree of assets to Foundry data area, preserving subtree layout. It distinguishes from siblings (e.g., upload-asset) by emphasizing bulk imports and recursive upload.
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 use cases (bulk imports, scene pack images, tiles folder) and a warning against world-DB paths. However, it lacks explicit when-not-to-use guidance and direct comparison to alternatives beyond 'instead of one upload-asset per file'.
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.
43 tool updates
v2.1.3- Added
activate-scene - Added
add-free-cast - Changed
add-item4 fields changed- added
Input schema / properties / rarity / anyOfAdded value: +[ + { + "enum": [ + "", + "common", + "uncommon", + "rare", + "veryRare", + "legendary", + "artifact" + ], + "type": "string" + }, + { + "items": { + "enum": [ + "", + "common", + "uncommon", + "rare", + "veryRare", + "legendary", + "artifact" + ], + "type": "string" + }, + "type": "array" + } +] - changed
Input schema / properties / rarity / descriptionPrevious value: -"Magic-item rarity (\"\" = mundane)."New value: +"Magic-item rarity (\"\" = mundane) — or a LIST for a \"Rarity Varies\" item (dnd5e 6.0 `system.rarities`, e.g. [\"uncommon\", \"rare\"] for a Potion of Healing line). Written natively." - removed
Input schema / properties / rarity / enumRemoved value: -[ - "", - "common", - "uncommon", - "rare", - "veryRare", - "legendary", - "artifact" -] - removed
Input schema / properties / rarity / typeRemoved value: -"string"
- Added
add-region-behavior - Changed
apply-condition2 fields changed- changed
Input schema / properties / conditions / descriptionPrevious value: -"Condition ids to toggle: blinded, charmed, deafened, frightened, grappled, incapacitated, invisible, paralyzed, petrified, poisoned, prone, restrained, stunned, unconscious, exhaustion, and the other dnd5e conditionTypes/statusEffects."New value: +"Condition ids to toggle: blinded, charmed, deafened, frightened, grappled, incapacitated, invisible, paralyzed, petrified, poisoned, prone, restrained, stunned, unconscious, exhaustion, and the other dnd5e conditionTypes/statusEffects (coverHalf, coverThreeQuarters, coverTotal, concentrating, heavilyEncumbered, ...). Matched case-insensitively." - changed
Input schema / properties / exhaustionLevel / descriptionPrevious value: -"Exhaustion level 1-6 (0 removes it). Only affects the \"exhaustion\" condition."New value: +"Exhaustion level 1-6 (0 removes it). Only affects the \"exhaustion\" condition, and only when applying — with active=false the condition is removed regardless of this value."
- Added
configure-combat-tracker - Added
configure-dnd5e-settings - Added
configure-soundscape - Changed
create-actor-from-compendium2 fields changed- added
Input schema / properties / folderAdded value: +{ + "description": "Actor folder to file the created copies under — a folder id or exact name (created if absent), so the actor lands in its folder in ONE call instead of create + move-documents. Omit for the default \"Foundry MCP Creatures\" folder.", + "minLength": 1, + "type": "string" +} - changed
Input schema / properties / modifications / descriptionPrevious value: -"PREFAB-AS-BASE bridge: stat edits to layer onto the instantiated WORLD COPY — copy a close-matching Monster Manual creature, then customize it in one call (the §6 step-2 path). Same shape as update-actor, e.g. {cr, hp:{value,max,formula}, ac:{calc,flat}, abilities:{str,…}, skills:[{skill,proficiency}], damageResistances:{values}, biography, currency:{mode,gp,…}}. Applied to the copy ONLY — the source compendium entry is never modified. Use names[] for the name, not this. Applies to every copy when quantity > 1."New value: +"PREFAB-AS-BASE bridge: stat edits to layer onto the instantiated WORLD COPY — copy a close-matching Monster Manual creature, then customize it in one call (the §6 step-2 path). Same shape as update-actor, e.g. {cr, hp:{value,max,formula}, ac:{override} or ac:{natural}, abilities:{str,…}, skills:[{skill,proficiency}], damageResistances:{values}, biography, currency:{mode,gp,…}}. Applied to the copy ONLY — the source compendium entry is never modified. Use names[] for the name, not this. Applies to every copy when quantity > 1."
- Added
create-group - Added
create-macro - Changed
create-rolltable3 fields changed- added
Input schema / properties / results / items / properties / range / itemsAdded value: +false - added
Input schema / properties / results / items / properties / range / maxItemsAdded value: +2 - added
Input schema / properties / results / items / properties / range / minItemsAdded value: +2
- Changed
create-scene6 fields changed- removed
Input schema / properties / fog / properties / overlay / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / fog / properties / overlay / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / regions / items / properties / elevation / properties / bottom / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Input schema / properties / regions / items / properties / elevation / properties / bottom / typeAdded value: +[ + "number", + "null" +] - removed
Input schema / properties / regions / items / properties / elevation / properties / top / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Input schema / properties / regions / items / properties / elevation / properties / top / typeAdded value: +[ + "number", + "null" +]
- Changed
create-teleporter1 field changed- added
Input schema / properties / confirmAdded value: +{ + "default": true, + "description": "Ask before moving (default true — the house pattern for transitions): the moving player gets core v14's \"Teleport / Do Not Teleport\" confirmation dialog (`choice` flag). Pass false ONLY for trap/plot teleports that should fire silently.", + "type": "boolean" +}
- Changed
create-tiles2 fields changed- changed
Input schema / properties / tiles / items / properties / x / descriptionPrevious value: -"Top-left X in absolute canvas pixels."New value: +"Top-left X in absolute canvas pixels (converted to the v14 doc's center-anchored x/y for you)." - changed
Input schema / properties / tiles / items / properties / y / descriptionPrevious value: -"Top-left Y in absolute canvas pixels."New value: +"Top-left Y in absolute canvas pixels (converted likewise)."
- Changed
create-walls6 fields changed- removed
Input schema / properties / walls / items / properties / thresholdLight / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Input schema / properties / walls / items / properties / thresholdLight / typeAdded value: +[ + "number", + "null" +] - removed
Input schema / properties / walls / items / properties / thresholdSight / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Input schema / properties / walls / items / properties / thresholdSight / typeAdded value: +[ + "number", + "null" +] - removed
Input schema / properties / walls / items / properties / thresholdSound / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Input schema / properties / walls / items / properties / thresholdSound / typeAdded value: +[ + "number", + "null" +]
- Added
delete-macro - Added
disconnect-bridge - Added
duplicate-actor - Added
export-actor - Added
get-combat-stats - Added
get-group - Added
list-macros - Added
list-users - Changed
manage-activity16 fields changed- added
Input schema / properties / affectsAdded value: +{ + "description": "Target affects (with or without a template).", + "properties": { + "choice": { + "description": "The user picks which targets inside the area.", + "type": "boolean" + }, + "count": { + "anyOf": [ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "string" + } + ] + }, + "type": { + "description": "Who the activity affects: creature (default for areas) / ally / enemy / … — applyActiveEffect / difficultTerrain behaviors honour ally / enemy as a disposition filter.", + "enum": [ + "self", + "ally", + "enemy", + "creature", + "object", + "space", + "creatureOrObject", + "any", + "willing" + ], + "type": "string" + } + }, + "type": "object" +} - added
Input schema / properties / appliesEffectsAdded value: +{ + "description": "dnd5e 6.0: the ActiveEffects this activity APPLIES to its targets (activity.effects[]). The effects inherit the activity `duration` (including its `expiry`) — do not give them one of their own. E.g. a save activity that poisons on a failed save: appliesEffects [{ref: \"Poisoned\", onSave: false}] + duration {value: 1, units: \"minute\"}. On edit this REPLACES the list. Not for a transform activity — its effects[] ARE its `forms`.", + "items": { + "properties": { + "level": { + "description": "Only applied when the cast / item level is within [min, max] (upcast tiers).", + "properties": { + "max": { + "minimum": 0, + "type": "integer" + }, + "min": { + "minimum": 0, + "type": "integer" + } + }, + "type": "object" + }, + "onSave": { + "description": "SAVE activities only: does the effect still apply on a SUCCESSFUL save? Default false.", + "type": "boolean" + }, + "ref": { + "description": "The effect: a NAME of an effect ON THIS ITEM (author it with manage-effect first — it persists by id), a stock dnd5e.effects name (\"Poisoned\", \"Restrained\", \"Prone\"), an ActiveEffect uuid, an Item uuid + \"#<effect name>\" (a premium-pack spell's effect), or \"<world item>#<effect>\". Resolved and echoed back.", + "minLength": 1, + "type": "string" + } + }, + "required": [ + "ref" + ], + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / behaviorsAdded value: +{ + "description": "dnd5e 6.0 area behaviors carried by the template (needs `template`). On edit this REPLACES the list. E.g. an authored Web: type \"save\", template {type:\"cube\", size:20}, behaviors [{type:\"applyActiveEffect\", effects:[\"Restrained\"]}, {type:\"difficultTerrain\", terrainTypes:[\"web\"]}].", + "items": { + "properties": { + "creatureTypes": { + "description": "applyActiveEffect: only these creature types.", + "items": { + "enum": [ + "aberration", + "beast", + "celestial", + "construct", + "dragon", + "elemental", + "fey", + "fiend", + "giant", + "humanoid", + "monstrosity", + "ooze", + "plant", + "undead" + ], + "type": "string" + }, + "type": "array" + }, + "effects": { + "description": "applyActiveEffect (required): effect NAMES from the stock dnd5e.effects pack (\"Restrained\", \"Poisoned\", \"Prone\" …) or a world item's effects, ActiveEffect uuids, or an Item uuid + \"#<effect name>\" (a premium-pack spell's effect). Resolved and echoed back.", + "items": { + "minLength": 1, + "type": "string" + }, + "type": "array" + }, + "level": { + "description": "Only active when the item / cast level is within [min, max] (upcast tiers).", + "properties": { + "max": { + "minimum": 0, + "type": "integer" + }, + "min": { + "minimum": 0, + "type": "integer" + } + }, + "type": "object" + }, + "name": { + "description": "Behavior label.", + "type": "string" + }, + "sizes": { + "description": "applyActiveEffect: only these sizes.", + "items": { + "enum": [ + "tiny", + "sm", + "med", + "lg", + "huge", + "grg" + ], + "type": "string" + }, + "type": "array" + }, + "terrainTypes": { + "description": "difficultTerrain: the terrain kind(s) — web, plants, ice, mud … (some creatures ignore some).", + "items": { + "enum": [ + "ice", + "liquid", + "mud", + "plants", + "rocks", + "sand", + "slope", + "snow", + "web" + ], + "type": "string" + }, + "type": "array" + }, + "type": { + "description": "applyActiveEffect — the area applies `effects` to tokens inside it (and removes them on exit); difficultTerrain — the area is difficult terrain while the template stands.", + "enum": [ + "applyActiveEffect", + "difficultTerrain" + ], + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + "type": "array" +} - changed
Input schema / properties / charges / descriptionPrevious value: -"Cast activity: item charges (uses) consumed per cast. Omit for an at-will cast."New value: +"Cast activity: uses per cast. On an item with its own uses pool (a wand) this many charges are consumed FROM that pool per cast; on an item WITHOUT one (e.g. a feature) a pool of this size is created ON the activity (recovering per recoveryPeriod), one use per cast. Omit for an at-will cast." - added
Input schema / properties / durationAdded value: +{ + "description": "Duration OVERRIDE for the activity (sets duration.override so it beats the item's). dnd5e 6.0: the effects this activity applies (see `appliesEffects`) INHERIT this duration, including `expiry` — they carry no duration of their own. E.g. {value: 1, units: \"minute\"} for a 1-minute effect, or {expiry: \"targetEnd\"} for \"until the end of the target's next turn\".", + "properties": { + "concentration": { + "description": "Requires concentration.", + "type": "boolean" + }, + "expiry": { + "anyOf": [ + { + "enum": [ + "combatStart", + "roundStart", + "turnStart", + "combatEnd", + "roundEnd", + "turnEnd", + "shortRest", + "longRest", + "sourceStart", + "sourceEnd", + "targetStart", + "targetEnd" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "When the effects this activity applies lapse: core combat events (turnStart / turnEnd / roundEnd …, need a scalar duration too), shortRest / longRest, or the source/target turn pseudo-expiries — \"until the end of the target's next turn\" = targetEnd, \"until the start of your next turn\" = sourceStart. null clears." + }, + "units": { + "description": "Time period: inst (instantaneous) · spec (special) · turn round minute hour day week month year (scalar — give value) · disp / dstr (until dispelled / dispelled or triggered) · perm.", + "enum": [ + "inst", + "spec", + "turn", + "round", + "minute", + "hour", + "day", + "month", + "year", + "disp", + "dstr", + "perm" + ], + "type": "string" + }, + "value": { + "anyOf": [ + { + "minimum": 0, + "type": "number" + }, + { + "type": "string" + } + ], + "description": "Amount for a scalar unit — a number or a deterministic formula (\"@prof\")." + } + }, + "type": "object" +} - added
Input schema / properties / formlessAdded value: +{ + "description": "Transform activity (form mode): may the actor revert to \"no form\" from the prompt.", + "type": "boolean" +} - added
Input schema / properties / formsAdded value: +{ + "description": "Transform activity (form mode): the names of effects ON THIS ITEM, one per form — author them first with manage-effect (actorIdentifier + itemIdentifier), e.g. [\"Humanoid Form\", \"Hybrid Form\", \"Tiger Form\"]. Each form's changes ARE the transformation.", + "items": { + "minLength": 1, + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / profilesAdded value: +{ + "description": "Transform activity (cr / direct modes): the profiles offered. Wild Shape 2024 = cr profiles [{cr: 0.25, creatureTypes: [\"beast\"], restrictMovement: [\"fly\", \"swim\"], level: {max: 3}}, {cr: 0.5, creatureTypes: [\"beast\"], restrictMovement: [\"fly\"], level: {min: 4, max: 7}}, …].", + "items": { + "properties": { + "actor": { + "description": "direct mode: the creature — an exact Monster Manual name (\"Giant Wolf Spider\") or an Actor uuid.", + "type": "string" + }, + "cr": { + "anyOf": [ + { + "minimum": 0, + "type": "number" + }, + { + "type": "string" + } + ], + "description": "cr mode: the maximum challenge rating (e.g. 0.25, 1, or a formula)." + }, + "creatureTypes": { + "description": "cr mode: allowed creature types (e.g. [\"beast\"]).", + "items": { + "enum": [ + "aberration", + "beast", + "celestial", + "construct", + "dragon", + "elemental", + "fey", + "fiend", + "giant", + "humanoid", + "monstrosity", + "ooze", + "plant", + "undead" + ], + "type": "string" + }, + "type": "array" + }, + "level": { + "description": "Only offered when the transform level (class level via the identifier, else character level) is within [min, max].", + "properties": { + "max": { + "minimum": 0, + "type": "integer" + }, + "min": { + "minimum": 0, + "type": "integer" + } + }, + "type": "object" + }, + "name": { + "description": "Display name in the transform prompt.", + "type": "string" + }, + "restrictMovement": { + "description": "cr mode: creatures WITH these movement types are excluded (e.g. [\"fly\"], [\"swim\"]).", + "items": { + "enum": [ + "walk", + "burrow", + "climb", + "fly", + "jump", + "swim" + ], + "type": "string" + }, + "type": "array" + }, + "sizes": { + "description": "cr mode: allowed sizes.", + "items": { + "enum": [ + "tiny", + "sm", + "med", + "lg", + "huge", + "grg" + ], + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / recoveryPeriodAdded value: +{ + "description": "Cast activity with charges on a poolless item: when the activity-side pool recovers. Default \"lr\" (long rest).", + "enum": [ + "lr", + "sr", + "day", + "dawn", + "dusk" + ], + "type": "string" +} - added
Input schema / properties / teleportDistanceAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "number" + }, + { + "type": "string" + } + ], + "description": "Teleport activity: how far the target may be moved, in feet (a number or a deterministic formula like \"@prof * 10\"). Omit for ANY distance. Targets default to self — pass `affects` ({type: \"willing\", count: 1}) for \"you and one willing creature\"." +} - added
Input schema / properties / templateAdded value: +{ + "description": "Area template the activity places (sets target.override). Required for any `behaviors` — e.g. Web = {type: \"cube\", size: 20}, Spike Growth = {type: \"sphere\", size: 20}.", + "properties": { + "count": { + "anyOf": [ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "string" + } + ], + "description": "Templates placed." + }, + "height": { + "anyOf": [ + { + "minimum": 0, + "type": "number" + }, + { + "type": "string" + } + ], + "description": "cylinder / wall height." + }, + "size": { + "anyOf": [ + { + "minimum": 0, + "type": "number" + }, + { + "type": "string" + } + ], + "description": "Primary size in units — radius (sphere/cylinder), length (cone/line), width (cube)." + }, + "type": { + "description": "Shape: sphere / cube / cone / line / cylinder / radius (emanation) / wall / …", + "enum": [ + "circle", + "cone", + "cube", + "cylinder", + "line", + "radius", + "ring", + "sphere", + "square", + "wall" + ], + "type": "string" + }, + "units": { + "description": "Default \"ft\".", + "type": "string" + }, + "width": { + "anyOf": [ + { + "minimum": 0, + "type": "number" + }, + { + "type": "string" + } + ], + "description": "line / wall width." + } + }, + "required": [ + "type", + "size" + ], + "type": "object" +} - added
Input schema / properties / transformModeAdded value: +{ + "description": "Transform activity: \"cr\" (default) = pick any creature up to a CR (Wild Shape, Polymorph — profiles carry the max CR + size / type / movement filters); \"direct\" = a fixed list of creatures (profiles carry an `actor`); \"form\" = Select Form — the forms are EFFECTS on the item (a lycanthrope's Humanoid / Hybrid / Beast forms, Disguise Self) named in `forms`.", + "enum": [ + "direct", + "cr", + "form" + ], + "type": "string" +} - added
Input schema / properties / transformPresetAdded value: +{ + "description": "Transform activity (cr / direct): the transformation settings preset — wildshape (keep mental stats, merge features), polymorph (full replacement), polymorphSelf (appearance only).", + "enum": [ + "wildshape", + "polymorph", + "polymorphSelf" + ], + "type": "string" +} - added
Input schema / properties / transformSettingsAdded value: +{ + "description": "Transform activity (cr / direct): CUSTOM transformation settings instead of the bare preset (sets customize). Start from a preset and override — e.g. Wild Shape that also keeps resistances: transformPreset \"wildshape\" + {keep: [\"bio\",\"class\",\"feats\",\"hp\",\"languages\",\"mental\",\"tempHP\",\"type\",\"resistances\"]}. Not available in form mode.", + "properties": { + "effects": { + "description": "Which of the original's active effects carry over: all, origin (from the transforming item), otherOrigin, background, class, feat, equipment, spell.", + "items": { + "enum": [ + "all", + "origin", + "otherOrigin", + "background", + "class", + "feat", + "equipment", + "spell" + ], + "type": "string" + }, + "type": "array" + }, + "keep": { + "description": "What the transformed actor KEEPS of its original self: physical / mental (ability scores), saves, skills, gearProf, languages, class, feats, items, spells, bio, type, hp, tempHP, resistances, vision, self (appearance only).", + "items": { + "enum": [ + "physical", + "mental", + "saves", + "skills", + "gearProf", + "languages", + "class", + "feats", + "items", + "spells", + "bio", + "type", + "hp", + "tempHP", + "resistances", + "vision", + "self" + ], + "type": "string" + }, + "type": "array" + }, + "merge": { + "description": "Proficiencies merged (best of both): saves, skills.", + "items": { + "enum": [ + "saves", + "skills" + ], + "type": "string" + }, + "type": "array" + }, + "minimumAC": { + "description": "Deterministic formula floor for the new AC.", + "type": "string" + }, + "spellLists": { + "description": "Spell lists the form keeps (e.g. \"subclass:moon\").", + "items": { + "type": "string" + }, + "type": "array" + }, + "tempFormula": { + "description": "Deterministic formula for temp HP on transforming.", + "type": "string" + }, + "transformTokens": { + "description": "Also swap the token art/size (default true).", + "type": "boolean" + } + }, + "type": "object" +} - changed
Input schema / properties / type / descriptionPrevious value: -"Activity type. Required for add. \"utility\" = descriptive action (e.g. Multiattack). \"cast\" = link & cast a real compendium spell (e.g. a wand/staff) — see spellUuid."New value: +"Activity type. Required for add. \"utility\" = descriptive action (e.g. Multiattack). \"cast\" = link & cast a real compendium spell (e.g. a wand/staff) — see spellUuid. dnd5e 6.0: \"teleport\" moves the target up to teleportDistance (Misty Step); \"transform\" changes the actor into another creature or one of its own forms (Wild Shape, Polymorph, a lycanthrope's Shape-Shift) — see transformMode / profiles / forms." - changed
Input schema / properties / type / enumPrevious value: -[ - "attack", - "damage", - "save", - "heal", - "check", - "utility", - "cast" -]New value: +[ + "attack", + "damage", + "save", + "heal", + "check", + "utility", + "cast", + "teleport", + "transform" +]
- Added
manage-calendar - Changed
manage-effect12 fields changed- added
Input schema / properties / changes / items / properties / conditionsAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "items": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "type": "array" + } + ], + "description": "Per-change Filter — this change applies only while it holds. roll.* keys work ONLY on a RULES-type change (dnd5e.advantage / bonus / minimum / maximum), the only changes evaluated at roll time: roll.ability, roll.skill, roll.type, roll.attack.type / .mode / .classification, roll.damage.type, roll.proficient, roll.tool …, e.g. {k:\"roll.attack.type\", v:\"ranged\"}. A core-type change is evaluated at data preparation, where there is no roll data." +} - changed
Input schema / properties / changes / items / properties / key / descriptionPrevious value: -"Data path to modify, e.g. \"system.attributes.ac.bonus\" or \"system.traits.dr.value\"."New value: +"Data path to modify, e.g. \"system.attributes.ac.bonus\" or \"system.traits.dr.value\" — OR, for a dnd5e.* rules type, a roll CATEGORY: attack | check | d20 | save | damage | healing (damage/healing take dnd5e.bonus only)." - added
Input schema / properties / changes / items / properties / phaseAdded value: +{ + "description": "When the change applies during data preparation: \"initial\" (the default, before derived data) or \"final\" (after).", + "enum": [ + "initial", + "final" + ], + "type": "string" +} - added
Input schema / properties / changes / items / properties / priorityAdded value: +{ + "description": "Application order (lower first). Omit for the default.", + "type": "number" +} - added
Input schema / properties / changes / items / properties / replacementAdded value: +{ + "description": "Substitute @attribute strings in the value with static data from the ORIGIN actor (the one applying the effect) or the TARGET actor, instead of evaluating them live. Omit = evaluate live.", + "enum": [ + "origin", + "target" + ], + "type": "string" +} - changed
Input schema / properties / changes / items / properties / type / descriptionPrevious value: -"How the value is applied. Default \"add\"."New value: +"How the value is applied. Core (CONST.ACTIVE_EFFECT_CHANGE_TYPES): add / subtract / multiply / override / upgrade / downgrade / custom on a data path. dnd5e 6.0 RULES (evaluated at roll time, key = a roll category): dnd5e.advantage, dnd5e.bonus, dnd5e.minimum, dnd5e.maximum. Default \"add\"." - changed
Input schema / properties / changes / items / properties / type / enumPrevious value: -[ - "add", - "multiply", - "override", - "upgrade", - "downgrade", - "custom" -]New value: +[ + "add", + "subtract", + "multiply", + "override", + "upgrade", + "downgrade", + "custom", + "dnd5e.advantage", + "dnd5e.bonus", + "dnd5e.maximum", + "dnd5e.minimum" +] - changed
Input schema / properties / changes / items / properties / value / descriptionPrevious value: -"The change value (stored as a string; e.g. \"2\", \"fire\")."New value: +"The change value (stored as a string; e.g. \"2\", \"fire\"). Rules: dnd5e.bonus = \"1d4\" / \"2\" / \"@prof\" / \"1d4[fire]\"; dnd5e.advantage = +1 -1 =+1 =-1 >=0 <=0 (+1 add advantage, -1 add disadvantage, =+1/=-1 force, >=0 ignore disadvantage, <=0 ignore advantage); dnd5e.minimum / maximum = a deterministic formula (\"10\", \"@prof\") — the d20 floor / ceiling." - added
Input schema / properties / conditionsAdded value: +{ + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "items": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "type": "array" + } + ], + "description": "A Filter: {k: \"<roll-data path>\", v: <value>, o?: \"<comparison>\"} (exact when o is omitted; comparisons: in has hasany hasall contains icontains startswith endswith empty gt gte lt lte subsetof), an operator {o: \"AND\"|\"OR\"|\"NAND\"|\"NOR\"|\"XOR\", v: [filters]} / {o: \"NOT\", v: filter}, or a bare array (AND). Examples: {k:\"statuses.bloodied\", v:1} · {k:\"item.properties\", o:\"has\", v:\"thr\"} · {k:\"roll.ability\", v:\"str\"} (roll.* keys only on a CHANGE). Also accepts the JSON string." + }, + { + "type": "null" + } + ], + "description": "Effect-level Filter — the WHOLE effect is suppressed while it is false, e.g. {k:\"statuses.bloodied\", v:1} (\"while Bloodied\") or, on an enchantment, {o:\"OR\", v:[{k:\"item.type.value\", o:\"in\", v:[\"simpleR\",\"martialR\"]}, {k:\"item.properties\", o:\"has\", v:\"thr\"}]}. roll.* keys are NOT available here (use a change condition). On edit, pass null / {} to clear." +} - added
Input schema / properties / durationAdded value: +{ + "description": "Effect duration ({value, units, expiry?}); omit for a permanent/passive effect.", + "properties": { + "expiry": { + "anyOf": [ + { + "enum": [ + "combatStart", + "roundStart", + "turnStart", + "combatEnd", + "roundEnd", + "turnEnd", + "shortRest", + "longRest", + "sourceStart", + "sourceEnd", + "targetStart", + "targetEnd" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "When the effect lapses. Core combat events (combatStart roundStart turnStart combatEnd roundEnd turnEnd): with NO value the effect expires at the FIRST matching event; with a value+units, at the first matching event after the value elapses. The dnd5e events are duration-less and take no value: shortRest / longRest, and the source/target turn pseudo-expiries: \"until the end of the target's next turn\" = targetEnd, \"until the start of your next turn\" = sourceStart. Omit for the default; null clears." + }, + "rounds": { + "description": "DEPRECATED 5.x alias for value + units \"rounds\".", + "minimum": 0, + "type": "number" + }, + "seconds": { + "description": "DEPRECATED 5.x alias for value + units \"seconds\".", + "minimum": 0, + "type": "number" + }, + "turns": { + "description": "DEPRECATED 5.x alias for value + units \"turns\".", + "minimum": 0, + "type": "number" + }, + "units": { + "description": "Foundry v14 duration units (CONST.ACTIVE_EFFECT_DURATION_UNITS; rounds/turns count in combat).", + "enum": [ + "seconds", + "minutes", + "hours", + "days", + "months", + "years", + "rounds", + "turns" + ], + "type": "string" + }, + "value": { + "description": "How long, in `units`.", + "minimum": 0, + "type": "number" + } + }, + "type": "object" +} - added
Input schema / properties / magicalAdded value: +{ + "description": "dnd5e 6.0: mark the effect as magical (e.g. a magic-item or spell effect).", + "type": "boolean" +} - changed
Input schema / properties / patch / descriptionPrevious value: -"Edit: extra dot-paths relative to the effect, e.g. {\"duration.rounds\": 10}."New value: +"Edit: extra dot-paths relative to the effect, e.g. {\"duration.value\": 10, \"duration.units\": \"rounds\"} or {\"tint\": \"#ff0000\"}. Changes live at \"system.changes\"."
- Added
manage-group-members - Removed
parse-ddb-character - Added
pull-users-to-scene - Changed
search-compendium-creatures4 fields changed- removed
Input schema / properties / hasLegendaryActions / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "string" - } -] - added
Input schema / properties / hasLegendaryActions / typeAdded value: +[ + "boolean", + "string" +] - removed
Input schema / properties / hasSpells / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "string" - } -] - added
Input schema / properties / hasSpells / typeAdded value: +[ + "boolean", + "string" +]
- Changed
search-compendium-items2 fields changed- removed
Input schema / properties / magical / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "string" - } -] - added
Input schema / properties / magical / typeAdded value: +[ + "boolean", + "string" +]
- Changed
set-actor-ownership2 fields changed- changed
Input schema / properties / permissionLevel / descriptionPrevious value: -"Permission level to assign: NONE (no access), LIMITED (basic view), OBSERVER (full view, no control), OWNER (full control)"New value: +"Permission level to assign: LIMITED (basic view), OBSERVER (full view, no control), OWNER (full control), NONE (explicitly DENY — stores a level-0 entry that overrides the actor's default, so it revokes access the player would otherwise inherit), INHERIT (remove the player's entry entirely so the actor's default ownership applies again)" - changed
Input schema / properties / permissionLevel / enumPrevious value: -[ - "NONE", - "LIMITED", - "OBSERVER", - "OWNER" -]New value: +[ + "NONE", + "LIMITED", + "OBSERVER", + "OWNER", + "INHERIT" +]
- Added
set-landing-scene - Added
set-primary-party - Changed
update-actor16 fields changed- changed
Input schema / properties / ac / descriptionPrevious value: -"Armor class."New value: +"Armor class (dnd5e 6.0 model): override = fixed AC; natural = natural armor; calcs / formulas = what the sheet may calculate from." - changed
Input schema / properties / ac / properties / calc / descriptionPrevious value: -"AC calculation: flat, natural, default, mage, draconic, unarmoredMonk, ..."New value: +"DEPRECATED dnd5e 5.x alias, still translated: \"flat\" (+flat → override), \"natural\" (+flat), \"default\" (reset calcs), \"custom\" (+formula), or a calcs key. Prefer the fields above." - added
Input schema / properties / ac / properties / calcsAdded value: +{ + "description": "Base calculations the actor QUALIFIES for — the sheet uses the best: unarmored (10 + DEX), armored (worn armor), mage, draconic, unarmoredMonk, unarmoredBarb, unarmoredBard, natural. Replaces the list; default is [\"unarmored\",\"armored\"].", + "items": { + "type": "string" + }, + "type": "array" +} - changed
Input schema / properties / ac / properties / flat / descriptionPrevious value: -"Flat AC value (used by calc \"flat\" / \"natural\")."New value: +"DEPRECATED 5.x alias — see calc." - added
Input schema / properties / ac / properties / formula / descriptionAdded value: +"DEPRECATED 5.x alias — see calc." - added
Input schema / properties / ac / properties / formulasAdded value: +{ + "description": "Custom AC formulas, e.g. [{formula:\"13 + @abilities.dex.mod\", label:\"Mage Armor\"}]; armored/shielded = only qualifies when (not) wearing armor / a shield. Replaces the list.", + "items": { + "properties": { + "armored": { + "type": [ + "boolean", + "null" + ] + }, + "formula": { + "minLength": 1, + "type": "string" + }, + "label": { + "type": "string" + }, + "shielded": { + "type": [ + "boolean", + "null" + ] + } + }, + "required": [ + "formula" + ], + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / ac / properties / naturalAdded value: +{ + "description": "Natural armor: AC = this value (+ shield, bonuses, cover). Sets calcs to [\"natural\"] and clears any override.", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / ac / properties / overrideAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "FIXED AC that replaces every calculation (a stat block \"AC 17\"; armor/shield no longer matter). null clears it so the calculations apply again." +} - changed
Input schema / properties / movement / descriptionPrevious value: -"Movement speeds (in the given units, default feet)."New value: +"Movement speeds (in the given units, default feet). Stored under movement.speeds.*." - added
Input schema / properties / movement / properties / jumpAdded value: +{ + "minimum": 0, + "type": "number" +} - changed
Input schema / properties / source / descriptionPrevious value: -"Source metadata (book / page / rules edition)."New value: +"[NPC] Source metadata (book / page / rules edition) — system.source." - added
Input schema / properties / spellcastingAdded value: +{ + "description": "[NPC] Spellcasting configuration — caster level and/or casting ability. PCs derive both from their class advancement, so this group is skipped with a warning on a player character.", + "properties": { + "ability": { + "anyOf": [ + { + "enum": [ + "str", + "dex", + "con", + "int", + "wis", + "cha" + ], + "type": "string" + }, + { + "const": "", + "type": "string" + } + ], + "description": "Casting ability (system.attributes.spellcasting) — drives spell save DC (8 + prof + mod) and spell attack bonus. \"\" clears it. A caster left unset computes off a +0 modifier, so an INT 16 mage reads DC 10 instead of DC 13 until this is set." + }, + "level": { + "description": "Caster level — the NPC sheet's \"Spellcasting Level\" (system.attributes.spell.level). This is what DERIVES the spell-slot pools: leave it 0 and the sheet shows slots as \"4/0\" and a long rest restores them to nothing. 0 = not a slot caster (the 2024-MM default, where monsters use 1/Day free casts instead of slots — see add-free-cast).", + "maximum": 20, + "minimum": 0, + "type": "integer" + } + }, + "type": "object" +} - added
Input schema / properties / tokenDisplayBarsAdded value: +{ + "description": "Prototype-token RESOURCE-BAR (HP) visibility — the default for dropped tokens, same modes as tokenDisplayName. Set \"none\" to hide the health bar on background / window-dressing NPCs.", + "enum": [ + "none", + "control", + "owner-hover", + "hover", + "owner", + "always" + ], + "type": "string" +} - added
Input schema / properties / tokenDisplayNameAdded value: +{ + "description": "Prototype-token NAMEPLATE visibility — the default for tokens dragged from this actor: none (never) · control (only when selected) · owner-hover · hover (anyone hovering) · owner (always, to owners) · always (always, to everyone). Same modes as update-token for placed tokens; set \"none\" for window-dressing NPCs that should show no name.", + "enum": [ + "none", + "control", + "owner-hover", + "hover", + "owner", + "always" + ], + "type": "string" +} - removed
Input schema / properties / treasure / properties / customRemoved value: -{ - "description": "Free-text custom entry stored alongside the set (replaces the existing custom string).", - "type": "string" -} - added
Input schema / properties / weaponMasteriesAdded value: +{ + "description": "[PC] 2024 Weapon Mastery selections — the kinds of weapons whose mastery property the character can use (system.traits.weaponProf.mastery). Swappable on a Long Rest per the class feature; the count allowed is the class's business (fighter 3, paladin/ranger 2 at low levels) — the tool does not enforce it.", + "properties": { + "mode": { + "default": "replace", + "description": "replace (default) overwrites the whole list; add/remove merge with the current list.", + "enum": [ + "replace", + "add", + "remove" + ], + "type": "string" + }, + "values": { + "default": [], + "description": "Base weapon KINDS (\"greatsword\", \"longbow\", \"handcrossbow\", ...) — NOT mastery names: each weapon carries its own mastery property (vex/topple/graze/...), the actor just unlocks it per kind.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
update-folder1 field changed- added
Input schema / properties / sortAdded value: +{ + "description": "The Folder document's sort value. ⚠️ ADVISORY, not a lever: writing it persists and reads back, but the v14 sidebar was observed rendering sibling FOLDERS ALPHABETICALLY BY NAME regardless of it (verified live 2026-08-12 on Scene folders — 100000/200000/300000 against siblings at 0 did not move them). To control folder ORDER, control the NAME (this world uses \"NN - \" prefixes, 99 for undetermined).", + "type": "integer" +}
- Changed
update-rolltable6 fields changed- added
Input schema / properties / editResults / items / properties / range / itemsAdded value: +false - added
Input schema / properties / editResults / items / properties / range / maxItemsAdded value: +2 - added
Input schema / properties / editResults / items / properties / range / minItemsAdded value: +2 - added
Input schema / properties / results / items / properties / range / itemsAdded value: +false - added
Input schema / properties / results / items / properties / range / maxItemsAdded value: +2 - added
Input schema / properties / results / items / properties / range / minItemsAdded value: +2
- Changed
update-scene2 fields changed- removed
Input schema / properties / fog / properties / overlay / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / fog / properties / overlay / typeAdded value: +[ + "string", + "null" +]
- Changed
update-tiles2 fields changed- changed
Input schema / properties / tiles / items / properties / height / descriptionPrevious value: -"New height in px (resize the tile)."New value: +"New height in px (resize; the top-left corner stays fixed unless y is also given)." - changed
Input schema / properties / tiles / items / properties / width / descriptionPrevious value: -"New width in px (resize the tile)."New value: +"New width in px (resize; the top-left corner stays fixed unless x is also given)."
- Changed
update-token1 field changed- added
Input schema / properties / imagePathAdded value: +{ + "description": "RESKIN the placed token(s): new token art (texture.src) — a world-relative path (e.g. \"assets/tokens/morgash.png\") or URL; a still IMAGE or an animated VIDEO (.webm/.mp4) both work on a token. Applied to every matched token; the path is existence-checked first, and a 404 leaves the current art unchanged (with a warning) instead of breaking it. Changes ONLY the placed instance(s) — the actor's portrait/prototype art is set-actor-art.", + "minLength": 1, + "type": "string" +}
- Added
update-user - Changed
update-walls6 fields changed- removed
Input schema / properties / walls / items / properties / thresholdLight / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Input schema / properties / walls / items / properties / thresholdLight / typeAdded value: +[ + "number", + "null" +] - removed
Input schema / properties / walls / items / properties / thresholdSight / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Input schema / properties / walls / items / properties / thresholdSight / typeAdded value: +[ + "number", + "null" +] - removed
Input schema / properties / walls / items / properties / thresholdSound / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Input schema / properties / walls / items / properties / thresholdSound / typeAdded value: +[ + "number", + "null" +]
54 tool updates
v1.3.0- Changed
add-item1 field changed- changed
Input schema / properties / actorIdentifier / descriptionPrevious value: -"Target actor (name or id) to attach the item to (partial match). Omit to create a reusable world Item in the Items sidebar instead."New value: +"Target actor (name or id) to attach the item to (partial match). Also accepts a placed TOKEN id (from list-tokens) — the item is then added to that token INSTANCE's own delta, not the base actor. Omit to create a reusable world Item in the Items sidebar instead."
- Changed
apply-condition1 field changed- changed
Input schema / properties / actorIdentifier / descriptionPrevious value: -"Name or id of the actor (partial name match supported)."New value: +"Name or id of the actor (partial name match supported). Also accepts a placed TOKEN id (from list-tokens) — the condition then applies to that token INSTANCE only, not the base actor."
- Changed
author-npc1 field changed- added
Input schema / properties / dispositionAdded value: +{ + "enum": [ + "hostile", + "neutral", + "friendly", + "secret" + ], + "type": "string" +}
- Changed
create-actor-from-compendium1 field changed- added
Input schema / properties / dispositionAdded value: +{ + "description": "Prototype-token disposition for the created copies — YOUR judgment call (shared authoring-policy house token rules): 'neutral' for civilians/townsfolk/bystanders, 'friendly' for allies, 'hostile' for enemies. Omit to default by source type (copied PC pregen → friendly, copied monster → hostile).", + "enum": [ + "friendly", + "neutral", + "hostile", + "secret" + ], + "type": "string" +}
- Added
create-drawings - Added
create-lights - Added
create-region - Changed
create-scene7 fields changed- changed
Input schema / properties / environment / descriptionPrevious value: -"A v12+ scene's full environment{} mood object, carried whole (darknessLevel, globalLight{...}, cycle, base, dark{hue,luminosity}…). Prefer this over the flat darkness/globalLight knobs when importing a pack so the authored day/night mood round-trips."New value: +"A v12+ scene's full environment{} mood object, carried whole (darknessLevel, globalLight{...}, cycle, base, dark{hue,luminosity}…). Deep-merged, so a partial mood patch layers onto the scene; prefer this over the flat darkness/globalLight knobs when importing or re-mooding a pack scene." - changed
Input schema / properties / flags / descriptionPrevious value: -"Document flags to stamp on the new scene, namespaced by scope — e.g. {\"tom-cartos-import\":{sourceModule,sourceId}} for import provenance/dedup. Merged verbatim."New value: +"Document flags namespaced by scope — e.g. {\"tom-cartos-import\":{sourceModule,sourceId}} for import provenance/dedup. Deep-merged over any existing flags (re-stampable on update)." - changed
Input schema / properties / fog / descriptionPrevious value: -"A v12+ scene's full fog{} object (exploration, overlay, colors), carried whole."New value: +"A v12+ scene's full fog{} object (exploration, overlay, colors), carried whole (deep-merged)." - added
Input schema / properties / folderAdded value: +{ + "description": "Scene folder id or exact name to place the scene in (created if absent).", + "type": "string" +} - changed
Input schema / properties / initial / descriptionPrevious value: -"The saved initial camera view {x,y,scale} to restore on scene load."New value: +"The saved initial camera view {x,y,scale} to restore on scene load (deep-merged)." - added
Input schema / properties / navigationAdded value: +{ + "description": "Whether the scene appears in the player navigation bar. Set false for a DM-only scene (keeps it off the nav bar). Omit for Foundry default.", + "type": "boolean" +} - changed
Input schema / properties / regions / items / properties / behaviors / descriptionPrevious value: -"Region behaviors carried whole — incl. teleportToken whose system.destination (Scene.<id>.Region.<id>) is rewritten post-import by remap-teleporters."New value: +"Region behaviors carried whole — incl. teleportToken whose system.destinations[] (each Scene.<id>.Region.<id>) are rewritten post-import by remap-teleporters."
- Added
create-sounds - Added
create-teleporter - Added
create-tiles - Added
create-walls - Added
delete-drawings - Added
delete-journal-page - Added
delete-lights - Changed
delete-note1 field changed- changed
Input schema / properties / noteIds / descriptionPrevious value: -"Note ids to delete (from create-scene-notes)."New value: +"Note ids to delete (from create-scene-notes/list-notes)."
- Added
delete-region - Added
delete-sounds - Added
delete-tiles - Added
delete-tokens - Added
delete-walls - Changed
get-actor1 field changed- changed
Input schema / properties / identifier / descriptionPrevious value: -"Character name or ID to look up"New value: +"Character name or ID to look up. Also accepts a placed TOKEN id (from list-tokens) to read that token INSTANCE's live state — an unlinked NPC token can differ from its base actor."
- Added
get-rolltable - Changed
import-item1 field changed- changed
Input schema / properties / actorIdentifier / descriptionPrevious value: -"Target actor (name or id, partial match) to copy the item onto. Omit to copy into the world Items sidebar instead."New value: +"Target actor (name or id, partial match) to copy the item onto. Also accepts a placed TOKEN id (from list-tokens) — the copy then lands on that token INSTANCE's own delta, not the base actor. Omit to copy into the world Items sidebar instead."
- Added
list-drawings - Added
list-folders - Added
list-lights - Added
list-notes - Added
list-regions - Added
list-sounds - Added
list-tiles - Added
list-tokens - Added
list-walls - Changed
manage-activity1 field changed- changed
Input schema / properties / actorIdentifier / descriptionPrevious value: -"If set, the item is embedded on this actor; omit to target a world (sidebar) item."New value: +"If set, the item is embedded on this actor; omit to target a world (sidebar) item. Also accepts a placed TOKEN id (from list-tokens) — the activity edit then lands on that token INSTANCE's own delta, not the base actor."
- Changed
manage-effect1 field changed- changed
Input schema / properties / actorIdentifier / descriptionPrevious value: -"Actor that owns the effects (or owns the item when itemIdentifier is also set)."New value: +"Actor that owns the effects (or owns the item when itemIdentifier is also set). Also accepts a placed TOKEN id (from list-tokens) — the effect then lands on that token INSTANCE's own delta, not the base actor."
- Added
place-tokens - Changed
remove-from-actor1 field changed- changed
Input schema / properties / actorIdentifier / descriptionPrevious value: -"Actor name or ID to remove the items from."New value: +"Actor name or ID to remove the items from. Also accepts a placed TOKEN id (from list-tokens) — the removal then hits that token INSTANCE's own delta, not the base actor."
- Changed
set-actor-art2 fields changed- changed
Input schema / properties / imagePath / descriptionPrevious value: -"Data-relative path to the image."New value: +"Data-relative path to the PORTRAIT image. Must be a STILL image — actor.img rejects video. Also used for the token texture unless tokenImagePath is given." - added
Input schema / properties / tokenImagePathAdded value: +{ + "description": "Optional Data-relative path for the prototype TOKEN texture, which (unlike the portrait) accepts an animated VIDEO (.webm/.mp4/.m4v/.ogg) — e.g. a JB2A effect. Defaults to imagePath.", + "type": "string" +}
- Added
set-journal-page-visibility - Changed
update-actor7 fields changed- changed
Input schema / properties / actorIdentifier / descriptionPrevious value: -"Name or id of the actor to edit (partial name match supported)."New value: +"Name or id of the actor to edit (partial name match supported). Also accepts a placed TOKEN id (from list-tokens): the edit then lands on that token INSTANCE's own actor (its delta), not the base actor — the way to edit ONE placed copy of an unlinked NPC, since base-actor edits never reach tokens already on a scene." - added
Input schema / properties / dispositionAdded value: +{ + "description": "Prototype-token disposition (friend vs foe). Set 'friendly' to mark an NPC an ally (e.g. a freed captive), 'hostile' for an enemy, 'neutral' for a bystander.", + "enum": [ + "hostile", + "neutral", + "friendly", + "secret" + ], + "type": "string" +} - added
Input schema / properties / tokenAutoRotateAdded value: +{ + "description": "Prototype-token auto-rotation: true = the token turns to face its movement (lockRotation off — the house default; new creations already get it), false = fixed facing.", + "type": "boolean" +} - added
Input schema / properties / tokenNameAdded value: +{ + "description": "Prototype-token nameplate, decoupled from the actor name — e.g. actor \"Morgash the Gravemaker\" whose dropped tokens read just \"Morgash\". A plain `name` rename keeps the two in lockstep; pass tokenName (alone or alongside name) to make them differ. Placed tokens keep their own name — retitle those with update-token.", + "minLength": 1, + "type": "string" +} - added
Input schema / properties / tokenRingAdded value: +{ + "description": "Prototype-token dynamic ring: false = plain token (the house default; new creations already get it), true = re-enable the ring (its colors/subject config is preserved).", + "type": "boolean" +} - added
Input schema / properties / tokenRotationAdded value: +{ + "description": "Prototype-token facing in degrees (0–359) — the default angle a dropped token faces. Same behavior as update-token for placed tokens: a lock-rotation prototype (tokenAutoRotate false) HIDES the angle, so setting a rotation without also setting tokenAutoRotate AUTO-UNLOCKS rotation (and warns) so the facing shows. (elevation / hidden / x / y are PLACEMENT-only — a prototype has no such fields; set those on a dropped token with update-token.)", + "type": "number" +} - added
Input schema / properties / tokenScaleAdded value: +{ + "description": "Prototype-token art scale — the \"Scale (Ratio)\" slider on the token Appearance tab (sets texture.scaleX and scaleY together). 1 = normal, 1.5 = 50% larger, 2 = double. Scales only the art within the token's grid footprint; it does NOT change the token's size (grid spaces).", + "exclusiveMinimum": 0, + "type": "number" +}
- Changed
update-actor-item1 field changed- changed
Input schema / properties / actorIdentifier / descriptionPrevious value: -"Name or id of the actor that owns the item (partial name match supported)."New value: +"Name or id of the actor that owns the item (partial name match supported). Also accepts a placed TOKEN id (from list-tokens): the edit then lands on that token INSTANCE's own delta, not the base actor — the way to re-gear ONE placed copy of an unlinked NPC (base-actor edits never reach tokens already on a scene)."
- Added
update-drawings - Added
update-folder - Changed
update-journal1 field changed- added
Input schema / properties / playerVisibleAdded value: +{ + "description": "Set the written page visibility: true = players can OBSERVE it (a handout), false = GM-only. Omit to leave it unchanged. To flip an EXISTING page without rewriting its content, use set-journal-page-visibility.", + "type": "boolean" +}
- Added
update-lights - Changed
update-note1 field changed- changed
Input schema / properties / noteId / descriptionPrevious value: -"The Note id to update (from create-scene-notes)."New value: +"The Note id to update (from create-scene-notes/list-notes)."
- Changed
update-quest-journal1 field changed- added
Input schema / properties / playerVisibleAdded value: +{ + "description": "Set the target/new page visibility: true = players can OBSERVE it (a handout), false = GM-only. Omit to leave visibility unchanged (a new page then inherits GM-only).", + "type": "boolean" +}
- Added
update-region - Changed
update-rolltable2 fields changed- added
Input schema / properties / editResultsAdded value: +{ + "description": "TARGETED per-entry edits — fix one entry's text/link/weight/range in place; every other entry (ranges, weights, @UUID item links) is left byte-identical. Mutually exclusive with `results`.", + "items": { + "properties": { + "name": { + "description": "Display label for the `uuid` link (default: the resolved document name).", + "minLength": 1, + "type": "string" + }, + "range": { + "description": "New explicit [low, high] roll range for THIS entry only — other entries are untouched (an introduced overlap/gap is warned, not blocked).", + "prefixItems": [ + { + "type": "integer" + }, + { + "type": "integer" + } + ], + "type": "array" + }, + "resultId": { + "description": "Target the entry by TableResult id (from get-rolltable) — always unambiguous.", + "minLength": 1, + "type": "string" + }, + "roll": { + "description": "Target the entry whose roll range covers this die face (e.g. 7 = \"entry 07\" on a d12). Errors if no entry — or more than one — covers it. Provide roll OR resultId.", + "type": "integer" + }, + "text": { + "description": "REPLACE this entry's text (HTML / @UUID enrichers allowed — the raw current text is in get-rolltable; copy it and change only what you need). Combine with `uuid` via {{link}}.", + "minLength": 1, + "type": "string" + }, + "uuid": { + "description": "Re-link the entry to a REAL item by compendium/world UUID (premium-book only, SRD refused) — rendered as a clickable @UUID link, alone or into a {{link}} placeholder in `text`.", + "minLength": 1, + "type": "string" + }, + "weight": { + "description": "New relative weight for this entry.", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "type": "object" + }, + "minItems": 1, + "type": "array" +} - changed
Input schema / properties / results / descriptionPrevious value: -"If provided, replaces ALL existing results."New value: +"DESTRUCTIVE: replaces ALL existing results (deleted + recreated with auto-assigned ranges). To change one entry, use editResults instead."
- Changed
update-scene4 fields changed- added
Input schema / properties / environmentAdded value: +{ + "additionalProperties": {}, + "description": "A v12+ scene's full environment{} mood object, carried whole (darknessLevel, globalLight{...}, cycle, base, dark{hue,luminosity}…). Deep-merged, so a partial mood patch layers onto the scene; prefer this over the flat darkness/globalLight knobs when importing or re-mooding a pack scene.", + "properties": { + "cycle": { + "type": "boolean" + }, + "darknessLevel": { + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "globalLight": { + "additionalProperties": {}, + "properties": { + "enabled": { + "type": "boolean" + } + }, + "type": "object" + } + }, + "type": "object" +} - added
Input schema / properties / flagsAdded value: +{ + "additionalProperties": {}, + "description": "Document flags namespaced by scope — e.g. {\"tom-cartos-import\":{sourceModule,sourceId}} for import provenance/dedup. Deep-merged over any existing flags (re-stampable on update).", + "propertyNames": { + "type": "string" + }, + "type": "object" +} - added
Input schema / properties / fogAdded value: +{ + "additionalProperties": {}, + "description": "A v12+ scene's full fog{} object (exploration, overlay, colors), carried whole (deep-merged).", + "properties": { + "exploration": { + "type": "boolean" + }, + "overlay": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "type": "object" +} - added
Input schema / properties / initialAdded value: +{ + "additionalProperties": {}, + "description": "The saved initial camera view {x,y,scale} to restore on scene load (deep-merged).", + "properties": { + "scale": { + "type": "number" + }, + "x": { + "type": "number" + }, + "y": { + "type": "number" + } + }, + "type": "object" +}
- Added
update-sounds - Added
update-tiles - Added
update-token - Added
update-walls
95 tool updates
v1.2.2- First observed
add-feature - First observed
add-item - First observed
add-journal-image - First observed
apply-condition - First observed
asset-info - First observed
asset-url - First observed
author-npc - First observed
bulk-delete - First observed
content-audit - First observed
copy-asset - First observed
create-actor-from-compendium - First observed
create-asset-folder - First observed
create-cards - First observed
create-folder - First observed
create-item - First observed
create-journal - First observed
create-pc - First observed
create-pc-from-prefab - First observed
create-playlist - First observed
create-quest-journal - First observed
create-rolltable - First observed
create-scene - First observed
create-scene-notes - First observed
delete-actor - First observed
delete-asset - First observed
delete-cards - First observed
delete-chat-messages - First observed
delete-folder - First observed
delete-item - First observed
delete-journal - First observed
delete-note - First observed
delete-playlist - First observed
delete-rolltable - First observed
delete-scene - First observed
download-asset - First observed
export-chat-log - First observed
find-asset-references - First observed
get-actor - First observed
get-actor-entity - First observed
get-compendium-entry - First observed
get-current-scene - First observed
get-item - First observed
get-scene-dimensions - First observed
get-world-info - First observed
import-cards - First observed
import-item - First observed
import-rolltable - First observed
inspect-pc-advancement - First observed
level-up-pc - First observed
link-quest-to-npc - First observed
list-actor-ownership - First observed
list-actors - First observed
list-assets - First observed
list-cards - First observed
list-chat-messages - First observed
list-compendium-packs - First observed
list-items - First observed
list-journals - First observed
list-playlists - First observed
list-rolltables - First observed
list-scenes - First observed
manage-activity - First observed
manage-effect - First observed
move-asset - First observed
move-documents - First observed
parse-ddb-character - First observed
post-item-card - First observed
read-pack - First observed
relink-asset - First observed
remap-teleporters - First observed
remove-from-actor - First observed
request-roll - First observed
roll-on-table - First observed
screenshot-scene - First observed
search-actor-contents - First observed
search-compendium - First observed
search-compendium-creatures - First observed
search-compendium-items - First observed
search-compendium-spells - First observed
search-journals - First observed
send-chat-message - First observed
set-actor-art - First observed
set-actor-ownership - First observed
set-user-avatar - First observed
update-actor - First observed
update-actor-item - First observed
update-item - First observed
update-journal - First observed
update-note - First observed
update-playlist - First observed
update-quest-journal - First observed
update-rolltable - First observed
update-scene - First observed
upload-asset - First observed
upload-asset-tree
TDQS
Scored across 151 tools
The vast majority of tools have clearly distinct purposes, and the detailed descriptions eliminate most ambiguity. However, the sheer number of actor/item creation and editing tools (create-pc, create-pc-from-prefab, create-actor-from-compendium, import-item, add-item) creates potential for misselection despite the clarifying descriptions.
Tool names follow an almost perfectly consistent verb-noun hyphenated pattern (list-, create-, update-, delete-, get-, import-, etc.). A few exceptions like content-audit and asset-info are minor and do not undermine the overall predictability.
With 151 tools, this server is extremely bloated compared to a typical well-scoped MCP server. Even for a comprehensive Foundry VTT integration, the number is far beyond what an agent can efficiently navigate, causing significant selection overhead.
The tool surface is exceptionally comprehensive, offering CRUD for nearly every Foundry document type, plus extensive D&D 5e authoring, compendium, asset, and chat features. Minor gaps exist (e.g., no update-cards tool, no compendium write operations), but they are not critical for the server's core purpose.
Maintenance
Related MCP Connectors
Connect any AI to your Foundry VTT world: actors, combat, dice, journals, tokens, compendiums.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Official remote MCP server for Archivist AI TTRPG campaign memory: characters, sessions, and more.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceA Model Context Protocol server that integrates with FoundryVTT, allowing AI assistants to interact with tabletop gaming sessions through natural language to query actors, roll dice, generate content, and manage game worlds.42 npm32MIT
- FlicenseNot gradedqualityNot gradedmaintenanceIntegrates with FoundryVTT tabletop gaming sessions, allowing AI assistants to query game data, roll dice, generate content (NPCs, loot, encounters), manage combat, and provide tactical suggestions through natural language.1 npm-
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to Dungeons & Dragons 5e game information via the Model Context Protocol, enabling queries for spells, monsters, equipment, and more.48MIT
- FlicenseNot gradedqualityCmaintenanceEnables 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.-