MCP Demo Server with modular architecture providing math, HTTP, finance, and web tools
Server has 7 tools with basic schemas and descriptions, but significant gaps limit production readiness. All tools have descriptions (10-100 chars, mostly adequate) and input schemas with type definitions. However, output schemas are undocumented, LLMs cannot predict return structures. Error handling is minimal; tools return generic dicts without recovery guidance. Parameter descriptions lack constraints (ranges, enums, formats). No tool annotations (readOnlyHint/destructiveHint). Two WRITE tools (index_document, index_rss_feed) lack confirmation patterns. Naming is verb-first and clear, but some tools (http_request, web_search) are overly generic and could be split. Average tool score: 52/100.
Add two numbers.
Get the current stock price for a given symbol using Yahoo Finance API.
Make an HTTP request to a specified URL.
Index a document in the local search engine.
Crawl and index an RSS feed in the local search engine.
Search the local index for documents matching the query.
Search the web using DuckDuckGo and return relevant results.
Output schemas undocumented. LLMs cannot predict return structure for any tool. E.g., get_stock_price returns Dict[str, Any] with fields like 'symbol', 'price', 'error', not declared in tool definition.
No error recovery guidance. Tools return generic error dicts (e.g., {'error': True, 'message': '...'}) without actionable next steps. LLM cannot distinguish retryable vs fatal errors.
WRITE tools lack confirmation/dry-run pattern. index_document and index_rss_feed modify state without confirmation, risking accidental indexing of wrong content.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | <=2025-11-25 | v2 |
Parameter constraints missing. http_request timeout defaults to 30s but no min/max declared. web_search max_results has no bounds (could be 1 or 1000000). Enums not used for method (GET|POST|etc).
No tool annotations. Tools marked READ_ONLY in metadata but not exposed via readOnlyHint in schema. WRITE tools lack destructiveHint. Agents cannot infer safety properties.