Skip to main content
Glama

Export video

export.video
DestructiveIdempotent

Render the timeline to a file. Presets: web_1080p_h264 (MP4, fits 1920x1080), master_prores_422hq (MOV, sequence size), social_9x16_h264 (9:16 sequences, 1080x1920), web_1080p_av1 (MP4, AV1/Opus), gif (640 px, 15 fps), review_h264 (MP4, fits 854x854 with sound: small and quick, to watch a cut), audio_wav_48k, audio_mp3. overrides changes size, fps, bitrate or crf (video://catalog/presets). Long-running: returns a task, or {job_id} for job.get. The result links the file (a resource_link to video://jobs/{job_id}/output, which reads as the file, or its signed URL when large), has a signed download URL and a page_url that plays it in any browser (the link to give a person to watch or share), both working for 24 h (job.get gives fresh ones) . The server keeps the file 7 days: to keep it longer, save it from the url, and media.import it to use it again. qa.check measures a render (gaps, frames, loudness) before you export. sha256 and fingerprint tell two renders apart without downloading them (fingerprint matches media.get of the file once imported).

Input Schema

NameRequiredDescriptionDefault
rangeNoFrames, end exclusive
presetYesvideo://catalog/presets lists each with what it takes
filenameNoOutput file name without extension. Default: timeline name and id
overridesNoChange the preset: a size box (aspect kept), frame rate, bitrate or quality
overwriteNo
timeline_idYesTimeline handle; every edit returns a new one
idempotency_keyNo

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "bytes": {
      -        "type": "number"
      -      },
      -      "expires_at": {
      -        "type": "string"
      -      },
      -      "file": {
      -        "description": "Where the file was written in the exports folder (local mode)",
      -        "type": "string"
      -      },
      -      "frames": {
      -        "type": "number"
      -      },
      -      "height": {
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "mime_type": {
      -        "type": "string"
      -      },
      -      "page_url": {
      -        "description": "A page that plays the file in any browser, with no sign-in: the link to give a person to watch or share it. Works until expires_at",
      -        "type": "string"
      -      },
      -      "preset": {
      -        "description": "video://catalog/presets lists each with what it takes",
      -        "enum": [
      -          "web_1080p_h264",
      -          "master_prores_422hq",
      -          "social_9x16_h264",
      -          "web_1080p_av1",
      -          "gif",
      -          "review_h264",
      -          "audio_wav_48k",
      -          "audio_mp3"
      -        ],
      -        "type": "string"
      -      },
      -      "uri": {
      -        "description": "MCP resource for the output",
      -        "type": "string"
      -      },
      -      "url": {
      -        "description": "Signed download URL",
      -        "type": "string"
      -      },
      -      "width": {
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "url",
      -      "page_url",
      -      "expires_at",
      -      "uri",
      -      "bytes",
      -      "frames",
      -      "preset",
      -      "mime_type"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "hint": {
      -        "type": "string"
      -      },
      -      "job_id": {
      -        "description": "Job handle; the same value is the MCP task id",
      -        "pattern": "^j_[0-9a-z]{26}$",
      -        "type": "string"
      -      },
      -      "media_id": {
      -        "description": "The media it is making; usable in edits once processing",
      -        "pattern": "^m_[0-9a-z]{26}$",
      -        "type": "string"
      -      },
      -      "status": {
      -        "enum": [
      -          "working",
      -          "completed",
      -          "failed",
      -          "cancelled"
      -        ],
      -        "type": "string"
      -      },
      -      "status_uri": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "job_id",
      -      "status",
      -      "status_uri",
      -      "hint"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "bytes": {
      +        "type": "number"
      +      },
      +      "expires_at": {
      +        "type": "string"
      +      },
      +      "file": {
      +        "description": "Where the file was written in the exports folder (local mode)",
      +        "type": "string"
      +      },
      +      "fingerprint": {
      +        "description": "The fingerprint media.get gives the file once imported",
      +        "type": "string"
      +      },
      +      "frames": {
      +        "type": "number"
      +      },
      +      "height": {
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "mime_type": {
      +        "type": "string"
      +      },
      +      "page_url": {
      +        "description": "A page that plays the file in any browser, with no sign-in: the link to give a person to watch or share it. Works until expires_at",
      +        "type": "string"
      +      },
      +      "preset": {
      +        "description": "video://catalog/presets lists each with what it takes",
      +        "enum": [
      +          "web_1080p_h264",
      +          "master_prores_422hq",
      +          "social_9x16_h264",
      +          "web_1080p_av1",
      +          "gif",
      +          "review_h264",
      +          "audio_wav_48k",
      +          "audio_mp3"
      +        ],
      +        "type": "string"
      +      },
      +      "sha256": {
      +        "description": "SHA-256 of the whole file: equal only for equal bytes",
      +        "type": "string"
      +      },
      +      "uri": {
      +        "description": "MCP resource for the output",
      +        "type": "string"
      +      },
      +      "url": {
      +        "description": "Signed download URL",
      +        "type": "string"
      +      },
      +      "width": {
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "url",
      +      "page_url",
      +      "expires_at",
      +      "uri",
      +      "bytes",
      +      "frames",
      +      "preset",
      +      "mime_type"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "hint": {
      +        "type": "string"
      +      },
      +      "job_id": {
      +        "description": "Job handle; the same value is the MCP task id",
      +        "pattern": "^j_[0-9a-z]{26}$",
      +        "type": "string"
      +      },
      +      "media_id": {
      +        "description": "The media it is making; usable in edits once processing",
      +        "pattern": "^m_[0-9a-z]{26}$",
      +        "type": "string"
      +      },
      +      "status": {
      +        "enum": [
      +          "working",
      +          "completed",
      +          "failed",
      +          "cancelled"
      +        ],
      +        "type": "string"
      +      },
      +      "status_uri": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "job_id",
      +      "status",
      +      "status_uri",
      +      "hint"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. First observed

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses that the call is long-running and returns a task or {job_id}, that download/page URLs expire in 24 h, and that the server retains the file only 7 days. It also describes the return payload (resource_link, signed URL, page_url, sha256, fingerprint), which the destructive/idempotent hints alone would never convey.

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 the core action and preset list, then lifecycle details. It is dense and a few sentences run long (the URL/retention sentence is overloaded), but nearly every clause carries operational information an agent needs.

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 7-parameter, nested-object, long-running export tool, the description covers presets, overrides, async behavior, output shape, URL expiry and retention. Even with an output schema present, the extra lifecycle context makes the definition self-sufficient.

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?

Adds meaning beyond the 71%-covered schema: each preset is described with container, resolution and use case (e.g. review_h264 as a small quick cut to watch), overrides are explained as a size box/fps/bitrate/quality change, and filename's default is stated. The idempotency_key and overwrite parameters are left unexplained, keeping it from a 5.

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?

Opens with a specific verb+resource: 'Render the timeline to a file.' That is unambiguous about what the tool produces. It does not, however, distinguish itself from the sibling export.timeline, which an agent would reasonably confuse with this one.

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?

Gives real routing guidance: run qa.check to measure a render before exporting, use job.get for fresh URLs, and media.import to reuse a file after the 7-day window. It stops short of stating when to prefer export.timeline or render.frames instead, so no explicit exclusions.

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.