Skip to main content
Glama

Request a video change

revise_video
DestructiveIdempotent

Change a finished video against its saved base_version. A change asked for in words costs 1 credit (dry_run: true answers the price and sends nothing); exact edits with the direct edit tools and fix_captions are free. Name output_id for one hook/Short/format; attachment changes require one output when the video has several. Attach up to four still images with explicit intent: reference_only studies the image without placing it, use_in_video must place it. Supply each as a genuine ChatGPT file descriptor, an import_asset asset_staging_key, or an owned imported asset_id. PNG/JPEG/WebP may be placed; GIF references inspect the first frame only. Prepared owned video sources may be placed by ID; motion/audio analysis of video references needs a separate preparation path. Unsupported requests return a reason and preserve the saved project. Exact supported changes use the direct edit tools or fix_captions. On the legacy rendered revision path only (a video without a saved native project), replace retained main scratch narration when check_video.narration.can_change is true: pass explicit voice plus a voice-only change such as 'Change narrator to Brian. Keep the script and edit.' using the selected catalog name. This preserves script/edit/assets; send other edits separately. Uploaded speech, silent motion and mixed voice/visual instructions are refused on that replacement path. To ADD narration to an eligible silent main motion video on the legacy path, keep voice omitted and begin change with 'Narrator: liam Narration: '. Use a catalog narrator name; this supports one main hook, aligns rebuilt visuals to the recorded narration word clock, and refuses mismatched, clipped or missing voiceover. The saved native project path currently returns typed project_update_unsupported for voice replacement or narration addition because its separate narration preparation path is unavailable. Do not promise native narration support or retry by forcing a legacy rebuild. Preserve operation_id, base/output, roles and arguments on retries; a refreshed file download URL for the same host file may resume its upload. Use a new operation_id for a deliberate new change and check the resulting version. No movie export is started by a native project update. A change by typing runs in the background: this answers at once with a job_id, and check_video with that job_id shows the steps as they happen and then the editor's reply and what it could not do.

Input Schema

NameRequiredDescriptionDefault
voiceNoThe narrator for a video made from words: matilda, sarah, jessica, alice, liam, chris, brian, george, roger, laura, charlie, river, will, eric, bella, daniel, lily, bill, adam, callum, harry (sarah: calm, reassuring, health and money; alice: a clear British educator; brian: deep documentary; liam: energetic ads). Leave out to let Clypmint pick one that fits the words. "Voice: <name>" in instructions does the same.
changeYes
dry_runNotrue: say what the change uses and send nothing.
video_idYes
output_idNoChange only this output (a hook, a Short or a format) from check_video.
attachmentsNo
base_versionNo
operation_idNoA stable ID for this authorized request. Preserve it on retries. Use a new ID only for a deliberate new request.

Output Schema

