Skip to main content
Glama
andronaft

health-os

update_meal

Idempotent

Correct a logged meal: food_log_id from query_food; pass only what to change (empty = keep). eaten_at 'YYYY-MM-DD HH:MM' moves it to the right day (daily totals go by its date); nutrients {code: amount} overwrites just those codes, the…

Instructions

Correct a logged meal: food_log_id from query_food; pass only what to change (empty = keep). eaten_at 'YYYY-MM-DD HH:MM' moves it to the right day (daily totals go by its date); nutrients {code: amount} overwrites just those codes, the rest of the profile stays — e.g. the user ate half: pass the halved amounts. To remove a meal logged by mistake or twice use delete_meal.

Input Schema

NameRequiredDescriptionDefault
notesNo
portionNo
eaten_atNo
symptomsNo
meal_typeNo
nutrientsNo
wellbeingNo
descriptionNo
food_log_idYes
glycemic_loadNo
glycemic_indexNo

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.3.0

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-destructive, idempotent mutation; the description adds real semantics beyond that: empty fields are preserved, eaten_at re-dates the entry and shifts daily totals, and nutrients is a partial overwrite rather than a replacement. It omits error behavior for an unknown food_log_id, keeping it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the verb and identifier requirement, then layers the merge rule, date semantics, and the sibling pointer. Dense but every clause carries operative information; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter mutation tool, the description plus annotations and an output schema give an agent enough to call it correctly. Only individual semantics for the plain string fields and failure modes are unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden — it documents food_log_id, the eaten_at format 'YYYY-MM-DD HH:MM' with its effect on daily aggregation, and the nutrients {code: amount} merge behavior with a worked halving example. The remaining fields (notes, symptoms, portion, meal_type, wellbeing, description, glycemic_*) are only covered by the general 'empty = keep' rule.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb + resource ('Correct a logged meal'), with the required identifier source named (food_log_id from query_food). It also differentiates from the sibling delete_meal, so an agent can route correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use it (correcting a logged meal), how partial updates work ('pass only what to change (empty = keep)'), and names the alternative for the other case ('To remove a meal logged by mistake or twice use delete_meal').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.