addrbookFor publishers
← The evidence ledger

Evidence row 558807

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint f816185c-9357-4bc5-a074-668b2adb74a5
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
06883475d0ab019541515fef4f7d3c7bb78cb239ea6ed07966212692609ea8ed
Leaf
0x8f7010d1abf57eee620ca33f3f09a1684cecffeb9e4b1236428265bbec04531f

What was observed

{
  "count": 6,
  "tools": [
    {
      "description": "Approves or denies a payment that sandbox_pay reported as waiting for approval, as the human approver would with `spendctl approve`. Use it only with an approval id from this sandbox; in the real product a human decides, in the sandbox the model plays that role. Returns the approval id and its new status (approved or denied). An approved payment completes when sandbox_pay is called again with the same approvalId; a denied one stays refused. Deciding the same approval twice keeps the first decision.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "approvalId": {
            "description": "The approval id returned by sandbox_pay in its \"waiting for approval\" result (Approval id: ...)",
            "type": "string"
          },
          "decision": {
            "default": "approve",
            "description": "approve releases the held payment; deny refuses it for good",
            "enum": [
              "approve",
              "deny"
            ],
            "type": "string"
          },
          "note": {
            "description": "Optional reason recorded with the decision, up to 200 characters",
            "maxLength": 200,
            "type": "string"
          },
          "sandbox_id": {
            "description": "The sandbox_id returned by sandbox_create (32 hex characters)",
            "pattern": "^[0-9a-f]{32}$",
            "type": "string"
          }
        },
        "required": [
          "sandbox_id",
          "approvalId"
        ],
        "type": "object"
      },
      "name": "approve"
    },
    {
      "description": "Shows the sandbox agent's spending limits, what has been spent in each window and what is left. Use it before a paid call when the remaining budget matters, or after a refusal to see which limit was hit. Returns the agent name and mode, the per-request limit, the approval threshold, what happens when a budget is exceeded, the allowed hosts and one line per window (hourly, daily: spent, limit, remaining). Read-only; changes nothing.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "sandbox_id": {
            "description": "The sandbox_id returned by sandbox_create (32 hex characters)",
            "pattern": "^[0-9a-f]{32}$",
            "type": "string"
          }
        },
        "required": [
          "sandbox_id"
        ],
        "type": "object"
      },
      "name": "check_budget"
    },
    {
      "description": "Returns the sandbox's spendctl.yaml as text: the preset name and the agent's budgets, allowed hosts and approval rules. Use it to explain why a payment was refused or held, or to show what a spendctl policy file looks like. Read-only; the sandbox policy cannot be changed, create a sandbox with another preset instead.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "sandbox_id": {
            "description": "The sandbox_id returned by sandbox_create (32 hex characters)",
            "pattern": "^[0-9a-f]{32}$",
            "type": "string"
          }
        },
        "required": [
          "sandbox_id"
        ],
        "type": "object"
      },
      "name": "get_policy"
    },
    {
      "description": "Lists the sandbox agent's most recent payment attempts, newest first: paid (amount and mock transaction hash), refused (reason codes) and waiting for approval. Use it to report what happened so far or to find a receipt id; after a hold, the approval id is in the sandbox_pay result. Returns up to `limit` lines, one per attempt, with time, receipt id, method, URL, amount and status, or \"No payments yet.\" Read-only.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "limit": {
            "default": 10,
            "description": "How many attempts to return, newest first (1 to 100, default 10)",
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "sandbox_id": {
            "description": "The sandbox_id returned by sandbox_create (32 hex characters)",
            "pattern": "^[0-9a-f]{32}$",
            "type": "string"
          }
        },
        "required": [
          "sandbox_id"
        ],
        "type": "object"
      },
      "name": "list_receipts"
    },
    {
      "description": "Creates an isolated spendctl sandbox and returns its sandbox_id. Call it first: every other tool needs the sandbox_id, and one sandbox serves a whole conversation (create another only to try a different preset). The sandbox is a real spendctl sidecar with a throwaway wallet, a mock x402 facilitator and two mock paid APIs; no real money moves and nothing outside the sandbox is reachable. Returns the sandbox_id, the agent's policy (budgets, allowed hosts, approval rule) and the paid endpoints with their prices. Limits: 5 sandboxes per minute per client; a sandbox expires after 2 hours without calls (24 hours at most). Example: preset \"strict\" to see refusals, \"approvals\" to see a payment held for a human.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "preset": {
            "default": "default",
            "description": "Policy preset. default: comfortable caps, both endpoints allowed; strict: $0.015 per request and $0.03 per day, weather only, so the search API and a fourth weather call are refused; approvals: payments at or above $0.015 wait for approve",
            "enum": [
              "default",
              "strict",
              "approvals"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "sandbox_create"
    },
    {
      "description": "Fetches one of the sandbox's paid endpoints (HTTP 402, x402) through the spendctl sidecar, which applies the sandbox agent's budget, allowlist and approval policy, pays with the throwaway wallet if allowed, and returns the response. Use it for every paid call in the sandbox: with dryRun to see the decision without paying, with approvalId to complete a payment that was held and then approved. The endpoints are https://weather.sandbox.spendctl.dev/weather?city=<name> ($0.01) and https://search.sandbox.spendctl.dev/search?q=<query> ($0.02), as listed by sandbox_create and documented at https://spendctl.dev/docs/sandbox/; any other host is refused. Returns a one-line summary (HTTP status, amount paid, decision, receipt id) followed by the response body, or the refusal with its reason, or an approval id when the payment is waiting for a human. Only sandbox hosts exist and no real funds are involved; the request is always a GET and responses are clipped at 20,000 characters. Example: url https://weather.sandbox.spendctl.dev/weather?city=Kyoto",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "approvalId": {
            "description": "The approval id from an earlier sandbox_pay result, after approve accepted it, to complete that held payment",
            "type": "string"
          },
          "dryRun": {
            "description": "true: only report what spendctl would decide; never pay",
            "type": "boolean"
          },
          "idempotencyKey": {
            "description": "Reuse the same key when retrying a call so the sandbox is never charged twice, e.g. \"kyoto-1\"",
            "type": "string"
          },
          "sandbox_id": {
            "description": "The sandbox_id returned by sandbox_create (32 hex characters)",
            "pattern": "^[0-9a-f]{32}$",
            "type": "string"
          },
          "url": {
            "description": "Absolute URL of a sandbox endpoint, e.g. https://weather.sandbox.spendctl.dev/weather?city=Kyoto",
            "format": "uri",
            "type": "string"
          }
        },
        "required": [
          "sandbox_id",
          "url"
        ],
        "type": "object"
      },
      "name": "sandbox_pay"
    }
  ]
}

