AI-ready web scraper API — URL to clean Markdown via Model Context Protocol. Registers tool snapapi_scrape to fetch web pages and return structured content (title, Markdown, plain text, metadata) suitable for LLMs and RAG systems.
Single tool 'snapapi_scrape' has a well-structured definition with clear description (194 chars), proper input schema with Zod validation, and documented output schema. Naming follows verb_noun pattern. However, the tool lacks error recovery guidance, parameter constraints are minimal (only minLength on url), and the description does not explain when to use this tool vs alternatives or what prerequisites exist. Output schema is defined but response structure mixes text preview with structuredContent, which may confuse LLMs about which field to use. No tool annotations (readOnlyHint, etc.) present.
Calls SnapAPI to fetch a web page and return AI-ready output: title, Markdown (noise stripped, H1–H3 outline, links preserved), plain text, and metadata (word_count, estimated_reading_time in minutes, language as ISO 639-3). Requires API key via env SNAPAPI_API_KEY or argument api_key.
Error responses lack recovery guidance. Network errors and API failures return raw error messages without suggesting next steps (e.g., 'retry with different URL', 'check API key validity'). LLMs cannot infer corrective actions.
Output structure is ambiguous. Response contains both a text preview (truncated markdown in content[0].text) and full structuredContent. LLMs may not know which field to use for downstream processing, risking token waste or incorrect data extraction.
Tool description does not explain when to use snapapi_scrape vs other scraping approaches, or what prerequisites exist (e.g., 'requires public URL', 'API key must be valid'). LLMs lack context for tool selection.
No tool annotations present. Missing readOnlyHint (this is a read-only tool), which prevents agents from understanding idempotency and retry safety.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2025-06-18+ | v2 |
URL parameter accepts any string with minLength=1. No format constraint (http/https), no max length, no validation against invalid URLs. LLMs may pass malformed URLs, wasting API quota.