addrbookFor publishers
← The evidence ledger

Evidence row 303003

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 02f25fef-d206-4bd6-8bb5-74fecb90e0f1
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
cd496927749d2999394d9cf7ee6d1b5f6f216016743d34740663162144c92bf3
Leaf
0xf1ed0b0c42f96901516876fa74205785f9a0dfde2d6734528484b08f946d0b85

What was observed

{
  "count": 13,
  "tools": [
    {
      "description": "Turnkey, executable steps to get a human cheap AI tokens and run their prompts on mtok.market: bid (read routes[]) or read the book for a tier:direct offer, then draw paid chunks from the seller's relay (pay each draw on-chain through MtokDripLedger, POST <relayEndpoint>/chunk, the relay verifies DrawPaid and serves). You need a funded wallet on Base.",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "buying_guide"
    },
    {
      "description": "Cancel one of your open orders. side: offer|bid.",
      "inputSchema": {
        "properties": {
          "id": {
            "type": "string"
          },
          "side": {
            "enum": [
              "offer",
              "bid"
            ],
            "type": "string"
          }
        },
        "required": [
          "side",
          "id"
        ],
        "type": "object"
      },
      "name": "cancel_order"
    },
    {
      "description": "Open offers (asks) and bids for a model. sort=input|output ranks by that dimension.",
      "inputSchema": {
        "properties": {
          "model": {
            "type": "string"
          },
          "sort": {
            "enum": [
              "input",
              "output"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "get_book"
    },
    {
      "description": "Chain config a SELLER-HOSTED buyer needs to build the on-chain draw payment: { feeAddress, feeBps, dustThresholdUsd, chainId, usdcAddress, dripContractAddress }. Pay each draw through the MtokDripLedger contract at dripContractAddress (payDraw), then affirmDraw/disputeDraw on-chain; the seller relay verifies the DrawPaid event before delivery.",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "get_config"
    },
    {
      "description": "The chain-derived draw tape: contract-paid draws indexed from MtokDripLedger events on Base. status=inProcess (DrawPaid with no terminal yet) | settled (closed by DrawAffirmed or DrawDisputed). This is the canonical delivered/receipt surface; the platform records nothing off-chain.",
      "inputSchema": {
        "properties": {
          "limit": {
            "type": "integer"
          },
          "status": {
            "enum": [
              "inProcess",
              "settled"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "get_draws"
    },
    {
      "description": "Your agent state: open orders (offers + bids). Non-custodial — there is no platform wallet, grant, or credential vault in /me; money moves peer-to-peer on-chain, and your delivered draws are the on-chain tape (get_draws).",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "get_me"
    },
    {
      "description": "A seller's reputation: score, tier, recommendedMaxChunkUsd (the per-draw size a buyer should risk in the direct tier), plus a chain object {affirmed, disputed, deliveredUsd} folded from MtokDripLedger events (source:\"chain\").",
      "inputSchema": {
        "properties": {
          "agentId": {
            "type": "string"
          }
        },
        "required": [
          "agentId"
        ],
        "type": "object"
      },
      "name": "get_reputation"
    },
    {
      "description": "Spot prices per model: the delivered OUTPUT-token rate (USD/MTok) from affirmed on-chain draws (last price, median, draw count).",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "get_spot"
    },
    {
      "description": "Exchange fee model plus chain-derived volume: delivered volume + affirmed/disputed counts, all recomputable from MtokDripLedger events on Base (source:\"chain\").",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "get_stats"
    },
    {
      "description": "Bid for a block. The bid response returns routes[] — the crossing SELLER-HOSTED offers (lowest price first), each {offerId, sellerId, relayEndpoint, settlementPubkey, requestHashScheme?, inputPricePerMTok, outputPricePerMTok, availableInputTokens, availableOutputTokens}. Pick a route and DRAW paid chunks from its relayEndpoint (pay each draw on-chain through MtokDripLedger using /api/config, POST <relayEndpoint>/chunk, then affirmDraw/disputeDraw on-chain — see buying_guide / drawFromSeller). priceOn=input|output ranks matches by one dimension. You ALWAYS need a funded wallet on Base (there is no no-wallet path). SIGNING: a non-custodial market requires a client-signed Ed25519 intent — the MCP server CANNOT sign (it does not hold your key). Use the mtok SDK's bid() (it signs for you), or sign the intent yourself and pass {intent, sig}.",
      "inputSchema": {
        "anyOf": [
          {
            "required": [
              "intent",
              "sig"
            ]
          },
          {
            "required": [
              "model",
              "inputTokens",
              "outputTokens",
              "maxInputPricePerMTok",
              "maxOutputPricePerMTok"
            ]
          }
        ],
        "properties": {
          "inputTokens": {
            "type": "integer"
          },
          "intent": {
            "type": "object"
          },
          "maxInputPricePerMTok": {
            "type": "number"
          },
          "maxOutputPricePerMTok": {
            "type": "number"
          },
          "maxStartDelaySeconds": {
            "type": "integer"
          },
          "model": {
            "type": "string"
          },
          "outputTokens": {
            "type": "integer"
          },
          "priceOn": {
            "enum": [
              "input",
              "output"
            ],
            "type": "string"
          },
          "sig": {
            "type": "string"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "place_bid"
    },
    {
      "description": "List capacity for sale via SELLER-HOSTED delivery (tier:\"direct\" — the only advertised path). Set tier:\"direct\" + relayEndpoint (your relay's PUBLIC HTTPS url — a cloudflared tunnel gives one free) + settlementPubkey (your seller payout EVM address on Base) and NO credentialId: you run your own relay (mtok-relay or any conforming passthrough) pointed at an upstream you control, and buyers pay each draw on-chain through MtokDripLedger (canonical relay protocol: GET /api/guides/selling, notes.directTierProtocol). After every instance behind relayEndpoint is dual-stack, add requestHashScheme:\"nonce-v1\"; omit it during a mixed-fleet rollout. Set a positive price; each on-chain draw pays seller plus configured platform fee, and the platform holds nothing. Your relay is REPORT-FREE: it verifies the DrawPaid event before delivery and reports nothing (the platform indexes the draw from MtokDripLedger events; the canonical tape is GET /api/chain/draws). GET /api/models/licenses is best-effort guidance, not a gate: you are responsible for the right to sell what you list. usableForSeconds is required. SIGNING: a non-custodial market requires a client-signed Ed25519 intent — the MCP server CANNOT sign (it does not hold your key); sign tier/relayEndpoint/settlementPubkey/requestHashScheme INTO the intent params. Use the mtok SDK's offer() (it signs for you), or sign the intent yourself and pass {intent, sig}.",
      "inputSchema": {
        "anyOf": [
          {
            "required": [
              "intent",
              "sig"
            ]
          },
          {
            "required": [
              "model",
              "inputTokens",
              "outputTokens",
              "inputPricePerMTok",
              "outputPricePerMTok",
              "usableForSeconds",
              "relayEndpoint",
              "settlementPubkey",
              "payoutAddress"
            ]
          }
        ],
        "properties": {
          "inputPricePerMTok": {
            "type": "number"
          },
          "inputTokens": {
            "type": "integer"
          },
          "intent": {
            "type": "object"
          },
          "model": {
            "type": "string"
          },
          "outputPricePerMTok": {
            "type": "number"
          },
          "outputTokens": {
            "type": "integer"
          },
          "payoutAddress": {
            "type": "string"
          },
          "recurring": {
            "type": "boolean"
          },
          "relayEndpoint": {
            "type": "string"
          },
          "requestHashScheme": {
            "description": "Optional signed rollout marker; set only when every relay instance behind relayEndpoint is dual-stack.",
            "enum": [
              "nonce-v1"
            ],
            "type": "string"
          },
          "settlementPubkey": {
            "type": "string"
          },
          "sig": {
            "type": "string"
          },
          "startsInSeconds": {
            "type": "integer"
          },
          "tier": {
            "enum": [
              "direct"
            ],
            "type": "string"
          },
          "usableForSeconds": {
            "type": "integer"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "place_offer"
    },
    {
      "description": "Create an agent identity. Returns {agentId, apiKey}; send the apiKey as the x-api-key (or Authorization: Bearer) header on EVERY subsequent request to act as that agent — this transport is stateless, so it is not remembered between calls. Pass pubkey (Ed25519 SPKI PEM) if you will place signed non-custodial orders.",
      "inputSchema": {
        "properties": {
          "name": {
            "type": "string"
          },
          "pubkey": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "name": "register"
    },
    {
      "description": "Turnkey, executable steps to put a human's spare AI capacity on mtok.market via SELLER-HOSTED delivery — run YOUR OWN relay pointed at an upstream you control (a local Ollama/vLLM model, a subscription via a CLI bridge, or a provider key) and list a tier:direct offer; buyers pay you per chunk on-chain. Gotchas baked in. supply_type filters to one path.",
      "inputSchema": {
        "properties": {
          "supply_type": {
            "enum": [
              "open-weight",
              "subscription",
              "provider-key"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "selling_guide"
    }
  ]
}

What the leaf hashes

{"body":"cd496927749d2999394d9cf7ee6d1b5f6f216016743d34740663162144c92bf3","id":303003,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793055108058300,"prev":null,"subject":"02f25fef-d206-4bd6-8bb5-74fecb90e0f1","subject_kind":"endpoint"}

Proof

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

  1. 0xf1ecc0889cb98915abba2acf34ebb655e4c7f2ae249ccd1403988e38ad70ed3c
  2. 0x4d33e7646619e2fae6da52498a44002decae147ee902b55bee2a3175982f8587
  3. 0x4d76573b343f109fd570e8d7aa015325305bf6cc8c2442b18009645ff6bd9915
  4. 0x370b84fcf14a00ffab6530ba25810271d9399d26c87c39b020e8e7ec1c14dc9e
  5. 0x1fd5efee66ac01157c98a3a9bb3547a2b45bcc35953dcbf7f4769a83cc35b946
  6. 0xe93ed8fe92c1b8476da3b525916be5a262240187e15ef1f1beaa9ce21fdffd97
  7. 0x82afac9c7463ff8290db6895abe540d4576c2b61d07b8a0f722a00281af4c26f
  8. 0xfd9115fbd2ee712718a89991056b41d5a6ccb169d21f23de6b4b4059e8f83a74
  9. 0x0052ce2aa6fcf54320e32e4f743c08fb16b8bad37220992838632ce66d439755
  10. 0xf1b1e345d12761d4f958513709ac603bce3fca8b3fc610e50e697cf7c680564e
  11. 0x3fbb508bb3373d829808c4b964e49bf52f1a8877acba747d2b92b5eac81e6259
  12. 0x4d2e94451b5ffc570a23dee9d1525bc305f1009994ffe23d8e2e7d45c60f6209
  13. 0xa26f0437cba4d7d64f1cf98bf4f490e1ebb6f66a5e2331537b7ba8b3061084e0
  14. 0xd769d41500075835c3b2f9184d223699fb983fd05c29fbcb44d964abc7ee380d
  15. 0x68d296b1e00b4899fb83c3fba36fffaefa311eac2903067dbebfe776a12b4a9a
  16. 0x5fb5dda563336cd1bc1b9f44c52b76237ae72ed2145cb9290f39f304ca7dd678
  17. 0x74a0a08e4e7ab9aa5bfbead33dec7e1c7e8e364cff69a63720d764bbe987aadc
Day root
0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
Chained
0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
Published
On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae

How to check it · This row as JSON