An MCP server exposing a local document retriever (BM25-based RAG) as tools for searching and listing documents
Two tools with basic descriptions and minimal schemas. search_docs has a reasonable description (145 chars) explaining purpose and output format, but lacks output schema documentation. list_documents has a trivial description (71 chars) with no parameters and no output schema. Neither tool declares input validation constraints, error handling guidance, or pagination limits. Parameter descriptions are present but generic. No tool annotations (readOnlyHint, idempotentHint). Schemas are minimal JSON with type and description only, no constraints, enums, or ranges. This is typical of educational/demo MCP servers but falls short of production quality.
List the documents currently available to search in the local corpus.
Search the user's local documents and return the most relevant passages. Each passage is prefixed with its source as ``[filename:page]`` so the model can cite it. Call this to ground answers in the user's own files instead of relying on training data.
No output schema documented for either tool. LLMs cannot plan downstream calls or extract structured data without knowing response fields.
search_docs lacks pagination parameters (limit, offset, page) and result count. Returning unbounded results risks context window exhaustion.
No error handling guidance. Tools do not describe what happens on failure (no documents found, invalid query, file read errors) or how to recover.
list_documents description is trivial (71 chars, below 100-char minimum). Does not explain what structure is returned or when to call it.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2026-07-28+ | v2 |
No tool annotations. search_docs and list_documents should declare readOnlyHint=true to signal they are safe for agents to call without confirmation.