Skip to main content
Glama
dha-aa
by dha-aa

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
AE_AERENDERNoFull path to aerender if auto-detection fails.
AE_MCP_ALLOW_JSXNoSet to 1 to enable run_jsx.
AE_MCP_BRIDGE_FILENoOverride the bridge file (default ~/.ae-motion-mcp/bridge.json). This must also be set for the panel's environment if you change it.
AE_MCP_ALLOWED_DIRSNoFolders (separated by the OS path delimiter, ":" or ";") that tools may read from and write to. Default: your home folder. The temp folder is always allowed.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}
prompts
{
  "listChanged": true
}
resources
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_projectA

List project items with each comp's layers (id, name, kind, timing; left out when the page has over 300 layers: layers_listed false, use get_comp), the active comp id, AE version and project path. Filter by name (substring) or type; page with limit (200) / offset. If a newer ae-motion-mcp is known, an update field says how to update: tell the user.

get_compA

Get composition settings and its layers, top first (id, name, kind, non-default in/out/start, parent, blend mode, flags). Big comps: filter by name (substring), kind or at (seconds: layers visible then), page with limit (default 150) / offset; kinds counts all layers.

get_layerA

Get a layer (or several: layer_ids): transform values, text, effects, expressions, marker count, masks, track matte, bounds (content: its layer-space box; comp: its place in the comp, null for 3D). Values at time (default 0).

list_propertiesA

Walk a layer's property tree and return names, match names, value types, values, keyframe counts and expressions. Use it to find property paths before set_property / set_keyframes.

get_keyframesA

Read all keyframes of one property: time, value, in/out interpolation and temporal ease, plus any active expression; unanimated, its value. Use list_properties to find the path.

find_effectsB

Search installed effects by display name, match name or category (max 50).

save_projectA

Save the project. With path it does Save As (.aep or .aepx, inside the allowed folders; pass overwrite to replace an existing file). Without path it saves in place, which needs a project that has been saved once. render_start needs a saved project. clean: true first removes footage no comp uses (removed_footage counts it). snapshot: true also keeps a numbered copy in snapshots/ next to the project (note labels it); open_project on that copy goes back to it exactly.

open_projectA

Open an After Effects project (.aep or .aepx, inside the allowed folders), or new: true for an empty one, replacing the open one. If the open project has unsaved changes it refuses, unless discard_unsaved is true (those changes are then lost; use save_project first to keep them). Returns the new project like get_project. Cannot be undone.

create_compC

Create a composition and open it in the viewer.

set_compA

Change comp settings; only the fields you pass change. work_area must fit inside the comp. motion_blur and frame_blending are the comp switches the layer switches need to render; shutter_angle default 180.

import_footageA

Import a file, or several (paths), into the project. as: sequence (path is its first frame), comp / comp_cropped (a layered PSD or Illustrator file as a comp of its layers). fps, loop and alpha set the footage's interpretation (set_item changes them later). folder files the imports. All files are checked before any is imported.

set_itemA

Change a project item (comp, footage or folder): name, comment, label (0-16), folder (null: top level); footage interpretation (fps, loop, alpha); file swaps the footage's file for every layer that uses it (sequence: file is a sequence's first frame).

delete_itemA

Delete a project item (comp, footage or folder) by id. Refuses items that are used in comps, and non-empty folders, unless force is true (force also deletes the layers that use the item).

add_layerA

Add a layer. item_id: footage/precomp source. center: camera/light. position with 3 values turns 3D on. box_size: box text; text_style as set_text. anchor moves the anchor onto the content (as set_anchor) before position, so position places e.g. the text's center. shape: a shape layer's first shape (as add_shape). fit_to (shape): a rect that keeps fitting that layer's content + padding (a highlight behind text). fit: scale to cover or fit inside the comp frame. Timing: in/out are comp times; source_in is the source time shown at in (no start maths); stretch in percent (200 = half speed).

set_layerA

Edit a layer; only the fields you pass change. stretch: percent (200 = half speed, negative reverses). parent_id null unparents. blend_mode: e.g. ADD, SCREEN. motion_blur / frame_blending need the switch in set_comp too. separate_dimensions: x_position / y_position / z_position. auto_orient path: along the motion path. collapse: continuously rasterize. guide: not rendered. sampling bicubic: sharper scaled images. solid_color / solid_size change the solid item (every layer using it). audio_fade: seconds of equal-power fade from the in point / to the out point (volume keys; works under duck_music).

link_layersA

Parent layer_ids to parent_id (null unlinks), or to a new_null created at their average position (3D if any of them is), stacked above them. jump true keeps each child's own transform values (it can visibly move). Self-links, cycles, locked layers or mixed comps are refused before anything changes.

replace_sourceA

Swap the footage, comp or solid a layer shows for another project item (like Alt/Option-dragging onto it), keeping the layer's timing, keyframes, masks and effects. fix_expressions (default true) updates expressions that referred to the old source. Works on footage, precomp, solid and null layers.

