MCP server for OnlyBots x402 APIs — web reader, PDF reader, screenshots. Pay per call in USDC on Base with your own wallet, no accounts.
Five tools with clear, domain-specific descriptions (10-30x token efficiency, cost transparency). All tools have input schemas with URL parameters and descriptions. However, schemas are minimal (single required param per tool), output schemas are undocumented, and error handling lacks recovery guidance. Tool naming is verb-forward (read, shot, demo) but lacks specificity, 'read' vs 'read_js' distinction relies on description rather than name clarity. No parameter validation constraints (min/max for width), no pagination, no structured error responses. Descriptions are good (100-150 chars) but lack WHEN-to-use guidance and dependency hints.
Free: preview the reader on any URL (truncated sample of the /read output, no payment). Use to try OnlyBots before configuring a wallet.
Read a web page as clean, token-efficient markdown (article extracted, boilerplate/nav/ads stripped — typically 10-30x fewer tokens than raw HTML). Costs $0.002 USDC on Base.
Read a JavaScript-rendered page (SPA) as clean markdown via a headless browser. Use when `read` returns little content. Costs $0.005 USDC on Base.
Read a PDF document as clean text with title, page count and token count. Up to 20MB. Costs $0.004 USDC on Base.
Screenshot a web page as a PNG (headless-browser rendered). Returns the image. Costs $0.004 USDC on Base.
Output schemas undocumented. Tools return markdown, token counts, and images but LLMs cannot plan downstream operations without knowing response structure. Violates pattern:tool requirement that output schemas be documented.
Error handling lacks recovery guidance. No indication whether errors are retryable, user-fixable, or fatal. No actionable error messages (e.g., 'URL must be public HTTP(S), not private IP 192.168.x.x'). Violates pattern:recovery-guide.
Naming ambiguity: 'read' vs 'read_js' distinction is unclear from names alone. LLMs must read descriptions to understand when to use each. Should be 'read_static' + 'read_rendered' or similar. Violates pattern:tool naming clarity.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Parameter 'width' in shot tool lacks min/max constraints in schema (only in description). JSON Schema should declare minimum: 320, maximum: 1920 so LLMs cannot pass invalid values. Violates pattern:constrained-input.
No dependency hints in descriptions. E.g., 'read' should note 'If page is JavaScript-heavy (SPA), use read_js instead.' Violates pattern:tool-description guidance on dependency hints.