Skip to main content
Glama
AE MCP Server
by p10q

AE MCP Server - Adobe After Effects Model Context Protocol Server

A Model Context Protocol (MCP) server that enables AI assistants to interact with Adobe After Effects through a file-based communication bridge.

Background

  • I signed up for https://schoolofmotion.com/ again on my vacation. And started to go through Joey's very first lesson (Desk Unmessed) to take an inventory of where I'm at. I animated one item, and then got to thinking... it'd be nice to use MCP here and connect Amazon Q or Claude Code and "repeat the animation" for the other shapes I just did.

  • I explored what was out there and mostly found: https://github.com/Dakkshin/after-effects-mcp. But it was originally focused on Windows. I was able to use Claude Code to get it to run on macOS but I couldn't get it to take commands.

  • So I used Claude Code to create a BRD and design doc (pretty basic 1-2 sentence prompt: "Can you plan out how you’d create an MCP server for Adobe after effects? Maybe create a requirements doc and then technical design doc with instructions on how to implement?"). Then I copied the markdown files into a new folder and prompted to create an app. I asked why not "rust" but Adobe CEP is more JavaScript oriented so it made sense to stick with TypeScript. Original prompts were focused around just doing a script because CEP didn't work at first. So again I went back to Claude Desktop (Opus) and prompted with "Can we research how to create CEP plugins for adobe after effects? Currently not able to get them to load - maybe not signed? Can we create detailed steps on how to get this to work for running locally with Adobe After Effects 2025?". And used that markdown file as input to help with creating a more robust system.

  • That worked, was able to finally load a CEP plugin. Btw earlier when I had to run a script I could not get sockets to work so Claude synthesized a file-based way to communicate. That seemed more reliable. So when switching over to CEP we went with that. There was a lot of copying of errors and prompting for guidance but fairly minimal human-based engineering. Mostly guidance. I used Amazon Q to power the client using just this in ~/.aws/amazonq/mcp.json:

    "ae-mcp": {
      "command": "node",
      "args": ["<path to>/ae-mcp/dist/stdio-server.js"],
      "env": {
        "AE_USE_FILE_BRIDGE": "true"
      }
    }
  • And it worked. My wife thinks I should try to sell this (did interrupt one vacation day to be fair). Maybe in the future.

  • You can use tail ae-mcp-server.log to check for logs. Haven't explored what it can do too much - maybe this weekend more...

Overview

This project provides an MCP server that allows AI assistants (like Claude) to control Adobe After Effects by:

  • Creating and managing projects

  • Creating and modifying compositions

  • Managing layers and keyframes

  • Rendering compositions

  • Batch processing operations

Architecture

The system uses a file-based communication approach for reliability:

AI Assistant <-> MCP Server <-> File System <-> CEP Extension <-> After Effects
  1. MCP Server - Receives commands from AI assistants via the MCP protocol

  2. File Bridge - Writes commands as JSON files to a watched directory

  3. CEP Extension - Monitors the directory and executes commands in After Effects

  4. Response System - Returns results via response files

Requirements

  • Adobe After Effects 2022 or later

  • Node.js 16+ and npm

  • macOS or Windows

Quick Start

1. Install and Build

git clone <repository-url>
cd ae-mcp
npm install
npm run build

2. Install the CEP Extension

cd cep-extension
./install.sh  # macOS
# or manually copy to CEP extensions folder on Windows

3. Enable the Extension in After Effects

  1. Open After Effects

  2. Go to Window > Extensions > AE MCP Bridge

  3. Ensure "Auto Process: ON" is enabled

4. Configure Your MCP Client

For Claude Desktop, add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "ae-mcp": {
      "command": "node",
      "args": ["/path/to/ae-mcp/dist/stdio-server-hybrid.js"],
      "env": {
        "AE_USE_FILE_BRIDGE": "true"
      }
    }
  }
}

Available Tools

Project Tools

  • create_project - Create a new After Effects project

  • open_project - Open an existing project

  • save_project - Save the current project

  • get_project_info - Get information about the current project

Composition Tools

  • create_composition - Create a new composition with custom settings

  • get_composition - Get composition details

  • list_compositions - List all compositions in the project

  • update_composition - Update composition settings

