Token-optimized local MCP server for web crawling and LLM content extraction
LookaCrawler demonstrates solid tool design with comprehensive parameter schemas and detailed descriptions. All 6 tools have explicit registrations with Zod schemas and descriptions. Naming follows verb_noun convention (extract_*, batch_*, map_*, crawl_*, get_*). However, output schemas are not formally documented, responses are inferred from code comments rather than explicit schema declarations. Error handling exists but lacks recovery guidance. Parameter descriptions are thorough (averaging ~100 chars) and include constraints, but some tools lack actionable error messages for LLMs.
Batch extract token-optimized Markdown from multiple website URLs concurrently, with aggregate token statistics. What it does Runs the same fast/deep pipeline as extract_web_content across an array of up to 20 URLs in parallel, then returns per-URL results plus a summary (urls attempted, succeeded, failed, total tokens, and per-page token counts). How to use - Use when you need many pages at once — docs, a list of product pages, a set of sources to compare. - mode applies to every URL. concurrency (1-10) caps parallel workers; keep it modest on fast machines / low bandwidth. - css_selector is applied to all URLs. headers/cookies/proxy apply globally to every request. - Each URL is independent: a single failure does not abort the batch (results carry an "error" field for that URL). Returns Structured JSON with per-url markdown/tokens/error and aggregate totals. Incomplete or empty batches still return a valid result object.
Perform autonomous, recursive website crawling with depth boundaries, regex route filtering, and token accounting. Crawls pages within domain boundaries and returns extracted Markdown content for each page with token estimates.
Extract structured JSON — page metadata (Open Graph, canonical URL, author, dates) and/or a custom CSS-selector schema — from a website.
Extract token-optimized, clean Markdown content from a target website for LLM consumption. What it does Fetches a URL, strips HTML bloat (scripts, styles, inline SVGs, tracking tags, navigation, footers, redundant forms) and returns readable Markdown — cutting token usage by ~73% to 90% versus the raw page. How to use - Use for any web page, article, or docs you want as LLM-ready text. - mode="fast" (default): native HTTP GET. mode="deep": headless Chrome with stealth fingerprint for JS-heavy or Cloudflare/Turnstile-protected pages. - css_selector scopes to a single element (e.g. "main", "article", "#content"). - Pass headers/cookies for gated or geo-restricted content. Providing any of headers/cookies/proxy bypasses the SQLite cache. - No auth required. Respects robots/rate-limit via retry backoff. Returns Markdown text. Cache hits are prefixed with a NOTE marker. Unsupported URLs (non-http, private IP, SSRF) fail with isError: true and a reason.
Output schemas not formally documented. Tool descriptions mention return types (e.g., 'Markdown text', 'Structured JSON') but no explicit schema definitions visible in code. LLMs cannot reliably parse responses without documented field types and structure.
Error messages lack recovery guidance. Code returns isError: true with a reason, but does not guide LLM on next steps (e.g., 'URL blocked by robots.txt. Try a different URL or use mode=deep with authentication.').
get_metrics tool has minimal description (50 chars). Does not explain what metrics are tracked, when to call it, or how to interpret results. LLM cannot determine if this tool is relevant to a user query.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Retrieve aggregated crawl metrics including request counts, success/failure rates, cache hits, retries, bytes fetched, and escalations.
Discover the architecture and page inventory of a website via sitemaps, robots.txt, and link graphs. Returns a structured list of discovered URLs with their sources (sitemap, robots.txt, or HTML links).
map_website and extract_structured_data descriptions are generic and lack 'when to use' guidance. Users/LLMs cannot distinguish when to call map_website vs crawl_website, or when extract_structured_data is preferable to extract_web_content.
No pagination or result limits documented for crawl_website. max_pages defaults to 10, but no guidance on what happens if a site has 1000+ pages or how to iterate through results. batch_extract_web_content caps at 20 URLs but does not explain pagination strategy.