addrbookFor publishers
← The evidence ledger

Evidence row 4403814

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 478537aa-6334-4017-afca-6fe2fb985165
Recorded
Previous row
#4162130
Body SHA-256
d1e5796470653caf81a42fc5a62729dd98b4f3f75635340a9cbb9a2bb3052585
Leaf
0x6cc681217ca10f12df032912adf354f5f109983c4a9fc5f612fcb288b17dbd6d

What was observed

{
  "count": 8,
  "tools": [
    {
      "description": "Apply for an enterprise (invoiced) account, for platforms printing at volume behind their own checkout. Enterprise orders auto-confirm with no payment link and are settled monthly, with a minimum of ₹10,000 of orders a month (a month below that is billed at retail). Storybooks are priced 25% below the retail price list (every copy at that price), and custom-cut stickers and greeting cards are the retail price for everyone. Requires a registered India GSTIN for tax invoicing. It is checked against the GST registry, and one the registry lists as cancelled is refused. No key is issued here or sent by email. A person reviews the application, and once approved the person at contact_email signs in at https://themassprint.com/business with a one-time email code (no password) and creates the API key there, shown once. Once approved, you pay a ₹10,000 advance at themassprint.com/business before you create the API key. Online it costs ₹10,205 by UPI or netbanking, or ₹10,310 by card, wallet, EMI or Pay Later, which covers Razorpay's fee. The advance is adjusted against your first monthly bill, and you can pay it by bank transfer instead. Use this only when a human has asked to set up a business or enterprise print account.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "company_name": {
            "description": "Registered business name.",
            "type": "string"
          },
          "contact_email": {
            "description": "The person who will run the account. Once approved they sign in at https://themassprint.com/business with this email to create API keys. Invoices go here too.",
            "type": "string"
          },
          "expected_monthly_volume": {
            "description": "Approximate orders a month (optional).",
            "minimum": 0,
            "type": "integer"
          },
          "gstin": {
            "description": "15-character India GSTIN, e.g. 29ABCDE1234F1ZW. The last character is a check character. Required for GST invoicing.",
            "type": "string"
          },
          "notes": {
            "description": "Anything else for the reviewer (optional).",
            "type": "string"
          }
        },
        "required": [
          "company_name",
          "contact_email",
          "gstin"
        ],
        "type": "object"
      },
      "name": "apply_enterprise"
    },
    {
      "description": "Cancel an order, stopping it before it is printed. With the order_token from create_order this works while the order is awaiting_payment (which also closes its payment link, and a payment that still lands on it is refunded in full automatically), and after payment until production starts (order.refund_on_cancel is true), when the payment is refunded in full automatically and the result status is refunded. A platform that sends its own API key (Authorization: Bearer mp_live_...) can additionally cancel an order THAT KEY created while it is confirmed or printing — that is how you stop a press when your customer cancels on your side. shipped and delivered can never be canceled; that is a refund, contact support (see get_catalog). Once printing has started, canceling (creating key only) stops production but moves no money. Canceling releases the order's client_reference — replaying that reference afterwards creates a new order and prints it. If the order moved on before the cancel landed you get not_cancellable naming its new status, never a false \"canceled\".",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "order_id": {
            "description": "The order_id returned by create_order, e.g. ord_01HZX8K3M9QWER5T7Y2B4N6C8D. Not the order_token.",
            "type": "string"
          },
          "order_token": {
            "description": "The token returned once by create_order. Optional if you send the API key that created the order instead.",
            "type": "string"
          }
        },
        "required": [
          "order_id"
        ],
        "type": "object"
      },
      "name": "cancel_order"
    },
    {
      "description": "Create a print order for a validated upload. Validates everything BEFORE any payment link is minted. Returns { order, order_token } — the order object has order_id, status, amount, and payment_url (the Razorpay link, present while awaiting_payment). Give payment_url to the human to pay (UPI/cards/netbanking). SAVE order_token — it is shown only once and is required for get_order and cancel_order. The order confirms automatically after payment; unpaid orders expire after 72 hours.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "address": {
            "additionalProperties": false,
            "description": "India shipping address (V1 ships within India only).",
            "properties": {
              "city": {
                "description": "City or town, e.g. \"Bengaluru\".",
                "type": "string"
              },
              "line1": {
                "description": "Street address: flat or house, building, street, e.g. \"12B, Lakeview Apartments, 4th Cross\".",
                "type": "string"
              },
              "line2": {
                "description": "Area or landmark (optional), e.g. \"Indiranagar, near Metro station\".",
                "type": "string"
              },
              "name": {
                "description": "Recipient name as the courier should read it, e.g. \"Priya Raman\".",
                "type": "string"
              },
              "phone": {
                "description": "India mobile, 10 digits, optional +91 prefix",
                "type": "string"
              },
              "pincode": {
                "description": "6-digit India PIN code",
                "type": "string"
              },
              "state": {
                "description": "Indian state or union territory, e.g. \"Karnataka\".",
                "type": "string"
              }
            },
            "required": [
              "name",
              "line1",
              "city",
              "state",
              "pincode",
              "phone"
            ],
            "type": "object"
          },
          "client_reference": {
            "description": "Your own order id, e.g. \"shop-order-48213\" (optional). For callers sending an API key it makes create_order idempotent: replaying the same reference returns the original order instead of printing a second copy (order_token is then null, it was shown at the original creation). A canceled, refunded or expired order releases its reference. Stored but not enforced for keyless callers.",
            "maxLength": 120,
            "minLength": 1,
            "type": "string"
          },
          "copies": {
            "default": 1,
            "description": "Required for sticker (1,000 to 10,000 pieces) and for flat-card/folded-card (10 to 5,000 cards, cheaper per card from 50, 250 and 500). Books, sticker-a3 and greeting-card-a5 take 1 to 20, every copy the same price, and only they may leave it out for 1 copy.",
            "maximum": 10000,
            "minimum": 1,
            "type": "integer"
          },
          "email": {
            "description": "Buyer email, e.g. priya@example.com; receives the Razorpay payment notification.",
            "format": "email",
            "type": "string"
          },
          "finish": {
            "description": "paperback/hardcover: the lamination, gloss (the default) or matte. flat-card/folded-card: matte (the default) or gloss, the coating of standard card or the lamination of laminated card. Ignored for other formats.",
            "enum": [
              "gloss",
              "matte"
            ],
            "type": "string"
          },
          "format": {
            "description": "paperback (staple-pinned) / hardcover (perfect bound): storybook, 24-64 pages including the 4-page 300gsm cover (page 1 front cover, page 2 inside front, last two pages inside back and back). sticker: custom-cut stickers, a one-page PDF at A3, A4 or A5 (portrait or landscape) with the artwork on a white or transparent background; we cut around the artwork. flat-card: a flat greeting card at A4, A5, A6, 8×8 in, 7×5 in or 6×4 in; page 1 front, page 2 back (optional). folded-card: a greeting card folded once, A4, A5 or A6 folded; the PDF page is the open spread (A3, A4 or A5 landscape), page 1 outside (back left, front right), page 2 inside (optional). sticker-a3: one uncut A3 portrait sheet on sticker media, a platform wall chart (exactly 1 page, 842×1191 pt). greeting-card-a5: one personalised folded A5 card for platforms, one A4-landscape sheet printed duplex (exactly 2 pages, 859×612 pt incl. 3 mm bleed).",
            "enum": [
              "paperback",
              "hardcover",
              "sticker",
              "flat-card",
              "folded-card",
              "sticker-a3",
              "greeting-card-a5"
            ],
            "type": "string"
          },
          "paper": {
            "description": "paperback/hardcover: inside-page paper, 170gsm (standard, the default) or 300gsm (thick, costs more); every cover is 300gsm card; see price_table.paper_prices in get_catalog. flat-card/folded-card: standard (300 GSM coated card, the default) or laminated. Ignored for other formats.",
            "enum": [
              "170gsm",
              "300gsm",
              "standard",
              "laminated"
            ],
            "type": "string"
          },
          "upload_id": {
            "description": "upload_id of a PDF that passed validation.",
            "type": "string"
          }
        },
        "required": [
          "upload_id",
          "format",
          "email",
          "address"
        ],
        "type": "object"
      },
      "name": "create_order"
    },
    {
      "description": "Start a PDF upload. Returns {upload_id, put_url, expires_at, max_bytes}. HTTP PUT the raw PDF bytes to put_url (Content-Type: application/pdf, no auth needed — the URL is signed). The PUT response includes the validation report. Then pass upload_id to create_order. Keyless use is bounded per calling origin: 20 create_upload calls per hour, at most 5 unused uploads open at a time, and put_url expires in 2 hours — so PUT the bytes promptly and reuse an upload_id you already hold instead of creating extras. An API key (see apply_enterprise) lifts both limits.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "type": "object"
      },
      "name": "create_upload"
    },
    {
      "description": "Show the account behind your API key (Authorization: Bearer mp_live_...): its name, payment mode (invoiced for enterprise accounts) and GSTIN. massprint never messages your customers: tracking reaches you through get_order and your webhooks, and you tell your customers. Requires an API key. Enterprise accounts create and revoke keys at https://themassprint.com/business.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "type": "object"
      },
      "name": "get_account"
    },
    {
      "description": "List what can be printed: SKUs (storybook books; custom-cut stickers from 1,000 pieces; greeting cards from 10; and, for platforms, sticker-a3 wall charts and greeting-card-a5 folded cards from one copy), formats, supported trim sizes, page-count limits, prices (INR, shipping included; GST included except on stickers, which add 18%), and shipping coverage (India only). Stickers and greeting cards are priced per piece in piece_prices. Call this first to quote a price or check whether a PDF will be accepted.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "type": "object"
      },
      "name": "get_catalog"
    },
    {
      "description": "Check an order: status (awaiting_payment → confirmed → printing → ready_for_dispatch → pickup_scheduled → shipped → out_for_delivery → delivered; or returning, returned, lost if the parcel did not arrive), tracking number once it is booked with the courier (ready_for_dispatch) with every courier scan in tracking.events, and — while unpaid — the payment_url again (so you can always re-answer \"how do I pay\"). Requires the order_token from create_order, or the API key that created the order (Authorization: Bearer mp_live_...).",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "order_id": {
            "description": "The order_id returned by create_order, e.g. ord_01HZX8K3M9QWER5T7Y2B4N6C8D. Not the order_token.",
            "type": "string"
          },
          "order_token": {
            "description": "The token returned once by create_order. Optional if you send the API key that created the order instead.",
            "type": "string"
          }
        },
        "required": [
          "order_id"
        ],
        "type": "object"
      },
      "name": "get_order"
    },
    {
      "description": "Get the print-validation report for an uploaded PDF before paying: page count, trim size, hard errors (blocking) and soft warnings (non-blocking). Every error includes a `resolution` explaining how to fix it. Free to call; use it to check printability before create_order.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "upload_id": {
            "description": "The upload_id returned by create_upload.",
            "type": "string"
          }
        },
        "required": [
          "upload_id"
        ],
        "type": "object"
      },
      "name": "validate_pdf"
    }
  ]
}