Layer Tools

  • create_solid_layer - Create a solid color layer

  • create_text_layer - Create a text layer

  • create_adjustment_layer - Create an adjustment layer

  • create_null_layer - Create a null object layer

  • create_shape_layer - Create a shape layer

  • get_layer - Get layer information

  • list_layers - List all layers in a composition

  • update_layer_property - Update layer transform properties

  • add_keyframe - Add keyframes to animate properties

  • set_layer_parent - Set layer parenting

Render Tools

  • add_to_render_queue - Add composition to render queue

  • start_render - Start rendering the queue

  • get_render_status - Check render progress

  • set_render_settings - Configure render settings

Expression Tools

  • set_expression - Set an expression on a layer property (NOT add_expression)

  • get_expression - Get the expression from a layer property

  • remove_expression - Remove an expression from a property

  • enable_expression - Enable or disable an expression

  • batch_set_expressions - Set multiple expressions at once

  • add_wiggle_expression - Add a wiggle expression to a property

  • add_loop_expression - Add a loop expression to a property

  • link_properties_with_expression - Link two properties together

  • add_expression_control - Add expression control effects (slider, checkbox, etc.)

Batch Tools

  • batch_create_comps - Create multiple compositions at once

  • batch_import - Import multiple files

  • batch_replace - Replace multiple items

  • batch_process - Process multiple items with a script

How It Works

File-Based Communication

The system uses a simple file-based approach for maximum reliability:

  1. Commands Directory: ~/Documents/ae-mcp-commands/

  2. Command Format: JSON files with unique IDs

  3. Response Format: Matching .response files

  4. Auto-Processing: CEP extension polls every 200ms

Example Command Flow

  1. MCP server receives: "Create a 1080p composition"

  2. Writes to: ~/Documents/ae-mcp-commands/cmd_123.json

    {
      "id": "cmd_123",
      "script": "app.project.items.addComp('New Comp', 1920, 1080, 1, 10, 30);"
    }
  3. CEP extension executes the script

  4. Writes response: cmd_123.json.response

  5. MCP server reads response and returns to client

CEP Extension

The CEP (Common Extensibility Platform) extension runs inside After Effects:

  • Auto Process Mode: Continuously monitors for new commands

  • Manual Process: Click to process commands on demand

  • Activity Log: Shows all processed commands and errors

  • Status Display: Real-time connection and processing status

Extension Features

  • Command processing with 200ms polling interval

  • Automatic error handling and recovery

  • Command history and logging

  • Visual status indicators

  • Manual command folder access

Troubleshooting

Extension Not Showing

  1. Enable debug mode:

    cd cep-extension
    ./enable-debug-mode.sh
  2. Restart After Effects

  3. Check Window > Extensions > AE MCP Bridge

Commands Not Processing

  1. Verify "Auto Process: ON" in the extension panel

  2. Check ~/Documents/ae-mcp-commands/ for command files

  3. Look for errors in the extension's activity log

  4. Ensure After Effects has a project open

Common Issues

  • "Script access denied": Enable "Allow Scripts to Write Files" in AE Preferences

  • Extension won't load: Run the debug mode enabler and restart

  • Commands timeout: Check if After Effects is responding

Development

Project Structure

ae-mcp/
├── src/                    # TypeScript source
│   ├── server/            # MCP server implementation
│   │   └── tools/        # Tool definitions
│   ├── ae-integration/   # After Effects communication
│   └── types/           # Type definitions
├── cep-extension/       # CEP extension
│   ├── CSXS/           # Extension manifest
│   ├── jsx/            # ExtendScript code
│   ├── js/             # Panel JavaScript
│   └── css/            # Panel styles
└── dist/               # Compiled output

Adding New Tools

  1. Create tool definition in src/server/tools/

  2. Implement ExtendScript generation

  3. Add to appropriate tool category

  4. Build and test

Testing

# Run tests
npm test

# Test individual commands
node dist/stdio-server-hybrid.js

Examples

See the examples/ directory for usage examples.

Additional Guides

License

MIT License - see LICENSE file for details

