{"id":561561,"recorded_at":"2026-10-27T21:39:49.246136Z","observed_at":"2026-10-27T21:39:49.246055Z","subject_kind":"endpoint","subject":"23047bd5-dd68-41be-9d3b-3d21cb990943","kind":"mcp.tools","method":"probe.mcp/1","body":{"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"}]},"body_sha256":"8afb299124b8ad52eafa8820a3cc8b8f0f48234f727b5077ed4293f9819fa193","prev_id":null,"leaf":"0x4eb499ad3247d23c534b09396c64951aa2a03efeb5954ade1bc7fcc071f5821d","leaf_text":"{\"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\"}","day":{"day":"2026-10-27","leaves":273461,"root":"0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795","chained":"0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4","anchor_chain":"eip155:5042002","anchor_tx":"0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4","anchor_block":69414147},"proof":["0x4eb4d26d7dec13407bfb4d60f31e9ea6aa5a83f52de22ae459a81c5152cb2e03","0xa68e2f2400ed0d8d3238f6c74b0a1f26f737dfc9b8a1cf6ddfc391e054097fc3","0x271f78494003d47cdaefc0028d3f2917f698ea588ffe1b3a0421dc048141f797","0x168fd1ab089d898dcc58490eef59e68e82f2023fc5fb0ebb08d57758d5c3a9e4","0x34db8201419242170d9b9647c58547a664e87f95d05d6d1a4e50137f34a8982e","0xf096ac615a40046a3b8aa7f325463b618800f9da17c958241bda1af165bcb7ca","0xadf4b039934315baa5d0cbdd7999efa083b406d12fbb813f92332fda0b4f5028","0x2c2241ae50ecce47119cf1819a3b47694b7a5cc2b8495dac2b43ce5727c0af32","0x7b040db36717bf5f90682a4210b48f352cf2e5e2eac383ea0f67858e61b2258c","0xb1d27b4fae8f70292481345cacd8056ea2ba2d9b1c0987869182b010e6e6f069","0x906219e11d9076acac52c739ab17862b442ad8da02bbfce9ece4c281b2c106eb","0xf9b21ec258212225fc012a1ed6399d0ec608e930f4423d2badb8be79550861ef","0x797da99476c7ebaa971607ae725e5e240b79de9e49d28859b94de107c850aaab","0x9ea0c6a53f80a30b6f13671109f98a000cf98e581875129f4be4b57131d06364","0xb78ea6a255dd06e2f402a1a733bca392fa6243920bcba95e8b80bdfc6ce5f553","0x3ed50f053eca72dfd3a9d45a11935240bfe691e57835c367ddebe2cbc49efe9d","0x0e01aa9525097570a6edaf32bfc959de57bf5c24317cf10c0716affea85ca60d","0xa20d48798a34aba12eb9c7297722982d910f06c148f5e27ac59307422964a585","0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699"]}