Skip to main content
Glama

Create recipe

create_recipe

Author a private recipe from nothing. action picks the document: arm configures ONE generation and needs model_id plus config (an arrangement — the creative field, the prompt template, slots and choices); run starts a multi-step run and needs definition (a workflow — its inputs and steps); reprompt configures ONE generation whose prompt a model writes at press time, and needs model_id, config and writer (the rules it writes by, and whether it looks at the pictures). The row is private and stays yours; publish_recipe puts it on the public wall, submit_recipe offers it to a curator. To save what a finished generation already ran, call save_recipe_from_generation instead; to copy a catalog recipe onto your shelf, remix_recipe. Read get_recipe on a catalog row to see the shape of a working arrangement before writing one. A catalog row never shows its steps, so for a run recipe copy the grammar from this definition, which runs as written: {"schema_version":1,"inputs":[{"type":"text","key":"brief","label":"Brief","required":true,"max_length":2000,"default":""},{"type":"number","key":"count","label":"How many?","min":1,"max":30,"default":3}],"steps":[{"type":"prompt","id":"plan","model":"grok-4.6","system":"You write image prompts: one vivid sentence each, concrete subject, light and lens.","template":"Write {{inputs.count}} prompts for: {{inputs.brief}}","vision":[],"output":{"kind":"list","count":"count"}},{"type":"image","id":"render","model":"seedream-5-lite","prompt":"{{item}}","references":[],"subjects":[],"params":{},"for_each":"steps.plan.items"}]} A run recipe's model_kind is the room its tile hangs in and must agree with what its last step makes. Validation errors name the field.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYes
tagsNo
actionYes
configNo
writerNo
model_idNo
definitionNoA workflow: `inputs` (what the presser is asked) and `steps` in run order. A step reads earlier values by path: `inputs.<key>`, `steps.<id>` (a step's result, or `steps.<id>.<field>` for one field of it), `steps.<id>.items` (a list or records step's items). A step with `for_each` set to a list path runs once per item and reads `item` (the whole item) or `item.<field>` (one field of a record); a parallel step may read the same position with `steps.<id>.items[index].<field>`. `{{ path }}` interpolates a path into a prompt or template. Every path must be declared before the step that reads it; validation names the step and the field.
highlightsNo
model_kindYes
cover_shapeNo
descriptionYes
allowed_modelsNo
suggested_paramsNo
recommended_modelNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
recipeYes
messageYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / config / properties / choices / items / properties / max_picks
      Added value: +{
      +  "default": 1,
      +  "maximum": 16,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / config / properties / choices / items / properties / shown_when
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "choice": {
      +          "maxLength": 40,
      +          "minLength": 1,
      +          "pattern": "^[a-z][a-z0-9_]*$",
      +          "type": "string"
      +        },
      +        "values": {
      +          "items": {
      +            "maxLength": 40,
      +            "minLength": 1,
      +            "pattern": "^[a-z][a-z0-9_]*$",
      +            "type": "string"
      +          },
      +          "maxItems": 16,
      +          "minItems": 1,
      +          "type": "array"
      +        }
      +      },
      +      "required": [
      +        "choice",
      +        "values"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
  2. Changed3 schema fields changed
    • changedInput schema / properties / config / properties / choices / items / properties / options / maxItems
      Previous value: -8New value: +16
    • changedInput schema / properties / config / properties / choices / maxItems
      Previous value: -4New value: +12
    • changedInput schema / properties / config / properties / preset_policies / properties / style / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "default": {
      -        "maxLength": 80,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "families": {
      -        "items": {
      -          "enum": [
      -            "photorealistic",
      -            "cinematic",
      -            "3d_animation",
      -            "cartoon",
      -            "anime"
      -          ],
      -          "type": "string"
      -        },
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "helper_text": {
      -        "anyOf": [
      -          {
      -            "maxLength": 240,
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "label": {
      -        "maxLength": 60,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "mode": {
      -        "const": "editable",
      -        "type": "string"
      -      },
      -      "required": {
      -        "default": false,
      -        "type": "boolean"
      -      }
      -    },
      -    "required": [
      -      "mode"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "mode": {
      -        "const": "fixed",
      -        "type": "string"
      -      },
      -      "preset": {
      -        "$ref": "#/properties/config/properties/preset_policies/properties/style/anyOf/0/properties/default"
      -      },
      -      "reason": {
      -        "maxLength": 240,
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "mode",
      -      "preset",
      -      "reason"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "mode": {
      -        "const": "unused",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "mode"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "default": {
      +        "maxLength": 80,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "families": {
      +        "items": {
      +          "enum": [
      +            "photorealistic",
      +            "cinematic",
      +            "3d_animation",
      +            "cartoon",
      +            "anime",
      +            "pan_tilt",
      +            "zoom_lens",
      +            "dolly_track",
      +            "slide_orbit",
      +            "handheld_body",
      +            "drone_crane",
      +            "specials"
      +          ],
      +          "type": "string"
      +        },
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "helper_text": {
      +        "anyOf": [
      +          {
      +            "maxLength": 240,
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "label": {
      +        "maxLength": 60,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "mode": {
      +        "const": "editable",
      +        "type": "string"
      +      },
      +      "required": {
      +        "default": false,
      +        "type": "boolean"
      +      }
      +    },
      +    "required": [
      +      "mode"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "mode": {
      +        "const": "fixed",
      +        "type": "string"
      +      },
      +      "preset": {
      +        "$ref": "#/properties/config/properties/preset_policies/properties/style/anyOf/0/properties/default"
      +      },
      +      "reason": {
      +        "maxLength": 240,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "mode",
      +      "preset",
      +      "reason"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "mode": {
      +        "const": "unused",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "mode"
      +    ],
      +    "type": "object"
      +  }
      +]
  3. Changed3 schema fields changed
    • changedInput schema / properties / allowed_models / items / enum
      Previous value: -[
      -  "seedream-5-lite",
      -  "nano-banana-2.1",
      -  "nano-banana-2",
      -  "gpt-image-2.5-flare",
      -  "gpt-image-2.5-sunburst",
      -  "gpt-image-2",
      -  "nano-banana-2-lite",
      -  "seedream-5-pro",
      -  "seedream-5-pro-spicy",
      -  "flux-schnell",
      -  "flux-2-flex",
      -  "flux-2-pro",
      -  "flux-2-max",
      -  "recraft-v4.1-svg",
      -  "recraft-v4.1-pro-svg",
      -  "p-image",
      -  "grok-imagine-image",
      -  "grok-imagine-image-quality",
      -  "soul-2",
      -  "seedance-2.5",
      -  "seedance-2.5-spicy",
      -  "seedance-2.0",
      -  "seedance-2.0-fast",
      -  "seedance-2.0-mini",
      -  "grok-imagine-video-1.5",
      -  "veo-3.1",
      -  "veo-3.1-fast",
      -  "veo-3.1-lite",
      -  "gemini-omni-1.1",
      -  "kling-v3-omni-video",
      -  "kling-v3-video",
      -  "happyhorse-1.0",
      -  "wan-3",
      -  "wan-3-prime",
      -  "gen-4.5",
      -  "p-video",
      -  "p-video-2",
      -  "flux-3",
      -  "minimax-h3-max",
      -  "p-video-avatar",
      -  "p-video-animate",
      -  "p-video-replace",
      -  "omni-human-1.5",
      -  "kling-avatar-v2",
      -  "kling-v3-motion-control",
      -  "sync-lipsync-2",
      -  "kling-lip-sync",
      -  "genjutsu-motion-transfer",
      -  "genjutsu-object-swap",
      -  "elevenlabs-tts",
      -  "eleven-v4",
      -  "gemini-3.1-flash-tts",
      -  "kokoro-82m",
      -  "minimax-speech-2.8-hd",
      -  "inworld-tts-2",
      -  "minimax-music-2.6",
      -  "eleven-music"
      -]New value: +[
      +  "seedream-5-lite",
      +  "nano-banana-2.1",
      +  "nano-banana-2",
      +  "gpt-image-2.5-flare",
      +  "gpt-image-2.5-sunburst",
      +  "gpt-image-2",
      +  "nano-banana-2-lite",
      +  "seedream-5-pro",
      +  "seedream-5-pro-spicy",
      +  "flux-schnell",
      +  "flux-2-flex",
      +  "flux-2-pro",
      +  "flux-2-max",
      +  "recraft-v4.1-svg",
      +  "recraft-v4.1-pro-svg",
      +  "p-image",
      +  "grok-imagine-image",
      +  "grok-imagine-image-quality",
      +  "krea-3",
      +  "qwen-image-3-pro",
      +  "soul-2",
      +  "seedance-2.5",
      +  "seedance-2.5-spicy",
      +  "seedance-2.0",
      +  "seedance-2.0-fast",
      +  "seedance-2.0-mini",
      +  "grok-imagine-video-1.5",
      +  "veo-3.1",
      +  "veo-3.1-fast",
      +  "veo-3.1-lite",
      +  "gemini-omni-1.1",
      +  "kling-v3-omni-video",
      +  "kling-v3-video",
      +  "happyhorse-1.0",
      +  "wan-3",
      +  "wan-3-prime",
      +  "gen-4.5",
      +  "p-video",
      +  "p-video-2",
      +  "flux-3",
      +  "minimax-h3-max",
      +  "p-video-avatar",
      +  "p-video-animate",
      +  "p-video-replace",
      +  "omni-human-1.5",
      +  "kling-avatar-v2",
      +  "kling-v3-motion-control",
      +  "sync-lipsync-2",
      +  "kling-lip-sync",
      +  "genjutsu-motion-transfer",
      +  "genjutsu-object-swap",
      +  "elevenlabs-tts",
      +  "eleven-v4",
      +  "gemini-3.1-flash-tts",
      +  "kokoro-82m",
      +  "minimax-speech-2.8-hd",
      +  "inworld-tts-2",
      +  "minimax-music-2.6",
      +  "eleven-music"
      +]
    • changedInput schema / properties / model_id / enum
      Previous value: -[
      -  "seedream-5-lite",
      -  "nano-banana-2.1",
      -  "nano-banana-2",
      -  "gpt-image-2.5-flare",
      -  "gpt-image-2.5-sunburst",
      -  "gpt-image-2",
      -  "nano-banana-2-lite",
      -  "seedream-5-pro",
      -  "seedream-5-pro-spicy",
      -  "flux-schnell",
      -  "flux-2-flex",
      -  "flux-2-pro",
      -  "flux-2-max",
      -  "recraft-v4.1-svg",
      -  "recraft-v4.1-pro-svg",
      -  "p-image",
      -  "grok-imagine-image",
      -  "grok-imagine-image-quality",
      -  "soul-2",
      -  "seedance-2.5",
      -  "seedance-2.5-spicy",
      -  "seedance-2.0",
      -  "seedance-2.0-fast",
      -  "seedance-2.0-mini",
      -  "grok-imagine-video-1.5",
      -  "veo-3.1",
      -  "veo-3.1-fast",
      -  "veo-3.1-lite",
      -  "gemini-omni-1.1",
      -  "kling-v3-omni-video",
      -  "kling-v3-video",
      -  "happyhorse-1.0",
      -  "wan-3",
      -  "wan-3-prime",
      -  "gen-4.5",
      -  "p-video",
      -  "p-video-2",
      -  "flux-3",
      -  "minimax-h3-max",
      -  "p-video-avatar",
      -  "p-video-animate",
      -  "p-video-replace",
      -  "omni-human-1.5",
      -  "kling-avatar-v2",
      -  "kling-v3-motion-control",
      -  "sync-lipsync-2",
      -  "kling-lip-sync",
      -  "genjutsu-motion-transfer",
      -  "genjutsu-object-swap",
      -  "elevenlabs-tts",
      -  "eleven-v4",
      -  "gemini-3.1-flash-tts",
      -  "kokoro-82m",
      -  "minimax-speech-2.8-hd",
      -  "inworld-tts-2",
      -  "minimax-music-2.6",
      -  "eleven-music"
      -]New value: +[
      +  "seedream-5-lite",
      +  "nano-banana-2.1",
      +  "nano-banana-2",
      +  "gpt-image-2.5-flare",
      +  "gpt-image-2.5-sunburst",
      +  "gpt-image-2",
      +  "nano-banana-2-lite",
      +  "seedream-5-pro",
      +  "seedream-5-pro-spicy",
      +  "flux-schnell",
      +  "flux-2-flex",
      +  "flux-2-pro",
      +  "flux-2-max",
      +  "recraft-v4.1-svg",
      +  "recraft-v4.1-pro-svg",
      +  "p-image",
      +  "grok-imagine-image",
      +  "grok-imagine-image-quality",
      +  "krea-3",
      +  "qwen-image-3-pro",
      +  "soul-2",
      +  "seedance-2.5",
      +  "seedance-2.5-spicy",
      +  "seedance-2.0",
      +  "seedance-2.0-fast",
      +  "seedance-2.0-mini",
      +  "grok-imagine-video-1.5",
      +  "veo-3.1",
      +  "veo-3.1-fast",
      +  "veo-3.1-lite",
      +  "gemini-omni-1.1",
      +  "kling-v3-omni-video",
      +  "kling-v3-video",
      +  "happyhorse-1.0",
      +  "wan-3",
      +  "wan-3-prime",
      +  "gen-4.5",
      +  "p-video",
      +  "p-video-2",
      +  "flux-3",
      +  "minimax-h3-max",
      +  "p-video-avatar",
      +  "p-video-animate",
      +  "p-video-replace",
      +  "omni-human-1.5",
      +  "kling-avatar-v2",
      +  "kling-v3-motion-control",
      +  "sync-lipsync-2",
      +  "kling-lip-sync",
      +  "genjutsu-motion-transfer",
      +  "genjutsu-object-swap",
      +  "elevenlabs-tts",
      +  "eleven-v4",
      +  "gemini-3.1-flash-tts",
      +  "kokoro-82m",
      +  "minimax-speech-2.8-hd",
      +  "inworld-tts-2",
      +  "minimax-music-2.6",
      +  "eleven-music"
      +]
    • changedInput schema / properties / recommended_model / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "seedream-5-lite",
      -      "nano-banana-2.1",
      -      "nano-banana-2",
      -      "gpt-image-2.5-flare",
      -      "gpt-image-2.5-sunburst",
      -      "gpt-image-2",
      -      "nano-banana-2-lite",
      -      "seedream-5-pro",
      -      "seedream-5-pro-spicy",
      -      "flux-schnell",
      -      "flux-2-flex",
      -      "flux-2-pro",
      -      "flux-2-max",
      -      "recraft-v4.1-svg",
      -      "recraft-v4.1-pro-svg",
      -      "p-image",
      -      "grok-imagine-image",
      -      "grok-imagine-image-quality",
      -      "soul-2",
      -      "seedance-2.5",
      -      "seedance-2.5-spicy",
      -      "seedance-2.0",
      -      "seedance-2.0-fast",
      -      "seedance-2.0-mini",
      -      "grok-imagine-video-1.5",
      -      "veo-3.1",
      -      "veo-3.1-fast",
      -      "veo-3.1-lite",
      -      "gemini-omni-1.1",
      -      "kling-v3-omni-video",
      -      "kling-v3-video",
      -      "happyhorse-1.0",
      -      "wan-3",
      -      "wan-3-prime",
      -      "gen-4.5",
      -      "p-video",
      -      "p-video-2",
      -      "flux-3",
      -      "minimax-h3-max",
      -      "p-video-avatar",
      -      "p-video-animate",
      -      "p-video-replace",
      -      "omni-human-1.5",
      -      "kling-avatar-v2",
      -      "kling-v3-motion-control",
      -      "sync-lipsync-2",
      -      "kling-lip-sync",
      -      "genjutsu-motion-transfer",
      -      "genjutsu-object-swap",
      -      "elevenlabs-tts",
      -      "eleven-v4",
      -      "gemini-3.1-flash-tts",
      -      "kokoro-82m",
      -      "minimax-speech-2.8-hd",
      -      "inworld-tts-2",
      -      "minimax-music-2.6",
      -      "eleven-music"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "seedream-5-lite",
      +      "nano-banana-2.1",
      +      "nano-banana-2",
      +      "gpt-image-2.5-flare",
      +      "gpt-image-2.5-sunburst",
      +      "gpt-image-2",
      +      "nano-banana-2-lite",
      +      "seedream-5-pro",
      +      "seedream-5-pro-spicy",
      +      "flux-schnell",
      +      "flux-2-flex",
      +      "flux-2-pro",
      +      "flux-2-max",
      +      "recraft-v4.1-svg",
      +      "recraft-v4.1-pro-svg",
      +      "p-image",
      +      "grok-imagine-image",
      +      "grok-imagine-image-quality",
      +      "krea-3",
      +      "qwen-image-3-pro",
      +      "soul-2",
      +      "seedance-2.5",
      +      "seedance-2.5-spicy",
      +      "seedance-2.0",
      +      "seedance-2.0-fast",
      +      "seedance-2.0-mini",
      +      "grok-imagine-video-1.5",
      +      "veo-3.1",
      +      "veo-3.1-fast",
      +      "veo-3.1-lite",
      +      "gemini-omni-1.1",
      +      "kling-v3-omni-video",
      +      "kling-v3-video",
      +      "happyhorse-1.0",
      +      "wan-3",
      +      "wan-3-prime",
      +      "gen-4.5",
      +      "p-video",
      +      "p-video-2",
      +      "flux-3",
      +      "minimax-h3-max",
      +      "p-video-avatar",
      +      "p-video-animate",
      +      "p-video-replace",
      +      "omni-human-1.5",
      +      "kling-avatar-v2",
      +      "kling-v3-motion-control",
      +      "sync-lipsync-2",
      +      "kling-lip-sync",
      +      "genjutsu-motion-transfer",
      +      "genjutsu-object-swap",
      +      "elevenlabs-tts",
      +      "eleven-v4",
      +      "gemini-3.1-flash-tts",
      +      "kokoro-82m",
      +      "minimax-speech-2.8-hd",
      +      "inworld-tts-2",
      +      "minimax-music-2.6",
      +      "eleven-music"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  4. First observed

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the write/safe profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), so the bar is lower. The description still adds real context beyond them: the row stays private, catalog rows never expose their steps, `model_kind` must agree with the last step's output, and validation errors name the offending field.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, and the routing guidance comes before the deep detail. It is dense and the embedded run-recipe JSON is bulky, but that example is directly actionable grammar rather than filler, so it earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter, deeply nested tool with an output schema present, the description covers the critical decisions (which action takes which payload, privacy, model_kind validation, a runnable `definition` example) without needing to restate return values. Only the peripheral metadata params are left to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 7%, so the description must carry the parameter burden. It does well on the decisive action-gated params (action values and their required companions model_id/config/definition/writer, plus model_kind), but leaves name, tags, highlights, cover_shape, allowed_models, recommended_model and suggested_params unexplained beyond their raw schema types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Author a private recipe from nothing') and immediately specialises the three modes of the tool via `action`. An agent can distinguish create_recipe from sibling creation tools (save_recipe_from_generation, remix_recipe) without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternatives and the condition selecting each: save_recipe_from_generation for finished generations, remix_recipe for copying catalog rows, get_recipe to inspect a working arrangement before authoring, publish_recipe/submit_recipe for the downstream lifecycle. This is textbook when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources