MCP stdio bridge that turns any x402-paid HTTP endpoint into a Claude-callable tool. Auto-pays via the @x402 client (EVM exact, SVM exact, EVM batch-settlement) and pre-loads tools from the Coinbase x402 Bazaar.
Server exposes 4 tools with mixed quality. call_paid_endpoint and dynamic paid_* tools have detailed descriptions and proper Zod schemas with type constraints and descriptions. list_bazaar_tools and refresh_bazaar are well-described but have empty input schemas ({}). Tool annotations are present and correct (readOnlyHint, destructiveHint, idempotentHint, openWorldHint). However, dynamic tools' input schemas are intentionally permissive (body/params/pathParams as 'any') to pass through LLM-constructed payloads, which violates schema strictness principles. Error handling exists but lacks recovery guidance. Output schemas are not formally documented.
Calls any HTTP URL that returns 402 with x402 payment requirements, automatically signing and paying. SPENDS REAL MONEY: each call settles a USDC payment from the bridge wallet (capped by MCP_BRIDGE_MAX_PRICE_PER_CALL_ATOMIC), and retrying is a new charge. Supports EVM exact, EVM batch-settlement, and Solana exact schemes. Returns the resource response plus the parsed settlement receipt.
Returns the cached list of x402 Bazaar resources registered as MCP tools on this bridge. Free: reads the in-process cache only, no network and no payment.
Dynamic tools registered from Coinbase x402 Bazaar resources. Each tool's input shape is permissive (body/queryParams/pathParams) to pass through whatever the LLM constructs. The bazaar's published JSON Schema is included in the tool DESCRIPTION so the LLM can see required fields.
Re-queries the x402 Bazaar discovery endpoint and re-registers dynamic tools. Use when new paid services have been added since the bridge started. Free (no payment), but mutates the bridge tool list and results vary with the live Bazaar.
Dynamic paid_* tools use permissive 'any' type for body/params/pathParams instead of strict JSON Schema. This violates constrained-input pattern and prevents LLM validation before payment is attempted. Each call spends real USDC, invalid payloads cause wasted charges.
list_bazaar_tools and refresh_bazaar have empty input schemas ({}). While correct for zero-parameter tools, the schema score reflects missing formal output schema documentation. No documented return type structure for LLM planning.
Error handling in callPaidEndpoint catches exceptions and returns asErrorContent() but provides no recovery guidance. LLM receives 'call_paid_endpoint failed: <message>' with no hint on whether to retry, check parameters, or abort. Violates recovery-guide pattern.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2025-06-18+ | v2 |
Dynamic tools' descriptions embed raw JSON Schema from Bazaar in the description text ('The bazaar's published JSON Schema is included in the tool DESCRIPTION'). This is token-wasteful and forces LLMs to parse unstructured schema instead of using formal inputSchema. Violates response-shaper pattern.
No pagination support documented. call_paid_endpoint returns raw HTTP response data without limit/offset. If a paid endpoint returns 1000+ items, context window is exhausted. Violates paginated-result pattern.