Pay-per-call MCP tools (crypto/DeFi data, web reading, AI tasks) in USDC over x402 on Base.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
An Express server that sells paid API endpoints over the x402 protocol (USDC payments on Base), built to be consumed by AI agents.
A client (human or agent) calls a paid endpoint β the server replies
402 Payment Required with the payment requirements β the client signs a
USDC payment and replays the request with the PAYMENT header β a
facilitator verifies and settles the payment on-chain β the server
serves the response. No blockchain key management server-side: it only
holds the receiving address.
All /api/* routes are paid (x402 payment required), except /health,
/stats, and /.well-known/x402.json, which are free. Every response is
clean JSON β never a raw 500, always {error: "..."} with the right HTTP
status code on any problem (validation, upstream source down, etc.).
Replace $URL with the server's URL (http://localhost:4021 locally, the
Render URL in production) in the examples below.
| Endpoint | Price | Example |
|---|---|---|
GET /api/price/eth-usd | $0.005 | curl "$URL/api/price/eth-usd" |
GET /api/price/btc-usd | $0.005 | curl "$URL/api/price/btc-usd" |
GET /api/price/sol-usd | $0.005 | curl "$URL/api/price/sol-usd" |
GET /api/price/usdc-supply | $0.005 | curl "$URL/api/price/usdc-supply" |
GET /api/gas/base | $0.005 | curl "$URL/api/gas/base" |
GET /api/gas/ethereum | $0.005 | curl "$URL/api/gas/ethereum" |
These are thin, single-purpose wrappers around the same sources as
/api/defi/price and /api/chain/gas below β kept as separate routes (with
narrow, intent-matching descriptions) so an agent searching for e.g. "ETH
price USD" or "gas price Base" finds and calls them directly, instead of
having to first discover the generic parameterized endpoint.
β οΈ License note: DefiLlama's terms of service restrict their free API to personal, non-commercial use and prohibit commercial exploitation of the data without prior written agreement (defillama.com/terms, clauses 7 and 8.10). These endpoints (plus the 6
/api/price/*and/api/gas/*ones above, and the 4/api/defi/yields/*sub-routes below, all of which reuse the same DefiLlama sources) are built on it anyway, on the explicit and informed decision of this service's operator (compliance risk accepted) β to be revisited if DefiLlama raises the issue, or by moving to their paid Pro API (pro-api.llama.fi) if needed.
| Endpoint | Price | Example |
|---|---|---|
GET /api/defi/price | $0.005 | curl "$URL/api/defi/price?coins=ethereum,bitcoin" |
GET /api/defi/tvl | $0.005 | curl "$URL/api/defi/tvl?protocol=aave" |
GET /api/defi/tvl-chain | $0.005 | curl "$URL/api/defi/tvl-chain?chain=base" |
GET /api/defi/protocols | $0.005 | curl "$URL/api/defi/protocols?limit=20" |
GET /api/defi/yields | $0.005 | curl "$URL/api/defi/yields?chain=base&min_tvl=1000000" |
GET /api/defi/yields/top | $0.005 | curl "$URL/api/defi/yields/top?limit=10&min_tvl=10000000" |
GET /api/defi/yields/by-token | $0.005 | curl "$URL/api/defi/yields/by-token?symbol=USDC&limit=10" |
GET /api/defi/yields/by-chain | $0.005 | curl "$URL/api/defi/yields/by-chain?chain=base&limit=10" |
GET /api/defi/yields/pool | $0.005 | curl "$URL/api/defi/yields/pool?pool=<pool id>" |
GET /api/defi/stablecoins | $0.005 | curl "$URL/api/defi/stablecoins?limit=20" |
/api/defi/yields/top, /by-token, /by-chain, and /pool are dedicated, intent-matching
routes alongside the generic /api/defi/yields β for an agent searching "best yield for
USDC" or "best yields on Base" rather than discovering the generic parameterized endpoint
first (same rationale as the dedicated /api/price/* and /api/gas/* routes above).
/pool returns one pool's detail plus its last 30 recorded APY/TVL data points, via
DefiLlama's yields.llama.fi/chart/{pool} (verified live against the current DefiLlama
docs before use β see endpoints/defi-yields-pool.js for a note on a doc/reality
mismatch found in the process: the docs list /chart/{pool}'s base URL as api.llama.fi,
but only yields.llama.fi actually serves it; api.llama.fi/chart/{pool} 404s).
viem, no third-party API)| Endpoint | Price | Example |
|---|---|---|
GET /api/chain/gas | $0.005 | curl "$URL/api/chain/gas?chain=base" (or chain=ethereum) |
GET /api/chain/block | $0.005 | curl "$URL/api/chain/block?chain=base" |
| Endpoint | Price | Example |
|---|---|---|
POST /api/web/read | $0.005 | curl -X POST "$URL/api/web/read" -H "Content-Type: application/json" -d '{"url":"https://en.wikipedia.org/wiki/HTTP_402"}' |
POST /api/web/extract | $0.02 | curl -X POST "$URL/api/web/extract" -H "Content-Type: application/json" -d '{"url":"...","schema":{"type":"object","properties":{"title":{"type":"string"}}}}' |
POST /api/web/read downloads a page and returns its main content as clean
Markdown (readability extraction β boilerplate/nav/ads stripped), so an
agent never has to parse raw HTML. POST /api/web/extract does the same
fetch, then extracts structured JSON from the page according to a
caller-supplied JSON Schema, via Claude Haiku 4.5 β one call instead of
read-then-extract. Both are guarded against SSRF (see lib/web.js): the
target URL must be public http(s), private/loopback/link-local/reserved IP
ranges are refused (checked both on the initial host and on every redirect
hop), the download is capped at 2 MB within a 10 s budget, and the site's
robots.txt is honored (fails open β i.e. allows the fetch β only when
robots.txt itself is unreachable, the same convention real crawlers use).
| Endpoint | Price | Source / license | Example |
|---|---|---|---|
GET /api/fx/rates | $0.005 | Frankfurter (MIT, open ECB data) | curl "$URL/api/fx/rates?base=EUR" |
GET /api/github/repo | $0.005 | GitHub REST API | curl "$URL/api/github/repo?full_name=expressjs/express" |
GET /api/npm/package | $0.005 | registry.npmjs.org + api.npmjs.org | curl "$URL/api/npm/package?name=express" |
GET /api/hn/top | $0.005 | Hacker News Firebase API (MIT) | curl "$URL/api/hn/top?limit=20" |
GET /api/wiki/summary | $0.005 | Wikimedia REST API (CC BY-SA 4.0, attribution included in the response) | curl "$URL/api/wiki/summary?title=Bitcoin&lang=en" |
GET /api/dns/lookup | $0.005 | Direct DNS resolution (Node's dns module) | curl "$URL/api/dns/lookup?domain=example.com" |
GET /api/rdap/domain | $0.005 | rdap.org (open protocol, WHOIS's successor) | curl "$URL/api/rdap/domain?domain=example.com" |
| Endpoint | Price | Example |
|---|---|---|
POST /api/ai/summarize | $0.01 | curl -X POST "$URL/api/ai/summarize" -H "Content-Type: application/json" -d '{"text":"...","max_sentences":3}' |
POST /api/ai/classify | $0.01 | curl -X POST "$URL/api/ai/classify" -H "Content-Type: application/json" -d '{"text":"...","labels":["positive","negative","neutral"]}' |
POST /api/ai/translate | $0.01 | curl -X POST "$URL/api/ai/translate" -H "Content-Type: application/json" -d '{"text":"...","target_lang":"French"}' |
POST /api/ai/extract | $0.02 | curl -X POST "$URL/api/ai/extract" -H "Content-Type: application/json" -d '{"text":"...","schema":{"type":"object","properties":{"total":{"type":"number"}}}}' |
| Endpoint | Price | Example |
|---|---|---|
POST /api/search/web | $0.01 | curl -X POST "$URL/api/search/web" -H "Content-Type: application/json" -d '{"query":"latest developments in the x402 protocol","num_results":5}' |
POST /api/search/serp | $0.005 | curl -X POST "$URL/api/search/serp" -H "Content-Type: application/json" -d '{"query":"best crypto payment protocols 2026","country":"us"}' |
Unlike the rest of this server (free/public sources, or a flat-rate AI call), this family resells a paid upstream provider's API per call β so margin, compliance, and upstream outages are real, ongoing concerns, tracked deliberately rather than assumed away.
A third endpoint, POST /api/web/scrape (Tavily Extract), was built, shipped, then
retired on 2026-09-03. It was removed after a real 6-page comparative test (3
JavaScript-rendered pages, a heavy documentation page, a product page, and an article
behind a cookie-consent banner β all confirmed robots.txt-compliant before testing)
against this server's own free /api/web/read: the in-house extractor matched or beat
Tavily Extract on 5 of the 6 pages, usually because Tavily returned a full page dump
(navigation and boilerplate mixed in) where Readability went straight to the actual
content. Tavily's only reproducible advantage was bypassing a bot-detection block that
refused this server's own honestly-identified crawler outright β real, but too narrow to
justify a dedicated $0.02 endpoint. Full test data: docs/RAPPORT-P1-PREMIUM.md.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/x402-seller)<a href="https://allmcps.com/mcp/x402-seller"><img src="https://allmcps.com/api/badge/x402-seller?style=directory" alt="X402 Seller on AllMCPs" /></a>