Build

For developers and agents

Everything the swap form knows can be read by a machine: the catalogue, limits, live quotes, address checks and swap status. No account, no key. An agent that controls a wallet can also create a swap and pay the instruction it gets back.

The files and endpoints

AddressFormatWhat it is for
https://api.sablebolt.io/mcpMCP, Streamable HTTPEight tools: seven read-only and create_swap
/openapi.jsonOpenAPI 3.1The REST API at api.sablebolt.io: assets, routes, limits, quotes, address check, swaps, webhooks, market data
/.well-known/agent-skills/index.jsonJSONEight skills, each mapped to endpoints and a documentation page
/.well-known/agent-card.jsonJSONThe A2A agent card: interfaces, skills with example questions, the hand-off rule
/llms.txtMarkdownThe index for assistants; every page has a markdown twin at its own path plus .md
/feed.xmlRSS 2.0The blog, one item per post

The MCP endpoint

https://api.sablebolt.io/mcp

  • Transport: Streamable HTTP, protocol version 2025-06-18, stateless: no session to open, no stream to keep. GET answers 405, DELETE 405.
  • Authentication: none. Rate: 60 requests a minute per IP on the endpoint; swap creation 10 a minute per IP, shared with the REST route.
  • One JSON-RPC request per HTTP call. A batch is refused with 400.
  • Every tool carries a title and annotations: readOnlyHint on the seven read tools; create_swap is marked as not read-only and not destructive.
ToolInputReturnsKind
list_assets—every asset the form knows: slug, ticker, network, confirmations, extra-id name, availabilityread-only
list_routes—every route with its own page, and whether both sides are available right nowread-only
get_limitsfrom, tominimum and maximum for the route, in the asset you sendread-only
get_quotefrom, to, amountamountTo, networkFee (taken out of the payout), receiveAmount, rate; the final amount is set when the deposit confirmsread-only
validate_addressasset, addresswhether the address has the right format for the asset; not who owns it, not whether an exchange needs a memoread-only
get_swap_statusidstage (1 waiting … 5 done), both addresses, amounts, both transaction hashes; the payment instruction while the deposit is awaitedread-only
swap_page_linkfrom, to, amount (optional)the page where a person completes the swap, with the amount prefilledread-only
create_swapfrom, to, amount, fromAddress, toAddress; extraId and fromExtraId when a chain needs themthe swap id, the status page and the payment instructioncreates a swap

Connect a client

Claude Code

One command adds the endpoint as an HTTP server:

claude mcp add --transport http sablebolt https://api.sablebolt.io/mcp

Claude.ai and Claude Desktop

Settings → Connectors → Add custom connector, then paste the endpoint URL. There is no sign-in step: the server asks for no credentials.

Cursor

In .cursor/mcp.json in the project, or ~/.cursor/mcp.json for every project:

{
  "mcpServers": {
    "sablebolt": { "url": "https://api.sablebolt.io/mcp" }
  }
}

ChatGPT

Settings → Connectors → Developer mode → Create, then name the connector and paste the endpoint URL.

Any other client

A Streamable HTTP client that sends initialize, then tools/list and tools/call, works as is. Send Accept: application/json, text/event-stream; the answer comes back as JSON or as one SSE message.

The hand-off rule

A swap for a person is completed by that person on the page: the assistant hands over swap_page_link, the person checks the amount, both addresses and the memo on screen, then sends the deposit from their own wallet.

create_swap is for an agent that controls the sending wallet itself. The sender address is required on every swap. The form has no refund address: a swap that cannot be completed is handled by support.

The rate floats until the deposit confirms. A quote is an estimate; the payout is set at confirmation.

The payment instruction

create_swap (and POST /v1/swaps) returns a payment instruction next to the deposit address, so an agent with a wallet pays without guessing:

FieldMeaning
asset, chain, chainIdthe asset slug, the chain it moves on and, on EVM chains, the numeric chain id (1 Ethereum, 56 BNB Smart Chain, 137 Polygon, 8453 Base); null elsewhere
tokenContract, decimalsthe token contract or mint and the precision as the liquidity partner lists them; no contract for a chain's own coin
address, extraId, extraIdNamethe one-time deposit address and, when the chain needs one, the memo or destination tag under its own name; without it the deposit is not matched
amount, amountBaseUnitsthe exact amount to send, in the asset and in base units (satoshi, wei, sun); the base-unit value is rounded up at the last unit, never down
uri, uriStandarda wallet URI where a standard exists: BIP-21 for Bitcoin-like coins, ERC-681 for EVM coins and tokens, Solana Pay, monero:, ton://transfer; null where none applies
notethe one rule in words: send exactly this amount in one transaction from the sending address given
statusUrl (on the swap)the status page; get_swap_status and GET /v1/swaps/{id} return the same stages

The REST API

Described in /openapi.json. Every answer is JSON under data, every error under error with a code. 200 requests a minute per IP across the API, with tighter caps per route:

EndpointWhat it returns
GET /v1/assetsevery asset, with canSend and canReceive
GET /v1/routesevery published route
GET /v1/limits?from=&to=min and max for the route; 60 a minute
GET /v1/quote?from=&to=&amount=the estimate, also as POST with a JSON body; 60 a minute
POST /v1/address/validatethe address format check; 30 a minute
POST /v1/swapscreates a swap and returns the payment instruction; 10 a minute, shared with create_swap
GET /v1/swaps/{id}status, stage, both addresses, both transaction hashes; 60 a minute
POST /v1/swaps/{id}/notifyregisters an https URL and a secret for signed swap.status notifications (HMAC-SHA256 over timestamp and body); DELETE removes it; 10 a minute
GET /v1/network/{chain}, /v1/market/prices, /v1/market/chart/{id}chain statistics and market data for the pages, cached

Changelog

2026-11-03
This page. Listed in the official MCP Registry (registry.modelcontextprotocol.io) as io.sablebolt/swaps.
2026-11-02
create_swap and the payment instruction (base units, token contract, decimals, wallet URI); signed swap.status webhooks; canSend and canReceive on every asset; the A2A agent card; payment links at /pay; JSON-RPC batches refused; one creation cap for REST and MCP.
2026-10-28
Launch: REST API v1 described in OpenAPI 3.1, the MCP endpoint with the read tools, llms.txt and markdown twins, the agent-skills index, RSS.

Contact

Questions and bug reports: support@sablebolt.io, or @sablebolt_bot on Telegram. Security reports: the address in /.well-known/security.txt.