Skip to main content
Glama
Txpple

fvtt-mcp-molten5e

by Txpple

manage-activity

Add, edit, remove, or list D&D 5e item activities (attacks, damage, saves, heals, checks, utility, cast) on actor or world items in Foundry VTT.

Instructions

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

Input Schema

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

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed16 schema fields changedv2.1.3
    • 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"
      +]
  2. Changed1 schema field changedv1.3.0
    • 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."
  3. First observedv1.2.2

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.

Deploy Server

Other Tools