Check x402 endpoints like a paying agent: diagnose, fix plans, pre-payment checks. Free quick check.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent — or use 1-click editor setup below.
One-click editor setup isn’t available for this listing yet — we don’t have a confirmed install command, and we’d rather show nothing than point your editor at the wrong package or host. Follow the project’s own setup instructions, linked above.
Diagnoses why an x402-payable endpoint's payment flow is broken, without needing a funded wallet.
Paste a URL (web app) or run x402-doctor <url> (CLI, CI) and get back exactly which check failed, why, and how
to fix it. Every check traces back to a real bug hit while shipping
PlainText and
Ichimoku Signal.
â–¶ Watch the 70-second explainer (with voice and captions): diagnosing a broken endpoint, the pre-payment check for agents, and the daily Trust Index.
â–¶ New: the paid fix in 70 seconds: for $0.05 the Doctor hands you the medicine, the exact code that fixes each problem for your stack, in the browser or as JSON for agents.
| Group | Check | Catches |
|---|---|---|
| 402 challenge | returns-402 | No 402 for GET or POST (tries both, or --method) |
protocol-version, challenge-header | v1 vs v2, missing x402Version, challenge in the wrong header, undecodable header | |
envelope-body-mirror | Header-only challenge (@x402/express sends {}), header and body disagreeing | |
| MCP (payment per tool call) | mcp-server | When the URL answers no 402 but speaks MCP (Streamable HTTP, JSON or SSE, with or without a session): initialize and tools/list without payment |
mcp-paid-tools | No tool description says it is paid (x402, USDC, a price), so agents can't tell | |
mcp-payment-required | One unpaid tools/call per paid-looking tool (at most 2; explicitly paid tools first — "Paid …" or a price / "via x402" in the title; never tools that call themselves free, destructive tools, or write tools unless explicitly paid). A free answer warns only for an explicitly paid tool, otherwise it is info: the x402 payment requirement in the tool result with isError: true (as @x402/mcp), or an HTTP 402 with PAYMENT-REQUIRED instead (payable over HTTP, not by @x402/mcp clients), a JSON-RPC error, a tool that answers for free, or example arguments refused before the payment step (publish one valid call as _meta.examples to avoid that). The requirement then gets the payment-option, settlement and wallet checks below | |
mcp-payment-text, mcp-payment-structured | The requirement only in structuredContent (the x402 MCP transport requires JSON text in content[0]), or only as text (structuredContent preferred) | |
| Payment options | accepts[i]-scheme, -network | Missing scheme; legacy names like base / solana:mainnet instead of CAIP-2 |
accepts[i]-payto, -asset | Invalid EVM/Solana addresses; asset that is not USDC, or USDC of another network (e.g. Base Sepolia USDC on Base) | |
accepts[i]-amount | Decimal dollar amounts ("0.02") instead of atomic units, zero or non-integer amounts | |
accepts[i]-extra | Solana without extra.feePayer (clients throw "feePayer is required"), EVM without the EIP-712 name/version | |
| Resource | resource-url | http:// resource URL on an https:// endpoint (Express behind a TLS proxy without trust proxy) |
resource-metadata | Missing description / mimeType | |
| Settlement | solana-payout-account | Solana payout wallet without a token account for the asset: every settlement fails on-chain |
solana-wallets | Solana settled by PayAI, which rejects Phantom (Lighthouse instructions before the transfer) | |
| Who can pay | wallets | Per wallet (MetaMask, Coinbase Wallet, Rabby, Phantom, Solflare, Backpack, x402 agents): the networks where payment works and where it fails, and why. Also in the JSON report as wallets |
metamask-site-scan | Only with METAMASK_SCAN=on (off by default: the endpoint has no published API or licence). MetaMask's site scanner (Blockaid) blocks the domain (e.g. "wallet drainer"): MetaMask users can't open the site or pay in the browser. With how to report a false positive. Agents are not affected | |
evm-payto-eoa | EVM payout wallet is a regular wallet (EOA): MetaMask's Blockaid check may flag the payment signature as "a deceptive request". Info, with how to get it cleared | |
| Discovery | bazaar, bazaar-output | Missing or invalid Bazaar declaration, output example not matching its schema |
bazaar-replay | The declared example request not answering 402, so the Bazaar cannot index it | |
openapi-present, openapi-title, openapi-guidance | Missing /openapi.json, info.title, info.x-guidance | |
well-known | /.well-known/x402 missing (info), unreadable (resources as URLs or objects with a url are both read), or listing resources on another host than the one checked (built from the request Host header, it keeps pointing crawlers at an old domain). A platform address such as *.onrender.com pointing at its own domain is fine | |
bazaar-listing | Where the CDP Bazaar lists this route (same path, same payTo): under this origin, not yet, or only under another host. The Bazaar keeps the URL the payer used, so after a domain move a route stays listed under the old host until someone pays through the new one. On the web check and the paid API (not the CLI) | |
| Browser | paywall | Browser paywall in testnet mode on a mainnet endpoint (@x402/paywall defaults to testnet; the flag is read from JS or JSON config) |
Statuses: pass, warn (works, but something is off), fail (payments fail or it is not valid x402), info.
Reports are shareable: https://<host>/?url=<endpoint>&method=GET runs the diagnosis on load.
API: POST /api/diagnose with { "url": "...", "method": "GET" | "POST" } (method optional) returns
{ url, method, overall, checks[], challenge, share_url }: share_url is the page link above, to paste into an issue or a chat. Rate-limited to 10 diagnoses per minute per IP.
GET /api/v1/diagnose?url=<endpoint>&method=GET|POST returns the same report, $0.01 USDC per call on Base or
Solana via x402, with no rate limit. It is meant for agents and CI pipelines; the web page stays free.
PAYMENT-REQUIRED header, mirrored in the body) with a Bazaar input and
output schema.url
answers 402, so indexers such as x402scan can register it. Paying without a url returns a 400./openapi.json (with x-payment-info) and /.well-known/x402.GET /api/v1/preflightGET /api/v1/preflight?url=<endpoint>&max_usd=0.05&network=<caip2>&method=GET|POST, $0.001 USDC per call:
call it before your agent pays an x402 endpoint it has not used before. It never pays the endpoint.
| Verdict | When |
|---|---|
no_go | No 402 or no valid challenge; every option would fail to settle (bad payTo/amount, missing fee payer or EIP-712 domain, Solana payout wallet without a token account); cheapest option above max_usd; no payable option on the requested network |
caution | Charges more than its OpenAPI advertises; not HTTPS; not a known USDC contract; decimal amount; resource URL differs from the requested URL; testnet only |
go | None of the above. recommended_option is the cheapest payable USDC option (on network if given) |
Not being listed in the CDP Bazaar is reported as info only. Results are cached for 10 minutes per URL, budget
and network (cached: true), so checking before every payment stays fast.
GET /api/v1/fixGET /api/v1/fix?url=<endpoint>&method=GET|POST&stack=<optional>, $0.05 USDC per call: diagnoses the endpoint,
then returns, per failed or warning check, the concrete change that fixes it, as code for your stack and filled in
with your own values (payTo, amount, network, route).
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-doctor)<a href="https://allmcps.com/mcp/x402-doctor"><img src="https://allmcps.com/api/badge/x402-doctor?style=directory" alt="X402 Doctor on AllMCPs" /></a>