npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@engine-room/after-effects-mcp

v0.5.1

Published

Control Adobe After Effects with AI — describe the animation you want and it gets built: layers, keyframes, effects, expressions and text, all editable afterwards.

Readme

After Effects MCP

Control Adobe After Effects with AI.

Describe the animation you want — a lower third, a logo reveal, an animated counter — and it gets built in your project: layers, keyframes, easing, effects, expressions and text. All of it editable afterwards, exactly like work you made by hand.

npm CI License: MIT After Effects 2026 Platforms MCP

Works with Claude, Cursor, VS Code, Codex, Windsurf and any other MCP client.


✨ What it builds

Six scenes from one quarterly-report sequence, each in a different visual style. Every layer, keyframe and effect below was built through these tools.


🚀 Getting started

Three steps, and you only do the first two once.

You'll need: After Effects 2026, on macOS or Windows.

1️⃣ Install

Pick the row that matches how you work, and open it for the steps.

Download the latest .mcpb file and open it. Claude Desktop takes it from there — no terminal, nothing else to install.

Add this to your client's MCP configuration:

{
  "mcpServers": {
    "after-effects": {
      "command": "npx",
      "args": ["-y", "@engine-room/after-effects-mcp"]
    }
  }
}

VS Code uses a slightly different shape — put this in .vscode/mcp.json:

{
  "servers": {
    "after-effects": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@engine-room/after-effects-mcp"]
    }
  }
}

Restart your client afterwards.

Download the build for your machine from the latest release, unzip it anywhere, and point your client at the executable inside:

{
  "mcpServers": {
    "after-effects": {
      "command": "/Users/you/Applications/after-effects-mcp/after-effects-mcp"
    }
  }
}

Keep the unzipped folder together — the After Effects panel lives next to the executable.

The macOS builds are signed and notarized. The Windows build is unsigned, so SmartScreen may warn the first time you run it.

This repository doubles as a plugin marketplace:

/plugin marketplace add Engine-Room-Games/after-effects-mcp
/plugin install after-effects@engine-room

2️⃣ Set up After Effects

Quit After Effects if it's open, then ask your assistant:

Set up After Effects.

It installs a small panel into After Effects, which is how the tools talk to it. Open After Effects when it's finished and you're ready to go. 🎉

Prefer to leave After Effects open? That works too — you'll just be asked to restart it at the end.

3️⃣ Start animating

Open the project you want to work on, then say what you want:

Build a lower third that says Chapter One, sliding in from the left.

Your assistant reads the current state of your comp, makes the change, and can screenshot the result to check its own work. Everything it builds is ordinary, editable After Effects work — keyframes you can drag, effects you can dial in.

Two commands worth knowing, in any client that supports MCP prompts:

| Command | What it does | |---|---| | /init-after-effects | 🧭 Walks you through setup and offers to capture your style | | /create-style-guide | 🎨 Teaches it what your work should look like |


🎨 Your house style

Ask for a style guide and point at a comp you already like. Your colours, fonts, sizes and timing get read off it and saved as house-style.md next to your After Effects project — and everything built afterwards follows it.

It sits beside the .aep, so it travels with the project and works in every client. It's plain markdown, so you can edit it in any text editor.

⚠️ Your project needs to have been saved at least once, or there's no folder to put it in.

A style guide that works is specific: #131521 at 92% opacity, not "dark and clean". The most useful lines are the prohibitions — "never put text directly on footage", "keep total runtime under 8 seconds". Ask for a style guide and you'll be walked through it.

Separately, "set up a project folder for me" creates a folder for one video, series or client, with a brief your assistant reads and a renders/ directory. It writes whichever rules file your client actually reads — AGENTS.md, CLAUDE.md, .cursor/rules/, and so on. From a terminal, the same thing is:

npx @engine-room/after-effects-mcp init my-video

Updating the tools never touches either file.


🔄 Updating

Two pieces update separately, and the After Effects panel does not update itself.

  1. The tools — reinstall the .mcpb, download the new standalone build, or just restart your client if you're on npx.

  2. The panel — quit After Effects, then say:

    Update the After Effects panel.

Reopen After Effects and it's running the new version.

If you forget the second step, nothing breaks silently: the next thing you ask for stops with a plain explanation, and your assistant walks you through it.


