RecipeBee MCP
RecipeBee MCP server enables agents to search public recipes, preview complete recipe details including ingredients and steps, and save recipes or meal plans to a user's private account. It supports guided cooking workflows, shopping list generation, and image attachment for recipes, requiring OAuth for private actions while allowing anonymous access for public searches.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://recipebee.app/mcpWhat you can do with it
- Search and preview public recipes without an API key
- Save complete recipes privately to a user's account
- Preview and import dated meal plans
- Attach or generate images for private recipes
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- recipebee 0.4.5
- MCP protocol
- 2025-06-18
- Tools
- 19 advertised
- Resources
- 24 advertised
- Resource templates
- 0 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
19 advertised
preview_meal_plan — Preview meal plan
Use when the user asks to review a meal plan without adding it to RecipeBee. This chat-only, data-only tool never writes recipes or meal plans and does not render a RecipeBee card.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"title",
"start_date",
"end_date",
"recipes",
"assignments"
],
"properties": {
"title": {
"type": "string",
"maxLength": 255,
"minLength": 1
},
"recipes": {
"type": "array",
"items": {
"type": "object",
"required": [
"ref",
"recipe"
],
"properties": {
"ref": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$",
"maxLength": 64,
"minLength": 1
},
"recipe": {
"type": "object",
"required": [
"title",
"prep_time_minutes",
"cook_time_minutes",
"total_time_minutes"
],
"properties": {
"tags": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"maxLength": 64
},
"maxItems": 20
},
{
"type": "null"
}
]
},
"notes": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"maxLength": 500
},
"maxItems": 20
},
{
"type": "null"
}
]
},
"steps": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"maxLength": 4000,
"minLength": 1
},
{
"type": "object",
"required": [
"instruction"
],
"properties": {
"tip": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
]
},
"equipment": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 20
},
"heat_level": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"instruction": {
"type": "string",
"maxLength": 4000,
"minLength": 1
},
"temperature": {
"anyOf": [
{
"type": "object",
"required": [
"value",
"unit"
],
"properties": {
"unit": {
"type": "string",
"maxLength": 16
},
"value": {
"type": "number"
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"timer_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 1440,
"minimum": 0
},
{
"type": "null"
}
]
},
"duration_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 1440,
"minimum": 0
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
]
},
"maxItems": 100,
"minItems": 1
},
"title": {
"type": "string",
"maxLength": 160,
"minLength": 1
},
"content": {
"type": "object",
"required": [
"schema_version",
"ingredient_sections",
"instruction_sections"
],
"properties": {
"schema_version": {
"type": "number",
"const": 1
},
"ingredient_sections": {
"type": "array",
"items": {
"type": "object",
"required": [
"items"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"name": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"unit": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"optional": {
"type": "boolean"
},
"quantity": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
},
"preparation": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 200,
"minItems": 1
},
"title": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 20,
"minItems": 1
},
"instruction_sections": {
"type": "array",
"items": {
"type": "object",
"required": [
"steps"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"instruction"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"tip": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
]
},
"equipment": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 20
},
"heat_level": {
"anyOf": [
{
"enum": [
"low",
"medium-low",
"medium",
"medium-high",
"high"
],
"type": "string"
},
{
"type": "null"
}
]
},
"instruction": {
"type": "string",
"maxLength": 4000,
"minLength": 1
},
"duration_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 1440,
"minimum": 0
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 100,
"minItems": 1
},
"title": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 20,
"minItems": 1
}
},
"description": "For multi-component recipes, provide ingredient and instruction sections here and omit flat ingredients and steps.",
"additionalProperties": false
},
"summary": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "null"
}
]
},
"servings": {
"anyOf": [
{
"type": "integer",
"maximum": 250,
"minimum": 1
},
{
"type": "null"
}
]
},
"ingredients": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"maxLength": 500,
"minLength": 1
},
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"unit": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"group": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
]
},
"optional": {
"type": "boolean"
},
"quantity": {
"type": [
"string",
"number",
"null"
]
},
"preparation": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
]
},
"maxItems": 200,
"minItems": 1
},
"cook_time_minutes": {
"type": "integer",
"maximum": 1440,
"minimum": 0,
"description": "Estimated cooking time in minutes. Use 0 only when no cooking is needed."
},
"prep_time_minutes": {
"type": "integer",
"maximum": 1440,
"minimum": 0,
"description": "Estimated preparation time in minutes. Use 0 only when no preparation is needed."
},
"total_time_minutes": {
"type": "integer",
"maximum": 1440,
"minimum": 0,
"description": "Total elapsed time in minutes. Keep this consistent with the preparation and cooking steps."
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"maxItems": 50,
"minItems": 1
},
"end_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"start_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"assignments": {
"type": "array",
"items": {
"type": "object",
"required": [
"date",
"meal_type",
"recipe_ref",
"servings"
],
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"notes": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
]
},
"order": {
"anyOf": [
{
"type": "integer",
"maximum": 1000,
"minimum": 0
},
{
"type": "null"
}
]
},
"servings": {
"type": "integer",
"maximum": 250,
"minimum": 1
},
"meal_type": {
"enum": [
"breakfast",
"lunch",
"dinner",
"snack"
],
"type": "string"
},
"recipe_ref": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$",
"maxLength": 64,
"minLength": 1
}
},
"additionalProperties": false
},
"maxItems": 300,
"minItems": 1
},
"description": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "null"
}
]
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"plan",
"persisted",
"is_public"
],
"properties": {
"plan": {
"type": "object",
"required": [
"title",
"start_date",
"end_date",
"recipes",
"assignments"
],
"properties": {
"title": {
"type": "string",
"maxLength": 255,
"minLength": 1
},
"recipes": {
"type": "array",
"items": {
"type": "object",
"required": [
"ref",
"recipe"
],
"properties": {
"ref": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$",
"maxLength": 64,
"minLength": 1
},
"recipe": {
"type": "object",
"required": [
"title",
"prep_time_minutes",
"cook_time_minutes",
"total_time_minutes"
],
"properties": {
"tags": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"maxLength": 64
},
"maxItems": 20
},
{
"type": "null"
}
]
},
"notes": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"maxLength": 500
},
"maxItems": 20
},
{
"type": "null"
}
]
},
"steps": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"maxLength": 4000,
"minLength": 1
},
{
"type": "object",
"required": [
"instruction"
],
"properties": {
"tip": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
]
},
"equipment": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 20
},
"heat_level": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"instruction": {
"type": "string",
"maxLength": 4000,
"minLength": 1
},
"temperature": {
"anyOf": [
{
"type": "object",
"required": [
"value",
"unit"
],
"properties": {
"unit": {
"type": "string",
"maxLength": 16
},
"value": {
"type": "number"
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"timer_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 1440,
"minimum": 0
},
{
"type": "null"
}
]
},
"duration_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 1440,
"minimum": 0
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
]
},
"maxItems": 100,
"minItems": 1
},
"title": {
"type": "string",
"maxLength": 160,
"minLength": 1
},
"content": {
"type": "object",
"required": [
"schema_version",
"ingredient_sections",
"instruction_sections"
],
"properties": {
"schema_version": {
"type": "number",
"const": 1
},
"ingredient_sections": {
"type": "array",
"items": {
"type": "object",
"required": [
"items"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"name": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"unit": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"optional": {
"type": "boolean"
},
"quantity": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
},
"preparation": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 200,
"minItems": 1
},
"title": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 20,
"minItems": 1
},
"instruction_sections": {
"type": "array",
"items": {
"type": "object",
"required": [
"steps"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"instruction"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"tip": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
]
},
"equipment": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 20
},
"heat_level": {
"anyOf": [
{
"enum": [
"low",
"medium-low",
"medium",
"medium-high",
"high"
],
"type": "string"
},
{
"type": "null"
}
]
},
"instruction": {
"type": "string",
"maxLength": 4000,
"minLength": 1
},
"duration_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 1440,
"minimum": 0
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 100,
"minItems": 1
},
"title": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 20,
"minItems": 1
}
},
"description": "For multi-component recipes, provide ingredient and instruction sections here and omit flat ingredients and steps.",
"additionalProperties": false
},
"summary": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "null"
}
]
},
"servings": {
"anyOf": [
{
"type": "integer",
"maximum": 250,
"minimum": 1
},
{
"type": "null"
}
]
},
"ingredients": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"maxLength": 500,
"minLength": 1
},
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"unit": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"group": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
]
},
"optional": {
"type": "boolean"
},
"quantity": {
"type": [
"string",
"number",
"null"
]
},
"preparation": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
]
},
"maxItems": 200,
"minItems": 1
},
"cook_time_minutes": {
"type": "integer",
"maximum": 1440,
"minimum": 0,
"description": "Estimated cooking time in minutes. Use 0 only when no cooking is needed."
},
"prep_time_minutes": {
"type": "integer",
"maximum": 1440,
"minimum": 0,
"description": "Estimated preparation time in minutes. Use 0 only when no preparation is needed."
},
"total_time_minutes": {
"type": "integer",
"maximum": 1440,
"minimum": 0,
"description": "Total elapsed time in minutes. Keep this consistent with the preparation and cooking steps."
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"maxItems": 50,
"minItems": 1
},
"end_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"start_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"assignments": {
"type": "array",
"items": {
"type": "object",
"required": [
"date",
"meal_type",
"recipe_ref",
"servings"
],
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"notes": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
]
},
"order": {
"anyOf": [
{
"type": "integer",
"maximum": 1000,
"minimum": 0
},
{
"type": "null"
}
]
},
"servings": {
"type": "integer",
"maximum": 250,
"minimum": 1
},
"meal_type": {
"enum": [
"breakfast",
"lunch",
"dinner",
"snack"
],
"type": "string"
},
"recipe_ref": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$",
"maxLength": 64,
"minLength": 1
}
},
"additionalProperties": false
},
"maxItems": 300,
"minItems": 1
},
"description": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"is_public": {
"type": "boolean",
"const": false
},
"persisted": {
"type": "boolean",
"const": false
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}prepare_meal_plan_import — Prepare meal-plan import
Use only after the user explicitly asks to add a completed meal plan to RecipeBee. This stateful, data-only step checks private recipes for exact or possible matches and creates a short-lived import draft without creating recipes or a meal plan or rendering a RecipeBee card. Do not use for chat-only meal planning. Wait for explicit recipe choices when matches are returned.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"title",
"start_date",
"end_date",
"recipes",
"assignments"
],
"properties": {
"title": {
"type": "string",
"maxLength": 255,
"minLength": 1
},
"recipes": {
"type": "array",
"items": {
"type": "object",
"required": [
"ref",
"recipe"
],
"properties": {
"ref": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$",
"maxLength": 64,
"minLength": 1
},
"recipe": {
"type": "object",
"required": [
"title",
"prep_time_minutes",
"cook_time_minutes",
"total_time_minutes"
],
"properties": {
"tags": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"maxLength": 64
},
"maxItems": 20
},
{
"type": "null"
}
]
},
"notes": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"maxLength": 500
},
"maxItems": 20
},
{
"type": "null"
}
]
},
"steps": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"maxLength": 4000,
"minLength": 1
},
{
"type": "object",
"required": [
"instruction"
],
"properties": {
"tip": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
]
},
"equipment": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 20
},
"heat_level": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"instruction": {
"type": "string",
"maxLength": 4000,
"minLength": 1
},
"temperature": {
"anyOf": [
{
"type": "object",
"required": [
"value",
"unit"
],
"properties": {
"unit": {
"type": "string",
"maxLength": 16
},
"value": {
"type": "number"
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"timer_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 1440,
"minimum": 0
},
{
"type": "null"
}
]
},
"duration_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 1440,
"minimum": 0
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
]
},
"maxItems": 100,
"minItems": 1
},
"title": {
"type": "string",
"maxLength": 160,
"minLength": 1
},
"content": {
"type": "object",
"required": [
"schema_version",
"ingredient_sections",
"instruction_sections"
],
"properties": {
"schema_version": {
"type": "number",
"const": 1
},
"ingredient_sections": {
"type": "array",
"items": {
"type": "object",
"required": [
"items"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"name": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"unit": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"optional": {
"type": "boolean"
},
"quantity": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
},
"preparation": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 200,
"minItems": 1
},
"title": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 20,
"minItems": 1
},
"instruction_sections": {
"type": "array",
"items": {
"type": "object",
"required": [
"steps"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"instruction"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"tip": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
]
},
"equipment": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 20
},
"heat_level": {
"anyOf": [
{
"enum": [
"low",
"medium-low",
"medium",
"medium-high",
"high"
],
"type": "string"
},
{
"type": "null"
}
]
},
"instruction": {
"type": "string",
"maxLength": 4000,
"minLength": 1
},
"duration_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 1440,
"minimum": 0
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 100,
"minItems": 1
},
"title": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 20,
"minItems": 1
}
},
"description": "For multi-component recipes, provide ingredient and instruction sections here and omit flat ingredients and steps.",
"additionalProperties": false
},
"summary": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "null"
}
]
},
"servings": {
"anyOf": [
{
"type": "integer",
"maximum": 250,
"minimum": 1
},
{
"type": "null"
}
]
},
"ingredients": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"maxLength": 500,
"minLength": 1
},
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"unit": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"group": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
]
},
"optional": {
"type": "boolean"
},
"quantity": {
"type": [
"string",
"number",
"null"
]
},
"preparation": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
]
},
"maxItems": 200,
"minItems": 1
},
"cook_time_minutes": {
"type": "integer",
"maximum": 1440,
"minimum": 0,
"description": "Estimated cooking time in minutes. Use 0 only when no cooking is needed."
},
"prep_time_minutes": {
"type": "integer",
"maximum": 1440,
"minimum": 0,
"description": "Estimated preparation time in minutes. Use 0 only when no preparation is needed."
},
"total_time_minutes": {
"type": "integer",
"maximum": 1440,
"minimum": 0,
"description": "Total elapsed time in minutes. Keep this consistent with the preparation and cooking steps."
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"maxItems": 50,
"minItems": 1
},
"end_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"start_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"assignments": {
"type": "array",
"items": {
"type": "object",
"required": [
"date",
"meal_type",
"recipe_ref",
"servings"
],
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"notes": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
]
},
"order": {
"anyOf": [
{
"type": "integer",
"maximum": 1000,
"minimum": 0
},
{
"type": "null"
}
]
},
"servings": {
"type": "integer",
"maximum": 250,
"minimum": 1
},
"meal_type": {
"enum": [
"breakfast",
"lunch",
"dinner",
"snack"
],
"type": "string"
},
"recipe_ref": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$",
"maxLength": 64,
"minLength": 1
}
},
"additionalProperties": false
},
"maxItems": 300,
"minItems": 1
},
"description": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "null"
}
]
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"draft_id",
"status",
"plan",
"recipes",
"requires_choices",
"unique_recipe_count",
"assignment_count"
],
"properties": {
"plan": {
"type": "object",
"required": [
"assignments"
],
"properties": {
"title": {
"type": [
"string",
"null"
]
},
"end_date": {
"type": [
"string",
"null"
]
},
"start_date": {
"type": [
"string",
"null"
]
},
"assignments": {
"type": "array",
"items": {
"type": "object",
"required": [
"date",
"meal_type",
"recipe_ref",
"servings"
],
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"notes": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
]
},
"order": {
"anyOf": [
{
"type": "integer",
"maximum": 1000,
"minimum": 0
},
{
"type": "null"
}
]
},
"servings": {
"type": "integer",
"maximum": 250,
"minimum": 1
},
"meal_type": {
"enum": [
"breakfast",
"lunch",
"dinner",
"snack"
],
"type": "string"
},
"recipe_ref": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$",
"maxLength": 64,
"minLength": 1
}
},
"additionalProperties": false
}
},
"description": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
},
"status": {
"type": "string"
},
"recipes": {
"type": "array",
"items": {
"type": "object",
"required": [
"ref",
"title",
"matches",
"requires_choice"
],
"properties": {
"ref": {
"type": "string"
},
"title": {
"type": "string"
},
"matches": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"title",
"match_type"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
},
"slug": {
"type": [
"string",
"null"
]
},
"title": {
"type": "string"
},
"servings": {
"type": [
"number",
"null"
]
},
"match_type": {
"enum": [
"exact",
"possible"
],
"type": "string"
}
},
"additionalProperties": false
}
},
"requires_choice": {
"type": "boolean"
}
},
"additionalProperties": false
}
},
"draft_id": {
"type": "string"
},
"expires_at": {
"type": [
"string",
"null"
]
},
"meal_plan_id": {
"type": [
"string",
"null"
]
},
"assignment_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"requires_choices": {
"type": "boolean"
},
"unique_recipe_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}commit_meal_plan_import — Add meal plan to RecipeBee
Use after prepare_meal_plan_import. Submit exactly one decision for every recipe. Use use_existing only with a recipe ID returned by preparation and only after the user chooses it; otherwise use create_new. This creates one private meal plan and its entries atomically, then renders the final RecipeBee card. Claim success only when persisted=true. The response may include an optional image batch link; never start image generation from MCP client.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"draft_id",
"decisions"
],
"properties": {
"draft_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"decisions": {
"type": "array",
"items": {
"type": "object",
"required": [
"recipe_ref",
"action"
],
"properties": {
"action": {
"enum": [
"use_existing",
"create_new"
],
"type": "string"
},
"recipe_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"recipe_ref": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$",
"maxLength": 64,
"minLength": 1
}
},
"additionalProperties": false
},
"maxItems": 50,
"minItems": 1
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"meal_plan",
"recipes",
"new_recipe_count",
"reused_recipe_count",
"entry_count",
"duplicate",
"persisted"
],
"properties": {
"recipes": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"duplicate": {
"type": "boolean"
},
"meal_plan": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"persisted": {
"type": "boolean",
"const": true
},
"entry_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"image_batch": {
"anyOf": [
{
"type": "object",
"required": [
"id",
"source",
"status",
"requested_count",
"eligible_count",
"completed_count",
"failed_count",
"skipped_count",
"estimated_credits",
"reserved_credits",
"image_credit_cost",
"available_credits",
"estimated_selected_credits",
"progress",
"requires_confirmation",
"access",
"web_url",
"items"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"items": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"access": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"source": {
"type": "string"
},
"status": {
"type": "string"
},
"web_url": {
"type": "string",
"format": "uri"
},
"progress": {
"type": "object",
"required": [
"completed",
"total",
"percent"
],
"properties": {
"total": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"percent": {
"type": "integer",
"maximum": 100,
"minimum": 0
},
"completed": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
},
"created_at": {
"type": [
"string",
"null"
]
},
"completed_at": {
"type": [
"string",
"null"
]
},
"confirmed_at": {
"type": [
"string",
"null"
]
},
"failed_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"meal_plan_id": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
]
},
"skipped_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"eligible_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"completed_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"requested_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"reserved_credits": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"source_reference": {
"type": [
"string",
"null"
]
},
"available_credits": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"estimated_credits": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"image_credit_cost": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"requires_confirmation": {
"type": "boolean"
},
"estimated_selected_credits": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"new_recipe_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"reused_recipe_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_image_generation_batch — Get RecipeBee image batch status
Read the progress of an optional RecipeBee image-generation batch returned by a meal-plan import. This tool never starts, charges, or cancels image generation; the user must confirm the batch in RecipeBee.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"batch_id"
],
"properties": {
"batch_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"source",
"status",
"requested_count",
"eligible_count",
"completed_count",
"failed_count",
"skipped_count",
"estimated_credits",
"reserved_credits",
"image_credit_cost",
"available_credits",
"estimated_selected_credits",
"progress",
"requires_confirmation",
"access",
"web_url",
"items"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"items": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"access": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"source": {
"type": "string"
},
"status": {
"type": "string"
},
"web_url": {
"type": "string",
"format": "uri"
},
"progress": {
"type": "object",
"required": [
"completed",
"total",
"percent"
],
"properties": {
"total": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"percent": {
"type": "integer",
"maximum": 100,
"minimum": 0
},
"completed": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
},
"created_at": {
"type": [
"string",
"null"
]
},
"completed_at": {
"type": [
"string",
"null"
]
},
"confirmed_at": {
"type": [
"string",
"null"
]
},
"failed_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"meal_plan_id": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
]
},
"skipped_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"eligible_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"completed_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"requested_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"reserved_credits": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"source_reference": {
"type": [
"string",
"null"
]
},
"available_credits": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"estimated_credits": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"image_credit_cost": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"requires_confirmation": {
"type": "boolean"
},
"estimated_selected_credits": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_saved_recipes — List private RecipeBee recipes
Browse or search the connected user's private RecipeBee recipe library. Use only when the user asks to browse or search saved recipes. Returns a small paginated summary; use show_recipe only for a recipe the user selects.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"query": {
"type": "string",
"maxLength": 100
},
"cursor": {
"type": "string",
"maxLength": 2048
},
"per_page": {
"type": "integer",
"default": 12,
"maximum": 30,
"minimum": 1
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"next_cursor",
"prev_cursor",
"has_more",
"per_page"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"title",
"summary",
"prep_time_minutes",
"cook_time_minutes",
"total_time_min",
"updated_at",
"url"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"url": {
"type": "string",
"format": "uri"
},
"title": {
"type": "string"
},
"summary": {
"type": [
"string",
"null"
]
},
"image_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
]
},
"updated_at": {
"type": [
"string",
"null"
]
},
"total_time_min": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
]
},
"cook_time_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
]
},
"prep_time_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 30
},
"has_more": {
"type": "boolean"
},
"per_page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"next_cursor": {
"type": [
"string",
"null"
]
},
"prev_cursor": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_saved_meal_plans — List private RecipeBee meal plans
Browse or search the connected user's private RecipeBee meal plans. Use only when the user asks to browse or search meal plans. Returns paginated summaries; use show_meal_plan only for a plan the user selects.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"query": {
"type": "string",
"maxLength": 100
},
"cursor": {
"type": "string",
"maxLength": 2048
},
"per_page": {
"type": "integer",
"default": 12,
"maximum": 30,
"minimum": 1
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"next_cursor",
"prev_cursor",
"has_more",
"per_page"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"title",
"description",
"start_date",
"end_date",
"entry_count",
"updated_at",
"url"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"url": {
"type": "string",
"format": "uri"
},
"title": {
"type": "string"
},
"end_date": {
"type": [
"string",
"null"
]
},
"start_date": {
"type": [
"string",
"null"
]
},
"updated_at": {
"type": [
"string",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"entry_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
},
"maxItems": 30
},
"has_more": {
"type": "boolean"
},
"per_page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"next_cursor": {
"type": [
"string",
"null"
]
},
"prev_cursor": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}show_meal_plan — Show private RecipeBee meal plan
Read the selected private meal plan and its scheduled recipes. Use only after the user selects or names a plan. This tool is read-only and does not edit the plan.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"meal_plan_id"
],
"properties": {
"meal_plan_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"meal_plan"
],
"properties": {
"meal_plan": {
"type": "object",
"required": [
"id",
"title",
"description",
"start_date",
"end_date",
"entry_count",
"entries_truncated",
"url",
"entries",
"is_public"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"url": {
"type": "string",
"format": "uri"
},
"title": {
"type": "string"
},
"entries": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"date",
"meal_type",
"servings",
"order",
"recipe"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"date": {
"type": [
"string",
"null"
]
},
"order": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"recipe": {
"anyOf": [
{
"type": "object",
"required": [
"id",
"title",
"url"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"url": {
"type": "string",
"format": "uri"
},
"title": {
"type": "string"
},
"image_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"servings": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
]
},
"meal_type": {
"type": "string"
}
},
"additionalProperties": false
},
"maxItems": 300
},
"end_date": {
"type": [
"string",
"null"
]
},
"is_public": {
"type": "boolean",
"const": false
},
"start_date": {
"type": [
"string",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"entry_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"entries_truncated": {
"type": "boolean"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}open_recipebee_kitchen — Open RecipeBee Kitchen
Open the connected user's private recipe and meal-plan library in the ChatGPT sidebar. The app reads only the library section the user opens.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"opened"
],
"properties": {
"opened": {
"type": "boolean",
"const": true
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}preview_recipe — Preview recipe
Use when the user asks to preview or review a complete recipe without saving it. Include realistic integer prep_time_minutes, cook_time_minutes, and total_time_minutes values in every complete recipe. Estimate them when the user does not specify times; use 0 only when that part genuinely takes no time. For recipes with components or cooking stages, provide content sections and omit flat ingredients and steps. Validate and render the recipe without persistence. Do not call as an intermediate step when the user has already explicitly asked to save.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"title",
"prep_time_minutes",
"cook_time_minutes",
"total_time_minutes"
],
"properties": {
"tags": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"maxLength": 64
},
"maxItems": 20
},
{
"type": "null"
}
]
},
"notes": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"maxLength": 500
},
"maxItems": 20
},
{
"type": "null"
}
]
},
"steps": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"maxLength": 4000,
"minLength": 1
},
{
"type": "object",
"required": [
"instruction"
],
"properties": {
"tip": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
]
},
"equipment": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 20
},
"heat_level": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"instruction": {
"type": "string",
"maxLength": 4000,
"minLength": 1
},
"temperature": {
"anyOf": [
{
"type": "object",
"required": [
"value",
"unit"
],
"properties": {
"unit": {
"type": "string",
"maxLength": 16
},
"value": {
"type": "number"
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"timer_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 1440,
"minimum": 0
},
{
"type": "null"
}
]
},
"duration_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 1440,
"minimum": 0
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
]
},
"maxItems": 100,
"minItems": 1
},
"title": {
"type": "string",
"maxLength": 160,
"minLength": 1
},
"content": {
"type": "object",
"required": [
"schema_version",
"ingredient_sections",
"instruction_sections"
],
"properties": {
"schema_version": {
"type": "number",
"const": 1
},
"ingredient_sections": {
"type": "array",
"items": {
"type": "object",
"required": [
"items"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"name": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"unit": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"optional": {
"type": "boolean"
},
"quantity": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
},
"preparation": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 200,
"minItems": 1
},
"title": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 20,
"minItems": 1
},
"instruction_sections": {
"type": "array",
"items": {
"type": "object",
"required": [
"steps"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"instruction"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"tip": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
]
},
"equipment": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 20
},
"heat_level": {
"anyOf": [
{
"enum": [
"low",
"medium-low",
"medium",
"medium-high",
"high"
],
"type": "string"
},
{
"type": "null"
}
]
},
"instruction": {
"type": "string",
"maxLength": 4000,
"minLength": 1
},
"duration_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 1440,
"minimum": 0
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 100,
"minItems": 1
},
"title": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 20,
"minItems": 1
}
},
"description": "For multi-component recipes, provide ingredient and instruction sections here and omit flat ingredients and steps.",
"additionalProperties": false
},
"summary": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "null"
}
]
},
"servings": {
"anyOf": [
{
"type": "integer",
"maximum": 250,
"minimum": 1
},
{
"type": "null"
}
]
},
"ingredients": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"maxLength": 500,
"minLength": 1
},
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"unit": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"group": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
]
},
"optional": {
"type": "boolean"
},
"quantity": {
"type": [
"string",
"number",
"null"
]
},
"preparation": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
]
},
"maxItems": 200,
"minItems": 1
},
"cook_time_minutes": {
"type": "integer",
"maximum": 1440,
"minimum": 0,
"description": "Estimated cooking time in minutes. Use 0 only when no cooking is needed."
},
"prep_time_minutes": {
"type": "integer",
"maximum": 1440,
"minimum": 0,
"description": "Estimated preparation time in minutes. Use 0 only when no preparation is needed."
},
"total_time_minutes": {
"type": "integer",
"maximum": 1440,
"minimum": 0,
"description": "Total elapsed time in minutes. Keep this consistent with the preparation and cooking steps."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recipe",
"persisted",
"is_public"
],
"properties": {
"recipe": {
"type": "object",
"required": [
"title",
"prep_time_minutes",
"cook_time_minutes",
"total_time_minutes"
],
"properties": {
"tags": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"maxLength": 64
},
"maxItems": 20
},
{
"type": "null"
}
]
},
"notes": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"maxLength": 500
},
"maxItems": 20
},
{
"type": "null"
}
]
},
"steps": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"maxLength": 4000,
"minLength": 1
},
{
"type": "object",
"required": [
"instruction"
],
"properties": {
"tip": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
]
},
"equipment": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 20
},
"heat_level": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"instruction": {
"type": "string",
"maxLength": 4000,
"minLength": 1
},
"temperature": {
"anyOf": [
{
"type": "object",
"required": [
"value",
"unit"
],
"properties": {
"unit": {
"type": "string",
"maxLength": 16
},
"value": {
"type": "number"
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"timer_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 1440,
"minimum": 0
},
{
"type": "null"
}
]
},
"duration_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 1440,
"minimum": 0
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
]
},
"maxItems": 100,
"minItems": 1
},
"title": {
"type": "string",
"maxLength": 160,
"minLength": 1
},
"content": {
"type": "object",
"required": [
"schema_version",
"ingredient_sections",
"instruction_sections"
],
"properties": {
"schema_version": {
"type": "number",
"const": 1
},
"ingredient_sections": {
"type": "array",
"items": {
"type": "object",
"required": [
"items"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"name": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"unit": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"optional": {
"type": "boolean"
},
"quantity": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
},
"preparation": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 200,
"minItems": 1
},
"title": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 20,
"minItems": 1
},
"instruction_sections": {
"type": "array",
"items": {
"type": "object",
"required": [
"steps"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"instruction"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"tip": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
]
},
"equipment": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 20
},
"heat_level": {
"anyOf": [
{
"enum": [
"low",
"medium-low",
"medium",
"medium-high",
"high"
],
"type": "string"
},
{
"type": "null"
}
]
},
"instruction": {
"type": "string",
"maxLength": 4000,
"minLength": 1
},
"duration_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 1440,
"minimum": 0
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 100,
"minItems": 1
},
"title": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 20,
"minItems": 1
}
},
"description": "For multi-component recipes, provide ingredient and instruction sections here and omit flat ingredients and steps.",
"additionalProperties": false
},
"summary": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "null"
}
]
},
"servings": {
"anyOf": [
{
"type": "integer",
"maximum": 250,
"minimum": 1
},
{
"type": "null"
}
]
},
"ingredients": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"maxLength": 500,
"minLength": 1
},
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"unit": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"group": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
]
},
"optional": {
"type": "boolean"
},
"quantity": {
"type": [
"string",
"number",
"null"
]
},
"preparation": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
]
},
"maxItems": 200,
"minItems": 1
},
"cook_time_minutes": {
"type": "integer",
"maximum": 1440,
"minimum": 0,
"description": "Estimated cooking time in minutes. Use 0 only when no cooking is needed."
},
"prep_time_minutes": {
"type": "integer",
"maximum": 1440,
"minimum": 0,
"description": "Estimated preparation time in minutes. Use 0 only when no preparation is needed."
},
"total_time_minutes": {
"type": "integer",
"maximum": 1440,
"minimum": 0,
"description": "Total elapsed time in minutes. Keep this consistent with the preparation and cooking steps."
}
},
"additionalProperties": false
},
"is_public": {
"type": "boolean",
"const": false
},
"persisted": {
"type": "boolean",
"const": false
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}attach_instruction_image — Attach instructional photo
Use after a structured recipe is saved and the user asks to attach its photos. Use the returned canonical stage/action ID and latest content revision. Supply a transferable host file descriptor or accessible HTTPS image URL, only with established reuse permission. Do not scrape private chats or claim access to search thumbnails. This saves no new recipe and uses no image-generation credits. Poll get_instruction_image for completion. If transfer is unavailable, offer RecipeBee upload. A failed photo never requires resaving the recipe.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recipe_id",
"expected_revision",
"target_type",
"target_id",
"reuse_permission"
],
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"maxLength": 512,
"minLength": 1
},
"file_name": {
"anyOf": [
{
"type": "string",
"maxLength": 512
},
{
"type": "null"
}
]
},
"mime_type": {
"anyOf": [
{
"type": "string",
"maxLength": 255
},
{
"type": "null"
}
]
},
"download_url": {
"type": "string",
"format": "uri",
"maxLength": 4096
}
},
"additionalProperties": false
},
"caption": {
"type": "string",
"maxLength": 500
},
"alt_text": {
"type": "string",
"maxLength": 500
},
"image_url": {
"type": "string",
"format": "uri",
"maxLength": 4096
},
"recipe_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"target_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"target_type": {
"enum": [
"instruction_section",
"step"
],
"type": "string"
},
"reuse_permission": {
"enum": [
"user_owned",
"permission_granted",
"licensed"
],
"type": "string",
"description": "Use only when the user owns the image or has established permission to save and use it. A search result or attribution alone does not establish permission."
},
"expected_revision": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"operation",
"persisted"
],
"properties": {
"operation": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"persisted": {
"type": "boolean"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}update_recipe_content — Update recipe sections
Use only after reading the saved recipe with show_recipe and receiving a direct request to change its ingredients or instructions. Send the full content document and its current revision. Preserve existing section and item IDs for unchanged content; omitted sections or actions are deleted. New sections and actions can omit IDs. This replaces grouped text atomically and advances the revision. Photos remain optional and are not changed by this tool. On a revision conflict, read the recipe again and reconcile the requested edit before retrying.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recipe_id",
"expected_revision",
"content"
],
"properties": {
"content": {
"type": "object",
"required": [
"schema_version",
"ingredient_sections",
"instruction_sections"
],
"properties": {
"schema_version": {
"type": "number",
"const": 1
},
"ingredient_sections": {
"type": "array",
"items": {
"type": "object",
"required": [
"items"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"name": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"unit": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"optional": {
"type": "boolean"
},
"quantity": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
},
"preparation": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 200,
"minItems": 1
},
"title": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 20,
"minItems": 1
},
"instruction_sections": {
"type": "array",
"items": {
"type": "object",
"required": [
"steps"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"instruction"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"tip": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
]
},
"equipment": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 20
},
"heat_level": {
"anyOf": [
{
"enum": [
"low",
"medium-low",
"medium",
"medium-high",
"high"
],
"type": "string"
},
{
"type": "null"
}
]
},
"instruction": {
"type": "string",
"maxLength": 4000,
"minLength": 1
},
"duration_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 1440,
"minimum": 0
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 100,
"minItems": 1
},
"title": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 20,
"minItems": 1
}
},
"additionalProperties": false
},
"recipe_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"expected_revision": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"content",
"persisted"
],
"properties": {
"content": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"persisted": {
"type": "boolean"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}get_instruction_image — Get instructional photo status
Read one attachment operation returned by attach_instruction_image. Never resave the recipe to retry a photo. Use show_recipe after completion to refresh the full recipe view.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recipe_id",
"operation_id"
],
"properties": {
"recipe_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"operation_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"operation",
"persisted"
],
"properties": {
"operation": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"persisted": {
"type": "boolean"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}remove_instruction_image — Remove instructional photo
Use only after the user asks to remove a specific stage or action photo. Read the latest recipe first and supply its content revision plus the photo operation ID. Removal is permanent for this photo; it does not change recipe text or require another photo.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recipe_id",
"operation_id",
"expected_revision"
],
"properties": {
"recipe_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"operation_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"expected_revision": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"operation",
"persisted"
],
"properties": {
"operation": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"persisted": {
"type": "boolean"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}save_recipe — Save private recipe
Use when the user explicitly asks to save a complete recipe privately. Include realistic integer prep_time_minutes, cook_time_minutes, and total_time_minutes values in every complete recipe. Estimate them when the user does not specify times; use 0 only when that part genuinely takes no time. Use content sections for recipes with components or cooking stages; omit flat ingredients and steps when content is present. Save exactly once. If the user asks for RecipeBee image generation, disclose that it may reserve existing image credits or consume a free-tier image allowance and wait for explicit acceptance before using save_recipe_with_image. If the user wants to attach an MCP client-generated or uploaded stage/action photo, save the recipe first, then use attach_instruction_image with the returned target ID and latest content revision. Use attach_recipe_image only for a hero/gallery photo. Do not publish or use browser control.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"title",
"prep_time_minutes",
"cook_time_minutes",
"total_time_minutes"
],
"properties": {
"tags": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"maxLength": 64
},
"maxItems": 20
},
{
"type": "null"
}
]
},
"notes": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"maxLength": 500
},
"maxItems": 20
},
{
"type": "null"
}
]
},
"steps": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"maxLength": 4000,
"minLength": 1
},
{
"type": "object",
"required": [
"instruction"
],
"properties": {
"tip": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
]
},
"equipment": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 20
},
"heat_level": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"instruction": {
"type": "string",
"maxLength": 4000,
"minLength": 1
},
"temperature": {
"anyOf": [
{
"type": "object",
"required": [
"value",
"unit"
],
"properties": {
"unit": {
"type": "string",
"maxLength": 16
},
"value": {
"type": "number"
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"timer_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 1440,
"minimum": 0
},
{
"type": "null"
}
]
},
"duration_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 1440,
"minimum": 0
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
]
},
"maxItems": 100,
"minItems": 1
},
"title": {
"type": "string",
"maxLength": 160,
"minLength": 1
},
"content": {
"type": "object",
"required": [
"schema_version",
"ingredient_sections",
"instruction_sections"
],
"properties": {
"schema_version": {
"type": "number",
"const": 1
},
"ingredient_sections": {
"type": "array",
"items": {
"type": "object",
"required": [
"items"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"name": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"unit": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"optional": {
"type": "boolean"
},
"quantity": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
},
"preparation": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 200,
"minItems": 1
},
"title": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 20,
"minItems": 1
},
"instruction_sections": {
"type": "array",
"items": {
"type": "object",
"required": [
"steps"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"instruction"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"tip": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
]
},
"equipment": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 20
},
"heat_level": {
"anyOf": [
{
"enum": [
"low",
"medium-low",
"medium",
"medium-high",
"high"
],
"type": "string"
},
{
"type": "null"
}
]
},
"instruction": {
"type": "string",
"maxLength": 4000,
"minLength": 1
},
"duration_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 1440,
"minimum": 0
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 100,
"minItems": 1
},
"title": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 20,
"minItems": 1
}
},
"description": "For multi-component recipes, provide ingredient and instruction sections here and omit flat ingredients and steps.",
"additionalProperties": false
},
"summary": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "null"
}
]
},
"servings": {
"anyOf": [
{
"type": "integer",
"maximum": 250,
"minimum": 1
},
{
"type": "null"
}
]
},
"ingredients": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"maxLength": 500,
"minLength": 1
},
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"unit": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"group": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
]
},
"optional": {
"type": "boolean"
},
"quantity": {
"type": [
"string",
"number",
"null"
]
},
"preparation": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
]
},
"maxItems": 200,
"minItems": 1
},
"cook_time_minutes": {
"type": "integer",
"maximum": 1440,
"minimum": 0,
"description": "Estimated cooking time in minutes. Use 0 only when no cooking is needed."
},
"prep_time_minutes": {
"type": "integer",
"maximum": 1440,
"minimum": 0,
"description": "Estimated preparation time in minutes. Use 0 only when no preparation is needed."
},
"total_time_minutes": {
"type": "integer",
"maximum": 1440,
"minimum": 0,
"description": "Total elapsed time in minutes. Keep this consistent with the preparation and cooking steps."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recipe",
"duplicate",
"persisted",
"is_public"
],
"properties": {
"recipe": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"duplicate": {
"type": "boolean"
},
"is_public": {
"type": "boolean",
"const": false
},
"persisted": {
"type": "boolean",
"const": true
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}save_recipe_with_image — Save recipe with image
Save a complete recipe privately and request RecipeBee image generation. Image generation may reserve existing RecipeBee image credits or consume a free-tier image allowance. When the client declares form-elicitation support, the server requires an accepted signed confirmation form bound to these exact recipe and image options; image_generation_confirmed is ignored. When the client does not declare form-elicitation support, omit image_generation_confirmed until the user explicitly accepts, then set it to true on one retry. No recipe is saved before confirmation. Once confirmed, save privately and queue the moderated image pipeline once; the recipe remains saved if image generation fails or is unavailable. This tool never purchases credits or starts checkout. For an MCP client-generated or uploaded image, use save_recipe followed by attach_recipe_image instead. Do not call preview_recipe or save_recipe first. Include realistic integer prep_time_minutes, cook_time_minutes, and total_time_minutes values in every complete recipe. Estimate them when the user does not specify times; use 0 only when that part genuinely takes no time.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"title",
"prep_time_minutes",
"cook_time_minutes",
"total_time_minutes"
],
"properties": {
"tags": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"maxLength": 64
},
"maxItems": 20
},
{
"type": "null"
}
]
},
"image": {
"type": "object",
"properties": {
"seed": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"style": {
"enum": [
"food_hero",
"ingredient_flatlay",
"plated_dish"
],
"type": "string"
},
"aspect": {
"enum": [
"1:1",
"3:4",
"4:3",
"9:16",
"16:9"
],
"type": "string"
},
"custom_prompt": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"notes": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"maxLength": 500
},
"maxItems": 20
},
{
"type": "null"
}
]
},
"steps": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"maxLength": 4000,
"minLength": 1
},
{
"type": "object",
"required": [
"instruction"
],
"properties": {
"tip": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
]
},
"equipment": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 20
},
"heat_level": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"instruction": {
"type": "string",
"maxLength": 4000,
"minLength": 1
},
"temperature": {
"anyOf": [
{
"type": "object",
"required": [
"value",
"unit"
],
"properties": {
"unit": {
"type": "string",
"maxLength": 16
},
"value": {
"type": "number"
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"timer_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 1440,
"minimum": 0
},
{
"type": "null"
}
]
},
"duration_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 1440,
"minimum": 0
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
]
},
"maxItems": 100,
"minItems": 1
},
"title": {
"type": "string",
"maxLength": 160,
"minLength": 1
},
"content": {
"type": "object",
"required": [
"schema_version",
"ingredient_sections",
"instruction_sections"
],
"properties": {
"schema_version": {
"type": "number",
"const": 1
},
"ingredient_sections": {
"type": "array",
"items": {
"type": "object",
"required": [
"items"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"name": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"unit": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"optional": {
"type": "boolean"
},
"quantity": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
},
"preparation": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 200,
"minItems": 1
},
"title": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 20,
"minItems": 1
},
"instruction_sections": {
"type": "array",
"items": {
"type": "object",
"required": [
"steps"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"instruction"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"tip": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
]
},
"equipment": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 20
},
"heat_level": {
"anyOf": [
{
"enum": [
"low",
"medium-low",
"medium",
"medium-high",
"high"
],
"type": "string"
},
{
"type": "null"
}
]
},
"instruction": {
"type": "string",
"maxLength": 4000,
"minLength": 1
},
"duration_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 1440,
"minimum": 0
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 100,
"minItems": 1
},
"title": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 20,
"minItems": 1
}
},
"description": "For multi-component recipes, provide ingredient and instruction sections here and omit flat ingredients and steps.",
"additionalProperties": false
},
"summary": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "null"
}
]
},
"servings": {
"anyOf": [
{
"type": "integer",
"maximum": 250,
"minimum": 1
},
{
"type": "null"
}
]
},
"ingredients": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"maxLength": 500,
"minLength": 1
},
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"unit": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"group": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
]
},
"optional": {
"type": "boolean"
},
"quantity": {
"type": [
"string",
"number",
"null"
]
},
"preparation": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
]
},
"maxItems": 200,
"minItems": 1
},
"cook_time_minutes": {
"type": "integer",
"maximum": 1440,
"minimum": 0,
"description": "Estimated cooking time in minutes. Use 0 only when no cooking is needed."
},
"prep_time_minutes": {
"type": "integer",
"maximum": 1440,
"minimum": 0,
"description": "Estimated preparation time in minutes. Use 0 only when no preparation is needed."
},
"total_time_minutes": {
"type": "integer",
"maximum": 1440,
"minimum": 0,
"description": "Total elapsed time in minutes. Keep this consistent with the preparation and cooking steps."
},
"image_generation_confirmed": {
"type": "boolean",
"description": "For clients that do not declare form-elicitation support: set to true only after explaining possible credit or free-allowance use and receiving the user's explicit acceptance. Clients that declare form support collect consent in a signed form and ignore this value before saving or starting generation."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recipe",
"duplicate",
"image",
"persisted",
"is_public"
],
"properties": {
"image": {
"type": "object",
"required": [
"status"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
]
},
"error": {
"type": [
"string",
"null"
]
},
"job_id": {
"type": [
"string",
"null"
]
},
"prompt": {
"type": [
"string",
"null"
]
},
"status": {
"enum": [
"pending",
"generating",
"ready",
"failed",
"none",
"quarantined",
"unknown"
],
"type": "string"
},
"aspect_ratio": {
"type": [
"string",
"null"
]
},
"generated_at": {
"type": [
"string",
"null"
]
},
"style_preset": {
"type": [
"string",
"null"
]
},
"media_asset_id": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
},
"recipe": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"duplicate": {
"type": "boolean"
},
"is_public": {
"type": "boolean",
"const": false
},
"persisted": {
"type": "boolean",
"const": true
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"destructiveHint": true
}show_recipe — Show RecipeBee recipe
Use after attach_recipe_image or generate_recipe_image to render the current authoritative private recipe and image status, or when the user explicitly asks to view an existing recipe. Do not call immediately after save_recipe or save_recipe_with_image because those tools already return the authoritative saved recipe. Call it once after a later image mutation; do not use it repeatedly or as a substitute for saving.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recipe_id"
],
"properties": {
"recipe_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recipe_id",
"image",
"persisted",
"is_public"
],
"properties": {
"image": {
"type": "object",
"required": [
"status"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
]
},
"error": {
"type": [
"string",
"null"
]
},
"job_id": {
"type": [
"string",
"null"
]
},
"prompt": {
"type": [
"string",
"null"
]
},
"status": {
"enum": [
"pending",
"generating",
"ready",
"failed",
"none",
"quarantined",
"unknown"
],
"type": "string"
},
"aspect_ratio": {
"type": [
"string",
"null"
]
},
"generated_at": {
"type": [
"string",
"null"
]
},
"style_preset": {
"type": [
"string",
"null"
]
},
"media_asset_id": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
},
"recipe": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"is_public": {
"type": "boolean",
"const": false
},
"persisted": {
"type": "boolean",
"const": true
},
"recipe_id": {
"type": "string"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}attach_recipe_image — Attach MCP client image
Use when the user wants to attach an image generated or uploaded in the current MCP client conversation to an existing private RecipeBee recipe. Prefer the Apps SDK file input when MCP client supplies file with download_url and file_id. Use image_url only for a URL selected or uploaded in the RecipeBee widget. If neither file nor image_url is available, return a pending selection and do not claim attachment. The widget picker is a fallback because native generated images may not be available in MCP client Files. Report attachment only after persisted=true and needs_image_selection=false. mode=replace changes which retained image is primary but does not delete the previous image; use it only after the user explicitly requests replacement. Do not use for a new RecipeBee-generated image.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recipe_id"
],
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"maxLength": 512,
"minLength": 1
},
"file_name": {
"anyOf": [
{
"type": "string",
"maxLength": 512
},
{
"type": "null"
}
]
},
"mime_type": {
"anyOf": [
{
"type": "string",
"maxLength": 255
},
{
"type": "null"
}
]
},
"download_url": {
"type": "string",
"format": "uri",
"maxLength": 4096
}
},
"additionalProperties": false
},
"mode": {
"enum": [
"add",
"replace"
],
"type": "string",
"default": "add"
},
"image_url": {
"anyOf": [
{
"type": "string",
"format": "uri",
"maxLength": 4096
},
{
"type": "null"
}
]
},
"recipe_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recipe_id",
"image",
"persisted",
"is_public",
"needs_image_selection",
"duplicate"
],
"properties": {
"image": {
"type": "object",
"required": [
"status"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
]
},
"error": {
"type": [
"string",
"null"
]
},
"job_id": {
"type": [
"string",
"null"
]
},
"prompt": {
"type": [
"string",
"null"
]
},
"status": {
"enum": [
"pending",
"generating",
"ready",
"failed",
"none",
"quarantined",
"unknown"
],
"type": "string"
},
"aspect_ratio": {
"type": [
"string",
"null"
]
},
"generated_at": {
"type": [
"string",
"null"
]
},
"style_preset": {
"type": [
"string",
"null"
]
},
"media_asset_id": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
},
"recipe": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"duplicate": {
"type": "boolean"
},
"is_public": {
"type": "boolean",
"const": false
},
"persisted": {
"type": "boolean"
},
"recipe_id": {
"type": "string"
},
"needs_image_selection": {
"type": "boolean"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"destructiveHint": false
}generate_recipe_image — Generate recipe image
Request RecipeBee image generation for an existing private recipe. Generation may reserve existing RecipeBee image credits or consume a free-tier image allowance. When the client declares form-elicitation support, the server requires an accepted signed confirmation form bound to this recipe and these image options; image_generation_confirmed is ignored. When the client does not declare form-elicitation support, omit image_generation_confirmed until the user explicitly accepts, then set it to true on one retry. This tool never purchases credits or starts checkout; if the existing entitlement is unavailable, report the failure without directing the user to a purchase flow. Do not use for an image already generated or uploaded in this conversation. mode=add retains the current primary image. mode=replace changes which retained image is primary but does not delete the previous image; use it only after the user explicitly requests replacement.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recipe_id"
],
"properties": {
"mode": {
"enum": [
"add",
"replace"
],
"type": "string",
"default": "add"
},
"seed": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"style": {
"enum": [
"food_hero",
"ingredient_flatlay",
"plated_dish"
],
"type": "string"
},
"aspect": {
"enum": [
"1:1",
"3:4",
"4:3",
"9:16",
"16:9"
],
"type": "string"
},
"recipe_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"custom_prompt": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
]
},
"image_generation_confirmed": {
"type": "boolean",
"description": "For clients that do not declare form-elicitation support: set to true only after explaining possible credit or free-allowance use and receiving the user's explicit acceptance. Clients that declare form support collect consent in a signed form and ignore this value."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recipe_id",
"image",
"persisted",
"is_public"
],
"properties": {
"image": {
"type": "object",
"required": [
"status"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
]
},
"error": {
"type": [
"string",
"null"
]
},
"job_id": {
"type": [
"string",
"null"
]
},
"prompt": {
"type": [
"string",
"null"
]
},
"status": {
"enum": [
"pending",
"generating",
"ready",
"failed",
"none",
"quarantined",
"unknown"
],
"type": "string"
},
"aspect_ratio": {
"type": [
"string",
"null"
]
},
"generated_at": {
"type": [
"string",
"null"
]
},
"style_preset": {
"type": [
"string",
"null"
]
},
"media_asset_id": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
},
"recipe": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"is_public": {
"type": "boolean",
"const": false
},
"persisted": {
"type": "boolean",
"const": true
},
"recipe_id": {
"type": "string"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"destructiveHint": true
}get_recipe_image — Check recipe image
Check the private AI image status for an existing RecipeBee recipe after image generation was requested.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recipe_id"
],
"properties": {
"recipe_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recipe_id",
"image",
"persisted",
"is_public"
],
"properties": {
"image": {
"type": "object",
"required": [
"status"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
]
},
"error": {
"type": [
"string",
"null"
]
},
"job_id": {
"type": [
"string",
"null"
]
},
"prompt": {
"type": [
"string",
"null"
]
},
"status": {
"enum": [
"pending",
"generating",
"ready",
"failed",
"none",
"quarantined",
"unknown"
],
"type": "string"
},
"aspect_ratio": {
"type": [
"string",
"null"
]
},
"generated_at": {
"type": [
"string",
"null"
]
},
"style_preset": {
"type": [
"string",
"null"
]
},
"media_asset_id": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
},
"recipe": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"is_public": {
"type": "boolean",
"const": false
},
"persisted": {
"type": "boolean",
"const": true
},
"recipe_id": {
"type": "string"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
24 advertised
recipebee-meal-plan-preview — RecipeBee meal-plan preview
Shows a meal-plan schedule and any recipe choices before import.
ui://recipebee/meal-plan-preview-v14.htmlrecipebee-meal-plan-preview-v13 — RecipeBee meal-plan preview
Shows a meal-plan schedule and any recipe choices before import.
ui://recipebee/meal-plan-preview-v13.htmlrecipebee-meal-plan-preview-v12 — RecipeBee meal-plan preview
Shows a meal-plan schedule and any recipe choices before import.
ui://recipebee/meal-plan-preview-v12.htmlrecipebee-meal-plan-preview-v11 — RecipeBee meal-plan preview
Shows a meal-plan schedule and any recipe choices before import.
ui://recipebee/meal-plan-preview-v11.htmlrecipebee-meal-plan-preview-v10 — RecipeBee meal-plan preview
Shows a meal-plan schedule and any recipe choices before import.
ui://recipebee/meal-plan-preview-v10.htmlrecipebee-meal-plan-preview-v9 — RecipeBee meal-plan preview
Shows a meal-plan schedule and any recipe choices before import.
ui://recipebee/meal-plan-preview-v9.htmlrecipebee-meal-plan-preview-v8 — RecipeBee meal-plan preview
Shows a meal-plan schedule and any recipe choices before import.
ui://recipebee/meal-plan-preview-v8.htmlrecipebee-meal-plan-preview-v7 — RecipeBee meal-plan preview
Shows a meal-plan schedule and any recipe choices before import.
ui://recipebee/meal-plan-preview-v7.htmlrecipebee-meal-plan-preview-v6 — RecipeBee meal-plan preview
Shows a meal-plan schedule and any recipe choices before import.
ui://recipebee/meal-plan-preview-v6.htmlrecipebee-meal-plan-preview-v5 — RecipeBee meal-plan preview
Shows a meal-plan schedule and any recipe choices before import.
ui://recipebee/meal-plan-preview-v5.htmlrecipebee-meal-plan-preview-v4 — RecipeBee meal-plan preview
Shows a meal-plan schedule and any recipe choices before import.
ui://recipebee/meal-plan-preview-v4.htmlrecipebee-meal-plan-preview-v3 — RecipeBee meal-plan preview
Shows a meal-plan schedule and any recipe choices before import.
ui://recipebee/meal-plan-preview-v3.htmlrecipebee-meal-plan-preview-v2 — RecipeBee meal-plan preview
Shows a meal-plan schedule and any recipe choices before import.
ui://recipebee/meal-plan-preview-v2.htmlrecipebee-meal-plan-preview-v1 — RecipeBee meal-plan preview
Shows a meal-plan schedule and any recipe choices before import.
ui://recipebee/meal-plan-preview-v1.htmlrecipebee-recipe-preview — RecipeBee recipe preview
Inline preview card for a generated recipe.
ui://recipebee/recipe-preview-v5.htmlrecipebee-recipe-preview-v4 — RecipeBee recipe preview
Inline preview card for a generated recipe.
ui://recipebee/recipe-preview-v4.htmlrecipebee-recipe-preview-v3 — RecipeBee recipe preview
Inline preview card for a generated recipe.
ui://recipebee/recipe-preview-v3.htmlrecipebee-recipe-preview-v2 — RecipeBee recipe preview
Inline preview card for a generated recipe.
ui://recipebee/recipe-preview-v2.htmlrecipebee-recipe-preview-legacy — RecipeBee recipe preview
Inline preview card for a generated recipe.
ui://recipebee/recipe-preview.htmlrecipebee-kitchen — RecipeBee Kitchen
Private RecipeBee recipes and meal plans.
ui://recipebee/kitchen-v6.htmlrecipebee-kitchen-v5 — RecipeBee Kitchen
Private RecipeBee recipes and meal plans.
ui://recipebee/kitchen-v5.htmlrecipebee-kitchen-v4 — RecipeBee Kitchen
Private RecipeBee recipes and meal plans.
ui://recipebee/kitchen-v4.htmlrecipebee-kitchen-v3 — RecipeBee Kitchen
Private RecipeBee recipes and meal plans.
ui://recipebee/kitchen-v3.htmlrecipebee-kitchen-v2 — RecipeBee Kitchen
Private RecipeBee recipes and meal plans.
ui://recipebee/kitchen-v2.html30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 611 ms
- 95th percentile latency
- 611 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 611 ms · metadata changed · 19 tool(s), 24 resource(s), 0 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http recipebee-mcp https://recipebee.app/mcpCodex
codex mcp add recipebee-mcp --url https://recipebee.app/mcpCursor
{
"mcpServers": {
"recipebee-mcp": {
"url": "https://recipebee.app/mcp"
}
}
}Cline
{
"mcpServers": {
"recipebee-mcp": {
"type": "streamableHttp",
"url": "https://recipebee.app/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"recipebee-mcp": {
"type": "http",
"url": "https://recipebee.app/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http recipebee-mcp https://recipebee.app/mcpClaude Desktop
{
"mcpServers": {
"recipebee-mcp": {
"url": "https://recipebee.app/mcp"
}
}
}Windsurf
{
"mcpServers": {
"recipebee-mcp": {
"serverUrl": "https://recipebee.app/mcp"
}
}
}Let your agent find its tools
Find servers like RecipeBee MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.