Skip to main content
Glama
README.md
![MCP for After Effects](https://raw.githubusercontent.com/kumoproductions/mcp-aftereffects/main/assets/ogp.png)

# mcp-aftereffects

[![CI](https://github.com/kumoproductions/mcp-aftereffects/actions/workflows/ci.yml/badge.svg)](https://github.com/kumoproductions/mcp-aftereffects/actions/workflows/ci.yml)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)
[![Node](https://img.shields.io/badge/node-%3E%3D24-informational)](package.json)
[![After Effects](https://img.shields.io/badge/After%20Effects-2024%E2%80%932026-informational)](https://www.adobe.com/products/aftereffects.html)
[![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20macOS-informational)](#requirements)

English | [日本語](./README.ja.md)

An MCP server that enables AI to control Adobe After Effects.

You can connect MCP-compatible clients such as Claude Code or Claude Desktop to a running instance of After Effects, allowing the AI to handle everything from project inspection and editing to rendering.

There is no need to provide detailed instructions on how to operate After Effects. Simply explain what you want to achieve in natural language, and the AI will check the project status and perform the necessary operations.

**Windows / macOS · After Effects 2024–2026 · Node.js 24+**

> [!CAUTION]
> **This tool directly manipulates After Effects projects via AI.**
>
> The AI can read project contents and modify compositions, layers, effects, keyframes, and more.
>
> Additionally, information the AI reads from the project may be sent to the AI service you are using. This may include composition names, layer names, expressions, keyframes, footage file paths, etc.
>
> If using this for projects under NDA or unreleased works, please check the data retention policy of the AI service you are using and the logs of your MCP client beforehand.
>
> For first-time use, we recommend trying it with a backup or a test .aep file rather than a critical project.

## Capabilities

With mcp-aftereffects, you can request the AI to perform After Effects tasks.

- Inspect project contents
- Investigate compositions and layers
- Edit layers and properties
- Add or modify keyframes
- Edit effects and masks
- Edit text and shapes
- Set expressions
- Save projects
- Create and restore project backups
- Render frames to preview changes

For example, you can give instructions like these:

> "Import this Illustrator file and create some nice-looking text motion."

> "Apply the revisions mentioned in this PDF."

> "Point out any issues in this AEP."

Even for complex tasks, the AI can combine necessary operations while checking the project status.

## Requirements

- Windows or macOS
- Adobe After Effects 2024 / 2025 / 2026
- Node.js 24 or higher
- MCP-compatible client (Claude Code, Claude Desktop, etc.)

No plugins or panels need to be installed within After Effects for the usual setup: one After Effects at a time. Driving several instances at once (`AfterFX.exe -m`) is the one case that needs a small startup script — see [Multiple After Effects Instances](#multiple-after-effects-instances).

### After Effects Settings

In After Effects Preferences, please turn ON the following:

**Preferences → Scripting & Expressions → "Allow Scripts to Write Files and Access Network"**

If this setting is OFF, the AI will not be able to perform operations correctly.

### For macOS

Upon first use, macOS may request permission for the client to control After Effects.

If it is not permitted, go to:

**System Settings → Privacy & Security → Automation**

and allow your MCP client or terminal to control After Effects.

## Quick Start

No installation is required on the After Effects side as long as you run one After Effects at a time.

First, launch After Effects and open the project you wish to operate on.

Next, register mcp-aftereffects with your MCP client.

### Claude Code

```bash
claude mcp add aftereffects -- npx -y @kumoproductions/mcp-aftereffects
```

### Claude Desktop

Add the following to your MCP configuration file:

```json
{
  "mcpServers": {
    "aftereffects": {
      "command": "npx",
      "args": ["-y", "@kumoproductions/mcp-aftereffects"]
    }
  }
}
```

If you are using other MCP clients, please follow their respective registration methods for MCP servers.

### Read-Only Mode

If you want to inspect or audit project content without making any changes, you can use read-only mode.

Add the following to your MCP client configuration:

```json
{
  "mcpServers": {
    "aftereffects": {
      "command": "npx",
      "args": ["-y", "@kumoproductions/mcp-aftereffects"],
      "env": {
        "AE_MCP_READONLY": "1"
      }
    }
  }
}
```

You can still investigate the project and render frames for preview.

## Advanced Settings

Usually, no configuration is necessary.

In some environments, such as when After Effects is installed in a non-standard location, additional settings may be required.

### Specifying After Effects Location

If After Effects is not in the standard installation path, you can specify the executable location using `AE_MCP_EXE`.

By default, it automatically searches for After Effects in the order of 2026 → 2025 → 2024.

### Limiting Operation Scope

Using `AE_MCP_ALLOW_CATEGORIES`, you can restrict the types of operations permitted for the AI.

For example, you can limit permissions to only keyframe-related operations depending on your use case.

### Multiple After Effects Instances

After Effects can run several copies at once (`AfterFX.exe -m`), each with its own project. Out of the box the server reaches only the first, normally started copy: instances started with `-m` never receive the scripts it launches. To drive them, install the resident agent once:

```bash
npx @kumoproductions/mcp-aftereffects install-agent
```

This drops a small startup script into After Effects' user-level `Scripts/Startup` folder (no admin rights needed; run it again after an After Effects update). From the next launch on, every instance — including `-m` ones — serves a mailbox of its own, and the server picks which instance to talk to:

- `AE_MCP_INSTANCE` in the server's `env` names the default instance for the whole session, either by the id the instance was started with or by the project file it has open (`"shotA"`, `"shotA.aep"`, or a full path when two projects share a name).
- Every tool takes an optional `instance` argument to address another instance for a single call.
- `ae_context` and `ae_do instance.list` show what is live.

To name an instance at launch, set `AE_MCP_INSTANCE` in the environment that starts it:

```bat
set AE_MCP_INSTANCE=shotA
"C:\Program Files\Adobe\Adobe After Effects 2026\Support Files\AfterFX.exe" -m
```

An unnamed instance gets a random id (`ae-…`) and can still be addressed by its project file. With exactly one live agent no configuration is needed at all; with several live and none named, calls fail with `NO_INSTANCE` instead of guessing.

The agent keeps polling its mailbox for as long as After Effects runs, server or no server, so the mailbox directory under your per-user temp folder stays the trust boundary for the whole session. The mailbox location is fixed into the startup script when you install it; if you change `AE_MCP_RUNTIME_DIR`, run `install-agent` again (`agent-status` tells you when it is out of date).

### Parallel Work with Worker Instances

The AI can start instances itself. `instance.start` launches a new After Effects, waits for it to register, and can open a **copy** of a project — the safe way to work on something the main instance has open:

1. `instance.start { name: "w1", copyFrom: "<main .aep>" }` — a worker with its own copy
2. Work in it: any tool with `instance: "w1"`
3. `ae_save_project` with `instance: "w1"`
4. `project.merge { path: "<the copy>" }` in the main instance — the copy comes in as a folder; nothing already in the project is touched
5. `instance.stop { name: "w1" }`

Several workers can run at once. Each is a full After Effects, so plan on a few gigabytes of memory per instance.

## Execution of Arbitrary ExtendScript

mcp-aftereffects includes an advanced feature to execute arbitrary ExtendScript for processes that cannot be handled by standard operations.

This feature is **disabled by default**.

> [!CAUTION]
> **Enabling arbitrary ExtendScript allows operations outside of After Effects.**
>
> **This may permit actions that affect your entire computer**, such as file or process manipulation.
>
> This feature is disabled by default. Enable it only if necessary.

To enable it, set the following in your MCP server environment variables:

```json
"env": {
  "AE_MCP_ENABLE_EVAL": "1"
}
```

Use this feature only for advanced processing that cannot be achieved through regular operations or when custom ExtendScript is required.

## Official Releases

> [!NOTE]
> **Official releases are distributed only through npm and GitHub Releases.**
>
> Please exercise caution if obtaining packages claiming to be `@kumoproductions/mcp-aftereffects` or files claiming to be this server from any other location.

## Troubleshooting

### Operations Timeout

Please check the following:

- Is After Effects running?
- Is a project open?
- Is "Allow Scripts to Write Files and Access Network" turned ON?
- On macOS, is the Automation permission enabled?

### `NO_INSTANCE`

The call had no After Effects to go to. Either every running After Effects was started with `-m` and the agent is not installed (see [Multiple After Effects Instances](#multiple-after-effects-instances)), the instance named by `AE_MCP_INSTANCE` / `instance` is not running or is stuck in a dialog, or several agents are live and none was named. The error lists what is live.

### `DIALOG_OPEN` — After Effects Is Showing a Dialog

While After Effects shows a modal dialog, no script runs at all — neither the resident agent nor a `-r` launch. The most common cause is opening a project whose footage or fonts are missing ("N files are missing since you last saved this project"), and the dialog is often hidden behind the main window. The error quotes the dialog's text (on macOS, see below).

- `instance.dialogs` lists the dialogs every running After Effects is showing.
- `instance.dismiss_dialog { id }` closes it with Escape, the dialog's cancel action: a warning is acknowledged, and a question such as "Save changes before closing?" is cancelled rather than answered — nothing is saved or discarded. A dialog you want answered differently has to be clicked by you.
- The agent resumes on its own once the dialog is gone; no restart is needed.
- To avoid the missing-files warning in the first place, start After Effects without a project and open it with `project.open`, which suppresses the dialog.

Dialog detection works on Windows and macOS. On macOS it has two tiers:

- With Accessibility permission for the app that runs the MCP server (System Settings > Privacy & Security > Accessibility — your terminal, or the MCP client app), every dialog is found and its text read, and `instance.dismiss_dialog` works the same way as on Windows: Escape, the cancel action. A "Save changes before closing?" prompt is cancelled (the project stays open and unsaved); a warning or script `alert()` is acknowledged. After Effects is not brought to the front.
- Without that permission, dialogs are only guessed at from the window list: most are found, with empty text (`accessibility: false`), but some — such as the Adobe licensing prompt — are missed, and none can be dismissed from here.

Verified on After Effects 26.5 / macOS 26.4 with the missing-files warning, a script `alert()`, the save prompt and the System Compatibility Report.

### After Effects Stops at a "We detected a crash" Dialog

If an After Effects process was killed (Task Manager, `taskkill`, a crash), the next launch shows the Safe Mode dialog and waits for a click — including instances started by `instance.start`, which then fail with `did not register`. Dismiss the dialog on screen. An instance that quits normally does not trigger it, so prefer `instance.stop` over killing.

### After Effects Not Found

If you have installed After Effects in a non-standard location, please set `AE_MCP_EXE`.

If the issue persists, please report it via an Issue or to @cumuloworks.

## Developer Information

For information regarding internal MCP tools, communication methods with After Effects, ExtendScript, test environments, and how to add custom operations, please refer to the developer documentation.

- `docs/TOOLS.md`
- `CONTRIBUTING.md`

## Contributing

Bug reports, feature requests, and Pull Requests are welcome.

For information on setting up the development environment and the internal architecture, please refer to `CONTRIBUTING.md`.

## License

MIT © 2026 kumo.productions, Inc.

## Trademark

Adobe® and Adobe After Effects® are trademarks of Adobe Inc.

This project is an independent, unofficial tool and is **not affiliated with or endorsed by Adobe**.

TDQS

A4/5.0

Scored across 11 tools

Disambiguation4/5

The read tools are cleanly tiered (project_info, comp_info, layer_info) and the catalog/do pair is a clear discovery-vs-execute split. There is mild overlap among the three 'session start' calls (ae_context, ae_project_info, ae_version_info), which all expose ambient project/session state, but descriptions differentiate them adequately.

Naming Consistency5/5

Every tool uses the ae_ snake_case prefix with a predictable pattern (ae_<resource>_info, ae_<resource>_<action>). No mixed conventions or vague verbs; the naming is uniform and readable throughout.

Tool Count5/5

11 tools is well within the sweet spot and each earns its place: read tiers, mutation engine, visual verification, serialization round-trip, and discovery helpers. The catalog/do indirection keeps the surface small while remaining extensible.

Completeness4/5

Covers the full lifecycle — inspect, mutate (via ae_do + ae_catalog), verify visually (render_frame), persist (save/export/import), and introspect capabilities. The only soft spot is that broad mutation coverage depends entirely on the referenced catalog, which is opaque from the tool list, but export/import plus the do engine make dead ends unlikely.

Maintenance

ActivityMaintained
ResponsivenessWithin a week