{"ok":true,"site":{"host":"pantryos.pressplay-subai.workers.dev","url":"https://pantryos.pressplay-subai.workers.dev/","type":"live","desc":"PantryOS is a local-first kitchen inventory and recipe demo powered by WebMCP.","tools":[{"name":"get_inventory","kind":"answer","impl":"imperative","description":"Use to inspect the current fridge, freezer, or pantry before planning or changing food. Do not use for groceries or recipe instructions.","title":"Read kitchen inventory","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"location":{"description":"Only return items stored in this kitchen location.","type":"string","enum":["fridge","freezer","pantry"]},"includeExpired":{"description":"Set true to include unusable expired items in a separate expired bucket.","type":"boolean"}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/kitchen","/recipes","/groceries","/recipes/creamy-chicken-pasta"]},{"name":"get_expiring_items","kind":"answer","impl":"imperative","description":"Use to find non-expired inventory that should be used within a number of days. Do not use to include already expired food; call get_inventory with includeExpired instead.","title":"Find food expiring soon","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"withinDays":{"description":"Return non-expired items expiring from today through this many days; defaults to 3.","type":"integer","minimum":0,"maximum":30}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/kitchen","/recipes","/groceries","/recipes/creamy-chicken-pasta"]},{"name":"add_inventory_item","kind":"act","impl":"imperative","description":"Use after the user states a food, amount, unit, and storage location to add. Do not use for shopping intentions; use add_grocery_item instead.","title":"Add food to the kitchen","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120,"pattern":"\\S","description":"The food or ingredient name to add."},"quantity":{"type":"number","exclusiveMinimum":0,"maximum":1000000,"description":"How much is being added."},"unit":{"type":"string","enum":["g","kg","ml","l","count","package","serving"],"description":"The unit used by the quantity."},"location":{"type":"string","enum":["fridge","freezer","pantry"],"description":"Where the item is stored."},"expiryDate":{"description":"Optional local expiry date in YYYY-MM-DD form; use null when undated.","anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]}},"required":["name","quantity","unit","location"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/kitchen","/recipes","/groceries","/recipes/creamy-chicken-pasta"]},{"name":"consume_inventory_item","kind":"act","impl":"imperative","description":"Use when the user says food was eaten, cooked, or otherwise used. Omit quantity and unit only when they clearly used all of it; do not use for spoilage or throwing food away.","title":"Use some or all inventory","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"item":{"description":"An exact or unambiguous inventory item name.","type":"string","minLength":1,"maxLength":120,"pattern":"\\S"},"itemId":{"description":"The exact id returned by get_inventory.","type":"string","minLength":1,"maxLength":160,"pattern":"\\S"},"quantity":{"description":"Amount used; omit with unit to consume the whole item.","type":"number","exclusiveMinimum":0,"maximum":1000000},"unit":{"description":"Unit for quantity; omit with quantity to consume the whole item.","type":"string","enum":["g","kg","ml","l","count","package","serving"]}},"additionalProperties":false,"allOf":[{"oneOf":[{"required":["item"],"not":{"required":["itemId"]}},{"required":["itemId"],"not":{"required":["item"]}}]},{"anyOf":[{"required":["quantity","unit"]},{"not":{"anyOf":[{"required":["quantity"]},{"required":["unit"]}]}}]}]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/kitchen","/recipes","/groceries","/recipes/creamy-chicken-pasta"]},{"name":"remove_inventory_item","kind":"act","impl":"imperative","description":"Use only when the user wants food discarded rather than consumed. Always opens a human confirmation in PantryOS; do not assume chat wording alone authorizes removal.","title":"Throw out inventory with approval","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"item":{"description":"An exact or unambiguous inventory item name.","type":"string","minLength":1,"maxLength":120,"pattern":"\\S"},"itemId":{"description":"The exact id returned by get_inventory.","type":"string","minLength":1,"maxLength":160,"pattern":"\\S"}},"additionalProperties":false,"oneOf":[{"required":["item"],"not":{"required":["itemId"]}},{"required":["itemId"],"not":{"required":["item"]}}]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/kitchen","/recipes","/groceries","/recipes/creamy-chicken-pasta"]},{"name":"find_recipes","kind":"answer","impl":"imperative","description":"Use to rank up to five available recipes by current ingredients, expiry urgency, time, and missing-item limits. This includes recipes the user saved. Use get_recipe afterward for full instructions; do not invent recipes here.","title":"Find recipes for this kitchen","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"query":{"description":"Optional recipe title or ingredient search text.","type":"string","maxLength":120},"maxMinutes":{"description":"Only return recipes at or under this total time.","type":"integer","exclusiveMinimum":0,"maximum":480},"maxMissingIngredients":{"description":"Maximum missing required non-staple ingredients.","type":"integer","minimum":0,"maximum":40},"prioritizeExpiring":{"description":"Set true to strongly favor recipes using food expiring soon.","type":"boolean"}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/kitchen","/recipes","/groceries","/recipes/creamy-chicken-pasta"]},{"name":"get_recipe","kind":"answer","impl":"imperative","description":"Use with a recipeId from find_recipes to read its ingredients and method. Do not use to search, rank, or change groceries.","title":"Read a recipe","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"recipeId":{"type":"string","minLength":1,"maxLength":160,"pattern":"\\S","description":"The exact recipeId returned by find_recipes."}},"required":["recipeId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/kitchen","/recipes","/groceries","/recipes/creamy-chicken-pasta"]},{"name":"add_recipe","kind":"act","impl":"imperative","description":"Use to save a complete recipe, including one extracted from text or an image attached in the AI conversation. Send one timing form plus structured ingredients and steps; PantryOS recipe photos are added separately in the browser form.","title":"Save a recipe","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":120,"pattern":"\\S","description":"The recipe name."},"description":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"A concise description of the finished recipe."},"servings":{"type":"integer","exclusiveMinimum":0,"maximum":24,"description":"How many servings the unscaled recipe makes."},"timing":{"anyOf":[{"type":"object","properties":{"totalMinutes":{"type":"integer","exclusiveMinimum":0,"maximum":960,"description":"Total elapsed minutes when separate prep and cooking times are unavailable."}},"required":["totalMinutes"],"additionalProperties":false},{"type":"object","properties":{"prepMinutes":{"type":"integer","exclusiveMinimum":0,"maximum":480,"description":"Minutes spent preparing ingredients."},"cookMinutes":{"type":"integer","minimum":0,"maximum":480,"description":"Minutes spent cooking the recipe."}},"required":["prepMinutes","cookMinutes"],"additionalProperties":false},{"type":"object","properties":{"prepMinutes":{"type":"integer","minimum":0,"maximum":480,"description":"Minutes spent preparing ingredients."},"cookMinutes":{"type":"integer","exclusiveMinimum":0,"maximum":480,"description":"Minutes spent cooking the recipe."}},"required":["prepMinutes","cookMinutes"],"additionalProperties":false}],"description":"Use either one total time or separate prep and cooking times; PantryOS derives the total for separate times."},"ingredients":{"minItems":1,"maxItems":40,"type":"array","items":{"anyOf":[{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120,"pattern":"\\S","description":"The ingredient name as it should appear."},"optional":{"description":"True only when the recipe can be made without this ingredient.","type":"boolean"},"section":{"description":"Optional ingredient group, such as Sauce or To finish.","type":"string","minLength":1,"maxLength":80,"pattern":"\\S"},"quantity":{"type":"number","exclusiveMinimum":0,"maximum":1000000,"description":"The numeric ingredient amount."},"displayUnit":{"type":"string","enum":["g","kg","ml","l","count","package","serving","tsp","tbsp","cup","oz","lb"],"description":"The unit paired with the ingredient quantity."}},"required":["name","quantity","displayUnit"],"additionalProperties":false},{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120,"pattern":"\\S","description":"The ingredient name as it should appear."},"optional":{"description":"True only when the recipe can be made without this ingredient.","type":"boolean"},"section":{"description":"Optional ingredient group, such as Sauce or To finish.","type":"string","minLength":1,"maxLength":80,"pattern":"\\S"}},"required":["name"],"additionalProperties":false}]},"description":"The complete ingredient list in recipe order."},"steps":{"minItems":1,"maxItems":30,"type":"array","items":{"type":"object","properties":{"instruction":{"type":"string","minLength":1,"maxLength":800,"pattern":"\\S","description":"One complete recipe direction."},"section":{"description":"Optional method group, such as Prepare or Bake.","type":"string","minLength":1,"maxLength":80,"pattern":"\\S"},"note":{"description":"A useful cook's note tied to this step.","type":"string","minLength":1,"maxLength":300,"pattern":"\\S"}},"required":["instruction"],"additionalProperties":false},"description":"The complete ordered method."}},"required":["title","description","servings","timing","ingredients","steps"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/kitchen","/recipes","/groceries","/recipes/creamy-chicken-pasta"]},{"name":"update_recipe","kind":"act","impl":"imperative","description":"Use to replace the complete structured content of a user-saved recipe after reading it with get_recipe. Send every recipe field; the recipeId and any browser-added photo stay unchanged. Built-in recipes cannot be edited.","title":"Edit a saved recipe","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"recipeId":{"type":"string","minLength":1,"maxLength":160,"pattern":"\\S","description":"The exact custom recipeId returned by add_recipe or find_recipes."},"title":{"type":"string","minLength":1,"maxLength":120,"pattern":"\\S","description":"The recipe name."},"description":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"A concise description of the finished recipe."},"servings":{"type":"integer","exclusiveMinimum":0,"maximum":24,"description":"How many servings the unscaled recipe makes."},"timing":{"anyOf":[{"type":"object","properties":{"totalMinutes":{"type":"integer","exclusiveMinimum":0,"maximum":960,"description":"Total elapsed minutes when separate prep and cooking times are unavailable."}},"required":["totalMinutes"],"additionalProperties":false},{"type":"object","properties":{"prepMinutes":{"type":"integer","exclusiveMinimum":0,"maximum":480,"description":"Minutes spent preparing ingredients."},"cookMinutes":{"type":"integer","minimum":0,"maximum":480,"description":"Minutes spent cooking the recipe."}},"required":["prepMinutes","cookMinutes"],"additionalProperties":false},{"type":"object","properties":{"prepMinutes":{"type":"integer","minimum":0,"maximum":480,"description":"Minutes spent preparing ingredients."},"cookMinutes":{"type":"integer","exclusiveMinimum":0,"maximum":480,"description":"Minutes spent cooking the recipe."}},"required":["prepMinutes","cookMinutes"],"additionalProperties":false}],"description":"Use either one total time or separate prep and cooking times; PantryOS derives the total for separate times."},"ingredients":{"minItems":1,"maxItems":40,"type":"array","items":{"anyOf":[{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120,"pattern":"\\S","description":"The ingredient name as it should appear."},"optional":{"description":"True only when the recipe can be made without this ingredient.","type":"boolean"},"section":{"description":"Optional ingredient group, such as Sauce or To finish.","type":"string","minLength":1,"maxLength":80,"pattern":"\\S"},"quantity":{"type":"number","exclusiveMinimum":0,"maximum":1000000,"description":"The numeric ingredient amount."},"displayUnit":{"type":"string","enum":["g","kg","ml","l","count","package","serving","tsp","tbsp","cup","oz","lb"],"description":"The unit paired with the ingredient quantity."}},"required":["name","quantity","displayUnit"],"additionalProperties":false},{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120,"pattern":"\\S","description":"The ingredient name as it should appear."},"optional":{"description":"True only when the recipe can be made without this ingredient.","type":"boolean"},"section":{"description":"Optional ingredient group, such as Sauce or To finish.","type":"string","minLength":1,"maxLength":80,"pattern":"\\S"}},"required":["name"],"additionalProperties":false}]},"description":"The complete ingredient list in recipe order."},"steps":{"minItems":1,"maxItems":30,"type":"array","items":{"type":"object","properties":{"instruction":{"type":"string","minLength":1,"maxLength":800,"pattern":"\\S","description":"One complete recipe direction."},"section":{"description":"Optional method group, such as Prepare or Bake.","type":"string","minLength":1,"maxLength":80,"pattern":"\\S"},"note":{"description":"A useful cook's note tied to this step.","type":"string","minLength":1,"maxLength":300,"pattern":"\\S"}},"required":["instruction"],"additionalProperties":false},"description":"The complete ordered method."}},"required":["recipeId","title","description","servings","timing","ingredients","steps"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/kitchen","/recipes","/groceries","/recipes/creamy-chicken-pasta"]},{"name":"remove_recipe","kind":"act","impl":"imperative","description":"Use only when the user wants a user-saved recipe deleted. Always opens a human confirmation in PantryOS; built-in recipes cannot be deleted, and grocery items already added from the recipe remain on the list.","title":"Delete a saved recipe with approval","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"recipeId":{"type":"string","minLength":1,"maxLength":160,"pattern":"\\S","description":"The exact custom recipeId returned by add_recipe or find_recipes."}},"required":["recipeId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/kitchen","/recipes","/groceries","/recipes/creamy-chicken-pasta"]},{"name":"add_grocery_item","kind":"act","impl":"imperative","description":"Use once per named shopping item the user wants added. Quantity and unit are optional together. Do not use for food already brought home; use add_inventory_item instead.","title":"Add one grocery item","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120,"pattern":"\\S","description":"The grocery item to add."},"quantity":{"description":"Optional amount; must be paired with unit.","type":"number","exclusiveMinimum":0,"maximum":1000000},"unit":{"description":"Optional quantity unit; must be paired with quantity.","type":"string","enum":["g","kg","ml","l","count","package","serving"]}},"required":["name"],"additionalProperties":false,"anyOf":[{"required":["quantity","unit"]},{"not":{"anyOf":[{"required":["quantity"]},{"required":["unit"]}]}}]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/kitchen","/recipes","/groceries","/recipes/creamy-chicken-pasta"]},{"name":"add_recipe_to_grocery_list","kind":"act","impl":"imperative","description":"Use after a recipe is chosen to add only its currently missing required non-staple ingredients, scaled to optional targetServings. Do not add optional ingredients or duplicate existing grocery items.","title":"Add a recipe's missing groceries","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"recipeId":{"type":"string","minLength":1,"maxLength":160,"pattern":"\\S","description":"The exact recipeId returned by find_recipes."},"targetServings":{"description":"Scale missing ingredient amounts for this many servings.","type":"integer","exclusiveMinimum":0,"maximum":24}},"required":["recipeId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/kitchen","/recipes","/groceries","/recipes/creamy-chicken-pasta"]},{"name":"get_grocery_list","kind":"answer","impl":"imperative","description":"Use to inspect the current grocery checklist and whether items were picked up. Do not use to read kitchen inventory or recipe ingredients.","title":"Read the grocery checklist","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/kitchen","/recipes","/groceries","/recipes/creamy-chicken-pasta"]},{"name":"navigate_pantryos","kind":"act","impl":"imperative","description":"Use only when the user asks to see a PantryOS section or an exact recipe already identified by recipeId. Do not use for browser tabs, external URLs, or recipe search.","title":"Open a PantryOS view","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"destination":{"type":"string","enum":["dashboard","kitchen","recipes","groceries"],"description":"The PantryOS section to open."},"recipeId":{"description":"Optional exact recipeId to open; valid only with the recipes destination.","type":"string","minLength":1,"maxLength":160,"pattern":"\\S"}},"required":["destination"],"additionalProperties":false,"allOf":[{"if":{"required":["recipeId"]},"then":{"properties":{"destination":{"const":"recipes"}}}}]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/kitchen","/recipes","/groceries","/recipes/creamy-chicken-pasta"]}],"apiSurface":"spec","category":"Productivity & Business","toolCount":14}}