Skip to main content
Glama

🎬 After Effects MCP Server

Node.js Build License Platform

Fork notice. This is a fork of Dakkshin/after-effects-mcp (MIT). The original project is the basis for everything here; this fork extends the ExtendScript bridge so a script can drive real animation β€” keyframe tracks, expressions, effects and footage swaps β€” rather than setting static properties one at a time. See What this fork adds.

✨ A Model Context Protocol (MCP) server for Adobe After Effects that enables AI assistants and other applications to control After Effects through a standardized protocol.

Table of Contents

Related MCP server: after-effects-mcp

πŸ“¦ Features

πŸŽ₯ Core Composition Features

  • Create compositions with custom settings (size, frame rate, duration, background color)

  • List all compositions in a project

  • Get project information such as frame rate, dimensions, and duration

🧱 Layer Management

  • Create text layers with customizable properties (font, size, color, position)

  • Create shape layers (rectangle, ellipse, polygon, star) with colors and strokes

  • Create solid/adjustment layers for backgrounds and effects

  • Create camera layers with configurable zoom and position

  • Create null objects for animation control

  • Modify layer properties like position, scale, rotation, opacity, timing

  • Toggle 2D/3D mode for layers

  • Set blend modes (normal, multiply, screen, etc.)

  • Track matte support (alpha, luma, inverted)

  • Duplicate layers with optional rename

  • Delete layers from composition

  • Create/modify masks with feather, expansion, and opacity

πŸŒ€ Animation Capabilities

  • Set keyframes for layer properties (Position, Scale, Rotation, Opacity, etc.)

  • Apply expressions to layer properties for dynamic animations

  • Batch set properties across multiple layers at once

βš™οΈ Setup Instructions

πŸ›  Prerequisites

  • Adobe After Effects (2022 or later)

  • Node.js (v14 or later)

  • npm or yarn package manager

πŸ“₯ Installation

  1. Clone the repository

    git clone https://github.com/Dakkshin/after-effects-mcp.git
    cd after-effects-mcp
  2. Install dependencies

    npm install
    # or
    yarn install
  3. Build the project

    npm run build
    # or
    yarn build
  4. Install the After Effects panel

    npm run install-bridge
    # or
    yarn install-bridge

    This will copy the necessary scripts to your After Effects installation.

πŸ”§ Update MCP Config

The repository includes a .mcp.json file for easy configuration. Copy or reference it in your MCP settings:

{
  "mcpServers": {
    "AfterEffectsMCP": {
      "command": "node",
      "args": ["PATH/TO/after-effects-mcp/build/index.js"]
    }
  }
}

Option 2: Manual Configuration

Go to your client (e.g., Claude or Cursor) and update your config file:

{
  "mcpServers": {
    "AfterEffectsMCP": {
      "command": "node",
      "args": ["C:\\Users\\Dakkshin\\after-effects-mcp\\build\\index.js"]
    }
  }
}

▢️ Running the Server

  1. Start the MCP server

    npm start
    # or
    yarn start
  2. Open After Effects

  3. Open the MCP Bridge Auto panel

    • In After Effects, go to Window > mcp-bridge-auto.jsx

    • The panel will automatically check for commands every few seconds

    • Make sure the "Auto-run commands" checkbox is enabled

πŸš€ Usage Guide

Once you have the server running and the MCP Bridge panel open in After Effects, you can control After Effects through the MCP protocol. This allows AI assistants or custom applications to send commands to After Effects.

πŸ“˜ Creating Compositions

You can create new compositions with custom settings:

  • Name

  • Width and height (in pixels)

  • Frame rate

  • Duration

  • Background color

Example MCP tool usage (for developers):

mcp_aftereffects_create_composition({
  name: "My Composition", 
  width: 1920, 
  height: 1080, 
  frameRate: 30,
  duration: 10
});

✍️ Working with Layers

You can create and modify different types of layers:

Text layers:

  • Set text content, font, size, and color

  • Position text anywhere in the composition

  • Adjust timing and opacity

Shape layers:

  • Create rectangles, ellipses, polygons, and stars

  • Set fill and stroke colors

  • Customize size and position

Solid layers:

  • Create background colors

  • Make adjustment layers for effects

πŸ•Ή Animation

You can animate layers with:

Keyframes:

  • Set property values at specific times

  • Create motion, scaling, rotation, and opacity changes

  • Control the timing of animations

Expressions:

  • Apply JavaScript expressions to properties

  • Create dynamic, procedural animations

  • Connect property values to each other

πŸ›  Available MCP Tools

Command

Description

create-composition

Create a new composition

run-script

Run a JS script inside AE

get-results

Get script results

get-help

Help for available commands

setLayerKeyframe

Add keyframe to layer property

setLayerExpression

Add/remove expressions from properties

