Sous Chef MCP
A remote MCP server that allows AI assistants like ChatGPT, Claude, and Cursor to display, edit, save, and manage recipe cards. It supports step-by-step cooking guidance, ingredient validation, unit switching, and library management, syncing with the Sous Chef iPhone app.
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://mcp.mysouschef.app/mcpWhat its tools do
11 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (4)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to mysouschef.app ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Display recipes as interactive cards in chat
- Validate and apply edits to ingredients and steps
- Save recipes to a private library
- List and manage saved recipes
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- Sous Chef 0.2.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 11 advertised
- Resources
- 1 advertised
- Resource templates
- 3 advertised
- Prompts
- 7 advertised
{
"tools": {
"listChanged": true
},
"prompts": {
"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
11 advertised
health_check — Health Check
Confirm the Sous Chef MCP server is reachable.
{
"type": "object",
"properties": {}
}{
"type": "object",
"oneOf": [
{
"type": "object",
"required": [
"ok",
"requestId",
"targetIds"
],
"properties": {
"ok": {
"type": "boolean"
},
"requestId": {
"type": "string"
},
"targetIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"ok",
"code",
"message",
"requestId",
"targetIds"
],
"properties": {
"ok": {
"type": "boolean",
"const": false
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"requestId": {
"type": "string"
},
"targetIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
]
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_my_recipes — List My Recipes
List the authenticated user's saved Sous Chef recipes. Use this before editing when the user refers to a recipe by name instead of id.
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1
}
},
"additionalProperties": false
}{
"type": "object",
"oneOf": [
{
"type": "object",
"required": [
"recipes",
"requestId",
"targetIds"
],
"properties": {
"recipes": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"title",
"summary"
],
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"summary": {
"type": "string"
}
},
"additionalProperties": false
}
},
"requestId": {
"type": "string"
},
"targetIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"ok",
"code",
"message",
"requestId",
"targetIds"
],
"properties": {
"ok": {
"type": "boolean",
"const": false
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"requestId": {
"type": "string"
},
"targetIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
]
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}display_recipe — Display Recipe
Presents a complete recipe in Sous Chef's interactive recipe card (servings, ingredients, steps, cooking mode, validated edits, Undo). Prefer this over plain chat formatting whenever you generate, retrieve, or substantially revise a full recipe — including ordinary requests like 'give me a vegan mushroom carbonara' or 'make a quick dinner for two'. Displaying is temporary: it renders the card without saving it or creating a cooking session; saving only happens through add_recipe when the user asks.
{
"type": "object",
"required": [
"recipe"
],
"properties": {
"recipe": {
"type": "object",
"required": [
"id",
"title",
"meta",
"ingredients",
"steps",
"notes"
],
"properties": {
"id": {
"type": "string"
},
"meta": {
"type": "object",
"properties": {
"meal": {
"type": "string"
},
"course": {
"type": "string"
},
"cuisine": {
"type": "string"
},
"yieldText": {
"type": "string"
},
"cookTimeMin": {
"type": "number"
},
"prepTimeMin": {
"type": "number"
},
"totalTimeMin": {
"type": "number"
}
},
"additionalProperties": false
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"title": {
"type": "string"
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"summary": {
"type": "string"
},
"subtitle": {
"type": "string"
},
"description": {
"type": "string"
},
"ingredients": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}{
"type": "object",
"oneOf": [
{
"type": "object",
"required": [
"recipe",
"saved",
"requestId",
"targetIds"
],
"properties": {
"saved": {
"type": "boolean",
"const": false
},
"recipe": {
"type": "object",
"required": [
"id",
"title",
"meta",
"ingredients",
"steps",
"notes"
],
"properties": {
"id": {
"type": "string"
},
"meta": {
"type": "object",
"properties": {
"meal": {
"type": "string"
},
"course": {
"type": "string"
},
"cuisine": {
"type": "string"
},
"yieldText": {
"type": "string"
},
"cookTimeMin": {
"type": "number"
},
"prepTimeMin": {
"type": "number"
},
"totalTimeMin": {
"type": "number"
}
},
"additionalProperties": false
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"title": {
"type": "string"
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"summary": {
"type": "string"
},
"subtitle": {
"type": "string"
},
"description": {
"type": "string"
},
"ingredients": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string"
},
"targetIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"ok",
"code",
"message",
"requestId",
"targetIds"
],
"properties": {
"ok": {
"type": "boolean",
"const": false
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"requestId": {
"type": "string"
},
"targetIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
]
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_recipe — Get Recipe
Returns the saved canonical recipe from your library or the public catalog. In-progress cooking edits live in sessions and are not returned here.
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
}{
"type": "object",
"oneOf": [
{
"type": "object",
"required": [
"recipe",
"saved",
"requestId",
"targetIds"
],
"properties": {
"saved": {
"type": "boolean"
},
"recipe": {
"type": "object",
"required": [
"id",
"title",
"meta",
"ingredients",
"steps",
"notes"
],
"properties": {
"id": {
"type": "string"
},
"meta": {
"type": "object",
"properties": {
"meal": {
"type": "string"
},
"course": {
"type": "string"
},
"cuisine": {
"type": "string"
},
"yieldText": {
"type": "string"
},
"cookTimeMin": {
"type": "number"
},
"prepTimeMin": {
"type": "number"
},
"totalTimeMin": {
"type": "number"
}
},
"additionalProperties": false
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"title": {
"type": "string"
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"summary": {
"type": "string"
},
"subtitle": {
"type": "string"
},
"description": {
"type": "string"
},
"ingredients": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string"
},
"targetIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"ok",
"code",
"message",
"requestId",
"targetIds"
],
"properties": {
"ok": {
"type": "boolean",
"const": false
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"requestId": {
"type": "string"
},
"targetIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
]
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}add_recipe — Add Recipe
Creates a NEW recipe in your library only when the user explicitly asks to save/add it or taps Save in the recipe card. For a newly generated recipe the user has not chosen to keep, use display_recipe instead. Does not update existing recipes — to change a saved recipe use update_recipe. To make cooking-time tweaks use apply_recipe_patches. The server mints the stored import-* or ai-* recipe id; any caller-supplied recipe.id is treated only as source payload and is not used for upsert.
{
"type": "object",
"required": [
"recipe"
],
"properties": {
"recipe": {
"type": "object",
"required": [
"id",
"title",
"meta",
"ingredients",
"steps",
"notes"
],
"properties": {
"id": {
"type": "string"
},
"meta": {
"type": "object",
"properties": {
"meal": {
"type": "string"
},
"course": {
"type": "string"
},
"cuisine": {
"type": "string"
},
"yieldText": {
"type": "string"
},
"cookTimeMin": {
"type": "number"
},
"prepTimeMin": {
"type": "number"
},
"totalTimeMin": {
"type": "number"
}
},
"additionalProperties": false
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"title": {
"type": "string"
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"summary": {
"type": "string"
},
"subtitle": {
"type": "string"
},
"description": {
"type": "string"
},
"ingredients": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"sourceUrl": {
"type": "string"
},
"sourceKind": {
"enum": [
"manual",
"url",
"text"
],
"type": "string"
},
"idempotencyKey": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 128,
"minLength": 1,
"description": "Opaque client retry token. Reuse it only for retries of the same create request; otherwise omit it."
}
},
"additionalProperties": false
}{
"type": "object",
"oneOf": [
{
"type": "object",
"required": [
"recipeId",
"recipe",
"requestId",
"targetIds"
],
"properties": {
"recipe": {
"type": "object",
"required": [
"id",
"title",
"meta",
"ingredients",
"steps",
"notes"
],
"properties": {
"id": {
"type": "string"
},
"meta": {
"type": "object",
"properties": {
"meal": {
"type": "string"
},
"course": {
"type": "string"
},
"cuisine": {
"type": "string"
},
"yieldText": {
"type": "string"
},
"cookTimeMin": {
"type": "number"
},
"prepTimeMin": {
"type": "number"
},
"totalTimeMin": {
"type": "number"
}
},
"additionalProperties": false
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"title": {
"type": "string"
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"summary": {
"type": "string"
},
"subtitle": {
"type": "string"
},
"description": {
"type": "string"
},
"ingredients": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"recipeId": {
"type": "string"
},
"requestId": {
"type": "string"
},
"targetIds": {
"type": "array",
"items": {
"type": "string"
}
},
"deprecation": {
"type": "object",
"required": [
"message",
"replacement"
],
"properties": {
"message": {
"type": "string"
},
"replacement": {
"type": "string"
}
},
"additionalProperties": false
},
"idempotencyKey": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"ok",
"code",
"message",
"requestId",
"targetIds"
],
"properties": {
"ok": {
"type": "boolean",
"const": false
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"requestId": {
"type": "string"
},
"targetIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
]
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}update_recipe — Update Recipe
Deliberately updates allowed fields on a saved recipe in your library. Supports title, subtitle, summary, description, images, meta, and notes only; images and notes replace the whole array. Does not change ingredients or steps — use apply_recipe_patches for cooking-time edits in a session snapshot.
{
"type": "object",
"required": [
"recipeId",
"patch"
],
"properties": {
"patch": {
"type": "object",
"properties": {
"meta": {
"type": "object",
"properties": {
"meal": {
"type": "string"
},
"course": {
"type": "string"
},
"cuisine": {
"type": "string"
},
"yieldText": {
"type": "string"
},
"cookTimeMin": {
"type": "number"
},
"prepTimeMin": {
"type": "number"
},
"totalTimeMin": {
"type": "number"
}
},
"additionalProperties": false
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": "string",
"minLength": 1
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"summary": {
"type": "string"
},
"subtitle": {
"type": "string"
},
"description": {
"type": "string"
}
},
"minProperties": 1,
"additionalProperties": false
},
"recipeId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
}{
"type": "object",
"oneOf": [
{
"type": "object",
"required": [
"recipeId",
"recipe",
"requestId",
"targetIds"
],
"properties": {
"recipe": {
"type": "object",
"required": [
"id",
"title",
"meta",
"ingredients",
"steps",
"notes"
],
"properties": {
"id": {
"type": "string"
},
"meta": {
"type": "object",
"properties": {
"meal": {
"type": "string"
},
"course": {
"type": "string"
},
"cuisine": {
"type": "string"
},
"yieldText": {
"type": "string"
},
"cookTimeMin": {
"type": "number"
},
"prepTimeMin": {
"type": "number"
},
"totalTimeMin": {
"type": "number"
}
},
"additionalProperties": false
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"title": {
"type": "string"
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"summary": {
"type": "string"
},
"subtitle": {
"type": "string"
},
"description": {
"type": "string"
},
"ingredients": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"recipeId": {
"type": "string"
},
"requestId": {
"type": "string"
},
"targetIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"ok",
"code",
"message",
"requestId",
"targetIds"
],
"properties": {
"ok": {
"type": "boolean",
"const": false
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"requestId": {
"type": "string"
},
"targetIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
]
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}apply_recipe_patches — Apply Recipe Patches
Validate and apply explicit edits. Pass recipeId for a persisted cooking session, or pass the full recipe payload from display_recipe to edit an unsaved card without persistence. Does NOT modify the saved recipe in your library.
{
"type": "object",
"anyOf": [
{
"required": [
"recipeId"
]
},
{
"required": [
"recipe"
]
}
],
"required": [
"patches"
],
"properties": {
"reply": {
"type": "string",
"minLength": 1
},
"recipe": {
"type": "object",
"required": [
"id",
"title",
"meta",
"ingredients",
"steps",
"notes"
],
"properties": {
"id": {
"type": "string"
},
"meta": {
"type": "object",
"properties": {
"meal": {
"type": "string"
},
"course": {
"type": "string"
},
"cuisine": {
"type": "string"
},
"yieldText": {
"type": "string"
},
"cookTimeMin": {
"type": "number"
},
"prepTimeMin": {
"type": "number"
},
"totalTimeMin": {
"type": "number"
}
},
"additionalProperties": false
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"title": {
"type": "string"
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"summary": {
"type": "string"
},
"subtitle": {
"type": "string"
},
"description": {
"type": "string"
},
"ingredients": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"patches": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"ingredientId",
"newValue"
],
"properties": {
"type": {
"const": "replace-ingredient"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"oldValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"ingredientId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"newValue"
],
"properties": {
"type": {
"const": "insert-ingredient"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"afterIngredientId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"ingredientId"
],
"properties": {
"type": {
"const": "remove-ingredient"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"oldValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"ingredientId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"stepId",
"newValue"
],
"properties": {
"type": {
"const": "replace-step"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"stepId": {
"type": "string"
},
"newValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"oldValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"newValue"
],
"properties": {
"type": {
"const": "insert-step"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"afterStepId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"stepId"
],
"properties": {
"type": {
"const": "remove-step"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"stepId": {
"type": "string"
},
"oldValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"field",
"newValue"
],
"properties": {
"type": {
"const": "update-meta"
},
"field": {
"enum": [
"title",
"subtitle",
"description",
"summary",
"cuisine",
"course",
"meal",
"yieldText",
"prepTimeMin",
"cookTimeMin",
"totalTimeMin"
],
"type": "string"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {},
"oldValue": {},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"newValue"
],
"properties": {
"type": {
"const": "replace-images"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "array",
"items": {
"type": "string"
}
},
"oldValue": {
"type": "array",
"items": {
"type": "string"
}
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"note"
],
"properties": {
"note": {
"type": "string"
},
"type": {
"const": "add-note"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"noteIndex"
],
"properties": {
"type": {
"const": "remove-note"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"oldValue": {
"type": "string"
},
"noteIndex": {
"type": "integer",
"minimum": 0
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
}
]
},
"minItems": 1
},
"recipeId": {
"type": "string",
"minLength": 1
},
"editLabel": {
"type": "string",
"minLength": 1
},
"sessionId": {
"type": "string"
},
"measurementSystem": {
"enum": [
"source",
"metric",
"imperial"
],
"type": "string"
}
},
"additionalProperties": false
}{
"type": "object",
"oneOf": [
{
"type": "object",
"required": [
"reply",
"editLabel",
"patches",
"recipeId",
"baseRecipe",
"remainingPatches",
"snapshot",
"saved",
"measurementSystem",
"requestId",
"targetIds"
],
"properties": {
"reply": {
"type": "string"
},
"saved": {
"type": "boolean"
},
"patches": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"ingredientId",
"newValue"
],
"properties": {
"type": {
"const": "replace-ingredient"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"oldValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"ingredientId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"newValue"
],
"properties": {
"type": {
"const": "insert-ingredient"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"afterIngredientId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"ingredientId"
],
"properties": {
"type": {
"const": "remove-ingredient"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"oldValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"ingredientId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"stepId",
"newValue"
],
"properties": {
"type": {
"const": "replace-step"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"stepId": {
"type": "string"
},
"newValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"oldValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"newValue"
],
"properties": {
"type": {
"const": "insert-step"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"afterStepId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"stepId"
],
"properties": {
"type": {
"const": "remove-step"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"stepId": {
"type": "string"
},
"oldValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"field",
"newValue"
],
"properties": {
"type": {
"const": "update-meta"
},
"field": {
"enum": [
"title",
"subtitle",
"description",
"summary",
"cuisine",
"course",
"meal",
"yieldText",
"prepTimeMin",
"cookTimeMin",
"totalTimeMin"
],
"type": "string"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {},
"oldValue": {},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"newValue"
],
"properties": {
"type": {
"const": "replace-images"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "array",
"items": {
"type": "string"
}
},
"oldValue": {
"type": "array",
"items": {
"type": "string"
}
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"note"
],
"properties": {
"note": {
"type": "string"
},
"type": {
"const": "add-note"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"noteIndex"
],
"properties": {
"type": {
"const": "remove-note"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"oldValue": {
"type": "string"
},
"noteIndex": {
"type": "integer",
"minimum": 0
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
}
]
}
},
"recipeId": {
"type": "string"
},
"snapshot": {
"type": "object",
"required": [
"id",
"title",
"meta",
"ingredients",
"steps",
"notes"
],
"properties": {
"id": {
"type": "string"
},
"meta": {
"type": "object",
"properties": {
"meal": {
"type": "string"
},
"course": {
"type": "string"
},
"cuisine": {
"type": "string"
},
"yieldText": {
"type": "string"
},
"cookTimeMin": {
"type": "number"
},
"prepTimeMin": {
"type": "number"
},
"totalTimeMin": {
"type": "number"
}
},
"additionalProperties": false
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"title": {
"type": "string"
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"summary": {
"type": "string"
},
"subtitle": {
"type": "string"
},
"description": {
"type": "string"
},
"ingredients": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"editLabel": {
"type": "string"
},
"requestId": {
"type": "string"
},
"sessionId": {
"type": "string"
},
"targetIds": {
"type": "array",
"items": {
"type": "string"
}
},
"baseRecipe": {
"type": "object",
"required": [
"id",
"title",
"meta",
"ingredients",
"steps",
"notes"
],
"properties": {
"id": {
"type": "string"
},
"meta": {
"type": "object",
"properties": {
"meal": {
"type": "string"
},
"course": {
"type": "string"
},
"cuisine": {
"type": "string"
},
"yieldText": {
"type": "string"
},
"cookTimeMin": {
"type": "number"
},
"prepTimeMin": {
"type": "number"
},
"totalTimeMin": {
"type": "number"
}
},
"additionalProperties": false
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"title": {
"type": "string"
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"summary": {
"type": "string"
},
"subtitle": {
"type": "string"
},
"description": {
"type": "string"
},
"ingredients": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"remainingPatches": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"ingredientId",
"newValue"
],
"properties": {
"type": {
"const": "replace-ingredient"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"oldValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"ingredientId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"newValue"
],
"properties": {
"type": {
"const": "insert-ingredient"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"afterIngredientId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"ingredientId"
],
"properties": {
"type": {
"const": "remove-ingredient"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"oldValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"ingredientId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"stepId",
"newValue"
],
"properties": {
"type": {
"const": "replace-step"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"stepId": {
"type": "string"
},
"newValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"oldValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"newValue"
],
"properties": {
"type": {
"const": "insert-step"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"afterStepId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"stepId"
],
"properties": {
"type": {
"const": "remove-step"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"stepId": {
"type": "string"
},
"oldValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"field",
"newValue"
],
"properties": {
"type": {
"const": "update-meta"
},
"field": {
"enum": [
"title",
"subtitle",
"description",
"summary",
"cuisine",
"course",
"meal",
"yieldText",
"prepTimeMin",
"cookTimeMin",
"totalTimeMin"
],
"type": "string"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {},
"oldValue": {},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"newValue"
],
"properties": {
"type": {
"const": "replace-images"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "array",
"items": {
"type": "string"
}
},
"oldValue": {
"type": "array",
"items": {
"type": "string"
}
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"note"
],
"properties": {
"note": {
"type": "string"
},
"type": {
"const": "add-note"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"noteIndex"
],
"properties": {
"type": {
"const": "remove-note"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"oldValue": {
"type": "string"
},
"noteIndex": {
"type": "integer",
"minimum": 0
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
}
]
}
},
"measurementSystem": {
"enum": [
"source",
"metric",
"imperial"
],
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"ok",
"code",
"message",
"errors",
"patches",
"recipeId",
"baseRecipe",
"remainingPatches",
"snapshot",
"saved",
"measurementSystem",
"requestId",
"targetIds"
],
"properties": {
"ok": {
"type": "boolean",
"const": false
},
"code": {
"type": "string",
"const": "invalid_patches"
},
"saved": {
"type": "boolean"
},
"errors": {
"type": "array",
"items": {
"type": "string"
}
},
"message": {
"type": "string"
},
"patches": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"ingredientId",
"newValue"
],
"properties": {
"type": {
"const": "replace-ingredient"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"oldValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"ingredientId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"newValue"
],
"properties": {
"type": {
"const": "insert-ingredient"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"afterIngredientId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"ingredientId"
],
"properties": {
"type": {
"const": "remove-ingredient"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"oldValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"ingredientId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"stepId",
"newValue"
],
"properties": {
"type": {
"const": "replace-step"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"stepId": {
"type": "string"
},
"newValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"oldValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"newValue"
],
"properties": {
"type": {
"const": "insert-step"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"afterStepId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"stepId"
],
"properties": {
"type": {
"const": "remove-step"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"stepId": {
"type": "string"
},
"oldValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"field",
"newValue"
],
"properties": {
"type": {
"const": "update-meta"
},
"field": {
"enum": [
"title",
"subtitle",
"description",
"summary",
"cuisine",
"course",
"meal",
"yieldText",
"prepTimeMin",
"cookTimeMin",
"totalTimeMin"
],
"type": "string"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {},
"oldValue": {},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"newValue"
],
"properties": {
"type": {
"const": "replace-images"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "array",
"items": {
"type": "string"
}
},
"oldValue": {
"type": "array",
"items": {
"type": "string"
}
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"note"
],
"properties": {
"note": {
"type": "string"
},
"type": {
"const": "add-note"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"noteIndex"
],
"properties": {
"type": {
"const": "remove-note"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"oldValue": {
"type": "string"
},
"noteIndex": {
"type": "integer",
"minimum": 0
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
}
]
}
},
"recipeId": {
"type": "string"
},
"snapshot": {
"type": "object",
"required": [
"id",
"title",
"meta",
"ingredients",
"steps",
"notes"
],
"properties": {
"id": {
"type": "string"
},
"meta": {
"type": "object",
"properties": {
"meal": {
"type": "string"
},
"course": {
"type": "string"
},
"cuisine": {
"type": "string"
},
"yieldText": {
"type": "string"
},
"cookTimeMin": {
"type": "number"
},
"prepTimeMin": {
"type": "number"
},
"totalTimeMin": {
"type": "number"
}
},
"additionalProperties": false
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"title": {
"type": "string"
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"summary": {
"type": "string"
},
"subtitle": {
"type": "string"
},
"description": {
"type": "string"
},
"ingredients": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string"
},
"sessionId": {
"type": "string"
},
"targetIds": {
"type": "array",
"items": {
"type": "string"
}
},
"baseRecipe": {
"type": "object",
"required": [
"id",
"title",
"meta",
"ingredients",
"steps",
"notes"
],
"properties": {
"id": {
"type": "string"
},
"meta": {
"type": "object",
"properties": {
"meal": {
"type": "string"
},
"course": {
"type": "string"
},
"cuisine": {
"type": "string"
},
"yieldText": {
"type": "string"
},
"cookTimeMin": {
"type": "number"
},
"prepTimeMin": {
"type": "number"
},
"totalTimeMin": {
"type": "number"
}
},
"additionalProperties": false
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"title": {
"type": "string"
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"summary": {
"type": "string"
},
"subtitle": {
"type": "string"
},
"description": {
"type": "string"
},
"ingredients": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"remainingPatches": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"ingredientId",
"newValue"
],
"properties": {
"type": {
"const": "replace-ingredient"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"oldValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"ingredientId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"newValue"
],
"properties": {
"type": {
"const": "insert-ingredient"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"afterIngredientId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"ingredientId"
],
"properties": {
"type": {
"const": "remove-ingredient"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"oldValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"ingredientId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"stepId",
"newValue"
],
"properties": {
"type": {
"const": "replace-step"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"stepId": {
"type": "string"
},
"newValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"oldValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"newValue"
],
"properties": {
"type": {
"const": "insert-step"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"afterStepId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"stepId"
],
"properties": {
"type": {
"const": "remove-step"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"stepId": {
"type": "string"
},
"oldValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"field",
"newValue"
],
"properties": {
"type": {
"const": "update-meta"
},
"field": {
"enum": [
"title",
"subtitle",
"description",
"summary",
"cuisine",
"course",
"meal",
"yieldText",
"prepTimeMin",
"cookTimeMin",
"totalTimeMin"
],
"type": "string"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {},
"oldValue": {},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"newValue"
],
"properties": {
"type": {
"const": "replace-images"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "array",
"items": {
"type": "string"
}
},
"oldValue": {
"type": "array",
"items": {
"type": "string"
}
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"note"
],
"properties": {
"note": {
"type": "string"
},
"type": {
"const": "add-note"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"noteIndex"
],
"properties": {
"type": {
"const": "remove-note"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"oldValue": {
"type": "string"
},
"noteIndex": {
"type": "integer",
"minimum": 0
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
}
]
}
},
"measurementSystem": {
"enum": [
"source",
"metric",
"imperial"
],
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"ok",
"code",
"message",
"requestId",
"targetIds"
],
"properties": {
"ok": {
"type": "boolean",
"const": false
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"requestId": {
"type": "string"
},
"targetIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
]
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}revert_recipe_edit — Revert Recipe Edit
Drop a patch group by requestId. Pass recipeId/sessionId for persisted edits, or pass the displayed card's baseRecipe and remaining patch history for a pure unsaved-card Undo. Unknown requestIds are idempotent no-ops.
{
"type": "object",
"anyOf": [
{
"required": [
"recipeId"
]
},
{
"required": [
"baseRecipe",
"patches"
]
}
],
"required": [
"targetRequestId"
],
"properties": {
"patches": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"ingredientId",
"newValue"
],
"properties": {
"type": {
"const": "replace-ingredient"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"oldValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"ingredientId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"newValue"
],
"properties": {
"type": {
"const": "insert-ingredient"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"afterIngredientId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"ingredientId"
],
"properties": {
"type": {
"const": "remove-ingredient"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"oldValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"ingredientId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"stepId",
"newValue"
],
"properties": {
"type": {
"const": "replace-step"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"stepId": {
"type": "string"
},
"newValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"oldValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"newValue"
],
"properties": {
"type": {
"const": "insert-step"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"afterStepId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"stepId"
],
"properties": {
"type": {
"const": "remove-step"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"stepId": {
"type": "string"
},
"oldValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"field",
"newValue"
],
"properties": {
"type": {
"const": "update-meta"
},
"field": {
"enum": [
"title",
"subtitle",
"description",
"summary",
"cuisine",
"course",
"meal",
"yieldText",
"prepTimeMin",
"cookTimeMin",
"totalTimeMin"
],
"type": "string"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {},
"oldValue": {},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"newValue"
],
"properties": {
"type": {
"const": "replace-images"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "array",
"items": {
"type": "string"
}
},
"oldValue": {
"type": "array",
"items": {
"type": "string"
}
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"note"
],
"properties": {
"note": {
"type": "string"
},
"type": {
"const": "add-note"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"noteIndex"
],
"properties": {
"type": {
"const": "remove-note"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"oldValue": {
"type": "string"
},
"noteIndex": {
"type": "integer",
"minimum": 0
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
}
]
},
"minItems": 1
},
"recipeId": {
"type": "string",
"minLength": 1
},
"sessionId": {
"type": "string"
},
"baseRecipe": {
"type": "object",
"required": [
"id",
"title",
"meta",
"ingredients",
"steps",
"notes"
],
"properties": {
"id": {
"type": "string"
},
"meta": {
"type": "object",
"properties": {
"meal": {
"type": "string"
},
"course": {
"type": "string"
},
"cuisine": {
"type": "string"
},
"yieldText": {
"type": "string"
},
"cookTimeMin": {
"type": "number"
},
"prepTimeMin": {
"type": "number"
},
"totalTimeMin": {
"type": "number"
}
},
"additionalProperties": false
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"title": {
"type": "string"
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"summary": {
"type": "string"
},
"subtitle": {
"type": "string"
},
"description": {
"type": "string"
},
"ingredients": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"targetRequestId": {
"type": "string",
"minLength": 1
},
"measurementSystem": {
"enum": [
"source",
"metric",
"imperial"
],
"type": "string"
}
},
"additionalProperties": false
}{
"type": "object",
"oneOf": [
{
"type": "object",
"required": [
"recipeId",
"snapshot",
"reverted",
"revertedPatches",
"remainingPatches",
"saved",
"measurementSystem",
"requestId",
"targetIds"
],
"properties": {
"saved": {
"type": "boolean"
},
"recipeId": {
"type": "string"
},
"reverted": {
"type": "boolean"
},
"snapshot": {
"type": "object",
"required": [
"id",
"title",
"meta",
"ingredients",
"steps",
"notes"
],
"properties": {
"id": {
"type": "string"
},
"meta": {
"type": "object",
"properties": {
"meal": {
"type": "string"
},
"course": {
"type": "string"
},
"cuisine": {
"type": "string"
},
"yieldText": {
"type": "string"
},
"cookTimeMin": {
"type": "number"
},
"prepTimeMin": {
"type": "number"
},
"totalTimeMin": {
"type": "number"
}
},
"additionalProperties": false
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"title": {
"type": "string"
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"summary": {
"type": "string"
},
"subtitle": {
"type": "string"
},
"description": {
"type": "string"
},
"ingredients": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string"
},
"sessionId": {
"type": "string"
},
"targetIds": {
"type": "array",
"items": {
"type": "string"
}
},
"revertedPatches": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"ingredientId",
"newValue"
],
"properties": {
"type": {
"const": "replace-ingredient"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"oldValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"ingredientId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"newValue"
],
"properties": {
"type": {
"const": "insert-ingredient"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"afterIngredientId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"ingredientId"
],
"properties": {
"type": {
"const": "remove-ingredient"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"oldValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"ingredientId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"stepId",
"newValue"
],
"properties": {
"type": {
"const": "replace-step"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"stepId": {
"type": "string"
},
"newValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"oldValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"newValue"
],
"properties": {
"type": {
"const": "insert-step"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"afterStepId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"stepId"
],
"properties": {
"type": {
"const": "remove-step"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"stepId": {
"type": "string"
},
"oldValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"field",
"newValue"
],
"properties": {
"type": {
"const": "update-meta"
},
"field": {
"enum": [
"title",
"subtitle",
"description",
"summary",
"cuisine",
"course",
"meal",
"yieldText",
"prepTimeMin",
"cookTimeMin",
"totalTimeMin"
],
"type": "string"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {},
"oldValue": {},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"newValue"
],
"properties": {
"type": {
"const": "replace-images"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "array",
"items": {
"type": "string"
}
},
"oldValue": {
"type": "array",
"items": {
"type": "string"
}
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"note"
],
"properties": {
"note": {
"type": "string"
},
"type": {
"const": "add-note"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"noteIndex"
],
"properties": {
"type": {
"const": "remove-note"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"oldValue": {
"type": "string"
},
"noteIndex": {
"type": "integer",
"minimum": 0
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
}
]
}
},
"remainingPatches": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"ingredientId",
"newValue"
],
"properties": {
"type": {
"const": "replace-ingredient"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"oldValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"ingredientId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"newValue"
],
"properties": {
"type": {
"const": "insert-ingredient"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"afterIngredientId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"ingredientId"
],
"properties": {
"type": {
"const": "remove-ingredient"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"oldValue": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"ingredientId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"stepId",
"newValue"
],
"properties": {
"type": {
"const": "replace-step"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"stepId": {
"type": "string"
},
"newValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"oldValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"newValue"
],
"properties": {
"type": {
"const": "insert-step"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
},
"afterStepId": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"stepId"
],
"properties": {
"type": {
"const": "remove-step"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"stepId": {
"type": "string"
},
"oldValue": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"field",
"newValue"
],
"properties": {
"type": {
"const": "update-meta"
},
"field": {
"enum": [
"title",
"subtitle",
"description",
"summary",
"cuisine",
"course",
"meal",
"yieldText",
"prepTimeMin",
"cookTimeMin",
"totalTimeMin"
],
"type": "string"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {},
"oldValue": {},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"newValue"
],
"properties": {
"type": {
"const": "replace-images"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"newValue": {
"type": "array",
"items": {
"type": "string"
}
},
"oldValue": {
"type": "array",
"items": {
"type": "string"
}
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"note"
],
"properties": {
"note": {
"type": "string"
},
"type": {
"const": "add-note"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"requestId",
"editId",
"reason",
"noteIndex"
],
"properties": {
"type": {
"const": "remove-note"
},
"editId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"oldValue": {
"type": "string"
},
"noteIndex": {
"type": "integer",
"minimum": 0
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
}
]
}
},
"measurementSystem": {
"enum": [
"source",
"metric",
"imperial"
],
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"ok",
"code",
"message",
"requestId",
"targetIds"
],
"properties": {
"ok": {
"type": "boolean",
"const": false
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"requestId": {
"type": "string"
},
"targetIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
]
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}set_measurement_system — Set Measurement System
Set measurements without ingredient patches. Pass recipeId for saved session state, or pass the full recipe payload from display_recipe to update an unsaved card without persistence.
{
"type": "object",
"anyOf": [
{
"required": [
"recipeId"
]
},
{
"required": [
"recipe"
]
}
],
"required": [
"measurementSystem"
],
"properties": {
"recipe": {
"type": "object",
"required": [
"id",
"title",
"meta",
"ingredients",
"steps",
"notes"
],
"properties": {
"id": {
"type": "string"
},
"meta": {
"type": "object",
"properties": {
"meal": {
"type": "string"
},
"course": {
"type": "string"
},
"cuisine": {
"type": "string"
},
"yieldText": {
"type": "string"
},
"cookTimeMin": {
"type": "number"
},
"prepTimeMin": {
"type": "number"
},
"totalTimeMin": {
"type": "number"
}
},
"additionalProperties": false
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"title": {
"type": "string"
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"summary": {
"type": "string"
},
"subtitle": {
"type": "string"
},
"description": {
"type": "string"
},
"ingredients": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"recipeId": {
"type": "string",
"minLength": 1
},
"sessionId": {
"type": "string"
},
"measurementSystem": {
"enum": [
"source",
"metric",
"imperial"
],
"type": "string"
}
},
"additionalProperties": false
}{
"type": "object",
"oneOf": [
{
"type": "object",
"required": [
"recipeId",
"measurementSystem",
"snapshot",
"saved",
"requestId",
"targetIds"
],
"properties": {
"saved": {
"type": "boolean"
},
"recipeId": {
"type": "string"
},
"snapshot": {
"type": "object",
"required": [
"id",
"title",
"meta",
"ingredients",
"steps",
"notes"
],
"properties": {
"id": {
"type": "string"
},
"meta": {
"type": "object",
"properties": {
"meal": {
"type": "string"
},
"course": {
"type": "string"
},
"cuisine": {
"type": "string"
},
"yieldText": {
"type": "string"
},
"cookTimeMin": {
"type": "number"
},
"prepTimeMin": {
"type": "number"
},
"totalTimeMin": {
"type": "number"
}
},
"additionalProperties": false
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "string"
},
"title": {
"type": "string"
},
"section": {
"type": "string"
},
"substeps": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"timerMin": {
"type": "number"
},
"timerLabel": {
"type": "string"
}
},
"additionalProperties": false
}
},
"timerMin": {
"type": "number"
},
"ingredientIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"title": {
"type": "string"
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"summary": {
"type": "string"
},
"subtitle": {
"type": "string"
},
"description": {
"type": "string"
},
"ingredients": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"type": "string"
},
"unit": {
"type": "string"
},
"section": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitSystem": {
"enum": [
"metric",
"imperial",
"count",
"other"
],
"type": "string"
},
"preparation": {
"type": "string"
},
"quantityText": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"requestId": {
"type": "string"
},
"sessionId": {
"type": "string"
},
"targetIds": {
"type": "array",
"items": {
"type": "string"
}
},
"measurementSystem": {
"enum": [
"source",
"metric",
"imperial"
],
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"ok",
"code",
"message",
"requestId",
"targetIds"
],
"properties": {
"ok": {
"type": "boolean",
"const": false
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"requestId": {
"type": "string"
},
"targetIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
]
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}delete_recipe — Delete Recipe
Permanently delete a recipe owned by the authenticated user from their Sous Chef library. This cannot delete public catalog recipes.
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
}{
"type": "object",
"oneOf": [
{
"type": "object",
"required": [
"deleted",
"requestId",
"targetIds"
],
"properties": {
"id": {
"type": "string"
},
"deleted": {
"type": "boolean"
},
"requestId": {
"type": "string"
},
"targetIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"ok",
"code",
"message",
"requestId",
"targetIds"
],
"properties": {
"ok": {
"type": "boolean",
"const": false
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"requestId": {
"type": "string"
},
"targetIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
]
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}share_recipe — Share Recipe
Creates (or refreshes) a public Sous Chef link for a recipe and returns the URL. Only call when the user explicitly asks to share a recipe. The page is public, anyone with the link can view it, and it is indexed by search engines; the link shows the recipe as it currently looks, including Sous Chef edits, and sharing again updates the same link. Requires a signed-in Sous Chef account.
{
"type": "object",
"required": [
"recipeId"
],
"properties": {
"recipeId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
}{
"type": "object",
"oneOf": [
{
"type": "object",
"required": [
"url",
"title",
"requestId",
"targetIds"
],
"properties": {
"url": {
"type": "string"
},
"title": {
"type": "string"
},
"requestId": {
"type": "string"
},
"targetIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"ok",
"code",
"message",
"requestId",
"targetIds"
],
"properties": {
"ok": {
"type": "boolean",
"const": false
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"requestId": {
"type": "string"
},
"targetIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
]
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}Prompts
7 advertised
import_recipe_from_url — Import Recipe From URL
Import a recipe URL into the authenticated user's Sous Chef library.
- url
- No description (required)
import_recipe_from_text — Import Recipe From Text
Import pasted recipe text into the authenticated user's Sous Chef library.
- text
- No description (required)
edit_recipe — Edit Recipe
Ask Sous Chef to edit a recipe by id.
- recipeId
- No description (required)
- instruction
- No description (required)
make_recipe_vegetarian — Make Recipe Vegetarian
Prompt Sous Chef to make a recipe vegetarian.
- recipeId
- No description (required)
scale_recipe — Scale Recipe
Prompt Sous Chef to scale a recipe to a target serving count.
- recipeId
- No description (required)
- servings
- No description (required)
simplify_recipe — Simplify Recipe
Prompt Sous Chef to simplify a recipe.
- recipeId
- No description (required)
convert_recipe_units — Convert Recipe Units
Prompt Sous Chef to convert a recipe to metric or imperial measurements.
- recipeId
- No description (required)
- system
- No description (required)
Resources
1 advertised
recipe-card-widget — Sous Chef Recipe Card
Compact Sous Chef recipe card with save, validated edit Undo, measurement controls, and cooking mode.
ui://sous-chef/recipe-card.htmlrecipe — Sous Chef Recipe
Full accessible Sous Chef recipe by public or user recipe id.
cochef://recipes/{id}session — Sous Chef Recipe Session
Full recipe session snapshot owned by the authenticated user.
cochef://sessions/{id}recipe-session — Sous Chef Active Recipe Session
Active session snapshot for an accessible recipe and the authenticated user.
cochef://recipes/{id}/session90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
30-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
- 466 ms
- 95th percentile latency
- 466 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 466 ms · metadata changed · 11 tool(s), 1 resource(s), 3 resource template(s), 7 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http sous-chef-mcp https://mcp.mysouschef.app/mcpCodex
codex mcp add sous-chef-mcp --url https://mcp.mysouschef.app/mcpCursor
{
"mcpServers": {
"sous-chef-mcp": {
"url": "https://mcp.mysouschef.app/mcp"
}
}
}Cline
{
"mcpServers": {
"sous-chef-mcp": {
"type": "streamableHttp",
"url": "https://mcp.mysouschef.app/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"sous-chef-mcp": {
"type": "http",
"url": "https://mcp.mysouschef.app/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http sous-chef-mcp https://mcp.mysouschef.app/mcpClaude Desktop
https://mcp.mysouschef.app/mcpWindsurf
{
"mcpServers": {
"sous-chef-mcp": {
"serverUrl": "https://mcp.mysouschef.app/mcp"
}
}
}Let your agent find its tools
Find servers like Sous Chef MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other productivity and knowledge servers
Do you run Sous Chef MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.