A minimal MCP server for document processing and search with multi-language support
Server has 6 tools with minimal schema and parameter documentation. While tool descriptions exist in package.json, actual input/output schemas are not visible in the provided source code. The simple_mcp_server.py file is truncated, preventing verification of actual tool implementations, parameter schemas, error handling, and output structures. Tool names are verb-prefixed (scan_, search_, list_, get_) which is positive, but descriptions lack actionable context for LLM selection. No evidence of pagination support, output schema documentation, error guidance, or parameter descriptions beyond the bare tool summary. None of the tools show input parameter documentation, only search_documents and search_documents_regex hint at parameters in the metadata, but schemas are not shown. No evidence of output schema definition or error handling patterns.
Get the full content of a specific document
Get statistics about the document collection
List all processed documents with their metadata
Scan and index all documents in the documents directory
Search for text within the indexed documents
Search for text using regular expressions
No input parameter schemas visible for 4 of 6 tools. Only search_documents and search_documents_regex show parameter hints in metadata, but full JSON Schema definitions with type and description fields are not visible in source code. Per HARD SCORING RULES, tools without visible input schemas must score 0 on schema dimension.
Tool descriptions in package.json are extremely brief (10-15 words) and lack actionable context. Descriptions do not specify WHAT the tool returns, WHEN to use it instead of similar tools, or any prerequisites. For example, 'Scan and index all documents in the documents directory' does not explain: Does it replace the index? Is it idempotent? What output format is returned? Per pattern:tool-description, descriptions should be 50-200 characters and answer what/when/why.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 41 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 40 | - | v1 |
No visible output schema documentation. The source code is truncated after the extract_text_from_docx() method definition. Without seeing the actual tool handler implementations and return statements, it is impossible to verify that output structures are documented or that responses include required chaining IDs (e.g., does search_documents return a document_id that get_document_content accepts?). Per pattern:tool, output schemas must be documented.
Parameter descriptions missing for search_documents (query param) and search_documents_regex (pattern param). Descriptions exist in the metadata but lack detail about format constraints, valid ranges, or examples. 'The text to search for in the documents' and 'The regular expression pattern to search for' do not specify: What character encoding? Are regex flags supported? What happens if the pattern is invalid? Per pattern:tool-description, every parameter needs a substantive description explaining what it controls and how to provide valid input.
No error handling documentation visible. The code snippet shows exception handling in extract_text_from_pdf() (try/except with logger.error), but there is no evidence of structured error responses that guide LLM recovery. Per pattern:recovery-guide, errors must tell the LLM what to do next, categorize as retryable/user-fixable/fatal, and include the invalid value and constraint violated.
No pagination support visible. The list_documents tool provides no limit, offset, or cursor parameters, and search_documents returns no pagination info. Per pattern:paginated-result, tools returning lists must accept page/offset and limit parameters and return a total count. Without pagination, large document collections will blow the context window.
Parameter for get_document_content (filename) lacks validation constraints. No description clarifies: Are paths traversal attacks prevented? Must the filename be in documents_dir? What happens if a subdirectory is requested? Per pattern:tool-gateway, all agent-provided input must be sanitized against path traversal.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) visible. All 6 tools are READ_ONLY per the metadata, but this is not declared via tool annotations in the MCP schema. Per current spec (2026-07-28), tool annotations should be present in the tool definition to enable proper MCP client behavior.