Tool tree
gradeNot graded
page: Every page
get_inventoryAnswer
Use to inspect the current fridge, freezer, or pantry before planning or changing food. Do not use for groceries or recipe instructions.
View tool JSON
{
"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.",
"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
},
"page": "/"
}get_expiring_itemsAnswer
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.
View tool JSON
{
"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.",
"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
},
"page": "/"
}add_inventory_itemAction
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.
View tool JSON
{
"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.",
"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
},
"page": "/"
}consume_inventory_itemAction
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.
View tool JSON
{
"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.",
"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"
]
}
]
}
}
]
}
]
},
"page": "/"
}remove_inventory_itemAction
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.
View tool JSON
{
"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.",
"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"
]
}
}
]
},
"page": "/"
}find_recipesAnswer
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.
View tool JSON
{
"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.",
"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
},
"page": "/"
}get_recipeAnswer
Use with a recipeId from find_recipes to read its ingredients and method. Do not use to search, rank, or change groceries.
View tool JSON
{
"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.",
"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
},
"page": "/"
}add_recipeAction
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.
View tool JSON
{
"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.",
"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
},
"page": "/"
}update_recipeAction
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.
View tool JSON
{
"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.",
"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
},
"page": "/"
}remove_recipeAction
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.
View tool JSON
{
"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.",
"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
},
"page": "/"
}add_grocery_itemAction
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.
View tool JSON
{
"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.",
"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"
]
}
]
}
}
]
},
"page": "/"
}add_recipe_to_grocery_listAction
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.
View tool JSON
{
"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.",
"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
},
"page": "/"
}get_grocery_listAnswer
Use to inspect the current grocery checklist and whether items were picked up. Do not use to read kitchen inventory or recipe ingredients.
View tool JSON
{
"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.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"page": "/"
}navigate_pantryosAction
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.
View tool JSON
{
"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.",
"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"
}
}
}
}
]
},
"page": "/"
}