Blood Pressure Tracker with MAP Calculation - A healthcare assistant specialized in blood pressure monitoring that parses natural language readings and saves them using MCP tools
The server provides 7 tools with reasonable naming conventions (verb_noun structure: create_reading, delete_reading, etc.). However, descriptions vary significantly in quality and completeness. Some tools have good usage guidance (e.g., bp_create_reading includes 'USE THIS whenever...'), while others are minimal (e.g., root, bp_calculate_map). Parameter schemas are present and mostly well-typed, but several critical issues emerge: (1) many descriptions lack detail about dependencies between parameters or constraints; (2) output schemas are completely undocumented, we cannot verify what fields are returned; (3) error handling guidance is absent; (4) no tool annotations (readOnlyHint, destructiveHint) despite clear WRITE/DESTRUCTIVE risk levels being assigned. The 'root' tool is essentially metadata noise and adds no user value. Date/time parameters (after_time, before_time) lack format specifications in descriptions. Overall, this reads like a functional but unpolished implementation lacking production-grade documentation and error modeling.
Calculate Mean Arterial Pressure
Create a new blood pressure reading USE THIS whenever the user mentions saving a blood pressure, BP, reading (e.g., '120/80'). Extract systolic, diastolic, notes, and heart rate from the text.
Delete a blood pressure reading USE THIS whenever the user mentions deleting a blood pressure, BP, reading. Extract only the ID from the text. Do not delete a record if the ID is not present.
Calculate average blood pressure readings for a time period USE THIS whenever the user mentions retrieving average blood pressure, BP, readings. Extract the date and time range, if supplied, from the text, or use defaults.
Retrieve recent blood pressure readings USE THIS whenever the user mentions retrieving blood pressure, BP, readings. Extract systolic, diastolic, MAP, and heart rate from the text.
Update an existing blood pressure reading USE THIS whenever the user mentions updating blood pressure, BP, readings. Extract only the systolic, diastolic, note or heart rate from the text.
Output schemas completely missing. No documentation of what fields any tool returns. LLMs cannot plan multi-step workflows or extract the right data from responses.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (WRITE, DESTRUCTIVE). This prevents agents from understanding which tools are safe to retry.
Date/time parameter formats (after_time, before_time, after_date, before_date) are mentioned in descriptions as 'HH:MM' or 'YYYY-MM-DD' but lack machine-readable constraints (e.g., JSON Schema pattern field) and comprehensive guidance in parameter descriptions.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | <=2025-11-25 | v2 |
Return root endpoint information.
No error handling guidance. Tools lack descriptions of failure modes and recovery steps. E.g., what if bp_read_readings finds no data? What if reading_id is invalid in bp_update_reading?
bp_read_readings defaults to limit=1000, which will cause token bloat and context window exhaustion. Should cap at 20-50 and document pagination strategy.
No pagination fields in documented schemas (no total_count, next_cursor, or has_more). Tools returning lists cannot support large result sets.
root tool adds no value. It's metadata bloat that wastes agent reasoning and response tokens. Should be removed from tool registration or hidden via a discovery endpoint.
Parameter interdependencies undocumented. E.g., bp_get_average_readings accepts both 'days' and 'after_date'/'before_date', are they mutually exclusive? What wins if both are passed?
bp_calculate_map description is generic and doesn't explain when an agent should call it vs retrieving raw readings. No output spec (does it return just the MAP value, or a structured object with calculation details?).