Skip to main content
Glama
Txpple

fvtt-mcp-molten5e

by Txpple

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 project

In 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

start-session

boot the world and report its state (read-only)

stat-block-builder

a complete NPC from a stat block — stats, actions, spells, effects, inventory, loot, art

pc-builder

a complete player character — class, species, background, choices, spells, gear, art, owner

physical-item-builder

weapons, armor, wondrous items, potions, loot — the real PHB / DMG item first

scene-builder

a map image into a ready-to-play scene: walls, lights, mood, playlist, journal

journal-builder

quests, handouts, lore, boxed text, GM notes, recaps — linked to each other

table-builder · cards-builder · playlist-builder

roll tables, card decks, music and ambience

soundscape-builder

atmospheric sound for a scene (companion module — below)

tom-cartos-import

a scene-pack module into your world: scenes, walls, lights, teleporters, legend

token-cutout

a cut-out token image onto an actor

chat-and-narration

narration, NPC dialogue, whispers, roll requests, item cards; export or prune the log

session-scribe

a Craig (Discord) recording → transcript aligned with the chat log → recap, combat report, GM notes

session-audit · plot-drift-check · bestiary-builder

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.mdcampaign-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 authoringauthor-npc, create-pc / level-up-pc, add-feature, add-item, manage-effect, manage-activity, apply-condition, set-actor-art, the quest journals, content-audit.

  • Readingget-world-info, search-compendium (creatures / spells / items, with facets), get-compendium-entry, read-pack, search-journals, screenshot-scene.

  • At the tablesend-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):

FOUNDRY_HOST

Means

generic (default)

any Foundry at FOUNDRY_URL; FOUNDRY_WAKE_URL if it sleeps, FOUNDRY_DATA_DIR / FOUNDRY_WEBDAV_* for a direct file plane

molten

Molten Hosting: the panel's wake URL, WebDAV derived from the URL

local

an install on this machine — its Data/ as the file plane (docs/local-sandbox.md)

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 tools
activate-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneIdentifierYesScene id or exact name to make the active scene. STRICT — no fuzzy matching.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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

Schema coverage is 100%, so the schema already documents 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.

Purpose5/5

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

The description states a specific verb and resource: 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.

Usage Guidelines5/5

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

It gives explicit when-to-use guidance 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYesWhich granting path to use. 'compendium-features' (preferred) imports named features from a pack; 'feature' authors one from scratch; 'items' attaches world items.
itemsNoWorld 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.
featureNoParameters when mode='feature' — author a feature/attack/spellcasting/spells. Select feature.featureType; actorIdentifier is taken from the top level.
actorIdentifierYesTarget actor (exact name or ID).
compendiumFeaturesNoParameters when mode='compendium-features' — import named features from a compendium pack. actorIdentifier is taken from the top level.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
usesNoFree casts per recovery period. A number, or a formula string like "@scale.ranger.favored-enemy" for level-scaled pools. Default 1.
grantedByYesThe 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>".
recoveryPeriodNoWhen the free casts come back: "lr" long rest (default — the 2024 wording for feat-granted casts), "sr" short rest, "day", "dawn", or "dusk".
actorIdentifierYesName 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.
spellIdentifierYesThe 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

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description adds 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.

Purpose5/5

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

The description states a specific verb and resource — '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.

Usage Guidelines4/5

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

