mcp-after-effects
Summary: You can use Claude to inspect, edit, animate, render, and deliver projects in a running Adobe After Effects instance through validated MCP operations.
Inspect project, comp, layer, and AE version/context information, including batch layer/comp audits.
Render frames to PNG, multiple frames per call, contact sheets, and numeric image analysis for visual verification.
Execute 262 atomic operations across 31 categories, each wrapped in one undo group.
Animate with keyframe/easing tools, motion presets, kinetic text, PSD-to-animation pipelines, scene transitions, and speed ramps.
Build templates, lower thirds, title cards, logo reveals, and data-driven comps.
Manage expressions, layers, shapes, masks, effects, text, fonts, markers, footage, render queue, and Essential Graphics.
Export deliverables with presets, background renders, ffmpeg variants, and Premiere Pro round trips.
Save projects and export/import whole-project JSON, including dry-run validation.
Manage brand kits, logo libraries, project checkpoints, unused-footage review, and safe clean-up.
Read a built-in knowledge base on workflow, easing, typography, installed plugins/presets/MOGRTs, and client rules.
Use safety controls such as read-only mode, category scoping, dialog detection, and disabled arbitrary ExtendScript by default.
Click on "Deploy 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-after-effects animate this headline with a per-letter pop and eased keyframes"
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-after-effects is a Model Context Protocol server that connects Claude (Desktop or Code) to a running Adobe After Effects. Instead of a thin wrapper around ExtendScript, it ships the motion designer's toolbox as ready-made operations: eased keyframe presets, per-letter kinetic text, a PSD-to-animation pipeline, scene transitions, speed ramps, a Premiere Pro round trip, delivery presets, post-delivery clean-up and a knowledge base Claude reads before it plans. Every edit is one undo step, and nothing leaves your machine except what your MCP client sends to the model.
Contents
Related MCP server: ae-mcp
Features
Area | What you get |
Keyframe master | Write a whole keyframe list with easing in one call ( |
Motion presets | 30+ entrances and exits that keep the layer's final values (fade, rise, slide, pop, whip, flip, swing, zoom blur…), expression loops on top (float, sway, pulse, hop, flutter, twinkle) with sliders you can tune by hand, and templates for lower thirds, title cards and logo reveals. |
Kinetic text | Per-character, per-word or per-line text animators: typewriter, char pop, rise, drop, blur, wave, scale wave, jitter, tracking in. |
PSD → animation |
|
Scene transitions |
|
Speed ramp |
|
Premiere bridge |
|
Export presets |
|
Project clean-up |
|
Brand kits | Colours, fonts and logo per client ( |
Knowledge base |
|
Full After Effects surface | 262 operations across 31 categories: comps, layers, shapes, masks, effects, expressions, text, fonts, markers, footage, render queue, Essential Graphics, preferences, instances. |
How it works
flowchart LR
U([You]) -- chat --> C[Claude Desktop / Claude Code]
C -- MCP stdio --> S[mcp-after-effects<br/>Node.js server]
S --- K[(Knowledge base<br/>Markdown notes)]
S --- R[Operation registry<br/>262 ops, schemas, policy]
S -- file IPC<br/>request / response JSON --> D[dispatcher.jsx<br/>inside After Effects]
D -- ExtendScript<br/>one undo group per call --> AE[[Adobe After Effects]]
S -. ffmpeg / aerender .-> O[(Deliverables)]
S -. bridge handoff .-> P[[Premiere Pro MCP]]Claude sees a small set of tools (ae_context, ae_catalog, ae_do, ae_render_frame, ae_guide…). ae_catalog lists the operations and their parameters, ae_do runs one, and ae_render_frame lets Claude look at the result before it reports back. Arguments are validated against a schema in Node and reach ExtendScript only as serialised values, never as concatenated code.
Quick start
Requirements
macOS (the code paths for Windows exist, but day-to-day use and testing happen on macOS)
Adobe After Effects 2026 (2024 and 2025 should work)
Node.js 20 or newer
Claude Desktop or Claude Code
Optional:
ffmpegon yourPATHforrender.export
1. Install and build
git clone https://github.com/Miinwan/mcp-after-effects.git
cd mcp-after-effects
npm install
npm run build2. Prepare After Effects
Settings → Scripting & Expressions → Allow Scripts to Write Files and Access Network: on.
macOS will ask whether your MCP client may control After Effects the first time; allow it (System Settings → Privacy & Security → Automation). Accessibility permission is optional and makes dialog detection exact.
3. Register the server
Claude Desktop: add this to ~/Library/Application Support/Claude/claude_desktop_config.json, then restart Claude.
{
"mcpServers": {
"after-effects": {
"command": "node",
"args": ["/path/to/mcp-after-effects/dist/index.js"],
"env": {
"MCP_LOGO_DIR": "/path/to/Client Logos"
}
}
}
}Claude Code:
claude mcp add after-effects -- node /path/to/mcp-after-effects/dist/index.jsOpen a project in After Effects, start a chat, and ask Claude to describe the active comp. If it answers with the layer list, you are connected.
Using it from chat
You describe the result; Claude reads the relevant knowledge note, inspects the project, plans, applies and renders a frame to check its own work. Some prompts that work well:
Import
~/Desktop/poster.psdat 30 fps, 10 seconds, and animate it: the logo stays still, the headline pops in letter by letter, everything else rises in with a stagger.
The title comes in too fast. Make the entrance 0.3 s slower and softer, and add a light sweep after it lands.
Put a whip transition between Scene 1 and Scene 2, and a speed ramp with slow motion on the jump in the drone shot.
Review the animation in "Main" like a senior motion designer and fix the mechanical problems.
Export "Main" for YouTube 1080 and Reels, client "Acme", title "Launch teaser".
The job is delivered. Show me what footage and files are unused, then clean up after I confirm.
Main operations
Run ae_catalog for the full list with parameters. The ones you will meet most:
Category | Operations |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Top-level tools are listed in docs/TOOLS.md.
Safety
One undo group per call. Every
ae_docall is a single step in After Effects' history, so one Cmd+Z reverts whatever Claude just did. Batches (anim.apply_plan,psd.auto_animate) are one step too.Checkpoints.
project.checkpointsaves and copies the.aepinto a timestamped folder before big edits; destructive operations such asproject.clean_unusedtake one automatically.Dialog detection. A modal dialog freezes ExtendScript. The server detects it, quotes its text in a
DIALOG_OPENerror instead of hanging, andinstance.dismiss_dialogcancels it safely (nothing is saved or discarded).Read-only mode. Set
AE_MCP_READONLY=1to inspect, audit and render frames without any write operation being available.Scoped permissions.
AE_MCP_ALLOW_CATEGORIESlimits Claude to the categories you list (for example onlykeyframe,text).No arbitrary code by default. Free-form ExtendScript (
eval.run) is disabled unless you setAE_MCP_ENABLE_EVAL=1. Enabling it gives the model the same reach as any script on your machine.Nothing is deleted permanently. File clean-up goes through Finder's Trash and only touches files inside the job folder.
Project contents Claude reads (comp and layer names, expressions, file paths) are sent to the model provider by your MCP client. For projects under NDA, check your provider's data policy first, and try new workflows on a copy of the.aep.
Configuration
Variable | Purpose |
|
|
| Comma-separated categories Claude may use. |
|
|
| Path to the After Effects executable when it is not in the standard location. |
| Default After Effects instance to address (see below). |
| Use another folder as the knowledge base. |
| Where brand kits are stored. |
| Client logo library (one folder per client). |
| Path to |
Machine-specific values can also live in config.local.json at the repo root (git-ignored). Copy config.local.example.json and set, for example, logoDir. Environment variables take precedence.
Multiple After Effects instances
After Effects can run several copies at once (-m). Instances started that way only receive scripts through a small resident agent, installed once per After Effects version:
node dist/index.js install-agentThen every tool takes an optional instance argument, AE_MCP_INSTANCE sets the default, and instance.list shows what is live. instance.start { name, copyFrom } launches a worker on a copy of the project; project.merge brings its work back into the main project. node dist/index.js agent-status tells you when the agent needs reinstalling.
Troubleshooting
Symptom | Fix |
Calls time out | After Effects running, a project open, "Allow Scripts to Write Files and Access Network" on, Automation permission granted. |
| After Effects is showing a modal (often "files are missing", hidden behind the main window). Read the quoted text, then close it or call |
| Instances started with |
Safe Mode "We detected a crash" | An After Effects process was killed. Dismiss the dialog on screen; prefer |
| Install |
Roadmap
Motion presets, kinetic text, PSD pipeline, scene transitions, speed ramp
Premiere Pro round trip, delivery presets, post-delivery clean-up
Knowledge base with installed plug-ins, presets and MOGRTs
Beat detection from music to time cuts and accents
Richer 3D (Advanced 3D renderer, camera moves from a brief)
Shape-layer icon and lottie-style loops library
Windows test pass
Development
npm run build # compile TypeScript to dist/
npm test # unit tests, incl. an offline After Effects mock that runs the generated JSX (e2e suites skip themselves without After Effects)
npm run check # typecheck, lint, format, JSX ES3 lint, server.json, tool docs
npm run quet-plugin # rescan installed plug-ins into the knowledge baseArchitecture, the operation contract and how to add an operation are in CONTRIBUTING.md. Release notes are in CHANGELOG.md.
License
MIT © 2026 Miinwan.
Adobe® and After Effects® are trademarks of Adobe Inc. This is an independent project, not affiliated with or endorsed by Adobe.
Available Tools
12 toolsae_catalogOperation catalogARead-only
Discover available atomic operations for ae_do. Without args: all categories with their operation names. With a category: detailed params per operation. Only operations this server will actually execute are listed.
Inputs: category.
ae_comp_infoComp infoARead-only
Detailed comp info: size, fps, duration, work area, motion blur, layer summaries. Pass a comp name or item id — or an ARRAY of them to fetch several comps in one call.
Inputs: nameOrId (required), instance.
ae_contextSession contextARead-only
Ambient context: project state, active comp, selected layers, item list, AE.* helpers, ES3 rules, and the undo contract (every call = one auto undo group). Call at session start; then rely on ae_do response context.
Inputs: instance.
ae_doExecute operationADestructive
Execute an atomic operation by name (from ae_catalog). Arguments are validated against the operation's declared parameters before anything reaches AE. Have more than one operation to run? Wrap them in ONE batch.run instead of several ae_do calls — read/verify steps (comp.info, layer.info, render.frame) can ride in the same batch. Every call is automatically wrapped in ONE undo group: a single Ctrl+Z (or project.undo) reverts the entire call, and a batch.run counts as one call. Never call app.beginUndoGroup/endUndoGroup in eval.run code — the wrapper already did. The exception is undo/redo itself (project.undo, command.execute id 16/2035): those run outside the group and cannot ride inside a batch.run. Response includes ambient context (active comp, selected layers, project state) at zero extra round trips. Example: ae_do({ operation: 'keyframe.add', args: { comp: 'Main', layer: 1, property: ['Transform','Position'], time: 2, value: [960,540] } })
Inputs: operation (required), args, instance, timeoutMs.
ae_guideKnowledge baseARead-only
The motion-design and studio knowledge this MCP carries: workflow rules, easing and timing, kinetic typography, PSD-to-animation recipes, the user's installed plugins / transitions / presets / MOGRTs and when to use them, client brand rules. Call with no arguments to list topics, topic to read one, query to search all of them. Read the relevant topic BEFORE planning a non-trivial animation or choosing an effect, so the plan uses what is actually installed.
Inputs: query, topic.
ae_layer_infoLayer infoARead-only
Full layer info: transform, effects, masks, text, shape contents, keyframes (incl. interpolation names and bezier ease speed/influence). layerIndex accepts one index, an ARRAY of indices, or 'all' — auditing a whole comp is one call. detail:'summary' drops properties still at their default value (unkeyed, no expression) — start there for audits; the full tree is often 100KB+ per comp. Set includeProperties=false to skip the property tree walk entirely.
Inputs: layerIndex (required), compNameOrId (required), detail, instance, +1 more.
ae_project_export_jsonExport project JSONA
Serialize the entire project to JSON (folders, comps, layers, keyframes, effects, shapes, markers, time remap, solids, file refs). Write to outPath or return inline.
Inputs: pretty, outPath, instance.
ae_project_import_jsonImport project JSONADestructive
Rebuild the project from JSON (produced by ae_project_export_json). Supports clearFirst, dryRun (validate-only), skipValidation.
Inputs: json, dryRun, inPath, instance, +2 more.
ae_project_infoProject infoARead-only
Project-level info: file path, dirty flag, all items with type/summary, active item. Start here.
Inputs: instance.
ae_render_frameRender frameA
Render one or more frames to PNG. Use to visually verify edits. The agent's 'eyes' — pair with mutations for a visual feedback loop. Headless and deterministic. Pass time for one frame, or times for several in ONE call (motion checks): files land at _.png and are listed in frames. contactSheet tiles every frame into one labelled PNG (_sheet.png) so a motion check is one image; analyze measures each capture (uniform edge bands = black bars / transparent margins, content bounds, coverage) so off-frame elements and letterboxing are caught numerically. In color-managed projects (workingSpace != None) the capture applies AE's own display transform via a transient OCIO Display Transform adjustment layer, and the PNG comes back viewer-accurate and sRGB-tagged. Where that layer cannot be used — read-only mode, an AE without the OCIO effect, or a failed capture calibration — the result falls back to a pure-math ACES conversion or to raw values with an explicit colorWarning; check colorPipeline / colorWarning on the response.
Inputs: outPath (required), compNameOrId (required), time, times, +7 more.
ae_save_projectSave projectBDestructive
Save the project. Pass path for Save As.
Inputs: path, instance.
ae_version_infoVersion infoARead-only
AE version, build, capabilities (saveFrameToPng, app.effects, Socket). Call at session start to know what APIs are available.
Inputs: instance.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 12 tools
Most tools have clearly distinct purposes: info readers target specific AE objects, render/save/export/import are unambiguous, and ae_catalog/ae_do form an obvious discovery/execution pair. The only real overlap is the trio ae_project_info, ae_version_info, and ae_context, all of which claim to be 'call at session start' and return partially overlapping project state, which could cause a redundant call.
The ae_ prefix is applied uniformly and names are readable, but conventions are mixed within that prefix: some are noun_style (ae_project_info, ae_comp_info, ae_layer_info), some are verb_noun (ae_render_frame, ae_save_project), and some are bare verbs or nouns (ae_do, ae_catalog, ae_guide). Predictable enough to navigate, but not a single consistent pattern.
Twelve tools is well-scoped for a Creative-After-Effects bridge: a small set of read/render/persist tools plus ae_catalog+ae_do as a deliberate escape hatch for the long tail of operations. Nothing feels padded, and the generic dispatch tool avoids an explosion of per-operation endpoints.
The surface covers the full lifecycle — inspect (project/version/comp/layer), mutate (ae_do), verify visually (ae_render_frame with contact sheets and analysis), persist (save, export/import JSON), and learn (ae_guide, ae_context). Minor gaps exist around explicit undo/redo and error recovery entry points, but ae_do's project.undo/command.execute coverage means agents are unlikely to hit a dead end.
Maintenance
Related MCP Connectors
The agentic video editor for ChatGPT and Claude. Ask in your chat and it cuts, captions, adds music, titles and motion graphics on a real timeline you can open and adjust.
Video editing skills, motion design prompts and studio concepts for creators who edit with Claude.
Brand-aware creative studio for Claude: 200+ tools for on-brand ads, video, email and campaigns.
One sentence to a finished animation: your AI writes motion graphics as code and checks real frames.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceDrives After Effects, Photoshop, Illustrator, Premiere Pro (and Character Animator puppet authoring) from Claude.95 npm8MIT
- AlicenseAqualityBmaintenanceEnables AI assistants to operate Adobe After Effects with the dexterity of an editor: reading projects, creating and rigging layers, setting real velocity curves, animating text, building native SVG-based shapes, applying effects, expressions, masks, and viewing render snapshots to verify results.1718 npm1MIT
- AlicenseNot gradedqualityBmaintenanceEnables MCP clients like Claude Code, Claude Desktop, and VS Code to build and edit inside a running Adobe After Effects, covering comps, layers, keyframes, effects, text animators, markers, and renders. It supports batched tool calls with single-step undo, frame previews for self-verification, reusable style tokens, and four one-call studio rigs.MIT
- AlicenseAqualityBmaintenanceLets Claude drive Adobe After Effects to build comps, animate layers, apply effects, write expressions, and render frames back so the model can see its own work.31174 npm5MIT