Available Tools

92 tools
add_adjustment_layerC

Add an adjustment layer to a composition

Inputs: compId (required), name.

add_camera_layerC

Add a camera layer to a composition

Inputs: compId (required), name, preset, focalLength.

add_elliptical_maskC

Add an elliptical mask to a layer

Inputs: compId (required), layerIndex (required), center (required), radius (required), +1 more.

add_expression_controlC

Add an expression control effect to a layer

Inputs: compId (required), layerIndex (required), controlType (required), name (required), +1 more.

add_light_layerC

Add a light layer to a composition

Inputs: compId (required), name, lightType, color, +1 more.

add_loop_expressionC

Add a loop expression to a property

Inputs: compId (required), layerIndex (required), propertyPath (required), loopType, +1 more.

add_maskC

Add a mask to a layer

Inputs: compId (required), layerIndex (required), name, maskShape.

add_null_layerC

Add a null object layer to a composition

Inputs: compId (required), name, is3D.

add_rectangular_maskC

Add a rectangular mask to a layer

Inputs: compId (required), layerIndex (required), bounds (required), name, +1 more.

add_shape_layerC

Add a shape layer to a composition with customizable properties

Inputs: compId (required), name, shapeType, properties.

add_shape_pathC

Add a path to a shape layer

Inputs: compId (required), layerIndex (required), path (required), groupName, +3 more.

add_solid_layerA

Add a solid color layer to a composition. Note: New layers are added on TOP (Layer 1). For backgrounds, create them last or use reorder_layers.

Inputs: compId (required), name, color, width, +1 more.

add_text_animatorC

Add a text animator to animate individual characters

Inputs: compId (required), layerIndex (required), properties (required), animatorName, +1 more.

add_text_layerC

Add a text layer to a composition

Inputs: compId (required), text (required), name.

add_text_layer_advancedC

Add a text layer with advanced formatting options

Inputs: compId (required), text (required), name, sourceText, +2 more.

add_to_render_queueC

Add a composition to the render queue

Inputs: compId (required), outputPath (required), outputModule, renderSettings.

add_wiggle_expressionC

Add a wiggle expression to a property

Inputs: compId (required), layerIndex (required), propertyPath (required), frequency, +4 more.

animate_mask_pathC

Animate a mask path with keyframes

Inputs: compId (required), layerIndex (required), maskIndex (required), keyframes (required).

animate_time_remapC

Set time remap keyframes for a layer (automatically enables time remapping)

Inputs: compId (required), layerIndex (required), keyframes (required), clearExisting.

apply_animation_presetC

Apply predefined animation presets

Inputs: compId (required), layerIndex (required), preset (required), duration, +2 more.

apply_easy_easeC

Apply Easy Ease to selected keyframes

Inputs: compId (required), layerIndex (required), propertyPath (required), keyframeIndices, +1 more.

apply_effectC

Apply an effect to a layer

Inputs: compId (required), layerIndex (required), effectName (required).

apply_expression_presetC

Apply a saved expression preset to a property

Inputs: compId (required), layerIndex (required), propertyPath (required), presetName (required), +1 more.

batch_create_layersA

Create multiple layers at once. IMPORTANT: Layers are created in order - first item becomes Layer 1 (top), last item becomes bottom layer. Create backgrounds LAST!

Inputs: compId (required), layers (required).

batch_executeA

Execute multiple commands in parallel. Commands are sent to After Effects simultaneously for faster processing.

Inputs: commands (required), sequential.

batch_keyframesB

Set multiple keyframes at once for better performance

Inputs: compId (required), keyframes (required).

batch_modify_layer_propertiesC

Modify properties of multiple layers at once for better performance

Inputs: compId (required), modifications (required).

batch_renderB

Add multiple compositions to render queue with same settings

Inputs: compIds (required), outputDirectory (required), outputFormat, outputModule.

batch_set_expressionsC

Set multiple expressions at once for better performance

Inputs: compId (required), expressions (required).

clear_render_queueC

Remove all items from the render queue

Inputs: confirmClear (required).

close_projectC

Close the current After Effects project

Inputs: saveChanges.

convert_keyframes_to_expressionC

