Read-only MCP server over a payability index, watch state, and manifest for the nsgoods x402 payment protocol ecosystem. Provides tools to query endpoint payability verdicts, search endpoints, check host status, and retrieve pricing information.
8 read-only tools with mostly complete schemas and descriptions. Tool names lack action verbs (e.g., 'payability_verdict' instead of 'get_payability_verdict'), violating verb_noun convention. Descriptions are adequate (100-200 chars) but lack WHEN/WHY guidance. Parameters are typed and described, but no enums for constrained inputs (e.g., 'sort' accepts empty string or 'price', should be enum). Output schemas are not documented. Error handling is minimal, no recovery guidance or actionable error messages. Security is strong (read-only, no secrets in params). Composition is clean (single responsibility per tool). Baseline: avg tool description ~150 chars (within 10-1024 range), all params have descriptions, but naming and output documentation are gaps.
Search the catalogue by host or URL substring. Returns up to `limit` endpoints with their latest verdict, plus the total match count. Use this first when you do not know the exact resource URL.
Aggregate status of one host: how many resources, how many payable in the last full scan, verdict distribution, and whether the host is gone (no recent activity).
Retrieve the current nsgoods manifest (proof index), cached for 5 minutes. Contains the canonical list of known x402 endpoints and their metadata.
Retrieve the current model claim state watch file, if available. Contains drift metrics for model claims.
Retrieve the current payability index from the nsgoods observatory, containing the latest payability verdicts for all known endpoints.
Latest payability observation for one exact resource URL (path and query included), with the meaning of the verdict, remediation if it cannot be paid, and the per-network options seen.
Tool names lack action verbs. 'payability_verdict', 'manifest', 'host_status' do not start with get_, list_, search_, etc. LLMs infer intent from verb, missing verbs force LLMs to read full descriptions, increasing selection errors.
Output schemas not documented. Tools return complex objects (e.g., find_endpoints returns 'endpoints' array with 'verdict', 'host', 'url' fields; manifest returns proof index structure) but no schema is visible in code. LLMs cannot plan downstream calls or extract fields reliably.
'sort' parameter in find_endpoints accepts free-form string ('empty string or price') instead of enum. Should declare enum: ['', 'price']. Free-form invites hallucinated values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2026-07-28+ | v2 |
Retrieve the observed price (scheme, network, asset, amount, pay_to, max_timeout, n_accepts) for one resource, if available from the latest price sweep.
Retrieve the current x401 adoption state watch file, if available. Contains adoption metrics for the x401 identity protocol.
No error handling guidance. Code has no try-catch or error recovery hints in tool descriptions. If a resource URL is malformed or not found, LLM receives no actionable next step (e.g., 'Try find_endpoints() to locate the resource first').
Descriptions lack WHEN/WHY context. 'Search the catalogue by host or URL substring' tells WHAT but not WHEN to use it vs payability_verdict. Should say: 'Use this first when you do not know the exact resource URL; payability_verdict requires an exact URL.'