Skip to main content
Glama
After Effects MCP Server

After Effects MCP Server

by SUBSAHARXN

After Effects MCP Server

Node.js After%20Effects Build License: MIT

Control Adobe After Effects through MCP using a bridge panel running inside AE. This project is optimized for practical automation workflows: effects, presets, keyframing, markers, and audio-aware tooling.


Highlights

  • Full composition and layer automation.

  • Lottie & dotLottie Compiler: Auto-bakes unbaked expressions, converts text/AI to shapes, and strips raster filters.

  • Interactive State Machines: Generates official dotLottie interactivity specifications (onClick, onMouseEnter, onMouseLeave, onComplete).

  • Zero-Dependency .lottie Packager: Exports compressed dotLottie ZIP containers (>95% size reduction).

  • Deep effect inspection and property editing.

  • Advanced effect graph controls (temporal + spatial).

  • Preset search/list/apply workflows.

  • Marker and audio automation, including waveform-to-marker pipelines.

  • Installed effect catalog discovery (list-available-effects).

Related MCP server: After Effects MCP Server

Feature Matrix

Area

Capabilities

Composition

Create, inspect project/compositions, get clip frame ranges

Layers

Text/shape/solid/adjustment creation, transform/property updates, centering

Animation

Layer keyframes, expressions, effect keyframes with graph controls

Lottie & dotLottie

Compliance audit (audit-lottie-compliance), auto-bake compiler (compile-lottie-comp), vector JSON export (export-lottie-json), state markers (add-lottie-state-markers), interactivity manifest generator (generate-lottie-interactivity), dotLottie ZIP packager (export-dotlottie-package)

Effects

Apply by name/matchName, list layer effects recursively, edit any effect property, remove effects

Presets

Apply .ffx, list/search preset libraries

Markers

Add single marker (comp/layer), add markers in bulk

Audio

Set channel levels, inspect audio metadata, analyze WAV waveform, detect peaks

Requirements

  • Adobe After Effects

  • Node.js 18+

  • npm

In After Effects, enable:

  • Edit -> Preferences -> Scripting & Expressions -> Allow Scripts to Write Files and Access Network

Quick Start

  1. Clone and install:

git clone https://github.com/SUBSAHARXN/after-effects-mcp.git
cd after-effects-mcp
npm install
  1. Build:

npm run build
  1. Install bridge script:

npm run install-bridge
  1. Restart After Effects and open:

  • Window -> mcp-bridge-auto.jsx

  • Keep this panel open during MCP usage.

MCP Client Config

Use an absolute path to build/index.js.

{
  "mcpServers": {
    "AfterEffectsMCP": {
      "command": "node",
      "args": ["<absolute-path-to-repo>/build/index.js"]
    }
  }
}

Add to VS Code

If you use an MCP-capable VS Code extension, add this server in that extension's MCP server settings.

Use:

  • command: node

  • args: ["<absolute-path-to-repo>/build/index.js"]

Example snippet many extensions accept:

{
  "mcpServers": {
    "AfterEffectsMCP": {
      "command": "node",
      "args": ["C:\\Users\\<you>\\Documents\\Projects\\AEMCP\\build\\index.js"]
    }
  }
}

Then:

  1. Restart VS Code.

  2. Open After Effects and keep Window -> mcp-bridge-auto.jsx open.

  3. Call a simple tool like get-help or run-script with getProjectInfo.

Add to Claude Desktop

Edit Claude Desktop config and add the MCP server entry.

Typical Windows config location:

  • %APPDATA%\\Claude\\claude_desktop_config.json

Example:

{
  "mcpServers": {
    "AfterEffectsMCP": {
      "command": "C:\\Program Files\\nodejs\\node.exe",
      "args": [
        "C:\\Users\\<you>\\Documents\\Projects\\AEMCP\\build\\index.js"
      ]
    }
  }
}

After saving:

  1. Fully restart Claude Desktop.

  2. Open AE bridge panel.

  3. Verify with tools/list in logs or by calling a known tool.

