Back to Browse

Databroker MCP Server

Developer ToolsLow Risk10.0MCP RegistryLocal
Free

Server data from the Official MCP Registry

Pay-per-call UK MOT history, reliability analytics and identifier utilities. x402 USDC on Base.

About

Pay-per-call UK MOT history, reliability analytics and identifier utilities. x402 USDC on Base.

Security Report

10.0
Low Risk10.0Low Risk

Valid MCP server (2 strong, 3 medium validity signals). No known CVEs in dependencies. Package registry verified. Imported from the Official MCP Registry.

5 files analyzed · 1 issue found

Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.

Permissions Required

This plugin requests these system permissions. Most are normal for its category.

file_system

Check that this permission is expected for this type of plugin.

env_vars

Check that this permission is expected for this type of plugin.

What You'll Need

Set these up before or after installing:

Base URL of the DataBroker API, e.g. https://api.databroker.mossforge.devOptional

Environment variable: DATABROKER_BASE_URL

Signer provider: "raw" (default, self-custodied private key) or "cdp" (Coinbase CDP-managed wallet)Optional

Environment variable: DATABROKER_SIGNER

0x-prefixed private key for the paying wallet. Required when DATABROKER_SIGNER=raw (the default).Required

Environment variable: DATABROKER_WALLET_KEY

Coinbase CDP API key id. Required when DATABROKER_SIGNER=cdp.Required

Environment variable: CDP_API_KEY_ID

Coinbase CDP API key secret. Required when DATABROKER_SIGNER=cdp.Required

Environment variable: CDP_API_KEY_SECRET

Coinbase CDP wallet secret. Required when DATABROKER_SIGNER=cdp.Required

Environment variable: CDP_WALLET_SECRET

Per-call spend cap in USDC. Calls priced above this are declined before payment.Optional

Environment variable: DATABROKER_MAX_USDC

How to Install

Add this to your MCP configuration file:

{
  "mcpServers": {
    "dev-mossforge-databroker": {
      "env": {
        "CDP_API_KEY_ID": "your-cdp-api-key-id-here",
        "CDP_WALLET_SECRET": "your-cdp-wallet-secret-here",
        "DATABROKER_SIGNER": "your-databroker-signer-here",
        "CDP_API_KEY_SECRET": "your-cdp-api-key-secret-here",
        "DATABROKER_BASE_URL": "your-databroker-base-url-here",
        "DATABROKER_MAX_USDC": "your-databroker-max-usdc-here",
        "DATABROKER_WALLET_KEY": "your-databroker-wallet-key-here"
      },
      "args": [
        "-y",
        "@mossforge/databroker-mcp"
      ],
      "command": "npx"
    }
  }
}

Documentation

View on GitHub

From the project's GitHub README.

Mossforge DataBroker

Pay-per-call UK data and utility API, gated by x402 micropayments on Base mainnet. No API keys, no accounts, no subscriptions — send a signed USDC payment with your HTTP request and get an answer back in the same response cycle.

Quick start

curl https://api.databroker.mossforge.dev/v1/discover

/v1/discover is free and returns every enabled dataset with its current price, description, and provenance (kind, implemented standard, deterministic, data_source). Prices are configured server-side and can change — always trust the live 402 challenge over anything written in this README.

Requesting any paid route without payment returns HTTP 402 with the exact amount, recipient, and network in a PAYMENT-REQUIRED header. Sign an EIP-3009 USDC transfer authorization, retry with a PAYMENT-SIGNATURE header, and the API verifies, settles on-chain, and returns the data with a PAYMENT-RESPONSE receipt. A 402 means no funds have moved — you only pay on a 200.

x402 client libraries: @coinbase/x402-fetch (TypeScript), x402 (Python), x402-go (Go).

Use it from an agent

MCP server

@mossforge/databroker-mcp gives any MCP client (Claude Desktop, Claude Code, Cursor) pay-per-call access to everything below, with x402 payment handled for it. No build step:

{
  "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"
      }
    }
  }
}

Or for Claude Code:

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

Payment is never automatic. databroker_fetch and databroker_batch_create return a price quote first and spend nothing until called again with confirm: true enforced in the server, not left to the model's judgement. Every paid call is additionally capped by DATABROKER_MAX_USDC; anything priced above the cap is declined before payment. See mcp-server/ for signer options (self-custodied key or Coinbase CDP) and security notes.

