A FastAPI-based MCP server that provides RAG search and web search tools for a voice-driven product discovery agent. Integrates with ChromaDB for vector search and Brave Search API for live web results.
Two tools with basic schemas and descriptions, but significant gaps in parameter documentation, error handling, and output schema clarity. Both tools lack descriptions for all parameters (critical violation). Naming is acceptable (verb_noun pattern), but schemas are incomplete. No error recovery guidance, no pagination support despite potentially large result sets, and no output schema documentation. This server falls in the 'poor' category with major issues typical of early-stage implementations.
Search the RAG index (ChromaDB collection 'amazon2020') for products matching a query with optional filters and top-k results.
Search the web using Brave Search API for live product information and availability.
All input parameters lack descriptions. 'query', 'top_k', and 'filters' have no guidance on format, constraints, or usage. LLMs cannot infer parameter meaning from names alone.
No output schema documented. Callers cannot know what fields to expect (e.g., does rag.search return 'doc_id' or 'id'? Does web.search include 'availability'?). LLMs must guess downstream field names.
No error handling or recovery guidance. If Brave API fails, web.search silently returns []. If ChromaDB query fails, rag.search will crash. No actionable error messages for LLM retry logic.
No pagination or result limits documented. rag.search and web.search both accept top_k but do not document max values, default behavior, or how to handle large result sets. Unbounded results risk context window exhaustion.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | 2026-07-28+ | v2 |
Tool descriptions are generic and lack WHEN/WHY guidance. 'Search the RAG index' does not explain when to use rag.search vs web.search, what data is indexed, or what queries work best. LLMs cannot disambiguate.