Add to Claude Code

Configure the same server command/args in your Claude Code MCP configuration.

Use this server definition:

{
  "AfterEffectsMCP": {
    "command": "node",
    "args": ["<absolute-path-to-repo>/build/index.js"]
  }
}

Then:

  1. Restart Claude Code or reload MCP servers.

  2. Ensure After Effects is open with mcp-bridge-auto.jsx panel running.

  3. Test with get-results after a queued command.

Architecture Graph

flowchart LR
    A[AI Client<br/>VS Code / Claude Desktop / Claude Code] --> B[MCP Server<br/>build/index.js]
    B --> C[Bridge Files<br/>ae_command.json / ae_mcp_result.json]
    C --> D[After Effects Bridge Panel<br/>mcp-bridge-auto.jsx]
    D --> E[Adobe After Effects]
    E --> D
    D --> C
    C --> B
    B --> A

Command Flow Graph

sequenceDiagram
    participant Client as MCP Client
    participant Server as MCP Server
    participant Bridge as AE Bridge Panel
    participant AE as After Effects

    Client->>Server: tools/call (example: apply-effect)
    Server->>Server: write ae_command.json
    Server-->>Client: queued response (or waits)
    Bridge->>Bridge: poll command file
    Bridge->>AE: execute command
    AE-->>Bridge: result/error
    Bridge->>Bridge: write ae_mcp_result.json
    Client->>Server: get-results
    Server-->>Client: final result JSON

Typical Runtime Flow

  1. Start your MCP client (it starts this server).

  2. Keep AE bridge panel open.

  3. Call tools.

  4. If response says queued, call get-results after 1-3 seconds.

Note: some AE operations finish slightly after tool timeout windows; get-results usually contains the final state.

Tool Catalog

General

  • run-script

  • get-results

  • get-help

Composition and Layer Utilities

  • create-composition

  • create-adjustment-layer

  • center-layers

  • get-layer-clip-frames

Lottie and Interactivity

  • audit-lottie-compliance (audits comp for raster filters, unbaked expressions, text/vector footage)

  • compile-lottie-comp (clones comp, bakes expressions to keyframes, flattens 3D, converts text/AI to shapes)

  • export-lottie-json (exports compliant vector Lottie JSON)

  • add-lottie-state-markers (adds state markers e.g. idle, hover, active, exit)

  • generate-lottie-interactivity (compiles dotLottie state machine specification from markers)

  • export-dotlottie-package (packages Lottie JSON + manifest into compressed .lottie ZIP container)

Effects and Presets

  • apply-effect

  • add-any-effect

  • mcp_aftereffects_applyEffect

  • apply-effect-template

  • list-layer-effects

  • list-available-effects

  • set-effect-property

  • set-effect-keyframe

  • remove-effect

  • apply-preset

  • list-presets

  • search-presets

Markers and Audio

  • add-marker

  • add-markers-bulk

  • set-audio-levels

  • get-audio-info

  • analyze-audio-waveform

Diagnostics and Helpers

  • test-animation

  • run-bridge-test

  • mcp_aftereffects_get_effects_help

Audio to Marker Workflow

  1. get-audio-info on target layer.

  2. Copy sourceFilePath.

  3. analyze-audio-waveform with optional numPoints.

  4. Convert peakTimes to markers[].

  5. add-markers-bulk.

Project Layout

  • src/index.ts - MCP server and tool definitions

  • src/scripts/mcp-bridge-auto.jsx - AE bridge panel

  • install-bridge.js - bridge installer

Development

Build:

npm run build

Install bridge:

npm run install-bridge

Run server directly:

node build/index.js

Troubleshooting

Server does not start

  • Run npm run build.

  • Check MCP logs for startup exceptions (for example duplicate tool registration).

Commands queue but do not complete

  • Ensure AE bridge panel is open.

  • Confirm AE scripting/network permission is enabled.

  • Retry and call get-results after a short delay.

Results appear stale

  • Reopen bridge panel.

  • Send a new command and then call get-results.

Program Files install fails

  • Expected without elevated permissions.

  • User AppData script paths are usually sufficient.

License

MIT. See LICENSE.

Credits & Attribution

Available Tools

36 tools
add-any-effectB

Add any After Effects effect to a layer by matchName or display name.

Inputs: effect (required), compIndex (required), layerIndex (required), effectSettings.

add-lottie-state-markersB

Add named interactive state markers to an After Effects composition timeline for dotLottie interactive playback (e.g. idle, hover, active, exit). Supports presets: 'button_toggle', 'hover_loop', 'toggle_switch' or custom state definitions.

Inputs: preset, states, compName, compIndex, +1 more.

add-markerC

Add a marker to a layer or composition at a specified time. Markers can include a comment, label color, chapter name, URL and duration.

Inputs: compIndex (required), url, label, chapter, +6 more.

add-markers-bulkA

Add multiple layer or composition markers at once. Use this after analyze-audio-waveform to place markers at detected peaks, or to add any set of markers in a single call.

Inputs: markers (required), compIndex (required), layerName, layerIndex, +1 more.

analyze-audio-waveformA

Analyze a WAV audio file to extract waveform amplitude data and detect peaks/transients. First call get-audio-info to retrieve the sourceFilePath, then pass it here. Returns normalized amplitude values (0-1) at evenly spaced time intervals plus an array of peak times where transients are detected.

Inputs: filePath (required), numPoints.

apply-effectC

Apply an effect to a layer in After Effects

Inputs: compIndex (required), layerIndex (required), effect, effectName, +5 more.

apply-effect-templateB

Apply a predefined effect template to a layer in After Effects

Inputs: compIndex (required), layerIndex (required), templateName (required), customSettings.

apply-presetB

Apply an After Effects .ffx preset file to a layer.

Inputs: compIndex (required), layerIndex (required), presetPath (required).

audit-lottie-complianceA

Audit an After Effects composition for Lottie compatibility. Scans for unsupported raster effects (Wave Warp, Turbulent Displace, blurs, glows), unbaked/risky expressions (sourceRectAtTime, valueAtTime, wiggle), unconverted text layers, vector footage (AI/EPS), 3D switches, merge paths, and adjustment layers.

Inputs: compName, compIndex.

center-layersA

Center one layer, selected layers, or all layers in a composition.

Inputs: compIndex (required), allLayers, layerName, layerIndex, +1 more.

compile-lottie-compA

Restructure and compile an After Effects composition to make it 100% Lottie-compliant. Clones the composition safely to [CompName]_LottieReady, auto-bakes expressions into discrete keyframes (resolving sourceRectAtTime/valueAtTime/wiggle runtime errors), converts text and vector footage to native shape layers, flattens 3D switches, and strips unsupported raster effects.

Inputs: compName, compIndex, flatten3D, outputCompName, +6 more.

create-adjustment-layerA

Create an adjustment layer in the specified composition (or active comp).

Inputs: name, size, compName, duration, +2 more.

create-compositionA

Create a new composition in After Effects with specified parameters

Inputs: name (required), width (required), height (required), duration, +3 more.

export-dotlottie-packageB

Export an After Effects composition directly into a standard .lottie (dotLottie) ZIP container file containing the Lottie animation JSON, manifest.json, and interactive state machine (states/interactivity.json).

Inputs: compName, compIndex, outputPath, statePreset.

export-lottie-jsonC

Export an After Effects composition directly into a production-ready Lottie JSON animation file.

Inputs: compName, compIndex, outputPath.

generate-lottie-interactivityC

Extract After Effects timeline markers and compile a complete dotLottie Interactivity Specification (state machine with onClick, onMouseEnter, onMouseLeave, onComplete, and conditionals).

Inputs: compName, compIndex, animationId, stateMachineId.

get-audio-infoA

Get audio metadata, source file path, existing markers, and audio level keyframes for a layer in After Effects.

Inputs: compIndex (required), layerName, layerIndex.

get-helpA

Get help on using the After Effects MCP integration

Inputs: no named parameters.

get-layer-clip-framesB

Get a layer's clip start/end frames, source frame range, and duration in frames.

Inputs: compIndex (required), layerName, layerIndex.

get-resultsB

Get results from the last script executed in After Effects

Inputs: no named parameters.

list-available-effectsA

List all effects available in this After Effects installation, with optional text filter.

Inputs: query, maxResults, includeObsolete.

list-layer-effectsC

List effects on a layer, with optional recursive property details.

Inputs: compIndex (required), layerIndex (required), maxDepth, includeValues, +1 more.

list-presetsA

List available After Effects .ffx presets from common or provided folders.

Inputs: maxDepth, recursive, maxResults, presetRoots.

mcp_aftereffects_applyEffectC

Apply an effect to a layer in After Effects

Inputs: compIndex (required), layerIndex (required), effect, effectName, +3 more.

mcp_aftereffects_applyEffectTemplateC

Apply a predefined effect template to a layer in After Effects

Inputs: compIndex (required), layerIndex (required), templateName (required), customSettings.

mcp_aftereffects_get_effects_helpB

Get help on using After Effects effects

Inputs: no named parameters.

remove-effectB

Remove one specific effect (or all effects) from a layer.

Inputs: compIndex (required), layerIndex (required), removeAll, effectName, +2 more.

run-bridge-testA

Run the bridge test effects script to verify communication and apply test effects

Inputs: no named parameters.

run-scriptA

Run a read-only script in After Effects

Inputs: script (required), parameters.

search-presetsB

Search After Effects .ffx presets by name or path.

Inputs: query (required), maxDepth, recursive, maxResults, +1 more.

set-audio-levelsA

Set the audio levels (in dB) for an audio or AV layer. Supports per-channel control and optional keyframing.

Inputs: compIndex (required), layerIndex (required), level, leftLevel, +2 more.

set-effect-keyframeB

Set an effect property keyframe with optional graph interpolation and easy-ease controls.

Inputs: compIndex (required), layerIndex (required), value, effectName, +8 more.

set-effect-propertyB

Set or keyframe any property on an existing layer effect using name/index/path.

Inputs: compIndex (required), layerIndex (required), value, effectName, +9 more.

setLayerExpressionB

Set or remove an expression for a specific layer property.

Inputs: compIndex (required), layerIndex (required), propertyName (required), expressionString (required).

setLayerKeyframeB

Set a keyframe for a specific layer property at a given time.

Inputs: compIndex (required), layerIndex (required), propertyName (required), timeInSeconds (required), +1 more.

test-animationD

Test animation functionality in After Effects

Inputs: compIndex (required), operation (required), layerIndex (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.5/5.0

    Scored across 36 tools

    Disambiguation1/5

    Several tools appear to do the same thing: mcp_aftereffects_applyEffect, apply-effect, and add-any-effect all apply effects to a layer, while mcp_aftereffects_applyEffectTemplate and apply-effect-template duplicate each other. Help tools and test tools also overlap in purpose, making tool selection highly ambiguous.

    Naming Consistency2/5

    The tool names mix kebab-case, camelCase, and an mcp_aftereffects_ prefix, with inconsistent verb-first ordering. Examples include apply-effect, mcp_aftereffects_applyEffect, setLayerKeyframe, and add-markers-bulk, showing no single predictable convention.

    Tool Count2/5

    36 tools is heavy for this server, and many slots are consumed by duplicate or test/help operations rather than distinct capabilities. The count feels inflated rather than well-scoped.

    Completeness3/5

    The server covers effects, presets, audio analysis, markers, Lottie export, interactivity, and compliance auditing, which is broad. However, basic lifecycle operations like listing compositions/layers or deleting compositions/layers are missing, leaving notable gaps for common AE workflows.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers