Skip to main content
Glama

Embers: Tabletop RPG Toolkit

Update a vault character

vault_update_character
Idempotent

Patch fields on an existing character by id. Only supplied fields change, with one distinction: object sub-docs (defense, core, offense, speed, personality, settings) deep-merge — nested keys you omit are preserved — but ARRAY fields (items, spells, rules, skills, actions, trackables, attributes, notes) are atomic: the array you send replaces the stored array wholesale. To add or edit one array entry, vault_get_character first, modify the returned array, and send the complete array back. Sending null for a field is treated the same as omitting it (the field keeps its current value) — null does NOT clear; to clear a text field send an empty string. This is also the canonical tool for editing a play campaign character's HP, conditions, or inventory; play characters are pointers to vault characters and play has no direct character-write endpoint. AC caution: when the character's settings.autoPassiveBonuses is true (the default for new characters in rulesets with sheet automation), the armor and shield rows of defense.armorClass are derived from equipped items and recomputed on every sheet load — change AC by setting equipped on the character's armor/shield items, not by writing those rows; when the toggle is false, defense.armorClass is manually authored and writing it directly is correct. Caution: mutations may affect any active play campaign or expedition referencing this character. Consider running vault_get_character first to inspect linkage. REQUIRES baseUpdatedAt: copy updatedAt from a fresh vault_get_character read; a stale or fabricated value is rejected with OUT_OF_SYNC and nothing is written — writing from memory of an earlier read is not possible. companions is NOT writable here (it is stripped): manage buddy ties with vault_attach_companion / vault_detach_companion, and a linked buddy's tracked values with vault_update_companion_state. linkGroup is NOT writable here either (also stripped): linked-sheet group membership is created by vault_spawn_linked_character and only vault's unlink endpoint clears it.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesMongo `_id` of the character to update.
coreNo
deadNo
nameNoCharacter display name.
typeNoCharacter type. Free-form per ruleset. Set to 'monster' (lowercase) to mark an authored monster; vault's character list endpoint filters that value out of the default catalog view.
imageNo
itemsNo
notesNo
rulesNo
speedNo
activeNo
skillsNo
spellsNo
stressNo
actionsNo
aspectsNo
defenseNo
offenseNo
rulesetNoRuleset code, from list_rulesets (the codes this account can use). Restricted rulesets require an entitlement grant on the account — vault answers 403 for ungranted or unknown codes.
settingsNo
attributesNo
trackablesNo
descriptionNo
personalityNo
baseUpdatedAtYesREQUIRED proof that you are working from the latest version: copy the `updatedAt` value verbatim from a FRESH read of this exact record (use the matching get tool first). Values from memory, from an earlier conversation, or guessed timestamps are rejected with OUT_OF_SYNC and nothing is written. After a successful update, the response carries the new `updatedAt` — use that for any follow-up write.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
_idNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / offense / properties / spellCasting / properties / bonuses
      Added value: +{
      +  "description": "The character's Misc bonuses on the spell / feature attack bonus and save DC (the sheet's Spellcasting section). The array is written whole: send every row to keep.",
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "bonus": {
      +        "description": "Flat bonus the row adds.",
      +        "type": "number"
      +      },
      +      "description": {
      +        "description": "What the bonus is (an item, a feature, a house rule).",
      +        "type": "string"
      +      },
      +      "saveDc": {
      +        "description": "Adds to the spell / feature save DC. Defaults to false.",
      +        "type": "boolean"
      +      },
      +      "toHit": {
      +        "description": "Adds to the spell / feature attack bonus. Defaults to true.",
      +        "type": "boolean"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  2. Changed46 schema fields changed
    • changedInput schema / properties / actions / items / properties / actions / description
      Previous value: -"PF Playtest action-economy marker (F/1/2/3/R)."New value: +"Action-cost marker, for rulesets whose actions carry one; the value is the source text."
    • changedInput schema / properties / actions / items / properties / attack / properties / attribute / description
      Previous value: -"Ability driving the to-hit roll (e.g. 'strength', 'charisma' for spell attacks)."New value: +"Ability driving the to-hit roll."
    • changedInput schema / properties / actions / items / properties / rof / description
      Previous value: -"Savage Worlds Rate of Fire."New value: +"Rate of fire, for rulesets whose actions carry one."
    • changedInput schema / properties / actions / items / properties / type / description
      Previous value: -"Action type. 5e24 uses 'Melee' / 'Range' / 'Special' / 'Reaction' / 'Legendary' / 'Bonus'."New value: +"Action type, as the ruleset's sheet names it."
    • changedInput schema / properties / aspects / items / properties / kind / description
      Previous value: -"One of 'high concept', 'trouble', 'character', 'consequence'."New value: +"The aspect's kind. The values are the ones the ruleset's sheet template uses; read a character of that ruleset (vault_get_character) to see them."
    • changedInput schema / properties / aspects / items / properties / shifts / description
      Previous value: -"Consequence/condition slots only: harm absorbed. Fate: 2 Mild, 4 Moderate, 6 Severe, 8 Extreme (Fate Accelerated omits Extreme). Demon Hunters conditions: 5 Mild, 10 Moderate, 15 Severe."New value: +"Consequence/condition slots only: the harm the slot absorbs, as the ruleset's sheet template sets it per slot."
    • changedInput schema / properties / attributes / items / properties / misc / description
      Previous value: -"Misc bonus on the save (5e/5e24). Used for high-PB monster compensation."New value: +"Misc bonus on the save. The monster authoring guide covers when a monster uses it."
    • changedInput schema / properties / attributes / items / properties / name / description
      Previous value: -"Ability name: strength / dexterity / constitution / intelligence / wisdom / charisma. Lowercase."New value: +"Ability id, lowercase (a value from the abilities list the typed tools' schemas carry)."
    • changedInput schema / properties / attributes / items / properties / proficient / description
      Previous value: -"Save proficiency flag (5e/5e24). When true, PB is added to the save."New value: +"Save proficiency flag. The sheet applies it to the save total."
    • changedInput schema / properties / attributes / items / properties / score / description
      Previous value: -"Raw ability score (e.g. 17). Modifier is derived by the sheet."New value: +"Raw ability score. Modifier is derived by the sheet."
    • changedInput schema / properties / core / properties / race / description
      Previous value: -"Creature type for monsters (e.g. 'Elemental', 'Humanoid', 'Dragon (Chromatic)'); race for PCs."New value: +"Creature type for monsters (source text); race for PCs."
    • changedInput schema / properties / core / properties / refresh / description
      Previous value: -"Session-start resource: fate points (Fate — Refresh) or faith dice (Demon Hunters — Devotion). The total the character resets to at the start of a session."New value: +"Session-start resource: the total the character resets to at the start of a session. The sheet template of the character's ruleset labels it."
    • changedInput schema / properties / core / properties / size / description
      Previous value: -"Creature size. Exact source text including 'or' for variable sizes ('Medium or Small')."New value: +"Creature size. Exact source text including 'or' for variable sizes ('X or Y')."
    • changedInput schema / properties / defense / properties / armorClass / description
      Previous value: -"Layered AC rows the sheet sums. IMPORTANT (5e24): when the character's `settings.autoPassiveBonuses` is true — the default for new 5e24 characters — the `armor` and `shield` rows are DERIVED from equipped items and recomputed on every sheet load, so writing them here gets overwritten. Change AC by setting `equipped: true/false` on the character's armor/shield items instead. When the toggle is false (and on all other rulesets), these rows are manually authored and writing them here is correct. `magic` and `misc` are manual in both modes. Check the toggle with vault_get_character before writing."New value: +"Layered AC rows the sheet sums. IMPORTANT: when the character's `settings.autoPassiveBonuses` is true — the default for new characters in rulesets with sheet automation — the `armor` and `shield` rows are DERIVED from equipped items and recomputed on every sheet load, so writing them here gets overwritten. Change AC by setting `equipped: true/false` on the character's armor/shield items instead. When the toggle is false (and on rulesets without sheet automation), these rows are manually authored and writing them here is correct. `magic` and `misc` are manual in both modes. Check the toggle with vault_get_character before writing."
    • changedInput schema / properties / defense / properties / armorClass / properties / armor / properties / bonus / description
      Previous value: -"Base AC value the sheet adds DEX to. See the 5e24 monster guide Rule 1 for the math."New value: +"Base AC value the sheet builds the total from. The monster authoring guide's Rule 1 gives the math."
    • changedInput schema / properties / defense / properties / armorClass / properties / armor / properties / description / description
      Previous value: -"Armor name ('Natural Armor', 'Chain Shirt') or null when AC derives from DEX only."New value: +"Armor name, source text, or null when no armor applies."
    • changedInput schema / properties / defense / properties / armorClass / properties / armor / properties / heavy / description
      Previous value: -"True suppresses DEX contribution entirely (heavy armor)."New value: +"True for heavy armor; the engine applies that armor weight's rule to the total."
    • changedInput schema / properties / defense / properties / armorClass / properties / armor / properties / medium / description
      Previous value: -"True caps DEX contribution to +2 (medium armor)."New value: +"True for medium armor; the engine applies that armor weight's rule to the total."
    • changedInput schema / properties / defense / properties / exhaustion / description
      Previous value: -"5e24 Exhaustion level (0-6). Absent = 0 (not exhausted). Each level is -2 to d20 Tests and -5 ft Speed; level 6 = death. A Long Rest via the vault rest control reduces it by 1."New value: +"Exhaustion level, within the schema's range. Absent = not exhausted. The engine applies its effects and reduces it on a rest taken through the vault rest control."
    • changedInput schema / properties / defense / properties / hitDice / properties / current / description
      Previous value: -"Unspent hit dice count. When `pools` is present (5e24 class characters), this is the derived sum of pool currents — keep it consistent with pools on write."New value: +"Unspent hit dice count. When `pools` is present, this is the derived sum of pool currents — keep it consistent with pools on write."
    • changedInput schema / properties / defense / properties / hitDice / properties / dice / description
      Previous value: -"Without `pools` (monsters, non-5e24): per-die expression, NOT the multiplied total — size-mapped Tiny d4 / Small d6 / Medium d8 / Large d10 / Huge d12 / Gargantuan d20, see monster guide Rule 20. When `pools` is present (5e24 class characters): the derived compound string ('5d10 + 5d6') — keep it consistent with pools on write."New value: +"Without `pools` (monsters, and sheets without pools): one die expression ('1dX'), NOT the multiplied total; the monster guide's Rule 20 gives a monster's die. When `pools` is present: the derived compound string, one 'NdX' term per pool joined by ' + ' — keep it consistent with pools on write."
    • changedInput schema / properties / defense / properties / hitDice / properties / pools / description
      Previous value: -"5e24 per-die-size Hit Dice pools — the AUTHORITATIVE representation (one entry per die size a multiclass character has). Maintained by creation, level-up, and a one-shot backfill; player edits win. The server does NOT re-derive the legacy fields on write, so when writing hit dice for a character with pools, write pools AND the legacy current/dice consistently (current = sum of pool currents; dice = compound string)."New value: +"Per-die-size Hit Dice pools, present on class characters the creation and level-up tools maintain — the AUTHORITATIVE representation (one entry per die size a multiclass character has). Maintained by creation, level-up, and a one-shot backfill; player edits win. The server does NOT re-derive the legacy fields on write, so when writing hit dice for a character with pools, write pools AND the legacy current/dice consistently (current = sum of pool currents; dice = compound string)."
    • changedInput schema / properties / defense / properties / hitDice / properties / pools / items / properties / dice / description
      Previous value: -"Die size of this pool, e.g. 'd10'."New value: +"Die size of this pool."
    • changedInput schema / properties / items / items / properties / sourceSpell / description
      Previous value: -"Auto-managed. Link to the spell that manufactured this companion armor item (e.g. Mage Armor, which the vault sheet offers as an equippable Light armor). The sheet sets and maintains it; if it's present on an item you're editing, preserve it verbatim, and never set, change, or invent it. Dropping it on a round-trip de-links the companion and leaves a duplicate item on the sheet."New value: +"Auto-managed. Link to the spell that manufactured this companion armor item (a spell the vault sheet offers as equippable armor). The sheet sets and maintains it; if it's present on an item you're editing, preserve it verbatim, and never set, change, or invent it. Dropping it on a round-trip de-links the companion and leaves a duplicate item on the sheet."
    • changedInput schema / properties / offense / properties / initiative / properties / attribute / description
      Previous value: -"Ability whose modifier drives initiative. Typically 'dexterity'."New value: +"Ability whose modifier drives initiative, lowercase."
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / durationCount / description
      Previous value: -"Numeric count paired with durationUnit (e.g. count: 3, unit: 'round')."New value: +"Numeric count paired with durationUnit."
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / range / description
      Previous value: -"Aura radius in feet for ally/any-audience bonuses (Aura of Protection's 10 ft.). Absent = no range filter."New value: +"Aura radius in feet for ally/any-audience bonuses. Absent = no range filter."
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / requires / items / properties / armorCategories / description
      Previous value: -"For 'equipped' + slot:armor: armor category list (Light / Medium / Heavy). OR semantics — match any."New value: +"Armor categories to match, as the items' `armorCategory` values name them. OR semantics — match any."
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / requires / items / properties / condition / description
      Previous value: -"For 'condition' predicates: the character-state condition to gate on (5e24 named conditions and ongoing-action states)."New value: +"For 'condition' predicates: the character-state condition to gate on (named conditions and ongoing-action states)."
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / requires / items / properties / condition / enum
      Previous value: -[
      -  "blinded",
      -  "charmed",
      -  "dazed",
      -  "deafened",
      -  "exhaustion",
      -  "frightened",
      -  "grappled",
      -  "incapacitated",
      -  "invisible",
      -  "paralyzed",
      -  "petrified",
      -  "poisoned",
      -  "prone",
      -  "restrained",
      -  "stunned",
      -  "unconscious",
      -  "concentrating",
      -  "grappling",
      -  "dodging",
      -  "hiding",
      -  "raging"
      -]New value: +[
      +  "blinded",
      +  "charmed",
      +  "concentration",
      +  "deafened",
      +  "exhaustion",
      +  "frightened",
      +  "grappled",
      +  "incapacitated",
      +  "invisible",
      +  "paralyzed",
      +  "petrified",
      +  "poisoned",
      +  "prone",
      +  "restrained",
      +  "stunned",
      +  "unconscious",
      +  "dazed",
      +  "grappling",
      +  "dodging",
      +  "hiding",
      +  "raging"
      +]
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / requires / items / properties / equipSlot / description
      Previous value: -"Body slot the matched weapon must occupy. mainHand / offHand. Resolved via getRequiredSlots so two-handed grips occupy both."New value: +"Body slot the matched weapon must occupy (one of the schema's enum)."
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / requires / items / properties / slot / description
      Previous value: -"For 'equipped' predicates: the body category to match (armor / shield / weapon)."New value: +"The equipped body category to match (one of the schema's enum)."
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / requires / items / properties / type / description
      Previous value: -"Predicate type. 'equipped' = character-scoped (gates on what's equipped). 'attackingWeapon' = attack-scoped (gates on the current action's source weapon). 'condition' = gates on a character-state condition."New value: +"Predicate type (one of the schema's enum): what the predicate gates on."
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / requires / items / properties / weaponProperties / description
      Previous value: -"For 'equipped' + slot:weapon OR 'attackingWeapon': weapon-property list. AND semantics — match all."New value: +"Weapon properties to match. AND semantics — match all."
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / target / description
      Previous value: -"Stat the bonus contributes to (e.g. 'skills.Acrobatics.misc', 'attributes.strength.misc')."New value: +"Stat the bonus contributes to (e.g. 'skills.<skill>.misc', 'attributes.<ability>.misc')."
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / trigger / description
      Previous value: -"Action-economy / cost shape of the bonus. passive / toggled / reaction / perRoll / resource / targetBound."New value: +"Action-economy / cost shape of the bonus."
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / triggerEvent / description
      Previous value: -"Game-time event that fires the bonus (onHit / onDamage / startOfYourTurn / etc.). Absent = not event-driven (passive walker contributes whenever `requires` holds)."New value: +"Game-time event that fires the bonus (one of the schema's trigger events). Absent = not event-driven (passive walker contributes whenever `requires` holds)."
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / valueType / enum
      Previous value: -[
      -  "fixed",
      -  "attribute",
      -  "proficiency",
      -  "level",
      -  "halfLevel",
      -  "dice",
      -  "byLevel",
      -  "attackAttribute"
      -]New value: +[
      +  "fixed",
      +  "attribute",
      +  "attackAttribute",
      +  "proficiency",
      +  "level",
      +  "halfLevel",
      +  "dice",
      +  "byLevel"
      +]
    • changedInput schema / properties / rules / items / properties / type / description
      Previous value: -"Rule type (Ability / Feat / Class / Background / etc.). Vault validates against its rulestype enum on save."New value: +"Rule type. Vault validates it on save."
    • changedInput schema / properties / ruleset / description
      Previous value: -"Ruleset code (e.g. '5th Edition', '5e24', 'PFRPG', 'Savage Worlds'). Restricted rulesets require an entitlement grant on the account — vault answers 403 for ungranted or unknown codes. Check list_rulesets for the codes this account can use."New value: +"Ruleset code, from list_rulesets (the codes this account can use). Restricted rulesets require an entitlement grant on the account — vault answers 403 for ungranted or unknown codes."
    • changedInput schema / properties / settings / properties / autoPassiveBonuses / description
      Previous value: -"When true, the per-character rules engine layer contributes statBonuses from rules / items / feats. On 5e24 it ALSO derives the armor/shield rows of defense.armorClass from equipped items, recomputed on every sheet load — manual writes to those rows do not stick while this is true. Monsters should set this to false."New value: +"When true, the per-character rules engine layer contributes statBonuses from rules / items / feats. On rulesets with sheet automation it ALSO derives the armor/shield rows of defense.armorClass from equipped items, recomputed on every sheet load — manual writes to those rows do not stick while this is true. Monsters should set this to false."
    • changedInput schema / properties / settings / properties / hiddenSections / description
      Previous value: -"Sheet-section keys the player chose to hide while the section is empty ('spells', 'abilities', 'feats', 'origin', 'actionCards', 'hindrances', 'edges', 'stunts', 'extras'). A section with content always renders regardless of this list — the preference means 'hide when empty', never 'hide my data'."New value: +"Keys of the character sheet's sections the player chose to hide while the section is empty. A section with content always renders regardless of this list — the preference means 'hide when empty', never 'hide my data'."
    • changedInput schema / properties / skills / items / properties / rating / description
      Previous value: -"Fate: ladder position, -2 (Terrible) to +8 (Legendary); also an FAE approach's rating. Demon Hunters: the trait's die size (4, 6, 8, 10, or 12), or 0 for an unrated Fringe discipline."New value: +"The rating, on the ruleset's own scale. The ruleset's sheet template sets it; read a character of that ruleset (vault_get_character) to see the values."
    • changedInput schema / properties / spells / items / properties / recovery / description
      Previous value: -"Per-rest recovery rows for a finite free-cast counter, stamped from the granting rule's freeCast.recovery whenever the counter is created or grown (creation build and level-up). The vault rest control refills the counter from these when the player declares a Short/Long rest. Absent = the counter doesn't refresh on rest."New value: +"Per-rest recovery rows for a finite free-cast counter, stamped from the granting rule's freeCast.recovery whenever the counter is created or grown (creation build and level-up). The vault rest control refills the counter from these when the player declares the rest a row's `on` field names. Absent = the counter doesn't refresh on rest."
    • changedInput schema / properties / stress / items / properties / name / description
      Previous value: -"Track name — 'Physical Stress' / 'Mental Stress' in Fate Core, 'Stress' in Fate Accelerated."New value: +"Track name, as the ruleset's sheet template names its tracks."
    • changedInput schema / properties / trackables / items / properties / slotLevel / description
      Previous value: -"Spell-slot level of this pool (Pact Magic: one pool whose level rises with character level), stamped at build from the granting rule's uses[].slotLevel. The sheet shows it on the trackable row ('Level N'). Absent = an ordinary counter."New value: +"Spell-slot level of this pool, stamped at build from the granting rule's uses[].slotLevel. The sheet shows it on the trackable row ('Level N'). Absent = an ordinary counter."
  3. Changed28 schema fields changed
    • addedInput schema / $schema
      Added value: +"http://json-schema.org/draft-07/schema#"
    • addedInput schema / additionalProperties
      Added value: +{}
    • addedInput schema / properties / actions
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "_item": {
      +        "description": "Optional back-reference to the Vault Item this action was built from.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "_rule": {
      +        "description": "Optional back-reference to the Vault Rule this action was built from.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "_spell": {
      +        "description": "Optional back-reference to the Vault Spell this action was built from.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "actions": {
      +        "description": "PF Playtest action-economy marker (F/1/2/3/R).",
      +        "type": "string"
      +      },
      +      "attack": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "attribute": {
      +            "description": "Ability driving the to-hit roll (e.g. 'strength', 'charisma' for spell attacks).",
      +            "type": "string"
      +          },
      +          "magic": {
      +            "type": "number"
      +          },
      +          "misc": {
      +            "type": "number"
      +          },
      +          "proficiency": {
      +            "type": "number"
      +          },
      +          "skill": {
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "damage": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "attribute": {
      +            "description": "Ability whose modifier is added to damage.",
      +            "type": "string"
      +          },
      +          "critical": {
      +            "type": "string"
      +          },
      +          "dice": {
      +            "description": "Base damage dice expression (e.g. '2d8'). Additional damage types live in `description` per Rule 11.",
      +            "type": "string"
      +          },
      +          "magic": {
      +            "type": "number"
      +          },
      +          "misc": {
      +            "type": "number"
      +          },
      +          "type": {
      +            "description": "Damage type ('piercing', 'fire', etc.). Source-exact, capitalize if the source does.",
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "description": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "proficient": {
      +        "type": "boolean"
      +      },
      +      "range": {
      +        "type": "string"
      +      },
      +      "rof": {
      +        "description": "Savage Worlds Rate of Fire.",
      +        "type": "number"
      +      },
      +      "summary": {
      +        "type": "string"
      +      },
      +      "type": {
      +        "description": "Action type. 5e24 uses 'Melee' / 'Range' / 'Special' / 'Reaction' / 'Legendary' / 'Bonus'.",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / active
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / aspects
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "description": {
      +        "type": "string"
      +      },
      +      "kind": {
      +        "description": "One of 'high concept', 'trouble', 'character', 'consequence'.",
      +        "type": "string"
      +      },
      +      "name": {
      +        "description": "The aspect's phrase. A consequence slot carries its cost while blank.",
      +        "type": "string"
      +      },
      +      "shifts": {
      +        "description": "Consequence/condition slots only: harm absorbed. Fate: 2 Mild, 4 Moderate, 6 Severe, 8 Extreme (Fate Accelerated omits Extreme). Demon Hunters conditions: 5 Mild, 10 Moderate, 15 Severe.",
      +        "type": "number"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / attributes
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "misc": {
      +        "description": "Misc bonus on the save (5e/5e24). Used for high-PB monster compensation.",
      +        "type": "number"
      +      },
      +      "name": {
      +        "description": "Ability name: strength / dexterity / constitution / intelligence / wisdom / charisma. Lowercase.",
      +        "type": "string"
      +      },
      +      "proficient": {
      +        "description": "Save proficiency flag (5e/5e24). When true, PB is added to the save.",
      +        "type": "boolean"
      +      },
      +      "score": {
      +        "description": "Raw ability score (e.g. 17). Modifier is derived by the sheet.",
      +        "type": "number"
      +      },
      +      "temp": {
      +        "type": "number"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / baseUpdatedAt
      Added value: +{
      +  "description": "REQUIRED proof that you are working from the latest version: copy the `updatedAt` value verbatim from a FRESH read of this exact record (use the matching get tool first). Values from memory, from an earlier conversation, or guessed timestamps are rejected with OUT_OF_SYNC and nothing is written. After a successful update, the response carries the new `updatedAt` — use that for any follow-up write.",
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / core
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "age": {
      +      "type": "string"
      +    },
      +    "alignment": {
      +      "type": "string"
      +    },
      +    "ancestry": {
      +      "type": "string"
      +    },
      +    "background": {
      +      "type": "string"
      +    },
      +    "baseAttackBonus": {
      +      "type": "number"
      +    },
      +    "charisma": {
      +      "type": "string"
      +    },
      +    "class": {
      +      "description": "Character class as free-form text. PCs use a Class rule via rules[]; this field is the display string.",
      +      "type": "string"
      +    },
      +    "cr": {
      +      "type": "string"
      +    },
      +    "deity": {
      +      "type": "string"
      +    },
      +    "experience": {
      +      "description": "Character-level XP (no commas). For monsters, the value from the CR→level XP table.",
      +      "type": "string"
      +    },
      +    "eyes": {
      +      "type": "string"
      +    },
      +    "gender": {
      +      "type": "string"
      +    },
      +    "hair": {
      +      "type": "string"
      +    },
      +    "height": {
      +      "type": "string"
      +    },
      +    "homeland": {
      +      "type": "string"
      +    },
      +    "languages": {
      +      "type": "string"
      +    },
      +    "proficiencies": {
      +      "type": "string"
      +    },
      +    "pronouns": {
      +      "description": "The character's pronouns as free-form text (e.g. 'she/her', 'they/them').",
      +      "type": "string"
      +    },
      +    "race": {
      +      "description": "Creature type for monsters (e.g. 'Elemental', 'Humanoid', 'Dragon (Chromatic)'); race for PCs.",
      +      "type": "string"
      +    },
      +    "refresh": {
      +      "description": "Session-start resource: fate points (Fate — Refresh) or faith dice (Demon Hunters — Devotion). The total the character resets to at the start of a session.",
      +      "type": "number"
      +    },
      +    "size": {
      +      "description": "Creature size. Exact source text including 'or' for variable sizes ('Medium or Small').",
      +      "type": "string"
      +    },
      +    "skin": {
      +      "type": "string"
      +    },
      +    "spellCastingAttribute": {
      +      "type": "string"
      +    },
      +    "weight": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / dead
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / defense
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "armorClass": {
      +      "additionalProperties": {},
      +      "description": "Layered AC rows the sheet sums. IMPORTANT (5e24): when the character's `settings.autoPassiveBonuses` is true — the default for new 5e24 characters — the `armor` and `shield` rows are DERIVED from equipped items and recomputed on every sheet load, so writing them here gets overwritten. Change AC by setting `equipped: true/false` on the character's armor/shield items instead. When the toggle is false (and on all other rulesets), these rows are manually authored and writing them here is correct. `magic` and `misc` are manual in both modes. Check the toggle with vault_get_character before writing.",
      +      "properties": {
      +        "armor": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "bonus": {
      +              "description": "Base AC value the sheet adds DEX to. See the 5e24 monster guide Rule 1 for the math.",
      +              "type": "number"
      +            },
      +            "checkPenalty": {
      +              "type": "number"
      +            },
      +            "description": {
      +              "description": "Armor name ('Natural Armor', 'Chain Shirt') or null when AC derives from DEX only.",
      +              "type": "string"
      +            },
      +            "heavy": {
      +              "description": "True suppresses DEX contribution entirely (heavy armor).",
      +              "type": "boolean"
      +            },
      +            "maxDex": {
      +              "type": "number"
      +            },
      +            "medium": {
      +              "description": "True caps DEX contribution to +2 (medium armor).",
      +              "type": "boolean"
      +            },
      +            "proficiency": {
      +              "type": "number"
      +            },
      +            "speed": {
      +              "type": "string"
      +            },
      +            "speedPenalty": {
      +              "type": "string"
      +            },
      +            "spellFail": {
      +              "type": "string"
      +            },
      +            "touchBonus": {
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "arms": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "bonus": {
      +              "type": "number"
      +            },
      +            "description": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "deflection": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "bonus": {
      +              "type": "number"
      +            },
      +            "description": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "dodge": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "bonus": {
      +              "type": "number"
      +            },
      +            "description": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "head": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "bonus": {
      +              "type": "number"
      +            },
      +            "description": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "legs": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "bonus": {
      +              "type": "number"
      +            },
      +            "description": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "magic": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "bonus": {
      +              "type": "number"
      +            },
      +            "description": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "misc": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "bonus": {
      +              "type": "number"
      +            },
      +            "description": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "natural": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "bonus": {
      +              "type": "number"
      +            },
      +            "description": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "shield": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "bonus": {
      +              "type": "number"
      +            },
      +            "checkPenalty": {
      +              "type": "number"
      +            },
      +            "description": {
      +              "type": "string"
      +            },
      +            "maxDex": {
      +              "type": "number"
      +            },
      +            "proficiency": {
      +              "type": "number"
      +            },
      +            "raised": {
      +              "type": "boolean"
      +            },
      +            "spellFail": {
      +              "type": "number"
      +            },
      +            "touchBonus": {
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "damageReduction": {
      +      "type": "string"
      +    },
      +    "deathSaves": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "failures": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "successes": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "dying": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "current": {
      +          "type": "number"
      +        },
      +        "wounds": {
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "exhaustion": {
      +      "description": "5e24 Exhaustion level (0-6). Absent = 0 (not exhausted). Each level is -2 to d20 Tests and -5 ft Speed; level 6 = death. A Long Rest via the vault rest control reduces it by 1.",
      +      "maximum": 6,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "health": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "fatigue": {
      +          "type": "number"
      +        },
      +        "incapacitated": {
      +          "type": "boolean"
      +        },
      +        "wounds": {
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "hitDice": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "current": {
      +          "description": "Unspent hit dice count. When `pools` is present (5e24 class characters), this is the derived sum of pool currents — keep it consistent with pools on write.",
      +          "type": "number"
      +        },
      +        "dice": {
      +          "description": "Without `pools` (monsters, non-5e24): per-die expression, NOT the multiplied total — size-mapped Tiny d4 / Small d6 / Medium d8 / Large d10 / Huge d12 / Gargantuan d20, see monster guide Rule 20. When `pools` is present (5e24 class characters): the derived compound string ('5d10 + 5d6') — keep it consistent with pools on write.",
      +          "type": "string"
      +        },
      +        "pools": {
      +          "description": "5e24 per-die-size Hit Dice pools — the AUTHORITATIVE representation (one entry per die size a multiclass character has). Maintained by creation, level-up, and a one-shot backfill; player edits win. The server does NOT re-derive the legacy fields on write, so when writing hit dice for a character with pools, write pools AND the legacy current/dice consistently (current = sum of pool currents; dice = compound string).",
      +          "items": {
      +            "additionalProperties": {},
      +            "properties": {
      +              "current": {
      +                "maximum": 9007199254740991,
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              "dice": {
      +                "description": "Die size of this pool, e.g. 'd10'.",
      +                "type": "string"
      +              },
      +              "maximum": {
      +                "maximum": 9007199254740991,
      +                "minimum": 0,
      +                "type": "integer"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "type": "array"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "hitPoints": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "current": {
      +          "type": "number"
      +        },
      +        "maximum": {
      +          "type": "number"
      +        },
      +        "temp": {
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "parryBonus": {
      +      "type": "number"
      +    },
      +    "savingThrows": {
      +      "items": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "attribute": {
      +            "type": "string"
      +          },
      +          "base": {
      +            "type": "number"
      +          },
      +          "magic": {
      +            "type": "number"
      +          },
      +          "misc": {
      +            "type": "number"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "proficiency": {
      +            "type": "number"
      +          },
      +          "temp": {
      +            "type": "number"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "spellResistance": {
      +      "type": "string"
      +    },
      +    "toughnessBonus": {
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / description
      Added value: +{
      +  "type": "string"
      +}
    • addedInput schema / properties / id
      Added value: +{
      +  "description": "Mongo `_id` of the character to update.",
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / image
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "url": {
      +      "description": "Image URL hosted on Embers Images (or any addressable HTTPS URL).",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / items
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "_ref": {
      +        "description": "Mongo `_id` reference (24-character hex string).",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "armorCategory": {
      +        "type": "string"
      +      },
      +      "armorClass": {
      +        "type": "number"
      +      },
      +      "carried": {
      +        "type": "boolean"
      +      },
      +      "cost": {
      +        "type": "number"
      +      },
      +      "damageDice": {
      +        "type": "string"
      +      },
      +      "damageType": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "description": {
      +        "type": "string"
      +      },
      +      "detail": {
      +        "type": "string"
      +      },
      +      "equipSlot": {
      +        "type": "string"
      +      },
      +      "equipSlots": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "equipped": {
      +        "description": "Monsters: ALWAYS false. Never set equipped/equipSlot on a monster's items.",
      +        "type": "boolean"
      +      },
      +      "image": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "url": {
      +            "description": "Image URL hosted on Embers Images (or any addressable HTTPS URL).",
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "mastery": {
      +        "type": "string"
      +      },
      +      "maxDexModifier": {
      +        "type": "number"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "properties": {
      +        "items": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "ammoType": {
      +              "type": "string"
      +            },
      +            "damage": {
      +              "type": "string"
      +            },
      +            "display": {
      +              "type": "string"
      +            },
      +            "name": {
      +              "type": "string"
      +            },
      +            "range": {
      +              "additionalProperties": {},
      +              "properties": {
      +                "long": {
      +                  "type": "number"
      +                },
      +                "normal": {
      +                  "type": "number"
      +                }
      +              },
      +              "type": "object"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "quantity": {
      +        "type": "number"
      +      },
      +      "sourceSpell": {
      +        "description": "Auto-managed. Link to the spell that manufactured this companion armor item (e.g. Mage Armor, which the vault sheet offers as an equippable Light armor). The sheet sets and maintains it; if it's present on an item you're editing, preserve it verbatim, and never set, change, or invent it. Dropping it on a round-trip de-links the companion and leaves a duplicate item on the sheet.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "stealthDisadvantage": {
      +        "type": "boolean"
      +      },
      +      "stock": {
      +        "type": "boolean"
      +      },
      +      "strengthRequirement": {
      +        "type": "number"
      +      },
      +      "summary": {
      +        "type": "string"
      +      },
      +      "twoHandedGrip": {
      +        "type": "boolean"
      +      },
      +      "type": {
      +        "type": "string"
      +      },
      +      "weaponType": {
      +        "type": "string"
      +      },
      +      "weight": {
      +        "type": "number"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / name
      Added value: +{
      +  "description": "Character display name.",
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / notes
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "description": {
      +        "description": "Note body. Free-form markdown.",
      +        "type": "string"
      +      },
      +      "name": {
      +        "description": "Note title. Used as the visible heading on the character sheet.",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / offense
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "initiative": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "attribute": {
      +          "description": "Ability whose modifier drives initiative. Typically 'dexterity'.",
      +          "type": "string"
      +        },
      +        "misc": {
      +          "description": "Misc bonus added to initiative beyond the attribute modifier.",
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "perception": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "attribute": {
      +          "type": "string"
      +        },
      +        "misc": {
      +          "type": "number"
      +        },
      +        "proficiency": {
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "spellCasting": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "attribute": {
      +          "type": "string"
      +        },
      +        "misc": {
      +          "type": "number"
      +        },
      +        "proficiency": {
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / personality
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "bonds": {
      +      "type": "string"
      +    },
      +    "flaws": {
      +      "type": "string"
      +    },
      +    "ideals": {
      +      "type": "string"
      +    },
      +    "traits": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / rules
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "_ref": {
      +        "description": "Master Rule ObjectId. Present when the snapshot points at a Vault Rule (PC catalog content); null on stock-monster-style inline rules.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "actions": {
      +        "type": "string"
      +      },
      +      "description": {
      +        "type": "string"
      +      },
      +      "detail": {
      +        "type": "string"
      +      },
      +      "level": {
      +        "description": "Per-instance class level (this character's level in this class) — only meaningful on a Class snapshot. Stored and read directly, never derived; total character level stays XP-derived. Absent on non-Class snapshots.",
      +        "type": "number"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "statBonuses": {
      +        "items": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "attribute": {
      +              "description": "For valueType: 'attribute' — which ability's modifier to use.",
      +              "type": "string"
      +            },
      +            "audience": {
      +              "description": "Who the bonus contributes to. Absent = self.",
      +              "enum": [
      +                "self",
      +                "ally",
      +                "any",
      +                "target",
      +                "enemy"
      +              ],
      +              "type": "string"
      +            },
      +            "dice": {
      +              "description": "For valueType: 'dice' — dice expression (e.g. '1d4').",
      +              "type": "string"
      +            },
      +            "durationCount": {
      +              "description": "Numeric count paired with durationUnit (e.g. count: 3, unit: 'round').",
      +              "maximum": 9007199254740991,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "durationUnit": {
      +              "description": "How long the bonus persists once fired. Only meaningful for event-driven bonuses.",
      +              "enum": [
      +                "instantaneous",
      +                "untilStartOfNextTurn",
      +                "untilEndOfNextTurn",
      +                "round",
      +                "minute",
      +                "hour",
      +                "untilShortRest",
      +                "untilLongRest"
      +              ],
      +              "type": "string"
      +            },
      +            "fixed": {
      +              "description": "For valueType: 'fixed' — the literal numeric contribution.",
      +              "type": "number"
      +            },
      +            "progression": {
      +              "description": "For valueType: 'byLevel' — per-level rows; walker picks the row with level <= current level.",
      +              "items": {
      +                "additionalProperties": {},
      +                "properties": {
      +                  "dice": {
      +                    "type": "string"
      +                  },
      +                  "flat": {
      +                    "type": "number"
      +                  },
      +                  "level": {
      +                    "maximum": 20,
      +                    "minimum": 1,
      +                    "type": "integer"
      +                  }
      +                },
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "range": {
      +              "description": "Aura radius in feet for ally/any-audience bonuses (Aura of Protection's 10 ft.). Absent = no range filter.",
      +              "maximum": 9007199254740991,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "requires": {
      +              "description": "Optional predicate list that gates this bonus. Absent / empty = always-on.",
      +              "items": {
      +                "additionalProperties": {},
      +                "properties": {
      +                  "armorCategories": {
      +                    "description": "For 'equipped' + slot:armor: armor category list (Light / Medium / Heavy). OR semantics — match any.",
      +                    "items": {
      +                      "type": "string"
      +                    },
      +                    "type": "array"
      +                  },
      +                  "condition": {
      +                    "description": "For 'condition' predicates: the character-state condition to gate on (5e24 named conditions and ongoing-action states).",
      +                    "enum": [
      +                      "blinded",
      +                      "charmed",
      +                      "dazed",
      +                      "deafened",
      +                      "exhaustion",
      +                      "frightened",
      +                      "grappled",
      +                      "incapacitated",
      +                      "invisible",
      +                      "paralyzed",
      +                      "petrified",
      +                      "poisoned",
      +                      "prone",
      +                      "restrained",
      +                      "stunned",
      +                      "unconscious",
      +                      "concentrating",
      +                      "grappling",
      +                      "dodging",
      +                      "hiding",
      +                      "raging"
      +                    ],
      +                    "type": "string"
      +                  },
      +                  "equipSlot": {
      +                    "description": "Body slot the matched weapon must occupy. mainHand / offHand. Resolved via getRequiredSlots so two-handed grips occupy both.",
      +                    "enum": [
      +                      "mainHand",
      +                      "offHand"
      +                    ],
      +                    "type": "string"
      +                  },
      +                  "negate": {
      +                    "description": "true inverts the predicate — 'while NOT matching' instead of 'while matching'.",
      +                    "type": "boolean"
      +                  },
      +                  "slot": {
      +                    "description": "For 'equipped' predicates: the body category to match (armor / shield / weapon).",
      +                    "enum": [
      +                      "armor",
      +                      "shield",
      +                      "weapon"
      +                    ],
      +                    "type": "string"
      +                  },
      +                  "type": {
      +                    "description": "Predicate type. 'equipped' = character-scoped (gates on what's equipped). 'attackingWeapon' = attack-scoped (gates on the current action's source weapon). 'condition' = gates on a character-state condition.",
      +                    "enum": [
      +                      "equipped",
      +                      "attackingWeapon",
      +                      "condition"
      +                    ],
      +                    "type": "string"
      +                  },
      +                  "weaponProperties": {
      +                    "description": "For 'equipped' + slot:weapon OR 'attackingWeapon': weapon-property list. AND semantics — match all.",
      +                    "items": {
      +                      "type": "string"
      +                    },
      +                    "type": "array"
      +                  }
      +                },
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "requiresLogic": {
      +              "description": "How `requires` predicates compose. 'and' (default) = ALL must hold. 'or' = ANY one is sufficient.",
      +              "enum": [
      +                "and",
      +                "or"
      +              ],
      +              "type": "string"
      +            },
      +            "target": {
      +              "description": "Stat the bonus contributes to (e.g. 'skills.Acrobatics.misc', 'attributes.strength.misc').",
      +              "type": "string"
      +            },
      +            "trigger": {
      +              "description": "Action-economy / cost shape of the bonus. passive / toggled / reaction / perRoll / resource / targetBound.",
      +              "enum": [
      +                "passive",
      +                "toggled",
      +                "reaction",
      +                "perRoll",
      +                "resource",
      +                "targetBound"
      +              ],
      +              "type": "string"
      +            },
      +            "triggerEvent": {
      +              "description": "Game-time event that fires the bonus (onHit / onDamage / startOfYourTurn / etc.). Absent = not event-driven (passive walker contributes whenever `requires` holds).",
      +              "enum": [
      +                "onHit",
      +                "onMiss",
      +                "onDamage",
      +                "startOfYourTurn",
      +                "endOfYourTurn",
      +                "startOfTargetTurn",
      +                "endOfTargetTurn"
      +              ],
      +              "type": "string"
      +            },
      +            "types": {
      +              "description": "Damage type tags for damage.* targets. No-op for non-damage targets.",
      +              "items": {
      +                "type": "string"
      +              },
      +              "type": "array"
      +            },
      +            "valueType": {
      +              "description": "How the contribution is computed. 'fixed' uses `fixed`; 'attribute' uses the mod of `attribute`; 'attackAttribute' uses the action's attack-roll ability (per-attack only); others scale by level/PB/dice.",
      +              "enum": [
      +                "fixed",
      +                "attribute",
      +                "proficiency",
      +                "level",
      +                "halfLevel",
      +                "dice",
      +                "byLevel",
      +                "attackAttribute"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "stock": {
      +        "type": "boolean"
      +      },
      +      "summary": {
      +        "type": "string"
      +      },
      +      "type": {
      +        "description": "Rule type (Ability / Feat / Class / Background / etc.). Vault validates against its rulestype enum on save.",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / ruleset
      Added value: +{
      +  "description": "Ruleset code (e.g. '5th Edition', '5e24', 'PFRPG', 'Savage Worlds'). Restricted rulesets require an entitlement grant on the account — vault answers 403 for ungranted or unknown codes. Check list_rulesets for the codes this account can use.",
      +  "type": "string"
      +}
    • addedInput schema / properties / settings
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "autoPassiveBonuses": {
      +      "description": "When true, the per-character rules engine layer contributes statBonuses from rules / items / feats. On 5e24 it ALSO derives the armor/shield rows of defense.armorClass from equipped items, recomputed on every sheet load — manual writes to those rows do not stick while this is true. Monsters should set this to false.",
      +      "type": "boolean"
      +    },
      +    "hiddenSections": {
      +      "description": "Sheet-section keys the player chose to hide while the section is empty ('spells', 'abilities', 'feats', 'origin', 'actionCards', 'hindrances', 'edges', 'stunts', 'extras'). A section with content always renders regardless of this list — the preference means 'hide when empty', never 'hide my data'.",
      +      "items": {
      +        "maxLength": 64,
      +        "type": "string"
      +      },
      +      "maxItems": 20,
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / skills
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "attribute": {
      +        "type": "string"
      +      },
      +      "classSkill": {
      +        "type": "boolean"
      +      },
      +      "description": {
      +        "type": "string"
      +      },
      +      "expertise": {
      +        "type": "boolean"
      +      },
      +      "misc": {
      +        "type": "number"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "passiveMisc": {
      +        "type": "number"
      +      },
      +      "proficiency": {
      +        "type": "number"
      +      },
      +      "proficient": {
      +        "type": "boolean"
      +      },
      +      "ranks": {
      +        "type": "number"
      +      },
      +      "rating": {
      +        "description": "Fate: ladder position, -2 (Terrible) to +8 (Legendary); also an FAE approach's rating. Demon Hunters: the trait's die size (4, 6, 8, 10, or 12), or 0 for an unrated Fringe discipline.",
      +        "type": "number"
      +      },
      +      "score": {
      +        "type": "number"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / speed
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "base": {
      +      "description": "Walking speed in feet.",
      +      "type": "number"
      +    },
      +    "burrow": {
      +      "type": "number"
      +    },
      +    "climb": {
      +      "type": "number"
      +    },
      +    "fly": {
      +      "type": "number"
      +    },
      +    "swim": {
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / spells
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "_ref": {
      +        "description": "Mongo `_id` reference (24-character hex string).",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "actions": {
      +        "type": "string"
      +      },
      +      "atWill": {
      +        "description": "Free-cast budget. true = the spell casts without a slot an unlimited number of times (rendered as an 'at will' badge, no use counter); a finite free cast uses maximum/current instead. Absent = an ordinary spell.",
      +        "type": "boolean"
      +      },
      +      "castingAbility": {
      +        "description": "Per-spell spellcasting-ability override (lowercase), stamped at build from the granting block's castingAbility / the player's pick. The sheet computes THIS spell's save DC / attack bonus from it. Absent = the spell uses the character-wide casting ability.",
      +        "enum": [
      +          "strength",
      +          "dexterity",
      +          "constitution",
      +          "intelligence",
      +          "wisdom",
      +          "charisma"
      +        ],
      +        "type": "string"
      +      },
      +      "current": {
      +        "type": "number"
      +      },
      +      "description": {
      +        "type": "string"
      +      },
      +      "detail": {
      +        "type": "string"
      +      },
      +      "level": {
      +        "type": "number"
      +      },
      +      "maximum": {
      +        "type": "number"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "prepared": {
      +        "type": "boolean"
      +      },
      +      "rank": {
      +        "type": "string"
      +      },
      +      "recovery": {
      +        "description": "Per-rest recovery rows for a finite free-cast counter, stamped from the granting rule's freeCast.recovery whenever the counter is created or grown (creation build and level-up). The vault rest control refills the counter from these when the player declares a Short/Long rest. Absent = the counter doesn't refresh on rest.",
      +        "items": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "count": {
      +              "maximum": 9007199254740991,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "on": {
      +              "enum": [
      +                "Short",
      +                "Long"
      +              ],
      +              "type": "string"
      +            },
      +            "restoreAll": {
      +              "type": "boolean"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "school": {
      +        "type": "string"
      +      },
      +      "stock": {
      +        "type": "boolean"
      +      },
      +      "summary": {
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / stress
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "boxes": {
      +        "items": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "marked": {
      +              "type": "boolean"
      +            },
      +            "value": {
      +              "description": "Shifts this box absorbs. Stated per box, not implied by its position.",
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "name": {
      +        "description": "Track name — 'Physical Stress' / 'Mental Stress' in Fate Core, 'Stress' in Fate Accelerated.",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / trackables
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "_rule": {
      +        "description": "Mongo `_id` reference (24-character hex string).",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "_spell": {
      +        "description": "The Spell this trackable is a free-cast budget for (a spell grant's `freeCast`). Present means 'N casts of this spell without a slot'; the sheet surfaces it on that spell. Absent on every other trackable.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "current": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "description": {
      +        "type": "string"
      +      },
      +      "maximum": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "recovery": {
      +        "items": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "count": {
      +              "maximum": 9007199254740991,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "on": {
      +              "enum": [
      +                "Short",
      +                "Long"
      +              ],
      +              "type": "string"
      +            },
      +            "restoreAll": {
      +              "type": "boolean"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "slotLevel": {
      +        "description": "Spell-slot level of this pool (Pact Magic: one pool whose level rises with character level), stamped at build from the granting rule's uses[].slotLevel. The sheet shows it on the trackable row ('Level N'). Absent = an ordinary counter.",
      +        "maximum": 9,
      +        "minimum": 1,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "description": "'number' (counter) or 'checkboxes' (filled boxes). Defaults to 'number'.",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / type
      Added value: +{
      +  "description": "Character type. Free-form per ruleset. Set to 'monster' (lowercase) to mark an authored monster; vault's character list endpoint filters that value out of the default catalog view.",
      +  "type": "string"
      +}
    • addedInput schema / required
      Added value: +[
      +  "id",
      +  "baseUpdatedAt"
      +]
  4. First observed

TDQS

Score is being calculated.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources