Production-ready, zero-cost web crawling and scraping MCP server optimized for Vercel Serverless.
ZeroCrawl has 7 well-named, action-verb tools with complete input schemas and descriptions. All tools follow verb_noun naming (scrape_page, crawl_domain, extract_metadata, search_crawl, parse_sitemap, take_screenshot, batch_scrape). Descriptions are present and contextual (avg ~80 chars), exceeding the 10-char minimum. However, parameter descriptions are sparse or missing entirely, most params lack detail on format, constraints, or expected values. Output schemas are not documented in the source, forcing LLMs to infer result structure. Error handling is minimal; no recovery guidance or categorization. No pagination support despite tools returning lists. Security is adequate (no exposed secrets in params), but audit logging is absent.
Accept an array of up to 5 URLs, executing page processing concurrently.
Recursively crawl same-domain internal links up to maxDepth or maxPages.
Parse title, meta descriptions, OpenGraph tags, canonical links, and JSON-LD structured data.
Discover and parse sitemap.xml or sitemap_index.xml for a given domain.
Fetch URL and convert to clean Markdown. Fallbacks to Jina reader if initial fetch fails.
Fetch web search results, isolate top target links, and concurrently scrape each target link.
Return high-res screenshot URL via Microlink and extract all embedded page image links.
Output schemas not documented. LLMs cannot infer what fields scrape_page, crawl_domain, or search_crawl return, forcing them to guess result structure and risking failed downstream tool chaining.
Parameter descriptions missing or minimal. 'url' param in scrape_page has description 'URL to scrape' (13 chars), too terse. No guidance on format (http/https required?), length limits, or handling of redirects. crawl_domain maxPages/maxDepth lack constraints (min/max values).
No error handling or recovery guidance. Tools return raw errors with no actionable next steps. E.g., if scrape_page fails on a URL, the LLM has no guidance to try Jina fallback or retry with different parameters.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
No pagination support. search_crawl and batch_scrape return lists but lack limit/offset or cursor parameters. Large result sets will blow context windows without pagination.
batch_scrape accepts up to 5 URLs but no documentation of this limit in the description. LLMs may attempt to pass 100+ URLs, causing silent truncation or errors.