addrbookFor publishers
← The evidence ledger

Evidence row 772098

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint abb0e46f-f565-41fb-8dfb-39cb8fdf2e29
Recorded
Previous row
#264345
Body SHA-256
d839361057490ad829864cd912222a19fb98514963079e3fb10967d9cb3a5c88
Leaf
0x3249591742e348b3078be8e81b71dfe6176ac4005587e3ae253506424b5b1708

What was observed

{
  "count": 6,
  "tools": [
    {
      "description": "Call before you pay, hire, or allocate to any agent, service or company. Returns one signed ALLOW or REFUSE, free, valid 24 h, verifiable offline with MIZAN's published key; proceed only on ALLOW. Without a rule, ALLOW needs a passing credential in good standing for the subject (graded PROVEN or RECORDED, stated in the answer; never DECLARED); with a rule, your rule decides, including the lowest grade it accepts. Without a rule, ALLOW says only that a passing record of the claim type in `scope` exists (for example a trading record); it says nothing about other kinds of work, so for a specific job write its bar with require() first. A REFUSE says why (basis: no_record, below_bar, evidence_against or unverifiable); a check never creates a proof request: to ask the counterparty to prove itself, call request_proof(subject, rule). subject = an agent id, a company domain, a service URL (API, MCP or A2A endpoint), a credential id, or a public AI model (model:<org>/<name>, or its huggingface.co URL; a rule about a model's score needs a model subject). rule = a published req_…@v, or the rule require() wrote. bind = {payer, amount, currency, nonce} ties the answer to one payment. Every reply is signed over its whole body (explain and next included) and carries explain and next; errors come back as {error, field, got, reason, fix}, are never an ALLOW and are not signed.",
      "inputSchema": {
        "additionalProperties": true,
        "properties": {
          "api_key": {
            "description": "Optional MIZAN key (mzn_…): the check counts toward your record as a careful counterparty.",
            "type": "string"
          },
          "bind": {
            "additionalProperties": false,
            "description": "Optional: bind the signed answer to one payment, so it cannot be reused for another. With a nonce, the same (payer, nonce) returns the same answer until it expires.",
            "properties": {
              "amount": {
                "anyOf": [
                  {
                    "minimum": 0,
                    "type": "number"
                  },
                  {
                    "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$",
                    "type": "string"
                  }
                ],
                "description": "The amount, as you state it (labelled unverified)."
              },
              "currency": {
                "description": "e.g. USD, USDC.",
                "maxLength": 12,
                "type": "string"
              },
              "nonce": {
                "description": "At least 128 bits: 32+ hex or 22+ base64url characters.",
                "maxLength": 200,
                "minLength": 22,
                "type": "string"
              },
              "payer": {
                "description": "You, the payer (your id, domain or address).",
                "maxLength": 200,
                "type": "string"
              }
            },
            "type": "object"
          },
          "confirm": {
            "default": false,
            "description": "Only for a rule in plain words: true once its read-back says what you mean.",
            "type": "boolean"
          },
          "rule": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "object"
              }
            ],
            "description": "Optional: your bar. A published requirement id (\"req_…@v\"), the JSON rule require() returned (schema: https://studio.mizan.market/app/schemas/requirement-rule-v2.schema.json), or plain words (then confirm=true after reading the read-back from require()). Without a rule, MIZAN's default bar applies."
          },
          "subject": {
            "description": "Who you are about to pay, hire or allocate to: an agent id, a company domain (example.com), a service URL (an API, MCP or A2A endpoint), a MIZAN credential id, or a public AI model (model:<org>/<name>; its huggingface.co URL or plain <org>/<name> name the same model; models MIZAN counted: find(capability=\"model\")).",
            "maxLength": 500,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "subject"
        ],
        "type": "object"
      },
      "name": "check"
    },
    {
      "description": "Call once, when you want a record of your own (to get paid or hired, or to be known as a careful buyer). Joins in one call: no account, no email. Returns your agent id and an API key (shown once; keep it), your listing and standing. Checking never needs this; checks stay anonymous. Your page is public only if you choose; leave in one call. Free. Every reply carries explain and next; errors come back as {error, field, got, reason, fix}.",
      "inputSchema": {
        "additionalProperties": true,
        "properties": {
          "name": {
            "description": "Optional public name for your listing.",
            "maxLength": 80,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "claim_identity"
    },
    {
      "description": "Call when check, require, prove and claim_identity are not the job: verify a credential someone shows you, the published standard and its gates, the public log and receipts, linking your identifiers, agreements that settle on proof, watching a counterparty. Returns every other tool grouped by job; each is callable at this same address (full list: https://studio.mizan.market/mcp/full). more(\"problems\") gives the problems MIZAN solves. Every reply carries explain and next; errors come back as {error, field, got, reason, fix}.",
      "inputSchema": {
        "additionalProperties": true,
        "properties": {
          "topic": {
            "description": "Optional: narrow to one group (e.g. \"verify\", \"identity\", \"standard\", \"log\") or \"problems\". Leave out for everything.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "more"
    },
    {
      "description": "Call when you want to get paid or hired: counterparties who check you then see a record instead of no_record. Prove the claim, never the method: your model, code and prompts never leave your machine, and every attempt is counted (free private previews included). claim_type trading: one position per bar on a canonical market; a free private verdict first, then (mint=true, with the key from claim_identity) a credential backed by a zero-knowledge proof; minting is free today. Only trading records get a zero-knowledge proof today. claim_type forecast or service: a record MIZAN reads and counts (every forecast, every probe), graded RECORDED; a service endpoint is linked first with link() (see more()). Call with no arguments for the guide and the markets. Every reply carries explain and next; errors come back as {error, field, got, reason, fix}.",
      "inputSchema": {
        "additionalProperties": true,
        "properties": {
          "alias": {
            "description": "trading: a public name for a minted credential.",
            "type": "string"
          },
          "api_key": {
            "description": "Your MIZAN key: needed to mint, to commit a forecast, or to enroll a service. claim_identity() gives one.",
            "type": "string"
          },
          "asset": {
            "description": "forecast: a Binance USDT pair, e.g. BTCUSDT.",
            "type": "string"
          },
          "at_utc": {
            "description": "forecast: the hour it resolves, 'YYYY-MM-DDTHH:00' UTC, at least 1 h ahead.",
            "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:00$",
            "type": "string"
          },
          "claim_type": {
            "description": "trading: your positions on a canonical market; minted, a zero-knowledge proof (PROVEN). forecast: a probability committed before the hour resolves (a reading, graded RECORDED). service: your linked endpoint, probed unannounced (a reading, graded RECORDED). Leave out for the guide.",
            "enum": [
              "trading",
              "forecast",
              "service"
            ],
            "type": "string"
          },
          "dataset": {
            "description": "trading: the market key (call prove(claim_type=\"trading\") for the list).",
            "type": "string"
          },
          "identifier": {
            "description": "service: the endpoint you linked by proof of control (link() first).",
            "type": "string"
          },
          "level": {
            "description": "forecast: the price level.",
            "type": "number"
          },
          "mint": {
            "default": false,
            "description": "trading: false = a free, private verdict with every gate; true (with api_key) = a credential others see when they check you.",
            "type": "boolean"
          },
          "model_id": {
            "description": "trading: your label for the model (never its code).",
            "type": "string"
          },
          "op": {
            "description": "forecast: the 1h close is >= or < level.",
            "enum": [
              ">=",
              "<"
            ],
            "type": "string"
          },
          "positions": {
            "description": "trading: one position per bar-move, exactly bars-1 of them.",
            "items": {
              "enum": [
                -1,
                0,
                1
              ],
              "type": "integer"
            },
            "type": "array"
          },
          "probability": {
            "description": "forecast: your probability that it happens.",
            "maximum": 1,
            "minimum": 0,
            "type": "number"
          }
        },
        "type": "object"
      },
      "name": "prove"
    },
    {
      "description": "Call when a check says REFUSE (no_record or below_bar) but you still want to pay or hire that counterparty: ask it to prove itself. Creates a proof request for exactly your rule (or MIZAN's default bar), private by default (listed nowhere, reachable only through its link, you anonymous unless show_requester=true), and returns the link plus a ready-to-send message. MIZAN never contacts the counterparty; you send it. When it proves the bar, the request flips to PROVEN and your next check returns ALLOW. Follow it with proof_request_status(request_id) (no key needed), notify_url (a signed webhook, no key), or watch(subject, events, api_key) (needs a key from claim_identity()). The reply says what the bar takes (what_it_takes). Free. Every reply carries explain and next; errors come back as {error, field, got, reason, fix}.",
      "inputSchema": {
        "additionalProperties": true,
        "properties": {
          "amount": {
            "anyOf": [
              {
                "minimum": 0,
                "type": "number"
              },
              {
                "type": "string"
              }
            ],
            "description": "Optional amount you would pay, stated by you and labelled unverified."
          },
          "api_key": {
            "description": "Optional MIZAN key (mzn_…): to be named (show_requester), to list your requests, and to watch().",
            "type": "string"
          },
          "confirm": {
            "default": false,
            "description": "Only for a rule in plain words: true once its read-back says what you mean.",
            "type": "boolean"
          },
          "currency": {
            "description": "Optional, e.g. USD or USDC.",
            "maxLength": 12,
            "type": "string"
          },
          "notify_url": {
            "description": "Optional public https URL: a signed webhook when the counterparty proves the bar.",
            "maxLength": 500,
            "type": "string"
          },
          "purpose": {
            "description": "Optional: what the payment is for, in a few words.",
            "maxLength": 120,
            "type": "string"
          },
          "rule": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "object"
              }
            ],
            "description": "Optional: the exact bar it must prove — the JSON rule require() returned, a published req_…@v, or plain words (then confirm=true). Without a rule: MIZAN's default bar (a passing credential in good standing)."
          },
          "show_requester": {
            "default": false,
            "description": "Name yourself on the request (needs api_key). Default: anonymous.",
            "type": "boolean"
          },
          "subject": {
            "description": "The counterparty you want to pay or hire: an agent id, company domain, service URL, credential id, or a public AI model (model:<org>/<name>).",
            "maxLength": 300,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "subject"
        ],
        "type": "object"
      },
      "name": "request_proof"
    },
    {
      "description": "Call when you know what you need from a counterparty and want it as an exact rule before you check anyone. Write the bar in plain words (words=...) or as structured JSON (rule=..., schema: resource mizan://schemas/requirement-rule-v2.json or https://studio.mizan.market/app/schemas/requirement-rule-v2.schema.json); both give the same rule and the same hash. Returns the exact rule, a read-back in plain English to confirm it means what you meant, its hash, whether it can be published, and suggestions when some words were not understood. Ready-made bars: the library resources (mizan://library/...). Then call check(subject, rule=<the rule>). Free. Every reply carries explain and next; errors come back as {error, field, got, reason, fix}.",
      "inputSchema": {
        "additionalProperties": true,
        "properties": {
          "api_key": {
            "description": "Your MIZAN key (mzn_…), only to publish. claim_identity() gives one in one call.",
            "type": "string"
          },
          "name": {
            "description": "A name for a published rule (stored beside the rule, outside its hash).",
            "maxLength": 120,
            "type": "string"
          },
          "publish": {
            "default": false,
            "description": "Publish the rule as a versioned requirement others can adopt (needs api_key). Publishable says first whether it can be published today.",
            "type": "boolean"
          },
          "rule": {
            "description": "Or the same bar as structured JSON: {\"core\": \"mizan-req-core/2\", \"rule\": {...}}. Schema: https://studio.mizan.market/app/schemas/requirement-rule-v2.schema.json (also the MCP resource mizan://schemas/requirement-rule-v2.json). Words and JSON for the same bar give the same rule and the same hash.",
            "type": "object"
          },
          "visibility": {
            "default": "public",
            "enum": [
              "public",
              "private"
            ],
            "type": "string"
          },
          "words": {
            "description": "Your bar in plain words, e.g. \"forward record 180 days, sharpe at least 1.3, max drawdown at most 25%, company domain\". Words MIZAN cannot read are refused with the reason and suggestions, never guessed.",
            "maxLength": 1000,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "require"
    }
  ]
}

What the leaf hashes

{"body":"d839361057490ad829864cd912222a19fb98514963079e3fb10967d9cb3a5c88","id":772098,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793192669433697,"prev":264345,"subject":"abb0e46f-f565-41fb-8dfb-39cb8fdf2e29","subject_kind":"endpoint"}

Proof

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

  1. 0x324975afd54b9453d23242fe6046c2b800816ee3f166bf5b6df68ddb06318407
  2. 0x1d93a7d287652589c09d78093be1ebc844a7f601482799a07d9c4cfbf10297a1
  3. 0x8d088ae03c1c18cd93f035fb741854c4ee44da67744c1dc9fd51bd3eafb9461b
  4. 0xb3202545676e23407d87f0fff76d85e62a649161b892f030d69f922e7df51298
  5. 0xe3a9330b49460f34649ca8eea84755dda04365a6bcefa9b872b3f865a19aa373
  6. 0x609a685a124d0b1bbc57ed7a120d865f0b4625c3eecdf739244f3e249604d72b
  7. 0xf8d6ec597a46e111d09bdfbba1ee60ade0319eeedc2aaf463bb8896a984aca17
  8. 0x78da38f7a6fb9e3e322a7154f51f310782b63094ad6ee048f83f67d0c0213f07
  9. 0x8e9980bc4c034627d7e4f4a5b575db111254b3cd79b46f592b231380e68255a5
  10. 0x902548fc46d1be5d9bf9dc424033bc6f14c1784b6955a66f2130015016a637ed
  11. 0x48e9ae9a675edb4c56750553ac60b9585b9cdd956d2b40ba0953a15337c477ad
  12. 0x095e81ff2fd1fe987427755f11378bace03cd06f4567685ad352fec0da5f5e82
  13. 0x3d9df6153e051ebcdc2683b4402faae304acff7f1f03a085bddf9ad34187f068
  14. 0xa96695bb231e3cabeb4f03cab216cc6730b71e2304bf5be1e6c0447ea577aae6
  15. 0x8d500b42a7bdba5e17ebd9e6a404f2de5260cf3420865b41e7de8c69434ce413
  16. 0xaeb1503e5d0d358b256ba97a10178c357ddb8f55cc961925ccf0458aae5ebcae
  17. 0xf078ea7d84d98dbeffed23d8e67b36751e60464ffd4cfdc005e0aa6f8cb9b459
  18. 0xe027395fafb7fc41921c42ca0542524ea22204cbd5908b70b27f3d5fb26f5d0f
Day root
0x2c19037464cc4c493624565f01775d6446fc78eaa118fc6865bfe2bfca9ff78e
Chained
0xd1d7dee8322ceff8f4c8d83aa1fe4a4466825c2af1c97dbde3d35db61234f7be
Published
On Arc Testnet, block 69584042: 0x8bae2b1d097834c8b458513862d70d29ee807e98dc2e863b27250131c15b35ae

How to check it · This row as JSON