setLayerProperties

Set layer properties (position, scale, rotation, opacity, blendMode, threeDLayer, trackMatteType, enabled, etc.)

batchSetLayerProperties

Apply properties to multiple layers

getLayerInfo

Get layer info (position, 3D status)

createCamera

Create camera layer

createNullObject

Create null object for animation

duplicateLayer

Duplicate a layer

deleteLayer

Delete a layer

setLayerMask

Create/modify layer masks

πŸ‘¨β€πŸ’» For Developers

🧩 Project Structure

  • src/index.ts: MCP server implementation

  • src/scripts/mcp-bridge-auto.jsx: Main After Effects panel script

  • install-bridge.js: Script to install the panel in After Effects

πŸ“¦ Building the Project

npm run build
# or
yarn build

Note: This project uses esbuild for fast builds, replacing the previous TypeScript compiler approach that could run out of memory on larger codebases.

🀝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Star History

Star History Chart

License

This project is licensed under the MIT License - see the LICENSE file for details.

What this fork adds

Upstream batchSetLayerProperties sets static transform properties. Driving an animation through it meant one round trip per keyframe, which is unusable over a file-based bridge. This fork makes a single batch call able to describe motion.

New keys on batchSetLayerProperties:

key

what it does

keyframes

write a whole track at once β€” {"Position": [[t, [x, y]], …]}

expressions

set an expression per property; "" clears and disables it

expressionEnabled

toggle an existing expression without losing it

effects

add or modify an effect and its properties, with addIfMissing

clearKeyframes + holdValues

strip a property's keys, holding a chosen value

overridePositionKeyframes

write Position even when it already has keys, shifting them by the delta

locked

applied before everything else, so one op can unlock, edit, and move on

New commands:

  • replaceFootage β€” repoint a layer at another file or at another composition (sourceId), which is how nested comps get assembled programmatically.

  • saveProject β€” save in place, or Save As with path. Upstream could build an entire composition tree and never touch disk, and After Effects does not autosave a project that has never been saved, so the work lived only in RAM until someone pressed Cmd-S. overwrite: false refuses to clobber an existing file, which matters when the project was opened from a template.

Also: getLayerInfo reports far more per layer (keyframe counts, expressions, anchor point, source id), resolveCompFromArgs accepts compId and errors clearly on an ambiguous name instead of guessing, and .mcp.json no longer hardcodes one machine's absolute path.

Honest limits

Things this bridge still cannot do, which are worth knowing before you plan around it:

  • No keyframe easing. Every key it writes is linear; there is no velocity or influence API. Shaped motion has to be baked as a dense run of samples.

  • No layer parenting, no masks, no layer reordering over time.

  • No render/export command. The only pixel output is one still at a time via getLayerInfo with saveFramePath. saveProject closes half of this gap: save the project, then drive aerender from a shell, which renders in its own process instead of freezing the panel.

  • Silent failures. The bridge returns status: "success" even when a property was skipped, encoding it in changedProperties as positionSkippedKeyframed, keyPropNotFound, exprPropNotFound and similar. Scan that array β€” a successful response does not mean the property was written.

  • A reused composition keeps the duration it was created with unless setCompositionProperties is called.

Available Tools

13 tools
apply-effectC

Apply an effect to a layer in After Effects

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

apply-effect-templateB

Apply a predefined effect template to a layer in After Effects

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

create-compositionA

Create a new composition in After Effects with specified parameters

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

get-helpA

Get help on using the After Effects MCP integration

Inputs: no named parameters.

get-resultsB

Get results from the last script executed in After Effects

Inputs: no named parameters.

mcp_aftereffects_applyEffectC

Apply an effect to a layer in After Effects

Inputs: compIndex (required), layerIndex (required), effectName, effectSettings, +1 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.

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.

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.4/5.0

    Scored across 13 tools

    Disambiguation1/5

    There are clear duplicates: apply-effect and mcp_aftereffects_applyEffect do the same thing, as do apply-effect-template and mcp_aftereffects_applyEffectTemplate. Additionally, get-help and mcp_aftereffects_get_effects_help overlap. This makes it ambiguous which tool to select for a given task.

    Naming Consistency1/5

    Tool names mix snake_case (run-script, apply-effect-template), camelCase (setLayerKeyframe, setLayerExpression), and prefixed variants (mcp_aftereffects_applyEffect). There is no consistent pattern, which makes the API hard to predict.

    Tool Count3/5

    13 tools is within a reasonable range, but several are redundant or aliases, inflating the count. A leaner set of unique tools would be more appropriate for the server's scope.

    Completeness2/5

    The set lacks essential operations for After Effects, such as creating layers, adding footage, rendering, or managing projects. While it covers composition creation, keyframes, expressions, and effects, major workflow steps are missing, limiting real-world use.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers