Skip to main content
Glama

Update Reusable Automation

update_automation
Destructive

Publish the reviewed flow identified by brief_id, revision and recipe_key as a new version of an existing reusable Automation. Requires its current definition hash. Accepts no operation definitions. Existing shoot snapshots remain unchanged. No media generation or charge.

Input Schema

NameRequiredDescriptionDefault
board_idYesThe open Shoot Board's board_id, from Open Shoot Board or your context.
brief_idYes
recipe_keyYesThe flow's key in the brief's recipes list.
workflow_idYesReusable Automation to version using the reviewed brief flow named here.
expected_brief_revisionYes
expected_definition_hashYesCurrent library hash; stale edits are refused.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • removedInput schema / $defs
      Removed value: -{
      -  "RecipeSpec": {
      -    "additionalProperties": false,
      -    "description": "The recipe a demand asks for: its shots and their steps.",
      -    "properties": {
      -      "asks_for": {
      -        "default": null,
      -        "description": "What each look gives it besides its clothing: model (a Model wears the look), location, references (reference photos). Omit: references, and model and location when the board holds them.",
      -        "items": {
      -          "enum": [
      -            "model",
      -            "location",
      -            "references"
      -          ],
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "aspect_ratio": {
      -        "default": null,
      -        "description": "Photo aspect ratio, e.g. \"3:4\".",
      -        "pattern": "^\\d{1,2}(\\.\\d{1,2})?:\\d{1,2}(\\.\\d{1,2})?$",
      -        "type": "string"
      -      },
      -      "image_model": {
      -        "default": null,
      -        "description": "A listed image model's slug, only when the user named it.",
      -        "type": "string"
      -      },
      -      "name": {
      -        "description": "What the automation is for, 1-3 words, e.g. 'PDP', 'Lookbook', 'Campaign': Uwear names it with its views and steps ('PDP · front, side, upper').",
      -        "maxLength": 80,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "resolution": {
      -        "default": null,
      -        "description": "Photo resolution, e.g. \"2K\".",
      -        "pattern": "^\\d{1,2}(\\.\\d)?K$",
      -        "type": "string"
      -      },
      -      "shots": {
      -        "description": "One shot per view, in order.",
      -        "items": {
      -          "$ref": "#/$defs/ShotSpec"
      -        },
      -        "maxItems": 8,
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "video_model": {
      -        "default": null,
      -        "description": "A listed video model's slug, only when the user named it.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "name",
      -      "shots"
      -    ],
      -    "type": "object"
      -  },
      -  "ShotSpec": {
      -    "additionalProperties": false,
      -    "description": "One photo of each look, from one camera.",
      -    "properties": {
      -      "camera": {
      -        "description": "The view, from the camera list.",
      -        "enum": [
      -          "auto",
      -          "full_body_front",
      -          "full_body_back",
      -          "full_body_side",
      -          "upper_body_front",
      -          "upper_body_back",
      -          "upper_body_side",
      -          "lower_body_front",
      -          "lower_body_back",
      -          "lower_body_side",
      -          "clothing_detail_front",
      -          "clothing_detail_back",
      -          "clothing_detail_side"
      -        ],
      -        "type": "string"
      -      },
      -      "then": {
      -        "description": "Steps on this shot's photo, in order (a video ends the chain).",
      -        "items": {
      -          "$ref": "#/$defs/StepSpec"
      -        },
      -        "maxItems": 4,
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "camera"
      -    ],
      -    "type": "object"
      -  },
      -  "StepSpec": {
      -    "additionalProperties": false,
      -    "description": "One step on a shot's photo (or on the step before it).",
      -    "properties": {
      -      "camera_edit_id": {
      -        "default": null,
      -        "description": "camera_edit only: the view, one of full_body_front, full_body_back, full_body_side, upper_body_front, upper_body_back, upper_body_side, lower_body_front, lower_body_back, lower_body_side, clothing_detail_front, clothing_detail_back, clothing_detail_side.",
      -        "type": "string"
      -      },
      -      "factor": {
      -        "default": null,
      -        "description": "upscale only: the upscale factor, e.g. 2.",
      -        "exclusiveMinimum": 0,
      -        "type": "number"
      -      },
      -      "kind": {
      -        "description": "camera_edit: the same photo from another view (camera_edit_id); edit: a written change (prompt); upscale: a larger photo; video: a clip opening on the photo (prompt: the motion); remove_background: the subject on transparency.",
      -        "enum": [
      -          "camera_edit",
      -          "edit",
      -          "upscale",
      -          "video",
      -          "remove_background"
      -        ],
      -        "type": "string"
      -      },
      -      "length_seconds": {
      -        "default": null,
      -        "description": "video only: the video length in seconds.",
      -        "minimum": 1,
      -        "type": "integer"
      -      },
      -      "prompt": {
      -        "default": null,
      -        "description": "edit: the change; video: the motion (optional).",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "sound": {
      -        "default": null,
      -        "description": "video only: whether the video has sound.",
      -        "type": "boolean"
      -      }
      -    },
      -    "required": [
      -      "kind"
      -    ],
      -    "type": "object"
      -  }
      -}
    • addedInput schema / properties / brief_id
      Added value: +{
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / expected_brief_revision
      Added value: +{
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • changedInput schema / properties / expected_definition_hash / description
      Previous value: -"Current saved definition hash from get_automation or list_automations; refuses stale edits."New value: +"Current library hash; stale edits are refused."
    • removedInput schema / properties / flow
      Removed value: -{
      -  "$ref": "#/$defs/RecipeSpec",
      -  "description": "Complete replacement photoshoot flow. Publishes a new library version; existing shoot snapshots and past runs stay unchanged."
      -}
    • addedInput schema / properties / recipe_key
      Added value: +{
      +  "description": "The flow's key in the brief's recipes list.",
      +  "pattern": "^recipe_\\d{2,3}$",
      +  "type": "string"
      +}
    • changedInput schema / properties / workflow_id / description
      Previous value: -"The reusable library Automation to update, not a shoot's private flow."New value: +"Reusable Automation to version using the reviewed brief flow named here."
    • changedInput schema / required
      Previous value: -[
      -  "workflow_id",
      -  "expected_definition_hash",
      -  "flow",
      -  "board_id"
      -]New value: +[
      +  "brief_id",
      +  "expected_brief_revision",
      +  "recipe_key",
      +  "workflow_id",
      +  "expected_definition_hash",
      +  "board_id"
      +]
  2. Added

TDQS

A4/5.0
Behavior4/5

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

The annotations already flag destructiveHint=true and idempotentHint=false, and the description adds valuable context beyond them: stale edits are refused via the hash, existing shoot snapshots remain unchanged (scoping the blast radius), and no media generation or charge occurs. It doesn't state what happens to the previous version beyond 'new version', but the added scope clarification is meaningful.

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

Conciseness5/5

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

Five short sentences, front-loaded with the action and identity, then requirements, then scope of side effects. Every sentence carries information about behavior or constraints.

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?

A mutation tool with rich annotations, no output schema, and 67% param coverage. The description covers the action, the identity keys, the guard (hash), the exclusions, and the absence of destructive side effects on snapshots or billing — enough for an agent to invoke it correctly.

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 67%; brief_id and expected_brief_revision have no schema descriptions, and the description compensates by tying brief_id, revision and recipe_key together as the identifying tuple and by explaining that expected_definition_hash must be the current hash or the edit is refused. It doesn't explain board_id or workflow_id semantics, but overall adds real meaning over the schema.

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 description gives a specific verb and resource: 'Publish the reviewed flow ... as a new version of an existing reusable Automation', which distinguishes it from sibling save_automation that creates new ones. It names the identifying keys (brief_id, revision, recipe_key) but omits workflow_id, which is the actual Automation being versioned, leaving a small mismatch between stated identity and the required parameters.

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

Usage Guidelines3/5

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

Mentions prerequisites ('Requires its current definition hash') and exclusions ('Accepts no operation definitions'), which implies usage. But it never names an alternative (save_automation, mcp_recipe_save_draft) or states the condition that selects this tool over those siblings.

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