joiva_plan_food
Plan a meal the signed-in user intends to eat later ('plan my dinner at 19:00', 'breakfast tomorrow'). Creates a planned entry in Joiva. It does not count towards the day's totals until it is confirmed as eaten. Food matching and nutrient resolution work as for a logged food: the food name in the user's own language, brand/barcode identify branded products.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"food": "<food>",
"grams": "<grams>"
},
"name": "joiva_plan_food"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| tz | No | IANA timezone, default Europe/Berlin | |
| food | Yes | Food name, e.g. 'Vollkornbrot' | |
| meal | No | Meal name in the user's language: 'Frühstück', 'Mittagessen', 'Abendbrot', 'Snack'. Components with the same meal name on the same day are grouped automatically. A day can have several snacks: part-of-day names place a snack without a clock time ('Vormittagssnack' sorts before lunch at 10:00, 'Nachmittagssnack' 15:00, 'Abendsnack' 21:00); snacks at different times stay separate meals. | |
| brand | No | Manufacturer/brand, e.g. 'Hamfelder'. Keeps products with different label values apart | |
| grams | Yes | ||
| notiz | No | Short note on the preparation, e.g. 'selbst geröstet, 10 min 170 °C'. | |
| garung | No | How it was prepared when eaten, exactly one of: roh, gekocht, gedämpft, gebacken, geröstet, gebraten, gegrillt. Not given = as bought (the product's own state is copied); null = clear. Joiva re-derives the values: a measured BLS variant first (e.g. roasted hazelnuts), else documented USDA retention factors; otherwise the entry reports that the preparation is not accounted for. | |
| mealId | No | Explicit grouping id; normally unnecessary, since `meal` groups automatically | |
| barcode | No | EAN/UPC digits. Links the food to Joiva's global product catalog | |
| subType | No | Variant, e.g. 'zart' | |
| unitCount | No | How many of that unit, e.g. 2 for 'zwei Eier M'. Only stored together with unitLabel. | |
| unitLabel | No | How the amount was meant, e.g. 'Ei M', 'Scheibe', 'EL'. Display only: `grams` stays mandatory and remains the stored amount, so both are given. Labels that match a food's existing `portions` (name and gram weight, as listed in the food catalog) reuse that portion. Not needed when the user gave a weight. | |
| behandlung | No | Pre-treatments, any of: eingeweicht, gekeimt, fermentiert, geräuchert, gepökelt (e.g. soaked AND roasted nuts = behandlung ['eingeweicht'] + garung 'geröstet'). Not given = as bought; [] = none. | |
| plannedFor | No | Exact ISO 8601 timestamp with offset, e.g. '2026-09-05T09:00:00+02:00'. For a meal with a named time ('dinner at 7'). Default timezone Europe/Berlin. | |
| plannedDate | No | YYYY-MM-DD for a meal planned for a day without a specific time ('breakfast tomorrow'). | |
| nutrientSource | No | Provenance of nutrientsPer100g: 'label' when read literally off the product's printed per-100g nutrition table, 'user' when the user dictated exact values; absent for estimates. | |
| nutrientsPer100g | No |