MCP server that provides a tool to ask questions about uploaded PDF documents using RAG (Retrieval-Augmented Generation) with vector embeddings and LLM-based answers.
Single tool 'rag_ask' has a basic schema with type definitions and a description, but falls short of production quality. Description is 94 chars (within acceptable range but generic). Schema includes two parameters with types and descriptions, but lacks critical metadata: no error handling guidance, no output schema documentation, no parameter constraints (top_k unbounded), and no indication of what 'sources' structure contains. The tool name 'rag_ask' is verb-noun compliant but generic, 'query_documents' or 'search_documents_qa' would be more specific. No tool annotations (readOnlyHint, idempotentHint). Output is free-form text concatenation rather than structured JSON, forcing LLMs to parse unstructured responses. Missing dependency hints (e.g., 'requires documents to be uploaded first'). No guidance on failure modes or recovery.
Ask a question about the uploaded documents. Returns an answer with sources.
No output schema documented. Tool returns free-form text with embedded sources, forcing LLMs to parse unstructured responses. Should return structured JSON with 'answer' (string) and 'sources' (array of {text, score, document_id}) fields.
Parameter 'top_k' is unbounded integer with default=3. No min/max constraints. LLMs could pass absurd values (e.g., top_k=10000) causing performance issues. Should specify range: 1 - 50.
No error handling guidance. Tool catches exceptions and returns raw traceback in response. LLMs cannot determine if error is retryable, user-fixable, or fatal. Should categorize errors and provide recovery hints.
Tool description lacks context on prerequisites and when to use it. Does not mention that documents must be uploaded first via /upload endpoint. Missing dependency hint.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | <=2025-11-25 | v2 |
No tool annotations. Should include readOnlyHint=true (tool does not modify state) to signal to agents that it is safe to call speculatively.