Multi-engine web search and content extraction, exposed as an MCP server
Four tools with complete input schemas and descriptions. Naming follows verb_noun pattern (web_search, fetch_webpage, browser_fetch). Descriptions are detailed (150-250 chars) and explain WHEN to use each tool. However, output schemas are not documented, LLMs cannot predict response structure. Parameter descriptions are good but lack explicit constraints (e.g., max_length bounds, timeout_ms range). Error handling is minimal, no recovery guidance or actionable error messages visible in handler code. Missing tool annotations (readOnlyHint, idempotentHint) despite all tools being read-only or side-effect-free.
Fetch a webpage using headless Chromium with full JS rendering. Use for SPAs, JS-rendered content, or sites blocking HTTP clients. Includes stealth mode. Requires playwright.
Fetch a webpage and extract clean markdown content. Uses HTTP GET with content extraction. If blocked by CAPTCHA, use browser_fetch instead.
Search + rerank and return the top relevant sources plus an extractive summary, ready for you to synthesize a cited answer. Use this instead of web_search when you want the single best answer to a question; call fetch_webpage on a source URL for full page text when you need detail.
Search the web using multiple engines with automatic fallback. Priority: SearXNG -> DuckDuckGo -> Mojeek -> Brave. Handles CAPTCHA detection and engine rotation.
Output schemas not documented. LLMs cannot predict response structure (fields, types, nesting). Handlers return JSON strings but schema is invisible to the protocol.
Numeric parameters lack explicit bounds. max_length, timeout_ms, max_results have no min/max constraints in schema. LLMs may pass absurd values (timeout_ms=999999999).
No tool annotations. All tools are read-only and idempotent, but inputSchema lacks readOnlyHint and idempotentHint. Agents cannot infer safety properties.
Error handling returns JSON strings with 'error' field but no recovery guidance. E.g., 'No results found' does not suggest next steps (try different query, adjust filters).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Parameter descriptions reference optional dependencies (rerank extra, SearXNG, playwright) but do not clearly state what happens if missing. LLMs may call browser_fetch without playwright installed.