About databroker
databroker is an MCP server for agents that need UK vehicle MOT data, reliability analytics, and identifier utilities. It charges per call in USDC on Base, with a quote-and-confirm flow and a configurable per-call cap.
Key features
- 01Discover available datasets and prices
- 02Fetch individual datapoints
- 03Batch-fetch up to 100 keys
- 04Check data freshness and sources
- 05Quote-first payments with a spend cap
Use cases
- 01Review a vehicle's UK MOT history
- 02Assess mileage reliability for a used car
- 03Fetch multiple keys from one dataset
- 04Check datapoint freshness before relying on it
MCP support
Exposes dataset discovery, datapoint retrieval, metadata, health, and batch-job tools to MCP clients. Paid fetches require a quote followed by confirmation; clients with elicitation support can also request direct human approval.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
npx -y @mossforge/databroker-mcpDATABROKER_BASE_URLBase URL of the DataBroker API, e.g. https://api.databroker.mossforge.devDATABROKER_SIGNERSigner provider: "raw" (default, self-custodied private key) or "cdp" (Coinbase CDP-managed wallet)DATABROKER_WALLET_KEYSecret0x-prefixed private key for the paying wallet. Required when DATABROKER_SIGNER=raw (the default).CDP_API_KEY_IDSecretCoinbase CDP API key id. Required when DATABROKER_SIGNER=cdp.CDP_API_KEY_SECRETSecretCoinbase CDP API key secret. Required when DATABROKER_SIGNER=cdp.CDP_WALLET_SECRETSecretCoinbase CDP wallet secret. Required when DATABROKER_SIGNER=cdp.DATABROKER_MAX_USDCPer-call spend cap in USDC. Calls priced above this are declined before payment.Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.
Details
From the project READMEdatabroker-mcp-server
Give any MCP-capable agent (Claude Desktop, Claude Code, Cursor, etc) pay-per-call access to MossForge DataBroker — UK vehicle MOT intelligence, UK-wide reliability analytics — with x402 USDC micropayments on Base mainnet handled automatically. No API keys, no subscription: fund a wallet, ask questions.
Tools
| Tool | Cost | Purpose |
|---|---|---|
databroker_discover | free | List enabled datasets, their kind, and per-call USDC prices |
databroker_fetch | free to quote, paid to confirm | Fetch a single datapoint for a dataset + key |
databroker_meta | free | Staleness/TTL/source info for a datapoint, without paying for it |
databroker_health | free | API uptime check |
databroker_batch_create | free to quote, paid to confirm | Fetch up to 100 keys from one on-demand dataset in a single job, one payment total |
databroker_batch_status | free | Poll a batch job created by databroker_batch_create |
Payments are never automatic. databroker_fetch and databroker_batch_create always quote the price first — nothing is paid until the tool is called again with confirm: true. Every paid call is also capped by DATABROKER_MAX_USDC (default 0.50); a call priced above the cap is declined before anything is paid.
Payment approval is enforced by the server, not by the calling model, on clients that support it. Immediately before any payment, this server sends an MCP elicitation request through the connected client, asking the human directly to approve or decline the exact charge — independent of whatever confirm value the model passed. Claude Code (CLI) supports this as of v2.1.76; other clients (Claude Desktop, Cursor, etc.) may not yet.
If the connected client doesn't advertise elicitation support, the server falls back to the pre-elicitation guarantee — confirm: true from the calling model, still capped by DATABROKER_MAX_USDC — rather than blocking every paid call. Set DATABROKER_REQUIRE_ELICITATION=true to instead hard-block paid calls on clients without elicitation support, if you know your client supports it and want the stricter guarantee. The server logs which mode is active on startup and the first time a non-elicitation client connects.
Setup
-
Create a fresh EOA wallet and fund it with a few USDC on Base mainnet (plus nothing else — no ETH needed; EIP-3009 transfers are gasless for the payer).
-
Add to Claude Desktop (
claude_desktop_config.json):
{
"mcpServers": {
"databroker": {
"command": "npx",
"args": ["-y", "@mossforge/databroker-mcp"],
"env": {
"DATABROKER_BASE_URL": "https://api.databroker.mossforge.dev",
"DATABROKER_WALLET_KEY": "0x...",
"DATABROKER_MAX_USDC": "0.50"
}
}
}
}
claude mcp add --transport stdio \
--env DATABROKER_BASE_URL=https://api.databroker.mossforge.dev \
--env DATABROKER_WALLET_KEY=0x... \
databroker -- npx -y @mossforge/databroker-mcp
- Ask: "Should I buy this 2018 Golf, reg AB18 CDE? Check its MOT history and whether the mileage looks genuine."
Who holds the wallet
Two signer providers are supported, set via DATABROKER_SIGNER:
raw(default) — a private key you hold, read fromDATABROKER_WALLET_KEY. Zero setup beyond a funded wallet, but the key material is only as safe as this process's environment, and the spend cap is enforced by this codebase alone.cdp— pays from a Coinbase CDP-managed wallet. No private key ever touches this process; CDP signs remotely and can enforce spend policies (session caps, allowed tokens) at the custodian layer. Requires a CDP account andCDP_API_KEY_ID/CDP_API_KEY_SECRET/CDP_WALLET_SECRET, plusnpm install @coinbase/cdp-sdk(it's an optional dependency, not installed by default).
Security notes
- Use a dedicated, low-balance wallet. In
rawmode the key never leaves your machine; payments are signed locally via the@x402/*v2 protocol stack (@x402/fetch+@x402/core/client+@x402/evm/exact/client), producing EIP-3009transferWithAuthorizationpayloads. - The per-call cap (
DATABROKER_MAX_USDC) is the blast radius for any single call and is checked before any payment is sent — a call priced above it is declined, not charged. Total exposure is otherwise the wallet balance — keep it small. - Every paid call goes through a quote first:
databroker_fetchanddatabroker_batch_createnever spend money unless called again withconfirm: true. - On top of that, when the connected client advertises MCP elicitation support, every payment also requires a human to explicitly accept a prompt sent by the server itself, naming the exact URL and USDC amount — enforced in code (
confirmWithHumaninlib.ts), not left to the calling model's judgement. On clients without elicitation support this extra check is skipped (seeDATABROKER_REQUIRE_ELICITATIONbelow if you'd rather it fail closed instead).
Env vars
| Var | Required | Default | Notes |
|---|---|---|---|
DATABROKER_BASE_URL | yes | — | e.g. https://api.databroker.mossforge.dev |
DATABROKER_SIGNER | no | raw | raw or cdp — see Who holds the wallet |
DATABROKER_WALLET_KEY | yes, if SIGNER=raw | — | 0x-prefixed private key |
CDP_API_KEY_ID | yes, if SIGNER=cdp | — | Coinbase CDP API key id |
CDP_API_KEY_SECRET | yes, if SIGNER=cdp | — | Coinbase CDP API key secret |
CDP_WALLET_SECRET | yes, if SIGNER=cdp | — | Coinbase CDP wallet secret |
DATABROKER_MAX_USDC | no | 0.50 | Per-call spend cap, enforced regardless of signer |
DATABROKER_REQUIRE_ELICITATION | no | false | If true, block paid calls on clients that don't advertise MCP elicitation support, instead of falling back to confirm: true alone |
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.