Multi-agent RAG (Retrieval-Augmented Generation) server for legal document processing with semantic search, deadline extraction, document classification, and validation using Claude, Gemini, and vector embeddings
This RAG MCP server has 10 tools with mostly adequate naming and descriptions, but suffers from inconsistent schema documentation, missing parameter constraints, and weak error handling guidance. Tool names follow verb-noun conventions (search_documents, index_document, get_database_stats) which is good. Descriptions are generally present and exceed the 20-character minimum, ranging from 100-200 characters. However, several tools have incomplete schemas (get_database_stats and get_document_stats have empty input objects but are listed as having properties). Output schemas are not documented. Error handling is minimal, no guidance on retryability, user-fixable vs fatal errors, or recovery steps. The server mixes read-only and destructive operations without strong permission separation or dry-run patterns. Some parameter naming could be more explicit (e.g., 'query' vs 'query_text', 'num_results' lacks min/max bounds). The clear_database tool is concerning, it requires confirmation but lacks richer error messaging or audit trail hints.
Perform strategic analysis of deadline risk based on current deadline statistics. Provides insights, action items, and risk assessment.
Delete ALL documents from the Supabase database. WARNING: This action cannot be undone! Use only for testing or complete database resets.
Extract deadlines and due dates from any text using AI. Automatically calculates working days remaining and assigns risk levels. Use this for emails, meeting notes, project plans, or any text containing time-sensitive information.
Get statistics about the Supabase vector database including total number of indexed document chunks and database configuration.
Retrieve all stored deadlines filtered by risk level. Risk levels: overdue (past deadline), critical (≤2 days), high (3-5 days), medium (6-10 days), low (>10 days).
Two tools have empty input schemas (get_database_stats, get_document_stats) with properties defined as {}, schemas are incomplete and provide no parameter guidance
Output schemas are not documented for any tool. LLMs cannot predict return structure, forcing them to guess at available fields and risk parsing errors.
Numeric parameters lack explicit bounds. 'num_results' has default 5 and max 20, but no minimum stated. 'chunk_size' defaults to 1000 but no range constraints visible. 'days' in get_upcoming_deadlines defaults to 7 with no documented bounds.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 55 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Get statistics about classified documents including counts by type.
Get all deadlines occurring within the next N days.
Add a new document to the Supabase vector database. The document will be split into chunks, converted to embeddings, stored for semantic searches, AND automatically classified by document type with entity extraction.
Search through indexed documents using semantic similarity. Returns the most relevant document chunks for a given query. This uses AI embeddings to find contextually similar content, not just keyword matches.
Search documents by type, matter ID, or text query. Returns classified documents with metadata.
Error handling guidance is absent. No indication of retryability, error categories, or recovery hints. For example, clear_database silently succeeds or fails with no guidance to the LLM on what went wrong or what to do next.
The clear_database tool is destructive but lacks a dry-run or multi-step confirmation pattern. It only requires a boolean 'confirm' flag, no audit trail hint, no recovery guidance, no logging directive.
Parameter descriptions occasionally use example values (e.g., 'source_id' says 'e.g. email-123, meeting-notes-2024-11') which LLMs may copy literally. Should rely on format constraints instead.
Field naming consistency unclear. 'search_documents' returns chunks but field names not specified. 'search_documents_by_type' has 'metadata' but structure unknown. This prevents tool composition, if create_document returns doc_id and search_documents_by_type expects document_id, agents face a mismatch.
get_database_stats and get_document_stats return bare statistics but lack guidance on interpretation or next steps. No indication of when to call them or what actions follow.