The description gives clear context for when the tool 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dexNo[armor] Max Dex bonus to AC (omit = unlimited/light; 2 = medium; 0 = heavy).
imgNoIcon 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.
nameYesItem name.
usesNo[consumable] Limited uses / charges.
priceNoItem price.
damageNo[weapon] Base damage die. [consumable ammo] Added damage.
folderNoWhen creating a world Item (no actorIdentifier), place it in this folder (created if absent).
rarityNoMagic-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.
weightNoItem weight.
wireAcNo[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.
abilityNo[tool] Default ability for the tool check.
attunedNoWhether this item is currently attuned by its owner.
magicalNoFlag the item as magical (adds the "mgc" property). Implied when magicalBonus is set.
rangeFtNo[weapon, ranged] Normal range in feet.
reachFtNo[weapon, melee] Reach in feet. Default 5.
subtypeNo[consumable/loot] Finer subtype (e.g. ammo "arrow").
baseItemNo[weapon/armor/tool] Specific base-item key (e.g. "longsword", "plate", "smith").
capacityNo[container] Carrying capacity.
currencyNo[container] Coins stored inside the container.
equippedNoWhether worn/wielded (default true for an NPC). Set false for stowed loot.
itemTypeYesKind of physical item. weapon; armor/shield/wondrous (all dnd5e "equipment"); consumable (potion/scroll/ammo/…); tool; loot (gems/trade goods/junk); container (bag/chest).
lootCopyNo[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.
lootTypeNo[loot] Loot category. Default "gear".
quantityNoStack count (e.g. 20 arrows). Default 1.
strengthNo[armor] Min Strength to wear without a speed penalty.
toolTypeNo[tool] Category key (art/game/music/…).
armorTypeNo[armor] Armor weight class. Default "medium".
containerNoId or name of an EXISTING container item on the same target to place this item inside.
toolBonusNo[tool] Flat bonus formula added to the check.
versatileNo[weapon] Two-handed (versatile) damage (needs the "ver" property).
armorValueNo[armor] Base AC (shield = AC bonus, default 2).
attackTypeNo[weapon] Attack kind. Default "melee".
attunementNoAttunement requirement: "" none, required, or optional.
identifiedNoWhether the item is identified (default true). Set false for mystery loot.
proficientNo[weapon/armor/tool] Proficiency (weapon/armor 0|1; tool 0|0.5|1|2). Omit to infer.
propertiesNoProperty 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.
withAttackNo[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.
ammoReplaceNo[consumable ammo] If true, ammo damage replaces the weapon base instead of adding.
attackBonusNo[weapon] Flat bonus to the attack roll only (separate from magicalBonus).
descriptionNoHTML description.
longRangeFtNo[weapon, ranged] Long (disadvantage) range.
sourceRulesNo[weapon] Rules edition for the attack activity. Default "2024" (pass "2014" for legacy).2024
weaponClassNo[weapon] Category. "natural" for monster attacks. Default "natural".
magicalBonusNoNumeric +N magic bonus (to attack & damage for weapons, to AC for armor).
equipmentTypeNo[wondrous] Equipment subtype (clothing/trinket/ring/rod/wand/…). Default "trinket".
consumableTypeNo[consumable] Category. Default "potion".
lootCopyFolderNoFolder for the loot copy (created if absent). Default "Loot".
abilityModifierNo[weapon, 2024] Attack/damage ability override.
actorIdentifierNoTarget 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

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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

Schema coverage is 100%, so baseline is 3, but the description adds 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.

Purpose5/5

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.

Usage Guidelines5/5

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

It gives explicit when-to-use guidance: '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.

ParametersJSON Schema
NameRequiredDescriptionDefault
captionNoOptional image caption.
pageNameNoPage title (defaults to the file name).
imagePathYesData-relative path to the image.
playerVisibleNoIf true, players can OBSERVE this image page (a handout). Default: GM-only.
journalIdentifierYesJournal id or exact name.

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoBehavior label (defaults to the type's standard name).
typeYesBehavior 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`).
sizesNoapplyActiveEffect: only creatures of these sizes (omit = all).
rotateNodnd5e.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.
systemNoBehavior system data carried verbatim (the v14 shape for the type) — e.g. executeMacro {uuid}, adjustDarknessLevel {mode, modifier}.
effectsNodnd5e.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.
magicalNodifficultTerrain: magical terrain (Spike Growth) vs mundane (rubble). Default false.
disabledNoCreate the behavior disabled (default false).
teleportToNoteleportToken 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.
dispositionsNoapplyActiveEffect: only tokens with these dispositions are affected (omit = all). difficultTerrain: these dispositions IGNORE the terrain.
terrainTypesNodifficultTerrain: what kind of terrain it is (a creature may ignore some kinds — e.g. web, plants, ice). Omit for generic difficult terrain.
creatureTypesNoapplyActiveEffect: only these creature types (omit = all).
sceneIdentifierYesScene id or exact name holding the region.
regionIdentifierYesRegion id or EXACT region name on that scene (an ambiguous name errors — use the id).

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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

Given the tool's complexity (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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 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.

Purpose5/5

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.

Usage Guidelines5/5

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

The description explicitly states when to use this tool 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
activeNotrue applies the conditions (default); false removes them.
conditionsYesCondition 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.
actorIdentifierYesName 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.
exhaustionLevelNoExhaustion 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

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, so every parameter 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
remotePathYesPath relative to the Foundry `Data/` root, e.g. "worlds/your-world/assets/maps/cavern.webp".

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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

Given the tool's simplicity (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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool's purpose: 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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
remotePathYesPath relative to the Foundry `Data/` root (a leading "Data/" or "/" is tolerated and stripped), e.g. "worlds/your-world/assets/maps/cavern.webp".

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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

For a simple tool with one 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
crYes
nameYes
sizeYes
hoverNo
acModeYes
skillsNo
acValueNo
flySpeedNo
abilitiesYes
alignmentNo
biographyNo
hpAverageYes
hpFormulaYes
languagesNo
swimSpeedNo
truesightNo
walkSpeedNo
blindsightNo
climbSpeedNo
darkvisionNo
sourceBookNo
sourcePageNo
burrowSpeedNo
dispositionNo
sourceRulesNo2024
tremorsenseNo
creatureTypeYes
savingThrowsNo
specialSensesNo
creatureSubtypeNo
languagesCustomNo
damageImmunitiesNo
damageResistancesNo
conditionImmunitiesNo
damageVulnerabilitiesNo

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dryRunNoPreview 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.
identifiersYesExact ids (preferred) or exact names to delete.
documentTypeYesType of the documents being deleted.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
resourceNoActor system attribute shown beside each combatant in the tracker, e.g. "attributes.hp". Pass "" to track nothing.
turnMarkerNoTurn-marker appearance — the animated ring under the active combatant.
skipDefeatedNoSkip defeated combatants when advancing the turn order.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bloodiedNoWho sees the Bloodied status. all (every token) · player (default — only tokens the players own/see) · none (off).
calendarNoCalendar in use. gregorian (default) · greyhawk · harptos (Forgotten Realms) · khorvaire (Eberron); modules may add more. Takes effect after clients reload. Validated against the live list.
pietyScoreNoPiety score (optional rule). Adds the Piety score to character sheets (default false; registered config:false — this tool is the lever).
tokenSizeSyncNoSync token size to creature size. A Large creature gets a 2×2 token automatically (default true). Takes effect after clients reload.
allowSummoningNoPlayers may summon. Players place summons from their own summon activities (default false — GM-only).
bastionEnabledNoBastion system. Turns on bastion turns + the bastion tab (default false).
disableFallingNoDisable falling automation. true turns OFF fall damage / falling from Levels (default false — falling is automated).
autoApplyDownedNoAuto-apply Unconscious / Dead at 0 HP. none (default) · deadOnly (NPCs die at 0) · npcs (NPCs die, PCs go unconscious) · all.
bastionDurationNoDays per bastion turn. How many in-world days make one bastion turn (default 7).
calendarEnabledNoCalendar. Turns on the date/time HUD, dawn / dusk / day recovery and bastion-turn progression (default false).
senseVisionSyncNoSync senses to token vision. Darkvision / blindsight on the sheet drive the token vision modes (default true).
allowPolymorphingNoPlayers may polymorph / transform actors. Players run the transform flow on actors they own (default false — GM-only).
disableExhaustionNoDisable exhaustion automation. true turns OFF the exhaustion d20 penalties (default false). Takes effect after clients reload.
movementAutomationNoMovement automation. full (default — difficult terrain + creature blocking) · noBlocking (terrain only) · none.
initiativeGroupRollNoRoll initiative once per group. A grouped set of combatants rolls one initiative (default true).
disableConcentrationNoDisable concentration tracking. true turns OFF automatic concentration effects + prompts (default false).
allowPlayerDamageTrayNoPlayers may use the damage tray. Players apply damage from chat cards to their own tokens (default false).
calendarDailyRecoveryNoDaily 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).
allowPlayerEffectsTrayNoPlayers may use the effects tray. Players apply effects from chat cards to their own tokens (default false).
initiativeGroupCombatantsNoGroup identical combatants in the tracker. Six goblins share one tracker row (default true).
encounterPlacementBehaviorNoWhen an encounter is placed on the map. none (default) · createCombatants (add them to the tracker) · rollInitiative (and roll).

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSet name. Required when adding from `files`; optional rename on update.
filesNoData-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.
limitNoaction "library": maximum templates to return (default 40).
queryNoaction "library": match on template name, category, or section (e.g. "tavern").
actionYeslist = the scene's sound sets (with what would be playing right now); library = browse the prebaked template catalog; add/update/remove = author them.
activeNoWhether the set runs at all (default true).
volumeNoSet volume 0–1 (default 0.8), under the Ambient channel.
sectionNoRestrict 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.
categoryNoRestrict to a category (substring match, e.g. "Forest"). Filters action "library", and narrows `template` resolution on action "add".
intervalNoInterval sets: seconds of silence between one-shots (1–3600, default 25).
templateNoaction "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.
crossfadeNoLoop sets: overlap between members in seconds (0.5–30, default 4).
playStyleNointerval = a random file, then `interval ± intervalVariation` seconds of silence. loop = a continuous bed, members overlapped under a crossfade. Default interval.
whenToPlayNoDarkness gate, re-evaluated live: day = scene darkness < 0.5, night = ≥ 0.5 (default always).
verifyFilesNoaction "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.
setIdentifierNoWhich 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.
pitchVariationNoPer-play pitch jitter in OCTAVES, 0–1 (default 0). 0.1 is a subtle, natural wobble.
sceneIdentifierNoScene id or exact name. STRICT — no fuzzy matching. Omit to target the ACTIVE scene. Ignored by action "library" (the catalog is world-wide).
volumeVariationNoPer-play volume jitter 0–1, attenuate-only — never louder than `volume` (default 0).
intervalVariationNoInterval sets: ± jitter on the silence, in seconds (default 5). Clamped to never exceed `interval`.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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

Given the tool's complexity, 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.

Parameters4/5

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.

Purpose5/5

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

The description opens with a specific verb and resource — '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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemFoldersNoWorld-Item folders to audit (name or id) — e.g. the loot/treasure folder you created.
worldItemIdsNoSpecific world Items to audit, by id.
actorIdentifiersNoActors to audit (name or id) — each is scanned along with its embedded items/features. Pass the NPCs you just built.

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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

The description opens with a specific verb-resource pair: '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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
toPathYesDestination Data-relative path.
fromPathYesSource Data-relative path.
overwriteNoAllow overwriting an existing file at the destination.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
namesYesCustom names for the created actors (e.g., ["Flameheart", "Sneak", "Peek"])
folderNoActor 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.
itemIdYesID of the specific creature entry within the pack (get this from search-compendium results)
packIdYesID 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).
quantityNoNumber of actors to create (default: based on names array length)
placementNoToken placement options (only used when addToScene is true)
addToSceneNoWhether to add created actors to the current scene as tokens
dispositionNoPrototype-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).
modificationsNoPREFAB-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

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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

Given the tool's complexity (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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

The description provides explicit guidance on when to use 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
remotePathYesFolder path relative to the Foundry `Data/` root, e.g. "worlds/your-world/assets/audio/tavern".

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCards stack name.
typeNoStack type (default "deck").
cardsNoOptional initial cards.
folderNameNoOptional folder to place the stack in (created if absent).
descriptionNoOptional description.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
drawingsYesOne or more drawings (annotation shapes / labels) to place.
sceneIdentifierYesScene id or exact name holding the placeables.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesFolder name.
typeYesDocument type this folder holds (Actor, Item, JournalEntry, …).
colorNoOptional hex color, e.g. "#4a90e2".
parentFolderNoOptional parent folder id or exact name (must be the same type).

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
imgNoPortrait 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.
nameYesName of the group actor, e.g. "The Party".
membersNoWorld 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.
summaryNoOne-line summary shown in group embeds.
currencyNoStarting shared coin (whole non-negative amounts per denomination).
folderNameNoActor-sidebar folder to file the group under (created if missing).
descriptionNoFull description (HTML allowed) shown on the group sheet.
defaultOwnershipNoThe 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.
makePrimaryPartyNoAlso 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

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

The description opens with a specific verb and resource — 'Create a 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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesOne 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.
folderNoFolder name/ID to place the items in (created if absent).

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesJournal entry name.
pagesYesOrdered 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).
folderNameNoOptional folder to place the journal in (created if absent).

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. 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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
lightsYesOne or more ambient lights (torches, glows, magical light) to place.
sceneIdentifierYesScene id or exact name holding the placeables.

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
imgNoIcon 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.
nameYesMacro name — the hotbar tooltip and its Macro Directory entry.
typeNo'script' (default) executes JavaScript; 'chat' posts its text to the chat log.script
ownerNoUser id or name granted OWNER on the macro. The hotbarUser is always granted OWNER — pass this only to grant a DIFFERENT user as well.
commandYesThe 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).
hotbarSlotNoHotbar slot 1–50 (page 1 = slots 1–10). Default: the first free slot. An occupied slot is replaced with a warning.
hotbarUserNoUser 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

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema coverage is 100%, and the schema already 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.

Purpose5/5

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.

Usage Guidelines4/5

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[]}.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
levelNo
folderNo
hpModeNoavg
spellsNo
choicesNo
speciesNo
abilitiesNo
classNameYes
backgroundNo
multiclassNo
sourceRulesNo2024
acceptDefaultsNo

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
folderNo
packIdNo
prefabNo
actorIdNo
abilitiesNo
modificationsNo

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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

The description clearly states the tool's purpose: 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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fadeNoCrossfade duration in milliseconds (optional).
modeNoPlayback mode (default sequential).sequential
nameYesPlaylist name.
repeatNoWhether each track loops (default false).
soundPathsYesData-relative paths to the sound files, in order.
defaultVolumeNoVolume 0–1 applied to each track (default 0.5).

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pagesYesOrdered pages (e.g. a player Handout page + a GM Notes page), each a list of blocks.
titleYesJournal entry name.
folderNameNoOptional folder to organize the journal into (created if it does not exist).

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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

Given the tool's complexity (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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

The description explicitly says when to use this tool (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.

ParametersJSON Schema
NameRequiredDescriptionDefault
regionsYesOne or more regions to create.
sceneIdentifierYesScene id or exact name to add the region(s) to.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds 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.

Purpose5/5

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.

Usage Guidelines5/5

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

The description provides explicit when-to-use guidance: 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesTable name.
formulaNoRoll formula (default 1d<total weight>), e.g. "1d20".
resultsYesTable entries.
folderNameNoOptional folder to place the table in (created if absent).
descriptionNoOptional table description.
displayRollNoShow the roll when drawing (default true).
replacementNoDraw with replacement (default true).

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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

Schema coverage is 100% and the schema already documents the 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fogNoA v12+ scene's full fog{} object (exploration, overlay, colors), carried whole (deep-merged).
nameYesScene name.
flagsNoDocument 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).
thumbNoData-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.
wallsNoWalls 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.
widthNoScene width in pixels (optional — auto-detected from the image when omitted).
folderNoScene folder id or exact name to place the scene in (created if absent).
heightNoScene height in pixels (optional — auto-detected from the image when omitted).
lightsNoAmbient lights to import from a map sidecar JSON (the `lights` array).
fogModeNoFog of war: disabled | individual (classic per-player) | shared (party-wide).
initialNoThe saved initial camera view {x,y,scale} to restore on scene load (deep-merged).
journalNoJournalEntry id or exact name to attach as scene notes. "" clears it.
paddingNoScene padding fraction (optional).
regionsNoRegions (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.
weatherNoWeather effect key (e.g. rain, snow, fog, leaves, rainStorm, blizzard). "" = none.
activateNoActivate the scene after creating it.
darknessNoDarkness/day-night level: 0 = full daylight, 1 = full night.
gridSizeNoGrid size in pixels (default 100).
gridTypeNoFoundry grid type (0 gridless, 1 square, 2+ hex). Default 1.
playlistNoPlaylist id or exact name to auto-play on scene activation. "" clears it.
gridAlphaNoGrid line opacity 0–1 (e.g. 0.2 for a faint grid).
gridColorNoGrid line color as a hex string, e.g. "#000000".
gridUnitsNoDistance unit label per cell, e.g. "ft" (dnd5e default).
navigationNoWhether 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.
environmentNoA 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.
globalLightNoGlobally illuminate the whole scene (turn the lights on).
tokenVisionNoRequire token line-of-sight to see the scene. Turn OFF for overland/illustration maps.
gridDistanceNoReal-world distance per grid cell (dnd5e default 5).
backgroundPathYesData-relative path to the background/map image.
placeablesPathNoServer-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

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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

The description opens with a specific verb-resource pair ('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.

Usage Guidelines4/5

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

The description gives strong usage context: it 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesYesThe map-note pins to create.
sceneIdentifierYesScene id or exact name to place the notes on.

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3. 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
soundsYesOne or more positional ambient sounds to place.
sceneIdentifierYesScene id or exact name holding the placeables.

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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

Given the tool's complexity (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.

Parameters5/5

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

Schema coverage is 100%, but the description adds 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesThe second endpoint (may be the same scene).
fromYesThe first endpoint.
colorNoRegion tint hex (default "#3fb0ff").
toNameNoName for the to-side region.
twoWayNoWire the return teleporter too (default true). false = one-way from→to.
confirmNoAsk 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.
fromNameNoName for the from-side region.
snapToGridNoSnap each trigger rectangle to the grid cell(s) under its center (default true).
widthCellsNoTrigger width in whole grid cells, applied to both ends. Default 1.
heightCellsNoTrigger height in whole grid cells. Default 1.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3; the description adds meaning beyond the schema by 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tilesYesOne or more tiles (props/roofs/overlays) to place on the scene.
sceneIdentifierYesScene id or exact name holding the placeables.

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
wallsYesOne or more wall segments to create (omitted channels default to blocking).
sceneIdentifierYesScene id or exact name holding the placeables.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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

The description opens with a specific verb-resource pair ('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.

Usage Guidelines4/5

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

It states the intended use case ('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.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifiersYesExact actor names or IDs to delete (e.g., ["ZZ MCP Smoke Test NPC"] or ["5GRD8GE7GJUWEbB2"])
removeEmptyFolderNoWhen 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

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoDelete even if references exist or the bridge is unavailable to check them.
recursiveNoRequired to delete a directory (and everything under it).
remotePathYesPath relative to the Foundry `Data/` root to delete.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifiersYesExact ids (preferred) or exact names of Cards stacks to delete.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

Given the tool's simplicity (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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNoExact message ids to delete (a single id is just an array of one).
confirmNoMust be true to run a bulk delete (clearAll or beforeTimestamp) — an explicit guard, both are irreversible. Not needed for a targeted ids delete.
clearAllNoDelete EVERY chat message. Requires confirm:true.
beforeTimestampNoDelete all messages with timestamp (ms epoch) older than this — purge an old log. Bulk + irreversible, so requires confirm:true.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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

The description clearly states the verb 'Delete' and 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.

Usage Guidelines4/5

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

The description explains when to use 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
drawingIdsYesDrawing ids to delete (from list-drawings).
sceneIdentifierYesScene id or exact name holding the placeables.

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFolder document type (default "Actor"). E.g. "Actor", "Item", "JournalEntry", "Scene".Actor
identifierYesExact folder name or ID to delete (e.g., "Foundry MCP Creatures")
deleteContentsNoWhen true, delete the folder and all documents/subfolders inside it. When false (default), only delete the folder if it is already empty.

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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

Despite no output schema, the description covers 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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifiersYesExact ids (preferred) or exact names of world Items to delete.

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifiersYesExact ids (preferred) or exact names of journals to delete.

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesPage id to delete (from list-journals).
journalIdYesJournal entry id or exact name.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
lightIdsYesAmbientLight ids to delete (from list-lights).
sceneIdentifierYesScene id or exact name holding the placeables.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema coverage is 100%, so the schema already 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
macrosYesMacro ids or exact names (case-insensitive) to delete. Find them with list-macros.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

Given the tool's simplicity (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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteIdsYesNote ids to delete (from create-scene-notes/list-notes).
sceneIdentifierYesScene id or exact name holding the pins.

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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

The description uses a specific verb 'Remove' and 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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifiersYesExact ids (preferred) or exact names of playlists to delete.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
regionIdsYesRegion ids to delete.
sceneIdentifierYesScene id or exact name holding the region(s).

TDQS

A4.2/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifiersYesExact ids (preferred) or exact names of tables to delete.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifiersYesExact ids (preferred) or exact names of scenes to delete.

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
soundIdsYesAmbientSound ids to delete (from list-sounds).
sceneIdentifierYesScene id or exact name holding the placeables.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tileIdsYesTile ids to delete (from list-tiles).
sceneIdentifierYesScene id or exact name holding the placeables.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenIdsYesPlaced-token ids to remove (from list-tokens). The sidebar actor is untouched.
sceneIdentifierYesScene id or exact name holding the placeables.

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
wallIdsYesWall ids to delete (from list-walls).
sceneIdentifierYesScene id or exact name holding the placeables.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

For a 2-parameter tool with 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.

Parameters3/5

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

Schema coverage is 100%, so the schema already 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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

The tool has zero parameters, and schema description coverage is 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.

Purpose5/5

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

The description states a specific verb and resource: '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.

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: '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.

ParametersJSON Schema
NameRequiredDescriptionDefault
localPathYesAbsolute local destination path. Parent directories are created if missing.
remotePathYesSource path relative to the Foundry `Data/` root.

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. 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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ownerNoUser 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.
folderNoActor 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).
suffixNoAppended to each SOURCE name to build a copy's name when newNames does not supply one (e.g. " (Sim)" → "Gren (Sim)"). Default: " (Copy)".
newNamesNoNames 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.
ownershipLevelNoPermission level the `owner` user gets on each copy (default OWNER — full control, the sandbox use case). Only meaningful together with owner.OWNER
actorIdentifiersYesSource 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

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3 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.

Purpose5/5

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

The description opens with a precise action and resource: '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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
localPathYesAbsolute local destination path for the JSON file (parent dirs created), e.g. "D:\\campaign\\party-snapshots\\2026-08-25\\Gren.json".
overwriteNoAllow overwriting an existing file at localPath.
identifierYesActor 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

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents 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.

Purpose5/5

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

The description names a specific verb and resource: 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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoExport only the most recent N messages (omit for the whole log).
formatNoTranscript format. markdown/plaintext strip HTML (roll totals kept); html keeps raw message markup (unstyled, not the rendered card); json is the structured records.markdown
localPathNoAbsolute local destination path (parent dirs created). At least one destination required.
overwriteNoAllow overwriting an existing file at either destination.
remotePathNoDestination 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.
sinceTimestampNoOnly messages at/after this ms-epoch timestamp.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value by 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathsYesOne or more Data-relative asset paths to look up, e.g. ["worlds/your-world/assets/maps/cavern.webp"].

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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

For a simple one-parameter 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

The description explicitly says 'Use this BEFORE 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierYesCharacter 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

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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

Despite no output schema, the description 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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states a specific verb ('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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityIdentifierYesEntity name or ID (can be item ID, action name, spell name, or effect name)
characterIdentifierYesCharacter name or ID

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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

The description opens with a specific verb and object ('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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorNoFilter report lines to actors whose name contains this (case-insensitive).
sinceNoOnly 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).
combatNoReport 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.
sectionsNoWhich 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).
includeLedgerNoAppend the folded ledger as JSON (for charts or downstream analysis).

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value by 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.

Purpose4/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
itemIdYesID of the specific item to retrieve
packIdYesID of the compendium pack containing the item
compactNoReturn condensed stat block (recommended for UI performance). Includes key stats, abilities, and actions but omits lengthy descriptions and technical data.

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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

The description clearly states the tool retrieves 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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
includeHiddenNoWhether to include hidden tokens and elements (default: false)
includeTokensNoWhether to include detailed token information (default: true)

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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

Given the tool is simple with 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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool retrieves 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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
groupIdentifierYesThe group actor to read (name or id; partial name match supported).

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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

For a one-parameter read tool with 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.

Parameters3/5

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

Schema coverage is 100% for the single parameter, 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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierYesWorld Item id (preferred) or name to look up.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierYesTable id or exact name.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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

Schema coverage is 100% for the single parameter '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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneIdentifierYesScene id or exact name.

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional name for the imported stack.
presetYesCore preset deck key — e.g. "pokerDark" / "pokerLight" (a standard 52-card deck).
folderNameNoOptional folder to place the stack in (created if absent).

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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

For a simple 3-parameter tool with no output schema, the description 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoRename the copy (e.g. when adapting a base item into a custom magic item).
folderNoWhen copying to the world (no actorIdentifier), place the item in this folder.
itemIdYesEntry id within the pack (from search-compendium / get-compendium-entry results).
packIdYesCompendium 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.
equippedNoSet equipped state on the copy (equippable items only; ignored otherwise).
lootCopyNo[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.
quantityNoOverride the stack count on the copy.
containerNoId or name of an EXISTING container on the same target to nest the copy inside.
identifiedNoSet identified state (false = mystery/unidentified loot).
lootCopyFolderNoFolder for the loot copy (created if absent). Default "Loot".
actorIdentifierNoTarget 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

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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

The description clearly states the tool's purpose: 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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemIdYesThe RollTable document id within the pack.
packIdYesCompendium pack id holding the table (e.g. dnd-dungeon-masters-guide.tables).
folderNameNoOptional folder to place the imported table in (created if absent).

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents 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.

Purpose5/5

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.

Usage Guidelines4/5

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

The description explains when to use 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNo
classNameNo
classUuidNo

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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[]}.

ParametersJSON Schema
NameRequiredDescriptionDefault
hpModeNoavg
choicesNo
classNameYes
acceptDefaultsNo
actorIdentifierYes

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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

Given the tool's complexity, 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

The description provides explicit guidance on when to use 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.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorIdentifierNoOptional: specific actor name/ID to check, or "all" for all actors
playerIdentifierNoOptional: specific player name to check ownership for

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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

For a read-only list tool with 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoOptional filter by character type (e.g., "character", "npc")

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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

Schema coverage is 100% for the single parameter '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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
remotePathNoDirectory 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

A4.4/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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

For a simple list tool with one 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.

Parameters3/5

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

Schema coverage is 100% and the schema already 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.

Purpose5/5

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

The description clearly states the verb 'List' and the resource '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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoReturn the most recent N messages (chronological, newest last).
contentModeNoReturn raw content HTML, HTML stripped to text, or omit content (cheap on big logs).text
sinceTimestampNoOnly messages with timestamp (ms epoch) at/after this value.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool lists 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.

Usage Guidelines4/5

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

The description explicitly states when to use the tool (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).

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoOptional filter by pack type

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the verb 'list' and the resource '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.

Usage Guidelines4/5

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

The description provides clear context for when to use this tool (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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneIdentifierYesScene id or exact name holding the placeables.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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

Given the tool's simplicity (one 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter to one document type (Actor, Scene, …). Omit for the whole sidebar.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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

The description is complete for a 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter by item type (e.g. "weapon", "spell"). Omit to return all types.
folderNoFilter to items inside this folder (name or ID).
nameFilterNoCase-insensitive substring match on item name.

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the verb 'List', the resource '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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdNoIf provided with journalId, read this specific page's content. Get page IDs from the pages array returned when listing journals or reading a journal.
journalIdNoIf provided, read this journal's content instead of listing all journals. Returns full page content and a list of all pages in the journal.
filterQuestsNoOnly show journals that appear to be quest-related (default: false)
includeContentNoInclude journal content preview (default: false)

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneIdentifierYesScene id or exact name holding the placeables.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

For a simple list tool with one 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.

Parameters3/5

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

Schema coverage is 100% and the parameter description 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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

The description opens with a specific verb and resource, 'List 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.

Usage Guidelines5/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneIdentifierYesScene id or exact name holding the placeables.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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

The description uses a specific verb ('List') and resource ('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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneIdentifierYesScene id or exact name.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool lists 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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoCase-insensitive substring match on scene name.
includeActiveOnlyNoReturn only the currently active scene (default false).

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description 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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneIdentifierYesScene id or exact name holding the placeables.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

Given the tool's simplicity (single parameter, 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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the verb 'List' and resource '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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneIdentifierYesScene id or exact name holding the placeables.

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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

The description is a single dense sentence that front-loads the core action ('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.

Completeness4/5

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

For a simple one-parameter 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.

Parameters3/5

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

Schema coverage is 100% for the single parameter (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.

Purpose5/5

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

The description states a specific verb and resource: 'List 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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneIdentifierYesScene id or exact name holding the placeables.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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

The description clearly states the verb ('list') and resource ('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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
doorsOnlyNoReturn only DOOR walls (door > 0) — a populated scene carries hundreds of plain walls, and the usual edit loop is doors. Default false (all walls).
sceneIdentifierYesScene id or exact name holding the placeables.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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

Given the tool's low complexity (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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoActivity name (e.g. "Multiattack"). Used by add and edit (rename).
typeNoActivity 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.
formsNoTransform 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.
patchNoEdit: dot-paths RELATIVE to the activity root, e.g. {"attack.bonus":"3"}, {"save.dc.formula":"16"}, {"damage.onSave":"half"}.
actionYesadd a new activity, edit/remove an existing one (by activityId), or list activities.
onSaveNoSave activity: damage on a successful save.
saveDCNoSave activity: the DC. Cast activity: pins a FIXED save DC for the linked spell (else the cast defers the DC to the casting actor).
skillsNoCheck activity: associated skill keys (e.g. ["acr","ath"]).
abilityNoAttack ability override (attack activity).
affectsNoTarget affects (with or without a template).
chargesNoCast 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.
checkDCNoCheck activity: the DC.
durationNoDuration 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".
formlessNoTransform activity (form mode): may the actor revert to "no form" from the prompt.
profilesNoTransform 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}}, …].
templateNoArea template the activity places (sets target.override). Required for any `behaviors` — e.g. Web = {type: "cube", size: 20}, Spike Growth = {type: "sphere", size: 20}.
behaviorsNodnd5e 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"]}].
castLevelNoCast activity: level to cast at (0 = cantrip). Defaults to the spell's base level.
spellUuidNoCast 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).
activityIdNoActivity id — required for edit/remove. Get it from action "list" or get-actor-entity.
attackTypeNoAttack activity: melee or ranged.
healAmountNoHeal activity: healing dice (type "healing" or "temphp").
attackBonusNoAttack activity: flat to-hit bonus. Cast activity: pins a FIXED spell-attack bonus (else the cast defers the attack to the casting actor).
damagePartsNoDamage dice — for attack (extra parts), damage, and save activities.
includeBaseNoAttack: also roll the item base damage (default true).
saveAbilityNoSave activity: the saving-throw ability.
checkAbilityNoCheck activity: the ability rolled.
transformModeNoTransform 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`.
activationTypeNoAction economy. Default "action".
appliesEffectsNodnd5e 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`.
itemIdentifierYesItem to operate on (id or name). On an actor when actorIdentifier is set, else a world item.
recoveryPeriodNoCast activity with charges on a poolless item: when the activity-side pool recovers. Default "lr" (long rest).
actorIdentifierNoIf 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.
transformPresetNoTransform activity (cr / direct): the transformation settings preset — wildshape (keep mental stats, merge features), polymorph (full replacement), polymorphSelf (appearance only).
teleportDistanceNoTeleport 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".
transformSettingsNoTransform 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

A4.4/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dayNoset: the day of the month (1-based).
daysNoadvance: days; negative rewinds.
hourNoset: the hour (0–23).
yearNoset: the year as displayed (e.g. 1492 DR).
hoursNoadvance: hours; negative rewinds.
monthNoset: the month — its number (1-based) or its name in the active calendar ("Mirtul").
actionNoread the calendar (default); advance the world time; set the date / time of day.read
minuteNoset: the minute (0–59).
roundsNoadvance: combat rounds (6 s each); negative rewinds.
minutesNoadvance: minutes; negative rewinds.
secondsNoadvance: seconds; negative rewinds.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds 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.

Purpose5/5

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.

Usage Guidelines5/5

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

The description explicitly explains when to use 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoEffect name. Required (create); optional rename (edit).
patchNoEdit: extra dot-paths relative to the effect, e.g. {"duration.value": 10, "duration.units": "rounds"} or {"tint": "#ff0000"}. Changes live at "system.changes".
actionYescreate a new effect, edit/delete one by effectId, or list effects.
changesNoThe effect changes. On edit this REPLACES the whole changes list.
magicalNodnd5e 6.0: mark the effect as magical (e.g. a magic-item or spell effect).
disabledNoWhether the effect is disabled (inactive).
durationNoEffect duration ({value, units, expiry?}); omit for a permanent/passive effect.
effectIdNoEffect id — required for edit/delete. Get it from action "list".
statusesNoStatus/condition ids this effect confers (e.g. ["prone"]).
transferNoItem effects: whether the effect transfers to the owning actor. Default true for items.
conditionsNoEffect-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.
descriptionNoEffect description (HTML).
itemIdentifierNoItem to target: embedded on the actor (with actorIdentifier) or a world item (alone). Omit to target the actor itself.
actorIdentifierNoActor 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

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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

The description opens with a specific verb 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.

Usage Guidelines4/5

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

The description explains when to use 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
addNoWorld actors to enroll (name or id). Already-members are skipped and reported.
removeNoMembers to remove (name or id — a raw member id also works when the underlying actor was deleted). Non-members are skipped and reported.
groupIdentifierYesThe group actor to edit (name or id; partial name match supported).

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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

The description is complete for a 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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters thoroughly, 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoMove even if references exist (without relinking) or the bridge is down.
relinkNoAfter moving, rewrite all references from the old path to the new one.
toPathYesNew Data-relative path.
fromPathYesCurrent Data-relative path.
overwriteNoAllow overwriting an existing file at the destination.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifiersYesExact ids (preferred) or exact names of documents to move.
documentTypeYesType of the documents being moved.
targetFolderNoTarget folder id or name (created at root if missing). Empty = root.

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokensYesThe tokens to place (one per entry — repeat an actor to place several copies).
sceneIdentifierYesScene id or exact name holding the placeables.

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemYesItem / feature / spell id or exact name on that actor.
actorYesActor id / exact name / name-substring (or scene token id) that owns the item.
actionNouse = 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
consumeNoSpend the item/spell resources (uses/slots). Default false = just post the card.
activityNoOptional activity id/name when the item has several (default: the first activity).
criticalNoFor action=damage: roll a critical (best-effort).

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneIdentifierYesScene id or exact name to pull the users to. STRICT — no fuzzy matching.
userIdentifiersYesUsers 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

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters, 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexNoSurvey 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).
offsetNoIndex of the first Scene to return (for paging a big pack). Default 0.
destRootNoData-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.
packNameNoOnly read this pack (matched against module.json packs[].name). Default: all packs.
modulePathYesAbsolute path to the unzipped module folder OR directly to its module.json.
sceneLimitNoPage 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

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3. 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceModuleYesThe 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

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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

The description clearly states the tool's purpose: '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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoConstrain itemNames to this item type.
itemIdsNoIds of items on the actor to delete (most reliable; get them from get-actor).
itemNamesNoNames of items on the actor to delete (case-insensitive). Combine with "type" to disambiguate.
actorIdentifierYesActor 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

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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

The description clearly states the action ('Delete 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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dcNoTarget DC shown on the card.
kindYessave = ability saving throw; check = ability check; skill = skill check.
skillNoSkill key for kind=skill, e.g. "ste", "prc", "ath".
flavorNoOptional label, e.g. "Trap! Reflexes".
abilityNoAbility key for save/check, e.g. "dex", "wis", "con".
visibilityNopublic = the whole table; gm = GMs only.public

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierYesTable id or exact name.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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

For a simple one-parameter tool with 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fitNoFit the whole scene into the viewport (default). false keeps the saved camera view.
markNoDraw a transient numbered marker over each map-note pin (QA for legend-pin placement). No document changes — the overlay is view-only.
outputPathNoAbsolute local path to write the PNG to. Default: a temp file (path returned).
sceneIdentifierYesScene id or exact name to screenshot.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter by item type: "spell", "weapon", "armor", "equipment", "consumable", "feat", "feature", "action", "effect", or system-specific types. Leave empty to search all types.
limitNoMaximum number of results to return (default: 20)
queryNoText to search for in item names and descriptions (case-insensitive). Leave empty to return all items of specified type.
categoryNoAdditional category filter. For spells: "cantrip", "prepared", "innate", "focus". For items: "equipped", "carried", "invested".
characterIdentifierYesCharacter name or ID to search within

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (default: 50 for discovery searches, max: 50)
queryYesSearch query to find items in compendiums by name only. Use broad, simple terms (e.g., "dragon", "sword", "feat"). Descriptions and traits are NOT searchable.
packTypeNoOptional filter by pack type (e.g., "Item", "Actor", "JournalEntry")

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds 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.

Purpose5/5

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

The description clearly states a specific verb and resource: '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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNoFilter by creature size
limitNoMaximum results to return (default: 500 for comprehensive surveys, max: 1000)
hasSpellsNoFilter for spellcasting creatures
creatureTypeNoFilter by creature type
challengeRatingNoFilter 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")
hasLegendaryActionsNoFilter for creatures with legendary actions (D&D 5e)

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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

The description is dense but well-organized: it front-loads the core 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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 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.

Purpose5/5

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

The description opens with a specific verb and resource ('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.

Usage Guidelines5/5

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

The description explicitly states when to use this tool (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).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoCase-insensitive substring to narrow by item name (e.g., "flame", "healing").
limitNoMaximum results to return (default: 50, max: 200)
rarityNoRarity/-ies: common · uncommon · rare · very rare · legendary · artifact (case- and space-insensitive; one value or an array).
magicalNoIf true, keep only items flagged magical (the "mgc" property).
itemTypeNodnd5e 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.
propertiesNoKeep items carrying ANY of these dnd5e property keys (e.g. "mgc" = magical, "fin" = finesse, "ver" = versatile).
documentTypeNoItem family to search: "gear" = everything (weapons, armor/equipment, consumables, tools, loot, containers); or narrow to "weapon", "armor", or "consumable".gear

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description 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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoCase-insensitive substring to narrow by spell name (e.g., "fire", "cure wounds").
limitNoMaximum results to return (default: 50, max: 200)
damageTypeNoKeep 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.
spellLevelNoFilter by spell level — exact number (0 = cantrip … 9) or a {"min","max"} range for surveys.
spellSchoolNoSpell school(s): abjuration · conjuration · divination · enchantment · evocation · illusion · necromancy · transmutation (full name or dnd5e 3-letter key; one value or an array).

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchTypeNoWhere to search (default: both)both
searchQueryYesText to search for in journal entries

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters (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.

Purpose5/5

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.

Usage Guidelines4/5

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

The description explains when to use the tool (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.

ParametersJSON Schema
NameRequiredDescriptionDefault
styleNoPresentation style (defaults to ic when speakerActor is set, else ooc).
enrichNoPre-enrich content (resolve @UUID links and inline rolls) before posting.
flavorNoOptional secondary header line, e.g. "Perception Check".
imagesNoImages 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.
contentYesMessage 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>.
visibilityNopublic = 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
imageFolderNoData-relative folder for uploaded local images (default "worlds/<world>/assets/chat").
speakerActorNoActor 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).
overwriteImagesNoOverwrite an existing uploaded image of the same name instead of refusing.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
imagePathYesData-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.
applyToTokenNoAlso set the prototype token texture (default true).
tokenImagePathNoOptional 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.
actorIdentifierYesActor id or exact name.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
actorIdentifierYesActor name, ID, or "all friendly NPCs" for bulk operations. Use "party characters" for all player-owned actors.
permissionLevelYesPermission 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)
playerIdentifierYesPlayer name, character name, or "party" for all connected players. Supports partial matching.
confirmBulkOperationNoRequired confirmation for bulk operations affecting multiple actors/players

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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

Given the tool's complexity, 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.

Parameters4/5

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

Schema coverage is 100%, so the schema already documents 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.

Purpose5/5

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

The description clearly states the tool's purpose: 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.

Usage Guidelines4/5

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

The description gives clear usage context 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesPage id (from list-journals).
journalIdYesJournal entry id or exact name.
playerVisibleYestrue = players can OBSERVE this page (a handout); false = GM-only.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneIdentifierYesScene 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.
userIdentifiersYesUsers 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

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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

The description opens with a specific verb and resource: '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.

Usage Guidelines5/5

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

The description explicitly states when to use this tool ('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.

ParametersJSON Schema
NameRequiredDescriptionDefault
clearNoUnset the primary party instead.
groupIdentifierNoGroup actor to crown as the primary party (name or id).

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
userNoUser id or exact name to update. Default: the bridge user that posts (MCP-Claude).
avatarYesAvatar 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

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

For a simple tool with 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

The description explicitly explains when to use (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.

ParametersJSON Schema
NameRequiredDescriptionDefault
acNoArmor class (dnd5e 6.0 model): override = fixed AC; natural = natural armor; calcs / formulas = what the sheet may calculate from.
crNo[NPC] Challenge rating (0.125 / 0.25 / 0.5 allowed).
hpNoHit points (value / max / temp / tempmax / formula).
imgNoPortrait image path or URL.
lairNo[NPC] Lair actions — sets the lair initiative count (marks the creature as having a lair).
nameNoRename the actor.
sizeNoCreature size (long name or short code).
sensesNoSenses ranges (feet) plus special-sense free text.
skillsNoSet skill proficiencies — merge: only the listed skills change.
sourceNo[NPC] Source metadata (book / page / rules edition) — system.source.
habitatNo[NPC, 2024] Habitats (replace the whole list), e.g. [{type:"forest"},{type:"planar",subtype:"nine hells"}].
currencyNoCarried coins (pp/gp/ep/sp/cp). Only the coins you list change.
movementNoMovement speeds (in the given units, default feet). Stored under movement.speeds.*.
treasureNo
abilitiesNoAbility scores to set — only the abilities you list change.
alignmentNoAlignment free text (e.g. "Lawful Evil").
biographyNoBiography / description (HTML).
languagesNo
swarmSizeNo[NPC] Swarm member size, or "" if the creature is not a swarm.
telepathyNoTelepathy range (0 = none).
tokenNameNoPrototype-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.
tokenRingNoPrototype-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).
initiativeNoInitiative bonus and/or ability override.
tokenScaleNoPrototype-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).
dispositionNoPrototype-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.
creatureTypeNo[NPC] Creature type: aberration, beast, celestial, construct, dragon, elemental, fey, fiend, giant, humanoid, monstrosity, ooze, plant, undead.
savingThrowsNoReplace the proficient saving throws: the listed abilities become proficient, all others non-proficient.
spellcastingNo[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.
tokenRotationNoPrototype-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.)
actorIdentifierYesName 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.
creatureSubtypeNo[NPC] Creature subtype free text (e.g. "Devil").
tokenAutoRotateNoPrototype-token auto-rotation: true = the token turns to face its movement (lockRotation off — the house default; new creations already get it), false = fixed facing.
weaponMasteriesNo[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.
damageImmunitiesNo
legendaryActionsNo[NPC] Legendary action points per round (resources.legact.max).
tokenDisplayBarsNoPrototype-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.
tokenDisplayNameNoPrototype-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.
damageResistancesNo
conditionImmunitiesNo
legendaryResistancesNo[NPC] Legendary resistance uses per day (resources.legres.max).
damageVulnerabilitiesNo

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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

Given the tool's complexity (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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
imgNoItem image path or URL.
nameNoRename the item.
typeNoOptional item type to disambiguate the lookup (e.g. "weapon", "feat", "spell").
patchNoMap 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>"}.
deletePathsNoDot-paths to delete from the item, e.g. "system.activities.<id>" to remove an activity. Converted to the Foundry "-=" deletion form for you.
itemIdentifierYesName or id of the embedded item to edit (id, exact name, then substring).
actorIdentifierYesName 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

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
drawingsYesThe drawing patches to apply (each targets one id).
sceneIdentifierYesScene id or exact name holding the placeables.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew folder name (rename).
sortNoThe 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).
typeNoFolder document type (needed to resolve by name; default Actor).Actor
colorNoNew hex color, e.g. "#4a90e2".
identifierYesFolder id or exact name to update.
parentFolderNoReparent under this folder id or exact name (same type). "" = move to root.

TDQS

A4.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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

Schema coverage is 100%, so baseline is 3, but the description adds 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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
updatesYesOne or more item patches. Each entry must include "id" plus at least one field to change (name, img, system, folder).

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew journal entry name (rename).
pageIdNoTarget a specific page by id (get ids from list-journals).
contentNoHTML content to set on the target page (replaces existing content).
journalIdYesJournal entry id or exact name.
newPageNameNoIf set (without pageId), create a new page with this name from content.
playerVisibleNoSet 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

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
lightsYesThe light patches to apply (each targets one id).
sceneIdentifierYesScene id or exact name holding the placeables.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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

Given the tool's complexity (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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoNew pin X in absolute canvas pixels.
yNoNew pin Y in absolute canvas pixels.
iconNoNew Data-relative icon image src.
pageNoPage id or exact name within the (re-pointed) journal; only used with `journal`.
labelNoNew text shown on the pin.
globalNoRender the pin through fog/vision occlusion (NOT a permission control).
noteIdYesThe Note id to update (from create-scene-notes/list-notes).
journalNoRe-point the pin to a different JournalEntry (id or exact name, strict resolve).
iconSizeNoNew icon size in px (min 32).
sceneIdentifierYesScene id or exact name holding the pin.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fadeNoCrossfade duration in milliseconds.
modeNoNew playback mode.
nameNoNew playlist name.
identifierYesPlaylist id or exact name.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
blocksYesTyped 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.
pageIdNoPage to append to (id from list-journals). Omit to use the first text page.
journalIdYesID of the quest journal to update.
newPageNameNoIf set (without pageId), create a NEW page with this name from the blocks instead.
playerVisibleNoSet 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

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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

Given the tool's complexity 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.

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description 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.

Purpose5/5

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

The description clearly states the tool's purpose: '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.

Usage Guidelines4/5

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

The description provides clear context for 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew region label.
rectNoConvenience: 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.
colorNoNew region tint hex.
shapesNoReplace the region shapes whole (v14 shapes in canvas px).
regionIdYesRegion id (from create-region / create-teleporter / list-regions).
visibilityNoNew visibility mode (0 layer / 1 gamemaster / 2 always).
sceneIdentifierYesScene id or exact name holding the region.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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

The description clearly states the tool updates a 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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew table name.
formulaNoNew roll formula.
resultsNoDESTRUCTIVE: replaces ALL existing results (deleted + recreated with auto-assigned ranges). To change one entry, use editResults instead.
identifierYesTable id or exact name.
descriptionNoNew description.
displayRollNoShow the roll when drawing.
editResultsNoTARGETED 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`.
replacementNoDraw with replacement.

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fogNoA v12+ scene's full fog{} object (exploration, overlay, colors), carried whole (deep-merged).
nameNoNew scene name.
flagsNoDocument 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).
thumbNoData-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.
widthNoScene width in pixels.
heightNoScene height in pixels.
fogModeNoFog of war: disabled | individual (classic per-player) | shared (party-wide).
initialNoThe saved initial camera view {x,y,scale} to restore on scene load (deep-merged).
journalNoJournalEntry id or exact name to attach as scene notes. "" clears it.
navNameNoNavigation label shown in the scene nav bar.
paddingNoScene padding fraction (0–0.5).
weatherNoWeather effect key (e.g. rain, snow, fog, leaves, rainStorm, blizzard). "" = none.
darknessNoDarkness/day-night level: 0 = full daylight, 1 = full night.
gridSizeNoGrid size in pixels.
gridTypeNoFoundry grid type (0 gridless, 1 square, 2+ hex).
playlistNoPlaylist id or exact name to auto-play on scene activation. "" clears it.
gridAlphaNoGrid line opacity 0–1 (e.g. 0.2 for a faint grid).
gridColorNoGrid line color as a hex string, e.g. "#000000".
gridUnitsNoDistance unit label per cell, e.g. "ft" (dnd5e default).
navigationNoWhether the scene appears in the navigation bar.
environmentNoA 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.
globalLightNoGlobally illuminate the whole scene (turn the lights on).
tokenVisionNoRequire token line-of-sight to see the scene. Turn OFF for overland/illustration maps.
gridDistanceNoReal-world distance per grid cell (dnd5e default 5).
backgroundPathNoData-relative path to a new background/map image.
sceneIdentifierYesScene id or exact name.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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

The description leads with a specific verb and resource: '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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
soundsYesThe sound patches to apply (each targets one id).
sceneIdentifierYesScene id or exact name holding the placeables.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tilesYesThe tile patches to apply (each targets one id).
sceneIdentifierYesScene id or exact name holding the placeables.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. 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.

Purpose5/5

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

The description opens with a specific verb+resource+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.

Usage Guidelines4/5

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

The description gives clear usage context: 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoNew token X in absolute canvas pixels.
yNoNew token Y in absolute canvas pixels.
hpNoSet 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).
bar1NoBar 1 resource attribute path (health bar is "attributes.hp"); "" clears it.
bar2NoBar 2 resource attribute path (e.g. "attributes.hp"); "" clears it.
nameNoRename the placed token (its nameplate).
ringNoDynamic token ring: false = plain token (the house default), true = ring on. Sets ring.enabled on the placed token.
scaleNoToken ART scale (sets texture.scaleX and scaleY together). 1 = normal, 1.5 = 50% larger.
hiddenNoHide (true) or reveal (false) the token from players.
actorIdsNoActor id OR exact actor name — updates ALL placed copies of each (e.g. every "Dead Guard" token on the map). Combined (union) with tokenIds.
rotationNoFacing in degrees (0–359), applied to every matched token.
tokenIdsNoPlaced-token ids to update (from list-tokens). Combined (union) with actorIds.
elevationNoToken elevation in grid-distance units (e.g. feet).
imagePathNoRESKIN 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.
displayBarsNoResource (health) bar visibility, same modes as displayName: none | control | owner-hover | hover | owner | always.
displayNameNoNameplate visibility: none | control (only when selected) | owner-hover | hover | owner (always, to owners) | always (always, to everyone).
lockRotationNoLock 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.
sceneIdentifierNoScene id or exact name holding the token(s). Omit to use the ACTIVE scene.
randomizeRotationNoGive 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

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description 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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoRename the user account (their login name).
roleNoPermission 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.
userYesUser id or exact name to update (case-insensitive name match allowed). No default — account edits are always explicit.
colorNoPlayer color as #rrggbb — used for cursors, targeting, and chat borders.
pronounsNoPronouns shown next to the user name.
characterNoActor id or name to assign as the user's character (their default speaker / PC). Pass "none" to clear the assignment.

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
wallsYesThe wall patches to apply (each targets one id).
sceneIdentifierYesScene id or exact name holding the placeables.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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

The description covers the essential 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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
localPathYesAbsolute path to the local file to upload.
overwriteNoAllow overwriting an existing file at remotePath.
remotePathYesDestination 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

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
localRootYesAbsolute path to a LOCAL directory; every file under it (recursive) is uploaded.
overwriteNoOverwrite existing files (otherwise an already-present file is skipped).
includeExtNoOnly upload files with these extensions (no dot, case-insensitive), e.g. ["webp","png","jpg"]. Omit to upload every file.
remoteRootYesDestination 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

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. 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.

Purpose5/5

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

The description clearly states the tool's purpose: 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.

Usage Guidelines4/5

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.

  1. 43 tool updatesv2.1.3
    • Addedactivate-scene
    • Addedadd-free-cast
    • Changedadd-item4 fields changed
      • addedInput schema / properties / rarity / anyOf
        Added value: +[
        +  {
        +    "enum": [
        +      "",
        +      "common",
        +      "uncommon",
        +      "rare",
        +      "veryRare",
        +      "legendary",
        +      "artifact"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "enum": [
        +        "",
        +        "common",
        +        "uncommon",
        +        "rare",
        +        "veryRare",
        +        "legendary",
        +        "artifact"
        +      ],
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / rarity / description
        Previous 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."
      • removedInput schema / properties / rarity / enum
        Removed value: -[
        -  "",
        -  "common",
        -  "uncommon",
        -  "rare",
        -  "veryRare",
        -  "legendary",
        -  "artifact"
        -]
      • removedInput schema / properties / rarity / type
        Removed value: -"string"
    • Addedadd-region-behavior
    • Changedapply-condition2 fields changed
      • changedInput schema / properties / conditions / description
        Previous 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."
      • changedInput schema / properties / exhaustionLevel / description
        Previous 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."
    • Addedconfigure-combat-tracker
    • Addedconfigure-dnd5e-settings
    • Addedconfigure-soundscape
    • Changedcreate-actor-from-compendium2 fields changed
      • addedInput schema / properties / folder
        Added 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"
        +}
      • changedInput schema / properties / modifications / description
        Previous 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."
    • Addedcreate-group
    • Addedcreate-macro
    • Changedcreate-rolltable3 fields changed
      • addedInput schema / properties / results / items / properties / range / items
        Added value: +false
      • addedInput schema / properties / results / items / properties / range / maxItems
        Added value: +2
      • addedInput schema / properties / results / items / properties / range / minItems
        Added value: +2
    • Changedcreate-scene6 fields changed
      • removedInput schema / properties / fog / properties / overlay / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fog / properties / overlay / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / regions / items / properties / elevation / properties / bottom / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / regions / items / properties / elevation / properties / bottom / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedInput schema / properties / regions / items / properties / elevation / properties / top / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / regions / items / properties / elevation / properties / top / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedcreate-teleporter1 field changed
      • addedInput schema / properties / confirm
        Added 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"
        +}
    • Changedcreate-tiles2 fields changed
      • changedInput schema / properties / tiles / items / properties / x / description
        Previous 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)."
      • changedInput schema / properties / tiles / items / properties / y / description
        Previous value: -"Top-left Y in absolute canvas pixels."New value: +"Top-left Y in absolute canvas pixels (converted likewise)."
    • Changedcreate-walls6 fields changed
      • removedInput schema / properties / walls / items / properties / thresholdLight / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / walls / items / properties / thresholdLight / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedInput schema / properties / walls / items / properties / thresholdSight / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / walls / items / properties / thresholdSight / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedInput schema / properties / walls / items / properties / thresholdSound / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / walls / items / properties / thresholdSound / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Addeddelete-macro
    • Addeddisconnect-bridge
    • Addedduplicate-actor
    • Addedexport-actor
    • Addedget-combat-stats
    • Addedget-group
    • Addedlist-macros
    • Addedlist-users
    • Changedmanage-activity16 fields changed
      • addedInput schema / properties / affects
        Added 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"
        +}
      • addedInput schema / properties / appliesEffects
        Added 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"
        +}
      • addedInput schema / properties / behaviors
        Added 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"
        +}
      • changedInput schema / properties / charges / description
        Previous 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."
      • addedInput schema / properties / duration
        Added 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"
        +}
      • addedInput schema / properties / formless
        Added value: +{
        +  "description": "Transform activity (form mode): may the actor revert to \"no form\" from the prompt.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / forms
        Added 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"
        +}
      • addedInput schema / properties / profiles
        Added 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"
        +}
      • addedInput schema / properties / recoveryPeriod
        Added 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"
        +}
      • addedInput schema / properties / teleportDistance
        Added 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\"."
        +}
      • addedInput schema / properties / template
        Added 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"
        +}
      • addedInput schema / properties / transformMode
        Added 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"
        +}
      • addedInput schema / properties / transformPreset
        Added 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"
        +}
      • addedInput schema / properties / transformSettings
        Added 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"
        +}
      • changedInput schema / properties / type / description
        Previous 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."
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "attack",
        -  "damage",
        -  "save",
        -  "heal",
        -  "check",
        -  "utility",
        -  "cast"
        -]New value: +[
        +  "attack",
        +  "damage",
        +  "save",
        +  "heal",
        +  "check",
        +  "utility",
        +  "cast",
        +  "teleport",
        +  "transform"
        +]
    • Addedmanage-calendar
    • Changedmanage-effect12 fields changed
      • addedInput schema / properties / changes / items / properties / conditions
        Added 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."
        +}
      • changedInput schema / properties / changes / items / properties / key / description
        Previous 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)."
      • addedInput schema / properties / changes / items / properties / phase
        Added value: +{
        +  "description": "When the change applies during data preparation: \"initial\" (the default, before derived data) or \"final\" (after).",
        +  "enum": [
        +    "initial",
        +    "final"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / changes / items / properties / priority
        Added value: +{
        +  "description": "Application order (lower first). Omit for the default.",
        +  "type": "number"
        +}
      • addedInput schema / properties / changes / items / properties / replacement
        Added 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"
        +}
      • changedInput schema / properties / changes / items / properties / type / description
        Previous 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\"."
      • changedInput schema / properties / changes / items / properties / type / enum
        Previous value: -[
        -  "add",
        -  "multiply",
        -  "override",
        -  "upgrade",
        -  "downgrade",
        -  "custom"
        -]New value: +[
        +  "add",
        +  "subtract",
        +  "multiply",
        +  "override",
        +  "upgrade",
        +  "downgrade",
        +  "custom",
        +  "dnd5e.advantage",
        +  "dnd5e.bonus",
        +  "dnd5e.maximum",
        +  "dnd5e.minimum"
        +]
      • changedInput schema / properties / changes / items / properties / value / description
        Previous 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."
      • addedInput schema / properties / conditions
        Added 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."
        +}
      • addedInput schema / properties / duration
        Added 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"
        +}
      • addedInput schema / properties / magical
        Added value: +{
        +  "description": "dnd5e 6.0: mark the effect as magical (e.g. a magic-item or spell effect).",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / patch / description
        Previous 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\"."
    • Addedmanage-group-members
    • Removedparse-ddb-character
    • Addedpull-users-to-scene
    • Changedsearch-compendium-creatures4 fields changed
      • removedInput schema / properties / hasLegendaryActions / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • addedInput schema / properties / hasLegendaryActions / type
        Added value: +[
        +  "boolean",
        +  "string"
        +]
      • removedInput schema / properties / hasSpells / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • addedInput schema / properties / hasSpells / type
        Added value: +[
        +  "boolean",
        +  "string"
        +]
    • Changedsearch-compendium-items2 fields changed
      • removedInput schema / properties / magical / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • addedInput schema / properties / magical / type
        Added value: +[
        +  "boolean",
        +  "string"
        +]
    • Changedset-actor-ownership2 fields changed
      • changedInput schema / properties / permissionLevel / description
        Previous 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)"
      • changedInput schema / properties / permissionLevel / enum
        Previous value: -[
        -  "NONE",
        -  "LIMITED",
        -  "OBSERVER",
        -  "OWNER"
        -]New value: +[
        +  "NONE",
        +  "LIMITED",
        +  "OBSERVER",
        +  "OWNER",
        +  "INHERIT"
        +]
    • Addedset-landing-scene
    • Addedset-primary-party
    • Changedupdate-actor16 fields changed
      • changedInput schema / properties / ac / description
        Previous 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."
      • changedInput schema / properties / ac / properties / calc / description
        Previous 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."
      • addedInput schema / properties / ac / properties / calcs
        Added 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"
        +}
      • changedInput schema / properties / ac / properties / flat / description
        Previous value: -"Flat AC value (used by calc \"flat\" / \"natural\")."New value: +"DEPRECATED 5.x alias — see calc."
      • addedInput schema / properties / ac / properties / formula / description
        Added value: +"DEPRECATED 5.x alias — see calc."
      • addedInput schema / properties / ac / properties / formulas
        Added 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"
        +}
      • addedInput schema / properties / ac / properties / natural
        Added value: +{
        +  "description": "Natural armor: AC = this value (+ shield, bonuses, cover). Sets calcs to [\"natural\"] and clears any override.",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / ac / properties / override
        Added 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."
        +}
      • changedInput schema / properties / movement / description
        Previous value: -"Movement speeds (in the given units, default feet)."New value: +"Movement speeds (in the given units, default feet). Stored under movement.speeds.*."
      • addedInput schema / properties / movement / properties / jump
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedInput schema / properties / source / description
        Previous value: -"Source metadata (book / page / rules edition)."New value: +"[NPC] Source metadata (book / page / rules edition) — system.source."
      • addedInput schema / properties / spellcasting
        Added 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"
        +}
      • addedInput schema / properties / tokenDisplayBars
        Added 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"
        +}
      • addedInput schema / properties / tokenDisplayName
        Added 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"
        +}
      • removedInput schema / properties / treasure / properties / custom
        Removed value: -{
        -  "description": "Free-text custom entry stored alongside the set (replaces the existing custom string).",
        -  "type": "string"
        -}
      • addedInput schema / properties / weaponMasteries
        Added 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"
        +}
    • Changedupdate-folder1 field changed
      • addedInput schema / properties / sort
        Added 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"
        +}
    • Changedupdate-rolltable6 fields changed
      • addedInput schema / properties / editResults / items / properties / range / items
        Added value: +false
      • addedInput schema / properties / editResults / items / properties / range / maxItems
        Added value: +2
      • addedInput schema / properties / editResults / items / properties / range / minItems
        Added value: +2
      • addedInput schema / properties / results / items / properties / range / items
        Added value: +false
      • addedInput schema / properties / results / items / properties / range / maxItems
        Added value: +2
      • addedInput schema / properties / results / items / properties / range / minItems
        Added value: +2
    • Changedupdate-scene2 fields changed
      • removedInput schema / properties / fog / properties / overlay / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fog / properties / overlay / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedupdate-tiles2 fields changed
      • changedInput schema / properties / tiles / items / properties / height / description
        Previous 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)."
      • changedInput schema / properties / tiles / items / properties / width / description
        Previous 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)."
    • Changedupdate-token1 field changed
      • addedInput schema / properties / imagePath
        Added 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"
        +}
    • Addedupdate-user
    • Changedupdate-walls6 fields changed
      • removedInput schema / properties / walls / items / properties / thresholdLight / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / walls / items / properties / thresholdLight / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedInput schema / properties / walls / items / properties / thresholdSight / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / walls / items / properties / thresholdSight / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedInput schema / properties / walls / items / properties / thresholdSound / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / walls / items / properties / thresholdSound / type
        Added value: +[
        +  "number",
        +  "null"
        +]
  2. 54 tool updatesv1.3.0
    • Changedadd-item1 field changed
      • changedInput schema / properties / actorIdentifier / description
        Previous 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."
    • Changedapply-condition1 field changed
      • changedInput schema / properties / actorIdentifier / description
        Previous 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."
    • Changedauthor-npc1 field changed
      • addedInput schema / properties / disposition
        Added value: +{
        +  "enum": [
        +    "hostile",
        +    "neutral",
        +    "friendly",
        +    "secret"
        +  ],
        +  "type": "string"
        +}
    • Changedcreate-actor-from-compendium1 field changed
      • addedInput schema / properties / disposition
        Added 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"
        +}
    • Addedcreate-drawings
    • Addedcreate-lights
    • Addedcreate-region
    • Changedcreate-scene7 fields changed
      • changedInput schema / properties / environment / description
        Previous 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."
      • changedInput schema / properties / flags / description
        Previous 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)."
      • changedInput schema / properties / fog / description
        Previous 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)."
      • addedInput schema / properties / folder
        Added value: +{
        +  "description": "Scene folder id or exact name to place the scene in (created if absent).",
        +  "type": "string"
        +}
      • changedInput schema / properties / initial / description
        Previous 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)."
      • addedInput schema / properties / navigation
        Added 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"
        +}
      • changedInput schema / properties / regions / items / properties / behaviors / description
        Previous 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."
    • Addedcreate-sounds
    • Addedcreate-teleporter
    • Addedcreate-tiles
    • Addedcreate-walls
    • Addeddelete-drawings
    • Addeddelete-journal-page
    • Addeddelete-lights
    • Changeddelete-note1 field changed
      • changedInput schema / properties / noteIds / description
        Previous value: -"Note ids to delete (from create-scene-notes)."New value: +"Note ids to delete (from create-scene-notes/list-notes)."
    • Addeddelete-region
    • Addeddelete-sounds
    • Addeddelete-tiles
    • Addeddelete-tokens
    • Addeddelete-walls
    • Changedget-actor1 field changed
      • changedInput schema / properties / identifier / description
        Previous 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."
    • Addedget-rolltable
    • Changedimport-item1 field changed
      • changedInput schema / properties / actorIdentifier / description
        Previous 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."
    • Addedlist-drawings
    • Addedlist-folders
    • Addedlist-lights
    • Addedlist-notes
    • Addedlist-regions
    • Addedlist-sounds
    • Addedlist-tiles
    • Addedlist-tokens
    • Addedlist-walls
    • Changedmanage-activity1 field changed
      • changedInput schema / properties / actorIdentifier / description
        Previous 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."
    • Changedmanage-effect1 field changed
      • changedInput schema / properties / actorIdentifier / description
        Previous 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."
    • Addedplace-tokens
    • Changedremove-from-actor1 field changed
      • changedInput schema / properties / actorIdentifier / description
        Previous 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."
    • Changedset-actor-art2 fields changed
      • changedInput schema / properties / imagePath / description
        Previous 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."
      • addedInput schema / properties / tokenImagePath
        Added 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"
        +}
    • Addedset-journal-page-visibility
    • Changedupdate-actor7 fields changed
      • changedInput schema / properties / actorIdentifier / description
        Previous 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."
      • addedInput schema / properties / disposition
        Added 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"
        +}
      • addedInput schema / properties / tokenAutoRotate
        Added 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"
        +}
      • addedInput schema / properties / tokenName
        Added 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"
        +}
      • addedInput schema / properties / tokenRing
        Added 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"
        +}
      • addedInput schema / properties / tokenRotation
        Added 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"
        +}
      • addedInput schema / properties / tokenScale
        Added 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"
        +}
    • Changedupdate-actor-item1 field changed
      • changedInput schema / properties / actorIdentifier / description
        Previous 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)."
    • Addedupdate-drawings
    • Addedupdate-folder
    • Changedupdate-journal1 field changed
      • addedInput schema / properties / playerVisible
        Added 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"
        +}
    • Addedupdate-lights
    • Changedupdate-note1 field changed
      • changedInput schema / properties / noteId / description
        Previous value: -"The Note id to update (from create-scene-notes)."New value: +"The Note id to update (from create-scene-notes/list-notes)."
    • Changedupdate-quest-journal1 field changed
      • addedInput schema / properties / playerVisible
        Added 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"
        +}
    • Addedupdate-region
    • Changedupdate-rolltable2 fields changed
      • addedInput schema / properties / editResults
        Added 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"
        +}
      • changedInput schema / properties / results / description
        Previous 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."
    • Changedupdate-scene4 fields changed
      • addedInput schema / properties / environment
        Added 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"
        +}
      • addedInput schema / properties / flags
        Added 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"
        +}
      • addedInput schema / properties / fog
        Added 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"
        +}
      • addedInput schema / properties / initial
        Added 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"
        +}
    • Addedupdate-sounds
    • Addedupdate-tiles
    • Addedupdate-token
    • Addedupdate-walls
  3. 95 tool updatesv1.2.2
    • First observedadd-feature
    • First observedadd-item
    • First observedadd-journal-image
    • First observedapply-condition
    • First observedasset-info
    • First observedasset-url
    • First observedauthor-npc
    • First observedbulk-delete
    • First observedcontent-audit
    • First observedcopy-asset
    • First observedcreate-actor-from-compendium
    • First observedcreate-asset-folder
    • First observedcreate-cards
    • First observedcreate-folder
    • First observedcreate-item
    • First observedcreate-journal
    • First observedcreate-pc
    • First observedcreate-pc-from-prefab
    • First observedcreate-playlist
    • First observedcreate-quest-journal
    • First observedcreate-rolltable
    • First observedcreate-scene
    • First observedcreate-scene-notes
    • First observeddelete-actor
    • First observeddelete-asset
    • First observeddelete-cards
    • First observeddelete-chat-messages
    • First observeddelete-folder
    • First observeddelete-item
    • First observeddelete-journal
    • First observeddelete-note
    • First observeddelete-playlist
    • First observeddelete-rolltable
    • First observeddelete-scene
    • First observeddownload-asset
    • First observedexport-chat-log
    • First observedfind-asset-references
    • First observedget-actor
    • First observedget-actor-entity
    • First observedget-compendium-entry
    • First observedget-current-scene
    • First observedget-item
    • First observedget-scene-dimensions
    • First observedget-world-info
    • First observedimport-cards
    • First observedimport-item
    • First observedimport-rolltable
    • First observedinspect-pc-advancement
    • First observedlevel-up-pc
    • First observedlink-quest-to-npc
    • First observedlist-actor-ownership
    • First observedlist-actors
    • First observedlist-assets
    • First observedlist-cards
    • First observedlist-chat-messages
    • First observedlist-compendium-packs
    • First observedlist-items
    • First observedlist-journals
    • First observedlist-playlists
    • First observedlist-rolltables
    • First observedlist-scenes
    • First observedmanage-activity
    • First observedmanage-effect
    • First observedmove-asset
    • First observedmove-documents
    • First observedparse-ddb-character
    • First observedpost-item-card
    • First observedread-pack
    • First observedrelink-asset
    • First observedremap-teleporters
    • First observedremove-from-actor
    • First observedrequest-roll
    • First observedroll-on-table
    • First observedscreenshot-scene
    • First observedsearch-actor-contents
    • First observedsearch-compendium
    • First observedsearch-compendium-creatures
    • First observedsearch-compendium-items
    • First observedsearch-compendium-spells
    • First observedsearch-journals
    • First observedsend-chat-message
    • First observedset-actor-art
    • First observedset-actor-ownership
    • First observedset-user-avatar
    • First observedupdate-actor
    • First observedupdate-actor-item
    • First observedupdate-item
    • First observedupdate-journal
    • First observedupdate-note
    • First observedupdate-playlist
    • First observedupdate-quest-journal
    • First observedupdate-rolltable
    • First observedupdate-scene
    • First observedupload-asset
    • First observedupload-asset-tree

TDQS

A3.7/5.0

Scored across 151 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count1/5

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.

Completeness4/5

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

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    A 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 npm
    32
    MIT
  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Integrates 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
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects AI assistants to Dungeons & Dragons 5e game information via the Model Context Protocol, enabling queries for spells, monsters, equipment, and more.
    48
    MIT