Agent skills

Three OpenClaw skills in skills/, scoped by tier - mossforge-mot-history (single vehicle), mossforge-mot-analytics (fleet statistics), mossforge-data-utilities (24 identifier/geo/reference endpoints).

Direct HTTP

Worked examples in examples/ for Python and TypeScript, both as a plain fetch and as an agent tool definition.

Endpoints

All paid routes follow the same shape: GET /v1/{dataset_id}/{key}. Keys are URL-decoded server-side, so percent-encode anything containing /, spaces, or + (e.g. 205/55R16 91V/v1/util-tyre-size/205%2F55R16%2091V).

Free routes

RouteDescription
GET /v1/healthUptime check
GET /v1/discoverAll enabled datasets, current prices, provenance
GET /v1/{dataset}/{key}/metaCache freshness for cached datasets; kind/standard/determinism info for utilities. Never returns the data payload

Cached datasets

Stored datasets backed by ingestion pipelines, with full freshness semantics (ttl_seconds, stale, free /meta checks).

DatasetRoutePriceDescription
DVSA MOT historyGET /v1/dvsa-mot/{registration}$0.005Full MOT test history for a UK vehicle — vehicle details, pass/fail summary, mileage, individual test records with defects. Cached 30 days; first-ever lookup for a plate triggers a live fetch (2-4 s)
DVSA MOT analyticsGET /v1/dvsa-mot-analytics/{key}$0.02Aggregated MOT statistics by vehicle segment — pass rates, top defects, mileage percentiles, clocking rates, fuel mix, colour distribution. Refreshed daily from the full DVSA bulk dataset

Analytics keys are colon-delimited and family-specific:

FamilyKey formatExampleReturns
reliabilityreliability:<make>reliability:fordPass rates by age and mileage band, first-time pass rate, dangerous defect rate
mileagemileage:<make>:<band_or_year>mileage:ford:5-8yrAverage annual mileage, percentile distribution, odometer clocking rate
parcparc:<make>:<fuel>:<band_or_year>parc:ford:diesel:5-8yrFleet population counts and recent testing activity
fuelmixfuelmix:<year>fuelmix:2019Fuel type distribution for a registration year
colourcolour:<make>:<year>colour:ford:2019Top colours for a make/year
temporaltemporaltemporalUK-wide test volume, pass rate, expiry density by month

Age bands: 0-3yr, 3-5yr, 5-8yr, 8-12yr, 12yr+. Fuels: petrol, diesel, electric, hybrid, other. Derived rates are suppressed to null (with lowSample: true) when the underlying sample is below minN, so small segments never yield misleadingly precise numbers.

Computed utilities — $0.001 per call

Pure deterministic functions exposed as paid endpoints. The same key always returns the same answer, forever — responses carry deterministic: true, so cache them client-side indefinitely. Every response names the standard it implements. Malformed keys are rejected with a free 400 before payment; for validators, valid: false is a legitimate paid answer — you pay for the verdict, not for the verdict being yes.

DatasetKeyReturns
util-vin17-char VINStructure validation, NA check digit, WMI region/manufacturer, model year candidates (ISO 3779/3780, FMVSS 565)
util-uk-plateUK registration plateFormat era, area code, age identifier, registration period (DVLA formats)
util-mot-dueYYYY-MM-DD first-registration dateFirst MOT due date, now-due flag, 40-year historic exemption (GB MOT rules)
util-tyre-sizee.g. 205/55R16 91V (encoded)Dimensions, overall diameter, load index → kg, speed rating → km/h (ETRTO)
util-ibanIBANPer-country length + MOD 97-10 validity, country/BBAN parse (ISO 13616)
util-isinISINValidity, country prefix, NSIN, Luhn check digit (ISO 6166)
util-cusipCUSIPValidity, issuer/issue split, mod-10 with * @ # (ANSI X9.6)
util-sedolSEDOLValidity, weighted mod-10 check digit (LSE)
util-leiLEIValidity, MOD 97-10 check digits (ISO 17442)
util-cardCard numberLuhn validity + network detection by public prefix rules — structural only, not a BIN lookup (ISO/IEC 7812)
util-aba-rtn9-digit routing numberValidity, 3-7-1 weighted mod-10 (ABA)
util-gtinGTIN-8/12/13/14, or compute:<digits>Validity + type; compute mode returns check digit and full code (GS1)
util-isbnISBN-10 or ISBN-13Validity + bidirectional 10↔13 conversion (ISO 2108)
util-issn8-char ISSNValidity, weighted mod-11 check character (ISO 3297)
util-containere.g. MSKU3068821Owner code, category, serial, check digit (ISO 6346)
util-imo7-digit IMO numberValidity, weighted check digit (IMO scheme)
util-checkdigit<luhn|verhoeff|damm|mod97-10|mod11-2>:<verify|compute>:<digits>Verify → valid; compute → check digit + full value
util-geodistance:lat1,lon1,lat2,lon2 or destination:lat,lon,bearing,kmGreat-circle km/mi/nm + bearing, or destination point (haversine)
util-geohashencode:lat,lon[,precision] or decode:<hash>Geohash string, or centre + bounding box

