mcp-aftereffects
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-aftereffectsAudit the Main comp and report layers with expression errors or missing footage."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-aftereffects
Let an LLM drive Adobe After Effects. mcp-aftereffects bridges MCP-compatible clients (Claude Desktop, Claude Code, or any other stdio-capable MCP client) to a running After Effects session so the model can inspect project state, mutate comps and layers through atomic undo-grouped operations, checkpoint and restore entire projects as JSON, and verify its own edits by rendering frames — a typed tool layer instead of ad-hoc scripts pasted into the ExtendScript console.
Good for:
Comp audits — "List every layer in
Main; flag any with a disabled effect, a missing footage reference, or an expression error."Keyframe / expression work — "Add eased position keyframes to layer 3 between 0s and 2s, then put a wiggle expression on its opacity."
JSON checkpoint / restore — snapshot the whole project to a JSON document before risky changes, roll back with a single import.
Render-verify loops — mutate, render a frame with
ae_render_frame, look at the PNG, correct, repeat — the model checks its own work visually.
Do not proceed unless you understand what this does. An LLM with a live connection to After Effects can read your project, write to it, and (if you opt in) execute arbitrary code on your machine. In concrete terms:
Your project data leaves your machine. Comp and layer names, expression source, keyframe values, footage file paths — whatever the LLM reads via
ae_project_info/ae_comp_info/ae_layer_info/ae_project_export_json— is forwarded to your chosen LLM provider and may be logged by your MCP client. Under NDA or on unreleased work? Confirm with your studio/legal team first that the provider's retention policy and your client's logs are acceptable.The LLM gets write access. It can create, mutate, and delete comps, layers, keyframes, effects, masks, and expressions. Every call runs inside a single automatic undo group, so one Ctrl+Z reverts one call's project mutations — but
ae_save_projectoverwrites the file on disk, and files written outside the project (rendered PNGs, exported JSON) are not undoable. Note thatbatch.runis one call: a fifty-operation batch is a single Ctrl+Z.Arbitrary ExtendScript is off by default. The
eval.runoperation (called throughae_do) executes unrestricted ExtendScript with the full authority of the After Effects process: file I/O,system.callSystem,Socket. It exists only whileAE_MCP_ENABLE_EVAL=1is set — the escape hatch for anything the atomic operations don't cover. Turn it back off when you no longer need it.
AE_MCP_READONLY=1 turns point 2 off and overrides the point-3 opt-in. Point 1 still applies — the model can still read your project and forward it to your provider. See Capability policy.
Before first use: back up (or commit) your project, start on a throwaway .aep, and leave your MCP client's per-call approval prompts enabled.
How it works
MCP client (Claude Code, Claude Desktop, …)
│ stdio
▼
mcp-aftereffects (Node.js)
│ AfterFX.exe -r (Windows) / osascript (macOS) + file IPC
▼
After Effects (your running instance)There is nothing to install inside After Effects — no plugin, no panel, no socket. The server drives your existing AE instance — through AfterFX.exe -r on Windows, through AppleScript (osascript → DoScript) on macOS — one round trip per tool call. Every call runs inside a single automatic undo group, so one Ctrl+Z reverts exactly one call. Transport internals are documented in CONTRIBUTING.md.
Related MCP server: After Effects MCP Server
Requirements
Windows or macOS.
Adobe After Effects 2024, 2025, or 2026. Default install locations are probed automatically (2026 → 2025 → 2024):
C:/Program Files/Adobe/Adobe After Effects <year>/Support Files/AfterFX.exeon Windows,/Applications/Adobe After Effects <year>/Adobe After Effects <year>.appon macOS. Override withAE_MCP_EXEif yours lives elsewhere.Node.js 24+.
The AE preference
Preferences → Scripting & Expressions → Allow Scripts to Write Files and Access Networkmust be ON. Without it every call times out.macOS only: allow Automation. The first call makes macOS ask whether your MCP client (or terminal) may control After Effects. Approve it — or later under
System Settings → Privacy & Security → Automation. A denied permission shows up as calls failing fast with aNot authorizedtransport error.An MCP-compatible client (e.g. Claude Code).
Quickstart
Clone & build:
git clone https://github.com/kumoproductions/mcp-aftereffects.git cd mcp-aftereffects npm install npm run buildRegister with your MCP client. For Claude Code, add to your
.mcp.json(use the absolute path to your checkout):{ "mcpServers": { "aftereffects": { "command": "node", "args": ["/absolute/path/to/mcp-aftereffects/dist/index.js"] } } }Once the package is published to npm,
"command": "npx", "args": ["-y", "@kumoproductions/mcp-aftereffects"]works without a local checkout.Start After Effects manually and open (or create) a project. The transport targets the existing AE instance; a warm call takes ~500 ms–1 s. If AE isn't running, the first call cold-launches it (10–30 s) and is unreliable until AE has been through some user interaction — starting AE yourself first is the dependable path.
Then try:
"What comps are in this project? Add a red solid to
Mainand render frame 0 so I can see it."
The LLM will call ae_project_info → ae_do → ae_render_frame in sequence.
Environment variables
Var | Legacy alias | Default | Notes |
|
| probes AE 2026 → 2025 → 2024 in the default install locations | Windows: full path to |
| — | unset (write access on) |
|
| — | unset (all categories) | Comma-separated |
| — | unset ( |
|
| — |
| Relocate the file-IPC mailbox. Both sides must agree; the server publishes the location so the dispatcher can find it. Rarely needed outside of testing. |
Capability policy
Three independent switches. ae_catalog only ever advertises what the current policy will actually execute, so the model plans against what it can run rather than concluding the server is broken.
Setting | Effect |
|
|
|
|
| Adds |
ae_render_frame and ae_project_export_json survive read-only mode: they write files but never touch the project, and the render-verify loop is the point of an inspection session. Read that literally — read-only means "does not modify your project", not "has no side effects": both tools write to whatever absolute path they are given, so the model can still create or overwrite files anywhere After Effects can write (the one exception being the server's own IPC directory, which they refuse). The active policy is printed to stderr at startup and returned by ae_catalog.
Tools
11 tools. The LLM picks tools itself based on the prompt — you rarely invoke them directly. See docs/TOOLS.md for the generated per-tool reference.
Tool | Purpose |
| Project-level info: file path, dirty flag, all items with type/summary, active item. Start here. |
| Detailed comp info: size, fps, duration, work area, motion blur, layer summaries. Accepts a name or item id — or an array of them for one round trip. |
| Full layer info including Transform / Effects / Masks / Text / Contents property trees with keyframes. |
| Render a single PNG of a comp at a given time. The agent's "eyes" — pair with mutations for a visual feedback loop. |
| Save the project. Pass |
| Serialize the entire project to a JSON document: folders, comps, layers, keyframes, effects, masks, text, shape contents, markers (comp + layer), time remap, solids, and file footage references. Write to |
| Rebuild a project from a document produced by |
| AE version, build, and capability probe ( |
| Discover available atomic operations for |
| Execute an atomic operation by name (from |
| Ambient project/comp/selection state plus the |
Read-heavy work gets dedicated tools; the entire mutation surface hangs off a two-step model instead: ae_catalog enumerates atomic operations grouped by category with their parameter schemas, and ae_do executes one by name — validating arguments against the published schema before anything reaches After Effects, and returning ambient context (active comp, selection, project state) with every response. eval.run is the opt-in escape hatch when no atomic operation fits.
Usage patterns
Discovery: "what's in this project?"
ae_project_info()→ item list and the active item.ae_comp_info({ nameOrId: ["Main", "Intro"] })→ layer lists for several comps in one call.ae_layer_info({ compNameOrId: "Main", layerIndex: "all" })→ every layer's full property values and keyframes in one call (a single index or an array of indices also works).
Mutation with visual verification
ae_catalog({ category: "layer" })→ find the operation and its params.One
ae_docall both mutates and verifies —batch.runchildren run in order, andrender.frame/comp.inforide in the same call:ae_do({ operation: "batch.run", args: { ops: [ { operation: "keyframe.add", args: { comp: "Main", layer: 2, property: ["Transform", "Position"], time: 0, value: [960, 540] } }, { operation: "render.frame", args: { comp: "Main", time: 0, outPath: "/absolute/path/check.png" } } ] } })View
check.pngthrough your client's image capability to verify the result.If wrong, correct with another
ae_docall — oneproject.undoreverts the whole previous call, batch included.
Checkpoint / restore via JSON
Snapshot before risky changes:
ae_project_export_json({ outPath: "/absolute/path/before.json" }).Make changes via any combination of mutating tools.
Roll back if needed:
ae_project_import_json({ inPath: "/absolute/path/before.json", clearFirst: true }).Validate a document without touching AE:
ae_project_import_json({ inPath, dryRun: true })returns the plan (item counts) only.
Custom JSX via eval.run
Requires AE_MCP_ENABLE_EVAL=1. ae_do({ operation: "eval.run", args: { code: "..." } }) runs an ES3 function body: var only (no let/const, arrow functions, or template strings), classic for loops, and end with return <JSON-friendly-value>;. The code already runs inside the call's automatic undo group — never open your own. Helpers are in scope under AE.* (AE.findCompByNameOrId, AE.serializeLayerFull, AE.exportProject, …) and log("message") pushes breadcrumbs into the response; ae_context returns the full helper list and rules.
Troubleshooting
Every call times out. Check that After Effects is running with a project open, and that
Preferences → Scripting & Expressions → Allow Scripts to Write Files and Access Networkis ON — without it AE cannot write responses. On macOS, also check that your MCP client is allowed to control After Effects (System Settings → Privacy & Security → Automation).AE_NOT_FOUND. After Effects is not in the default install locations — setAE_MCP_EXE.AE warns "Attempt was made to run a second script while another script was already running". AE runs one script at a time and refuses any script delivered mid-run — and the warning dialog itself blocks all scripting until dismissed, so click OK first. Server-originated calls are serialized across processes by a busy lock, and a refused dispatch is retried automatically; the usual remaining causes are a user-installed panel/startup script running at that moment, or two different script-driving tools (another AE automation tool, or this server registered twice) driving the same AE — remove one.
A call hung After Effects:
taskkill /F /IM AfterFX.exe(Windows) /pkill -9 -f "Adobe After Effects"(macOS)Start AE again and open (or create) a project so it is in a "ready" state
Retry
Deeper digging: the server prints its mailbox path to stderr at startup;
dispatcher.login that directory records what each call did inside AE. A "no pending request" line there means AE and the server disagree about the mailbox location (typically AE running as a different user).
Known limitations
Import fidelity with missing footage.
ae_project_import_jsonaddresses layers by their original stacking index. When a layer is skipped during import (its source footage is absent and no placeholder resolves), later parent-index references can point at the wrong layer. Keep the referenced footage reachable, or expect parenting to need a manual touch-up on projects with missing sources.One After Effects instance. Multiple MCP clients are safe, but they all drive the same AE, and AE runs JSX single-threaded. Concurrent calls queue; they do not parallelize. Use
batch.runto collapse a burst of mutations into one round trip.Ambient context is not free in tokens. Every
ae_doresponse carries the active comp and full selected-layer list. It costs no extra round trip, but on a comp with hundreds of selected layers it is not nothing.macOS support is young. The macOS launcher (AppleScript /
osascript) is newer than the Windows path and has seen less real-world use. Issue reports are welcome.
Contributing
Bug reports, feature requests, and PRs are welcome. CONTRIBUTING.md covers the development setup, transport internals, testing tiers, and how to add tools and operations.
License
MIT © 2026 kumo.productions, Inc.
Trademarks
Adobe® and Adobe After Effects® are trademarks of Adobe Inc. This project is an independent, unofficial tool, not affiliated with or endorsed by Adobe.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityCmaintenanceAn MCP server that allows AI agents to control Adobe After Effects, enabling project inspection, composition creation, layer addition, file import, ExtendScript execution, and rendering via aerender.11MIT
- AlicenseCqualityCmaintenanceMCP server for controlling Adobe After Effects, enabling AI assistants to create compositions, manage layers, and animate properties.1359MIT
- AlicenseCqualityCmaintenanceLocal MCP server to control Adobe After Effects from AI clients like Claude and Cursor, supporting project composition, layer editing, animation, masks, and effects.1359MIT
- Alicense-qualityBmaintenanceA local MCP server that connects AI agents to Adobe After Effects, enabling reliable project inspection, reasoning, and controlled mutations through structured tools and typed patches.61,791MIT
Related MCP Connectors
MCP server for Hailuo (MiniMax) AI video generation
MCP server for Luma Dream Machine AI video generation
MCP server for Wan AI video generation
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kumoproductions/mcp-aftereffects'
If you have feedback or need assistance with the MCP directory API, please join our Discord server