Skip to main content
Glama

Write a motion graphic

write_graphic
DestructiveIdempotent

2D or 3D motion as a scene (read get_guide graphics): eased keys, per-letter text, clip masks, vector shapes, 3D meshes with matcap, a perspective camera, particles, imported clips as video on pictures and 3D surfaces; or Lottie JSON. Any length. To change one: get_timeline layer_id, then replaces. Cost: Free.

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

Input Schema

NameRequiredDescriptionDefault
endYesFilm second it ends (any length).
codeNoOld receipts only.
htmlNoOr one HTML scene (GSAP, three.js), transparent.
nameYesA new short name (the id is made from it).
sceneNoThe clypmint-scene v1 JSON.
slotsNoValues for its slots.
startYesFilm second it starts.
lottieNoOr Lottie JSON.
replacesNoGraphics this one redoes (layer ids), hidden while it plays.
variantsNo2-4 scenes drawn as rows A-D at preview_at, unsaved, to pick from.
video_idNoVideo; the open one if left out.
output_idNoOutput id.
preview_atNoFilm seconds to look at it, unsaved.
base_versionNoVersion id you read.
operation_idNoSame id retries run once.

Output Schema

NameRequiredDescriptionDefault
codeNo
costNo
errorNo
stateNo
statusNo
dry_runNo
messageNo
plan_idNo
style_idNo
video_idNo
availableNo
import_idNo
output_idNo
studio_urlNo
version_idNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / html
      Added value: +{
      +  "description": "Or one HTML scene (GSAP, three.js), transparent.",
      +  "maxLength": 250000,
      +  "minLength": 20,
      +  "type": "string"
      +}
  2. Changed2 schema fields changed
    • changedInput schema / properties / end / description
      Previous value: -"Film second it ends; at most 30 s after start."New value: +"Film second it ends (any length)."
    • addedInput schema / properties / lottie
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Or Lottie JSON.",
      +  "propertyNames": {
      +    "type": "string"
      +  },
      +  "type": "object"
      +}
  3. Changed2 schema fields changed
    • changedInput schema / properties / variants / description
      Previous value: -"2-4 scenes drawn as rows A-D at preview_at, unsaved, for the user to pick."New value: +"2-4 scenes drawn as rows A-D at preview_at, unsaved, to pick from."
    • changedInput schema / properties / video_id / description
      Previous value: -"The video; the open one when left out."New value: +"Video; the open one if left out."
  4. Changed4 schema fields changed
    • changedInput schema / properties / code / description
      Previous value: -"Historical receipt replay only; new code authoring is refused. Supply scene."New value: +"Old receipts only."
    • changedInput schema / properties / scene / description
      Previous value: -"Portable clypmint-scene v1 JSON; required for all new graphics and replacements."New value: +"The clypmint-scene v1 JSON."
    • changedInput schema / properties / slots / description
      Previous value: -"Values for declared semantic SceneIR slots (editable later)."New value: +"Values for its slots."
    • addedInput schema / properties / variants
      Added value: +{
      +  "description": "2-4 scenes drawn as rows A-D at preview_at, unsaved, for the user to pick.",
      +  "items": {
      +    "additionalProperties": {},
      +    "propertyNames": {
      +      "type": "string"
      +    },
      +    "type": "object"
      +  },
      +  "maxItems": 4,
      +  "minItems": 2,
      +  "type": "array"
      +}
  5. Changed8 schema fields changed
    • changedInput schema / properties / base_version / description
      Previous value: -"The version_id you read; refused if the video changed since."New value: +"Version id you read."
    • changedInput schema / properties / code / description
      Previous value: -"JavaScript defining function draw(ctx, t, d, s) and optionally setup(d)."New value: +"Historical receipt replay only; new code authoring is refused. Supply scene."
    • changedInput schema / properties / operation_id / description
      Previous value: -"A retry with the same id runs once."New value: +"Same id retries run once."
    • changedInput schema / properties / output_id / description
      Previous value: -"An output (Short, hook, shape); the main video when left out."New value: +"Output id."
    • addedInput schema / properties / scene
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Portable clypmint-scene v1 JSON; required for all new graphics and replacements.",
      +  "propertyNames": {
      +    "type": "string"
      +  },
      +  "type": "object"
      +}
    • changedInput schema / properties / slots / description
      Previous value: -"Words and numbers the code reads as d.slots (editable later)."New value: +"Values for declared semantic SceneIR slots (editable later)."
    • changedInput schema / properties / video_id / description
      Previous value: -"The video, from list_videos."New value: +"The video; the open one when left out."
    • changedInput schema / required
      Previous value: -[
      -  "video_id",
      -  "name",
      -  "start",
      -  "end",
      -  "code"
      -]New value: +[
      +  "name",
      +  "start",
      +  "end"
      +]
  6. Changed8 schema fields changed
    • changedInput schema / properties / base_version / description
      Previous value: -"The version_id you read; refused if the video changed since. Left out: the live version, and a repeat is saved once."New value: +"The version_id you read; refused if the video changed since."
    • changedInput schema / properties / code / description
      Previous value: -"JavaScript defining function draw(ctx, t, d, s) and optionally setup(d). Read get_guide graphics first."New value: +"JavaScript defining function draw(ctx, t, d, s) and optionally setup(d)."
    • changedInput schema / properties / name / description
      Previous value: -"A short name, new for each graphic (its id is made from it); to redo one, write it under a new name and delete_layer the old."New value: +"A new short name (the id is made from it)."
    • changedInput schema / properties / operation_id / description
      Previous value: -"The same id on a retry runs it once; a new id is a new request."New value: +"A retry with the same id runs once."
    • changedInput schema / properties / output_id / description
      Previous value: -"A Short, hook or shape of the video; the main video when left out."New value: +"An output (Short, hook, shape); the main video when left out."
    • addedInput schema / properties / preview_at
      Added value: +{
      +  "description": "Film seconds to look at it, unsaved.",
      +  "items": {
      +    "minimum": 0,
      +    "type": "number"
      +  },
      +  "maxItems": 6,
      +  "minItems": 1,
      +  "type": "array"
      +}
    • addedInput schema / properties / replaces
      Added value: +{
      +  "description": "Graphics this one redoes (layer ids), hidden while it plays.",
      +  "items": {
      +    "pattern": "^[A-Za-z0-9:_-]{1,160}$",
      +    "type": "string"
      +  },
      +  "maxItems": 20,
      +  "minItems": 1,
      +  "type": "array"
      +}
    • changedInput schema / properties / slots / description
      Previous value: -"Words and numbers the code reads as d.slots, so they can be changed without new code."New value: +"Words and numbers the code reads as d.slots (editable later)."
  7. Changed1 schema field changed
    • changedInput schema / properties / name / description
      Previous value: -"A short name; the graphic id is made from it (the same name replaces that graphic)."New value: +"A short name, new for each graphic (its id is made from it); to redo one, write it under a new name and delete_layer the old."
  8. Added