What the leaf hashes

{"body":"d1e5796470653caf81a42fc5a62729dd98b4f3f75635340a9cbb9a2bb3052585","id":4403814,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1794263588705335,"prev":4162130,"subject":"478537aa-6334-4017-afca-6fe2fb985165","subject_kind":"endpoint"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (209593 rows).

  1. 0x6cc5f3878cc479b07492eb5559bf9d918898bef46c447fdb6c0f8a4db8c550b2
  2. 0x8ce4e5f3ebdb31402e1846ec80d55e27587bfd1b865526bc06e25e7932201889
  3. 0xed6d38e161a8ad6e7bcb1e4724a233f533392a9004dd67661a5d846f7f2cb490
  4. 0xfb24ec1b8a4154eedb1605c4bea3761f1a69f12bf9ee8301fc20be0b0e31d5ae
  5. 0x2c7ed319ca5a8c9ebef3bce135d87ab5d4901c3d0eab6737b0ad17524895b31d
  6. 0xb9209179db563c09c732e295b50f818f7d07481725ad188e3f81a15d79000063
  7. 0xed8034c77ef8b8286a202f334450d503c7bb3a191f4dce5ebacd4e76ed64ab1b
  8. 0xd5f4a18d06eb686ea4e279529a13f9395ed19db785a3f7541a0edc9e356e0fb4
  9. 0xc14d6448dcc57aebe3149cba189e593475507846addfb25974ddbae163adf265
  10. 0x8857847be8c595775e54bb0bdbf2a7855be6c388c8c20837f9c89c067e3789cd
  11. 0x0613d760570b04da7aa71022b24be9337aa4af1474e9270f78e380f81d85d790
  12. 0x3dac4b4b398b0135e7531ad3e4206d6a1868d71bca1c9df7d1b87358283012a3
  13. 0x2a717c560ef99355de48a6b5e7320f04c6595485aeba579de1ae6e525896a3b7
  14. 0xedd15374d2c8bb9b0c64ac4350ccc607b4a2df0c9bdc8e3eb3ba37e329d9ec90
  15. 0x40849e548efe4c2441515c38322f3c4e7f3e63fa2361caa9652744b3207b8b12
  16. 0xed680d9ac43f244fd291c7b4b997984c2a8a1578ff4e52438807bd611f3483ea
  17. 0x790afb412bc87698b57dc22f69c5c9b2b2c4f00aedea030ea24f11c390abeecc
  18. 0x891d501ebce4e16e69b2fbfe01109109c42b0c84f270dea9ce05be75fe9100dd
Day root
0xadd23e68d2467b177541de6f25330599d6ddfbb2156c723aa2064f85e01c7cc2
Chained
0xd527699f30feab3ee8deb2be1d65df3f65bd292a7fc58fbfcc8dfa8e9dc59bec
Published
On Arc Testnet, block 71621141: 0x8257214b88f5db5a00aad541f3322e6d61772740bc3a1b67ccfc1eff91e945bb

How to check it · This row as JSON