Skip to main content
Glama

Update project

update_project
Idempotent

Rename a project or update only the saved settings you specify, such as focus, instructions, clip length, captions, framing, and pauses; omitted fields keep their values.

Instructions

Rename a project and/or change its saved settings (focus, instructions, clip length, maxClips, caption style, framing, pauses, refineEntities, refineDisfluency, disfluencyLlm, refineScenes); only the fields you pass change. Does not re-pick clips or re-render: reanalyze_project picks again with the new selection settings, refine_project re-runs refine steps, rerender_clips applies style changes. Returns { changed, needsReanalyze, needsRefine, needsRerender, hint }.

Input Schema

NameRequiredDescriptionDefault
idYesProject id (from list_projects, search_clips or create_project)
clearNoOptional settings to reset to their default, e.g. maxClips (back to automatic) or focus
titleNoNew title
metadataNoReplace the project's metadata (the whole map; {} clears it)
settingsNoSettings to change; keys left out keep their value. Intro/outro go through set_project_bumpers

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changedv0.33.0
    • addedInput schema / properties / settings / properties / bumperTransition
      Added value: +{
      +  "description": "How the intro/outro joins the clip: cut (default), dip (fade through black, no change in length) or crossfade (the two overlap, so the video is shorter by the transition)",
      +  "enum": [
      +    "cut",
      +    "dip",
      +    "crossfade"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / settings / properties / bumperTransitionSec
      Added value: +{
      +  "description": "Length of the intro/outro transition, seconds (0.2-2, default 0.5); ignored for cut",
      +  "maximum": 2,
      +  "minimum": 0.2,
      +  "type": "number"
      +}
    • addedInput schema / properties / settings / properties / fadeIn
      Added value: +{
      +  "description": "Fade in from black (picture and sound) at the start of the video, seconds (0-2, default 0 = off)",
      +  "maximum": 2,
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / settings / properties / fadeOut
      Added value: +{
      +  "description": "Fade out to black (picture and sound) at the end of the video, seconds (0-2, default 0 = off)",
      +  "maximum": 2,
      +  "minimum": 0,
      +  "type": "number"
      +}
  2. Changed1 schema field changedv0.31.0
    • addedInput schema / properties / metadata
      Added value: +{
      +  "additionalProperties": {
      +    "maxLength": 500,
      +    "type": "string"
      +  },
      +  "description": "Replace the project's metadata (the whole map; {} clears it)",
      +  "propertyNames": {
      +    "pattern": "^[A-Za-z0-9_.-]{1,40}$",
      +    "type": "string"
      +  },
      +  "type": "object"
      +}
  3. Changed1 schema field changedv0.28.1
    • addedInput schema / properties / settings / properties / captionSeam
      Added value: +{
      +  "description": "In split and stack sections, put captions on the line between the two panes instead of at captionY (default true)",
      +  "type": "boolean"
      +}
  4. Changed6 schema fields changedv0.23.0
    • changedInput schema / properties / clear / items / enum
      Previous value: -[
      -  "maxClips",
      -  "focus",
      -  "instructions",
      -  "language",
      -  "vocabulary"
      -]New value: +[
      +  "maxClips",
      +  "focus",
      +  "instructions",
      +  "language",
      +  "vocabulary",
      +  "reframeAdjust"
      +]
    • changedInput schema / properties / clear / maxItems
      Previous value: -5New value: +6
    • addedInput schema / properties / settings / properties / layerTemplateId
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 100,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Layer template id (list_layer_templates) applied to each new clip of this project; null = none. Existing clips: apply_layer_template"
      +}
    • changedInput schema / properties / settings / properties / refineEntities / description
      Previous value: -"Fix misheard names after transcription (LLM). Off by default; on runs that refine step."New value: +"Fix misheard names after transcription (LLM). On by default; off skips that refine step."
    • changedInput schema / properties / settings / properties / refineScenes / description
      Previous value: -"Detect scene cuts and on-screen text. Off by default; on runs that refine step."New value: +"Scan the video for on-screen text (burned-in captions, watermarks, slides). On by default; off skips that refine step. Shot cuts are always detected."
    • addedInput schema / properties / settings / properties / reframeAdjust
      Added value: +{
      +  "anyOf": [
      +    {
      +      "properties": {
      +        "contentCrop": {
      +          "description": "Stack only: the part of the frame shown on top instead of the whole frame or the detected content region",
      +          "properties": {
      +            "x1": {
      +              "description": "Left edge, fraction of the source width",
      +              "maximum": 1,
      +              "minimum": 0,
      +              "type": "number"
      +            },
      +            "x2": {
      +              "description": "Right edge, fraction of the source width",
      +              "maximum": 1,
      +              "minimum": 0,
      +              "type": "number"
      +            },
      +            "y1": {
      +              "description": "Top edge, fraction of the source height",
      +              "maximum": 1,
      +              "minimum": 0,
      +              "type": "number"
      +            },
      +            "y2": {
      +              "description": "Bottom edge, fraction of the source height",
      +              "maximum": 1,
      +              "minimum": 0,
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "x1",
      +            "y1",
      +            "x2",
      +            "y2"
      +          ],
      +          "type": "object"
      +        },
      +        "crop": {
      +          "description": "Show exactly this part of the source in the (top / only) pane, as fractions of the source size; replaces the automatic crop, the offset and the subject. A shape unlike the pane's is fitted over a blurred copy",
      +          "properties": {
      +            "x1": {
      +              "description": "Left edge, fraction of the source width",
      +              "maximum": 1,
      +              "minimum": 0,
      +              "type": "number"
      +            },
      +            "x2": {
      +              "description": "Right edge, fraction of the source width",
      +              "maximum": 1,
      +              "minimum": 0,
      +              "type": "number"
      +            },
      +            "y1": {
      +              "description": "Top edge, fraction of the source height",
      +              "maximum": 1,
      +              "minimum": 0,
      +              "type": "number"
      +            },
      +            "y2": {
      +              "description": "Bottom edge, fraction of the source height",
      +              "maximum": 1,
      +              "minimum": 0,
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "x1",
      +            "y1",
      +            "x2",
      +            "y2"
      +          ],
      +          "type": "object"
      +        },
      +        "crop2": {
      +          "description": "Split only: a fixed crop for the bottom pane",
      +          "properties": {
      +            "x1": {
      +              "description": "Left edge, fraction of the source width",
      +              "maximum": 1,
      +              "minimum": 0,
      +              "type": "number"
      +            },
      +            "x2": {
      +              "description": "Right edge, fraction of the source width",
      +              "maximum": 1,
      +              "minimum": 0,
      +              "type": "number"
      +            },
      +            "y1": {
      +              "description": "Top edge, fraction of the source height",
      +              "maximum": 1,
      +              "minimum": 0,
      +              "type": "number"
      +            },
      +            "y2": {
      +              "description": "Bottom edge, fraction of the source height",
      +              "maximum": 1,
      +              "minimum": 0,
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "x1",
      +            "y1",
      +            "x2",
      +            "y2"
      +          ],
      +          "type": "object"
      +        },
      +        "offsetX": {
      +          "description": "Shift the (top) crop sideways by this fraction of the source width (-0.5 to 0.5), relative to the face it follows",
      +          "maximum": 0.5,
      +          "minimum": -0.5,
      +          "type": "number"
      +        },
      +        "offsetX2": {
      +          "description": "Split only: shift the bottom crop sideways (-0.5 to 0.5)",
      +          "maximum": 0.5,
      +          "minimum": -0.5,
      +          "type": "number"
      +        },
      +        "offsetY": {
      +          "description": "Shift the (top) crop up or down by this fraction of the source height; only matters where the crop is shorter than the frame (split, stack)",
      +          "maximum": 0.5,
      +          "minimum": -0.5,
      +          "type": "number"
      +        },
      +        "offsetY2": {
      +          "description": "Split only: shift the bottom crop up or down (-0.5 to 0.5)",
      +          "maximum": 0.5,
      +          "minimum": -0.5,
      +          "type": "number"
      +        },
      +        "subjectX": {
      +          "description": "Follow the person at this x (0-1 of the source width) in the top/only pane; the offset still applies on top",
      +          "maximum": 1,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "subjectX2": {
      +          "description": "Split only: follow the person at this x in the bottom pane",
      +          "maximum": 1,
      +          "minimum": 0,
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Applied with reframe to clips without their own sections: offsetX/Y, offsetX2/Y2, subjectX/X2, crop, crop2, contentCrop as on a clip's section; null = none. apply_framing sets it from one clip"
      +}
  5. Changed2 schema fields changedv0.19.1
    • changedInput schema / properties / settings / properties / introAssetId / description
      Previous value: -"Library asset id of the intro (list_bumpers); null = none"New value: +"Library asset id of the intro (search_assets with source library); null = none"
    • changedInput schema / properties / settings / properties / outroAssetId / description
      Previous value: -"Library asset id of the outro (list_bumpers); null = none"New value: +"Library asset id of the outro (search_assets with source library); null = none"
  6. Changed4 schema fields changedv0.17.0
    • addedInput schema / properties / settings / properties / disfluencyLlm
      Added value: +{
      +  "description": "Model pass on top of rule-based disfluency detection. Off by default (rules only when disfluency is on).",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / settings / properties / refineDisfluency
      Added value: +{
      +  "description": "Find fillers, repetitions and false starts. Off by default; on runs that refine step.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / settings / properties / refineEntities
      Added value: +{
      +  "description": "Fix misheard names after transcription (LLM). Off by default; on runs that refine step.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / settings / properties / refineScenes
      Added value: +{
      +  "description": "Detect scene cuts and on-screen text. Off by default; on runs that refine step.",
      +  "type": "boolean"
      +}
  7. Addedv0.7.0

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only supply idempotentHint=true, so the description carries most of the burden and does so well: it discloses partial-update semantics ('only the fields you pass change'), the crucial deferred-effect behavior (edits are saved but do not take effect until a reanalyze/refine/rerender), and even the shape of the response envelope. It also flags that intro/outro must go through set_project_bumpers in the schema, further preventing a wrong call.

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?

The first clause is front-loaded with the verb and scope, and the two following sentences about effects and return shape are high-value. The long parenthetical enumeration of a dozen setting names is largely redundant with the schema's settings object and could be trimmed without losing information.

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?

For a five-parameter tool with a deeply nested settings object and no output schema, the description supplies exactly the missing pieces: the deferred-effect model, the sibling routing, and a textual rendering of the return object. Nothing an agent needs in order to call it correctly or interpret the result is absent.

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 100%, so the baseline is 3 and the schema already documents every field, including the reset semantics of 'clear' and the metadata whole-map replacement. The description's settings list and 'only the fields you pass change' largely restate what the schema says for 'settings' ("keys left out keep their value"), adding little new parameter meaning.

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 ('Rename a project and/or change its saved settings') and enumerates the settings families it touches (focus, instructions, clip length, maxClips, caption style, framing, pauses, refine flags). An agent can distinguish it from sibling mutators like set_project_bumpers or update_project_style without opening the 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 states what the tool does NOT do ('Does not re-pick clips or re-render') and routes to the exact alternatives with the condition that selects each: reanalyze_project for re-picking with new selection settings, refine_project for refine steps, rerender_clips for style application. This is a textbook when/when-not/alternative structure.

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