Skip to main content
Glama

Save recipe from generation

save_recipe_from_generation

Turn a finished image or clip into a private recipe that makes more of it. The generation supplies the model, the settings and the prompt or arrangement it ran; you supply the name. Pressing the result with an empty brief reproduces the original; typing something replaces it. Reference images are not carried — they would tie the recipe to files you may delete.

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": {
      "generation_id": "<generation_id>",
      "name": "<name>"
    },
    "name": "save_recipe_from_generation"
  }
}

Input Schema

NameRequiredDescriptionDefault
nameYes
tagsNo
descriptionNo
generation_idYes

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. First observed

TDQS

A3.7/5.0
Behavior4/5

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

Annotations only declare the generic profile (not read-only, not destructive, not idempotent), so the description earns real credit by disclosing that the resulting recipe is private, that model/settings/prompt are inherited from the generation while only the name comes from the caller, and that reference images are deliberately dropped. The phrase about pressing the result with an empty brief versus typing something is evocative but vague about the actual inheritance mechanics.

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

Conciseness3/5

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

The core action and the inheritance rule are front-loaded and waste little space, but the sentence 'Pressing the result with an empty brief reproduces the original; typing something replaces it' uses an unexplained referent ('brief') that is not a parameter of this tool, forcing the agent to decode it.

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

Completeness5/5

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

Placeholder output schema present; description adequately covers behavior.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry parameter meaning, yet it only covers name ('you supply the name') and implicitly generation_id. The tags and description parameters are never mentioned, and there are no format, length, or default cues for any of the four.

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

Purpose4/5

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

The first sentence names a specific verb (turn/save), a specific source (a finished image or clip) and a specific output (a private recipe), which makes it distinguishable from create_recipe and save_storyboard_template. It stops short of naming those siblings explicitly, so the agent must infer that this is the 'from an existing generation' variant.

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

Usage Guidelines4/5

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

It establishes the triggering condition clearly: you already have a finished generation and want to re-run its settings. It also gives a useful boundary rule (reference images are not carried over), but never states when to prefer create_recipe or update_recipe instead, so exclusion guidance is only partial.

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