Skip to main content
Glama
brandkickagency

After Effects MCP Server

README.md
![Brandkick](brandkick-logo.png)

**Brought to you by [Brandkick](https://brandkick.pl)** - We grow brands like they're our own.

---

# After Effects MCP Server

A Model Context Protocol server for Adobe After Effects. Enables AI assistants to control After Effects through a WebSocket-based CEP panel.

## Requirements

- Adobe After Effects 2021+ (versions 18.x - 26.x)
- Node.js 18+
- pnpm

## Installation

```bash
git clone https://github.com/Brandkick/after-effects-mcp.git
cd after-effects-mcp
pnpm install
just setup
```

## Configuration

Add to Claude Code config (`~/.claude.json`):

```json
{
  "mcpServers": {
    "aftereffects": {
      "command": "node",
      "args": ["/path/to/after-effects-mcp/build/index.js"]
    }
  }
}
```

## Usage

1. Claude Code starts the MCP server automatically
2. Open After Effects
3. Open the panel: Window > Extensions > MCP Bridge

## Setup: JPEG Output Template

For `exportCompFrame` to work, create a JPEG output template in After Effects:

1. Create any composition
2. File > Export > Add to Render Queue
3. Click "Output Module" settings
4. Set Format to "JPEG Sequence"
5. Set Quality to 50-70% (faster previews, smaller files)
6. Optionally resize: check "Resize" and set to 50% or a fixed size like 960x540
7. Click the template dropdown (top of dialog)
8. Select "Save As New Template..."
9. Name it exactly: `JPEG Sequence`
10. Click OK

This only needs to be done once per After Effects installation.

## MCP Tools

| Tool                 | Description                                        |
| -------------------- | -------------------------------------------------- |
| `run-script`         | Execute any command (see Commands below)           |
| `getHelp`            | List all available commands                        |
| `createComposition`  | Create a new composition                           |
| `setLayerKeyframe`   | Set a single keyframe                              |
| `setLayerKeyframes`  | Set multiple keyframes (batch)                     |
| `setLayerExpression` | Apply expressions to properties                    |
| `setEffectKeyframes` | Animate effect properties (batch)                  |
| `importFootage`      | Import files into project                          |
| `addToRenderQueue`   | Queue composition for render                       |
| `exportCompFrame`    | Export single frame as PNG for visual verification |

## Commands

All commands can be called via `run-script`. Use `getHelp` to see full documentation.

### Project

- `getProjectInfo`, `newProject`, `saveProject`, `saveProjectAs`, `closeProject`
- `createFolder`, `moveProjectItem`, `deleteProjectItem`
- `importFootage`, `importPlaceholder`, `replaceFootage`

### Composition

- `listCompositions`, `getActiveComposition`, `createComposition`
- `setCompSettings` - Modify duration, work area, frame rate, motion blur

### Layers

- `createTextLayer`, `createShapeLayer`, `createSolidLayer`, `addLayerToComp`
- `getLayerInfo`, `setLayerProperties` - Name, transform, timing
- `setLayerFlags` - Visibility, solo, shy, locked, motion blur, 3D
- `deleteLayer`, `duplicateLayer`, `reorderLayer`, `precomposeLayer`
- `setParentLayer`, `setTrackMatte`
- `setTextProperties` - Font, size, color, justification

### Animation

- `setLayerKeyframe`, `setLayerKeyframes` (batch)
- `setLayerExpression`
- `getKeyframes`, `deleteKeyframe`, `deleteKeyframes` (batch)
- `setKeyframeEasing`, `setKeyframesEasing` (batch)
- `copyKeyframes`

### Effects

- `applyEffect`, `applyEffectTemplate`
- `listEffects`, `listAvailableEffects`, `getEffectProperties`
- `setEffectKeyframe`, `setEffectKeyframes` (batch)

### Time & Markers

- `setLayerTime` - In/out point, start time, stretch
- `enableTimeRemapping`, `setTimeRemap`
- `addMarker`, `getMarkers`, `removeMarker`

### Camera & 3D

- `createCamera`, `createLight`
- `setCameraProperties`, `setLightProperties`
- `set3DLayer`, `setMaterialOptions`

### Masks & Shapes

- `addMask`, `setMaskPath`, `setMaskProperties`, `deleteMask`
- `addShapePath`, `setShapePathVertices`, `addShapeModifier`

### Render

- `addToRenderQueue`, `renderQueue`, `queueInAME`
- `getRenderQueueStatus`, `clearRenderQueue`
- `exportCompFrame` - Visual verification

### Utility

- `getSelection`, `setSelection`
- `beginUndoGroup`, `endUndoGroup`, `getUndoGroupStatus`
- `getPropertyInfo`, `listFonts`

## MCP Resources

| Resource                        | Description                        |
| ------------------------------- | ---------------------------------- |
| `aftereffects://compositions`   | List all compositions              |
| `aftereffects://workflow-guide` | Visual verification workflow guide |

## Development

```bash
just setup   # Build and install CEP panel with debug mode
just build   # Build only
just start   # Start MCP server (for testing)
just clean   # Remove build directory
```

## Architecture

```
Claude Code <--stdio--> MCP Server <--WebSocket:8765--> CEP Panel <--CSInterface--> ExtendScript
```

See [ARCHITECTURE.md](ARCHITECTURE.md) for design principles.

## Project Structure

```
after-effects-mcp/
├── src/
│   ├── index.ts              # MCP server, tool definitions
│   ├── websocket-server.ts   # WebSocket server
│   ├── logger.ts             # Logging utility
│   ├── shared/
│   │   ├── commands.ts       # Command registry (single source of truth)
│   │   └── config.ts         # Configuration and timeouts
│   └── cep/                   # CEP extension
│       ├── CSXS/manifest.xml
│       ├── index.html
│       ├── js/main.js         # WebSocket client
│       └── jsx/modules/       # ExtendScript (modular)
│           ├── 00-polyfills.jsx
│           ├── 01-helpers.jsx
│           ├── 10-project.jsx
│           ├── 11-layer.jsx
│           ├── 12-keyframe.jsx
│           ├── 13-time.jsx
│           ├── 14-render.jsx
│           ├── 15-camera.jsx
│           ├── 16-mask.jsx
│           ├── 17-shape.jsx
│           ├── 18-selection.jsx
│           ├── 19-discovery.jsx
│           └── 99-dispatcher.jsx
├── scripts/
│   ├── install-cep.js
│   ├── build-jsx.ts          # Concatenates JSX modules
│   └── generate-cep-config.ts
├── tests/
├── justfile
└── package.json
```

## License

MIT

TDQS

A3.5/5.0

Scored across 10 tools

Disambiguation5/5

Each tool has a distinct purpose: keyframe tools are differentiated by single/multiple and layer/effect scope, and the rest target different operations (composition, import, render, export, help, script execution). No two tools are easily confused.

Naming Consistency4/5

Most tools follow a camelCase verbNoun pattern (createComposition, setLayerKeyframes, importFootage). The only exception is run-script, which uses lowercase with a hyphen, creating a minor inconsistency.

Tool Count5/5

With 10 tools, the set is well-scoped for After Effects automation—covering composition creation, footage import, animation, rendering, and frame export. Each tool earns its place without redundancy.

Completeness3/5

The toolset covers core workflows but misses common operations like adding layers, setting static layer properties, or managing project files. The run-script tool can mitigate these gaps, but it is a workaround rather than a dedicated interface.

Maintenance

ActivityInactive
ResponsivenessNo issues