Minimal example of an AI agent discovering, paying for, and unlocking live trading data over MCP using the x402 pattern.
This server exhibits critical definition gaps across all four tools. All tools lack parameter descriptions entirely, the rubric requires every parameter to have a description explaining what it controls. Three of four tools have empty input schemas ({}), providing zero guidance on required fields or types. Descriptions are present but generic and lack actionable context for LLM selection. No output schemas are documented. The x402 payment pattern is novel but underdocumented in the tool interface itself. This server would not pass code review for production use.
Verify an on-chain crypto payment and retrieve the API key upon confirmation
Retrieve the public catalog of available data tiers and pricing (no authentication required)
Fetch live trading signals (requires API key authentication)
Initiate a purchase for access to a data tier and receive a crypto payment instruction
Three of four tools have empty input schemas ({}). get_catalog, get_signals, and check_payment provide zero type information or parameter guidance. The rubric requires every parameter to have a description and type definition.
No parameter descriptions exist for any tool. The 'tier' parameter in purchase_access and 'payment_reference_id'/'tx_hash' in check_payment lack descriptions explaining their purpose, format, or constraints. LLMs cannot infer parameter meaning from names alone.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., payment_reference_id from purchase_access, api_key from check_payment) without knowing the response structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
Tool descriptions lack actionable context. 'Fetch live trading signals (requires API key authentication)' does not explain when to call this vs get_catalog, what fields are returned, or how to handle the payment_required error. Descriptions should be 50-200 chars and answer: what, when, and what's returned.
No error handling guidance. The example code shows get_signals returns a 'payment_required' error, but the tool description does not document this or guide the LLM to call purchase_access next. Error responses must tell the LLM what to do.