This healthcare MCP server demonstrates solid foundational structure with 15 well-defined tools across patient data access, medical literature search, and drug information. All tools have explicit names, descriptions, and input schemas defined in src/server/constants/tools.ts. However, several dimension 1 gaps prevent higher scoring: (1) Output schemas are completely undocumented, no tool definition includes what fields will be returned, forcing LLMs to guess at response structure; (2) Parameter descriptions are sparse or generic, most parameters like 'patientId' lack context about format or validation; (3) No error handling guidance is evident in tool definitions; (4) Most parameter descriptions under 50 chars lack the actionable context (format, constraints, examples) needed for robust LLM reasoning. The tool set is well-composed (clear verb_noun naming, single responsibility), but lacks the depth of documentation required for A-grade production use. Average tool score is 58, dragged down primarily by missing output schemas and shallow parameter annotations.
Search for a patient by demographics
Get Drug details by a generic name
Get patient's Appointments
Get patient's lab results
Get patient's medication history including changes
Get allergies and intolerances for a patient
Get care plans for a patient
No output schemas documented for any tool. Tool definitions specify only inputSchema; LLMs cannot infer what fields will be returned or how to parse responses. This violates the 100% baseline that all A+ tools document return types.
Parameter descriptions are minimal or absent. Examples: 'patientId' has no description anywhere; 'timeframe' is described only as 'e.g., 3m, 6m, 1y, all' without explaining format, validation, or valid values; 'code' is described as 'LOINC or SNOMED code' but lacks example or validation rules. This violates the 100% baseline that all A+ tool params have descriptions.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 58 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 38 | - | v1 |
Get medical conditions/diagnoses for a patient
Get healthcare encounters/visits for a patient
Get medication orders for a patient
Get observations (vitals, labs) for a patient
Get procedures performed on a patient
Get patient's vital signs history
Search PubMed for medical literature
Search ClinicalTrials.gov for relevant studies
Enum constraints lack enforcing descriptions. Parameters like 'status' appear in 10+ tools with different valid values (e.g., get_patient_encounters: 'planned|arrived|in-progress|finished|cancelled' vs get_patient_conditions: 'active|inactive|resolved') but descriptions do not hint that these are constrained enums or what each value means contextually.
No pagination guidance. Tools returning lists (e.g., get_patient_observations, get_patient_medications, get_lab_results) lack limit, offset, page_size, or cursor parameters. No mention of max result counts or what happens when results exceed context. This violates the paginated-result pattern.
No error handling or recovery guidance in tool definitions. Tool descriptions do not mention what errors are retryable, how to handle missing data, or what to do if a patient ID is invalid. This violates the recovery-guide and error-classification patterns.
Hyphenated tool names (search-pubmed, search-trials, get-drug-info) deviate from verb_noun convention (search_pubmed, search_trials, get_drug_info). While technically valid, underscore is standard in 90% of production tools and avoids shell/CLI quoting issues.
Description lengths vary widely and lack consistent LLM optimization. Tool descriptions range from 40 - 85 chars (e.g., 'Get Drug details by a generic name' = 35 chars, below optimal 50-200 char range). Descriptions should include WHEN to use the tool, not just WHAT it does.
No sensitivity-aware parameter naming. Parameters like 'patientId' are generic and lack type hints. According to best practices, parameters should suffix with type (patientId vs patient_id_fhir for clarity).