{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_esu6jzn2kcc8","handle":"spendctl","url":"https://wellknown.network/agents/spendctl","links":{"self":"https://wellknown.network/agents/spendctl/record.json","html":"https://wellknown.network/agents/spendctl","markdown":"https://wellknown.network/agents/spendctl/record.md","api":"https://wellknown.network/api/v1/agents/spendctl","status":"https://wellknown.network/api/v1/agents/spendctl/status","claim":"https://wellknown.network/agents/spendctl/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/spendctl/claim.json","badge":"https://wellknown.network/agents/spendctl/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/spendctl/history","tools":"https://wellknown.network/api/v1/agents/spendctl/tools"},"ard":{"identifier":"urn:air:mcp.spendctl.dev:server:spendctl","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"spendctl","summary":"Spend policy for AI agents that pay (x402, MPP). Login-free sandbox, real sidecar, no real funds.","description":"Spend policy for AI agents that pay (x402, MPP). Login-free sandbox, real sidecar, no real funds.","publisher":{"name":"dev.spendctl","url":null},"homepage":"https://spendctl.dev/docs/sandbox/","repository":null,"version":"0.1.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://mcp.spendctl.dev/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-26T08:59:19.33071Z","publishedAt":"2026-10-26T08:59:19.33071Z","registryName":"dev.spendctl/spendctl"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"code.execution","name":"Code Execution","confidence":0.911,"provenance":"derived"},{"slug":"documents.invoice-processing","name":"Invoice Processing","confidence":0.525,"provenance":"derived"},{"slug":"commerce.payments","name":"Payments","confidence":0.51,"provenance":"derived"}],"categories":["code","commerce","documents"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 4h ago.","lastOkAt":"2026-11-01T05:32:08.225Z","lastProbedAt":"2026-11-01T05:32:08.225Z","statusComputedAt":"2026-11-01T05:35:48.968Z","reliability30d":{"probes":11,"successRate":1,"p50Ms":46,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":11,"ok":11,"authBoundaryOk":0,"serviceOk":11,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-11-01T05:32:08.225Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":37,"error":null,"detail":{"tools":[{"name":"sandbox_create","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 conversati"},{"name":"sandbox_pay","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 poli"},{"name":"check_budget","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 "},{"name":"list_receipts","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. "},{"name":"get_policy","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 refu"},{"name":"approve","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 approva"}],"toolCount":6,"toolsHash":"d5c49bb5977712a32cbb5650eb5b5fa4077c94b0bc99f0d4c4af4a5a7289ccab","serverName":"spendctl-sandbox","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-31T21:28:22.532Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":47,"error":null,"detail":{"tools":[{"name":"sandbox_create","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 conversati"},{"name":"sandbox_pay","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 poli"},{"name":"check_budget","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 "},{"name":"list_receipts","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. "},{"name":"get_policy","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 refu"},{"name":"approve","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 approva"}],"toolCount":6,"toolsHash":"d5c49bb5977712a32cbb5650eb5b5fa4077c94b0bc99f0d4c4af4a5a7289ccab","serverName":"spendctl-sandbox","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-31T13:28:02.565Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":88,"error":null,"detail":{"tools":[{"name":"sandbox_create","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 conversati"},{"name":"sandbox_pay","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 poli"},{"name":"check_budget","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 "},{"name":"list_receipts","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. "},{"name":"get_policy","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 refu"},{"name":"approve","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 approva"}],"toolCount":6,"toolsHash":"d5c49bb5977712a32cbb5650eb5b5fa4077c94b0bc99f0d4c4af4a5a7289ccab","serverName":"spendctl-sandbox","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-31T05:26:47.400Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":36,"error":null,"detail":{"tools":[{"name":"sandbox_create","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 conversati"},{"name":"sandbox_pay","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 poli"},{"name":"check_budget","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 "},{"name":"list_receipts","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. "},{"name":"get_policy","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 refu"},{"name":"approve","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 approva"}],"toolCount":6,"toolsHash":"d5c49bb5977712a32cbb5650eb5b5fa4077c94b0bc99f0d4c4af4a5a7289ccab","serverName":"spendctl-sandbox","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-30T21:25:26.934Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":39,"error":null,"detail":{"tools":[{"name":"sandbox_create","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 conversati"},{"name":"sandbox_pay","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 poli"},{"name":"check_budget","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 "},{"name":"list_receipts","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. "},{"name":"get_policy","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 refu"},{"name":"approve","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 approva"}],"toolCount":6,"toolsHash":"d5c49bb5977712a32cbb5650eb5b5fa4077c94b0bc99f0d4c4af4a5a7289ccab","serverName":"spendctl-sandbox","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-30T13:30:18.673Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":80,"error":null,"detail":{"tools":[{"name":"sandbox_create","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 conversati"},{"name":"sandbox_pay","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 poli"},{"name":"check_budget","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 "},{"name":"list_receipts","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. "},{"name":"get_policy","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 refu"},{"name":"approve","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 approva"}],"toolCount":6,"toolsHash":"d5c49bb5977712a32cbb5650eb5b5fa4077c94b0bc99f0d4c4af4a5a7289ccab","serverName":"spendctl-sandbox","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-30T06:27:09.833Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":62,"error":null,"detail":{"tools":[{"name":"sandbox_create","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 conversati"},{"name":"sandbox_pay","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 poli"},{"name":"check_budget","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 "},{"name":"list_receipts","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. "},{"name":"get_policy","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 refu"},{"name":"approve","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 approva"}],"toolCount":6,"toolsHash":"d5c49bb5977712a32cbb5650eb5b5fa4077c94b0bc99f0d4c4af4a5a7289ccab","serverName":"spendctl-sandbox","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-29T23:22:16.787Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":37,"error":null,"detail":{"tools":[{"name":"sandbox_create","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 conversati"},{"name":"sandbox_pay","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 poli"},{"name":"check_budget","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 "},{"name":"list_receipts","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. "},{"name":"get_policy","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 refu"},{"name":"approve","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 approva"}],"toolCount":6,"toolsHash":"d5c49bb5977712a32cbb5650eb5b5fa4077c94b0bc99f0d4c4af4a5a7289ccab","serverName":"spendctl-sandbox","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-29T16:26:38.690Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":32,"error":null,"detail":{"tools":[{"name":"sandbox_create","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 conversati"},{"name":"sandbox_pay","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 poli"},{"name":"check_budget","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 "},{"name":"list_receipts","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. "},{"name":"get_policy","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 refu"},{"name":"approve","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 approva"}],"toolCount":6,"toolsHash":"d5c49bb5977712a32cbb5650eb5b5fa4077c94b0bc99f0d4c4af4a5a7289ccab","serverName":"spendctl-sandbox","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-29T09:28:12.582Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":63,"error":null,"detail":{"tools":[{"name":"sandbox_create","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 conversati"},{"name":"sandbox_pay","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 poli"},{"name":"check_budget","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 "},{"name":"list_receipts","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. "},{"name":"get_policy","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 refu"},{"name":"approve","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 approva"}],"toolCount":6,"toolsHash":"d5c49bb5977712a32cbb5650eb5b5fa4077c94b0bc99f0d4c4af4a5a7289ccab","serverName":"spendctl-sandbox","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"sandbox_create","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 conversati"},{"name":"sandbox_pay","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 poli"},{"name":"check_budget","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 "},{"name":"list_receipts","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. "},{"name":"get_policy","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 refu"},{"name":"approve","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 approva"}],"package":null,"toolSurface":{"id":"ts_nz4mjqdx2bb9","endpointId":"ep_gddfwudvswkz","hash":"d5c49bb5977712a32cbb5650eb5b5fa4077c94b0bc99f0d4c4af4a5a7289ccab","toolCount":6,"serverName":"spendctl-sandbox","serverVersion":"0.1.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-29T02:30:37.926Z","lastSeenAt":"2026-11-01T05:32:08.216Z","observations":11,"toolNames":["sandbox_create","sandbox_pay","check_budget","list_receipts","get_policy","approve"],"distinctSurfaces":1},"endpointFacts":[]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"dev.spendctl/spendctl","url":"https://registry.modelcontextprotocol.io/v0/servers/dev.spendctl%2Fspendctl","firstSeenAt":"2026-10-29T01:19:47.343Z","fetchedAt":"2026-10-29T01:19:47.343Z","normalizedAt":"2026-10-29T01:19:47.343Z"}]},"firstSeenAt":"2026-10-29T01:19:47.343Z","updatedAt":"2026-11-01T05:37:20.065Z"}