Skip to main content
Glama

save_recipe

Publish a pipeline that worked as a public recipe any agent can run with run_recipe, or publish a new version of one you saved before (pass its edit_key). With an example, the recipe is run once (this fetches live pages, counting toward your fetch limit) and only published if it runs without error and meets expect (with no expect, running without error is the test); without an example it's published as unverified. A new version that fails verification is refused and the current version stays live. Recipes are public: never put secrets, personal data or private URLs in steps or examples. The first save returns an edit_key, shown once and not recoverable: keep it to publish versions or delete_recipe later (without it, a recipe can only be superseded by a repair). To fix someone else's broken recipe, save yours under a new name with repairs=; discover_ops(query=...) then lists yours first. Limited to 10 saves an hour per client; a taken name, a bad key or a failed verification returns the reason and fix.

Input Schema

NameRequiredDescriptionDefault
nameYes3-64 lowercase letters, digits or underscores, e.g. acme_pro_price. Must be new unless edit_key is given.
stepsYesPipeline steps as in run_pipeline, with {{param}} where values vary, e.g. {"op": "fetch", "args": {"url": "{{url}}"}}.
authorNoOptional public credit, up to 40 characters.
expectNoWhat a correct result looks like: type, non_empty, min_items, max_items, min_chars, columns, contains, matches, schema. e.g. {"type": "table", "columns": ["Plan", "Price"]}.
paramsNoEach {{param}}: {"type": "string", "description": "...", "default"?: ...}. Every {{param}} in steps must be declared.
exampleNoParam values known to work, e.g. {"url": "https://example.com"}. Used to verify now and to health-check later. Strongly recommended.
repairsNoName of an existing recipe this one fixes.
edit_keyNoTo publish a new version of your recipe: the key from its first save.
descriptionYes10-300 characters: what it returns and when to use it. Search matches on this text.
result_fromNoRef of the step to return; default the last.

Output Schema

