Self-hosted MCP server for deep internet research — web search, page scraping, Python sandbox, and search suggestions. No API keys required.
Server has 4 well-named tools with complete input schemas and descriptions. All tools follow verb_noun naming (search_internet, fetch_page, execute_python, get_search_suggestions). Descriptions are detailed (150-250 chars) and explain WHAT, WHEN, and HOW. Input schemas use Zod with proper types, enums, and constraints. However, output schemas are not documented, responses are JSON-stringified without field-level documentation. Error handling returns structured error objects with codes and messages, but lacks recovery guidance (e.g., 'try search_internet with a simpler query'). No tool annotations (readOnlyHint/destructiveHint) despite clear risk profiles. Missing parameter descriptions for some edge cases (e.g., wait_for CSS selector behavior).
Execute Python code in an isolated Docker sandbox with network disabled, capability dropping, and resource limits (512MB RAM, 1 CPU, 60s timeout). Auto-detects and installs missing packages.
Fetch and extract content from a web page using Playwright with stealth mode. Supports snippet, readable, and full extraction modes. Content is truncated to 50,000 characters.
Get autocomplete suggestions for a partial search query from SearxNG. Returns up to max_suggestions suggestion strings. Falls back to simple query expansion when SearxNG autocomplete is unavailable.
Search the internet using SearxNG meta-search engine. Returns search results with title, URL, snippet, source engine, and score. Supports speed, balanced, and quality modes. Deduplicates by URL and limits same-domain results to 2. Filters low-trust domains when website-weight-config.json is present.
Output schemas not documented. Tools return JSON-stringified results without field-level documentation. LLMs cannot plan downstream calls or extract specific fields reliably.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint). execute_python is clearly destructive (writes to Docker, runs arbitrary code) but lacks annotation. Agents cannot reason about side effects.
Error messages lack recovery guidance. Errors return code + message but do not suggest next steps (e.g., 'SearxNG unavailable, retry in 30s or check config').
fetch_page wait_for parameter lacks detail on CSS selector behavior (e.g., timeout if selector never appears, partial match rules).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
execute_python returns artifacts as boolean flag but does not document artifact format, location, or retrieval mechanism.