Payment awareness layer for MCP: reference server with payment-gated tools demonstrating HTTP 402 payment flow with x402 protocol
Critical gaps in tool definitions. Both tools have minimal descriptions (under 50 chars) and lack documented input/output schemas in the visible source. Tool names are verb-based (get_weather, get_forecast) but descriptions are trivial marketing copy ('Get current weather (FREE)', 'Get weather forecast (PAID) - 7-day weather forecast'). No parameter descriptions visible beyond bare type declarations. No output schema documentation. No error handling guidance. The codebase shows schema infrastructure (schemars, jsonschema) but tool definitions are not materialized in the provided source excerpts.
Get weather forecast (PAID) - 7-day weather forecast
Get current weather (FREE)
Tool descriptions are marketing copy, not LLM-optimized. 'Get current weather (FREE)' and 'Get weather forecast (PAID) - 7-day weather forecast' are under 50 chars and lack context for when/why to call them. Baseline: A+ tools average 194 chars with clear WHAT/WHEN/RETURN guidance.
No parameter descriptions visible. The 'city' parameter in both tools has only a type ('string') and a bare description ('City name for weather query'). Missing: expected format, examples of valid cities, whether it accepts coordinates, whether it's required, what happens if invalid.
No output schema documented. Tools return weather data but the response structure is not visible in source. LLMs cannot plan downstream calls or extract fields without knowing what fields exist, their types, and their meaning.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | <=2025-11-25 | v2 |
No error handling guidance. If a city is not found, if the API times out, or if the user passes invalid input, there is no documented recovery path. LLMs need actionable error messages like 'City not found. Try search_cities() with a partial name.'
Pricing model not reflected in tool definitions. The 'PAID' vs 'FREE' distinction is in the description text, not in structured metadata. No tool annotation (destructiveHint, readOnlyHint, idempotentHint) or cost/quota metadata visible. Agents cannot reason about cost trade-offs.