A Spring Boot MCP server providing medical diagnostics and biometric sensor tools
Server exposes 2 tools with visible schemas and descriptions, but exhibits significant quality gaps. Tool naming lacks action verbs (diagnostator, bioSensor use non-standard conventions). Descriptions are present but generic and lack LLM-optimized context about WHEN to use each tool or what happens on failure. Parameter schemas are properly typed but descriptions are minimal. Output schemas are not documented, callers cannot see what fields bioSensor returns or how to chain results. The server relies on deprecated Sampling pattern (McpSchema.CreateMessageRequest within tool logic) rather than direct integration, indicating older spec alignment. No error handling guidance, no output field documentation, no idempotency hints. Tool composition is weak: diagnostator performs inline sampling (model calls within tool) rather than returning structured data for agent composition.
Returns the current heart rate of the user as a map of pulse, state and sleepDeprivation
Используется для получения диагноза по имени человека. Всегда возвращает либо название болезни, либо сообщение, что человек ничем не болеет.
Tool names do not start with action verbs. 'diagnostator' and 'bioSensor' are non-standard. Should be 'get_diagnosis' or 'diagnose_patient', and 'get_heart_rate' or 'get_vital_signs'. LLMs infer intent from the verb, non-standard names force explicit description reading.
Output schemas not documented. bioSensor description says 'Returns the current heart rate of the user as a map of pulse, state and sleepDeprivation' but the actual field names, types, and ranges are not specified in code or comments. Callers cannot plan downstream tool usage or validate results.
diagnostator performs synchronous model sampling inside the tool logic via requestContext.sample(). This is deprecated behavior, server is embedding LLM coordination logic into tools rather than returning structured data for agent composition. Tools should be pure functions that return data; sampling/reasoning should occur at the agent level.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 40 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 24 | - | v1 |
Parameter descriptions are minimal. 'numberOfDays' for bioSensor lacks range (what's the valid min/max?), unit clarification, or default value. 'name' for diagnostator lacks guidance on format (full name? last name only? unicode handling?). Descriptions must be actionable for LLM parameter binding.
No error handling guidance. If diagnostator receives a blank name (code throws IllegalArgumentException), there is no documented recovery path or user-friendly error message for the LLM. What should the agent do? Retry? Prompt user? Call a different tool?
No idempotency or destructiveness hints. diagnostator may perform state-modifying operations (logging diagnoses, updating patient records) but provides no readOnlyHint/destructiveHint annotations. Agents cannot determine safe retry strategy.
Tool descriptions lack WHEN-to-use context. 'Используется для получения диагноза по имени человека' (Russian text) is translatable but generic. No mention of prerequisites (Must patient be in system first? Can names be partial?), constraints (What if multiple patients share a name?), or cost (does calling this consume credits or incur delays?).