{"ok":true,"site":{"host":"zingy-hamster-1df2ed.netlify.app","url":"https://zingy-hamster-1df2ed.netlify.app/","type":"live","desc":"A meal-planning and shopping-list app that humans and AI agents can drive together, live, via WebMCP.","tools":[{"name":"search-recipes","kind":"answer","impl":"imperative","description":"Search the recipe catalog by free-text query, required tags, and/or a max prep time. By default, results are filtered to only recipes that match the household's currently active dietary preferences.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Free text to match against recipe name or ingredients."},"tags":{"type":"array","items":{"type":"string","enum":["vegetarian","vegan","glutenFree","dairyFree","nutFree","quick","budget"]},"description":"Require all of these tags."},"maxPrepMinutes":{"type":"number","description":"Only include recipes that take this many minutes or less."},"respectDietary":{"type":"boolean","description":"Filter out recipes that conflict with active dietary preferences. Defaults to true."},"maxCaloriesPerServing":{"type":"number","description":"Only include recipes at or under this many calories per serving."},"minProteinPerServing":{"type":"number","description":"Only include recipes with at least this many grams of protein per serving."},"sortBy":{"type":"string","enum":["relevance","pantryMatch","cost","prepTime","calories","expiringSoon"],"description":"How to order results. 'pantryMatch' ranks recipes needing the fewest additional ingredients first -- use this to answer \"what can I make with what I already have\". 'expiringSoon' ranks recipes that use the most soon-to-expire pantry items first -- use this to reduce food waste. Defaults to 'relevance'."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"get-recipe","kind":"answer","impl":"imperative","description":"Get full details for one recipe, including ingredients and instructions, by its recipe id.","inputSchema":{"type":"object","properties":{"recipeId":{"type":"string","description":"The recipe id, e.g. from search-recipes results."}},"required":["recipeId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"get-dietary-preferences","kind":"answer","impl":"imperative","description":"Get the household's currently active dietary preferences and avoided ingredients.","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"set-dietary-preferences","kind":"act","impl":"imperative","description":"Update the household's dietary preferences (vegetarian, vegan, glutenFree, dairyFree, nutFree) and/or the list of ingredients to avoid. Only the fields provided are changed. Affects future recipe searches and blocks conflicting meal-plan additions unless overridden.","inputSchema":{"type":"object","properties":{"vegetarian":{"type":"boolean"},"vegan":{"type":"boolean"},"glutenFree":{"type":"boolean"},"dairyFree":{"type":"boolean"},"nutFree":{"type":"boolean"},"avoidIngredients":{"type":"array","items":{"type":"string"},"description":"Ingredient names to avoid entirely, e.g. [\"shellfish\"]."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"get-meal-plan","kind":"answer","impl":"imperative","description":"Get the full Mon-Sun meal plan with recipe names, servings, and an estimated total cost for the week.","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"get-week-nutrition-summary","kind":"answer","impl":"imperative","description":"Get per-serving nutrition (calories, protein, carbs, fat) for each planned day plus the weekly total and the average per planned day -- use this to answer \"how many calories a day is this plan averaging\" or check it hits a protein target.","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"add-recipe-to-plan","kind":"act","impl":"imperative","description":"Assign a recipe to a day of the week. Fails with an explanation if the recipe conflicts with active dietary preferences unless force is true. Automatically refreshes the shopping list.","inputSchema":{"type":"object","properties":{"day":{"type":"string","enum":["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],"description":"Day of the week to plan."},"recipeId":{"type":"string","description":"Recipe id to assign, from search-recipes or get-recipe."},"servings":{"type":"number","description":"Servings to cook; defaults to the recipe's normal serving size."},"force":{"type":"boolean","description":"Set true to add the recipe even if it conflicts with dietary preferences."}},"required":["day","recipeId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"remove-recipe-from-plan","kind":"act","impl":"imperative","description":"Clear whatever recipe is assigned to a given day of the week. Automatically refreshes the shopping list.","inputSchema":{"type":"object","properties":{"day":{"type":"string","enum":["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]}},"required":["day"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"plan-week","kind":"act","impl":"imperative","description":"Automatically fill in the meal plan for multiple days at once under a set of constraints, instead of calling add-recipe-to-plan repeatedly. Always respects active dietary preferences (never overrides them). By default only fills empty days, avoids repeating a recipe already used that week, and -- if a weekly budget is set -- skips a day rather than exceed it. Returns which days were planned and, for any day that couldn't be filled, why.","inputSchema":{"type":"object","properties":{"days":{"type":"array","items":{"type":"string","enum":["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]},"description":"Days to plan; defaults to all 7."},"tags":{"type":"array","items":{"type":"string","enum":["vegetarian","vegan","glutenFree","dairyFree","nutFree","quick","budget"]},"description":"Require all of these tags on every recipe chosen."},"maxPrepMinutes":{"type":"number","description":"Only consider recipes that take this many minutes or less."},"avoidRepeats":{"type":"boolean","description":"Don't reuse a recipe already planned elsewhere this week. Defaults to true."},"onlyEmptyDays":{"type":"boolean","description":"Only fill days with no recipe assigned yet. Defaults to true."},"respectBudget":{"type":"boolean","description":"Skip a day rather than exceed the weekly budget, if one is set. Defaults to true."},"maxCaloriesPerServing":{"type":"number","description":"Only consider recipes at or under this many calories per serving."},"minProteinPerServing":{"type":"number","description":"Only consider recipes with at least this many grams of protein per serving."},"prioritizeExpiring":{"type":"boolean","description":"Prefer recipes that use pantry items expiring soon, to reduce food waste. Defaults to false (prefers pantry match generally)."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"get-budget-status","kind":"answer","impl":"imperative","description":"Get the weekly grocery budget (if set), the meal plan's current estimated cost, and how much room is left.","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"set-weekly-budget","kind":"act","impl":"imperative","description":"Set (or clear, with amount: null) the household's target weekly grocery budget in dollars.","inputSchema":{"type":"object","properties":{"amount":{"type":["number","null"],"description":"Non-negative dollar amount, or null to clear the budget."}},"required":["amount"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"get-pantry","kind":"answer","impl":"imperative","description":"List pantry staples the household is tracking and whether each is currently in stock.","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"update-pantry-item","kind":"act","impl":"imperative","description":"Mark a pantry item as in stock or needed, and/or set when it expires. Items marked 'have' are excluded from the generated shopping list even if a planned recipe calls for them. Fields omitted are left unchanged.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Ingredient name, e.g. \"olive oil\"."},"have":{"type":"boolean","description":"true if currently stocked at home. Omit to leave unchanged."},"expiresOn":{"type":["string","null"],"description":"ISO date string (e.g. \"2026-09-05\") this item expires on, or null to clear it. Omit to leave unchanged."}},"required":["name"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"get-expiring-soon","kind":"answer","impl":"imperative","description":"List pantry items that are on hand and expire within the given number of days (default 3), soonest first -- use this to plan meals that use them up and reduce food waste. A negative daysUntilExpiry means already expired.","inputSchema":{"type":"object","properties":{"withinDays":{"type":"number","description":"Expiry window in days. Defaults to 3."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"get-shopping-list","kind":"answer","impl":"imperative","description":"Get the current shopping list: ingredients needed for the week's planned recipes, minus what's already in the pantry.","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"regenerate-shopping-list","kind":"act","impl":"imperative","description":"Recompute the shopping list from the current meal plan and pantry state. Usually unnecessary since other tools auto-refresh it, but useful to force a recheck.","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"toggle-shopping-item","kind":"act","impl":"imperative","description":"Check or uncheck an item on the shopping list, e.g. after it's been bought.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"unit":{"type":"string","description":"Optional unit to disambiguate items with the same name."},"checked":{"type":"boolean"}},"required":["name","checked"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"get-recent-activity","kind":"answer","impl":"imperative","description":"Get a log of recent actions taken on this plan by either the human or an agent, most recent first.","inputSchema":{"type":"object","properties":{"limit":{"type":"number","description":"Max entries to return, defaults to 10."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"undo-last-action","kind":"act","impl":"imperative","description":"Revert the single most recent state-changing action (by either the human or an agent) -- plan changes, pantry edits, dietary/budget changes, or shopping-list edits. Only one level deep and there is no redo, so check get-recent-activity first if you're unsure what it would undo. Fails if there's nothing to undo.","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]}],"favicon":"/favicons/zingy-hamster-1df2ed.netlify.app.svg","apiSurface":"spec","category":"Health & Education","toolCount":19}}