Extract clean markdown from any URL. Strips nav/ads/scripts, returns structured content. Built for RAG pipelines and AI research agents.
Two tools with complete input schemas and detailed descriptions. web_scrape_to_markdown has a strong, LLM-optimized description (280 chars) with clear use cases and anti-patterns. web_scrape_batch similarly well-documented (250 chars). Both schemas properly typed with required fields. However, output schemas are documented only in description text, not as formal JSON Schema objects returned by the server. No parameter descriptions beyond the schema type declarations. Error handling and recovery guidance absent. Tool annotations (readOnlyHint) present in metadata but not formally declared in schema.
Use this when you need to extract clean content from multiple web pages at once (up to 10 URLs). Returns the same structured markdown output as web_scrape_to_markdown for each URL. 1. results (array) -- each entry has title, description, author, content, wordCount, charCount, url 2. summary -- total pages scraped, total word count, failed URLs if any Example output: {"results":[{"url":"https://a.com","title":"Page A","wordCount":800},{"url":"https://b.com","title":"Page B","wordCount":1200}],"summary":{"total":2,"totalWords":2000,"failed":0}} Use this FOR building research corpora, comparing content across competitor pages, or bulk documentation extraction. Essential when you have 3+ URLs to process in one workflow. Do NOT use for single URLs -- use web_scrape_to_markdown instead. Do NOT use for SEO comparison -- use seo_audit_batch instead.
Scrape and extract content from a URL with full JS rendering, returned as clean markdown. Alternative to Firecrawl scrape at 2.5x lower cost. Strips navigation, ads, scripts, and boilerplate — ideal for RAG pipelines and AI research agents. 1. title (string) -- page title from <title> tag 2. description (string) -- meta description 3. author (string) -- author from meta tags or schema 4. content (string) -- clean markdown body text, headings preserved 5. wordCount (number) -- total words in extracted content 6. charCount (number) -- total characters 7. url (string) -- final URL after redirects Example output: {"title":"How to Scale APIs","description":"A guide to...","content":"# How to Scale APIs\n\nScaling requires...","wordCount":1250,"charCount":7800,"url":"https://blog.example.com/scale-apis"} Use this BEFORE summarizing articles, building RAG corpora, researching topics from web sources, or extracting data from documentation pages. Essential for any workflow that needs to scrape and extract content from web pages as LLM input. Drop-in replacement for Firecrawl scrape. Do NOT use for screenshots -- use capture_screenshot instead. Do NOT use for SEO audit -- use seo_audit_page instead. Do NOT use for tech stack detection -- use website_detect_tech_stack instead. Do NOT use for web search -- use web_search_query instead.
Output schemas documented only in description text, not as formal JSON Schema. LLMs cannot parse expected response structure from prose descriptions alone.
No error handling or recovery guidance. Tools lack descriptions of failure modes (network timeout, invalid URL, JavaScript rendering failure) and what the agent should do next.
Parameter 'url' and 'urls' lack descriptions beyond type declaration. LLMs need guidance on format (must be absolute URL?), encoding, and what happens with redirects.
web_scrape_batch lacks explicit limit enforcement in description. States 'max 10 URLs' but no guidance on what happens if agent passes 11, or whether partial results are returned on partial failure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 67 | 2025-06-18+ | v2 |
Tool names use underscores but descriptions reference them inconsistently. 'web_scrape_to_markdown' vs 'web_scrape_batch' naming is clear, but composition guidance (when to use batch vs single) could be stronger.