Skip to main content
Glama

log_meal

RECIPE SAVE: intent=create/save recipe not eaten -> save_as_recipe=true, recipe_only=true intent=log eaten meal + save recipe -> save_as_recipe=true, recipe_only=false/omit recipe_only=true -> food_log_write=false; save_as_recipe must be true recipe_only=true -> recipe_title= recipe_only=true -> recipe_servings=<whole-batch servings; default 1> recipe_only=true -> food_items= recipe_only=true -> calories/protein_g/fat_g/carbs_g=<WHOLE-BATCH totals; estimate, never ask> recipe_only=true -> estimate=

Log a meal to the user's food diary. use: logging request or concrete meal consumed. question/habit/hypothetical alone: no write.

INFER:

  • date: today, or from context ("yesterday", "last night"). For an attached meal photo with , use that photo's local date unless the user explicitly states a different date.

  • meal_time: for an attached meal photo with , send that photo's local HH:MM unless the user explicitly states a different time/date. User-stated timing always wins. Otherwise omit unless the user gave a real clock time.

  • meal_type: when meal_time is supplied, OMIT meal_type unless the user's wording explicitly names or clearly anchors a category; the server assigns the category from meal_time. Without meal_time, for a current-day plain meal/food log omit meal_type and let the server assign it from the user's resolved local clock (00-04 Snack, 04-10 Breakfast, 10-14 Lunch, 14-17 Snack, 17-22 Dinner, 22-24 Snack). Send meal_type when the user's wording explicitly names or clearly anchors a category ("breakfast", "for lunch", "post-workout shake"), or when backdating and neither capture time nor another honest clock signal exists.

MACRO SOURCE: strongest evidence wins. Never replace known stored macros with a fresh estimate.

  1. REPEATS (unless a saved recipe is clearly invoked): if the user refers to a previously logged item ("same", "another", "more", "again", or equivalent in any language), call list_meals for the referenced date/range first. If one row unambiguously matches, reuse its stored calories/protein_g/fat_g/carbs_g/alcohol_g and scale by the quantity ratio when the row's quantity is known. If the match or quantity is ambiguous, ask instead of re-estimating. If nothing matches, continue below.

  2. SAVED RECIPES: pass recipe_name whenever the food phrase plausibly names one of the user's saved recipes (see the profile's "Saved recipes" list) -- not only when the user literally says "saved" or "usual"; a bare "morning coffee" should try recipe_name if "Morning Coffee" is one of theirs. recipe_values: Saved macros and nutrients, including estimates and zeros, are authoritative unless explicitly corrected. Scale with recipe_multiplier; combine added_food_items using final meal macros. Estimate only missing values or changed/added foods. Logging never modifies the saved recipe. Relay no-match/ambiguous errors instead of guessing. A recipe's saturated_fat_g/fiber_g are carried automatically when its stored nutrients have them. They are expanded nutrients, never required to log the meal; do not invent them just to satisfy this tool. If the recipe reports missing core macros, estimate only those core fields and retry. If food_items adds food beyond the recipe, pass the combined core macros; expanded nutrients remain optional and are handled by the gated nutrient pipeline when enabled.

  3. BRAND NAMES: for a branded, restaurant, or specific product, use published macros for the stated size/variant before a generic estimate.

  4. Otherwise estimate every macro from the food description. Never ask the user for macros.

MACROS: final stored meal must contain calories, protein_g, fat_g and carbs_g. recipe_name supplies stored core values; estimate and pass only missing core values or explicit changes. Without a recipe, pass food_items and those four. No partial core macros or placeholders. Saturated fat and fiber are expanded nutrients, never required for log_meal. Pass saturated_fat_g/fiber_g only when already known from strong evidence; otherwise omit them. When expanded nutrient tracking is enabled, the gated nutrient estimator can fill them; when disabled they remain unset. 0 is a real value only when the food truly contains none of that nutrient. Ask only if food_items are absent and no recipe_name applies.

