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.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "action": "<action>",
      "model_kind": "<model_kind>",
      "name": "<name>",
      "description": "<description>"
    },
    "name": "create_recipe"
  }
}

Input 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

NameRequiredDescriptionDefault
recipeYes
messageYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed27 schema fields changed
    • addedOutput schema / properties / recipe / properties / recipe / description
      Added value: +"A template that asks a few questions and makes something."
    • addedOutput schema / properties / recipe / properties / recipe / properties / action / description
      Added value: +"`arm` makes one generation from your answers; `reprompt` does too, with a model writing the prompt from them; `run` starts a multi-step run (`GET /v1/runs/{id}`). New values may be added."
    • changedOutput schema / properties / recipe / properties / recipe / properties / action / enum
      Previous value: -[
      -  "arm",
      -  "run",
      -  "reprompt"
      -]New value: +[
      +  "arm",
      +  "reprompt",
      +  "run"
      +]
    • removedOutput schema / properties / recipe / properties / recipe / properties / allowed_models
      Removed value: -{
      -  "items": {
      -    "type": "string"
      -  },
      -  "type": "array"
      -}
    • addedOutput schema / properties / recipe / properties / recipe / properties / app_url / $ref
      Added value: +"#/properties/recipe/properties/recipe/properties/cover_url/anyOf/0"
    • removedOutput schema / properties / recipe / properties / recipe / properties / app_url / format
      Removed value: -"uri"
    • removedOutput schema / properties / recipe / properties / recipe / properties / app_url / type
      Removed value: -"string"
    • removedOutput schema / properties / recipe / properties / recipe / properties / arrangement
      Removed value: -{}
    • addedOutput schema / properties / recipe / properties / recipe / properties / choices
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "help": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "key": {
      +        "type": "string"
      +      },
      +      "label": {
      +        "type": "string"
      +      },
      +      "max_picks": {
      +        "type": "integer"
      +      },
      +      "options": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "label": {
      +              "type": "string"
      +            },
      +            "value": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "value",
      +            "label"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "shown_when": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "choice": {
      +                "type": "string"
      +              },
      +              "values": {
      +                "items": {
      +                  "type": "string"
      +                },
      +                "type": "array"
      +              }
      +            },
      +            "required": [
      +              "choice",
      +              "values"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Asked only when that earlier choice holds one of these values."
      +      }
      +    },
      +    "required": [
      +      "key",
      +      "label",
      +      "help",
      +      "options",
      +      "max_picks",
      +      "shown_when"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / recipe / properties / recipe / properties / id
      Added value: +{
      +  "format": "uuid",
      +  "type": "string"
      +}
    • addedOutput schema / properties / recipe / properties / recipe / properties / inputs
      Added value: +{
      +  "description": "The media an `arm` or `reprompt` recipe takes, by key.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "help": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "key": {
      +        "type": "string"
      +      },
      +      "label": {
      +        "type": "string"
      +      },
      +      "max_items": {
      +        "type": "integer"
      +      },
      +      "media": {
      +        "description": "\"image\", \"video\" or \"audio\".",
      +        "type": "string"
      +      },
      +      "required": {
      +        "type": "boolean"
      +      },
      +      "takes_subject": {
      +        "description": "Whether this input takes one of your Subjects as `{ \"type\": \"subject\", \"subject_id\" }`.",
      +        "type": "boolean"
      +      }
      +    },
      +    "required": [
      +      "key",
      +      "label",
      +      "help",
      +      "media",
      +      "required",
      +      "max_items",
      +      "takes_subject"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / recipe / properties / recipe / properties / model
      Added value: +{
      +  "description": "The default model; null on a `run` recipe, whose steps choose their own.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • removedOutput schema / properties / recipe / properties / recipe / properties / model_id
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / recipe / properties / recipe / properties / model_kind
      Removed value: -{
      -  "enum": [
      -    "image",
      -    "video",
      -    "tts",
      -    "music"
      -  ],
      -  "type": "string"
      -}
    • addedOutput schema / properties / recipe / properties / recipe / properties / object
      Added value: +{
      +  "const": "recipe",
      +  "type": "string"
      +}
    • addedOutput schema / properties / recipe / properties / recipe / properties / prompt
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "label": {
      +          "type": "string"
      +        },
      +        "max_length": {
      +          "type": "integer"
      +        },
      +        "placeholder": {
      +          "type": "string"
      +        },
      +        "required": {
      +          "type": "boolean"
      +        }
      +      },
      +      "required": [
      +        "label",
      +        "placeholder",
      +        "required",
      +        "max_length"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "What `prompt` asks for when you run it; null when it asks for none."
      +}
    • removedOutput schema / properties / recipe / properties / recipe / properties / recipe_id
      Removed value: -{
      -  "format": "uuid",
      -  "type": "string"
      -}
    • removedOutput schema / properties / recipe / properties / recipe / properties / recommended_model
      Removed value: -{
      -  "type": [
      -    "string",
      -    "null"
      -  ]
      -}
    • addedOutput schema / properties / recipe / properties / recipe / properties / recommended_models
      Added value: +{
      +  "description": "Models its author tested. Any model of its medium that can take its inputs runs it too.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / recipe / properties / recipe / properties / run_inputs / description
      Added value: +"What a `run` recipe takes, by key; empty on the others."
    • addedOutput schema / properties / recipe / properties / recipe / properties / run_inputs / items / additionalProperties
      Added value: +true
    • addedOutput schema / properties / recipe / properties / recipe / properties / run_inputs / items / properties
      Added value: +{
      +  "key": {
      +    "type": "string"
      +  },
      +  "label": {
      +    "type": "string"
      +  },
      +  "type": {
      +    "type": "string"
      +  }
      +}
    • addedOutput schema / properties / recipe / properties / recipe / properties / run_inputs / items / required
      Added value: +[
      +  "type",
      +  "key",
      +  "label"
      +]
    • addedOutput schema / properties / recipe / properties / recipe / properties / run_inputs / items / type
      Added value: +"object"
    • addedOutput schema / properties / recipe / properties / recipe / properties / type
      Added value: +{
      +  "description": "What it makes. New values may be added.",
      +  "enum": [
      +    "image",
      +    "clip",
      +    "voiceover",
      +    "music"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / recipe / properties / recipe / properties / uses / type
      Previous value: -"number"New value: +"integer"
    • changedOutput schema / properties / recipe / properties / recipe / required
      Previous value: -[
      -  "recipe_id",
      -  "model_kind",
      -  "action",
      -  "name",
      -  "description",
      -  "visibility",
      -  "featured",
      -  "tags",
      -  "uses",
      -  "cover_url",
      -  "app_url"
      -]New value: +[
      +  "object",
      +  "id",
      +  "name",
      +  "description",
      +  "action",
      +  "type",
      +  "model",
      +  "recommended_models",
      +  "prompt",
      +  "inputs",
      +  "choices",
      +  "run_inputs",
      +  "tags",
      +  "uses",
      +  "cover_url",
      +  "app_url",
      +  "visibility",
      +  "featured"
      +]
  2. 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",
      -  "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"
      -]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",
      +  "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.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",
      -  "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"
      -]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",
      +  "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.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",
      -      "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"
      -  }
      -]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",
      +      "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.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"
      +  }
      +]
  3. 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
      +}
  4. 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"
      +  }
      +]
  5. 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"
      +  }
      +]
  6. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, so the safety profile is covered; the description adds value beyond that by disclosing that the created row is private and stays yours until publish_recipe/submit_recipe, that a run recipe's `model_kind` must agree with its last step, and that validation errors name the offending field. It stops short of saying whether creation consumes credits or what happens on duplicate names, so it is not fully transparent.

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 and the action branching are front-loaded before alternatives and the example, which is the right order. The embedded one-line JSON is bulky but justified since the text notes catalog rows never expose steps, so it is the only working grammar supplied; some phrasing ('the room its tile hangs in') adds decoding cost for an agent.

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?

