A multi-agent deep research system built with LangGraph that performs web search, planning, and report synthesis with human-in-the-loop approval
DeeperResearch exposes 4 tools with partial schema coverage. web_search has a complete input schema with 6 parameters, all typed and described. However, 3 internal tools (_call_anysearch_api, _translate_keywords_to_english, _extract_sources_from_text) appear to be implementation details rather than user-facing tools, they lack proper tool registration patterns and should not be exposed. Tool descriptions are moderate (100-200 chars) but lack actionable guidance on when to use each tool vs. alternatives. No output schemas are documented. Error handling is minimal, API failures log but return empty lists without recovery guidance. No tool annotations (readOnlyHint, destructiveHint) despite all tools being read-only. Parameter descriptions are present but generic (e.g., 'Search query string' lacks format/length constraints). The server conflates internal helper functions with public tools, violating single-responsibility and composition patterns.
Low-level AnySearch API client for web search with support for zone (cn/intl) and language parameters
Extracts source URLs from LLM response text using regex patterns for Markdown links, footnotes, and bare URLs
Lightweight keyword translator that converts Chinese search queries to English for international search optimization
Unified web search interface supporting domestic (Chinese) and international (English) search engines via AnySearch API, with automatic keyword translation and LLM-based content summarization
Internal helper functions exposed as public tools. _call_anysearch_api, _translate_keywords_to_english, and _extract_sources_from_text are implementation details (prefixed with _) and should not be registered as MCP tools. They violate the single-responsibility pattern and confuse agents about which tool to call.
No output schemas documented. Tools return SearchResult objects (Pydantic BaseModel) but the MCP tool definitions do not declare the output schema. Agents cannot plan downstream operations or extract fields without trial-and-error.
Missing tool annotations. All 4 tools are read-only (no state modification), but none declare readOnlyHint=true. Agents cannot distinguish safe tools from destructive ones without explicit hints.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | <=2025-11-25 | v2 |
Error handling returns empty lists on API failure without recovery guidance. When AnySearch API fails (status != 200 or exception), the tool logs an error and returns [], leaving the agent unaware of the failure. No actionable error message or retry guidance.
Parameter descriptions lack format constraints. 'query' is described as 'Search query string' but does not specify length limits, character restrictions, or examples. 'max_results' defaults to 5 but no min/max bounds are declared.