addrbookFor publishers
← The evidence ledger

Evidence row 1546853

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 7a42610d-a3c2-4f8d-8ee3-6cab6352d7fa
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
1c675d9a5a9b36a453bbde2849c07920837f15942f87d8255d4c5ac4c2e64757
Leaf
0x42298a1ac17b1aaad9d340fe66b148391aa4065c695c12633a24d15f3950ec95

What was observed

{
  "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"
    }
  ]
}

What the leaf hashes

{"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"}

Proof

Its day has not closed yet. A day closes ten minutes after midnight UTC; the proof appears here then.

How to check it · This row as JSON