With an output schema present, return values need no explanation, and the description covers the risky parts of a 14-parameter, deeply nested authoring tool: action branching, the definition path/interpolation grammar, a known-good run example, and the model_kind consistency rule. It is still thin on the config furniture (slots, choices, shortcuts, preset policies) that makes up most of the schema depth.

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

Parameters4/5

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

Schema description coverage is only 7% across 14 parameters, but the description compensates meaningfully by explaining conditional requiredness per action (model_id+config for arm, definition for run, model_id+config+writer for reprompt), which the schema does not encode at all, plus the `writer` vision flag and the model_kind constraint. It still leaves the largest nested surfaces — config.slots, choices, shortcuts, creative_field, preset_policies — and top-level name/description/tags/highlights/allowed_models/recommended_model/suggested_params unaddressed.

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?

The opening sentence names a specific verb and resource ('Author a private recipe from nothing') and immediately differentiates itself from siblings by naming publish_recipe, submit_recipe, save_recipe_from_generation, remix_recipe, and get_recipe with what each does instead. An agent can tell exactly which tool in this cluster is the authoring entry point.

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?

It gives explicit branching guidance on the `action` enum: `arm` for one generation, `run` for a multi-step workflow, `reprompt` for a model-written prompt at press time, each with its required companions. It also states exclusions and redirects ('to save what a finished generation already ran, call save_recipe_from_generation instead; to copy a catalog recipe onto your shelf, remix_recipe') and recommends reading get_recipe first for the shape.

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