FASTING: if the user ate nothing / fasted all day, log one "Fast day" Snack with every macro 0.

ESTIMATE: pass a compact 3-line block estimating every one of the app's 44 tracked nutrients for the food, in exactly this format, no prose before or after: items::|:|... macros:;;;; nutrients:1:;2:;...;44: Estimate all 44 nutrients. Always return all 44 IDs. Never omit one because you are uncertain -- use your best reasonable estimate from the likely food, quantity, ingredients, preparation and comparable foods; 0 only when a nutrient is reasonably expected to be negligible. Which id is which nutrient, and its unit, is the dictionary on the estimate param. Omit for an unchanged saved recipe; with added_food_items, estimate that addition only. Otherwise supply when available; the server estimates missing values.

DUPLICATES: if this tool returns a duplicate error, tell the user what's already logged and ask whether this is a separate serving (retry with force=true) or should update the existing entry instead (update_meal with adjusted values).

DRINKS / HYDRATION: this is the single write path for consumed drinks too. Known or reasonably inferable drink volume (tea, coffee, milk, juice, shakes, smoothies, etc.) → always report fluids, even if also contributes calories/macros/alcohol. Food moisture → omit. The server decides whether hydration tracking is enabled; never use a separate hydration write tool. A plain fluid-only intake may omit food_items and macros and send only fluids. For alcoholic drinks, include that drink's alcohol_g in its fluid item; if there is exactly one drink, the top-level alcohol_g can stand in.

