← 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).
- 0x324975afd54b9453d23242fe6046c2b800816ee3f166bf5b6df68ddb06318407
- 0x1d93a7d287652589c09d78093be1ebc844a7f601482799a07d9c4cfbf10297a1
- 0x8d088ae03c1c18cd93f035fb741854c4ee44da67744c1dc9fd51bd3eafb9461b
- 0xb3202545676e23407d87f0fff76d85e62a649161b892f030d69f922e7df51298
- 0xe3a9330b49460f34649ca8eea84755dda04365a6bcefa9b872b3f865a19aa373
- 0x609a685a124d0b1bbc57ed7a120d865f0b4625c3eecdf739244f3e249604d72b
- 0xf8d6ec597a46e111d09bdfbba1ee60ade0319eeedc2aaf463bb8896a984aca17
- 0x78da38f7a6fb9e3e322a7154f51f310782b63094ad6ee048f83f67d0c0213f07
- 0x8e9980bc4c034627d7e4f4a5b575db111254b3cd79b46f592b231380e68255a5
- 0x902548fc46d1be5d9bf9dc424033bc6f14c1784b6955a66f2130015016a637ed
- 0x48e9ae9a675edb4c56750553ac60b9585b9cdd956d2b40ba0953a15337c477ad
- 0x095e81ff2fd1fe987427755f11378bace03cd06f4567685ad352fec0da5f5e82
- 0x3d9df6153e051ebcdc2683b4402faae304acff7f1f03a085bddf9ad34187f068
- 0xa96695bb231e3cabeb4f03cab216cc6730b71e2304bf5be1e6c0447ea577aae6
- 0x8d500b42a7bdba5e17ebd9e6a404f2de5260cf3420865b41e7de8c69434ce413
- 0xaeb1503e5d0d358b256ba97a10178c357ddb8f55cc961925ccf0458aae5ebcae
- 0xf078ea7d84d98dbeffed23d8e67b36751e60464ffd4cfdc005e0aa6f8cb9b459
- 0xe027395fafb7fc41921c42ca0542524ea22204cbd5908b70b27f3d5fb26f5d0f
- Day root
- 0x2c19037464cc4c493624565f01775d6446fc78eaa118fc6865bfe2bfca9ff78e
- Chained
- 0xd1d7dee8322ceff8f4c8d83aa1fe4a4466825c2af1c97dbde3d35db61234f7be
- Published
- On Arc Testnet, block 69584042: 0x8bae2b1d097834c8b458513862d70d29ee807e98dc2e863b27250131c15b35ae