delete_layerC

Delete a layer.

duplicate_layerA

Duplicate a layer (the copy sits above the original). count makes several copies; offset_seconds shifts copy N later in time by N * offset_seconds.

reorder_layerA

Change a layer's stacking order. Pass exactly one of: to, index (1 = top), before_layer_id, after_layer_id. Before means above in the stack.

precomposeA

Precompose layers from the same comp into a new comp. move_attributes (default true) moves their transforms, effects and masks into the new comp; false ("leave all attributes", one footage, solid or precomp layer only) keeps them on the layer in the current comp.

set_propertyA

Set a static value, or a value at time (creates/updates a keyframe). Animated properties need time. Use set_text for text. layer_ids sets the same property on many layers in one call (all checked first).

set_keyframesA

Replace all keys on a property (merge: keep keys at other times; replaced: old keys removed). Path properties (ADBE Mask Shape, ADBE Vector Shape) take a shape spec as v; keep the vertex count the same across keys for clean morphs. interp spring/bounce springs the segment to the next key (works on any property). Fails if another expression is active. Returns the keys as set.

edit_keyframesA

Edit single keys on one property, in order, leaving the others. Address a key by t (within half a frame) or index (1-based). set creates a key at t (v or the current value) or updates one; spatial_in/out are motion-path tangents relative to the key. move keeps every setting. Returns the edited keys (get_keyframes lists all).

copy_animationA

Copy a property's keys (with easing and tangents) or static value, plus any expression, to other layers, replacing their keys. to_path targets another property of the same type. offset_seconds shifts the keys; the i-th target also gets i * stagger_seconds.

add_propertyB

Add a property or group that set_property cannot reach until it exists. Text animator: group_path ['ADBE Text Properties','ADBE Text Animators'], match_name 'ADBE Text Animator'; then add properties under returned path + 'ADBE Text Animator Properties' (e.g. ADBE Text Opacity, ADBE Text Position 3D, ADBE Text Fill Color) and a selector under returned path + 'ADBE Text Selectors' (ADBE Text Selector). Returns the new property path.

set_expressionA

Set an expression on a property (empty string clears it), on one layer or the same property of many (layer_ids: send a shared expression once). Returns whether After Effects accepted the syntax.

apply_effectB

Add an effect by match name (see find_effects) and set parameters by name, match name or 1-based index. If any parameter fails the effect is removed.

edit_effectA

Remove, enable or disable an effect on a layer by its 1-based index (see get_layer for the list).

apply_presetB

Apply an .ffx animation preset to a layer. Path must be inside the allowed folders.

set_textA

Set text and styling on a whole text layer; only the fields you pass change, read back in the result (skipped: what After Effects refused). font: PostScript name (find_fonts). leading turns auto leading off; stroke_color turns the stroke on; horizontal/vertical_scale in percent. box_size resizes box text (point text cannot become box text: add_layer options.box_size). time sets a keyframe. ranges style part of the text after the whole-layer fields (AE 24.3+): match (every occurrence of a string) or start/end (character indexes from 0, end exclusive, default the end). New text clears earlier part styling (ranges_cleared): pass ranges in the same call.

find_fontsA

Search the installed fonts by family, style or PostScript name (e.g. "montserrat", "bold italic"); returns PostScript names for set_text font. Needs After Effects 24.0+.

get_textA

Read a text layer's content and styling (font, size, colors, stroke, leading, tracking, scale, caps, indents, justification, box size), at time (default: now). The layer fields are the first character's; ranges lists parts styled differently (fields that differ from them).

staggerA

Offset existing keyframes of one property across layers: layer i is shifted by i * offset_seconds. Every key setting (easing, motion-path tangents) is kept. Moves keys, not layers (whole layers: shift_layers / sequence_layers).

add_shape_modifierA

Add trim_paths, repeater or round_corners to a shape group (group_index, default 1). params maps property names or match names to values. Returns the modifier's path and property names for set_keyframes.

animateA

Animate layers with a named move, keyed from their current values. In/out: fade, pop (scale from 0), grow (from 80%), slide (direction of travel, default up), drop, spin; style snappy (default), smooth, spring (default pop/spin), bounce (default drop), linear; exits accelerate; springs are expressions on the keys; time defaults to the in point (out: out point - duration). Through a hold, so the frame never freezes: push (slow scale-up by amount %, default 4) and drift (slow float by distance px, default 2% of the comp height, toward direction); they start where the layer's animation lands (keeping its landing ease) and run to its out point; style smooth (default) or linear. Layer i starts i * stagger later.

text_revealB

Reveal (phase out: hide) a text layer unit by unit (text animator + expression selector). Each unit takes duration and starts stagger after the previous. mask clips rise/drop at a line so letters slide out from behind it. Returns the end time.

transitionC

Add a shape transition on top that covers the frame at time (cut scenes there) and clears by time + duration/2: wipe, bars (staggered stripes) or iris (disc grows, then opens from its centre).

