# recipe MCP tool

Reusable playbooks.

{/* Generated by landing/scripts/generate-mcp-docs.ts. Do not edit. */}

MCP name `recipe` dispatches to renderer `recipe`.

Does not use hosted quota. Local editor operation.

Reusable playbooks. action search finds recipes by query. action get loads one recipeId. action create writes a private recipe. action update patches an existing private recipe. Editor must be open. Does not use hosted quota. Local editor operation.

## Advertised MCP input

This tool is registered with **passthrough**. The fields below are what `listTools` advertises. The renderer still validates the child fields for the chosen action or kind. Extra advertised-only values are documented under Reachable behavior.

| Field | Type | Required | Constraints | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `action` | enum("search", "get", "create", "update") | yes | — | — | action for recipe |
| `resultStart` | integer | no | min 0; max 9007199254740991 | 0 | First character offset to return. Use 0 for the first call. |
| `resultEnd` | integer | no | min 1; max 9007199254740991 | 8000 | Exclusive end offset. resultEnd - resultStart must be at most 8000. Increment resultStart by 8000 to page through large results. |

## Reachable behavior

Advertised action values match the renderer children: `search`, `get`, `create`, `update`.

## Renderer child fields

These are the authoritative fields for each `action`. Send them on the same MCP call. Grouped MCP tools use passthrough, so these fields are not all listed in the advertised schema.

### `action=search`

Renderer tool: `searchRecipes`.

Search semantic document playbooks that can raise output quality. Requires AI Search to be ready (embedding model + recipe index). In Agent Mode, try this before tackling substantive user tasks so existing recipes can guide the work. If unavailable because AI Search is still warming up, continue without recipes — do not retry until ready.

| Field | Type | Required | Constraints | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `query` | string | yes | minLength 1 | — | Natural language description of the needed reusable playbook. |
| `visibility` | enum("all", "private", "public") | no | — | "all" | — |
| `limit` | number | no | min 1; max 20 | 5 | — |

### `action=get`

Renderer tool: `getRecipe`.

Retrieve one recipe playbook as structured context and record basic usage. Use before applying a recipe.

| Field | Type | Required | Constraints | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `recipeId` | string | yes | minLength 1 | — | Recipe ID returned by searchRecipes. |
| `visibility` | enum("all", "private", "public") | no | — | "all" | — |

### `action=create`

Renderer tool: `createRecipe`.

Create a private reusable recipe playbook. Requires AI Search to be ready (embedding model + recipe index). Before creating, searchRecipes should be used to avoid duplicates and updateRecipe should be used for a close match. If AI Search is still warming up, skip creating a recipe.

| Field | Type | Required | Constraints | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `title` | string | yes | minLength 1; maxLength 200 | — | — |
| `summary` | string | yes | minLength 1; maxLength 2000 | — | — |
| `whenToUse` | string | yes | minLength 1; maxLength 8000 | — | — |
| `steps` | object[] | yes | minItems 1; maxItems 80 | — | — |
| `steps[].title` | string | yes | minLength 1; maxLength 200 | — | — |
| `steps[].detail` | string | yes | minLength 1; maxLength 8000 | — | — |
| `acceptanceCriteria` | string[] | yes | minItems 1; maxItems 80 | — | — |
| `tags` | string[] | no | maxItems 40 | [] | — |
| `document` | string | yes | minLength 1; maxLength 80000 | — | — |

### `action=update`

Renderer tool: `updateRecipe`.

Update an existing private recipe when a new reusable pattern overlaps it. Requires AI Search to be ready (embedding model + recipe index). Use after searchRecipes finds a close match. If AI Search is still warming up, skip updating recipes.

| Field | Type | Required | Constraints | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `recipeId` | string | yes | minLength 1 | — | — |
| `title` | string | no | minLength 1; maxLength 200 | — | — |
| `summary` | string | no | minLength 1; maxLength 2000 | — | — |
| `whenToUse` | string | no | minLength 1; maxLength 8000 | — | — |
| `steps` | object[] | no | minItems 1; maxItems 80 | — | — |
| `steps[].title` | string | yes | minLength 1; maxLength 200 | — | — |
| `steps[].detail` | string | yes | minLength 1; maxLength 8000 | — | — |
| `acceptanceCriteria` | string[] | no | minItems 1; maxItems 80 | — | — |
| `tags` | string[] | no | maxItems 40 | — | — |
| `document` | string | no | minLength 1; maxLength 80000 | — | — |

## Result window

Every local MCP tool accepts `resultStart` and `resultEnd` so large payloads can be paged.

- `resultStart` — first character offset. Default `0`.
- `resultEnd` — exclusive end offset. Default `8000`.
- `resultEnd - resultStart` must be at most **8000** characters.
- Increment `resultStart` by 8000 to read the next window.
