Skip to main content
Glama

Burn captions into a clip

add_captions

Transcribe a clip's speech and burn social captions into it, as a new video in the library. Costs about five credits and takes a few minutes; get_generation waits for the result. Say nothing beyond source and you get the default look. preset is one of pop, clean, karaoke, boxed, word — "word" puts ONE WORD on screen at a time, large, which is the look short-form feeds use. style is the whole caption, and it overrides whichever preset it is given with: type and weight, size as a fraction of the frame's short edge, casing, fill and highlight colours, an outline or a plate behind the words, where they sit, and grouping, which decides how many words share a cue. A finished run carries its caption back on get_generation's caption_style, so 'the same captions on this other clip' is that value handed straight back here.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "source": "<source>"
    },
    "name": "add_captions"
  }
}

Input Schema

NameRequiredDescriptionDefault
styleNo
presetNo
sourceYes

Output Schema

NameRequiredDescriptionDefault
messageYes
generationYesOne image, clip, voice-over or piece of music.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed20 schema fields changed
    • addedOutput schema / properties / generation / description
      Added value: +"One image, clip, voice-over or piece of music."
    • addedOutput schema / properties / generation / properties / app_url / description
      Added value: +"Opens it in the app."
    • addedOutput schema / properties / generation / properties / aspect_ratio / description
      Added value: +"Null for audio."
    • addedOutput schema / properties / generation / properties / created_at / format
      Added value: +"date-time"
    • addedOutput schema / properties / generation / properties / credits
      Added value: +{
      +  "description": "Credits charged. Zero when your own provider key or the free allowance paid.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • removedOutput schema / properties / generation / properties / credits_cost
      Removed value: -{
      -  "type": [
      -    "number",
      -    "null"
      -  ]
      -}
    • addedOutput schema / properties / generation / properties / error / description
      Added value: +"Why it failed. Null otherwise."
    • removedOutput schema / properties / generation / properties / generation_id
      Removed value: -{
      -  "format": "uuid",
      -  "type": "string"
      -}
    • addedOutput schema / properties / generation / properties / id
      Added value: +{
      +  "format": "uuid",
      +  "type": "string"
      +}
    • removedOutput schema / properties / generation / properties / kind
      Removed value: -{
      -  "enum": [
      -    "image",
      -    "video",
      -    "audio",
      -    "tool"
      -  ],
      -  "type": "string"
      -}
    • addedOutput schema / properties / generation / properties / model / description
      Added value: +"The model id it was made with (`GET /v1/models`)."
    • addedOutput schema / properties / generation / properties / object
      Added value: +{
      +  "const": "generation",
      +  "type": "string"
      +}
    • addedOutput schema / properties / generation / properties / output_url / description
      Added value: +"The finished file, once `ready`. A signed link that works for about an hour; read the generation again for a fresh one."
    • addedOutput schema / properties / generation / properties / paid_by / description
      Added value: +"Who paid: \"credits\", \"house\" (the free allowance), \"server\" (a server that charges nothing), or the vendor of your own key (\"replicate\", \"fal\", …)."
    • addedOutput schema / properties / generation / properties / ready_in_seconds / description
      Added value: +"Roughly how long an unfinished generation has left; 0 means past its usual time."
    • addedOutput schema / properties / generation / properties / recipe_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/properties/generation/properties/id"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The recipe it was made with, if any."
      +}
    • addedOutput schema / properties / generation / properties / status / description
      Added value: +"`ready` and `failed` are final."
    • addedOutput schema / properties / generation / properties / thumbnail_url
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/properties/generation/properties/output_url/anyOf/0"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "A small still of the result, for a grid. Null for audio and while it works."
      +}
    • addedOutput schema / properties / generation / properties / type
      Added value: +{
      +  "description": "What was made. New values may be added; treat an unknown one as opaque.",
      +  "enum": [
      +    "image",
      +    "clip",
      +    "voiceover",
      +    "music",
      +    "tool"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / generation / required
      Previous value: -[
      -  "generation_id",
      -  "kind",
      -  "status",
      -  "model",
      -  "prompt",
      -  "aspect_ratio",
      -  "refined_from",
      -  "caption_style",
      -  "output_url",
      -  "credits_cost",
      -  "paid_by",
      -  "error",
      -  "vendor_phase",
      -  "stalled",
      -  "ready_in_seconds",
      -  "created_at",
      -  "app_url"
      -]New value: +[
      +  "object",
      +  "id",
      +  "type",
      +  "status",
      +  "model",
      +  "prompt",
      +  "aspect_ratio",
      +  "output_url",
      +  "thumbnail_url",
      +  "credits",
      +  "paid_by",
      +  "error",
      +  "ready_in_seconds",
      +  "recipe_id",
      +  "created_at",
      +  "app_url",
      +  "refined_from",
      +  "caption_style",
      +  "vendor_phase",
      +  "stalled"
      +]
  2. Changed2 schema fields changed
    • addedOutput schema / properties / generation / properties / paid_by
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / generation / required
      Previous value: -[
      -  "generation_id",
      -  "kind",
      -  "status",
      -  "model",
      -  "prompt",
      -  "aspect_ratio",
      -  "refined_from",
      -  "caption_style",
      -  "output_url",
      -  "credits_cost",
      -  "error",
      -  "vendor_phase",
      -  "stalled",
      -  "ready_in_seconds",
      -  "created_at",
      -  "app_url"
      -]New value: +[
      +  "generation_id",
      +  "kind",
      +  "status",
      +  "model",
      +  "prompt",
      +  "aspect_ratio",
      +  "refined_from",
      +  "caption_style",
      +  "output_url",
      +  "credits_cost",
      +  "paid_by",
      +  "error",
      +  "vendor_phase",
      +  "stalled",
      +  "ready_in_seconds",
      +  "created_at",
      +  "app_url"
      +]
  3. Changed2 schema fields changed
    • addedOutput schema / properties / generation / properties / ready_in_seconds
      Added value: +{
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / generation / required
      Previous value: -[
      -  "generation_id",
      -  "kind",
      -  "status",
      -  "model",
      -  "prompt",
      -  "aspect_ratio",
      -  "refined_from",
      -  "caption_style",
      -  "output_url",
      -  "credits_cost",
      -  "error",
      -  "vendor_phase",
      -  "stalled",
      -  "created_at",
      -  "app_url"
      -]New value: +[
      +  "generation_id",
      +  "kind",
      +  "status",
      +  "model",
      +  "prompt",
      +  "aspect_ratio",
      +  "refined_from",
      +  "caption_style",
      +  "output_url",
      +  "credits_cost",
      +  "error",
      +  "vendor_phase",
      +  "stalled",
      +  "ready_in_seconds",
      +  "created_at",
      +  "app_url"
      +]
  4. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Adds real behavior beyond the annotations: roughly five credits, a few minutes of runtime, the result arriving asynchronously and how to poll it, and that output is a new library video. It does not clarify what happens to an existing generation or how failures are surfaced.

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-loads purpose, cost and async behavior, then moves to defaults, presets, style override and the round-trip idiom. Dense but every sentence carries information; the closing sentence is slightly convoluted but earns its place by naming the reuse workflow.

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 a three-parameter tool with a deeply nested style object at 0% schema coverage and an output schema covering the return value, the description supplies enough orientation to pick a preset or override the style and to retrieve the result. Individual style fields and the source union remain undocumented but are discoverable in the schema.

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 description coverage is 0%, so the description carries the burden and does so for the two hard parameters: it enumerates the five preset looks with the meaning of 'word', and describes `style` as an override that covers type, size, casing, colours, border, placement and `grouping`. It does not explain `source`'s upload-vs-generation variants or field-level units, so some gaps remain.

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 compound verb and resource ('transcribe a clip's speech and burn social captions into it') plus the deliverable ('as a new video in the library'), which separates it from write_caption and transcribe_media without requiring 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 Guidelines4/5

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

Gives concrete usage conditions: omit everything but `source` for the default look, and use `get_generation` to wait for the result. It also explains the reuse pattern ('that value handed straight back here'). It never explicitly excludes the sibling tools that produce plain text or transcripts.

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