TDQS

A3.7/5.0
Behavior4/5

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

Beyond the annotations (destructiveHint=true, idempotentHint=true), the description adds genuinely non-obvious behavior: 'replaces' graphics are hidden while this one plays, and variants/preview_at render unsaved rows for comparison. 'Cost: Free' and 'Any length' fill in operational context not present in the structured fields. It does not explain what happens to the prior graphic after the replacement period or the interaction between scene/html/lottie/code when several are supplied.

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 dense sentences with no filler; the content modes come first and the change-path plus cost note follow. The semicolon-chained fragments and shorthand like 'read get_guide graphics' compress meaning at some cost to readability, but nothing is redundant.

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 15-parameter mutation tool with a full output schema and complete schema coverage, the description covers the main creation modes, the update path via get_timeline, and the preview/variant behavior. Missing are the interlock rules among scene/html/lottie/code and when to prefer preview_at over writing, but the structured fields carry most remaining weight.

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 100%, so every parameter is already documented in the input schema, making 3 the baseline. The description adds only light framing — that scene, Lottie JSON, HTML, and legacy code are mutually alternative ways to define the graphic, and that duration is unbounded. It does not clarify the required start/end semantics or how slots map into a scene beyond the schema's own wording.

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 the resource concretely — 2D or 3D motion built as a scene, or Lottie JSON / HTML / code alternatives — so an agent knows this writes a motion graphic rather than editing footage. It also distinguishes itself from get_timeline by pointing to that sibling for the change path. The telegraphic phrasing ('2D or 3D motion as a scene') never states the verb 'create/write' explicitly, which costs it the top score.

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?

It gives one concrete workflow: to modify an existing graphic, call get_timeline with a layer_id and pass those ids via 'replaces'. It also routes the agent to get_guide for graphics syntax. There is no guidance on when to use this versus add_clip or edit_video, and no exclusions, so usage is implied rather than delimited.

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