What the leaf hashes

{"body":"06883475d0ab019541515fef4f7d3c7bb78cb239ea6ed07966212692609ea8ed","id":558807,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793135164531479,"prev":null,"subject":"f816185c-9357-4bc5-a074-668b2adb74a5","subject_kind":"endpoint"}

Proof

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

  1. 0x8f706f16d5cee648052e39aa24711d29546c83ccbc223d397b0ce0176e4a98e8
  2. 0x6a4cd92c525aeb18bcabf5a8c0c687486b980aeab8754492a6908cde126a51ae
  3. 0xf2a9dc3a8873ed47a803f7514d1c33e1d0696379acf14b6c844c2af53fd82a66
  4. 0xd3d009599e6c259672e90a6fd517567d53a1adebe454622e6d85c59c50194401
  5. 0xc8454b7bbedb9fb0cce7706cc7069d5b4a7eb3d47121e3963cd0b3fd9d3d0b60
  6. 0x6411c171b4c14712fd49d79e465edb93a67f6e8bf4f2f1cf2105911aaa662808
  7. 0x8a0429afa2a46a338f3bc34c6f7c800278666576ac4955bf7d4c14dd4b7d00b7
  8. 0xfa547948ff11383fdf0625d8062791b2fe6414988058abb58dcc2d0f3589571f
  9. 0xd140283f01ef629e9a29d4fa0c0749e9f47e7f922e2e208001d5054be9440a4a
  10. 0x41d116872d35101e280e8ba654733ed9c35d9cf4f524fd91218920226c8aca68
  11. 0xbff43d30538b90ef025129e8a238dc8959481edca06b37ecee4c2be1f617127d
  12. 0x3d13b6f855471289691a683ee58cac14977b2531dabc14f9c666e928df0908e6
  13. 0x5c9cbca5bb1d6be4d84e301b4e4c1a280536eb16ee98ed4add9057142c132dde
  14. 0x06e3b43165f5b3c31d850bc32f20b2e25b844564c4e042c141b9748c26a5a600
  15. 0xb4f7223140c8a36cb87a63d77cf617086d9968dc4658f03e102571ebe06e9ed6
  16. 0xfecf3d4646dd4984a13dd715499e842c3fde63692336d97394c2bfd8e877ca5d
  17. 0xf30fddbf4811226c58e8f0daf36fddd79fc5f1356b592bb1d99a8061ddbabe66
  18. 0x2bf8151e5f157dd183b9de6fa00469551932a7a6e3f33a694895000ac9061197
  19. 0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699
Day root
0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795
Chained
0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4
Published
On Arc Testnet, block 69414147: 0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4

How to check it · This row as JSON