Search / io.github.iambrettforbes/botsupply
BotSupply
R0· no sign-inVerifiable purchase receipts for agents: record approval and proof. Wallets and escrow (test mode).
v1.1.0 · active · website · descriptor JSON · versions
Search / io.github.iambrettforbes/botsupply
R0· no sign-inVerifiable purchase receipts for agents: record approval and proof. Wallets and escrow (test mode).
v1.1.0 · active · website · descriptor JSON · versions
{
"mcpServers": {
"botsupply": {
"type": "http",
"url": "https://botsupply.onrender.com/mcp",
"headers": {
"Authorization": "Bearer ${BOTSUPPLY_TOKEN}"
}
}
}
}claude mcp add --transport http botsupply https://botsupply.onrender.com/mcp --header "Authorization: Bearer ${BOTSUPPLY_TOKEN}"[mcp_servers.botsupply]
url = "https://botsupply.onrender.com/mcp"
bearer_token_env_var = "BOTSUPPLY_TOKEN"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"botsupply": {
"type": "remote",
"url": "https://botsupply.onrender.com/mcp",
"enabled": true,
"headers": {
"Authorization": "Bearer {env:BOTSUPPLY_TOKEN}"
}
}
}
}{
"mcpServers": {
"botsupply": {
"type": "http",
"url": "https://botsupply.onrender.com/mcp",
"headers": {
"Authorization": "Bearer ${BOTSUPPLY_TOKEN}"
}
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=botsupply&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vYm90c3VwcGx5Lm9ucmVuZGVyLmNvbS9tY3AiLCJoZWFkZXJzIjp7IkF1dGhvcml6YXRpb24iOiJCZWFyZXIgJHtCT1RTVVBQTFlfVE9LRU59In19"
}{
"servers": {
"botsupply": {
"type": "http",
"url": "https://botsupply.onrender.com/mcp",
"headers": {
"Authorization": "Bearer ${BOTSUPPLY_TOKEN}"
}
}
}
}{
"mcpServers": {
"botsupply": {
"httpUrl": "https://botsupply.onrender.com/mcp",
"headers": {
"Authorization": "Bearer ${BOTSUPPLY_TOKEN}"
}
}
}
}extensions:
"botsupply":
enabled: true
name: "botsupply"
type: streamable_http
uri: "https://botsupply.onrender.com/mcp"
headers:
"Authorization": "Bearer ${BOTSUPPLY_TOKEN}"
timeout: 300
Placeholders to fill from your own secret store: ${BOTSUPPLY_TOKEN}. The registry never accepts secret values.
protocol.modernsupports 2026-07-28 (server/discover)protocol.statelessanswers without a sessionprotocol.transportstreamable HTTPprotocol.list_ttltools/list declares ttlMs 0, so clients re-fetch it on every useauth.prm, auth.as_metadata, auth.cimdno remote uses OAuthauth.secret_in_urlno templated URLtools.descriptionsevery tool has a descriptiontools.description_lengthdescriptions are concisetools.schemasevery tool has an object input schematools.annotations13 of 13 tools declare readOnlyHint or destructiveHinttools.directory_hintsevery tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHinttools.token_costabout 2,766 tokens to load every tooltools.api_dumptools are not a one-to-one API dumpstability.changes9 tool changes in 30 daysstability.rug_pullno tool changed its meaning under the same namedeps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI packageverify_receiptaddedRecompute the receipt hash chain and HMAC signature. valid is true when the stored receipt matches the chain and the server signature. valid is false when a row was altered. Same as GET /v1/receipts/:id/verify.
get_receiptaddedRead a public purchase receipt: approval, scope, price cap, merchant, proofs, and content hash. No API key. The approver contact and the edit token are not included. Same as GET /v1/receipts/:id.
attach_proofaddedAttach 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_cap is true when actual_amount exceeds the price cap. Does not move money. Same as POST /v1/receipts/:id/proof.
record_approvaladdedRecord a human's approval of a purchase on any payment rail. BotSupply does not hold or move the money. Returns receipt_id, a public receipt_url, and an edit_token shown once. No wallet or API key. Rate limited per IP. Same as POST /v1/receipts.
refund_jobaddedReturn 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 held. The full hold goes back to the payer; no platform fee is taken. Refunding twice, or refunding after release, is rejected and does not move credits again. Same as POST /v1/jobs/:id/refund.
release_jobaddedRelease 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 withheld on release, recorded on the job, and credited to nobody; the payee receives amount_credits minus that fee. Releasing twice, or releasing after a refund, is rejected and does not move credits again. Same as POST /v1/jobs/:id/release.
get_jobaddedReturn 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 the payee. A job from another Stripe mode is not visible. Same as GET /v1/jobs/:id.
create_jobaddedHold 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 wallet and marks the job held. payee_wallet_id receives the credits on release. Rejects amount_credits below 1, a payer equal to the payee, a missing or other-mode payee wallet, and insufficient balance. idempotency_key makes a retry return the same job without debiting twice. Same as POST /v1/jobs.
create_checkoutchangeddescription, input schemaStart 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). credits is an integer from 100 to 100000. Credits are applied only after Stripe reports the session paid. Returns the API error when Stripe is not configured.
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). credits is an integer from 500 to 100000 ($5 minimum). Credits are applied only after Stripe reports the session paid. Returns the API error when Stripe is not configured.
Full history: list_changes · trend: quality JSON.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+website +reachable +uptime-100% +updated-1d-ago -no-repository
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
| remote | auth | reachable | uptime 30d | p50 | protocol | last ok |
|---|---|---|---|---|---|---|
https://botsupply.onrender.com/mcp streamable-http | none | yes | 100% | 344 ms | 2026-07-28 | 2026-10-20 |
attach_proof | 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_cap is true when actual_amount exceeds the price cap. Does not move money. Same as POST /v1/receipts/:id/proof. |
create_checkout | 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). credits is an integer from 500 to 100000 ($5 minimum). Credits are applied only after Stripe reports the session paid. Returns the API error when Stripe is not configured. |
create_job | 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 wallet and marks the job held. payee_wallet_id receives the credits on release. Rejects amount_credits below 1, a payer equal to the payee, a missing or other-mode payee wallet, and insufficient balance. idempotency_key makes a retry return the same job without debiting twice. Same as POST /v1/jobs. |
get_balanceread-only | Return the authenticated wallet id and prepaid credit balance. Same as GET /v1/balance. Does not return the API key. |
get_jobread-only | 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 the payee. A job from another Stripe mode is not visible. Same as GET /v1/jobs/:id. |
get_receiptread-only | Read a public purchase receipt: approval, scope, price cap, merchant, proofs, and content hash. No API key. The approver contact and the edit token are not included. Same as GET /v1/receipts/:id. |
list_catalogread-only | List live BotSupply SKUs, credit prices, short descriptions, and what a purchase does not include. Payloads stay behind purchase. recipe.book-table, when listed, is recipe documentation only and does not place a reservation. |
open_wallet | 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_key; later tools need it as Authorization: Bearer or as api_key. |
purchase | 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 reservation. recipe.book-table is documentation the buying agent runs itself. An unknown SKU is rejected. Insufficient balance returns an error and does not deduct credits. |
record_approval | Record a human's approval of a purchase on any payment rail. BotSupply does not hold or move the money. Returns receipt_id, a public receipt_url, and an edit_token shown once. No wallet or API key. Rate limited per IP. Same as POST /v1/receipts. |
refund_job | 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 held. The full hold goes back to the payer; no platform fee is taken. Refunding twice, or refunding after release, is rejected and does not move credits again. Same as POST /v1/jobs/:id/refund. |
release_job | 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 withheld on release, recorded on the job, and credited to nobody; the payee receives amount_credits minus that fee. Releasing twice, or releasing after a refund, is rejected and does not move credits again. Same as POST /v1/jobs/:id/release. |
verify_receiptread-only | Recompute the receipt hash chain and HMAC signature. valid is true when the stored receipt matches the chain and the server signature. valid is false when a row was altered. Same as GET /v1/receipts/:id/verify. |
Schemas: list_tools.
{
"name": "io.github.iambrettforbes/botsupply",
"title": "BotSupply",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"remotes": [
{
"url": "https://botsupply.onrender.com/mcp",
"type": "streamable-http",
"headers": [
{
"name": "Authorization",
"isSecret": true,
"description": "Optional. 'Bearer <wallet API key>' returned once by open_wallet. Required for get_balance, purchase, create_checkout unless api_key is passed as a tool argument."
}
]
}
],
"version": "1.1.0",
"websiteUrl": "https://github.com/iambrettforbes/Botsupply-",
"description": "Verifiable purchase receipts for agents: record approval and proof. Wallets and escrow (test mode)."
}