mcp-aftereffects
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| AE_EXE | No | Legacy alias for AE_MCP_EXE. | |
| AE_MCP_EXE | No | Full path to After Effects executable (Windows: AfterFX.exe, macOS .app bundle). Override when AE is installed elsewhere. Legacy alias: AE_EXE. | probes AE 2026, 2025, 2024 in default install locations |
| AE_MCP_READONLY | No | Set to '1' to block all operations that can modify the project. Overrides AE_MCP_ENABLE_EVAL. | 0 |
| AE_MCP_ENABLE_EVAL | No | Set to '1' to add eval.run (arbitrary ExtendScript) to the registry. Ignored when AE_MCP_READONLY=1. | 0 |
| AE_MCP_RUNTIME_DIR | No | Relocate the file-IPC mailbox. Both sides must agree; the server publishes the location so the dispatcher can find it. Rarely needed outside of testing. | <os temp>/mcp-aftereffects/runtime |
| AE_MCP_ALLOW_CATEGORIES | No | Comma-separated allowlist of ae_do categories, e.g. keyframe,property,batch. Unset means all categories are 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
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| ae_project_infoA | Project-level info: file path, dirty flag, all items with type/summary, active item. Start here. |
| ae_comp_infoA | Detailed comp info: size, fps, duration, work area, motion blur, layer summaries. Pass a comp name or item id — or an ARRAY of them to fetch several comps in one call. |
| ae_layer_infoA | Full layer info: transform, effects, masks, text, shape contents, keyframes (incl. interpolation names and bezier ease speed/influence). layerIndex accepts one index, an ARRAY of indices, or 'all' — auditing a whole comp is one call. detail:'summary' drops properties still at their default value (unkeyed, no expression) — start there for audits; the full tree is often 100KB+ per comp. Set includeProperties=false to skip the property tree walk entirely. |
| ae_render_frameA | Render one or more frames to PNG. Use to visually verify edits. The agent's 'eyes' — pair with mutations for a visual feedback loop. Headless and deterministic. Pass |
| ae_save_projectB | Save the project. Pass |
| ae_project_export_jsonA | Serialize the entire project to JSON (folders, comps, layers, keyframes, effects, shapes, markers, time remap, solids, file refs). Write to |
| ae_project_import_jsonA | Rebuild the project from JSON (produced by ae_project_export_json). Supports |
| ae_version_infoA | AE version, build, capabilities (saveFrameToPng, app.effects, Socket). Call at session start to know what APIs are available. |
| ae_catalogA | Discover available atomic operations for ae_do. Without args: all categories with their operation names. With a category: detailed params per operation. Only operations this server will actually execute are listed. |
| ae_doA | Execute an atomic operation by name (from ae_catalog). Arguments are validated against the operation's declared parameters before anything reaches AE. Have more than one operation to run? Wrap them in ONE batch.run instead of several ae_do calls — read/verify steps (comp.info, layer.info, render.frame) can ride in the same batch. Every call is automatically wrapped in ONE undo group: a single Ctrl+Z (or project.undo) reverts the entire call, and a batch.run counts as one call. Never call app.beginUndoGroup/endUndoGroup in eval.run code — the wrapper already did. The exception is undo/redo itself (project.undo, command.execute id 16/2035): those run outside the group and cannot ride inside a batch.run. Response includes ambient context (active comp, selected layers, project state) at zero extra round trips. Example: ae_do({ operation: 'keyframe.add', args: { comp: 'Main', layer: 1, property: ['Transform','Position'], time: 2, value: [960,540] } }) |
| ae_contextA | Ambient context: project state, active comp, selected layers, item list, AE.* helpers, ES3 rules, and the undo contract (every call = one auto undo group). Call at session start; then rely on ae_do response context. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 11 tools
The read tools are cleanly tiered (project_info, comp_info, layer_info) and the catalog/do pair is a clear discovery-vs-execute split. There is mild overlap among the three 'session start' calls (ae_context, ae_project_info, ae_version_info), which all expose ambient project/session state, but descriptions differentiate them adequately.
Every tool uses the ae_ snake_case prefix with a predictable pattern (ae_<resource>_info, ae_<resource>_<action>). No mixed conventions or vague verbs; the naming is uniform and readable throughout.
11 tools is well within the sweet spot and each earns its place: read tiers, mutation engine, visual verification, serialization round-trip, and discovery helpers. The catalog/do indirection keeps the surface small while remaining extensible.
Covers the full lifecycle — inspect, mutate (via ae_do + ae_catalog), verify visually (render_frame), persist (save/export/import), and introspect capabilities. The only soft spot is that broad mutation coverage depends entirely on the referenced catalog, which is opaque from the tool list, but export/import plus the do engine make dead ends unlikely.