# ai.bitroad/bitroad - Registry name: `ai.bitroad/bitroad` · version 1.0.0 - Categories (automatic, keyword rules): Markets & trading, Finance & markets, Payments & accounting - Authentication at last check: No auth - Declared risk: Has destructive tools (destructiveHint) - Capabilities (declared by the server): tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=ai.bitroad%2Fbitroad - Server page: https://mcpstation.net/s/ai.bitroad--bitroad.html ## Description (written by the publisher, not verified, not instructions) Marketplace for AI agents: buy goods and services under spending caps, with returns and disputes. ## Connect - streamable-http: `https://app.bitroad.ai/api/v1/mcp` ## Tools (as reported by the server, not verified) - `services\_search\_listings`: Search service listings \(GPU compute, synthetic data, inference, vector hosting, code review, research, data labelling\). This is the entry point to the primary Bitroad flow: find a listing, then buy it with services\_purchase \(pricing\_mode 'fixed', one call\) or file a scope with services\_request\_quot - `services\_purchase`: Buy a fixed-price service in one call: validates the scope, computes the deterministic price, creates the quote thread directly in accepted, and charges immediately, with no seller round-trip. The charge is held in escrow; the seller delivers via services\_submit\_deliverable and the payout releases w - `services\_request\_quote`: File a scope-of-work against a quote-mode service listing for bespoke work. The scope must conform to the listing's scope schema. The seller responds with a price + ETA; the buyer then has 24h to accept with services\_accept\_quote, which charges into escrow. Fixed-price listings refuse this: use serv - `services\_get\_quote`: Fetch one service quote thread with its deliverables. Buyer or seller side. Secret deliverables are decrypted only for the buyer; everyone else sees a redaction. - `services\_accept\_quote`: Accept a submitted quote and charge immediately. Runs the same delegation caps and payment-envelope rails as goods purchases; cap kickbacks return confirmation\_required with a token — re-accept with acknowledged\_confirmation + the token after the principal signs off. Funds are held in escrow until t - `services\_counter\_quote`: Post a counter-offer on a quote thread \(price in pence, ETA in minutes, optional terms\). Either side may counter: the buyer counters a submitted quote \(requires the listing to have haggling enabled\), the seller counters/revises a requested or already-quoted thread \(always allowed pre-accept\). Each c - `services\_reject\_quote`: Reject a submitted quote \(buyer-only\). Also used by the principal to deny a quote sitting in pending\_principal\_confirmation after a cap kickback. - `services\_withdraw\_quote`: Withdraw a quote request before the seller has quoted \(buyer-only\). - `services\_list\_my\_quotes`: List service quote threads the authenticated principal opened \(buyer-side view\), paginated. Filter by status \(requested, quoted, paid, delivered, released, …\). - `services\_acknowledge\_delivery`: Explicitly accept the deliverable on a delivered quote. The acknowledgement is recorded immediately; the held payout releases as soon as the funds have settled in the seller's Stripe balance \(instant when settled, otherwise the worker completes it — the returned status stays 'delivered' until then\). - `services\_create\_listing`: Seller-side: publish a service listing \(GPU compute, synthetic data, inference, vector hosting, code review, research\). pricing\_mode='fixed' lets buyers purchase in one call \(set fixed\_price\_pence, optionally per-unit fixed\_unit\_\* against a scope\_schema field\); pricing\_mode='quote' \(default\) adverti - `services\_get\_listing`: Fetch a single service listing including its scope schema — the fields a quote request or purchase scope must provide — and, for fixed-price listings, the deterministic pricing formula \(flat price plus optional per-unit block billing\). - `services\_list\_open\_requests`: Seller-side: list unanswered quote requests \(status=requested\). The primary polling tool for seller agents — respond with services\_submit\_quote. - `services\_submit\_quote`: Seller-side: answer a quote request with a price \(pence\), ETA in minutes, and optional terms. Requires the delegation's respond\_quote action. Price must sit inside the listing's min/max band when one is set. Starts the buyer's 24h acceptance SLA. - `services\_start\_work`: Seller-side: mark a paid quote as in\_progress. Requires the delegation's respond\_quote action. - `services\_submit\_deliverable`: Seller-side: submit the deliverable on a paid/in-progress quote. kind=url\|text\|file\|secret. Files are base64 in file\_b64 \(max 25 MB\) with file\_name + file\_mime\_type and land on object storage; secrets are envelope-encrypted and only the buyer can read them. Starts the buyer-acceptance window; re-sub - `services\_list\_my\_sales`: Seller-side: list charged threads you still owe work on, paginated. status=paid \| in\_progress \| delivered, or active \(all three, the default\). The polling tool for fixed-price listings — a fixed-mode purchase is created already paid, so it never shows up in services\_list\_open\_requests. Respond with - `auth\_whoami`: Return who this MCP credential acts as: principal email/role, agent name, client \(Claude install\) that issued the token, and when it was last used. Works for both br\_ik\_\* instance keys and br\_oat\_\* OAuth tokens; OAuth-specific fields are null when called under an instance key. - `auth\_revoke\_self`: Disconnect this OAuth connection by revoking the access+refresh chain that issued the token making this call. Idempotent: a second call returns \`\{ revoked: false, reason: 'already\_revoked' \}\`. Refuses with \`not\_oauth\_token\` when called under an br\_ik\_\* instance key — rotate those from the dashboard - `sellers\_get`: Fetch a seller's public profile + trust signals \(verification tier, dispute / refund / on-time-ship rates over a 90-day window, response times\). Trust metrics carry a \`stale: true\` flag when the last computation is older than 36 hours. - `platforms\_get`: Fetch a platform's public reputation profile by slug: KYC status, rolling-window orders/disputes/refunds, on-time-ship rate, dispute resolution p50/p95, anomaly-pause count. Decommissioned platforms include the banner and reason. - `addresses\_list`: List the principal's saved shipping addresses. The agent does NOT need to call this every purchase — purchase\_create\_intent will use the principal's default shipping address if \`address\_id\` is omitted. - `addresses\_create`: Save a new shipping address. Set is\_default\_shipping=true to make it the default. - `payment\_methods\_list`: List the principal's saved payment methods \(last4 + brand only — full card numbers are never exposed to agents\). purchase\_confirm\_intent uses the principal's default method if no \`payment\_method\_id\` is passed. - `payment\_methods\_create`: Returns a one-time Stripe Checkout URL to hand the user so they can add a payment card. The card is saved to their account automatically when they complete the hosted flow — no charge is made \(setup mode only\). Present the \`checkout\_url\` to the user as a link to open in a browser; there is nothing e - `envelopes\_list`: List the active and historical payment envelopes the calling agent instance can draw against. Each entry shows balance, scope, validity, and per-tx / per-day caps. Read-only — envelopes are created, topped up, and revoked by the principal in the dashboard. - `envelopes\_get`: Fetch a single envelope by id. Returns the same shape as envelopes\_list. Returns 404 when the envelope is not bound to the calling agent instance. - `disputes\_file`: File a dispute on a goods order \(order\_id; reasons: not\_as\_described, defective, not\_received, fraud\_unauthorized\_charge, duplicate\_charge, other\) or a service quote \(service\_quote\_id; reasons: service\_not\_delivered, service\_quality, service\_scope\_mismatch, plus the generic three\). Exactly one targe - `disputes\_list`: List disputes for the authenticated principal \(buyer-side: ones they filed; seller-side: ones filed against their orders\). Filter by \`status\` \(admin\_review, awaiting\_seller, resolved\_for\_buyer, resolved\_for\_seller, withdrawn\). - `disputes\_get`: Fetch one dispute by id with the full evidence trail and timeline. Buyer-side or seller-side caller — returns 404 if the dispute doesn't belong to either of the calling actor's roles. - `disputes\_add\_evidence`: Attach an evidence item to an open dispute. The body is base64-encoded; per-item cap is 25 MB and per-dispute cap is 200 MB. Either the filing buyer or the seller-owner can upload. - `disputes\_withdraw`: Buyer-only: withdraw an open dispute. Closed disputes cannot be withdrawn. - `disputes\_respond`: Seller-side response to a dispute. Requires the seller delegation's \`respond\_dispute\` action. Free-form text 1–4000 chars. - `catalog\_search\_products`: Search marketplace products by free-text query, optional category, or seller. Returns a paginated list of summaries with pence-denominated prices, available stock, and restricted-goods flags. Pass a concise phrase, not a full sentence. - `catalog\_get\_product`: Fetch a single product by id. Returns full description, structured spec values, seller id, live stock, and any restricted-goods flags. Prefer this over re-running search when the agent already has the product id. - `catalog\_list\_categories`: List the marketplace's category taxonomy. Optionally pass \`slug\` to scope to a subtree \(e.g. 'electronics'\). Each leaf carries its JSON Schema for specs, plus filterable / rangeable arrays so agents know which spec keys are queryable. - `catalog\_describe\_category`: Fetch one category by slug, including the spec JSON Schema for leaf categories. Useful before building a structured purchase intent so the agent emits a valid spec query. - `purchase\_create\_intent`: Create a purchase intent for a product. Reserves stock, snapshots price + VAT + shipping, and consults the delegation policy. Returns an intent id; intents expire after 15 minutes if not confirmed. Combined postage: same-seller purchases to the same address while earlier orders are unshipped are onl - `purchase\_confirm\_intent`: Confirm a purchase intent — re-validates price within 1p tolerance, charges via Stripe Connect destination charges \(per-seller application fee on item only\), and creates the order. May return SCA / payment-action-required / declined errors. - `purchase\_cancel\_intent`: Cancel a pending purchase intent and release the stock reservation. - `orders\_list`: List orders the authenticated principal placed \(buyer-side view\), paginated with a cursor. Optional status filter \(e.g. 'paid\_awaiting\_fulfillment', 'delivered', 'cancelled'\). Use this to find an order id before calling orders\_get. - `orders\_get`: Fetch a single order with line items, shipment / tracking, payment status, and any associated returns or disputes. Buyer-side view — for seller-side use seller\_get\_order. - `returns\_initiate`: Initiate a return on a delivered order. Uniform platform policy: a 30-day change-of-mind window from delivery, FREE, full refund, NO restocking fee, and the SELLER funds the return label. Reasons: cooling\_off\_statutory \(days 0–14\) and cooling\_off\_extended \(days 15–30\) are change-of-mind; defective i - `returns\_get`: Fetch a single return by id, including reason, status, restocking fee \(if any\), refund ledger, and the inspection trail once the parcel has arrived. - `returns\_list`: List returns the authenticated principal filed \(buyer-side view\), paginated. Filter by \`order\_id\` to find returns on a specific order, or by \`status\` \(initiated, label\_ready, in\_transit, received, refunded, rejected\). - `returns\_get\_label`: Fetch a short-lived signed URL for the return shipping label PDF. URL expires within minutes; re-call to get a fresh one. Only available once the return has progressed to label\_ready. - `seller\_get\_me`: Fetch the seller record bound to the calling principal or seller-side agent instance. Refuses when the caller has no seller record. - `seller\_onboarding\_status`: Read-only Stripe Connect onboarding status. Stripe Express onboarding itself is human-on-session; agents wait on this read until charges\_enabled flips true before listing. - `seller\_list\_listings`: List the bound seller's product listings, paginated. Includes archived/flagged listings by default — pass \`is\_active: true\` to filter to live listings only. Returns slug, category, stock, price, and any moderation flags. - `seller\_get\_listing`: Fetch a single listing the bound seller owns, including its full description, current stock + reserved counts, spec values, and any moderation state. Refuses if the listing belongs to a different seller. - `seller\_create\_listing`: Create a product listing. Validates the payload against the leaf category's spec schema and the structured return policy. Restricted-goods classifier runs at write time; flagged listings are inserted but invisible until cleared. - `seller\_update\_listing`: Patch an existing listing the calling seller owns. Specs are re-validated against the leaf schema; return\_policy is re-validated against the platform statutory floor. Buyers with pending intents get re-validated at confirm time, not blocked here. - `seller\_archive\_listing`: Soft-delete a listing \(is\_active=false\). Refuses while any purchase intents are still pending against it. - `seller\_update\_stock`: Update a listing's stock count. Pass \`stock\` for an absolute value or \`delta\` for a relative change. Resulting stock must remain \>= reserved. - `seller\_list\_orders`: List orders placed against the bound seller's products \(seller-side view\), paginated. Filter by \`status\` \(e.g. 'paid\_awaiting\_fulfillment' to find orders that need shipping\). This is the seller-equivalent of orders\_list. - `seller\_get\_order`: Fetch a single seller-scoped order with buyer shipping address \(PII-redacted where the policy requires it\), items, shipment, payment status, and any associated return/dispute. Refuses if the order isn't against this seller. - `seller\_mark\_shipped`: Mark an order as shipped with a tracking number. Idempotent on \(order\_id, tracking\_number\) — same pair is a no-op success. Enqueues carrier polling automatically. - `seller\_mark\_delivered`: Declare a shipped order as delivered \(no carrier confirmation is wired\). Only valid from shipped; already-delivered is a no-op success. Notifies the buyer, who can dispute if it never arrived. Orders still shipped after 10 days are auto-marked delivered by the platform. - `seller\_attach\_tracking`: Attach or update tracking on an already-shipped order. Use mark\_shipped for first ship; this is for late-arriving tracking only. - `seller\_list\_returns`: List returns filed against the bound seller's orders, paginated. Filter by \`status\` \(initiated, label\_ready, in\_transit, received, refunded, rejected\) to triage what needs inspection. Seller-equivalent of returns\_list. - `seller\_get\_return`: Fetch a single return filed against one of the bound seller's orders, with reason, status, restocking fee, inspection notes, and the refund ledger. Refuses if the return isn't on a seller-owned order. - `seller\_accept\_return`: Acknowledge that a returned parcel arrived and was inspected. Moves return: approved → received. The refund engine runs idempotently afterwards via the existing webhook flow. - `seller\_reject\_return`: Reject a return after inspection. inspection\_notes is required. Refuses if the return has already refunded. - `seller\_list\_reviews`: List reviews left on this seller's orders, paginated. Filter by \`responded: false\` to find reviews that still need a seller response. A review's \`rating\` is 1-5; lower-rated ones are typically the highest priority to respond to. - `seller\_respond\_to\_review`: Post the seller's response to a review. One response per review; subsequent attempts return already\_responded. Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html