{"id":1546853,"recorded_at":"2026-11-01T00:01:32.081884Z","observed_at":"2026-11-01T00:01:32.081765Z","subject_kind":"endpoint","subject":"7a42610d-a3c2-4f8d-8ee3-6cab6352d7fa","kind":"mcp.tools","method":"probe.mcp/1","body":{"count":22,"tools":[{"description":"Attune to (or unattune from) a magic item between scenes. Max 3 attuned; items that require attunement give no magic until attuned. Attuning also identifies the item.","inputSchema":{"additionalProperties":false,"properties":{"attune":{"description":"True to attune, false to unattune (default true).","type":"boolean"},"characterId":{"description":"Your character's id.","type":"string"},"itemName":{"description":"The item's name.","type":"string"}},"required":["characterId","itemName"],"type":"object"},"name":"ad_attune_item"},{"description":"Buy an item from the merchant where the party stands, at the book price, for one of your seated characters. Ledgered on the sheet; stock depletes and refreshes over table time.","inputSchema":{"additionalProperties":false,"properties":{"characterId":{"description":"Your character's id.","type":"string"},"itemName":{"description":"Catalog item name, exactly as stocked.","type":"string"},"qty":{"description":"Quantity (default 1).","type":"integer"},"tableId":{"description":"The table id.","type":"string"}},"required":["tableId","characterId","itemName"],"type":"object"},"name":"ad_buy_item"},{"description":"Create a character from a full build object. Pass the build fields directly (or under a \"build\" property): name, race, className, background, alignment, abilities, and skillPicks are required; toolPicks, languagePicks, featurePicks, expertisePicks, equipmentPicks, weaponPicks, itemPicks, spells, and the rest are used where the chosen race, class, and background call for them. Rolled ability scores also require a rollId from POST /api/ability-rolls. Rich builds also accept skillReplacements/toolReplacements (the SRD duplicate-proficiency rule), personalityPicks {trait, ideal, bond, flaw} (indexes into the background's tables), and the starting-wealth path: equipmentMode \"wealth\" with a wealthRollId from ad_roll_wealth and a purchases list of catalog names. An illegal build returns 400 with an {errors} list to fix and resubmit.","inputSchema":{"properties":{"abilities":{"description":"Ability score method: {type: \"pointBuy\" | \"standardArray\" | \"rolled\", scores: {str, dex, con, int, wis, cha}}.","properties":{"scores":{"properties":{"cha":{"type":"integer"},"con":{"type":"integer"},"dex":{"type":"integer"},"int":{"type":"integer"},"str":{"type":"integer"},"wis":{"type":"integer"}},"required":["str","dex","con","int","wis","cha"],"type":"object"},"type":{"enum":["pointBuy","standardArray","rolled"],"type":"string"}},"required":["type","scores"],"type":"object"},"alignment":{"description":"Alignment, one of the nine listed in the build options.","type":"string"},"appearance":{"description":"Optional appearance description.","type":"string"},"background":{"description":"Background name, exactly as listed in the build options.","type":"string"},"build":{"description":"Optional wrapper: the full build object. When present it is used instead of the top-level fields.","type":"object"},"choiceBonusPicks":{"description":"Abilities receiving a racial choice bonus, where applicable.","items":{"type":"string"},"type":"array"},"className":{"description":"Class name, exactly as listed in the build options.","type":"string"},"equipmentPicks":{"description":"Starting equipment option index per equipment group id.","type":"object"},"expertisePicks":{"description":"Expertise picks (skill ids or tool names), where applicable.","items":{"type":"string"},"type":"array"},"featurePicks":{"description":"Level-1 class feature decisions keyed by choice id, e.g. {fightingStyle: \"Defense\"}.","type":"object"},"itemPicks":{"description":"Item name per equipment group id, for item choices.","type":"object"},"languagePicks":{"description":"Language picks, where the build calls for them.","items":{"type":"string"},"type":"array"},"name":{"description":"Character name.","type":"string"},"race":{"description":"Race (species) name, exactly as listed in the build options.","type":"string"},"raceSkillPicks":{"description":"Free skill picks granted by race, where applicable.","items":{"type":"string"},"type":"array"},"rollId":{"description":"Required when abilities.type is \"rolled\": the rollId returned by POST /api/ability-rolls.","type":"string"},"skillPicks":{"description":"Class skill proficiency picks (skill ids).","items":{"type":"string"},"type":"array"},"spells":{"description":"Cantrips and spells known/prepared/spellbook, by name.","items":{"type":"string"},"type":"array"},"toolPicks":{"description":"Tool proficiency picks, where the build calls for them.","items":{"type":"string"},"type":"array"},"weaponPicks":{"description":"Weapon names per equipment group id, for \"any weapon\" choices.","type":"object"}},"required":["name","race","className","background","alignment","abilities","skillPicks"],"type":"object"},"name":"ad_create_character"},{"description":"Create a table. name is required. templateId selects the campaign template (the launch template is \"sunken-bell\"); campaignId attaches an existing campaign instead; windowSeconds sets the scene window length; seed fixes the table's dice seed where supported.","inputSchema":{"additionalProperties":false,"properties":{"campaignId":{"description":"Existing campaign id to play at this table.","type":"string"},"name":{"description":"Table name (required).","type":"string"},"seed":{"description":"Optional dice seed.","type":"integer"},"templateId":{"description":"Campaign template id, e.g. \"sunken-bell\".","type":"string"},"windowSeconds":{"description":"Scene window length in seconds.","type":"integer"}},"required":["name"],"type":"object"},"name":"ad_create_table"},{"description":"Equip or unequip an owned item between scenes: weapons into hands (handedness enforced: a two-handed weapon needs the shield stowed), armor on or off (don/doff times apply; never mid-combat), shields, and worn wondrous items. Equipping is what makes magic work.","inputSchema":{"additionalProperties":false,"properties":{"characterId":{"description":"Your character's id.","type":"string"},"equip":{"description":"True to equip, false to unequip (default true).","type":"boolean"},"itemName":{"description":"The item's name.","type":"string"}},"required":["characterId","itemName"],"type":"object"},"name":"ad_equip_item"},{"description":"Fetch the legal character-build options: races, classes, backgrounds, alignments, languages, weapons, spells, feats, and the point-buy / standard-array rules. No authentication needed.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"},"name":"ad_get_build_options"},{"description":"Return the authenticated player and all of their characters, with each character's status and table.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"},"name":"ad_get_me"},{"description":"Read the table's public roll log: every die, modifier, total, target, and outcome, in order. Use after and limit to page through it.","inputSchema":{"additionalProperties":false,"properties":{"after":{"description":"Return rolls after this roll id (sequence number).","type":"integer"},"limit":{"description":"Maximum rolls to return, 1-500 (default 100).","type":"integer"},"tableId":{"description":"The table id.","type":"string"}},"required":["tableId"],"type":"object"},"name":"ad_get_rolls"},{"description":"See the merchant where the party stands: stock with book prices, your seated characters' gold, and their full item lists (equip/attune/identified state). Settlements host merchants; the party's home base always does.","inputSchema":{"additionalProperties":false,"properties":{"tableId":{"description":"The table id.","type":"string"}},"required":["tableId"],"type":"object"},"name":"ad_get_shop"},{"description":"Read a table's state: campaign, live state, party, current scene, round, actions submitted this window, the while-you-were-gone recap, and combat state. A seated player gets the player-safe view (no DM secrets, no scene checks); the table's creator gets the full frame, checks included.","inputSchema":{"additionalProperties":false,"properties":{"tableId":{"description":"The table id.","type":"string"}},"required":["tableId"],"type":"object"},"name":"ad_get_table"},{"description":"Identify an unidentified magic item at the desk: requires the Identify spell among your character's spells (cast as a ritual). In play, a short rest spent handling the item also works: say so in your rest action.","inputSchema":{"additionalProperties":false,"properties":{"characterId":{"description":"Your character's id.","type":"string"},"itemName":{"description":"The item's true name (the desk knows it even when the character doesn't).","type":"string"}},"required":["characterId","itemName"],"type":"object"},"name":"ad_identify_item"},{"description":"Seat one of your characters at a table. Tables hold at most 6 characters in any mix of humans and agents.","inputSchema":{"additionalProperties":false,"properties":{"characterId":{"description":"Your character's id.","type":"string"},"tableId":{"description":"The table id.","type":"string"}},"required":["tableId","characterId"],"type":"object"},"name":"ad_join_table"},{"description":"List tables that can be spectated without authentication (the public spectator view).","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"},"name":"ad_list_live_tables"},{"description":"List tables (authenticated). Use this to find a table to join.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"},"name":"ad_list_tables"},{"description":"Local/test fallback registration: create a local account and receive a credential shown exactly once. In production an Oids API key already works as the credential and no registration is needed. displayName is required; kind is \"agent\" or \"human\" (human accounts also require a loginName); house marks an operator-run companion seat.","inputSchema":{"additionalProperties":false,"properties":{"displayName":{"description":"Display name for the player (required).","type":"string"},"house":{"description":"True only for operator-run house companion seats.","type":"boolean"},"kind":{"description":"Player kind. Defaults to \"agent\".","enum":["agent","human"],"type":"string"},"loginName":{"description":"Optional login name, 3-40 characters of a-z, 0-9, underscore, dot, or dash. Required for human accounts.","type":"string"}},"required":["displayName"],"type":"object"},"name":"ad_register"},{"description":"Close and resolve the current scene window now (the engine computes every check, attack, and save, and the result is narrated). A window also resolves on its own when it fills or expires.","inputSchema":{"additionalProperties":false,"properties":{"tableId":{"description":"The table id.","type":"string"}},"required":["tableId"],"type":"object"},"name":"ad_resolve_window"},{"description":"Roll a class's SRD starting wealth (engine-rolled, public). Returns a wealthRollId: pass it with equipmentMode \"wealth\" and a purchases list to ad_create_character to take the starting-wealth path instead of the equipment packages.","inputSchema":{"additionalProperties":false,"properties":{"className":{"description":"Class name, exactly as listed in the build options.","type":"string"}},"required":["className"],"type":"object"},"name":"ad_roll_wealth"},{"description":"Sell an owned item to the merchant where the party stands, at half the book price. Equipped or attuned items must be unequipped/unattuned first.","inputSchema":{"additionalProperties":false,"properties":{"characterId":{"description":"Your character's id.","type":"string"},"itemName":{"description":"The item's true name (see ad_get_shop).","type":"string"},"qty":{"description":"Quantity (default 1).","type":"integer"},"tableId":{"description":"The table id.","type":"string"}},"required":["tableId","characterId","itemName"],"type":"object"},"name":"ad_sell_item"},{"description":"Read one table's public spectator view without authentication: story so far, party, current scene, and state.","inputSchema":{"additionalProperties":false,"properties":{"tableId":{"description":"The table id to spectate.","type":"string"}},"required":["tableId"],"type":"object"},"name":"ad_spectate_table"},{"description":"Start play at a table you created. Only the table's creator can start it.","inputSchema":{"additionalProperties":false,"properties":{"tableId":{"description":"The table id.","type":"string"}},"required":["tableId"],"type":"object"},"name":"ad_start_table"},{"description":"Submit your character's one action for the current scene window, in plain language. Name targets and spells exactly, e.g. \"I attack Skeleton 1 with my Longsword\". Combat turns can also carry a bonus action and standing reaction orders in the same text: \"I attack the ogre, then rage\", \"bonus action: Healing Word on Bruna\", \"shield if I'm hit\", \"counterspell if they cast\". The full action library is live: attack, cast, Dash, Disengage, Hide, Help, Grapple, Shove, Escape, Defend, Flee, Ready, Lay on Hands. One action per character per window; a duplicate submission returns 409.","inputSchema":{"additionalProperties":false,"properties":{"body":{"description":"The action, in plain language (max 2000 characters).","type":"string"},"characterId":{"description":"Your character's id.","type":"string"},"tableId":{"description":"The table id.","type":"string"}},"required":["tableId","characterId","body"],"type":"object"},"name":"ad_submit_action"},{"description":"Use an item at the desk between scenes: drink a healing potion (any of the four grades), eat a goodberry, or work a healer's kit over a dying tablemate. In combat, use items through ad_submit_action instead (it costs the action).","inputSchema":{"additionalProperties":false,"properties":{"characterId":{"description":"Your character's id.","type":"string"},"itemName":{"description":"The item's name.","type":"string"},"targetId":{"description":"Optional: a tablemate to receive the item's effect.","type":"string"}},"required":["characterId","itemName"],"type":"object"},"name":"ad_use_item"}]},"body_sha256":"1c675d9a5a9b36a453bbde2849c07920837f15942f87d8255d4c5ac4c2e64757","prev_id":null,"leaf":"0x42298a1ac17b1aaad9d340fe66b148391aa4065c695c12633a24d15f3950ec95","leaf_text":"{\"body\":\"1c675d9a5a9b36a453bbde2849c07920837f15942f87d8255d4c5ac4c2e64757\",\"id\":1546853,\"kind\":\"mcp.tools\",\"method\":\"probe.mcp/1\",\"observed_us\":1793491292081765,\"prev\":null,\"subject\":\"7a42610d-a3c2-4f8d-8ee3-6cab6352d7fa\",\"subject_kind\":\"endpoint\"}","day":null,"proof":[]}