A Master Patient Index (MPI) system exposing patient record management via MCP tools, built on Rails with FHIR models integration
Strong FHIR-domain implementation with clear naming, comprehensive schemas, and good parameter documentation. All 8 tools have explicit descriptions and structured JSON schemas with type definitions. Most tools follow verb_noun naming convention (create_patient, read_patient, update_patient, list_patients, find_patient, link_patients, unlink_patient, automatch_patients). Schemas are well-formed with enum constraints on gender and sort fields. However, several output schemas are not documented in the provided source, and error handling guidance is minimal. Parameter descriptions are above average but could include more actionable constraint details (e.g., UUID format, ISO 8601 validation rules). No security issues noted with parameter handling, no credentials exposed. Tool composition is sound: each tool has a single responsibility and outputs include IDs for chaining (patient_uuid). Descriptions average ~120-180 characters, well within the 10-1024 optimal range.
Run the patient identity matching engine to automatically link probable duplicate records. If patient_uuid is provided, finds matches only for that patient. Otherwise runs a global match over all patients.
Create a new patient record in the Master Patient Index.
Find the first patient record matching the given attribute filters. Only the first match is returned; other matching records may be excluded. Use `list_patients` to retrieve all matches. No attribute (including SSN, passport, or driver's license) is guaranteed unique.
Link two patient records as having the same identity (has_same_identity_as). The link is bidirectional.
List patient records from the Master Patient Index with optional sorting, limiting, and filtering on any field.
Read a single patient record from the Master Patient Index by UUID.
Output schemas not documented. Responses for all tools (create_patient, read_patient, list_patients, etc.) lack documented return types, forcing LLMs to guess at response structure. This violates the baseline that 100% of A+ tools have documented return types and blocks multi-step tool composition planning.
No error handling guidance in tool descriptions. Tools do not document what errors can occur, whether they are retryable, or what the LLM should do on failure (e.g., 'UUID not found' or 'invalid gender enum'). Baseline A+ pattern requires error responses to guide recovery.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 79 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | 2025-06-18+ | v1 |
Remove all identity links for a patient record, fully isolating it from any linked identity group.
Update demographic information on an existing patient record in the Master Patient Index.
Parameter constraints not fully described. While enums are present for gender and sort fields, other string parameters (first_name, last_name, email, phone_number, SSN, passport, driver_license) lack format descriptions, length limits, or validation rules. E.g., 'SSN' should document format (9 digits, no dashes) and whether it accepts partial matches.
find_patient returns only 'first match' but does not document what happens when multiple matches exist or provide pagination. list_patients has limit/offset but find_patient is a discovery dead-end if multiple candidates match. Description states 'other matching records may be excluded' but offers no guidance on handling ambiguity.
No confirmation or dry-run for destructive operations. link_patients, unlink_patient, and automatch_patients are DESTRUCTIVE/WRITE operations with irreversible side effects (patient record merging, identity isolation) but lack a confirmation step or dry-run preview. Agents can make irreversible mistakes without warning.
Date format not validated in descriptions. birth_date parameter accepts 'ISO 8601 date, e.g. 1990-01-15' but no schema validation regex or error message is documented. LLMs may pass invalid dates, and the error response is not specified.