| Group | Tools | |---|---| | Comps (10) | list_comps, get_comp, get_comp_tree, create_comp, set_comp, delete_comp, set_active_comp, duplicate_comp, snapshot_comp, diff_comp | | Layers (15) | list_layers, get_layer_full, create_{text,shape,solid,null,adjustment,precomp,camera,light}_layer, duplicate_layer, delete_layer, set_layer, parent_layer, reorder_layer | | Transforms (1) | set_transform — position, scale, rotation, anchor, opacity; 2D and 3D; optionally keyframed | | Keyframes (6) | add_keyframe, remove_keyframe, get_keyframes, set_interpolation, set_temporal_ease, set_spatial_tangents | | Expressions (4) | get_expression, set_expression, toggle_expression, clear_expression | | Effects (6) | list_effects, add_effect, remove_effect, set_effect_param, set_effect_enabled, list_available_effects | | Text (2) | set_text, add_text_animator | | Shapes (3) | set_shape_path, add_shape_content, set_shape_property | | Masks (3) | add_mask, set_mask, remove_mask | | Markers (2) | add_marker, remove_marker | | Vision (2) | screenshot_frame, screenshot_layer | | Batch (1) | run_batch | | Footage (3) | import_footage, create_footage_layer, purge_unused_footage — remove the solids (or any footage) no comp uses, with a dry run | | Audio (1) | place_audio_cues — a whole cue list placed as one undo step | | Motion Graphics (1) | export_mogrt — export a comp as a .mogrt template for Premiere | | Explore (2) | get_project_summary, find_layers | | Raw (1) | run_jsx | | House style (2) | get_house_style, set_house_style | | Jobs (3) | await_job, get_job, cancel_job | | Setup (3) | check_setup, setup_panel, init_project | | Guidance (1) | ae_guide | | Issues (4) | list_known_issues, log_issue, mark_issue_reported, archive_issue |

A few behave differently from the rest:

  • get_layer_full returns a layer's transforms with their keyframes and expressions, every effect with every parameter, masks, markers and visible bounds — in one call.
  • run_batch runs many operations in a single pass. Up to 500 of them that is one undo step; past that it runs in the background, streams progress, and lands as one undo step per chunk — After Effects will not keep a single undo group across a long job, so the result tells the assistant exactly how many steps the work took. Ask for a single undo step at any size with singleUndo, at the cost of freezing After Effects until it finishes.
  • screenshot_frame and screenshot_layer are for occasional checks, not for reviewing motion frame by frame. To judge movement, screenshot_frame takes several times at once and returns them as one labelled contact sheet — one image instead of several. On large comps it renders at reduced resolution unless you ask otherwise.
  • import_footage checks what After Effects actually produced. An SVG whose viewBox asks for one shape and imports at another is a known After Effects bug that renders as nothing at all, with no error — so the import is refused and explained rather than left to fail silently later.
  • export_mogrt writes a Motion Graphics template for Premiere. It suppresses the modal dialogs that would otherwise sit there waiting for a click, and can set the thumbnail from any frame you choose, rather than the first one — which is usually black if the comp fades up.
  • snapshot_comp and diff_comp answer "what did that change actually do" without reading the whole comp back — the assistant fingerprints it before the change and asks afterwards what moved.
  • run_jsx runs arbitrary ExtendScript for anything the other tools don't cover. Long scripts can be run from a file so they never fill up the conversation.
  • ae_guide is how the assistant reads its own working guidance — the same text this server publishes as MCP resources and ships to Claude Code as skills.

Start here: ask your assistant to check the After Effects setup. It reports which part is broken and what to do about it.

| Symptom | Cause and fix | |---|---| | "Cannot reach the After Effects panel" | After Effects isn't running, or the panel isn't installed. Ask it to set up After Effects; if AE was closed, just open it afterwards. | | "The panel did not answer within 120 seconds" | Not the same thing. After Effects is busy — usually a long script, or a dialog waiting for a click behind another window. Wait a minute and check again before restarting anything; it normally comes back on its own. | | "The After Effects panel is out of date" | The tools were updated but the panel wasn't. Ask it to update the panel, then restart AE. | | "…updated on disk, but After Effects is still running the previous version" | The update landed; AE just hasn't restarted. Quit and reopen it. Updating again won't help. | | Panel never loads, but setup looks correct | On macOS, reboot once. Some builds cache the Adobe setting until a restart. | | A panel answers, but the setup check reports none installed | An older install is still serving. Remove it from the CEP extensions folder, reinstall, restart AE. | | "No project folder to write to" | Your client didn't tell the server where it's working. Say which folder you want. | | Style guide can't be saved | The After Effects project has never been saved. Save it, then try again. | | You need the panel's own log | In After Effects: Window → Extensions → AE MCP Bridge. |

