Skip to main content
Glama
andronaft

health-os

log_meal

Log a meal into the diary (auto-approved). description — the meal description (required); meal_type: breakfast/lunch/dinner/snack/drink; eaten_at=ISO 'YYYY-MM-DD HH:MM' (default — now).

Instructions

Log a meal into the diary (auto-approved). description — the meal description (required); meal_type: breakfast/lunch/dinner/snack/drink; eaten_at=ISO 'YYYY-MM-DD HH:MM' (default — now). nutrients — {code: amount} per nutrient_types (energy_kcal/protein/carbs/fat/fiber/sugar/ added_sugar/saturated_fat/omega3/sodium/potassium/calcium/iron/magnesium/zinc/vitamin_a/ vitamin_c/vitamin_d/vitamin_b12/folate_b9/water/caffeine/alcohol/...). added_sugar — sugar ADDED to the dish (not natural from fruit/milk). The full-profile estimate is made by the model (including from a photo). glycemic_index/glycemic_load — per meal; symptoms/wellbeing — reaction after eating. Daily totals go by the date of eaten_at: when the user logs a meal later (e.g. lunch in the evening, yesterday's dinner after midnight), pass when it was eaten, not now; a time_check in the response means the time looks wrong — confirm it with the user. Review — query_food; daily norms — query_nutrition.

Input Schema

NameRequiredDescriptionDefault
notesNo
portionNo
eaten_atNo
symptomsNo
meal_typeNo
nutrientsNo
wellbeingNo
descriptionYes
glycemic_loadNo
glycemic_indexNo
nutrient_sourceNomodel_estimate

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.2.0

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare write, non-idempotent, non-destructive. The description adds real value beyond them: 'auto-approved' signals no review queue, and it discloses the time_check response signal and that daily totals are attributed by eaten_at date. It does not cover duplicate handling or what happens on a repeated log, which matters given idempotentHint=false.

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

Conciseness3/5

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

Core instruction is front-loaded, but the nutrient code enumeration consumes most of the text and the inline em-dash lattice ('nutrients — {...}; added_sugar — ...') reads as run-on. The volume is justified by the 0% schema coverage, but it could be tighter.

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-param mutation with an output schema present, the description covers what the agent must know to call it correctly: required field, formats, defaults, the estimate-by-model expectation. Only the auxiliary fields (notes, portion, nutrient_source) lack any explanation.

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?

With 0% schema coverage across 11 params, the description carries the load and mostly succeeds: it enumerates meal_type values, gives the eaten_at ISO format and default, spells out the nutrients map keys against a long list of nutrient codes, and explains the non-obvious added_sugar distinction and per-meal scope of glycemic_index/load. notes, portion, and nutrient_source are left undefined.

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

Purpose4/5

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

Opens with a specific verb+resource: 'Log a meal into the diary', plus a state qualifier '(auto-approved)' that tells the agent the entry is committed immediately rather than staged. It clearly implies a create operation, distinguishable from sibling update_meal/delete_meal, though those are never named.

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

Usage Guidelines4/5

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

Gives concrete usage context: pass eaten_at as when the meal was actually eaten when logging retrospectively, and confirm with the user if the response contains a time_check. It also routes adjacent needs to siblings ('Review — query_food; daily norms — query_nutrition'). No explicit when-not-to-use or guidance on choosing between log_meal and log_from_template.

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