Clinical Copilot MCP starter server for structured healthcare AI tools.
ClarusMCP defines 3 tools with basic descriptions and string-only parameters. All tools have descriptions (10-100 chars, meeting minimum), but parameter schemas are minimal, each tool accepts only a single string input with no type constraints, enums, or validation guidance. Output schemas are defined in schemas.py (ClinicalSummaryResponse, MedicationDetail, etc.) but are NOT visible in the tool registration itself; LLMs cannot infer return structure from the @mcp.tool() decorators. Tool names follow verb_noun convention (generate_, explain_) but are generic and lack specificity about domain or action. No error handling guidance, no pagination, no idempotent hints. Schemas exist but are decoupled from tool definitions, reducing discoverability.
Identify conservative, non-diagnostic clinical risk signals from patient information.
Explain medications in plain, patient-friendly language.
Generate a structured clinical summary from messy or free-form patient text.
Input schemas lack type constraints and validation guidance. All three tools accept a single string parameter with no enums, patterns, length limits, or format specifications. LLMs cannot infer valid input ranges or formats.
Output schemas (ClinicalSummaryResponse, MedicationDetail, etc.) are defined in schemas.py but NOT attached to tool definitions. LLMs cannot discover what fields to expect from tool responses without reading separate schema files.
No error handling guidance. Tools return dict[str, Any] with potential 'error' keys, but descriptions do not explain error conditions, recovery steps, or when to retry. LLMs cannot self-correct on failures.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
Tool names are generic (generate_, explain_) and do not distinguish between clinical vs. medication vs. risk domains. 'explain_medications_tool' vs 'explain_clinical_risk_tool' are similar enough to cause LLM confusion.
Parameter descriptions are minimal (10-30 chars) and lack context about expected input format, length, or structure. E.g., 'Raw patient description...' does not specify if free text, structured fields, or both are accepted.