Convert keyframed animation to an expression

Inputs: compId (required), layerIndex (required), propertyPath (required), expressionType, +1 more.

convert_mask_to_shapeC

Convert a mask to a shape layer path

Inputs: compId (required), layerIndex (required), maskIndex (required), createNewLayer, +1 more.

convert_text_to_shapeB

Convert text layer to shape layer (create outlines)

Inputs: compId (required), layerIndex (required), keepOriginal.

copy_keyframesC

Copy keyframes from one property to another

Inputs: compId (required), sourceLayer (required), sourceProperty (required), targetLayer (required), +3 more.

create_animation_curveC

Create an animation with custom curve

Inputs: compId (required), layerIndex (required), propertyPath (required), keyframes (required), +1 more.

create_compositionB

Create a new composition in the current project

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

create_projectC

Create a new After Effects project

Inputs: name (required), settings.

create_shape_from_pathC

Create a shape layer from a custom path

Inputs: compId (required), paths (required), name.

create_text_on_pathC

Create text that follows a path

Inputs: compId (required), text (required), path (required), textProperties.

delete_compositionC

Delete a composition from the project

Inputs: compId (required), confirmDelete (required).

delete_layerC

Delete a layer from a composition

Inputs: compId (required), layerIndex (required).

delete_maskC

Delete a mask from a layer

Inputs: compId (required), layerIndex (required), maskIndex (required).

duplicate_compositionC

Duplicate an existing composition

Inputs: compId (required), newName (required).

duplicate_layerC

Duplicate a layer within a composition

Inputs: compId (required), layerIndex (required).

enable_expressionC

Enable or disable an expression on a property

Inputs: compId (required), layerIndex (required), propertyPath (required), enabled (required).

execute_scriptC

Execute a custom ExtendScript in After Effects

Inputs: script (required), wrapInTransaction, undoGroupName.

export_frameC

Export a single frame from a composition

Inputs: compId (required), time (required), outputPath (required).

get_ae_versionB

Get After Effects version information

Inputs: no named parameters.

get_composition_infoC

Get detailed information about a specific composition

Inputs: compId (required).

get_expressionC

Get the expression from a layer property

Inputs: compId (required), layerIndex (required), propertyPath (required).

get_layer_infoC

Get detailed information about a layer

Inputs: compId (required), layerIndex (required).

get_mask_infoC

Get information about masks on a layer

Inputs: compId (required), layerIndex (required), maskIndex.

get_project_infoB

Get information about the current After Effects project

Inputs: no named parameters.

get_render_queueB

Get the status of all items in the render queue

Inputs: no named parameters.

import_footageC

Import footage (video, image, or audio) into the project

Inputs: filePath (required), folderName.

list_compositionsB

List all compositions in the current project

Inputs: no named parameters.

modify_compositionC

Modify properties of an existing composition

Inputs: compId (required), properties (required).

modify_layer_3d_propertiesC

Modify 3D properties of a layer

Inputs: compId (required), layerIndex (required), properties (required).

modify_layer_propertiesC

Modify transform properties of a layer

Inputs: compId (required), layerIndex (required), properties (required).

modify_mask_pathC

Modify the path of an existing mask

Inputs: compId (required), layerIndex (required), maskIndex (required), maskShape (required), +1 more.

modify_shape_pathC

Modify an existing shape path

Inputs: compId (required), layerIndex (required), pathPropertyPath (required), path (required), +1 more.

modify_text_propertiesC

Modify text formatting properties

Inputs: compId (required), layerIndex (required), properties (required).

offset_keyframesC

Offset keyframes in time

Inputs: compId (required), layerIndex (required), propertyPath (required), offset (required), +1 more.

open_projectC

Open an existing After Effects project file

Inputs: filePath (required).

pause_renderB

Pause the current render process

Inputs: no named parameters.

pingA

Test connectivity with After Effects CEP extension

Inputs: no named parameters.

remove_expressionC

Remove an expression from a layer property

Inputs: compId (required), layerIndex (required), propertyPath (required).

reorder_layersC

Change the order of layers in a composition

Inputs: compId (required), layerIndex (required), newIndex (required).

