After Effects MCP Server
# After Effects MCP Server
[](https://nodejs.org/)
[](https://www.adobe.com/products/aftereffects.html)
[](#development)
[](LICENSE)
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.
- 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`).
## 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 |
| 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:
```bash
git clone https://github.com/TheLlamainator/after-effects-mcp.git
cd after-effects-mcp
npm install
```
2. Build:
```bash
npm run build
```
3. Install bridge script:
```bash
npm run install-bridge
```
4. 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`.
```json
{
"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:
```json
{
"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:
```json
{
"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:
```json
{
"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
```mermaid
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
```mermaid
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`
### 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:
```bash
npm run build
```
Install bridge:
```bash
npm run install-bridge
```
Run server directly:
```bash
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`.
## Inspo
https://github.com/Dakkshin/after-effects-mcp
I took the base code from them but added a lot
TDQS
Scored across 30 tools
Several tools overlap in purpose, e.g., apply-effect, add-any-effect, and mcp_aftereffects_applyEffect all apply effects but with different naming. Similarly, apply-effect-template and mcp_aftereffects_applyEffectTemplate are redundant. This duplication confuses tool selection.
Naming conventions are inconsistent: camelCase (setLayerExpression, setLayerKeyframe) mixed with snake_case (add-any-effect, set-effect-property). Some tools have a 'mcp_aftereffects_' prefix while others do not, lacking a predictable pattern.
30 tools is somewhat high, and several are redundant (multiple apply effect tools). The server would benefit from consolidation to reduce clutter, but the count is not extremely excessive.
The tool set covers effects, markers, audio, and keyframes but lacks basic layer creation (e.g., text, shape layers) and import/export/rendering. Essential workflows have significant gaps.