MCP Server

Forkmate

ai.forkmate/forkmate
Healthcare Public & reachable MCP 2026-07-28

What this MCP does

Logs meals through conversational input and provides calorie and macronutrient tracking.

add_pantry_item
Add a food to the user's pantry, or replace its details if a food with the same name (any casing) is already there. Only `name` is required; macros for one serving, a serving label, a `source` and a note are optional. An unrecognized `source` is recorded as 'client' (the user's own estimate). Does not log a meal. All calorie and macro values, including carbohydrates, are estimates from USDA FoodData Central, Open Food Facts, the user's own entry or an AI assistant's estimate — approximate, not lab-measured or specific to a package or batch, and not suitable for insulin dosing (including carb counting for a meal bolus), blood-glucose prediction or any other medical decision.
Destructive Idempotent
Input schema
{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': "The food to keep on hand, e.g. 'rolled oats'."}, 'note': {'type': 'string', 'description': "Optional short note, e.g. 'the Costco tub'."}, 'macros': {'type': 'object', 'properties': {'kcal': {'type': 'number', 'description': 'Energy for one serving, in kilocalories.'}, 'fat_g': {'type': 'number', 'description': 'Total fat for one serving, in grams.'}, 'carb_g': {'type': 'number', 'description': 'Total carbohydrate for one serving, in grams.'}, 'protein_g': {'type': 'number', 'description': 'Protein for one serving, in grams.'}}, 'description': 'Macros for ONE serving of this food, when known.'}, 'source': {'enum': ['client', 'usda', 'off', 'usda-index', 'mfp-import', 'manual', 'chain-menu'], 'type': 'string', 'description': "Where the macros came from, e.g. 'usda' for a food-database result. Defaults to 'client' (an estimate); unrecognized values are recorded as 'client'."}, 'serving': {'type': 'string', 'description': "Serving label the macros are for, e.g. '1 cup' or 'per 100 g'."}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['item'], 'properties': {'item': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string'}, 'note': {'type': 'string'}, 'macros': {'type': 'object', 'required': ['kcal', 'protein_g', 'carb_g', 'fat_g'], 'properties': {'kcal': {'type': 'number'}, 'fat_g': {'type': 'number'}, 'carb_g': {'type': 'number'}, 'protein_g': {'type': 'number'}}, 'description': 'Calories and macros. Estimates, not lab-measured; not for insulin dosing.'}, 'source': {'type': 'string', 'description': "The user's own claim about the macros' origin, not verified."}, 'serving': {'type': 'string'}}}}}
delete_meal
Delete one food from a diary entry (by `item_index`), or the whole entry (without it). The entry is identified by `id` and `local_date`. Deletion is permanent, with no undo; deleting the last food removes the entry, and deleting something already gone succeeds as a no-op. All calorie and macro values, including carbohydrates, are estimates from USDA FoodData Central, Open Food Facts, the user's own entry or an AI assistant's estimate — approximate, not lab-measured or specific to a package or batch, and not suitable for insulin dosing (including carb counting for a meal bolus), blood-glucose prediction or any other medical decision.
Destructive Idempotent
Input schema
{'type': 'object', 'required': ['id', 'local_date'], 'properties': {'id': {'type': 'string', 'description': 'The entry id, as returned when reading a day.'}, 'item_index': {'type': 'number', 'description': 'Which food to remove (0-based). Omit to delete the whole entry.'}, 'local_date': {'type': 'string', 'description': 'YYYY-MM-DD diary date of the entry.'}}}
Output schema
{'type': 'object', 'required': ['removed', 'entry', 'day_totals'], 'properties': {'entry': {'anyOf': [{'type': 'object', 'required': ['id', 'at', 'local_date', 'items'], 'properties': {'at': {'type': 'string', 'description': 'ISO-8601 UTC instant the food was eaten.'}, 'id': {'type': 'string'}, 'meal': {'type': 'string', 'description': 'breakfast, lunch, dinner or snack, when set.'}, 'note': {'type': 'string'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string'}, 'macros': {'type': 'object', 'required': [], 'properties': {'kcal': {'type': 'number'}, 'fat_g': {'type': 'number'}, 'carb_g': {'type': 'number'}, 'protein_g': {'type': 'number'}}, 'description': 'Calories and macros. Estimates, not lab-measured; not for insulin dosing.'}, 'source': {'type': 'string', 'description': 'Where the macros came from (e.g. usda, off, client).'}, 'fluid_ml': {'type': 'number'}, 'quantity': {'type': 'string'}, 'caffeine_mg': {'type': 'number'}}}}, 'created_at': {'type': 'string'}, 'local_date': {'type': 'string', 'description': 'A local date, YYYY-MM-DD.'}}, 'description': 'One diary entry: a meal with its foods.'}, {'type': 'null'}], 'description': 'What remains of the entry, or null.'}, 'removed': {'type': 'boolean'}, 'day_totals': {'type': 'object', 'required': ['local_date', 'entry_count', 'totals'], 'properties': {'totals': {'type': 'object', 'required': ['kcal', 'protein_g', 'carb_g', 'fat_g'], 'properties': {'kcal': {'type': 'number'}, 'fat_g': {'type': 'number'}, 'carb_g': {'type': 'number'}, 'protein_g': {'type': 'number'}}, 'description': 'Calories and macros. Estimates, not lab-measured; not for insulin dosing.'}, 'fluid_ml': {'type': 'number'}, 'local_date': {'type': 'string', 'description': 'A local date, YYYY-MM-DD.'}, 'caffeine_mg': {'type': 'number'}, 'entry_count': {'type': 'integer'}}}}}
get_day
Read the user's food diary for one day: its entries and calorie/macro totals. All calorie and macro values, including carbohydrates, are estimates from USDA FoodData Central, Open Food Facts, the user's own entry or an AI assistant's estimate — approximate, not lab-measured or specific to a package or batch, and not suitable for insulin dosing (including carb counting for a meal bolus), blood-glucose prediction or any other medical decision.
Read only
Input schema
{'type': 'object', 'properties': {'local_date': {'type': 'string', 'description': 'YYYY-MM-DD; defaults to today.'}}}
Output schema
{'type': 'object', 'required': ['local_date', 'entries', 'totals'], 'properties': {'totals': {'type': 'object', 'required': ['local_date', 'entry_count', 'totals'], 'properties': {'totals': {'type': 'object', 'required': ['kcal', 'protein_g', 'carb_g', 'fat_g'], 'properties': {'kcal': {'type': 'number'}, 'fat_g': {'type': 'number'}, 'carb_g': {'type': 'number'}, 'protein_g': {'type': 'number'}}, 'description': 'Calories and macros. Estimates, not lab-measured; not for insulin dosing.'}, 'fluid_ml': {'type': 'number'}, 'local_date': {'type': 'string', 'description': 'A local date, YYYY-MM-DD.'}, 'caffeine_mg': {'type': 'number'}, 'entry_count': {'type': 'integer'}}}, 'entries': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'at', 'local_date', 'items'], 'properties': {'at': {'type': 'string', 'description': 'ISO-8601 UTC instant the food was eaten.'}, 'id': {'type': 'string'}, 'meal': {'type': 'string', 'description': 'breakfast, lunch, dinner or snack, when set.'}, 'note': {'type': 'string'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string'}, 'macros': {'type': 'object', 'required': [], 'properties': {'kcal': {'type': 'number'}, 'fat_g': {'type': 'number'}, 'carb_g': {'type': 'number'}, 'protein_g': {'type': 'number'}}, 'description': 'Calories and macros. Estimates, not lab-measured; not for insulin dosing.'}, 'source': {'type': 'string', 'description': 'Where the macros came from (e.g. usda, off, client).'}, 'fluid_ml': {'type': 'number'}, 'quantity': {'type': 'string'}, 'caffeine_mg': {'type': 'number'}}}}, 'created_at': {'type': 'string'}, 'local_date': {'type': 'string', 'description': 'A local date, YYYY-MM-DD.'}}, 'description': 'One diary entry: a meal with its foods.'}}, 'local_date': {'type': 'string', 'description': 'A local date, YYYY-MM-DD.'}}}
get_pantry
Read the user's pantry: the staple foods they keep on hand, separate from their diary. Each item has a name and, when saved, macros for one serving, a serving label, a `source` and a short note. A `source` is the user's own claim about where the macros came from, not a server-verified guarantee. All calorie and macro values, including carbohydrates, are estimates from USDA FoodData Central, Open Food Facts, the user's own entry or an AI assistant's estimate — approximate, not lab-measured or specific to a package or batch, and not suitable for insulin dosing (including carb counting for a meal bolus), blood-glucose prediction or any other medical decision.
Read only
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['items'], 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string'}, 'note': {'type': 'string'}, 'macros': {'type': 'object', 'required': ['kcal', 'protein_g', 'carb_g', 'fat_g'], 'properties': {'kcal': {'type': 'number'}, 'fat_g': {'type': 'number'}, 'carb_g': {'type': 'number'}, 'protein_g': {'type': 'number'}}, 'description': 'Calories and macros. Estimates, not lab-measured; not for insulin dosing.'}, 'source': {'type': 'string', 'description': "The user's own claim about the macros' origin, not verified."}, 'serving': {'type': 'string'}}}}}}
get_preferences
Read the user's saved dietary preferences: diet style, allergies (a structured list of the major US allergens), disliked foods, and a typical-portion note. Allergies are self-reported and not a safety guarantee; the response includes an allergy_disclaimer. Dislikes are taste preferences, not allergies.
Read only
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['diet_style', 'allergies', 'dislikes', 'portion_note', 'allergy_disclaimer'], 'properties': {'dislikes': {'type': 'array', 'items': {'type': 'string'}}, 'allergies': {'type': 'array', 'items': {'type': 'string'}}, 'diet_style': {'type': ['string', 'null']}, 'portion_note': {'type': ['string', 'null']}, 'allergy_disclaimer': {'type': 'string'}}}
get_range
Read the user's food diary across a date range, with per-day calorie/macro totals. All calorie and macro values, including carbohydrates, are estimates from USDA FoodData Central, Open Food Facts, the user's own entry or an AI assistant's estimate — approximate, not lab-measured or specific to a package or batch, and not suitable for insulin dosing (including carb counting for a meal bolus), blood-glucose prediction or any other medical decision.
Read only
Input schema
{'type': 'object', 'required': ['start', 'end'], 'properties': {'end': {'type': 'string', 'description': 'YYYY-MM-DD (inclusive).'}, 'start': {'type': 'string', 'description': 'YYYY-MM-DD (inclusive).'}}}
Output schema
{'type': 'object', 'required': ['start', 'end', 'days', 'entries'], 'properties': {'end': {'type': 'string', 'description': 'A local date, YYYY-MM-DD.'}, 'days': {'type': 'array', 'items': {'type': 'object', 'required': ['local_date', 'entry_count', 'totals'], 'properties': {'totals': {'type': 'object', 'required': ['kcal', 'protein_g', 'carb_g', 'fat_g'], 'properties': {'kcal': {'type': 'number'}, 'fat_g': {'type': 'number'}, 'carb_g': {'type': 'number'}, 'protein_g': {'type': 'number'}}, 'description': 'Calories and macros. Estimates, not lab-measured; not for insulin dosing.'}, 'fluid_ml': {'type': 'number'}, 'local_date': {'type': 'string', 'description': 'A local date, YYYY-MM-DD.'}, 'caffeine_mg': {'type': 'number'}, 'entry_count': {'type': 'integer'}}}}, 'start': {'type': 'string', 'description': 'A local date, YYYY-MM-DD.'}, 'entries': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'at', 'local_date', 'items'], 'properties': {'at': {'type': 'string', 'description': 'ISO-8601 UTC instant the food was eaten.'}, 'id': {'type': 'string'}, 'meal': {'type': 'string', 'description': 'breakfast, lunch, dinner or snack, when set.'}, 'note': {'type': 'string'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string'}, 'macros': {'type': 'object', 'required': [], 'properties': {'kcal': {'type': 'number'}, 'fat_g': {'type': 'number'}, 'carb_g': {'type': 'number'}, 'protein_g': {'type': 'number'}}, 'description': 'Calories and macros. Estimates, not lab-measured; not for insulin dosing.'}, 'source': {'type': 'string', 'description': 'Where the macros came from (e.g. usda, off, client).'}, 'fluid_ml': {'type': 'number'}, 'quantity': {'type': 'string'}, 'caffeine_mg': {'type': 'number'}}}}, 'created_at': {'type': 'string'}, 'local_date': {'type': 'string', 'description': 'A local date, YYYY-MM-DD.'}}, 'description': 'One diary entry: a meal with its foods.'}}}}
log_meal
Add a meal to the user's food diary: one or more food items, each with an optional quantity and macros, plus an optional meal label, date, note and provenance `source`. All calorie and macro values, including carbohydrates, are estimates from USDA FoodData Central, Open Food Facts, the user's own entry or an AI assistant's estimate — approximate, not lab-measured or specific to a package or batch, and not suitable for insulin dosing (including carb counting for a meal bolus), blood-glucose prediction or any other medical decision.
Input schema
{'type': 'object', 'required': ['items'], 'properties': {'at': {'type': 'string', 'description': 'ISO-8601 instant the meal was eaten; defaults to now.'}, 'meal': {'enum': ['breakfast', 'lunch', 'dinner', 'snack', 'other'], 'type': 'string', 'description': 'Which meal of the day this was.'}, 'note': {'type': 'string', 'description': "Optional free-text note stored with the meal, e.g. 'post-run'."}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': "What the food is, e.g. 'scrambled eggs' or 'Greek yogurt, plain'."}, 'macros': {'type': 'object', 'properties': {'kcal': {'type': 'number', 'description': 'Energy for the whole portion eaten, in kilocalories (not per 100 g).'}, 'fat_g': {'type': 'number', 'description': 'Total fat for the whole portion eaten, in grams.'}, 'carb_g': {'type': 'number', 'description': 'Total carbohydrate for the whole portion eaten, in grams.'}, 'protein_g': {'type': 'number', 'description': 'Protein for the whole portion eaten, in grams.'}}, 'description': 'Estimated nutrition for the portion eaten. Omitted fields are looked up from the food databases.'}, 'barcode': {'type': 'string', 'description': "The package's UPC/EAN barcode, when the food came from a barcode lookup."}, 'fluid_ml': {'type': 'number', 'description': 'Optional fluid/hydration volume of this item, in millilitres (e.g. 240 for an 8 oz cup).'}, 'quantity': {'type': 'string', 'description': "Portion as a display label, e.g. '3', '1 cup' or '2 × 1 frank (96 g)'. Display only: the server stores macros exactly as sent and does not re-scale them."}, 'caffeine_mg': {'type': 'number', 'description': 'Optional caffeine content of this item, in milligrams (e.g. ~95 for a mug of brewed coffee).'}}}, 'minItems': 1, 'description': 'The foods in this meal, one entry per food.'}, 'source': {'enum': ['client', 'usda', 'off', 'usda-index', 'mfp-import', 'manual', 'chain-menu'], 'type': 'string', 'description': "Optional provenance for these items, e.g. 'usda' or 'off' for a food-database result. Defaults to 'client' (an estimate); unrecognized values are recorded as 'client'."}, 'local_date': {'type': 'string', 'description': "YYYY-MM-DD diary date; defaults to the user's local date (from their timezone)."}}}
Output schema
{'type': 'object', 'required': ['entry', 'day_totals'], 'properties': {'entry': {'type': 'object', 'required': ['id', 'at', 'local_date', 'items'], 'properties': {'at': {'type': 'string', 'description': 'ISO-8601 UTC instant the food was eaten.'}, 'id': {'type': 'string'}, 'meal': {'type': 'string', 'description': 'breakfast, lunch, dinner or snack, when set.'}, 'note': {'type': 'string'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string'}, 'macros': {'type': 'object', 'required': [], 'properties': {'kcal': {'type': 'number'}, 'fat_g': {'type': 'number'}, 'carb_g': {'type': 'number'}, 'protein_g': {'type': 'number'}}, 'description': 'Calories and macros. Estimates, not lab-measured; not for insulin dosing.'}, 'source': {'type': 'string', 'description': 'Where the macros came from (e.g. usda, off, client).'}, 'fluid_ml': {'type': 'number'}, 'quantity': {'type': 'string'}, 'caffeine_mg': {'type': 'number'}}}}, 'created_at': {'type': 'string'}, 'local_date': {'type': 'string', 'description': 'A local date, YYYY-MM-DD.'}}, 'description': 'One diary entry: a meal with its foods.'}, 'day_totals': {'type': 'object', 'required': ['local_date', 'entry_count', 'totals'], 'properties': {'totals': {'type': 'object', 'required': ['kcal', 'protein_g', 'carb_g', 'fat_g'], 'properties': {'kcal': {'type': 'number'}, 'fat_g': {'type': 'number'}, 'carb_g': {'type': 'number'}, 'protein_g': {'type': 'number'}}, 'description': 'Calories and macros. Estimates, not lab-measured; not for insulin dosing.'}, 'fluid_ml': {'type': 'number'}, 'local_date': {'type': 'string', 'description': 'A local date, YYYY-MM-DD.'}, 'caffeine_mg': {'type': 'number'}, 'entry_count': {'type': 'integer'}}}}}
lookup_barcode
Look up a packaged food by its UPC/EAN barcode in Open Food Facts. Returns macros per 100 g, a `source`, and, when known, `serving_grams`/`serving_label` for one household serving. All calorie and macro values, including carbohydrates, are estimates from USDA FoodData Central, Open Food Facts, the user's own entry or an AI assistant's estimate — approximate, not lab-measured or specific to a package or batch, and not suitable for insulin dosing (including carb counting for a meal bolus), blood-glucose prediction or any other medical decision.
Read only Open world
Input schema
{'type': 'object', 'required': ['upc'], 'properties': {'upc': {'type': 'string', 'description': 'UPC/EAN barcode, digits only (8–14 digits).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['candidates'], 'properties': {'candidates': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'macros', 'source'], 'properties': {'name': {'type': 'string'}, 'macros': {'type': 'object', 'required': ['kcal', 'protein_g', 'carb_g', 'fat_g'], 'properties': {'kcal': {'type': 'number'}, 'fat_g': {'type': 'number'}, 'carb_g': {'type': 'number'}, 'protein_g': {'type': 'number'}}, 'description': 'Calories and macros. Estimates, not lab-measured; not for insulin dosing.'}, 'source': {'type': 'string'}, 'serving': {'type': 'string'}, 'serving_grams': {'type': 'number'}, 'serving_label': {'type': 'string'}}, 'description': 'A food match. Macros are PER 100 g — scale to the portion before logging.'}}}}
remove_pantry_item
Remove a food from the user's pantry by name. Affects the pantry only, not the food diary; removing a food that is not there succeeds as a no-op.
Destructive Idempotent
Input schema
{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'The food to remove from the pantry (any casing).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['removed'], 'properties': {'removed': {'type': 'boolean'}}}
search_foods
Search USDA FoodData Central and Open Food Facts for foods matching a query. Returns candidates with macros per 100 g, a `source`, and, when known, `serving_grams`/`serving_label` for one household serving. Curated chain-menu candidates include a `provenance` object that may carry a portion caveat. All calorie and macro values, including carbohydrates, are estimates from USDA FoodData Central, Open Food Facts, the user's own entry or an AI assistant's estimate — approximate, not lab-measured or specific to a package or batch, and not suitable for insulin dosing (including carb counting for a meal bolus), blood-glucose prediction or any other medical decision.
Read only Open world
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'limit': {'type': 'number', 'description': 'Max candidates to return (default 5, clamped to 1–10).'}, 'query': {'type': 'string', 'description': "Food to search, e.g. 'greek yogurt' or 'Chipotle chicken'."}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['candidates'], 'properties': {'candidates': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'macros', 'source'], 'properties': {'name': {'type': 'string'}, 'macros': {'type': 'object', 'required': ['kcal', 'protein_g', 'carb_g', 'fat_g'], 'properties': {'kcal': {'type': 'number'}, 'fat_g': {'type': 'number'}, 'carb_g': {'type': 'number'}, 'protein_g': {'type': 'number'}}, 'description': 'Calories and macros. Estimates, not lab-measured; not for insulin dosing.'}, 'source': {'type': 'string'}, 'serving': {'type': 'string'}, 'serving_grams': {'type': 'number'}, 'serving_label': {'type': 'string'}}, 'description': 'A food match. Macros are PER 100 g — scale to the portion before logging.'}}}}
update_meal
Correct a food already in the user's diary — its name, quantity, macros, caffeine or fluid — or change an entry's meal label or note. The entry is identified by `id` and `local_date`, and a food by its `item_index`. Only the fields sent change; macros are merged onto the existing values and overwritten in place, with no history kept. An entry cannot be moved to another day. All calorie and macro values, including carbohydrates, are estimates from USDA FoodData Central, Open Food Facts, the user's own entry or an AI assistant's estimate — approximate, not lab-measured or specific to a package or batch, and not suitable for insulin dosing (including carb counting for a meal bolus), blood-glucose prediction or any other medical decision.
Destructive Idempotent
Input schema
{'type': 'object', 'required': ['id', 'local_date'], 'properties': {'id': {'type': 'string', 'description': 'The entry id, as returned when reading a day.'}, 'meal': {'enum': ['breakfast', 'lunch', 'dinner', 'snack', 'other'], 'type': 'string', 'description': 'Move the entry to a different meal label.'}, 'name': {'type': 'string', 'description': 'Corrected name of the food.'}, 'note': {'type': 'string', 'description': 'Replacement note for the entry.'}, 'macros': {'type': 'object', 'properties': {'kcal': {'type': 'number', 'description': 'Corrected energy for the whole portion, in kilocalories.'}, 'fat_g': {'type': 'number', 'description': 'Corrected total fat for the whole portion, in grams.'}, 'carb_g': {'type': 'number', 'description': 'Corrected total carbohydrate for the whole portion, in grams.'}, 'protein_g': {'type': 'number', 'description': 'Corrected protein for the whole portion, in grams.'}}, 'description': 'Corrected macros. Only the components included are changed.'}, 'fluid_ml': {'type': 'number', 'description': 'Corrected fluid/hydration volume, in millilitres.'}, 'quantity': {'type': 'string', 'description': "Portion as stated, e.g. '2' or '1 cup'."}, 'item_index': {'type': 'number', 'description': "Which food in the entry's items[] to edit (0-based). Required when changing a food's name/quantity/macros/caffeine/fluid; omit for an entry-level change (meal/note)."}, 'local_date': {'type': 'string', 'description': 'YYYY-MM-DD diary date of the entry.'}, 'caffeine_mg': {'type': 'number', 'description': 'Corrected caffeine content, in milligrams.'}}}
Output schema
{'type': 'object', 'required': ['entry', 'day_totals'], 'properties': {'entry': {'type': 'object', 'required': ['id', 'at', 'local_date', 'items'], 'properties': {'at': {'type': 'string', 'description': 'ISO-8601 UTC instant the food was eaten.'}, 'id': {'type': 'string'}, 'meal': {'type': 'string', 'description': 'breakfast, lunch, dinner or snack, when set.'}, 'note': {'type': 'string'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string'}, 'macros': {'type': 'object', 'required': [], 'properties': {'kcal': {'type': 'number'}, 'fat_g': {'type': 'number'}, 'carb_g': {'type': 'number'}, 'protein_g': {'type': 'number'}}, 'description': 'Calories and macros. Estimates, not lab-measured; not for insulin dosing.'}, 'source': {'type': 'string', 'description': 'Where the macros came from (e.g. usda, off, client).'}, 'fluid_ml': {'type': 'number'}, 'quantity': {'type': 'string'}, 'caffeine_mg': {'type': 'number'}}}}, 'created_at': {'type': 'string'}, 'local_date': {'type': 'string', 'description': 'A local date, YYYY-MM-DD.'}}, 'description': 'One diary entry: a meal with its foods.'}, 'day_totals': {'type': 'object', 'required': ['local_date', 'entry_count', 'totals'], 'properties': {'totals': {'type': 'object', 'required': ['kcal', 'protein_g', 'carb_g', 'fat_g'], 'properties': {'kcal': {'type': 'number'}, 'fat_g': {'type': 'number'}, 'carb_g': {'type': 'number'}, 'protein_g': {'type': 'number'}}, 'description': 'Calories and macros. Estimates, not lab-measured; not for insulin dosing.'}, 'fluid_ml': {'type': 'number'}, 'local_date': {'type': 'string', 'description': 'A local date, YYYY-MM-DD.'}, 'caffeine_mg': {'type': 'number'}, 'entry_count': {'type': 'integer'}}}}}
whoami
Diagnostic: returns the authenticated user id and scopes.
Read only
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['user_id', 'scopes'], 'properties': {'scopes': {'type': 'array', 'items': {'type': 'string'}}, 'user_id': {'type': 'string'}}}
Changed
lookup_barcode
Oct. 1, 2026, 2:51 a.m.
Changed
search_foods
Oct. 1, 2026, 2:51 a.m.
Changed
remove_pantry_item
Oct. 1, 2026, 2:51 a.m.
Changed
add_pantry_item
Oct. 1, 2026, 2:51 a.m.
Changed
get_pantry
Oct. 1, 2026, 2:51 a.m.
Changed
delete_meal
Oct. 1, 2026, 2:51 a.m.
Changed
update_meal
Oct. 1, 2026, 2:51 a.m.
Changed
log_meal
Oct. 1, 2026, 2:51 a.m.
Changed
get_preferences
Oct. 1, 2026, 2:51 a.m.
Changed
get_range
Oct. 1, 2026, 2:51 a.m.
Changed
get_day
Oct. 1, 2026, 2:51 a.m.
Changed
whoami
Oct. 1, 2026, 2:51 a.m.
Changed
search_foods
Sept. 25, 2026, 3 a.m.
Added
lookup_barcode
Sept. 17, 2026, 7:56 a.m.
Added
search_foods
Sept. 17, 2026, 7:56 a.m.
Added
remove_pantry_item
Sept. 17, 2026, 7:56 a.m.
Added
add_pantry_item
Sept. 17, 2026, 7:56 a.m.
Added
get_pantry
Sept. 17, 2026, 7:56 a.m.
Added
delete_meal
Sept. 17, 2026, 7:56 a.m.
Added
update_meal
Sept. 17, 2026, 7:56 a.m.
Added
log_meal
Sept. 17, 2026, 7:56 a.m.
Added
get_preferences
Sept. 17, 2026, 7:56 a.m.
Added
get_range
Sept. 17, 2026, 7:56 a.m.
Added
get_day
Sept. 17, 2026, 7:56 a.m.
Added
whoami
Sept. 17, 2026, 7:56 a.m.