
Verified x402 Catalog
io.github.withgrokbotv0.4.0Updated Oct 3, 2026
Which x402 pay-per-call endpoint delivered for a task at a price? Facts from our own paid calls.
Overview
Lets an assistant query a static catalog of x402 pay-per-call services, with results from the publisher's own paid test calls.
- What it does
- Exposes three tools over a remote Streamable HTTP endpoint: search_catalog and get_service read the published catalog of x402 pay-per-call services, and lookup returns services matching a task and maximum price, sorted by known-answer pass rate over the publisher's paid calls, then by price. Each result carries Base settlement receipts and check outcomes. The same tools are also available as a small local stdio server.
- When to use it
- Useful when an agent needs to pick a pay-per-call x402 endpoint for a task such as web search and wants price and reliability facts before paying. It is a lookup and comparison aid, not a payment or execution service.
- Requirements
- Remote endpoint over Streamable HTTP; no key or account. The lookup tool shares the client name vc-mcp, which gets five free lookups per client per UTC day; beyond that the endpoint returns HTTP 402 and does not pay. A local stdio variant exists and needs Python.
Installation
In SourceWeft
- Open Verified x402 Catalog in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Other MCP clients
Add this to your client's mcpServers config.
{
"mcpServers": {
"verified-catalog": {
"type": "http",
"url": "https://verified-catalog-lookup.withgrokbot.workers.dev/mcp"
}
}
}README
Verified Pay-Per-Call Catalog
A static, machine-readable catalog of pay-per-call (x402) services for AI agents, with factual results of our own automated checks. Published by @WithGrokBot.
Try it in one line
Which x402 web-search endpoint delivered on our last paid calls, at $0.01 or less? No key; 5 free lookups per client per UTC day:
Results are sorted by known-answer pass rate over our last paid calls, then price, each with its Base settlement receipts. Other tasks: /v1/tasks. Optional client=<your agent name>; ref only says where you found the link.
Pricing
- 5 free lookups per client per UTC day. The client is your
clientvalue when you send one, otherwise a salted hash of your IP (raw IPs are never stored). The counter resets at 00:00 UTC. Only/v1/lookupis metered;/v1/tasks,/openapi.jsonand the static catalog files stay free. - After that, $0.02 USDC on Base per lookup via x402. The lookup answers HTTP 402 with a v2
PAYMENT-REQUIREDheader (exactscheme,eip155:8453, USDC, payTo0x37cfCC8a29e9ff9458902B29E31E42dc7B718674). Retry with aPAYMENT-SIGNATURE(orX-PAYMENT) header; the payment is verified and settled through the public PayAI x402 facilitator, and the settlement tx comes back in thePAYMENT-RESPONSEheader and the response'saccessblock. - Payment never changes results, sort order or listings. It buys query access only. Free, paid and exempt lookups run the same code on the same data and get identical results; no seller can pay for placement, and no check result or known-answer outcome depends on who paid. Every lookup response repeats this in
payment_policy.
Remote MCP server (free)
https://verified-catalog-lookup.withgrokbot.workers.dev/mcp (Streamable HTTP, stateless JSON-RPC, no key). Same 3 tools and results as mcp/server.py: search_catalog, get_service and lookup. lookup uses the client name vc-mcp, so it shares that client's 5 free lookups per UTC day; after that it reports the 402 and does not pay. Registry name: io.github.withgrokbot/verified-catalog (server.json).
Always-paid endpoint (x402)
GET https://verified-catalog-lookup.withgrokbot.workers.dev/v1/lookup/paid?task=web-search&max_price=0.01 takes the same parameters and returns the same result as /v1/lookup, for $0.02 USDC on Base per call with no free quota. Its 402 carries x402 Bazaar discovery metadata (extensions.bazaar); it is also listed in /openapi.json (x-payment-info) and /.well-known/x402. Bad parameters get a 400 before anything is settled.
Files
index.html,services/<id>.html,methodology.html: the site (no JavaScript, no requests to other hosts)catalog.json,services/<id>.json,llms.txt,.well-known/agent-card.json: machine-readabledata/services.json: the seed listings (source and retrieval date on each),data/site.json: brand/repo settingsresults/latest.json,results/history.jsonl,results/raw/<run>/<id>.json,results/spend_ledger.json: check results and evidencescripts/run_checks.py: run checks (free/dry-run by default) and rebuild;scripts/build_site.py: rebuild onlydata/quality_tests.json,scripts/quality.py: known-answer tests run on every paid call (pass/fail; broken services are "facts only")receipts.json: every paid call (time, charged, settlement tx with Basescan link, delivered, known-answer result)worker/: reliability lookup, a Cloudflare Worker (GET /v1/lookup?task=web-search&max_price=0.01&n=5) that readscatalog.jsonandreceipts.jsonfrom this site and counts distinct clients (seeworker/README.md)mcp/server.py: small stdio MCP server withsearch_catalog,get_service(readcatalog.json) andlookup(calls the Worker); the Worker serves the same tools remotely at/mcpserver.json: official MCP Registry entry (remote server)scripts/demand_weekly.py: weekly count of distinct lookup clients ->results/demand_weekly.json.github/workflows/daily.yml: daily free checks and commit
Run
Paid checks exist but are off by default. They need --pay, a wallet file outside this folder (--wallet), and pip install -r scripts/requirements-pay.txt. Hard caps: $0.10 per call, $1.00 per UTC day, $20.00 lifetime; only USDC "exact" on Base is ever signed.
We publish facts only, no grades. We hold no customer funds and are not a party to any seller transaction; lookup fees after the free tier go to our own wallet. To contest a result, open a GitHub issue (see methodology.html#contest).
License
MIT, see LICENSE.
Source: README.md at commit 5c2a89c
Tools
0Version history
1- v0.4.0LatestOct 3, 2026

