Skip to main content
Glama

Add text

add_text

PROJECT-SCOPED: this call acts only on the explicit project_id and returns the project identity with its result. Burn a designed motion-graphics TEXT template over a PROGRAM-time window — separate from captions (spoken words) and overlays (media). Templates: 'title' (big centered opening card), 'subtitle' (support line under a title), 'lower_third' (name/context bar, interviews), 'callout' (short pointed label), 'big_number' (a huge stat — '10x', '$40K'), 'quote' (a quoted line), 'chapter' (section marker). x/y override the template's position (fractions of the frame); size_scale 0.4-3.0; color/accent_color '#RRGGBB'; font size can instead use font_size .012-.3 of the canvas short side, with max_width .1-.96 for its text column; font from the bundled families (exact name, e.g. 'Anton'); outline_width/shadow 0-12 override template edges (0 for clean flat type on a graphic panel); entrance/exit: 'none' (INSTANT — the text is simply there at frame one and simply gone at the end, no animation at all; use when the user wants no effect), fade, pop, slide_up, blur_in, whip, rise, drop, plus 'typewriter' (entrance only); uppercase forces casing; box adds a backing panel. motion is the general primitive for authored x/y/scale/rotation/opacity curves in LOCAL seconds: it can express a coherent drift, arc, settle, punch, spin or fade instead of choosing a named preset. When motion is present, omit entrance/exit. Use for text the user dictates — titles, labels, stats; spoken-word captions stay with add_captions. This text item owns caption suppression for its live window, so enabling captions before or after cannot stack two word layers and removing the text restores those captions automatically. Pass mute_captions=false for an independent headline or label in a separate visual area so dialogue captions remain visible. Inspect their geometry together.

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_idYesRequired immutable scope for this call. Copy the id from list_projects/open_project/project_state; the active-project pointer is never used to guess.
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. 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"
      +  }
      +]
  2. 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"
      +}
  3. 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"
      +}
  4. First observed

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare this is a non-read-only, non-idempotent, non-destructive, non-open-world write. The description still adds real behavioral context beyond them: project scoping, the caption-suppression ownership rule and its automatic restoration on removal, and the instant 'none' entrance/exit semantics. It stops short of describing rendering cost, auth/permission needs, or failure modes, so it is useful but not exhaustive.

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?

It is dense and long, but for a 22-parameter tool the length is largely earned, and it front-loads the project-scoping constraint and core purpose. A few clauses (e.g. the full template glossary) are verbose, keeping it just under top marks.

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?

With 22 parameters, no output schema, and very low schema coverage, the description covers nearly everything an agent needs: scoping, template choices, geometry, styling, animation, and the motion-vs-preset tradeoff. It notes the call returns the project identity with its result, but is thin on error/verification behavior, which is the remaining gap.

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 only 14% across 22 parameters, so the description must carry the load — and it does, documenting x/y as frame fractions, size_scale range, color/accent_color hex format, font_size and max_width ranges, bundled font families, outline/shadow overrides, entrance/exit presets, uppercase and box behavior, and the motion curve primitive. Some params (motion_motif, project_id) are only covered by their schema descriptions, leaving a small gap.

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 verb and resource — burning a motion-graphics TEXT template over a program-time window — and explicitly carves itself out from captions (spoken words) and overlays (media). The template enumeration and the 'use for text the user dictates' framing let an agent distinguish it from siblings like add_captions, add_title_card, and add_typeset without opening their schemas.

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

Usage Guidelines5/5

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

Gives explicit routing: dictated titles/labels/stats go here while spoken-word captions stay with add_captions, and it warns to omit entrance/exit when motion is present. It also spells out the mute_captions decision (false for an independent headline so dialogue captions remain visible), which is precisely the kind of when/when-not guidance that prevents misuse.

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.