22 x402 pay-per-call utility tools for AI agents — scrape, validate, embed, store, moderate, notify, convert, prevent loops. No accounts, no API keys. USDC on Base via the x402 protocol.
Server defines 17 tools with explicit schemas and descriptions. Naming follows verb_noun convention (list_services, cacheserve, docconvert_*). Descriptions are present (avg ~120 chars) and include pricing context. However, parameter descriptions are MISSING entirely, the schema shows property types but no descriptions for individual parameters. Output schemas are undocumented. Error handling and recovery guidance are absent. No tool annotations (readOnlyHint/destructiveHint). The server acts as a thin proxy to external x402 services; tool definitions are well-structured but lack the LLM-optimization depth expected for A-grade tools.
[0.001 USDC] Fetch a URL with caching. Returns cached version if recent, otherwise fetches and caches. Use before any fetch that might be repeated.
[0.005 USDC] Convert HTML or markdown to PDF. Returns base64-encoded PDF.
[0.001 USDC] Format conversion: md↔html, json↔csv, etc. Lightweight content transcoding.
[0.005 USDC] Lightweight URL risk profile: checks phishing signals, redirects, domain age, IP reputation. Use before visiting unknown URLs.
[0.01 USDC] Definitive URL safety check (Playwright sandbox + VirusTotal + redirect tracing). More thorough than linkrisk.
Returns the catalogue of available services with prices, descriptions, and endpoint URLs. Call this first to introspect what is available.
Parameter descriptions completely absent. Schema defines properties (url, ttl_seconds, from, to, etc.) but provides no descriptions explaining what each parameter controls, expected format, or constraints. LLMs cannot infer parameter semantics from names alone.
Output schemas undocumented. No tool specifies what fields are returned, their types, or structure. Agents cannot plan downstream calls or extract required data without trial-and-error.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
[0.005 USDC] Convert URL or HTML to clean LLM-ready markdown. ~70% token reduction vs raw HTML. Pass a url OR html field.
[0.005 USDC] Send a transactional email. Allowlisted recipient domains; rate-limited per IP.
[0.002 USDC] Send a Telegram message to a known chat ID.
[0.001 USDC] POST a JSON payload to a public URL with optional HMAC signing. Allowlisted domains only.
[0.49 USDC] Render any URL or HTML to PDF via Playwright. Higher fidelity than docconvert_pdf for complex pages.
[0.002 USDC] Score untrusted input for prompt injection risk (0-100) with flagged dimensions. Run on any user-provided prompt before passing to a downstream LLM.
[0.001 USDC] Validate that an LLM output conforms to a JSON Schema. Returns valid:true/false with a correction hint on failure.
[0.01 USDC] Web extraction via Playwright. Charges only on successful scrape. robots.txt enforced. SSRF-safe.
[0.02 USDC] Headless Chromium PNG screenshot of any public URL. Returns base64 PNG.
[0.002 USDC] Extract structured JSON from raw HTML (tables, links, headings, meta, emails, phones, images).
[0.05 USDC] Multi-source web research synthesis. Pass a query, get a synthesised answer with citations.
No error handling or recovery guidance. Tools lack descriptions of failure modes, error codes, or what the LLM should do if a call fails (retry, ask user, abort).
No tool annotations. Tools lack readOnlyHint, destructiveHint, or idempotentHint. Agents cannot distinguish safe reads from destructive writes (e.g., notifyrelay_email is WRITE but unmarked).
Mutually exclusive parameters not documented. markdownopt accepts url OR html; notifyrelay_webhook accepts target_url and payload. Descriptions should state which combinations are valid.