Bundled reference lookups — $0.002 per call

Lookups against static reference-data snapshots shipped with the service, refreshed on a cadence. Responses carry deterministic: false, ttl_seconds matching the refresh cadence, and data_generated_at naming the snapshot date; /v1/discover names the upstream data_source.

DatasetKeyReturnsRefresh
util-ouiMAC or OUI prefix (00:00:5E)Vendor name/country (IEEE OUI registry); flags locally-administered/multicast addresses~30 days
util-airportLHR, EGLL, iata:LHR, icao:EGLLName, coordinates, elevation, country, municipality, scheduled service (OurAirports)~30 days
util-tzzone:Europe/London[:2026-01-15] or country:GBUTC offset at a moment, DST status, abbreviation; or country zone list (IANA tzdb + runtime ICU)~90 days
util-currencyGBP or 826Name, minor units, using entities, withdrawn-code history (ISO 4217)~90 days
util-locodeGBLON or GB:LONPlace name, subdivision, function classifiers, coordinates (UNECE Rec 16)~180 days

Response envelope

Every successful paid response shares one envelope:

{
  "dataset": "util-iban",
  "key": "GB82WEST12345698765432",
  "data": { "...endpoint-specific..." },
  "fetched_at": "2026-07-05T12:00:00.000Z",
  "fetch_status": "ok",
  "source": "ISO 13616 / ISO 7064 MOD 97-10",
  "ttl_seconds": 315360000,
  "stale": false,
  "deterministic": true
}

For cached datasets, ttl_seconds/stale reflect real cache state and source names the upstream. For computed utilities, ttl_seconds is a 10-year sentinel (the answer never expires) and source names the standard. For bundled utilities, source names the snapshot's data source. The deterministic field appears on utility responses only.

Errors

Errors return a structured body with a stable machine-readable code — branch on code, never on message text:

{
  "error": {
    "code": "INGEST_IN_PROGRESS",
    "message": "…",
    "retryable": true,
    "retry_after_seconds": 3,
    "docs_url": "…"
  }
}
CodeStatusRetryableMeaning
PAYMENT_INVALID402yesRe-sign from a fresh 402 challenge and retry
PAYMENT_SETTLEMENT_FAILED402yesOn-chain settlement failed; retry
UNKNOWN_DATASET404noNot a recognised dataset — see /v1/discover
ENTITY_NOT_FOUND404noFinal result: no record exists (e.g. no MOT history for that plate)
INGEST_IN_PROGRESS503yesLive fetch in flight — wait retry_after_seconds
BUCKET_NOT_SEEDED404yesAnalytics pipeline hasn't populated this segment yet

Utility routes additionally return a plain 400 for malformed keys before any payment is taken — the message states the expected key format. Fix the key and retry; no funds have moved.

Notes for agent developers

  • Call /v1/discover before constructing a payment — prices can change without a redeploy.
  • Use the free /meta route to check cache freshness before paying twice for the same cached lookup. Computed utility results never need a re-check: cache them forever.
  • ENTITY_NOT_FOUND and valid: false are final answers, not failures. Don't retry them.
  • There is no authentication and no provisioning — a funded Base wallet is the only prerequisite.
  • Agent-readable docs: /llms.txt. OpenClaw skills for the MOT history, MOT analytics, and utilities tiers live alongside this repo.

Contact

support@mossforge.dev · Built by Mossforge · Powered by x402 on Base

Reviews

No reviews yet

Be the first to review this server!