If your work legitimately takes longer. A heavy render or a deliberately long script can pass the limit honestly. Set AE_MCP_OP_TIMEOUT_MS in the server's environment to a larger number of milliseconds and it applies to every operation:

{
  "mcpServers": {
    "after-effects": {
      "command": "npx",
      "args": ["-y", "@engine-room/after-effects-mcp"],
      "env": { "AE_MCP_OP_TIMEOUT_MS": "600000" }
    }
  }
}

The issue notebook. These tools have rough edges. When your assistant hits one and works out a way around it, it writes the problem and the fix into .ae-mcp/issues/ in your project folder — plain text files you can read, edit or delete. The next time the same thing fails, the error itself points at that note, so nothing has to be re-read up front. Notes that go quiet for a month, or that a newer version has fixed, drop out of the list on their own (they are kept, just hidden), and a note about something the maintainers already know can be retired outright. The folder keeps itself out of version control.

Reporting a bug. If the problem looks like ours rather than yours, you'll be offered the chance to pass it on, or you can start it yourself with /report-ae-issue. It writes the report, shows it to you, and only sends it once you say yes. Nothing about your own work — comp names, file paths, clients — goes into it. Sending needs the GitHub CLI; without it you get a prefilled link to click.

macOS and Windows — the only two platforms After Effects runs on. Two things differ, and both are handled for you:

| | macOS | Windows | |---|---|---| | Panel location | ~/Library/Application Support/Adobe/CEP/extensions | %APPDATA%\Adobe\CEP\extensions | | Unsigned-panel setting | defaults preference | HKCU\Software\Adobe\CSXS.* registry value |

macOS is the more exercised of the two; issue reports are welcome.

Signing. The macOS binaries in each release are signed and notarized by Engine Room, so they run without warnings. The Windows binary is unsigned — SmartScreen may warn on first run — because that needs a separate certificate. If you fork this project and build your own binaries, they'll be unsigned and Gatekeeper will refuse to launch them until you sign with your own Developer ID. The npx path has no such constraint.

Limitations.

  • The After Effects panel is unsigned, so loading it requires Adobe's PlayerDebugMode, which the setup step enables. This is Adobe's documented path for unsigned extensions.
  • saveFrameToPng is community-known rather than officially documented. It works, but alpha edges can be imperfect on some comps.
  • A long synchronous loop in run_jsx will freeze the After Effects UI. Use run_batch for bulk work.
  • Not covered: the render queue, footage import and replacement, and application preferences.
git clone https://github.com/Engine-Room-Games/after-effects-mcp.git
cd after-effects-mcp
npm install && npm run build
npm run install:panel
npm run doctor

| Command | Purpose | |---|---| | make build | Compile TypeScript, the guides and the ExtendScript bundle | | make jsx | Rebuild bundle.jsx and hot-reload it into a running After Effects | | make watch | TypeScript watch mode | | make doctor | Diagnose the install | | make verify | Build, check version strings and generated files agree, dry-run the package | | make artifacts | Build the .mcpb and standalone binaries without releasing | | make release | Bump the patch version, build and sign every artifact, tag, and publish | | make release 1.1.0 | The same with an explicit version |

Adding a tool takes three edits: a zod schema in packages/shared/src/schemas.ts, a handler in the matching packages/jsx/*.jsx module, and a description in packages/mcp-server/src/tools/descriptions.ts. Registration is automatic.

Guidance prose is written once in packages/mcp-server/src/{guides,prompts}/*.md and generated into the MCP resources, the ae_guide tool, the server's instructions, and the Claude Code skills and commands. Never edit the generated copies.

Releases are cut from a Mac with a Developer ID certificate; see scripts/sign-and-notarize.sh for the environment it expects. See CLAUDE.md for the architecture and the ExtendScript conventions, and docs/ for the known-fragile areas and the verification recipes.