Skip to main content
Glama

Set text

text.set
Idempotent

Change a title's or caption's text, or restyle many at once (clip_ids, or every one on track_id). The style is merged; null turns an outline, shadow, box or highlight off (and max_lines back to all lines). spans (one clip) restyle part of its text. Fonts: video://catalog/fonts, or an unknown font is refused with the close matches. Returns the edit result (see the server instructions).

Input Schema

NameRequiredDescriptionDefault
textNoOnly with a single clip
spansNoOnly with a single clip: replaces its spans (null removes them). New text drops spans it doesn't give
styleNoMerged into each clip's style; null fields reset
previewNoinline: image in the result; link: URI that renders on read; nonelink
clip_idsNoTitles or captions
track_idNoInstead of clip_ids: every title and caption on a track
timeline_idYesTimeline handle; every edit returns a new one

Output Schema

NameRequiredDescriptionDefault
parentYesTimeline handle; every edit returns a new one
changedYes
clip_idNo
previewYes
clip_idsNo
track_idNo
warningsYes
timeline_idYesTimeline handle; every edit returns a new one

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • addedInput schema / $defs / TextSpan
      Added value: +{
      +  "properties": {
      +    "bold": {
      +      "type": "boolean"
      +    },
      +    "color": {
      +      "type": "string"
      +    },
      +    "first_word": {
      +      "maximum": 10000,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "italic": {
      +      "type": "boolean"
      +    },
      +    "last_word": {
      +      "maximum": 10000,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "size": {
      +      "description": "Of frame height",
      +      "maximum": 1,
      +      "minimum": 0.005,
      +      "type": "number"
      +    },
      +    "underline": {
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "first_word",
      +    "last_word"
      +  ],
      +  "type": "object"
      +}
    • changedInput schema / $defs / TextStyle / properties / highlight / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "color": {
      -        "type": "string"
      -      },
      -      "mode": {
      -        "enum": [
      -          "none",
      -          "fill",
      -          "word",
      -          "karaoke",
      -          "pop"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "mode",
      -      "color"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "color": {
      +        "type": "string"
      +      },
      +      "mode": {
      +        "description": "Needs caption word timings. karaoke: each word takes color as it is spoken and keeps it; fill: likewise, sweeping across each word; word: only the word being spoken; pop: that word, growing a little",
      +        "enum": [
      +          "none",
      +          "fill",
      +          "word",
      +          "karaoke",
      +          "pop"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "mode",
      +      "color"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / $defs / TextStyle / properties / max_lines
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maximum": 20,
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "At most this many lines at once: longer text shows in turn, a screenful at a time, each from its first word (by word timing, or by length without it). Lines are broken here, by the font, balanced in length; null shows it all at once"
      +}
    • addedInput schema / $defs / TextStyle / properties / max_width / description
      Added value: +"Of frame width: longer text wraps onto more lines, balanced in length"
    • addedInput schema / properties / spans
      Added value: +{
      +  "anyOf": [
      +    {
      +      "description": "Style part of the text: each span restyles words first_word to last_word (from 0: the timed words, or the text split at spaces), e.g. one word in yellow",
      +      "items": {
      +        "$ref": "#/$defs/TextSpan"
      +      },
      +      "maxItems": 500,
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Only with a single clip: replaces its spans (null removes them). New text drops spans it doesn't give"
      +}
  2. First observed

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare idempotent and non-destructive, and the description adds the merge semantics that make idempotency meaningful, plus the negative-path behavior: an unknown font is refused with close matches. It omits destructive-scope detail (e.g., what a new text string does to existing spans beyond the schema note) but overall adds real behavioral signal.

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 primary action, then progressively narrower modes. Dense with parenthetical clauses, but each clause carries a distinct constraint; no filler sentences.

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?

An output schema exists and the description defers detail to server instructions for the return shape, so return values needn't be restated. For a 7-param, nested-style mutation the coverage is solid, though the relationship to title.add/caption.add remains unstated.

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 100%, so baseline is 3; the description exceeds it by explaining null-as-reset for style fields and max_lines, the single-clip restriction on text and spans, and the font catalog reference. It leaves other TextStyle fields (reveal, anchor, max_width) to the schema, which already documents them.

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?

Specific verb+resource: 'Change a title's or caption's text, or restyle many at once', with the batch vs. single distinction made explicit via clip_ids/track_id. It also carves out the spans sub-case. It stops short of naming a sibling (e.g., title.add/caption.add for creation), so an agent must infer that boundary.

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 clear operating conditions: style is merged rather than replaced, null is the removal mechanism for outline/shadow/box/highlight and max_lines, and spans applies only with a single clip. No explicit when-not or alternative-tool routing, but the mode selection (single text vs. clip_ids vs. track_id) is spelled out.

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.