An MCP server that provides web search and web fetch capabilities. It supports web search across multiple engines (SearXNG, Google, Bing, Brave, Arxiv) and web page content fetching with HTML to Markdown conversion.
The server defines 2 tools with explicit schemas and descriptions, but significant gaps exist in parameter annotation, error handling guidance, and output schema documentation. Tool names follow verb_noun convention (web_search, web_fetch), which is good. However, parameter descriptions lack actionable detail (e.g., 'search_depth' accepts 'quick/normal/deep' but this is not formally constrained), and output schemas are not documented in the source. Error handling provides no recovery guidance. The server is functional but falls short of production-grade standards.
Fetch a website URL and return its content as Markdown or raw HTML
Search the web using configured search engines with support for general, news, and academic searches
Parameter descriptions lack actionable constraints. 'search_depth' is described as 'Search depth: quick/normal/deep' but is not declared as an enum in the schema. LLMs cannot parse free-form text constraints and may pass invalid values.
Output schemas are not documented. Tool descriptions do not state what fields are returned or in what structure. LLMs cannot plan follow-up calls or extract required data (e.g., URLs from search results, or success/error indication from fetch).
Error handling provides no recovery guidance. When a search fails or a URL is unreachable, the tool should return actionable error messages (e.g., 'Search engine unavailable. Try engine=bingcn.' or 'URL returned 404. Check spelling.'). Current code in handle_search.go and handle_fetch.go likely returns bare error codes or raw API responses.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 46 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 53 | - | v1 |
Parameter 'engines' (array) is ambiguous in relation to 'engine' (string). Description says 'Multiple search engines (comma-separated)' but schema type is array, implying structured input. Unclear to LLM whether to pass ['google', 'bing'] or 'google,bing'.
Parameter defaults not documented. 'max_results' defaults to 10 per code (NewWebServer), but this is not stated in the parameter description. LLMs need explicit defaults to reason about omitted parameters.
The 'arxiv_category' parameter (web_search) is described vaguely ('Arxiv category for academic searches (e.g., 'cs.AI')') without listing valid categories or explaining when to use it. An LLM has no way to know whether 'math.AP' is valid without trial-and-error.
The 'language' parameter lacks validation examples or format specification. Is 'en' valid? 'en-US'? 'eng'? Parameter description should specify the format (ISO 639-1, etc.).