Medical MCP Server with document processing, enhanced NER, and vector search capabilities using BioClinical-Server, local embeddings, and MongoDB
This server has significant definition quality gaps. While 13 tools have well-structured schemas with proper type definitions and descriptions (tools 1-13: uploadDocument through semanticSearchGoogle), 6 legacy tools (14-19) have severely incomplete schemas with minimal or missing parameter descriptions. Average tool definition quality is mediocre due to schema incompleteness in legacy tools, missing output schema documentation across all tools, and weak error handling guidance. The server demonstrates a two-tier architecture: newer medical-specific tools are reasonably well-defined, but legacy compatibility layer is poorly specified. Additionally, the server lacks tool annotations (readOnlyHint/destructiveHint) which are important for agent safety.
Analyze patient medical history with timeline, summary, or trends analysis
Split a large document into chunks and generate embeddings for each chunk using Google Gemini
Split a large document into chunks and generate embeddings for each chunk using local transformer
Extract medical entities from text or a stored document using Clinical-AI-Apollo/Medical-NER model
Legacy compatibility tool for extracting medical entities
Legacy compatibility tool for extracting text from stored documents
Find similar medical cases based on patient data or document content
Legacy tools (6 of 19) have severely incomplete schemas. Tools 14-19 define only 1-2 parameters with minimal type information and trivial descriptions (<20 chars). Example: 'upload_document' accepts only {title: string} despite the modern uploadDocument accepting metadata, content, filePath, fileBuffer. This forces users to call the modern version.
No output schemas documented for any of the 19 tools. LLMs cannot predict return types, field names, or structure. This violates the 100% baseline for A+ tools and forces LLMs to guess what fields are available, risking downstream failures when chaining tools.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 57 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 53 | - | v1 |
Generate a vector embedding from text using Google Gemini and store it in MongoDB
Generate a vector embedding from text using local HuggingFace transformer and store it in MongoDB
Get medical insights and recommendations based on query and patient context
Legacy compatibility tool for retrieving patient summary
List medical documents with optional filtering and pagination
Search medical documents using semantic similarity and text matching
Legacy compatibility tool for searching documents by diagnosis
Search for semantically similar document chunks using Google Gemini embeddings and vector similarity
Search for semantically similar document chunks using local embeddings and vector similarity
Legacy compatibility tool for semantic search
Upload and process a medical document with automatic text extraction, BioClinical NER, and local embedding generation
Legacy compatibility tool for uploading and processing medical documents
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. WRITE operations (uploadDocument, generateEmbeddingLocal, generateEmbeddingGoogle, chunkAndEmbedDocument variants) lack the destructiveHint or idempotentHint flags. READ operations lack readOnlyHint. This prevents agents from reasoning about operation safety and retry semantics.
Missing error handling and recovery guidance. Tool descriptions do not explain error scenarios, retryability, or what to do if a call fails. Example: uploadDocument does not document what happens if OCR fails, BioClinical extraction returns no entities, or file is corrupted. No guidance for agents on next steps.
Duplicate tools with same functionality. Both 'chunkAndEmbedDocument' (local) and 'chunkAndEmbedDocument' (Google) have identical names and schemas. Agents cannot distinguish between them by name alone. Additionally, legacy 'semantic_search' duplicates 'semanticSearchLocal' and 'semanticSearchGoogle'. This violates single-canonical-name principle.
Parameter descriptions in medical tools lack specificity. Example: 'findSimilarCases' accepts 'limit' with no description of default, range, or units. 'analyzePatientHistory' accepts 'dateRange' object but does not specify date format (ISO 8601? Epoch? Relative?). These vague descriptions force agents to guess at valid inputs.
No pagination guidance in list/search tools. 'listDocuments' accepts limit and offset but does not document max limit, default page size, or total count in response. 'searchDocuments' has limit but unclear if it's capped. Agents cannot determine if they risk truncating large result sets.
Tool naming inconsistencies between modern and legacy variants. Modern tools use camelCase (uploadDocument, searchDocuments), legacy use snake_case (upload_document, search_documents). This creates cognitive load and appears as duplication. Should consolidate to one naming convention.