review_motionA

Critique a comp's animation without rendering (cheap, no image): linear easing, holds over max_hold (changes too small to see don't count as motion: fix holds with animate push / drift), a first move later than 0.3 s, layers moving in unison, entrances with no animation, moves cut off by out points, jumps, text under min_text px (default 3% of the comp's short side), share of moves on beat markers; layers hidden behind opaque ones (3D: by depth), off screen, text partly covered, text crossing the 5% title-safe margin (vertical comps: the top 10% and bottom 20% social apps cover) (scene false skips). Run after each scene and fix every warning.

preview_frameA

Render comp frames and return them as one image (several times are tiled left to right, top to bottom). Images cost tokens by size: keep the default size, and pass several times in one call rather than calling once per time. In an edit, scene / scenes name the precomp each frame shows.

render_startA

Save the project (saved once before) and start a background aerender job; poll render_status with the job_id. om_template / rs_template: output-module / render-settings template names (the output module picks the file extension). software: Mercury Software Only (fixes GPU failures). With ffmpeg the result is checked (black/frozen/silent spans, loudness; verify false skips); deliver: H.264 MP4 at loudness (-14 LUFS); audio_only: the mix. Renders the whole comp (not the work area); start / end (s) a part, draft: true a fast low-quality look at the motion.

render_statusB

Get state (running|done|failed|canceled), percent, frames, eta_s, poll_after_s (wait that long), phase, check (issues in the file), errors + hint, log tail, file written.

render_cancelC

Cancel a running render job.

check_for_updatesA

Check whether a newer ae-motion-mcp release exists (GitHub version tags). Returns current and latest versions, update_available and, if so, how to update. Uses a result cached for a day unless force is true. Disabled when AE_MCP_UPDATE_CHECK=0.

batchA

Run up to 50 tool calls in order in one call (prefer it for multi-step builds). "$N.path" in args is that value from step N's result (from 1), e.g. "$1.id", "$2.layers.0.id"; name a step (as: "title") to use "$title.id" instead. "$$" is a literal $ ("$$99"). defaults: {tool: args} merged under every step of that tool (shared style, comp_id). All steps are checked before any runs; a step that fails in After Effects stops the batch with the results so far and a batch_id for resume. Each step is its own undo step. Not preview_frame, run_jsx or open_project.

load_toolsA

Show a tool group that is not listed yet, to see its tools' arguments: project (comps, import, open/save, delete items); layers (add/set/duplicate/delete/reorder/link layers, precompose, replace source); timeline (split, shift, sequence, trim, insert/delete time, markers); masks (masks, track mattes); animate (properties, keyframes, expressions, effects, presets, text, stagger, shape modifiers); motion (animate (named moves with springs), text_reveal, transition, review_motion); scene3d (3D layers, cameras, lights, camera moves/rigs/shake, 3D views); design (align, anchors, add shapes, layer styles, text to shapes); output (preview_frame, renders); audio (beat markers, audio-reactive expressions, sound-effect cues and placement); scripting (run_jsx (also needs AE_MCP_ALLOW_JSX=1)). A batch step naming one of their tools shows its group by itself.

Prompts

Interactive templates invoked by user choice

NameDescription
motion-guideConventions and the recommended build loop for motion graphics

Resources

Contextual data attached and managed by the client

NameDescription
projectCurrent project summary
selectionLayers selected in the active comp

TDQS

B3.2/5.0

Scored across 46 tools

Disambiguation4/5

Most tools have a clearly distinct target (get_layer vs set_layer, apply_effect vs edit_effect, create_comp vs set_comp), and the unusually detailed descriptions explicitly separate near-neighbors like edit_keyframes (single keys) vs set_keyframes (replace all) vs set_property (static/keyed value). A few clusters remain confusable at first glance — three ways to write keyframes, and animate/transition/text_reveal all being animation generators — but the text resolves most of it.

Naming Consistency4/5

Nearly everything follows a snake_case verb_noun pattern (get_project, add_layer, delete_item, render_start, set_keyframes). A handful of single-word action verbs (batch, animate, stagger, precompose) break the two-part shape but are still unambiguous verbs, and retrieval verbs (get/list/find) are used with consistent intent.

Tool Count2/5

46 listed tools is far past the 25+ threshold, and load_tools reveals that even more groups (masks, scene3d, design, output, audio, scripting) exist behind the initial surface. While After Effects is a genuinely broad domain, the surface is heavy enough that an agent will struggle to pick correctly without browsing groups first.

Completeness4/5

The listed surface covers the full lifecycle: project open/save/import, comp creation and settings, layer add/edit/reorder/precompose/replace source, property and keyframe reads/writes, effects, presets, text, expressions, and rendering with status/cancel. The main gaps — masks, cameras/lights, alignment, batches of scene work — are reachable only through load_tools groups, which adds a discovery step but not a dead end.

Maintenance

ActivityMaintained
ResponsivenessNo issues