← The evidence ledger
Evidence row 561561
Observed , by probe.mcp/1.
- Kind
- mcp.tools
- About
- endpoint 23047bd5-dd68-41be-9d3b-3d21cb990943
- Recorded
- Previous row
- None: the first of its kind about this subject
- Body SHA-256
- 8afb299124b8ad52eafa8820a3cc8b8f0f48234f727b5077ed4293f9819fa193
- Leaf
- 0x4eb499ad3247d23c534b09396c64951aa2a03efeb5954ade1bc7fcc071f5821d
What was observed
{
"count": 12,
"tools": [
{
"description": "Cancel an in-flight gift and receive the refund amount. Free. Only possible before the booklet goes to print; once printing has started it fails with cancel_too_late. Pass the gift_id from create_gift and an optional reason for your records.",
"inputSchema": {
"properties": {
"gift_id": {
"description": "The gift_id returned by create_gift, identifying the order to cancel.",
"type": "string"
},
"reason": {
"description": "Optional human-readable reason for the cancellation, recorded on the order.",
"maxLength": 200,
"type": "string"
}
},
"required": [
"gift_id"
],
"type": "object"
},
"name": "cancel_gift"
},
{
"description": "Place the order: write, print, and mail the booklet. CHARGES the buyer. The recipient is whoever you name in recipient, which may be your own user. Idempotent on idempotency_key for 24 hours. Pass shared_payment_token to pay tokenlessly, or omit it to charge the account's saved card.",
"inputSchema": {
"properties": {
"agent_note": {
"description": "Optional note from the agent, stored with the order for support. Never printed in the booklet.",
"maxLength": 500,
"type": "string"
},
"brief": {
"description": "Structured brief about the recipient: what to celebrate, what to tease gently, and the inside jokes worth knowing.",
"properties": {
"celebrate": {
"items": {
"maxLength": 140,
"minLength": 4,
"type": "string"
},
"maxItems": 8,
"minItems": 2,
"type": "array"
},
"do_not_mention": {
"items": {
"maxLength": 60,
"minLength": 1,
"type": "string"
},
"maxItems": 8,
"minItems": 0,
"type": "array"
},
"image_brief": {
"maxLength": 300,
"type": "string"
},
"image_model": {
"enum": [
"flux_2_pro",
"imagen_4",
"ideogram_3",
"recraft_v4",
"gpt_image_2",
"nano_banana_2"
],
"type": "string"
},
"in_jokes": {
"items": {
"maxLength": 200,
"minLength": 4,
"type": "string"
},
"maxItems": 6,
"minItems": 0,
"type": "array"
},
"recipient_first_name": {
"maxLength": 40,
"minLength": 1,
"pattern": "^[a-zA-Z\\s'-]+$",
"type": "string"
},
"tease_gently": {
"items": {
"maxLength": 140,
"minLength": 4,
"type": "string"
},
"maxItems": 6,
"minItems": 0,
"type": "array"
},
"tone": {
"enum": [
"warm_with_ribbing",
"warm_only",
"deep_appreciation"
],
"type": "string"
},
"voice": {
"enum": [
"hype_man",
"best_friend",
"conspiracy"
],
"type": "string"
}
},
"required": [
"recipient_first_name",
"voice",
"tone",
"celebrate"
],
"type": "object"
},
"format": {
"description": "Booklet format. Only manual_v1, a 16-page booklet, is supported today.",
"enum": [
"manual_v1"
],
"type": "string"
},
"idempotency_key": {
"description": "Caller-chosen key that makes this order idempotent for 24 hours. Reuse the same key to retry safely without charging twice.",
"maxLength": 64,
"minLength": 8,
"type": "string"
},
"preview_before_print": {
"description": "If true, the gift pauses for buyer review before printing instead of printing automatically.",
"type": "boolean"
},
"recipient": {
"description": "Who receives the booklet and where to mail it. Pass an inline recipient with a US ship_to, or a saved recipient_id.",
"oneOf": [
{
"properties": {
"recipient_id": {
"minLength": 1,
"type": "string"
}
},
"required": [
"recipient_id"
],
"type": "object"
},
{
"properties": {
"first_name": {
"maxLength": 40,
"minLength": 1,
"pattern": "^[a-zA-Z\\s'-]+$",
"type": "string"
},
"ship_to": {
"properties": {
"city": {
"maxLength": 60,
"minLength": 1,
"type": "string"
},
"country": {
"maxLength": 2,
"minLength": 2,
"pattern": "^[A-Z]{2}$",
"type": "string"
},
"line1": {
"maxLength": 120,
"minLength": 1,
"type": "string"
},
"line2": {
"maxLength": 120,
"type": "string"
},
"name": {
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"phone": {
"maxLength": 30,
"type": "string"
},
"postal_code": {
"maxLength": 20,
"minLength": 1,
"type": "string"
},
"region": {
"maxLength": 60,
"minLength": 1,
"type": "string"
}
},
"required": [
"name",
"line1",
"city",
"region",
"postal_code",
"country"
],
"type": "object"
}
},
"required": [
"first_name",
"ship_to"
],
"type": "object"
}
]
},
"shared_payment_token": {
"description": "Single-use Stripe Shared Payment Token (spt_...) to pay without a stored card. Omit to charge the account default.",
"pattern": "^spt_",
"type": "string"
}
},
"required": [
"idempotency_key",
"brief",
"recipient"
],
"type": "object"
},
"name": "create_gift"
},
{
"description": "Return a hosted Stripe link for the buyer to save a card or wallet to the account. After that, create_gift without a shared_payment_token charges the saved card.",
"inputSchema": {
"properties": {
"return_url": {
"format": "uri",
"type": "string"
}
},
"type": "object"
},
"name": "create_setup_link"
},
{
"description": "Return this account's spending caps and month-to-date spend. Free. Use it to confirm budget before create_gift.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_account"
},
{
"description": "Fetch a gift by gift_id and return its full resource: status, voice, format, pricing, the recipient, and fulfillment (Lulu job id, carrier, tracking URL, estimated delivery). Free and read-only. Use it to poll progress after create_gift: status advances through the pipeline to shipped then delivered, or ends at held, refused, cancelled, or failed.",
"inputSchema": {
"properties": {
"gift_id": {
"description": "The gift_id returned by create_gift, identifying the order to fetch.",
"type": "string"
}
},
"required": [
"gift_id"
],
"type": "object"
},
"name": "get_gift"
},
{
"description": "Compute the exact total for a hypothetical gift (format, voice, image model, ship_to) before you commit. Free, no order is created. Call before create_gift so you know the charge.",
"inputSchema": {
"properties": {
"format": {
"description": "Booklet format to price. Only manual_v1 is supported today.",
"enum": [
"manual_v1"
],
"type": "string"
},
"image_model": {
"description": "Optional cover image model id. Some models add a small per-call cost.",
"type": "string"
},
"ship_to": {
"description": "Destination address. US is supported; the total and tax depend on the destination.",
"properties": {
"city": {
"maxLength": 60,
"minLength": 1,
"type": "string"
},
"country": {
"maxLength": 2,
"minLength": 2,
"pattern": "^[A-Z]{2}$",
"type": "string"
},
"line1": {
"maxLength": 120,
"minLength": 1,
"type": "string"
},
"line2": {
"maxLength": 120,
"type": "string"
},
"name": {
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"phone": {
"maxLength": 30,
"type": "string"
},
"postal_code": {
"maxLength": 20,
"minLength": 1,
"type": "string"
},
"region": {
"maxLength": 60,
"minLength": 1,
"type": "string"
}
},
"required": [
"name",
"line1",
"city",
"region",
"postal_code",
"country"
],
"type": "object"
},
"voice": {
"description": "Optional comedic voice. It does not change the price; accepted for parity with create_gift.",
"enum": [
"hype_man",
"best_friend",
"conspiracy"
],
"type": "string"
}
},
"required": [
"ship_to"
],
"type": "object"
},
"name": "get_pricing"
},
{
"description": "List supported booklet formats. There is one today: manual_v1, a 16-page booklet. Free, no side effects.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "list_formats"
},
{
"description": "Paginated list of gifts on the account, with optional status and date filters. Free.",
"inputSchema": {
"properties": {
"cursor": {
"description": "Opaque pagination cursor from a previous list_gifts response.",
"type": "string"
},
"limit": {
"description": "Maximum number of gifts to return, 1 to 100. Defaults to 50.",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"since": {
"description": "Only return gifts created at or after this ISO 8601 timestamp.",
"format": "date-time",
"type": "string"
},
"status": {
"description": "Only return gifts in this status, for example shipped, delivered, or cancelled.",
"enum": [
"created",
"validating",
"generating",
"output_validating",
"rendering",
"awaiting_buyer_preview",
"queued_for_print",
"printed",
"shipped",
"delivered",
"held",
"refused",
"cancelled",
"failed"
],
"type": "string"
}
},
"type": "object"
},
"name": "list_gifts"
},
{
"description": "List supported cover image models and their per-call cost. Free, no side effects.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "list_image_models"
},
{
"description": "Return the account's saved recipients (address book). Free. Reuse a recipient_id in create_gift instead of re-entering an address.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "list_recipients"
},
{
"description": "List the three comedic voices (Hype Man, Best Friend Roast, Conspiracy Theorist) and the cover image model each prefers. Free, no side effects. Call this first to pick a voice.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "list_voices"
},
{
"description": "Run the content policy on a brief without charging or ordering. Free. Call before create_gift so a refusal surfaces early. A booklet that would wound the recipient is refused here, not at charge time.",
"inputSchema": {
"properties": {
"brief": {
"description": "The same brief you would pass to create_gift. It is checked against the content policy, free, with no order created.",
"properties": {
"celebrate": {
"items": {
"maxLength": 140,
"minLength": 4,
"type": "string"
},
"maxItems": 8,
"minItems": 2,
"type": "array"
},
"do_not_mention": {
"items": {
"maxLength": 60,
"minLength": 1,
"type": "string"
},
"maxItems": 8,
"minItems": 0,
"type": "array"
},
"image_brief": {
"maxLength": 300,
"type": "string"
},
"image_model": {
"enum": [
"flux_2_pro",
"imagen_4",
"ideogram_3",
"recraft_v4",
"gpt_image_2",
"nano_banana_2"
],
"type": "string"
},
"in_jokes": {
"items": {
"maxLength": 200,
"minLength": 4,
"type": "string"
},
"maxItems": 6,
"minItems": 0,
"type": "array"
},
"recipient_first_name": {
"maxLength": 40,
"minLength": 1,
"pattern": "^[a-zA-Z\\s'-]+$",
"type": "string"
},
"tease_gently": {
"items": {
"maxLength": 140,
"minLength": 4,
"type": "string"
},
"maxItems": 6,
"minItems": 0,
"type": "array"
},
"tone": {
"enum": [
"warm_with_ribbing",
"warm_only",
"deep_appreciation"
],
"type": "string"
},
"voice": {
"enum": [
"hype_man",
"best_friend",
"conspiracy"
],
"type": "string"
}
},
"required": [
"recipient_first_name",
"voice",
"tone",
"celebrate"
],
"type": "object"
}
},
"required": [
"brief"
],
"type": "object"
},
"name": "validate_brief"
}
]
}What the leaf hashes
{"body":"8afb299124b8ad52eafa8820a3cc8b8f0f48234f727b5077ed4293f9819fa193","id":561561,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793137189246055,"prev":null,"subject":"23047bd5-dd68-41be-9d3b-3d21cb990943","subject_kind":"endpoint"}Proof
Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (273461 rows).
- 0x4eb4d26d7dec13407bfb4d60f31e9ea6aa5a83f52de22ae459a81c5152cb2e03
- 0xa68e2f2400ed0d8d3238f6c74b0a1f26f737dfc9b8a1cf6ddfc391e054097fc3
- 0x271f78494003d47cdaefc0028d3f2917f698ea588ffe1b3a0421dc048141f797
- 0x168fd1ab089d898dcc58490eef59e68e82f2023fc5fb0ebb08d57758d5c3a9e4
- 0x34db8201419242170d9b9647c58547a664e87f95d05d6d1a4e50137f34a8982e
- 0xf096ac615a40046a3b8aa7f325463b618800f9da17c958241bda1af165bcb7ca
- 0xadf4b039934315baa5d0cbdd7999efa083b406d12fbb813f92332fda0b4f5028
- 0x2c2241ae50ecce47119cf1819a3b47694b7a5cc2b8495dac2b43ce5727c0af32
- 0x7b040db36717bf5f90682a4210b48f352cf2e5e2eac383ea0f67858e61b2258c
- 0xb1d27b4fae8f70292481345cacd8056ea2ba2d9b1c0987869182b010e6e6f069
- 0x906219e11d9076acac52c739ab17862b442ad8da02bbfce9ece4c281b2c106eb
- 0xf9b21ec258212225fc012a1ed6399d0ec608e930f4423d2badb8be79550861ef
- 0x797da99476c7ebaa971607ae725e5e240b79de9e49d28859b94de107c850aaab
- 0x9ea0c6a53f80a30b6f13671109f98a000cf98e581875129f4be4b57131d06364
- 0xb78ea6a255dd06e2f402a1a733bca392fa6243920bcba95e8b80bdfc6ce5f553
- 0x3ed50f053eca72dfd3a9d45a11935240bfe691e57835c367ddebe2cbc49efe9d
- 0x0e01aa9525097570a6edaf32bfc959de57bf5c24317cf10c0716affea85ca60d
- 0xa20d48798a34aba12eb9c7297722982d910f06c148f5e27ac59307422964a585
- 0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699
- Day root
- 0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795
- Chained
- 0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4
- Published
- On Arc Testnet, block 69414147: 0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4