Skip to main content
Glama

Add text

add_text

Adds a designed text element over a program-time window using a title, subtitle, lower-third, callout, number, quote or chapter template. Position, size, palette and typography are configurable independently of spoken captions.

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": {
      "text": "<text>",
      "start": "<start>",
      "end": "<end>",
      "project_id": "<project_id>"
    },
    "name": "add_text"
  }
}

Input Schema

NameRequiredDescriptionDefault
xNo
yNo
boxNo
endYes
exitNo
fontNo
textYes
colorNo
startYes
motionNoElement-local motion curves. t is seconds from this text's own start; x/y are frame fractions, scale is relative, rotation is degrees, opacity is 0..1.
shadowNo
entranceNo
templateNo
font_sizeNo
max_widthNo
uppercaseNo
project_idYesExplicit project identifier for this request. The connection's navigation pointer does not select the target.
size_scaleNo
accent_colorNo
motion_motifNoActive Blueprint motion motif id this event executes; never 'hold'.
mute_captionsNo
outline_widthNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / project_id / description
      Previous value: -"Required immutable scope for this call. Copy the id from list_projects/open_project/project_state; the active-project pointer is never used to guess."New value: +"Explicit project identifier for this request. The connection's navigation pointer does not select the target."
  2. Changed5 schema fields changed
    • changedInput schema / properties / motion / properties / opacity / anyOf
      Previous value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "items": {
      -      "properties": {
      -        "ease": {
      -          "enum": [
      -            "linear",
      -            "in",
      -            "out",
      -            "in_out",
      -            "hold"
      -          ],
      -          "type": "string"
      -        },
      -        "t": {
      -          "type": "number"
      -        },
      -        "v": {
      -          "type": "number"
      -        }
      -      },
      -      "required": [
      -        "t",
      -        "v"
      -      ],
      -      "type": "object"
      -    },
      -    "minItems": 1,
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "items": {
      +      "properties": {
      +        "ease": {
      +          "enum": [
      +            "linear",
      +            "in",
      +            "out",
      +            "in_out",
      +            "hold"
      +          ],
      +          "type": "string"
      +        },
      +        "t": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "v": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "t",
      +        "v"
      +      ],
      +      "type": "object"
      +    },
      +    "maxItems": 24,
      +    "minItems": 1,
      +    "type": "array"
      +  }
      +]
    • changedInput schema / properties / motion / properties / rotation / anyOf
      Previous value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "items": {
      -      "properties": {
      -        "ease": {
      -          "enum": [
      -            "linear",
      -            "in",
      -            "out",
      -            "in_out",
      -            "hold"
      -          ],
      -          "type": "string"
      -        },
      -        "t": {
      -          "type": "number"
      -        },
      -        "v": {
      -          "type": "number"
      -        }
      -      },
      -      "required": [
      -        "t",
      -        "v"
      -      ],
      -      "type": "object"
      -    },
      -    "minItems": 1,
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "items": {
      +      "properties": {
      +        "ease": {
      +          "enum": [
      +            "linear",
      +            "in",
      +            "out",
      +            "in_out",
      +            "hold"
      +          ],
      +          "type": "string"
      +        },
      +        "t": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "v": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "t",
      +        "v"
      +      ],
      +      "type": "object"
      +    },
      +    "maxItems": 24,
      +    "minItems": 1,
      +    "type": "array"
      +  }
      +]
    • changedInput schema / properties / motion / properties / scale / anyOf
      Previous value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "items": {
      -      "properties": {
      -        "ease": {
      -          "enum": [
      -            "linear",
      -            "in",
      -            "out",
      -            "in_out",
      -            "hold"
      -          ],
      -          "type": "string"
      -        },
      -        "t": {
      -          "type": "number"
      -        },
      -        "v": {
      -          "type": "number"
      -        }
      -      },
      -      "required": [
      -        "t",
      -        "v"
      -      ],
      -      "type": "object"
      -    },
      -    "minItems": 1,
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "items": {
      +      "properties": {
      +        "ease": {
      +          "enum": [
      +            "linear",
      +            "in",
      +            "out",
      +            "in_out",
      +            "hold"
      +          ],
      +          "type": "string"
      +        },
      +        "t": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "v": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "t",
      +        "v"
      +      ],
      +      "type": "object"
      +    },
      +    "maxItems": 24,
      +    "minItems": 1,
      +    "type": "array"
      +  }
      +]
    • changedInput schema / properties / motion / properties / x / anyOf
      Previous value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "items": {
      -      "properties": {
      -        "ease": {
      -          "enum": [
      -            "linear",
      -            "in",
      -            "out",
      -            "in_out",
      -            "hold"
      -          ],
      -          "type": "string"
      -        },
      -        "t": {
      -          "type": "number"
      -        },
      -        "v": {
      -          "type": "number"
      -        }
      -      },
      -      "required": [
      -        "t",
      -        "v"
      -      ],
      -      "type": "object"
      -    },
      -    "minItems": 1,
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "items": {
      +      "properties": {
      +        "ease": {
      +          "enum": [
      +            "linear",
      +            "in",
      +            "out",
      +            "in_out",
      +            "hold"
      +          ],
      +          "type": "string"
      +        },
      +        "t": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "v": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "t",
      +        "v"
      +      ],
      +      "type": "object"
      +    },
      +    "maxItems": 24,
      +    "minItems": 1,
      +    "type": "array"
      +  }
      +]
    • changedInput schema / properties / motion / properties / y / anyOf
      Previous value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "items": {
      -      "properties": {
      -        "ease": {
      -          "enum": [
      -            "linear",
      -            "in",
      -            "out",
      -            "in_out",
      -            "hold"
      -          ],
      -          "type": "string"
      -        },
      -        "t": {
      -          "type": "number"
      -        },
      -        "v": {
      -          "type": "number"
      -        }
      -      },
      -      "required": [
      -        "t",
      -        "v"
      -      ],
      -      "type": "object"
      -    },
      -    "minItems": 1,
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "items": {
      +      "properties": {
      +        "ease": {
      +          "enum": [
      +            "linear",
      +            "in",
      +            "out",
      +            "in_out",
      +            "hold"
      +          ],
      +          "type": "string"
      +        },
      +        "t": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "v": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "t",
      +        "v"
      +      ],
      +      "type": "object"
      +    },
      +    "maxItems": 24,
      +    "minItems": 1,
      +    "type": "array"
      +  }
      +]
  3. Changed2 schema fields changed
    • addedInput schema / properties / font_size
      Added value: +{
      +  "maximum": 0.3,
      +  "minimum": 0.012,
      +  "type": "number"
      +}
    • addedInput schema / properties / max_width
      Added value: +{
      +  "maximum": 0.96,
      +  "minimum": 0.1,
      +  "type": "number"
      +}
  4. Changed3 schema fields changed
    • addedInput schema / properties / mute_captions
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / outline_width
      Added value: +{
      +  "maximum": 12,
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / shadow
      Added value: +{
      +  "maximum": 12,
      +  "minimum": 0,
      +  "type": "number"
      +}
  5. First observed

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=false and idempotentHint=false, so the safety profile is covered. The description adds useful framing about time-window scope and independent configurability of position/size/palette/typography, but says nothing about whether repeated calls create duplicate elements, how the element is later addressed (remove_text), or what units "program-time window" uses.

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?

Two sentences, front-loaded with the verb and resource, with no filler or restatement of the title. Slightly dense jargon ("program-time window") but every clause carries information about scope or configurability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 22-parameter tool with a nested motion object and no output schema, the description covers the conceptual model but omits operational essentials: coordinate/unit conventions, how motion timelines relate to start/end, and what the agent gets back to reference the element later. Adequate as an orientation, insufficient as a complete calling guide.

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 only 14% across 22 parameters, so the description carries real weight; it partially compensates by grouping parameters into concepts (position, size, palette, typography, template). But it never explains units or conventions for x/y vs the nested motion curves (the schema says frame fractions, the description does not reinforce this), nor the entrance/exit pairing. Meaning is added at the category level, not the parameter level.

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?

The description names a specific verb ("Adds") and resource ("designed text element") and enumerates the template vocabulary (title, subtitle, lower-third, callout, number, quote, chapter), which matches the template enum. It also carves out a boundary against captions. It stops short of differentiating from the many close siblings (add_kinetic_text, add_typeset, add_title_card, add_type_window, add_text_behind), so an agent cannot fully route on the description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

"Configurable independently of spoken captions" implicitly tells the agent this is the non-caption text path, which is a usable signal when choosing between text tools. However, there is no explicit when-to-use, no exclusion against the overlapping title/kinetic/typeset siblings, and no prerequisite guidance (e.g. that add_text_behind or set_text_motion may be the follow-up).

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.