{"ok":true,"site":{"host":"meal-planner-llai.onrender.com","url":"https://meal-planner-llai.onrender.com/","type":"live","desc":"Plan meals, save recipes and build shopping lists with WebMCP.","tools":[{"name":"meal_context","kind":"answer","impl":"imperative","description":"Read the user's structured meal-planning context for a date range in one call: saved recipe summaries, pantry inventory, planned meals, and the calculated shopping list. Use this before proposing or revising a meal plan so you respect what the user has already saved and planned.","inputSchema":{"type":"object","properties":{"start_date":{"type":"string","description":"Start date in YYYY-MM-DD format"},"end_date":{"type":"string","description":"End date in YYYY-MM-DD format"}},"required":["start_date","end_date"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_recipes","kind":"answer","impl":"imperative","description":"Find recipes in the user's saved recipe memory. Search matches recipe names, tags, and ingredient names. Use returned recipe IDs for planning meals or retrieving scaled ingredient quantities.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Optional text to match against recipe names, tags, and ingredients"},"tags":{"type":"array","items":{"type":"string"},"description":"Optional tags that every returned recipe must have"},"max_total_minutes":{"type":["number","null"],"minimum":0,"description":"Optional maximum prep plus cook time in minutes"}},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_recipe","kind":"answer","impl":"imperative","description":"Get one saved recipe with exact ingredients, quantities, units, instructions, times, tags, and timestamps. Optionally scale all numeric ingredient quantities to a different serving count.","inputSchema":{"type":"object","properties":{"recipe_id":{"type":"string","description":"Saved recipe ID"},"servings":{"type":["number","null"],"exclusiveMinimum":0,"description":"Optional target servings; null keeps the recipe's base servings"}},"required":["recipe_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"save_recipe","kind":"act","impl":"imperative","description":"Create or update a recipe in durable browser storage. Store structured servings, prep/cook time, ingredient quantities and units, tags, and ordered cooking instructions. Pass id only when updating an existing recipe.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Existing recipe ID when updating; omit for a new recipe"},"name":{"type":"string","description":"Recipe name"},"servings":{"type":"number","description":"Base number of servings","minimum":0.01},"prep_minutes":{"type":"number","description":"Preparation time in minutes","minimum":0},"cook_minutes":{"type":"number","description":"Cooking time in minutes","minimum":0},"tags":{"type":"array","items":{"type":"string"},"description":"Short descriptive tags such as quick, vegetarian, high-protein"},"ingredients":{"type":"array","minItems":1,"items":{"type":"object","properties":{"name":{"type":"string","description":"Ingredient name, e.g. chickpeas"},"quantity":{"type":["number","null"],"description":"Numeric amount. Use null when the recipe says 'to taste' or otherwise gives no number."},"unit":{"type":"string","description":"Unit such as g, ml, tbsp, tsp, cup, item, or an empty string when unitless"}},"required":["name","quantity","unit"],"additionalProperties":false},"description":"Structured ingredients"},"instructions":{"type":"array","minItems":1,"items":{"type":"string"},"description":"Cooking steps in order"}},"required":["name","servings","ingredients","instructions"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"delete_recipe","kind":"transact","impl":"imperative","description":"Delete a saved recipe and remove any meal-plan entries that refer to it.","inputSchema":{"type":"object","properties":{"recipe_id":{"type":"string","description":"Recipe ID to delete"}},"required":["recipe_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_meal_plan","kind":"answer","impl":"imperative","description":"Read planned breakfasts, lunches, and dinners in a date range. Results include recipe names, servings, tags, and cooking times, which makes prior weeks available as durable meal-plan history.","inputSchema":{"type":"object","properties":{"start_date":{"type":"string","description":"Start date in YYYY-MM-DD format"},"end_date":{"type":"string","description":"End date in YYYY-MM-DD format"}},"required":["start_date","end_date"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"plan_meal","kind":"act","impl":"imperative","description":"Create or replace one meal-plan slot for a date. The website immediately updates and remembers the selection.","inputSchema":{"type":"object","properties":{"date":{"type":"string","description":"Meal date in YYYY-MM-DD format"},"meal_type":{"type":"string","enum":["breakfast","lunch","dinner"],"description":"Meal slot"},"recipe_id":{"type":"string","description":"ID of a saved recipe"},"servings":{"type":"number","description":"Servings to prepare","minimum":0.01}},"required":["date","meal_type","recipe_id","servings"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"plan_meals","kind":"act","impl":"imperative","description":"Plan or replace multiple meal slots atomically enough for a weekly planning workflow. Prefer this over many plan_meal calls when the user approves several meals at once.","inputSchema":{"type":"object","properties":{"meals":{"type":"array","minItems":1,"items":{"type":"object","properties":{"date":{"type":"string","description":"Meal date in YYYY-MM-DD format"},"meal_type":{"type":"string","enum":["breakfast","lunch","dinner"]},"recipe_id":{"type":"string","description":"ID of a saved recipe"},"servings":{"type":"number","description":"Servings to prepare","minimum":0.01}},"required":["date","meal_type","recipe_id","servings"],"additionalProperties":false}}},"required":["meals"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"remove_meal","kind":"act","impl":"imperative","description":"Remove a breakfast, lunch, or dinner from a specific date while preserving all other meal-plan history.","inputSchema":{"type":"object","properties":{"date":{"type":"string","description":"Meal date in YYYY-MM-DD format"},"meal_type":{"type":"string","enum":["breakfast","lunch","dinner"]}},"required":["date","meal_type"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_pantry","kind":"answer","impl":"imperative","description":"Read the user's pantry inventory with exact quantities and units. Use it before shopping-list or use-what-I-have planning tasks.","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_pantry_item","kind":"act","impl":"imperative","description":"Create or replace the available quantity of a pantry ingredient. Set quantity to zero to remove the matching ingredient and unit from the pantry.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Ingredient name"},"quantity":{"type":"number","description":"Quantity currently available","minimum":0},"unit":{"type":"string","description":"Unit; use the same unit as recipes when possible"}},"required":["name","quantity","unit"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"build_shopping_list","kind":"act","impl":"imperative","description":"Calculate an exact shopping list from planned meals in a date range. Recipe quantities are scaled to planned servings, combined by normalized ingredient and unit, and can be reduced by matching pantry quantities.","inputSchema":{"type":"object","properties":{"start_date":{"type":"string","description":"Start date in YYYY-MM-DD format"},"end_date":{"type":"string","description":"End date in YYYY-MM-DD format"},"subtract_pantry":{"type":"boolean","description":"Whether to subtract matching pantry quantities; normally true"}},"required":["start_date","end_date"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"export_meal_data","kind":"act","impl":"imperative","description":"Return a complete JSON-safe snapshot of the user's locally stored recipes, meal-plan history, pantry inventory, and timestamps for backup or agent-side analysis.","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"shopping_price_context","kind":"answer","impl":"imperative","description":"Read the user's explicitly saved shopping location, preferred stores, current shopping-list quantities, existing price estimates and saved unexpired price quotes. Use this before researching grocery prices or promotions.","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_shopping_profile","kind":"act","impl":"imperative","description":"Save the location and preferred stores that the user explicitly wants used for grocery pricing. This is optional and stored only in this browser.","inputSchema":{"type":"object","properties":{"location":{"type":"string","description":"User-provided city, suburb, region or country; empty string clears it"},"preferred_stores":{"type":"array","items":{"type":"string"},"description":"Optional retailer names the user prefers"},"currency":{"type":"string","description":"ISO 4217 currency code such as ZAR, USD or GBP"}},"required":["location","preferred_stores","currency"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"save_price_quotes","kind":"answer","impl":"imperative","description":"Save current grocery price quotes or promotions for shopping-list ingredients after researching the user's chosen location. Package size is required so the page can estimate actual packages that must be purchased rather than only ingredient consumption cost.","inputSchema":{"type":"object","properties":{"quotes":{"type":"array","minItems":1,"items":{"type":"object","properties":{"ingredient":{"type":"string","description":"Ingredient name exactly as it appears in the shopping list when possible"},"package_quantity":{"type":"number","description":"Amount contained in one purchasable package","minimum":0.000001},"package_unit":{"type":"string","description":"Package unit such as g, kg, ml, l, item, each or an empty string"},"price":{"type":"number","description":"Current price for one package in the shopping profile currency","minimum":0},"store":{"type":"string","description":"Retailer or store name"},"location":{"type":"string","description":"Location the quote applies to; normally the saved shopping location"},"promotion":{"type":"string","description":"Optional promotion text; empty string when not promotional"},"valid_until":{"type":"string","description":"Optional YYYY-MM-DD promotion/quote expiry date; empty string when unknown"},"source_url":{"type":"string","description":"Optional source URL for traceability"}},"required":["ingredient","package_quantity","package_unit","price","store","location","promotion","valid_until","source_url"],"additionalProperties":false}}},"required":["quotes"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"priced_shopping_list","kind":"answer","impl":"imperative","description":"Return the current shopping list with package-aware estimated purchase cost per ingredient, store/deal details, coverage and estimated basket total using saved unexpired quotes.","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"clear_price_quotes","kind":"answer","impl":"imperative","description":"Clear saved grocery prices and promotions without changing the user's recipes, pantry, meal plan or shopping location.","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"import_meal_data","kind":"act","impl":"imperative","description":"Replace the current browser-local recipes, meal-plan history and pantry with a previously exported Meal Planner version 1 snapshot. Validate all recipe references, meal slots, quantities and pantry records before replacing state. Shopping location and saved price quotes are not changed.","inputSchema":{"type":"object","properties":{"data":{"type":"object","description":"Complete object previously returned by export_meal_data","properties":{"version":{"type":"number","enum":[1]},"recipes":{"type":"array","items":{"type":"object","additionalProperties":true}},"plans":{"type":"array","items":{"type":"object","additionalProperties":true}},"pantry":{"type":"array","items":{"type":"object","additionalProperties":true}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["version","recipes","plans","pantry"],"additionalProperties":true}},"required":["data"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_shopping_currency","kind":"act","impl":"imperative","description":"Set the ISO 4217 currency used for grocery prices. Infer this from the user's explicitly saved shopping location before researching or saving prices. For example use USD for the United States, MGA for Madagascar, ZAR for South Africa, GBP for the United Kingdom, and JPY for Japan. Do not infer or request device geolocation; use only the location saved in shopping_price_context.","inputSchema":{"type":"object","properties":{"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"Three-letter ISO 4217 currency code appropriate to the saved shopping location"}},"required":["currency"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"favicon":"/favicons/meal-planner-llai.onrender.com.svg","apiSurface":"spec","category":"Health & Education","toolCount":20}}