NameRequiredDescriptionDefault
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / attachments
      Added value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "asset_id": {
      +        "pattern": "^src_[A-Za-z0-9][A-Za-z0-9_-]{7,95}$",
      +        "type": "string"
      +      },
      +      "asset_staging_key": {
      +        "pattern": "^stg_[A-Za-z0-9][A-Za-z0-9_-]{7,95}$",
      +        "type": "string"
      +      },
      +      "file": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "download_url": {
      +            "format": "uri",
      +            "type": "string"
      +          },
      +          "file_id": {
      +            "maxLength": 200,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "file_name": {
      +            "maxLength": 255,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "mime_type": {
      +            "enum": [
      +              "image/png",
      +              "image/jpeg",
      +              "image/webp",
      +              "image/gif"
      +            ],
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "download_url",
      +          "file_id",
      +          "mime_type"
      +        ],
      +        "type": "object"
      +      },
      +      "intent": {
      +        "enum": [
      +          "reference_only",
      +          "use_in_video"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "intent"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 4,
      +  "type": "array"
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / voice / description
      Previous value: -"The narrator for a video made from words: matilda, sarah, jessica, alice, liam, chris, brian, george, roger, laura, charlie, river, will, eric, bella, daniel, lily, bill, adam, callum, harry. Leave out to let Clypmint pick one that fits."New value: +"The narrator for a video made from words: matilda, sarah, jessica, alice, liam, chris, brian, george, roger, laura, charlie, river, will, eric, bella, daniel, lily, bill, adam, callum, harry (sarah: calm, reassuring, health and money; alice: a clear British educator; brian: deep documentary; liam: energetic ads). Leave out to let Clypmint pick one that fits the words. \"Voice: <name>\" in instructions does the same."
  3. Changed1 schema field changed
    • changedInput schema / properties / voice / $schema
      Previous value: -"https://json-schema.org/draft/2020-12/schema"New value: +"http://json-schema.org/draft-07/schema#"
  4. Changed1 schema field changed
    • addedInput schema / properties / voice
      Added value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "description": "The narrator for a video made from words: matilda, sarah, jessica, alice, liam, chris, brian, george, roger, laura, charlie, river, will, eric, bella, daniel, lily, bill, adam, callum, harry. Leave out to let Clypmint pick one that fits.",
      +  "enum": [
      +    "matilda",
      +    "sarah",
      +    "jessica",
      +    "alice",
      +    "liam",
      +    "chris",
      +    "brian",
      +    "george",
      +    "roger",
      +    "laura",
      +    "charlie",
      +    "river",
      +    "will",
      +    "eric",
      +    "bella",
      +    "daniel",
      +    "lily",
      +    "bill",
      +    "adam",
      +    "callum",
      +    "harry"
      +  ],
      +  "type": "string"
      +}
  5. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "description": "Clypmint revise_video result. Error results carry error; successful requests expose the identifiers and state available for the next step. Signed media stays in private metadata.",
      +  "properties": {
      +    "available": {
      +      "type": "boolean"
      +    },
      +    "code": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "cost": {
      +      "additionalProperties": true,
      +      "type": "object"
      +    },
      +    "dry_run": {
      +      "type": "boolean"
      +    },
      +    "error": {
      +      "type": "string"
      +    },
      +    "import_id": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "message": {
      +      "type": "string"
      +    },
      +    "output_id": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "plan_id": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "state": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "status": {
      +      "type": [
      +        "string",
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "studio_url": {
      +      "format": "uri",
      +      "type": "string"
      +    },
      +    "style_id": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "version_id": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "video_id": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": "object"
      +}
  6. Changed2 schema fields changed
    • addedInput schema / properties / dry_run
      Added value: +{
      +  "description": "true: say what the change uses and send nothing.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / output_id
      Added value: +{
      +  "description": "Change only this output (a hook, a Short or a format) from check_video.",
      +  "maxLength": 200,
      +  "minLength": 1,
      +  "type": "string"
      +}
  7. Changed2 schema fields changed
    • addedInput schema / properties / base_version
      Added value: +{
      +  "maxLength": 200,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / operation_id
      Added value: +{
      +  "description": "A stable ID for this authorized request. Preserve it on retries. Use a new ID only for a deliberate new request.",
      +  "pattern": "^[a-zA-Z0-9_.:-]{1,100}$",
      +  "type": "string"
      +}
  8. First observed

TDQS

A4.1/5.0
Behavior5/5

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

Goes far beyond the annotations (destructiveHint true, idempotentHint true, readOnlyHint false): discloses the 1-credit cost model, that unsupported requests return a reason and preserve the saved project, that the call answers immediately with a job_id and runs in the background, that no movie export is started, and that the native project path currently returns project_update_unsupported for narration. It also explains retry semantics (preserve operation_id, base/output, roles, arguments; refreshed download URL may resume upload).

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 purpose and cost are correctly front-loaded, but the body is a dense run-on block that mixes normal-path behavior, legacy rendered revision rules, the ADD-narration template, and native-path limitations into one paragraph. The low-frequency legacy-path detail is long enough that an agent skimming for 'should I call this?' must wade through it, and some statements are restated ('Exact supported changes use the direct edit tools or fix_captions' appears twice in substance).

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?

For an 8-parameter, high-stakes mutation tool, the description covers pricing, safety of failures, async job flow, retry identity, attachment constraints, and the two revision paths. An output schema exists so return shape needn't be explained, and it doesn't over-explain it. The remaining gap is that the primary word-based change format (what a good `change` string looks like outside the legacy narration case) is only implied by examples in the edge paths.

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?

With only 50% schema description coverage, the description carries real weight: it defines output_id scope (one hook/Short/format), the attachment limit of four and the meaning of reference_only vs use_in_video, the three accepted attachment forms (file descriptor, asset_staging_key, asset_id), which image types may be placed, that GIF references inspect only the first frame, and how voice interacts with the legacy narration path. base_version and operation_id are explained but somewhat implicitly; the semantics of 'change' text in the normal (non-legacy) path is not specified.

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?

States a specific verb and resource: change a finished video against its saved base_version, with credit cost and dry_run preview immediately up front. It distinguishes itself from exact-edit paths by saying word-based changes cost a credit while 'the direct edit tools and fix_captions are free', but it never names which concrete sibling tool handles which exact edit, so the agent must still infer the routing.

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?

Explicit conditional guidance: use dry_run to price without sending, use direct edit tools or fix_captions for exact changes, use output_id when the video has several outputs, use a new operation_id only for a deliberate new change, and check_video with job_id to follow progress. The 'when not to use' story is present but references an unnamed category ('the direct edit tools') rather than named siblings, which weakens routing.

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