CAFFEINE / DRINKS: this is the single assistant write path for caffeine too. Drinks only; exclude food moisture. When the user consumed a drink and its volume is known or reasonably inferable, include it in fluids so hydration is recorded; if the drink is caffeinated, include caffeine in the same call too. Do not leave a known-volume drink only in food_items. Each caffeine item needs caffeine_mg and may optionally include source_type. The date comes from the intake date. Preserve exact user-provided milligrams; for vague coffee/tea/energy-drink/pre-workout descriptions, estimate caffeine with the same nutrition-estimation judgment used for meal macros. Never use separate hydration or caffeine write tools. A drink-only or caffeine-only intake may omit food_items/macros.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
dateNoYYYY-MM-DD. Omit for today (the server resolves it in the user's own timezone, more reliable than guessing). Send explicitly for any past date.
fat_gNoFat in grams. See MACROS above.
forceNoTrue only when the user has explicitly confirmed a separate entry despite a duplicate warning. Bypasses duplicate detection.
fluidsNoOptional drinks consumed in this intake, including liquid ingredients in shakes or smoothies. Omit when no drink amount is known. Hydration is persisted only when the user enabled hydration tracking.
carbs_gNoCarbohydrates in grams. See MACROS above.
fiber_gNoDietary fiber in grams. See MACROS above.
caffeineNoOptional caffeine doses in this intake. Keep each dose simple: caffeine amount is required and type is optional. The dose date follows the intake/meal date. If the user gave exact milligrams, preserve them exactly; otherwise estimate from the described food or drink.
caloriesNoTotal calories(kcal) never kJ
estimateNoThe compact 3-line nutrient estimate for this meal. See ESTIMATE above for the format. Omit to have the server estimate instead -- never blocks the write either way. A block whose parts exceed their whole (saturated fat over fat, fiber over carbs) is discarded and re-estimated. NUTRIENT ID DICTIONARY (id=name, unit is the name's suffix; ug=mcg). Every id means exactly this nutrient, never guess the order: 1=fiber_g 2=sugar_g 3=saturated_fat_g 4=monounsaturated_fat_g 5=polyunsaturated_fat_g 6=trans_fat_g 7=cholesterol_mg 8=sodium_mg 9=potassium_mg 10=calcium_mg 11=iron_mg 12=magnesium_mg 13=phosphorus_mg 14=zinc_mg 15=copper_mg 16=manganese_mg 17=selenium_ug 18=chloride_mg 19=chromium_ug 20=iodine_ug 21=molybdenum_ug 22=vitamin_a_ug 23=vitamin_c_mg 24=vitamin_d_ug 25=vitamin_e_mg 26=vitamin_k_ug 27=thiamin_b1_mg 28=riboflavin_b2_mg 29=niacin_b3_mg 30=pantothenic_acid_b5_mg 31=vitamin_b6_mg 32=biotin_b7_ug 33=folate_b9_ug 34=folic_acid_ug 35=vitamin_b12_ug 36=choline_mg 37=omega3_g 38=omega6_g 39=caffeine_mg 40=water_g 41=starch_g 42=added_sugar_g 43=total_unsaturated_fat_g 44=fluoride_mg
alcohol_gNoAlcohol in grams (not kcal). Only if alcoholic drinks were consumed; unset takes the saved recipe's value when recipe_name matches. 1 standard drink is about 14g.
meal_timeNoOptional local 24-hour HH:MM time. For an attached meal photo, use the current turn's photo capture time when the user did not state a different date/time. User-stated timing always wins.
meal_typeNoOptional. Omit for a current-day plain meal/food log so the server assigns the category from the user's resolved local clock. Send only when the user explicitly names or clearly anchors a category, or when backdating and the current clock cannot apply. A saved recipe's stored meal type never fills this in.
protein_gNoProtein in grams. See MACROS above.
food_itemsNoDescription of the food and drinks consumed. See MACROS above; ask the user only if completely absent and no recipe_name applies.
recipe_nameNoSaved recipe title only, without portion words or additions. See SAVED RECIPES above.
recipe_onlyNotrue=save recipe only and write no food_log row. Requires save_as_recipe=true. See RECIPE SAVE above.
recipe_titleNoRecipe name when recipe_only=true. See RECIPE SAVE above.
save_as_recipeNoTrue only when the user explicitly asks to save a reusable recipe. recipe_only=true saves recipe only; otherwise the final persisted meal is saved after the log succeeds. See RECIPE SAVE above.
recipe_servingsNoWhole-batch serving count when recipe_only=true; default=1. See RECIPE SAVE above.
saturated_fat_gNoSaturated fat in grams. See MACROS above.
added_food_itemsNoOnly food added to a saved recipe; supply final combined macros. Omit when none.
recipe_multiplierNoPortions of the matched saved recipe; default 1, e.g. 0.5 for half.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYesHuman-readable result text returned by the tool.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedInput schema / properties / added_food_items
      Added value: +{
      +  "description": "Only food added to a saved recipe; supply final combined macros. Omit when none.",
      +  "type": "string"
      +}
    • addedInput schema / properties / recipe_multiplier
      Added value: +{
      +  "description": "Portions of the matched saved recipe; default 1, e.g. 0.5 for half.",
      +  "type": "number"
      +}
    • changedInput schema / properties / recipe_name / description
      Previous value: -"Name or close phrase for one of the user's saved recipes, e.g. \"protein oats\", \"chicken bowl\", or \"breakfast\" for their saved Breakfast recipe. See SAVED RECIPES above."New value: +"Saved recipe title only, without portion words or additions. See SAVED RECIPES above."
  2. Changed1 schema field changed
    • changedInput schema / properties / fluids / description
      Previous value: -"Optional drinks consumed in this intake. Omit when no drink amount is known. Hydration is persisted only when the user enabled hydration tracking."New value: +"Optional drinks consumed in this intake, including liquid ingredients in shakes or smoothies. Omit when no drink amount is known. Hydration is persisted only when the user enabled hydration tracking."
  3. Changed4 schema fields changed
    • addedInput schema / properties / recipe_only
      Added value: +{
      +  "description": "true=save recipe only and write no food_log row. Requires save_as_recipe=true. See RECIPE SAVE above.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / recipe_servings
      Added value: +{
      +  "description": "Whole-batch serving count when recipe_only=true; default=1. See RECIPE SAVE above.",
      +  "type": "number"
      +}
    • addedInput schema / properties / recipe_title
      Added value: +{
      +  "description": "Recipe name when recipe_only=true. See RECIPE SAVE above.",
      +  "type": "string"
      +}
    • changedInput schema / properties / save_as_recipe / description
      Previous value: -"True only when the user explicitly asks to save this meal as a reusable recipe. The recipe is copied from the final persisted meal. On update_meal, this can be the only requested action; use the real meal id or normal selectors and do not invent an edit."New value: +"True only when the user explicitly asks to save a reusable recipe. recipe_only=true saves recipe only; otherwise the final persisted meal is saved after the log succeeds. See RECIPE SAVE above."
  4. Changed3 schema fields changed
    • addedInput schema / properties / estimate
      Added value: +{
      +  "description": "The compact 3-line nutrient estimate for this meal. See ESTIMATE above for the format. Omit to have the server estimate instead -- never blocks the write either way. A block whose parts exceed their whole (saturated fat over fat, fiber over carbs) is discarded and re-estimated.\n\nNUTRIENT ID DICTIONARY (id=name, unit is the name's suffix; ug=mcg). Every id means exactly this nutrient, never guess the order:\n1=fiber_g\n2=sugar_g\n3=saturated_fat_g\n4=monounsaturated_fat_g\n5=polyunsaturated_fat_g\n6=trans_fat_g\n7=cholesterol_mg\n8=sodium_mg\n9=potassium_mg\n10=calcium_mg\n11=iron_mg\n12=magnesium_mg\n13=phosphorus_mg\n14=zinc_mg\n15=copper_mg\n16=manganese_mg\n17=selenium_ug\n18=chloride_mg\n19=chromium_ug\n20=iodine_ug\n21=molybdenum_ug\n22=vitamin_a_ug\n23=vitamin_c_mg\n24=vitamin_d_ug\n25=vitamin_e_mg\n26=vitamin_k_ug\n27=thiamin_b1_mg\n28=riboflavin_b2_mg\n29=niacin_b3_mg\n30=pantothenic_acid_b5_mg\n31=vitamin_b6_mg\n32=biotin_b7_ug\n33=folate_b9_ug\n34=folic_acid_ug\n35=vitamin_b12_ug\n36=choline_mg\n37=omega3_g\n38=omega6_g\n39=caffeine_mg\n40=water_g\n41=starch_g\n42=added_sugar_g\n43=total_unsaturated_fat_g\n44=fluoride_mg",
      +  "type": "string"
      +}
    • addedInput schema / properties / fiber_g
      Added value: +{
      +  "description": "Dietary fiber in grams. See MACROS above.",
      +  "type": "number"
      +}
    • addedInput schema / properties / saturated_fat_g
      Added value: +{
      +  "description": "Saturated fat in grams. See MACROS above.",
      +  "type": "number"
      +}
  5. Changed1 schema field changed
    • changedInput schema / properties / calories / description
      Previous value: -"Total calories (kcal). See MACROS above."New value: +"Total calories(kcal) never kJ"
  6. Changed1 schema field changed
    • addedInput schema / properties / meal_time
      Added value: +{
      +  "description": "Optional local 24-hour HH:MM time. For an attached meal photo, use the current turn's photo capture time when the user did not state a different date/time. User-stated timing always wins.",
      +  "type": "string"
      +}
  7. Changed2 schema fields changed
    • changedInput schema / properties / meal_type / description
      Previous value: -"Required. Infer from time of day or context, even when recipe_name is used (a saved recipe's own stored meal type never fills this in)."New value: +"Optional. Omit for a current-day plain meal/food log so the server assigns the category from the user's resolved local clock. Send only when the user explicitly names or clearly anchors a category, or when backdating and the current clock cannot apply. A saved recipe's stored meal type never fills this in."
    • removedInput schema / required
      Removed value: -[
      -  "meal_type"
      -]
  8. Changed2 schema fields changed
    • removedInput schema / properties / fiber_g
      Removed value: -{
      -  "description": "Dietary fiber in grams. See MACROS above.",
      -  "type": "number"
      -}
    • removedInput schema / properties / saturated_fat_g
      Removed value: -{
      -  "description": "Saturated fat in grams. See MACROS above.",
      -  "type": "number"
      -}
  9. Changed1 schema field changed
    • removedInput schema / properties / estimate
      Removed value: -{
      -  "description": "The compact 3-line nutrient estimate for this meal. See ESTIMATE above; the id-to-nutrient dictionary and its format are documented on get_nutrient_summary, not repeated here. Omit to have the server estimate instead -- never blocks the write either way.",
      -  "type": "string"
      -}
  10. Changed2 schema fields changed
    • removedInput schema / properties / components
      Removed value: -{
      -  "description": "Every distinct food or drink in the meal. See COMPONENTS above. Omit when recipe_name alone names the whole meal.",
      -  "items": {
      -    "properties": {
      -      "name": {
      -        "description": "The food or drink name, e.g. \"banana\", \"grilled chicken breast\".",
      -        "type": "string"
      -      },
      -      "quantity": {
      -        "description": "The amount, in the given unit, or a bare count. Omit when unknown.",
      -        "type": "number"
      -      },
      -      "quantity_source": {
      -        "description": "See COMPONENTS above.",
      -        "enum": [
      -          "stated",
      -          "estimated"
      -        ],
      -        "type": "string"
      -      },
      -      "unit": {
      -        "description": "Unit for quantity, e.g. \"g\", \"cup\", \"oz\", \"slice\". Omit for a bare count (\"2 eggs\").",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "name",
      -      "quantity_source"
      -    ],
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
    • addedInput schema / properties / estimate
      Added value: +{
      +  "description": "The compact 3-line nutrient estimate for this meal. See ESTIMATE above; the id-to-nutrient dictionary and its format are documented on get_nutrient_summary, not repeated here. Omit to have the server estimate instead -- never blocks the write either way.",
      +  "type": "string"
      +}
  11. Changed1 schema field changed
    • addedInput schema / properties / components
      Added value: +{
      +  "description": "Every distinct food or drink in the meal. See COMPONENTS above. Omit when recipe_name alone names the whole meal.",
      +  "items": {
      +    "properties": {
      +      "name": {
      +        "description": "The food or drink name, e.g. \"banana\", \"grilled chicken breast\".",
      +        "type": "string"
      +      },
      +      "quantity": {
      +        "description": "The amount, in the given unit, or a bare count. Omit when unknown.",
      +        "type": "number"
      +      },
      +      "quantity_source": {
      +        "description": "See COMPONENTS above.",
      +        "enum": [
      +          "stated",
      +          "estimated"
      +        ],
      +        "type": "string"
      +      },
      +      "unit": {
      +        "description": "Unit for quantity, e.g. \"g\", \"cup\", \"oz\", \"slice\". Omit for a bare count (\"2 eggs\").",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "name",
      +      "quantity_source"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  12. Changed4 schema fields changed
    • removedInput schema / properties / fluids / items / properties / unit
      Removed value: -{
      -  "description": "Volume unit. Default ml.",
      -  "enum": [
      -    "ml",
      -    "fl_oz"
      -  ],
      -  "type": "string"
      -}
    • removedInput schema / properties / fluids / items / properties / volume
      Removed value: -{
      -  "description": "Consumed drink volume in the supplied unit.",
      -  "type": "number"
      -}
    • addedInput schema / properties / fluids / items / properties / volume_ml
      Added value: +{
      +  "description": "Millilitres. Convert any other unit first.",
      +  "type": "number"
      +}
    • changedInput schema / properties / fluids / items / required
      Previous value: -[
      -  "volume"
      -]New value: +[
      +  "volume_ml"
      +]
  13. Changed2 schema fields changed
    • changedInput schema / properties / fiber_g / description
      Previous value: -"Dietary fiber in grams. Optional. See SATURATED FAT / FIBER above."New value: +"Dietary fiber in grams. See MACROS above."
    • changedInput schema / properties / saturated_fat_g / description
      Previous value: -"Saturated fat in grams. Optional. See SATURATED FAT / FIBER above."New value: +"Saturated fat in grams. See MACROS above."
  14. Changed1 schema field changed
    • removedInput schema / properties / recipe_multiplier
      Removed value: -{
      -  "description": "Positive serving multiplier for recipe_name, e.g. 0.5 for half or 2 for double. Omit for one saved serving.",
      -  "type": "number"
      -}
  15. Changed1 schema field changed
    • addedInput schema / properties / recipe_multiplier
      Added value: +{
      +  "description": "Positive serving multiplier for recipe_name, e.g. 0.5 for half or 2 for double. Omit for one saved serving.",
      +  "type": "number"
      +}
  16. Changed2 schema fields changed
    • addedInput schema / properties / fiber_g
      Added value: +{
      +  "description": "Dietary fiber in grams. Optional. See SATURATED FAT / FIBER above.",
      +  "type": "number"
      +}
    • addedInput schema / properties / saturated_fat_g
      Added value: +{
      +  "description": "Saturated fat in grams. Optional. See SATURATED FAT / FIBER above.",
      +  "type": "number"
      +}
  17. Changed1 schema field changed
    • addedInput schema / properties / save_as_recipe
      Added value: +{
      +  "description": "True only when the user explicitly asks to save this meal as a reusable recipe. The recipe is copied from the final persisted meal. On update_meal, this can be the only requested action; use the real meal id or normal selectors and do not invent an edit.",
      +  "type": "boolean"
      +}
  18. Changed2 schema fields changed
    • changedInput schema / properties / fluids / items / properties / beverage_type / description
      Previous value: -"Broad drink type. Default water. Use other when the exact drink is not in the enum and preserve its name in beverage_name."New value: +"Broad drink type. Default water. Energy drinks are accepted and stored as other; preserve the exact drink in beverage_name."
    • changedInput schema / properties / fluids / items / properties / beverage_type / enum
      Previous value: -[
      -  "water",
      -  "electrolyte",
      -  "sports_drink",
      -  "coffee",
      -  "tea",
      -  "juice",
      -  "milk",
      -  "soda",
      -  "broth",
      -  "other"
      -]New value: +[
      +  "water",
      +  "electrolyte",
      +  "sports_drink",
      +  "coffee",
      +  "tea",
      +  "juice",
      +  "milk",
      +  "soda",
      +  "broth",
      +  "other",
      +  "energy_drink"
      +]
  19. Changed10 schema fields changed
    • changedInput schema / properties / caffeine / description
      Previous value: -"Optional caffeine doses in this intake. Every dose must identify the ingested caffeine source. If the user gave exact milligrams, preserve them exactly. If only a food/drink is described, estimate caffeine with the same nutrition-estimation judgment used for meal macros. Each item preserves its consumed time."New value: +"Optional caffeine doses in this intake. Keep each dose simple: caffeine amount is required and type is optional. The dose date follows the intake/meal date. If the user gave exact milligrams, preserve them exactly; otherwise estimate from the described food or drink."
    • changedInput schema / properties / caffeine / items / properties / caffeine_mg / description
      Previous value: -"Caffeine in milligrams. Preserve an explicit user amount exactly; otherwise estimate from the described source."New value: +"Caffeine in milligrams. Preserve an explicit user amount exactly; otherwise estimate from the described intake."
    • removedInput schema / properties / caffeine / items / properties / consumed_at
      Removed value: -{
      -  "description": "Alternative ISO 8601 timestamp with offset. Optional.",
      -  "type": "string"
      -}
    • removedInput schema / properties / caffeine / items / properties / consumed_date
      Removed value: -{
      -  "description": "Local date YYYY-MM-DD. Default: the meal date, then today.",
      -  "type": "string"
      -}
    • removedInput schema / properties / caffeine / items / properties / consumed_time
      Removed value: -{
      -  "description": "Local time HH:MM. Default: current local time for today; ask rather than invent a time for historical intake.",
      -  "type": "string"
      -}
    • removedInput schema / properties / caffeine / items / properties / note
      Removed value: -{
      -  "description": "Additional context. Optional.",
      -  "type": "string"
      -}
    • removedInput schema / properties / caffeine / items / properties / source_name
      Removed value: -{
      -  "description": "Specific food, drink, supplement, or product name. Required when source_type is other; optional otherwise.",
      -  "type": "string"
      -}
    • changedInput schema / properties / caffeine / items / properties / source_type / description
      Previous value: -"Required broad ingested caffeine source. Use other only when source_name identifies the specific food, drink, or supplement."New value: +"Optional broad caffeine type."
    • removedInput schema / properties / caffeine / items / properties / source_type / enumFallback
      Removed value: -{
      -  "annotate": "source_name",
      -  "value": "other"
      -}
    • changedInput schema / properties / caffeine / items / required
      Previous value: -[
      -  "caffeine_mg",
      -  "source_type"
      -]New value: +[
      +  "caffeine_mg"
      +]
  20. Changed1 schema field changed
    • addedInput schema / properties / caffeine
      Added value: +{
      +  "description": "Optional caffeine doses in this intake. Every dose must identify the ingested caffeine source. If the user gave exact milligrams, preserve them exactly. If only a food/drink is described, estimate caffeine with the same nutrition-estimation judgment used for meal macros. Each item preserves its consumed time.",
      +  "items": {
      +    "properties": {
      +      "caffeine_mg": {
      +        "description": "Caffeine in milligrams. Preserve an explicit user amount exactly; otherwise estimate from the described source.",
      +        "type": "number"
      +      },
      +      "consumed_at": {
      +        "description": "Alternative ISO 8601 timestamp with offset. Optional.",
      +        "type": "string"
      +      },
      +      "consumed_date": {
      +        "description": "Local date YYYY-MM-DD. Default: the meal date, then today.",
      +        "type": "string"
      +      },
      +      "consumed_time": {
      +        "description": "Local time HH:MM. Default: current local time for today; ask rather than invent a time for historical intake.",
      +        "type": "string"
      +      },
      +      "note": {
      +        "description": "Additional context. Optional.",
      +        "type": "string"
      +      },
      +      "source_name": {
      +        "description": "Specific food, drink, supplement, or product name. Required when source_type is other; optional otherwise.",
      +        "type": "string"
      +      },
      +      "source_type": {
      +        "description": "Required broad ingested caffeine source. Use other only when source_name identifies the specific food, drink, or supplement.",
      +        "enum": [
      +          "coffee",
      +          "espresso",
      +          "tea",
      +          "energy_drink",
      +          "soda",
      +          "pre_workout",
      +          "supplement",
      +          "other"
      +        ],
      +        "enumFallback": {
      +          "annotate": "source_name",
      +          "value": "other"
      +        },
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "caffeine_mg",
      +      "source_type"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  21. Changed14 schema fields changed
    • changedInput schema / properties / alcohol_g / description
      Previous value: -"Alcohol in grams (not kcal). Optional — include only if alcoholic drinks were consumed. Reference: 1 standard drink ≈ 14g alcohol."New value: +"Alcohol in grams (not kcal). Only if alcoholic drinks were consumed; unset takes the saved recipe's value when recipe_name matches. 1 standard drink is about 14g."
    • changedInput schema / properties / calories / description
      Previous value: -"Total calories (kcal). Required — estimate from the food description before calling this tool. Never omit."New value: +"Total calories (kcal). See MACROS above."
    • changedInput schema / properties / carbs_g / description
      Previous value: -"Carbohydrates in grams. Required — estimate from the food description before calling this tool. Never omit."New value: +"Carbohydrates in grams. See MACROS above."
    • changedInput schema / properties / date / description
      Previous value: -"Date of the meal. Format: YYYY-MM-DD. Optional — omit for today (the server fills it in from the user's own timezone, which is more reliable than guessing). Send it explicitly for any past date."New value: +"YYYY-MM-DD. Omit for today (the server resolves it in the user's own timezone, more reliable than guessing). Send explicitly for any past date."
    • changedInput schema / properties / fat_g / description
      Previous value: -"Fat in grams. Required — estimate from the food description before calling this tool. Never omit."New value: +"Fat in grams. See MACROS above."
    • addedInput schema / properties / fluids
      Added value: +{
      +  "description": "Optional drinks consumed in this intake. Omit when no drink amount is known. Hydration is persisted only when the user enabled hydration tracking.",
      +  "items": {
      +    "properties": {
      +      "alcohol_g": {
      +        "description": "Alcohol grams in this specific drink. Required per alcoholic fluid when more than one drink is present.",
      +        "type": "number"
      +      },
      +      "beverage_name": {
      +        "description": "Specific drink name when useful, e.g. IPA, vodka soda, latte.",
      +        "type": "string"
      +      },
      +      "beverage_type": {
      +        "description": "Broad drink type. Default water. Use other when the exact drink is not in the enum and preserve its name in beverage_name.",
      +        "enum": [
      +          "water",
      +          "electrolyte",
      +          "sports_drink",
      +          "coffee",
      +          "tea",
      +          "juice",
      +          "milk",
      +          "soda",
      +          "broth",
      +          "other"
      +        ],
      +        "type": "string"
      +      },
      +      "unit": {
      +        "description": "Volume unit. Default ml.",
      +        "enum": [
      +          "ml",
      +          "fl_oz"
      +        ],
      +        "type": "string"
      +      },
      +      "volume": {
      +        "description": "Consumed drink volume in the supplied unit.",
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "volume"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedInput schema / properties / food_items / description
      Previous value: -"Description of the food and drinks consumed. Required — ask the user if completely absent."New value: +"Description of the food and drinks consumed. See MACROS above; ask the user only if completely absent and no recipe_name applies."
    • changedInput schema / properties / force / description
      Previous value: -"Optional — set true only when the user has explicitly confirmed they want to log a separate entry despite a duplicate warning. Bypasses duplicate detection."New value: +"True only when the user has explicitly confirmed a separate entry despite a duplicate warning. Bypasses duplicate detection."
    • changedInput schema / properties / meal_type / description
      Previous value: -"Type of meal. Required — infer from time of day or context if not stated."New value: +"Required. Infer from time of day or context, even when recipe_name is used (a saved recipe's own stored meal type never fills this in)."
    • changedInput schema / properties / meal_type / enum
      Previous value: -[
      -  "Breakfast",
      -  "Lunch",
      -  "Dinner",
      -  "Snack",
      -  "Post-Workout"
      -]New value: +[
      +  "Breakfast",
      +  "Lunch",
      +  "Dinner",
      +  "Snack",
      +  "Post-Workout",
      +  "Shake",
      +  "Other"
      +]
    • addedInput schema / properties / meal_type / enumFallback
      Added value: +{
      +  "annotate": "food_items",
      +  "value": "Other"
      +}
    • changedInput schema / properties / protein_g / description
      Previous value: -"Protein in grams. Required — estimate from the food description before calling this tool. Never omit."New value: +"Protein in grams. See MACROS above."
    • addedInput schema / properties / recipe_name
      Added value: +{
      +  "description": "Name or close phrase for one of the user's saved recipes, e.g. \"protein oats\", \"chicken bowl\", or \"breakfast\" for their saved Breakfast recipe. See SAVED RECIPES above.",
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "meal_type",
      -  "food_items",
      -  "calories",
      -  "protein_g",
      -  "fat_g",
      -  "carbs_g"
      -]New value: +[
      +  "meal_type"
      +]
  22. First observed

TDQS

Score is being calculated.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.