NutritionAssistant MCP has 8 tools with basic naming and descriptions, but lacks depth in parameter documentation, output schema clarity, and error handling guidance. Tool names follow verb_noun convention (calculate_macros, log_meal, remove_meal), which is good. However, descriptions are minimal (10-150 chars), parameter constraints are stated informally in descriptions rather than as structured schemas, and there is no guidance on error recovery. The server is built on fastmcp/HTTP, which is current for transport, but the tool definitions lack the rigor expected of production-grade tools. Average per-tool score: 58/100.
Calculate BMI and return the value with health category. Weight in kg, height in cm.
Calculate total calories and macro percentage split. All values must be >= 0.
Calculate Total Daily Energy Expenditure (Mifflin-St Jeor). gender: 'male' or 'female' activity_level: sedentary | light | moderate | active | very_active
Get a 7-day macro and calorie summary from logged meals.
List all auto-booked doctor appointments.
Log a health complaint. Severity must be 1-10. If severity >= 7, a doctor appointment is automatically booked at the best hospital.
Output schemas not documented. Tools return unstructured JSON strings (get_weekly_report, list_appointments) or dict/string without field specification (calculate_macros, calculate_bmi, log_meal, log_complaint). LLMs cannot plan downstream operations or extract required fields.
Parameter constraints are informal text in descriptions ('>=0', '>0', '1-10', 'non-empty') rather than structured JSON Schema (minimum, maximum, minLength, enum, pattern). Constraints are not machine-parseable and LLMs may not enforce them.
No error handling guidance or recovery patterns. When a meal is not found (remove_meal), the error is silent ('Meal ID X not found'). No actionable guidance like 'Try get_weekly_report() to see available meal IDs.' Agents have no next step (pattern:recovery-guide).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 67 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 10 | - | v1 |
Log a meal to the database. Name must be non-empty, macros must be >= 0.
Delete a meal from the database by its ID.
Destructive and state-mutating operations lack confirmation. log_complaint auto-books a doctor appointment at severity >= 7 with no confirmation step. remove_meal deletes permanently with no dry-run or undo. Both should support a confirmation pattern (pattern:confirmation-request).
Result limits and pagination not documented. get_weekly_report and list_appointments return all results with no mention of limits, pagination, or when results might be large. Should state 'Returns up to 50 most recent appointments; use offset/limit for pagination.'
Descriptions are too brief and lack context. Multiple tools (get_weekly_report, list_appointments, remove_meal, calculate_bmi) have descriptions under 50 characters with no explanation of when to use them or what data they provide. Baseline for production tools is 194 chars average (p10=34, p90=392).
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) not present. The MCP spec supports annotations to signal tool intent; this server does not use them. calculate_macros and calculate_bmi should have readOnlyHint=true; remove_meal should have destructiveHint=true.