Turn any URL into clean, LLM-ready markdown from your terminal. Free via guest /try, or full API with FASTCRAWL_API_KEY.
Single tool 'scrape' has a clear, concise description (89 chars) and well-defined input schema with 4 parameters, each typed and described. However, the tool lacks output schema documentation, critical for LLMs to plan downstream operations. No error handling guidance is provided; the function returns a dict with 'success', 'error', and 'status' fields, but the tool description does not document this structure or recovery paths. Parameter descriptions are adequate but lack format constraints (e.g., timeout range, format list examples). The tool name 'scrape' is generic and does not follow verb_noun convention (should be 'scrape_url' or 'fetch_url'). No tool annotations (readOnlyHint, idempotentHint) are present. Overall, the tool is functional but falls short of production-grade quality.
Scrape a URL to clean markdown. Uses guest /try (free) unless api_key is set.
Output schema not documented. Tool returns dict with 'success', 'error', 'status', 'markdown', 'html' fields, but LLMs cannot plan downstream operations without knowing the response structure.
Tool name 'scrape' is generic and does not follow verb_noun convention. Should be 'scrape_url' or 'fetch_url' to clarify intent and improve LLM disambiguation.
No error handling guidance. Function catches HTTPError, TimeoutError, and URLError but returns unstructured error dicts. Description does not explain error cases or recovery steps (e.g., 'If timeout occurs, retry with a longer timeout or check network connectivity').
Parameter 'formats' lacks constraints. Description says 'Optional list of output formats (e.g. ['markdown', 'html'])' but does not specify valid enum values or what happens if invalid formats are passed.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
Parameter 'timeout' lacks range constraints. Description does not specify minimum/maximum values (e.g., 1 - 300 seconds), allowing LLMs to pass absurd values.