Multi-engine web search, fetch, crawl and vision MCP server (Baidu + Bing + DuckDuckGo + optional SearXNG)
Server has 6 well-named tools with complete input schemas and reasonable descriptions. Naming follows verb_noun convention (web_search, web_fetch, web_crawl). Descriptions are 100-250 chars, within baseline range. All parameters have types and most have descriptions. However, output schemas are not documented, LLMs cannot predict response structure for chaining. Error handling is minimal; no recovery guidance or categorization. Missing tool annotations (readOnlyHint). Parameter descriptions lack format constraints (e.g., 'timeout_ms: number' should specify range 1-60000). No mention of pagination limits or result caps in descriptions despite tools returning lists.
Crawl a starting URL recursively up to a max depth and page count, extracting page text from each visited page.
Fetch and extract content from a URL (readability-based main-content extraction with selector fallback). extract_mode: 'article' for clean main content, 'full' for complete page text, 'auto' to decide. Supports pagination via start_index/max_length; a footer reports total length when truncated.
Fetch multiple URLs in parallel with rate limiting and retry.
Search the web using multiple engines (Baidu, Bing, DuckDuckGo, optional SearXNG). Returns structured results with credibility scores, cached for 24h. Use engine=baidu for Chinese queries, engine=bing or engine=duckduckgo for international, engine=searxng if configured.
Search and fetch top results in one call. Depth 1 = search + fetch top results, 2 = + re-search using discovered keywords, 3 = + follow links found in fetched pages.
Capture webpage screenshot and extract visual information.
Output schemas not documented. LLMs cannot predict response structure (fields, types, pagination format) for downstream tool chaining or result extraction.
Parameter descriptions lack format constraints. 'timeout_ms: number' should specify range (e.g., 1 - 60000 ms). 'max_results: number' should state bounds (1 - 100). Unbounded numbers invite absurd LLM inputs.
No error handling guidance. Errors (network timeout, invalid URL, rate limit) return raw messages without recovery hints. LLM cannot determine if retry is safe or what to do next.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Tool 'web_search_and_fetch' combines search + fetch + re-search + link-following. Violates single-responsibility principle. Should split into web_search (depth=1) and web_search_recursive (depth 2 - 3) for clearer composition.
No tool annotations (readOnlyHint). All tools are read-only but lack explicit annotation. Agents cannot infer safety without annotations.