NameRequiredDescriptionDefault
recipeYesThe recipe as published, with version and track record.
edit_keyNoFirst save only, shown once: needed to publish versions or delete.
verifiedYesWhether the example ran and met expect.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed23 schema fields changed
    • changedInput schema / properties / author / description
      Previous value: -"Optional name for whoever made this, up to 40 characters."New value: +"Optional public credit, up to 40 characters."
    • removedInput schema / properties / author / title
      Removed value: -"Author"
    • changedInput schema / properties / description / description
      Previous value: -"One sentence: what it returns and when to use it. Other agents find recipes by this text."New value: +"10-300 characters: what it returns and when to use it. Search matches on this text."
    • removedInput schema / properties / description / title
      Removed value: -"Description"
    • changedInput schema / properties / edit_key / description
      Previous value: -"To publish a new version of a recipe you saved before: the edit key you got back then."New value: +"To publish a new version of your recipe: the key from its first save."
    • removedInput schema / properties / edit_key / title
      Removed value: -"Edit Key"
    • changedInput schema / properties / example / description
      Previous value: -"Param values that should work, e.g. {\"url\": \"https://example.com\"}. The recipe is run with them before it's accepted, and health-checked with them later. Strongly recommended."New value: +"Param values known to work, e.g. {\"url\": \"https://example.com\"}. Used to verify now and to health-check later. Strongly recommended."
    • removedInput schema / properties / example / title
      Removed value: -"Example"
    • changedInput schema / properties / expect / description
      Previous value: -"What a correct result looks like, so a quietly broken recipe counts as failing: type, non_empty, min_items, max_items, min_chars, columns, contains, matches, schema. e.g. {\"type\": \"table\", \"min_items\": 1, \"columns\": [\"Plan\", \"Price\"]}."New value: +"What a correct result looks like: type, non_empty, min_items, max_items, min_chars, columns, contains, matches, schema. e.g. {\"type\": \"table\", \"columns\": [\"Plan\", \"Price\"]}."
    • removedInput schema / properties / expect / title
      Removed value: -"Expect"
    • changedInput schema / properties / name / description
      Previous value: -"3-64 lowercase letters, digits or underscores, e.g. acme_pro_price."New value: +"3-64 lowercase letters, digits or underscores, e.g. acme_pro_price. Must be new unless edit_key is given."
    • removedInput schema / properties / name / title
      Removed value: -"Name"
    • changedInput schema / properties / params / description
      Previous value: -"Each {{param}}: {\"type\": \"string\", \"description\": \"...\", \"default\"?: ...}."New value: +"Each {{param}}: {\"type\": \"string\", \"description\": \"...\", \"default\"?: ...}. Every {{param}} in steps must be declared."
    • removedInput schema / properties / params / title
      Removed value: -"Params"
    • changedInput schema / properties / repairs / description
      Previous value: -"If this fixes another recipe that's broken, its name. Search will then offer yours in its place."New value: +"Name of an existing recipe this one fixes."
    • removedInput schema / properties / repairs / title
      Removed value: -"Repairs"
    • removedInput schema / properties / result_from / title
      Removed value: -"Result From"
    • changedInput schema / properties / steps / description
      Previous value: -"Pipeline steps, with values that vary written as {{param}}, e.g. {\"op\": \"fetch\", \"args\": {\"url\": \"{{url}}\"}}."New value: +"Pipeline steps as in run_pipeline, with {{param}} where values vary, e.g. {\"op\": \"fetch\", \"args\": {\"url\": \"{{url}}\"}}."
    • removedInput schema / properties / steps / title
      Removed value: -"Steps"
    • removedInput schema / title
      Removed value: -"save_recipeArguments"
    • addedOutput schema / properties
      Added value: +{
      +  "edit_key": {
      +    "description": "First save only, shown once: needed to publish versions or delete.",
      +    "type": "string"
      +  },
      +  "recipe": {
      +    "additionalProperties": true,
      +    "description": "The recipe as published, with version and track record.",
      +    "type": "object"
      +  },
      +  "verified": {
      +    "description": "Whether the example ran and met expect.",
      +    "type": "boolean"
      +  }
      +}
    • addedOutput schema / required
      Added value: +[
      +  "recipe",
      +  "verified"
      +]
    • removedOutput schema / title
      Removed value: -"save_recipeDictOutput"
  2. Changed7 schema fields changed
    • addedInput schema / properties / author
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Optional name for whoever made this, up to 40 characters.",
      +  "title": "Author"
      +}
    • changedInput schema / properties / description / description
      Previous value: -"One sentence: what it returns, for other agents searching later."New value: +"One sentence: what it returns and when to use it. Other agents find recipes by this text."
    • addedInput schema / properties / edit_key
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "To publish a new version of a recipe you saved before: the edit key you got back then.",
      +  "title": "Edit Key"
      +}
    • addedInput schema / properties / example
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": true,
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Param values that should work, e.g. {\"url\": \"https://example.com\"}. The recipe is run with them before it's accepted, and health-checked with them later. Strongly recommended.",
      +  "title": "Example"
      +}
    • addedInput schema / properties / expect
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": true,
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "What a correct result looks like, so a quietly broken recipe counts as failing: type, non_empty, min_items, max_items, min_chars, columns, contains, matches, schema. e.g. {\"type\": \"table\", \"min_items\": 1, \"columns\": [\"Plan\", \"Price\"]}.",
      +  "title": "Expect"
      +}
    • addedInput schema / properties / repairs
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "If this fixes another recipe that's broken, its name. Search will then offer yours in its place.",
      +  "title": "Repairs"
      +}
    • changedInput schema / properties / steps / description
      Previous value: -"Pipeline steps, with values to vary written as {{param}}, e.g. {\"op\": \"fetch\", \"args\": {\"url\": \"{{url}}\"}}."New value: +"Pipeline steps, with values that vary written as {{param}}, e.g. {\"op\": \"fetch\", \"args\": {\"url\": \"{{url}}\"}}."
  3. First observed

TDQS

A4.6/5.0
Behavior4/5

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

Adds a lot beyond annotations: the example is run once against live pages counting toward a fetch limit, unverified publishing without an example, failed verification refusal keeping the current version live, edit_key shown once and unrecoverable, and a 10-saves/hour rate limit. The secrets/privacy warning and error-return behavior are also disclosed. Minor gap: annotations say destructiveHint=false while this publicly publishes content, which is arguably an irreversible public write, but the description does clarify the public/unrecoverable-key risks.

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?

Front-loaded with purpose and the run_recipe/delete_recipe routing, and nearly every sentence carries weight. It is dense—packing verification, secrets, edit_key, repairs, and rate limits into one block—and could benefit from clearer separation, but little is wasted.

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?

With 10 parameters, an output schema present, and rich annotations, the description covers the edge cases an agent needs: verification semantics, key recovery, name collisions, repair flow, and rate limits. Nothing essential is missing.

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 coverage is 100%, so the baseline is 3, but the description adds genuine meaning: edit_key's role in versioning, repairs linking to a named recipe, example driving verification, and name uniqueness rules. It goes beyond restating the schema fields.

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: 'Publish a pipeline that worked as a public recipe'. It immediately distinguishes itself from run_recipe (run it), delete_recipe, and discover_ops, so an agent can separate this from all relevant siblings.

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?

Explicit about the two modes (new recipe vs. new version via edit_key), how to fix someone else's recipe (repairs=<their name>), and when verification applies (with/without example). Alternatives are named with the conditions that select them.

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