MCP server for Readur document management application with OCR, search, and labeling capabilities
The Readur MCP server demonstrates solid foundational quality with consistent naming conventions, clear descriptions, and proper schema definitions across all 14 tools. All tools follow verb_noun naming (list_, get_, search_, create_, delete_, add_, remove_) which aids LLM intent inference. Descriptions are present for all tools and most parameters. However, several issues prevent a higher score: (1) Some parameter descriptions lack detail about constraints, formats, and ranges, e.g., 'page' and 'pageSize' in list_documents lack minimum/maximum bounds; (2) Output schemas are not documented in the tool definitions, forcing LLMs to infer return structures; (3) Error handling guidance is implemented server-side (errors/index.ts) but not exposed to LLMs through tool descriptions; (4) Some tool compositions could be optimized (e.g., separate search tools vs. unified interface); (5) Security patterns are not documented in tool-level descriptions (e.g., which tools require authentication, what permissions each requires). The server demonstrates awareness of error categorization and recovery guidance (ReadurClientError, formatReadurError), which is a positive signal. Tool descriptions average ~160 chars, which is within the 10-1024 char baseline. Parameter descriptions are present but often generic (e.g., 'Document ID' vs. 'Positive integer, 1 or greater').
Assign a label to a document. Requires both the document ID and the label ID.
Create a new label with a name and optional color and description. The label can then be assigned to documents.
Permanently delete a document by ID. This action cannot be undone.
Perform an enhanced search with richer results including relevance scores, text snippets, and query suggestions for refining searches. Supports filtering by MIME type and tag.
Get full metadata for a single document by ID. Returns title, filename, MIME type, status, page count, file size, hash, and timestamps.
Get all labels assigned to a specific document. Returns each label assignment with the label details.
Output schemas not documented in tool definitions. Tools return structured data but LLMs cannot see the expected fields, types, or structure. Requires agents to infer output format from context.
Numeric parameter constraints (page, pageSize, limits) lack explicit ranges. 'page' and 'pageSize' should specify min/max (e.g., page >= 1, pageSize 1-100). Without bounds, LLMs may pass zero, negative, or excessive values.
Error handling guidance exists server-side but is not reflected in tool descriptions. Tool descriptions do not hint at failure modes, retryability, or recovery steps. Agents cannot anticipate or handle errors intelligently.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 58 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 59 | - | v1 |
Get the OCR-extracted text content of a document. This is the primary tool for reading document contents. Returns the full text and per-page text with confidence scores.
Get available search facets for filtering. Returns MIME types and tags present in the document collection along with their document counts. Useful for discovering filter values before running a search.
List documents in Readur with optional filtering, sorting, and pagination. Returns document IDs, titles, MIME types, statuses, and file sizes.
List all available labels in the Readur system. Returns each label with its ID, name, color, and description.
Remove a label assignment from a document. Requires both the document ID and the label ID.
Retry OCR processing for a document that previously failed or needs reprocessing. Use this after a document OCR failure to attempt extraction again.
Search documents by text query with optional filtering by MIME type and status. Returns matching documents with relevance scores and text snippets showing where the query matched.
Upload a new document to Readur. The file content must be provided as a base64-encoded string. Supported formats include PDF, TIFF, PNG, JPG, and other image formats.
Similar search tools (search_documents vs. enhanced_search) without clear differentiation. Tool descriptions do not explain when to use 'search_documents' (basic) vs. 'enhanced_search' (richer results). LLMs may choose the wrong one.
No explicit idempotent/destructive annotations in input schemas. delete_document and remove_document_label are destructive but schemas do not carry this metadata. Without annotation hints, agents cannot reason about safe retry logic.
Parameter descriptions lack format/constraint details. 'color' in create_label accepts a string but does not specify hex format, RGB, named colors, etc. 'MIME type' filter parameters do not clarify accepted values (application/pdf, image/png, etc.).
No chaining hints in descriptions. Tools that return IDs (e.g., create_label returns a label ID) do not mention which downstream tools accept those IDs. Agents must infer the call chain.