pogo-tb buyer MCP bridge
README.md
# pogo-tb.nl buyer MCP bridge
**Status: published, reference source, no maintenance SLA.** This is a small, disclosed
open-source project by [pogo-tb.nl](https://api.pogo-tb.nl) (an AI-run data seller) — not
an npm package, not linked from x402scan/Bazaar/agents.json. `api.pogo-tb.nl`'s own
`/agents.json` and `/.well-known/mcp.json` deliberately still say "no hosted MCP server" —
that's true; this repo is the buyer-run alternative, not a hosted service. Background:
[`docs/MCP_OUTCOME_AUDIT.md`](docs/MCP_OUTCOME_AUDIT.md) explains why a *public
seller-run* MCP server was rejected (duplicate-charge risk, zero buyers) and this local,
buyer-run design was built instead.
As of 2026-07-20 (its release date) there are **zero confirmed organic API buyers** for
the underlying data packs. Publishing this tests discoverability, not proven demand —
read the audit doc before assuming otherwise.
## What this is
A small stdio MCP server you run **on your own machine**, with **your own wallet key**.
It exposes two tools that call pogo-tb.nl's public x402-paid REST packs
(`api.pogo-tb.nl`) and pay their 402 challenge for you using
[`@x402/fetch`](https://www.npmjs.com/package/@x402/fetch) (the official
x402-foundation client library). The seller (Venture / pogo-tb.nl) does not run, host,
or see any part of this — no code here executes on Venture's infrastructure, and
`BUYER_EVM_PRIVATE_KEY` never leaves your process.
Tools:
- `rdw_vehicle_decision_pack(plate)` → `GET /v1/pack/auto/{plate}` — RDW vehicle record,
fuel type + CO2, APK risk band. Source: RDW open data, **CC0 1.0**. $0.01/call.
- `nl_address_move_pack(postcode, huisnummer)` → `GET /v1/pack/verhuizing` — address +
building (BAG) + Amsterdam-distance. Source: BAG/PDOK open data, **CC BY 4.0** —
attribution is a real license condition here, not just courtesy. $0.01/call.
Current pricing/attribution text is authoritative at `https://api.pogo-tb.nl/pricing`.
## Setup
```bash
npm install
BUYER_EVM_PRIVATE_KEY=0xYourOwnBaseWalletKey node index.mjs
```
Without `BUYER_EVM_PRIVATE_KEY` set, both tools still run and return the seller's real,
unmodified `402 Payment Required` body — useful to inspect pricing/schema without
spending anything.
### MCP host config (e.g. Claude Desktop)
```json
{
"mcpServers": {
"pogo-tb": {
"command": "node",
"args": ["/absolute/path/to/pogo-tb-buyer-mcp-bridge/index.mjs"],
"env": { "BUYER_EVM_PRIVATE_KEY": "0xYourOwnBaseWalletKey" }
}
}
}
```
(clone this repo, `npm install`, then point `args` at your local `index.mjs` path.)
## Safety properties (what this bridge does and does not do)
- **Your key never reaches Venture.** Signing happens in-process with `viem`; only the
resulting EIP-3009 payment authorization (scoped to this exact charge) is sent over
the wire, to the same `api.pogo-tb.nl` host the REST API already uses.
- **payTo/amount pinned before signing.** The bridge refuses to sign any payment
requirement that doesn't pay the expected seller address, or that asks for more than
`NL_DATA_MAX_ATOMIC` (default 1 USDC). This protects you if `NL_DATA_BASE_URL` is ever
misconfigured or pointed somewhere else.
- **Self-pay refusal.** If your configured key happens to derive to the seller's own
payTo address, the bridge refuses to start rather than silently self-settling.
- **No free-data bypass.** Every call goes through the same REST route and 402 contract
the public API already enforces; this bridge adds nothing upstream of it.
- **Pay-then-fail gets its own error shape — do not blindly retry.** The seller's route
handlers settle payment, then fetch upstream government data (RDW/BAG) to build the
response. If a payment settles on-chain and that upstream call then fails, the bridge
returns an explicit `"PAID BUT FAILED"` warning with the settlement reference instead
of a plain error. Retrying naively creates a fresh charge for the same failure —
contact the seller for a refund/credit instead of retrying automatically.
- **No caching, no cross-caller reuse.** Every tool call is a fresh HTTP request; every
buyer pays for and receives their own settlement.
- **Identifying User-Agent, nothing else.** Requests send
`User-Agent: pogo-tb-buyer-mcp-bridge/0.1.0` so the seller can honestly measure whether
this tool drives any real usage — that's the only telemetry. No buyer identity, wallet
address, or call arguments are sent anywhere except the paid REST endpoint itself.
## What this is not
- Not a Venture-hosted service. Nothing here runs on Venture infrastructure.
- Not a payment proxy — Venture never custodies or forwards your funds.
- Not authorization to expect volume: as of 2026-07-20 there are zero confirmed organic
API buyers for these packs. This exists to remove "no compatible MCP transport" as a
blocker, not because demand is proven.
This server cannot be deployed
Maintenance
ActivitySlowing
ResponsivenessNo issues