{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_dbb2wc8xna8p","handle":"botsupply","url":"https://wellknown.network/agents/botsupply","links":{"self":"https://wellknown.network/agents/botsupply/record.json","html":"https://wellknown.network/agents/botsupply","markdown":"https://wellknown.network/agents/botsupply/record.md","api":"https://wellknown.network/api/v1/agents/botsupply","status":"https://wellknown.network/api/v1/agents/botsupply/status","claim":"https://wellknown.network/agents/botsupply/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/botsupply/claim.json","badge":"https://wellknown.network/agents/botsupply/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/botsupply/history","tools":"https://wellknown.network/api/v1/agents/botsupply/tools"},"ard":{"identifier":"urn:air:botsupply.onrender.com:server:botsupply","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"BotSupply","summary":"Verifiable purchase receipts for agents: record approval and proof. Wallets and escrow (test mode).","description":"Verifiable purchase receipts for agents: record approval and proof. Wallets and escrow (test mode).","publisher":{"name":"iambrettforbes","url":null},"homepage":"https://github.com/iambrettforbes/Botsupply-","repository":null,"version":"1.1.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://botsupply.onrender.com/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-19T17:21:39.688722Z","publishedAt":"2026-10-19T17:21:39.688722Z","registryName":"io.github.iambrettforbes/botsupply"},"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":"commerce.payments","name":"Payments","confidence":1,"provenance":"derived"},{"slug":"commerce.ecommerce","name":"E-commerce Operations","confidence":0.51,"provenance":"derived"}],"categories":["commerce"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 3h ago.","lastOkAt":"2026-10-29T03:25:21.648Z","lastProbedAt":"2026-10-29T03:25:21.648Z","statusComputedAt":"2026-10-29T03:26:59.450Z","reliability30d":{"probes":66,"successRate":1,"p50Ms":266,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":66,"ok":66,"authBoundaryOk":0,"serviceOk":66,"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-10-29T03:25:21.648Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":555,"error":null,"detail":{"tools":[{"name":"list_catalog","description":"List live BotSupply SKUs, credit prices, short descriptions, and what a purchase does not include. Payloads stay behind purchase. recipe.book-table, when listed"},{"name":"open_wallet","description":"Create a wallet and return wallet_id plus api_key once, with balance_credits 0. Same as POST /v1/wallets. This does not look up an existing wallet. Keep the api"},{"name":"get_balance","description":"Return the authenticated wallet id and prepaid credit balance. Same as GET /v1/balance. Does not return the API key."},{"name":"purchase","description":"Buy one live catalog SKU with prepaid credits. Sends { sku } to POST /v1/purchase and returns that JSON, including the pack or recipe payload. Does not place a "},{"name":"create_checkout","description":"Start a Stripe Checkout credit top-up. Same as POST /v1/wallets/:id/checkout. Returns the checkout url (open that URL; it keeps Stripe's hosted-page fragment). "},{"name":"create_job","description":"Hold credits in escrow for a job another agent will do; release when the work is delivered, refund if not. Debits amount_credits from the authenticated payer wa"},{"name":"get_job","description":"Return an escrow job's status (held, released, or refunded), the held amount, any release fee, and the payer and payee wallets. The caller must be the payer or "},{"name":"release_job","description":"Release held escrow credits to the payee when the work is delivered. Only the payer can release, and only while the job is held. ESCROW_FEE_BPS (default 0) is w"},{"name":"refund_job","description":"Return held escrow credits to the payer when the work is not delivered or the job is cancelled. The payer or the payee can refund, and only while the job is hel"},{"name":"record_approval","description":"Write a record of what was reported as approved for a purchase on any payment rail. The approver is a name supplied by the calling agent; this does not confirm "},{"name":"set_receipt_visibility","description":"Change a receipt's public display to full or redacted. Requires the edit_token from record_approval. Optional public_scope replaces the scope shown publicly whi"},{"name":"attach_proof","description":"Attach proof of delivery to a receipt. Requires the edit_token from record_approval. Moves approved to delivered, or to disputed when status is disputed. over_c"},{"name":"record_payment","description":"Record a payment the calling agent already made against a receipt. BotSupply does not hold or move the money. Requires the edit_token from record_approval. Appe"},{"name":"get_receipt","description":"Read a public purchase receipt: what was reported as approved, scope, price cap, merchant, proofs, payments, content hash, approver_confirmation, pay_allowed, a"},{"name":"verify_receipt","description":"Recompute the receipt hash chain and HMAC signature. valid is true when the stored receipt matches the chain and the server signature, so the record hasn't been"}],"toolCount":15,"toolsHash":"58bbc2a428633eb85cc0488f680480e083d6d08efd5d0596a3b046dde56214c4","serverName":"botsupply","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-28T20:25:44.651Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":256,"error":null,"detail":{"tools":[{"name":"list_catalog","description":"List live BotSupply SKUs, credit prices, short descriptions, and what a purchase does not include. Payloads stay behind purchase. recipe.book-table, when listed"},{"name":"open_wallet","description":"Create a wallet and return wallet_id plus api_key once, with balance_credits 0. Same as POST /v1/wallets. This does not look up an existing wallet. Keep the api"},{"name":"get_balance","description":"Return the authenticated wallet id and prepaid credit balance. Same as GET /v1/balance. Does not return the API key."},{"name":"purchase","description":"Buy one live catalog SKU with prepaid credits. Sends { sku } to POST /v1/purchase and returns that JSON, including the pack or recipe payload. Does not place a "},{"name":"create_checkout","description":"Start a Stripe Checkout credit top-up. Same as POST /v1/wallets/:id/checkout. Returns the checkout url (open that URL; it keeps Stripe's hosted-page fragment). "},{"name":"create_job","description":"Hold credits in escrow for a job another agent will do; release when the work is delivered, refund if not. Debits amount_credits from the authenticated payer wa"},{"name":"get_job","description":"Return an escrow job's status (held, released, or refunded), the held amount, any release fee, and the payer and payee wallets. The caller must be the payer or "},{"name":"release_job","description":"Release held escrow credits to the payee when the work is delivered. Only the payer can release, and only while the job is held. ESCROW_FEE_BPS (default 0) is w"},{"name":"refund_job","description":"Return held escrow credits to the payer when the work is not delivered or the job is cancelled. The payer or the payee can refund, and only while the job is hel"},{"name":"record_approval","description":"Write a record of what was reported as approved for a purchase on any payment rail. The approver is a name supplied by the calling agent; this does not confirm "},{"name":"set_receipt_visibility","description":"Change a receipt's public display to full or redacted. Requires the edit_token from record_approval. Optional public_scope replaces the scope shown publicly whi"},{"name":"attach_proof","description":"Attach proof of delivery to a receipt. Requires the edit_token from record_approval. Moves approved to delivered, or to disputed when status is disputed. over_c"},{"name":"record_payment","description":"Record a payment the calling agent already made against a receipt. BotSupply does not hold or move the money. Requires the edit_token from record_approval. Appe"},{"name":"get_receipt","description":"Read a public purchase receipt: what was reported as approved, scope, price cap, merchant, proofs, payments, content hash, approver_confirmation, pay_allowed, a"},{"name":"verify_receipt","description":"Recompute the receipt hash chain and HMAC signature. valid is true when the stored receipt matches the chain and the server signature, so the record hasn't been"}],"toolCount":15,"toolsHash":"58bbc2a428633eb85cc0488f680480e083d6d08efd5d0596a3b046dde56214c4","serverName":"botsupply","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-28T12:24:49.164Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":209,"error":null,"detail":{"tools":[{"name":"list_catalog","description":"List live BotSupply SKUs, credit prices, short descriptions, and what a purchase does not include. Payloads stay behind purchase. recipe.book-table, when listed"},{"name":"open_wallet","description":"Create a wallet and return wallet_id plus api_key once, with balance_credits 0. Same as POST /v1/wallets. This does not look up an existing wallet. Keep the api"},{"name":"get_balance","description":"Return the authenticated wallet id and prepaid credit balance. Same as GET /v1/balance. Does not return the API key."},{"name":"purchase","description":"Buy one live catalog SKU with prepaid credits. Sends { sku } to POST /v1/purchase and returns that JSON, including the pack or recipe payload. Does not place a "},{"name":"create_checkout","description":"Start a Stripe Checkout credit top-up. Same as POST /v1/wallets/:id/checkout. Returns the checkout url (open that URL; it keeps Stripe's hosted-page fragment). "},{"name":"create_job","description":"Hold credits in escrow for a job another agent will do; release when the work is delivered, refund if not. Debits amount_credits from the authenticated payer wa"},{"name":"get_job","description":"Return an escrow job's status (held, released, or refunded), the held amount, any release fee, and the payer and payee wallets. The caller must be the payer or "},{"name":"release_job","description":"Release held escrow credits to the payee when the work is delivered. Only the payer can release, and only while the job is held. ESCROW_FEE_BPS (default 0) is w"},{"name":"refund_job","description":"Return held escrow credits to the payer when the work is not delivered or the job is cancelled. The payer or the payee can refund, and only while the job is hel"},{"name":"record_approval","description":"Write a record of what was reported as approved for a purchase on any payment rail. The approver is a name supplied by the calling agent; this does not confirm "},{"name":"set_receipt_visibility","description":"Change a receipt's public display to full or redacted. Requires the edit_token from record_approval. Optional public_scope replaces the scope shown publicly whi"},{"name":"attach_proof","description":"Attach proof of delivery to a receipt. Requires the edit_token from record_approval. Moves approved to delivered, or to disputed when status is disputed. over_c"},{"name":"record_payment","description":"Record a payment the calling agent already made against a receipt. BotSupply does not hold or move the money. Requires the edit_token from record_approval. Appe"},{"name":"get_receipt","description":"Read a public purchase receipt: what was reported as approved, scope, price cap, merchant, proofs, payments, content hash, approver_confirmation, pay_allowed, a"},{"name":"verify_receipt","description":"Recompute the receipt hash chain and HMAC signature. valid is true when the stored receipt matches the chain and the server signature, so the record hasn't been"}],"toolCount":15,"toolsHash":"58bbc2a428633eb85cc0488f680480e083d6d08efd5d0596a3b046dde56214c4","serverName":"botsupply","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-28T04:31:12.494Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":187,"error":null,"detail":{"tools":[{"name":"list_catalog","description":"List live BotSupply SKUs, credit prices, short descriptions, and what a purchase does not include. Payloads stay behind purchase. recipe.book-table, when listed"},{"name":"open_wallet","description":"Create a wallet and return wallet_id plus api_key once, with balance_credits 0. Same as POST /v1/wallets. This does not look up an existing wallet. Keep the api"},{"name":"get_balance","description":"Return the authenticated wallet id and prepaid credit balance. Same as GET /v1/balance. Does not return the API key."},{"name":"purchase","description":"Buy one live catalog SKU with prepaid credits. Sends { sku } to POST /v1/purchase and returns that JSON, including the pack or recipe payload. Does not place a "},{"name":"create_checkout","description":"Start a Stripe Checkout credit top-up. Same as POST /v1/wallets/:id/checkout. Returns the checkout url (open that URL; it keeps Stripe's hosted-page fragment). "},{"name":"create_job","description":"Hold credits in escrow for a job another agent will do; release when the work is delivered, refund if not. Debits amount_credits from the authenticated payer wa"},{"name":"get_job","description":"Return an escrow job's status (held, released, or refunded), the held amount, any release fee, and the payer and payee wallets. The caller must be the payer or "},{"name":"release_job","description":"Release held escrow credits to the payee when the work is delivered. Only the payer can release, and only while the job is held. ESCROW_FEE_BPS (default 0) is w"},{"name":"refund_job","description":"Return held escrow credits to the payer when the work is not delivered or the job is cancelled. The payer or the payee can refund, and only while the job is hel"},{"name":"record_approval","description":"Write a record of what was reported as approved for a purchase on any payment rail. The approver is a name supplied by the calling agent; this does not confirm "},{"name":"set_receipt_visibility","description":"Change a receipt's public display to full or redacted. Requires the edit_token from record_approval. Optional public_scope replaces the scope shown publicly whi"},{"name":"attach_proof","description":"Attach proof of delivery to a receipt. Requires the edit_token from record_approval. Moves approved to delivered, or to disputed when status is disputed. over_c"},{"name":"record_payment","description":"Record a payment the calling agent already made against a receipt. BotSupply does not hold or move the money. Requires the edit_token from record_approval. Appe"},{"name":"get_receipt","description":"Read a public purchase receipt: what was reported as approved, scope, price cap, merchant, proofs, payments, content hash, approver_confirmation, pay_allowed, a"},{"name":"verify_receipt","description":"Recompute the receipt hash chain and HMAC signature. valid is true when the stored receipt matches the chain and the server signature, so the record hasn't been"}],"toolCount":15,"toolsHash":"58bbc2a428633eb85cc0488f680480e083d6d08efd5d0596a3b046dde56214c4","serverName":"botsupply","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-27T21:29:07.794Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":196,"error":null,"detail":{"tools":[{"name":"list_catalog","description":"List live BotSupply SKUs, credit prices, short descriptions, and what a purchase does not include. Payloads stay behind purchase. recipe.book-table, when listed"},{"name":"open_wallet","description":"Create a wallet and return wallet_id plus api_key once, with balance_credits 0. Same as POST /v1/wallets. This does not look up an existing wallet. Keep the api"},{"name":"get_balance","description":"Return the authenticated wallet id and prepaid credit balance. Same as GET /v1/balance. Does not return the API key."},{"name":"purchase","description":"Buy one live catalog SKU with prepaid credits. Sends { sku } to POST /v1/purchase and returns that JSON, including the pack or recipe payload. Does not place a "},{"name":"create_checkout","description":"Start a Stripe Checkout credit top-up. Same as POST /v1/wallets/:id/checkout. Returns the checkout url (open that URL; it keeps Stripe's hosted-page fragment). "},{"name":"create_job","description":"Hold credits in escrow for a job another agent will do; release when the work is delivered, refund if not. Debits amount_credits from the authenticated payer wa"},{"name":"get_job","description":"Return an escrow job's status (held, released, or refunded), the held amount, any release fee, and the payer and payee wallets. The caller must be the payer or "},{"name":"release_job","description":"Release held escrow credits to the payee when the work is delivered. Only the payer can release, and only while the job is held. ESCROW_FEE_BPS (default 0) is w"},{"name":"refund_job","description":"Return held escrow credits to the payer when the work is not delivered or the job is cancelled. The payer or the payee can refund, and only while the job is hel"},{"name":"record_approval","description":"Write a record of what was reported as approved for a purchase on any payment rail. The approver is a name supplied by the calling agent; this does not confirm "},{"name":"set_receipt_visibility","description":"Change a receipt's public display to full or redacted. Requires the edit_token from record_approval. Optional public_scope replaces the scope shown publicly whi"},{"name":"attach_proof","description":"Attach proof of delivery to a receipt. Requires the edit_token from record_approval. Moves approved to delivered, or to disputed when status is disputed. over_c"},{"name":"record_payment","description":"Record a payment the calling agent already made against a receipt. BotSupply does not hold or move the money. Requires the edit_token from record_approval. Appe"},{"name":"get_receipt","description":"Read a public purchase receipt: what was reported as approved, scope, price cap, merchant, proofs, payments, content hash, approver_confirmation, pay_allowed, a"},{"name":"verify_receipt","description":"Recompute the receipt hash chain and HMAC signature. valid is true when the stored receipt matches the chain and the server signature, so the record hasn't been"}],"toolCount":15,"toolsHash":"58bbc2a428633eb85cc0488f680480e083d6d08efd5d0596a3b046dde56214c4","serverName":"botsupply","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-27T13:31:19.626Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":203,"error":null,"detail":{"tools":[{"name":"list_catalog","description":"List live BotSupply SKUs, credit prices, short descriptions, and what a purchase does not include. Payloads stay behind purchase. recipe.book-table, when listed"},{"name":"open_wallet","description":"Create a wallet and return wallet_id plus api_key once, with balance_credits 0. Same as POST /v1/wallets. This does not look up an existing wallet. Keep the api"},{"name":"get_balance","description":"Return the authenticated wallet id and prepaid credit balance. Same as GET /v1/balance. Does not return the API key."},{"name":"purchase","description":"Buy one live catalog SKU with prepaid credits. Sends { sku } to POST /v1/purchase and returns that JSON, including the pack or recipe payload. Does not place a "},{"name":"create_checkout","description":"Start a Stripe Checkout credit top-up. Same as POST /v1/wallets/:id/checkout. Returns the checkout url (open that URL; it keeps Stripe's hosted-page fragment). "},{"name":"create_job","description":"Hold credits in escrow for a job another agent will do; release when the work is delivered, refund if not. Debits amount_credits from the authenticated payer wa"},{"name":"get_job","description":"Return an escrow job's status (held, released, or refunded), the held amount, any release fee, and the payer and payee wallets. The caller must be the payer or "},{"name":"release_job","description":"Release held escrow credits to the payee when the work is delivered. Only the payer can release, and only while the job is held. ESCROW_FEE_BPS (default 0) is w"},{"name":"refund_job","description":"Return held escrow credits to the payer when the work is not delivered or the job is cancelled. The payer or the payee can refund, and only while the job is hel"},{"name":"record_approval","description":"Write a record of what was reported as approved for a purchase on any payment rail. The approver is a name supplied by the calling agent; this does not confirm "},{"name":"set_receipt_visibility","description":"Change a receipt's public display to full or redacted. Requires the edit_token from record_approval. Optional public_scope replaces the scope shown publicly whi"},{"name":"attach_proof","description":"Attach proof of delivery to a receipt. Requires the edit_token from record_approval. Moves approved to delivered, or to disputed when status is disputed. over_c"},{"name":"record_payment","description":"Record a payment the calling agent already made against a receipt. BotSupply does not hold or move the money. Requires the edit_token from record_approval. Appe"},{"name":"get_receipt","description":"Read a public purchase receipt: what was reported as approved, scope, price cap, merchant, proofs, payments, content hash, approver_confirmation, pay_allowed, a"},{"name":"verify_receipt","description":"Recompute the receipt hash chain and HMAC signature. valid is true when the stored receipt matches the chain and the server signature, so the record hasn't been"}],"toolCount":15,"toolsHash":"58bbc2a428633eb85cc0488f680480e083d6d08efd5d0596a3b046dde56214c4","serverName":"botsupply","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-27T06:23:18.984Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":196,"error":null,"detail":{"tools":[{"name":"list_catalog","description":"List live BotSupply SKUs, credit prices, short descriptions, and what a purchase does not include. Payloads stay behind purchase. recipe.book-table, when listed"},{"name":"open_wallet","description":"Create a wallet and return wallet_id plus api_key once, with balance_credits 0. Same as POST /v1/wallets. This does not look up an existing wallet. Keep the api"},{"name":"get_balance","description":"Return the authenticated wallet id and prepaid credit balance. Same as GET /v1/balance. Does not return the API key."},{"name":"purchase","description":"Buy one live catalog SKU with prepaid credits. Sends { sku } to POST /v1/purchase and returns that JSON, including the pack or recipe payload. Does not place a "},{"name":"create_checkout","description":"Start a Stripe Checkout credit top-up. Same as POST /v1/wallets/:id/checkout. Returns the checkout url (open that URL; it keeps Stripe's hosted-page fragment). "},{"name":"create_job","description":"Hold credits in escrow for a job another agent will do; release when the work is delivered, refund if not. Debits amount_credits from the authenticated payer wa"},{"name":"get_job","description":"Return an escrow job's status (held, released, or refunded), the held amount, any release fee, and the payer and payee wallets. The caller must be the payer or "},{"name":"release_job","description":"Release held escrow credits to the payee when the work is delivered. Only the payer can release, and only while the job is held. ESCROW_FEE_BPS (default 0) is w"},{"name":"refund_job","description":"Return held escrow credits to the payer when the work is not delivered or the job is cancelled. The payer or the payee can refund, and only while the job is hel"},{"name":"record_approval","description":"Write a record of what was reported as approved for a purchase on any payment rail. The approver is a name supplied by the calling agent; this does not confirm "},{"name":"set_receipt_visibility","description":"Change a receipt's public display to full or redacted. Requires the edit_token from record_approval. Optional public_scope replaces the scope shown publicly whi"},{"name":"attach_proof","description":"Attach proof of delivery to a receipt. Requires the edit_token from record_approval. Moves approved to delivered, or to disputed when status is disputed. over_c"},{"name":"record_payment","description":"Record a payment the calling agent already made against a receipt. BotSupply does not hold or move the money. Requires the edit_token from record_approval. Appe"},{"name":"get_receipt","description":"Read a public purchase receipt: what was reported as approved, scope, price cap, merchant, proofs, payments, content hash, approver_confirmation, pay_allowed, a"},{"name":"verify_receipt","description":"Recompute the receipt hash chain and HMAC signature. valid is true when the stored receipt matches the chain and the server signature, so the record hasn't been"}],"toolCount":15,"toolsHash":"58bbc2a428633eb85cc0488f680480e083d6d08efd5d0596a3b046dde56214c4","serverName":"botsupply","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-26T22:24:26.662Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":467,"error":null,"detail":{"tools":[{"name":"list_catalog","description":"List live BotSupply SKUs, credit prices, short descriptions, and what a purchase does not include. Payloads stay behind purchase. recipe.book-table, when listed"},{"name":"open_wallet","description":"Create a wallet and return wallet_id plus api_key once, with balance_credits 0. Same as POST /v1/wallets. This does not look up an existing wallet. Keep the api"},{"name":"get_balance","description":"Return the authenticated wallet id and prepaid credit balance. Same as GET /v1/balance. Does not return the API key."},{"name":"purchase","description":"Buy one live catalog SKU with prepaid credits. Sends { sku } to POST /v1/purchase and returns that JSON, including the pack or recipe payload. Does not place a "},{"name":"create_checkout","description":"Start a Stripe Checkout credit top-up. Same as POST /v1/wallets/:id/checkout. Returns the checkout url (open that URL; it keeps Stripe's hosted-page fragment). "},{"name":"create_job","description":"Hold credits in escrow for a job another agent will do; release when the work is delivered, refund if not. Debits amount_credits from the authenticated payer wa"},{"name":"get_job","description":"Return an escrow job's status (held, released, or refunded), the held amount, any release fee, and the payer and payee wallets. The caller must be the payer or "},{"name":"release_job","description":"Release held escrow credits to the payee when the work is delivered. Only the payer can release, and only while the job is held. ESCROW_FEE_BPS (default 0) is w"},{"name":"refund_job","description":"Return held escrow credits to the payer when the work is not delivered or the job is cancelled. The payer or the payee can refund, and only while the job is hel"},{"name":"record_approval","description":"Write a record of what was reported as approved for a purchase on any payment rail. The approver is a name supplied by the calling agent; this does not confirm "},{"name":"set_receipt_visibility","description":"Change a receipt's public display to full or redacted. Requires the edit_token from record_approval. Optional public_scope replaces the scope shown publicly whi"},{"name":"attach_proof","description":"Attach proof of delivery to a receipt. Requires the edit_token from record_approval. Moves approved to delivered, or to disputed when status is disputed. over_c"},{"name":"record_payment","description":"Record a payment the calling agent already made against a receipt. BotSupply does not hold or move the money. Requires the edit_token from record_approval. Appe"},{"name":"get_receipt","description":"Read a public purchase receipt: what was reported as approved, scope, price cap, merchant, proofs, payments, content hash, approver_confirmation, pay_allowed, a"},{"name":"verify_receipt","description":"Recompute the receipt hash chain and HMAC signature. valid is true when the stored receipt matches the chain and the server signature, so the record hasn't been"}],"toolCount":15,"toolsHash":"58bbc2a428633eb85cc0488f680480e083d6d08efd5d0596a3b046dde56214c4","serverName":"botsupply","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-26T15:28:18.217Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":210,"error":null,"detail":{"tools":[{"name":"list_catalog","description":"List live BotSupply SKUs, credit prices, short descriptions, and what a purchase does not include. Payloads stay behind purchase. recipe.book-table, when listed"},{"name":"open_wallet","description":"Create a wallet and return wallet_id plus api_key once, with balance_credits 0. Same as POST /v1/wallets. This does not look up an existing wallet. Keep the api"},{"name":"get_balance","description":"Return the authenticated wallet id and prepaid credit balance. Same as GET /v1/balance. Does not return the API key."},{"name":"purchase","description":"Buy one live catalog SKU with prepaid credits. Sends { sku } to POST /v1/purchase and returns that JSON, including the pack or recipe payload. Does not place a "},{"name":"create_checkout","description":"Start a Stripe Checkout credit top-up. Same as POST /v1/wallets/:id/checkout. Returns the checkout url (open that URL; it keeps Stripe's hosted-page fragment). "},{"name":"create_job","description":"Hold credits in escrow for a job another agent will do; release when the work is delivered, refund if not. Debits amount_credits from the authenticated payer wa"},{"name":"get_job","description":"Return an escrow job's status (held, released, or refunded), the held amount, any release fee, and the payer and payee wallets. The caller must be the payer or "},{"name":"release_job","description":"Release held escrow credits to the payee when the work is delivered. Only the payer can release, and only while the job is held. ESCROW_FEE_BPS (default 0) is w"},{"name":"refund_job","description":"Return held escrow credits to the payer when the work is not delivered or the job is cancelled. The payer or the payee can refund, and only while the job is hel"},{"name":"record_approval","description":"Write a record of what was reported as approved for a purchase on any payment rail. The approver is a name supplied by the calling agent; this does not confirm "},{"name":"set_receipt_visibility","description":"Change a receipt's public display to full or redacted. Requires the edit_token from record_approval. Optional public_scope replaces the scope shown publicly whi"},{"name":"attach_proof","description":"Attach proof of delivery to a receipt. Requires the edit_token from record_approval. Moves approved to delivered, or to disputed when status is disputed. over_c"},{"name":"record_payment","description":"Record a payment the calling agent already made against a receipt. BotSupply does not hold or move the money. Requires the edit_token from record_approval. Appe"},{"name":"get_receipt","description":"Read a public purchase receipt: what was reported as approved, scope, price cap, merchant, proofs, payments, content hash, approver_confirmation, pay_allowed, a"},{"name":"verify_receipt","description":"Recompute the receipt hash chain and HMAC signature. valid is true when the stored receipt matches the chain and the server signature, so the record hasn't been"}],"toolCount":15,"toolsHash":"58bbc2a428633eb85cc0488f680480e083d6d08efd5d0596a3b046dde56214c4","serverName":"botsupply","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-26T07:23:56.586Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":202,"error":null,"detail":{"tools":[{"name":"list_catalog","description":"List live BotSupply SKUs, credit prices, short descriptions, and what a purchase does not include. Payloads stay behind purchase. recipe.book-table, when listed"},{"name":"open_wallet","description":"Create a wallet and return wallet_id plus api_key once, with balance_credits 0. Same as POST /v1/wallets. This does not look up an existing wallet. Keep the api"},{"name":"get_balance","description":"Return the authenticated wallet id and prepaid credit balance. Same as GET /v1/balance. Does not return the API key."},{"name":"purchase","description":"Buy one live catalog SKU with prepaid credits. Sends { sku } to POST /v1/purchase and returns that JSON, including the pack or recipe payload. Does not place a "},{"name":"create_checkout","description":"Start a Stripe Checkout credit top-up. Same as POST /v1/wallets/:id/checkout. Returns the checkout url (open that URL; it keeps Stripe's hosted-page fragment). "},{"name":"create_job","description":"Hold credits in escrow for a job another agent will do; release when the work is delivered, refund if not. Debits amount_credits from the authenticated payer wa"},{"name":"get_job","description":"Return an escrow job's status (held, released, or refunded), the held amount, any release fee, and the payer and payee wallets. The caller must be the payer or "},{"name":"release_job","description":"Release held escrow credits to the payee when the work is delivered. Only the payer can release, and only while the job is held. ESCROW_FEE_BPS (default 0) is w"},{"name":"refund_job","description":"Return held escrow credits to the payer when the work is not delivered or the job is cancelled. The payer or the payee can refund, and only while the job is hel"},{"name":"record_approval","description":"Write a record of what was reported as approved for a purchase on any payment rail. The approver is a name supplied by the calling agent; this does not confirm "},{"name":"set_receipt_visibility","description":"Change a receipt's public display to full or redacted. Requires the edit_token from record_approval. Optional public_scope replaces the scope shown publicly whi"},{"name":"attach_proof","description":"Attach proof of delivery to a receipt. Requires the edit_token from record_approval. Moves approved to delivered, or to disputed when status is disputed. over_c"},{"name":"record_payment","description":"Record a payment the calling agent already made against a receipt. BotSupply does not hold or move the money. Requires the edit_token from record_approval. Appe"},{"name":"get_receipt","description":"Read a public purchase receipt: what was reported as approved, scope, price cap, merchant, proofs, payments, content hash, approver_confirmation, pay_allowed, a"},{"name":"verify_receipt","description":"Recompute the receipt hash chain and HMAC signature. valid is true when the stored receipt matches the chain and the server signature, so the record hasn't been"}],"toolCount":15,"toolsHash":"58bbc2a428633eb85cc0488f680480e083d6d08efd5d0596a3b046dde56214c4","serverName":"botsupply","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"list_catalog","description":"List live BotSupply SKUs, credit prices, short descriptions, and what a purchase does not include. Payloads stay behind purchase. recipe.book-table, when listed"},{"name":"open_wallet","description":"Create a wallet and return wallet_id plus api_key once, with balance_credits 0. Same as POST /v1/wallets. This does not look up an existing wallet. Keep the api"},{"name":"get_balance","description":"Return the authenticated wallet id and prepaid credit balance. Same as GET /v1/balance. Does not return the API key."},{"name":"purchase","description":"Buy one live catalog SKU with prepaid credits. Sends { sku } to POST /v1/purchase and returns that JSON, including the pack or recipe payload. Does not place a "},{"name":"create_checkout","description":"Start a Stripe Checkout credit top-up. Same as POST /v1/wallets/:id/checkout. Returns the checkout url (open that URL; it keeps Stripe's hosted-page fragment). "},{"name":"create_job","description":"Hold credits in escrow for a job another agent will do; release when the work is delivered, refund if not. Debits amount_credits from the authenticated payer wa"},{"name":"get_job","description":"Return an escrow job's status (held, released, or refunded), the held amount, any release fee, and the payer and payee wallets. The caller must be the payer or "},{"name":"release_job","description":"Release held escrow credits to the payee when the work is delivered. Only the payer can release, and only while the job is held. ESCROW_FEE_BPS (default 0) is w"},{"name":"refund_job","description":"Return held escrow credits to the payer when the work is not delivered or the job is cancelled. The payer or the payee can refund, and only while the job is hel"},{"name":"record_approval","description":"Write a record of what was reported as approved for a purchase on any payment rail. The approver is a name supplied by the calling agent; this does not confirm "},{"name":"set_receipt_visibility","description":"Change a receipt's public display to full or redacted. Requires the edit_token from record_approval. Optional public_scope replaces the scope shown publicly whi"},{"name":"attach_proof","description":"Attach proof of delivery to a receipt. Requires the edit_token from record_approval. Moves approved to delivered, or to disputed when status is disputed. over_c"},{"name":"record_payment","description":"Record a payment the calling agent already made against a receipt. BotSupply does not hold or move the money. Requires the edit_token from record_approval. Appe"},{"name":"get_receipt","description":"Read a public purchase receipt: what was reported as approved, scope, price cap, merchant, proofs, payments, content hash, approver_confirmation, pay_allowed, a"},{"name":"verify_receipt","description":"Recompute the receipt hash chain and HMAC signature. valid is true when the stored receipt matches the chain and the server signature, so the record hasn't been"}],"package":null,"toolSurface":{"id":"ts_smq97m9uksmh","endpointId":"ep_gduerthnjcgy","hash":"58bbc2a428633eb85cc0488f680480e083d6d08efd5d0596a3b046dde56214c4","toolCount":15,"serverName":"botsupply","serverVersion":"1.0.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-26T00:29:10.324Z","lastSeenAt":"2026-10-29T03:25:21.655Z","observations":11,"toolNames":["list_catalog","open_wallet","get_balance","purchase","create_checkout","create_job","get_job","release_job","refund_job","record_approval","set_receipt_visibility","attach_proof","record_payment","get_receipt","verify_receipt"],"distinctSurfaces":4},"endpointFacts":[{"id":"ep_gduerthnjcgy","url":"https://botsupply.onrender.com/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-28T12:24:49.166Z","auth":{"observedAt":"2026-10-28T12:24:49.485Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-28T12:24:49.496Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"onrender.com","issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validFrom":"2026-09-21T22:04:31.000Z","validTo":"2026-12-20T23:04:28.000Z","daysToExpiry":52,"sanCount":2,"fingerprint256":"A8:8C:F8:E1:2B:2E:73:1A:48:5D:32:0C:92:B4:8E:A7:1E:0D:6B:F8:A8:38:68:B5:D1:10:DA:51:D4:A1:A4:5C"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.github.iambrettforbes/botsupply","url":"https://registry.modelcontextprotocol.io/v0/servers/io.github.iambrettforbes%2Fbotsupply","firstSeenAt":"2026-10-10T12:19:04.820Z","fetchedAt":"2026-10-26T15:22:39.245Z","normalizedAt":"2026-10-26T15:22:39.245Z"}]},"firstSeenAt":"2026-10-10T12:19:04.820Z","updatedAt":"2026-10-29T03:27:45.954Z"}