Skip to main content

Docs

MCP server

ReserveBeat runs a remote MCP server so an AI agent can read the same stablecoin reserve figures the board shows. It speaks Streamable HTTP at one URL, needs nothing installed, and returns every figure verbatim inside the response that carries its disclaimer. Only the history and account-balance tools need an API key.

Reviewed

Point any MCP client at the endpoint below. The tools are generated from the published OpenAPI contract, one per read route that answers in JSON — every route but the evidence bundle, a zip archive a verifier downloads rather than a model reads — so an agent sees the read surface the API documents and nothing more.

Endpoint

https://reservebeat.com/mcp

One URL takes every request: POST a single JSON-RPC message and get one JSON response back. There is no session to open, no stream to hold, and nothing to install.

Tools

Each tool calls one read route of the API and returns its response body unchanged. The tier comes from the contract itself.

Tools
ToolAccessWhat it does
get_overviewNo keyOne summary card per tracked stablecoin, plus the head of ReserveBeat's public evidence hash chain and its latest external timestamp anchor.
get_tokenNo keyEverything the board holds for one token, by ticker symbol (for example USDC): measured on-chain supply per network, the latest attestation report's stated figures, attested coverage points, reconciliations and report cadence.
get_coverageNo keyWhat the board covers and what it does not: one row per tracked token stating what is held, how deep and how fresh, plus the tokens and networks not covered.
get_historyAPI keyCoverage and supply history over a range of dates or a number of days, bucketed by hour, day or month, for every token or one. Needs an API key; the API meters each call.
list_attestationsNo keyEvery active parsed attestation report, by token and report month (YYYY-MM), newest month first for each token.
get_attestationNo keyOne attestation report by token and report month (YYYY-MM): its stated figures and composition, the accountant and engagement standard as the document states them, and changes from the prior report.
get_revisionsNo keyEvery correction ReserveBeat has recorded, newest first: each replaced attestation parse or disclosure score beside the record that replaced it, with both timestamps and anchors and the reason given. Optionally for one token, by ticker symbol (for example USDC). Needs no key and costs nothing.
get_pricingNo keyReserveBeat's machine-readable API price list: the compute-unit cost of each metered endpoint shape, the free monthly allowance, the pay-as-you-go rate, the throughput budgets and how to buy more. Needs no API key.
get_account_balanceAPI keyThe calling API key's own account: its prepaid compute-unit balance and when it lapses, the free monthly allowance left and when it resets, and where to buy more. Needs an API key.

Keys

A tool marked API key sends your key to the API, which meters the call; the API docs say what a metered call costs. Configure the key once in your client as an Authorization header (Bearer, then the key) or as X-API-Key. Tools marked No key never send a key, even when one is configured, so they are never metered. A key its holder scoped to some route families answers only the keyed tools that read those families: any other keyed tool returns a tool error carrying the API's 403 key_scope refusal, and a key past its own monthly cap one carrying 429 key_cap_reached. Give each agent its own key from the dashboard, scoped and capped to what it needs, so it can be rotated or revoked without touching any other.

An agent that has no key yet can ask its person for one first. It starts a connect request with POST /account/agent/start, shows its person the code and the page address it gets back, and polls POST /account/agent/token until the person approves and the key arrives, in that one answer only. Those two requests are plain HTTP to the same origin, not MCP tools; the API docs carry them as samples to run. Then configure the delivered key as the Authorization header (Bearer, then the key), like any other key.

API reference

Results and refusals

A successful tool result is the API's response body, byte for byte, including its meta block: the disclaimer, terms and licence each figure is served under, and the as-of dates of the figures.

When the API withholds a response (HTTP 503), the tool returns an error that says so. Nothing is retried into an earlier value, because this server keeps none. Every other refusal (a missing key, a request your key does not cover, a throttle) comes back as a tool error carrying the API's response unchanged.

Requests this server makes to the API identify themselves as reservebeat-mcp/0.1.0.

Client configuration

Configure a client. Leave out the key line to use the tools that need none.

Claude Code

claude mcp add --transport http reservebeat https://reservebeat.com/mcp \
  --header "Authorization: Bearer $RESERVEBEAT_API_KEY"

Claude Code (.mcp.json)

{
  "mcpServers": {
    "reservebeat": {
      "type": "http",
      "url": "https://reservebeat.com/mcp",
      "headers": {
        "Authorization": "Bearer ${RESERVEBEAT_API_KEY}"
      }
    }
  }
}

Cursor (.cursor/mcp.json)

{
  "mcpServers": {
    "reservebeat": {
      "url": "https://reservebeat.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

Without a client

Without a client, the same endpoint answers curl. A tool call is one POST:

curl -s -X POST https://reservebeat.com/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_token","arguments":{"symbol":"USDC"}}}'

A tool marked API key takes the key in the same POST, read here from the environment:

curl -s -X POST https://reservebeat.com/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -H "Authorization: Bearer $RESERVEBEAT_API_KEY" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_account_balance","arguments":{}}}'