reverse_keyframesC

Reverse the order of keyframes

Inputs: compId (required), layerIndex (required), propertyPath (required).

save_expression_presetC

Save an expression as a preset for reuse

Inputs: name (required), expression (required), category, description, +1 more.

save_projectC

Save the current After Effects project

Inputs: filePath.

scale_keyframe_timingC

Scale the timing of keyframes (stretch or compress animation)

Inputs: compId (required), layerIndex (required), propertyPath (required), scaleFactor (required), +1 more.

set_expressionC

Set an expression on a layer property

Inputs: compId (required), layerIndex (required), propertyPath (required), expression (required), +1 more.

set_keyframeC

Set a keyframe for a layer property

Inputs: compId (required), layerIndex (required), property (required), time (required), +1 more.

set_keyframe_advancedC

Set a keyframe with interpolation options

Inputs: compId (required), layerIndex (required), propertyPath (required), time (required), +2 more.

set_keyframe_interpolation_typeC

Set interpolation type for keyframes

Inputs: compId (required), layerIndex (required), propertyPath (required), keyframeIndex (required), +2 more.

set_keyframe_velocityC

Set velocity (speed graph) for keyframes

Inputs: compId (required), layerIndex (required), propertyPath (required), keyframeIndex (required), +2 more.

set_layer_3dC

Enable or disable 3D for a layer

Inputs: compId (required), layerIndex (required), is3D (required).

set_layer_blend_modeC

Set the blending mode of a layer

Inputs: compId (required), layerIndex (required), blendMode (required).

set_layer_parentC

Set parent-child relationship between layers

Inputs: compId (required), childLayerIndex (required), parentLayerIndex.

set_layer_qualityC

Set the quality/sampling of a layer

Inputs: compId (required), layerIndex (required), quality (required).

set_layer_visibilityC

Control layer visibility settings

Inputs: compId (required), layerIndex (required), visible, solo, +2 more.

set_mask_propertiesC

Set properties of a mask

Inputs: compId (required), layerIndex (required), maskIndex (required), properties (required).

set_motion_blurC

Configure motion blur for a layer

Inputs: compId (required), layerIndex (required), enabled (required), adjustmentLayer.

set_spatial_tangentC

Set spatial tangents for position keyframes (motion path)

Inputs: compId (required), layerIndex (required), keyframeIndex (required), inTangent, +1 more.

set_temporal_easeC

Set temporal ease (bezier handles) for keyframes

Inputs: compId (required), layerIndex (required), propertyPath (required), keyframeIndex (required), +2 more.

set_time_remappingC

Enable time remapping for a layer

Inputs: compId (required), layerIndex (required), enabled (required).

set_track_matteC

Set track matte for a layer

Inputs: compId (required), layerIndex (required), matteType (required).

start_renderB

Start rendering all items in the render queue

Inputs: no named parameters.

stop_renderB

Stop the current render process

Inputs: no named parameters.

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 92 tools

    Disambiguation4/5

    Most tools have distinct purposes, but some overlap exists, such as 'add_text_layer' and 'add_text_layer_advanced' or 'set_keyframe' and 'set_keyframe_advanced', which could cause confusion. However, descriptions help clarify differences, and the majority target specific actions on distinct resources like layers, masks, or compositions.

    Naming Consistency5/5

    Tool names follow a highly consistent verb_noun pattern throughout, such as 'add_adjustment_layer', 'create_composition', and 'modify_layer_properties'. There are no deviations in style, making it easy to predict and understand the purpose of each tool.

    Tool Count2/5

    With 92 tools, the count is excessive for an MCP server, making it overwhelming and difficult to navigate. While After Effects is a complex application, this many tools suggests poor scoping and could lead to inefficiency in tool selection and usage.

    Completeness5/5

    The tool set provides comprehensive coverage for After Effects operations, including creation, modification, animation, rendering, and project management. There are no obvious gaps; it supports full CRUD/lifecycle workflows for compositions, layers, masks, and effects, ensuring agents can handle complex tasks without dead ends.

    Maintenance

    ActivityNo data
    ResponsivenessSyncing

    Related MCP Connectors