Wraps the Crawlbase Crawling API (crawlbase.com, formerly ProxyCrawl) for web scraping through rotating residential/datacenter proxies with server-side anti-bot solving, optional headless-browser rendering, screenshots, and structured scrapers.
Three well-defined tools with complete JSON schemas, clear descriptions (194 - 250 chars), and proper parameter typing. All tools are read-only and stateless. Naming follows verb_noun convention (crawlbase_scrape, crawlbase_screenshot, crawlbase_structured). Schemas include required fields and type declarations. However, output schemas are not documented, LLMs cannot predict response structure. Error handling is absent; no guidance on retryability or recovery. Parameters lack enum constraints (e.g., format, device, mode, scraper could be enums). No tool annotations (readOnlyHint present implicitly via Risk field, but not in schema). Missing pagination guidance for potentially large results.
Scrape any website through Crawlbase rotating residential proxies with server-side anti-bot bypass (Cloudflare, DataDome, hCaptcha solved for you). Returns the page as HTML (default), clean markdown (format:"md" — great for LLM context), or a JSON envelope with metadata (format:"json"). JavaScript-heavy pages (SPAs) render when you pass your Crawlbase JavaScript token as _apiKey; the Normal token does fast static fetches. Example: crawlbase_scrape({ url: "https://example.com", format: "md", _apiKey: "your-crawlbase-token" })
Capture a screenshot of a rendered web page via Crawlbase (headless browser + rotating proxies, anti-bot bypass). Returns a stored screenshot_url (JPEG, link expires after about one hour) plus crawl metadata. Requires your Crawlbase JavaScript token as _apiKey — screenshots always render in a real browser. Captures the full page by default; pass mode:"viewport" with width/height to constrain. Example: crawlbase_screenshot({ url: "https://example.com", _apiKey: "your-js-token" })
Scrape a page into clean structured JSON using a named Crawlbase scraper — skip HTML parsing entirely. Common scraper names: "amazon-product-details", "amazon-serp", "google-serp", "facebook-page", "facebook-profile", "instagram-profile", "instagram-post", "linkedin-profile", "linkedin-company", "tiktok-profile", "ebay-product", "walmart-product-details", "github-repository", "generic-extractor". Full catalog: https://crawlbase.com/docs/scrapers/ — social-media scrapers (Facebook/Instagram/LinkedIn) work best with your JavaScript token. Example: crawlbase_structured({ url: "https://www.amazon.com/dp/1098145356", scraper: "amazon-product-details", _apiKey: "your-crawlbase-token" })
Output schemas not documented. LLMs cannot predict response structure (fields, types, nesting). crawlbase_scrape returns HTML/markdown/JSON envelope; crawlbase_screenshot returns screenshot_url + metadata; crawlbase_structured returns parsed JSON, none of these are formally specified.
Parameters accept free-form strings where enums would prevent hallucination. 'format' (html|md|json), 'device' (desktop|tablet|mobile), 'mode' (full|viewport), 'scraper' (amazon-product-details|google-serp|...) should be declared as enums in inputSchema.properties.
No error handling guidance. If Crawlbase returns 401 (invalid token), 429 (rate limit), or 5xx (service error), the LLM has no recovery path. Descriptions mention 'error shape' in comments but do not expose it to the tool interface.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
No pagination or result-limiting guidance. crawlbase_scrape with format='json' and crawlbase_structured may return large payloads. No mention of max result size, pagination tokens, or when to cap results.
Tool annotations missing from schema. Risk field (READ_ONLY) is metadata outside the MCP schema. Should add readOnlyHint: true to inputSchema to signal to MCP clients that these tools do not modify state.