A production-grade MCP server that exposes research capabilities as reusable tools consumable by Claude Desktop, LangGraph agents, or any MCP client. Provides web search, news search, Wikipedia knowledge base, and query enhancement tools powered by Tavily and OpenAI APIs.
Server has 9 tools with complete schemas and descriptions, but quality is uneven. All tools have verb-noun naming (search_*, read_*, get_*, find_*, enhance_*, health_check) and descriptions (avg ~80 chars). Input schemas are present with type definitions. However, descriptions are terse (10-60 chars), lacking WHEN/WHY context and dependency hints. Output schemas are not documented, LLMs cannot predict response structure for chaining. Error handling is absent from visible code; no recovery guidance. Parameters lack constraints (enums, ranges, format specs). No tool annotations (readOnlyHint, idempotentHint). Composition is reasonable, tools are single-purpose and chainable (e.g., search_web → get_sources → read_wiki_article). Security: API keys injected via environment, not exposed as parameters (good). Overall: functional but below production baseline for agent-facing tools.
Multi-query research with deduplication
Use GPT-4o to expand a vague query into better search terms
Discover related topics for research expansion
Extract and deduplicate source URLs from prior results
Server health, API connectivity, and rate-limit status
Read a full Wikipedia article by title
Recent news articles filtered by recency
Output schemas not documented. LLMs cannot predict response structure (fields, types, nesting) for downstream tool chaining. E.g., search_web returns what? Array of objects with url/title/snippet? Does get_sources expect that exact structure?
Descriptions are terse (10-60 chars) and lack WHEN/WHY context. E.g., 'General web search with structured results' does not explain when to use search_web vs search_news vs deep_search. Baseline: 194 chars avg for A+ tools.
Parameters lack constraints. 'max_results' and 'days' have no min/max bounds. 'topic' in find_related_topics has no format guidance. LLMs may pass absurd values (max_results=10000, days=999999).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 69 | <=2025-11-25 | v2 |
General web search with structured results
Search Wikipedia and return article summaries
No error handling guidance visible in code. If Tavily API fails, what does the tool return? How should the LLM recover? No recovery guides, error classification, or actionable error messages.
No tool annotations (readOnlyHint, idempotentHint). All tools are read-only, but this is not declared. Agents cannot infer safety properties without explicit hints.