Fastcrawl — web scraping & crawling API for AI agents. Clean LLM-ready markdown from any URL over REST and MCP.
This is a thin REST client wrapper, not an MCP server. The source shows a Python SDK (httpx-based) with 12 tools that call a remote Fastcrawl API. Tool definitions are inferred from method signatures and docstrings, not explicit MCP registration. Schemas are partially visible (parameter names and types in signatures) but lack formal JSON Schema declarations. Descriptions are present but brief (10 - 50 chars), below the 50 - 200 char baseline for LLM-optimized tools. No input validation, error recovery guidance, or output schema documentation. The code does not show MCP protocol implementation (no stdio, HTTP, or SSE transport layer). This appears to be a Python package, not an MCP server.
Scrape multiple URLs in batch.
Start an async crawl; poll with crawl_status().
Get the status of an ongoing or completed crawl.
Extract structured data from a URL using a provided schema.
Extract structured data from multiple URLs using a provided schema.
Map a URL and discover linked URLs.
PDF → clean markdown (pdf-inspector engine).
Not an MCP server, this is a Python REST client library. No MCP protocol implementation (stdio, HTTP, or SSE transport) is visible in the source. Tool definitions are inferred from method signatures, not explicitly registered via MCP.
Tool descriptions are too brief (10 - 50 chars). Baseline for LLM-optimized tools is 50 - 200 chars. Descriptions like 'Get the status of an ongoing or completed crawl' lack context on when to use the tool vs alternatives, prerequisites, or what the response contains.
No formal JSON Schema declarations for tool inputs. Parameter types and descriptions are embedded in Python type hints and docstrings, not exposed as structured schemas. LLMs cannot parse Python signatures, they need explicit JSON Schema with type, description, and constraints for each parameter.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 38 | 2026-07-28+ | v2 |
Page → PDF bytes; optionally write to output_path.
Scrape a URL to clean markdown (default) and/or html.
Return PNG bytes; optionally write to output_path.
Search for content.
Get API usage statistics.
No output schema documentation. Tools return dict objects with no documented structure. LLMs cannot plan downstream calls or extract required fields without knowing what the response contains (e.g., does crawl_status return 'status', 'crawl_status', or 'state'?).
Error handling lacks recovery guidance. FastcrawlError is raised with status and message, but no actionable next steps. E.g., 'URL not found' does not suggest retrying with a different URL or calling a discovery tool first.