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-effectsanimate 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.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Filter by category. Omit to list all categories with operation counts, then drill into a specific category. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the tool's behavior beyond the read-only annotation: it lists categories vs. detailed params, and highlights that only executable operations are listed, setting accurate expectations. The readOnlyHint=true annotation aligns with the description's non-mutating purpose; no contradiction exists, and the description adds useful context about the two output modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long and front-loaded with the primary purpose. Both sentences earn their place: the first states what the tool does, and the second details the two invocation modes and the guarantee about listed operations. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple catalog tool with one optional parameter, read-only annotation, and no output schema, the description provides sufficient context: it explains the return content (categories or params) and the filtering guarantee. Minor omission is that it doesn't explicitly mention operation counts, but the schema's parameter description covers that, making it complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides a 100%-coverage description for the single parameter, including behavior when omitted. The tool description reinforces and expands on this by clarifying the exact difference between no-args and with-category outputs, adding value beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a discovery mechanism for atomic operations available to ae_do, with a specific verb ('Discover') and a defined resource (available atomic operations). It distinguishes itself from sibling tools like ae_do (which executes operations) and other project/layer tools that serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains usage without args (list all categories) and with a category (detailed params per operation), giving clear context for both modes. It also states that only operations the server will execute are listed, which is a key guideline for filtering. It does not name specific alternatives, but the distinction from ae_do is implicit in the wording.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | After Effects instance to address for this call, when several are running (AfterFX.exe -m): an instance id (its AE_MCP_INSTANCE at launch, or the `name` given to instance.start) or the name of the project file it has open. Omit to use this server's default (AE_MCP_INSTANCE, else the single live instance). ae_context and ae_do instance.list show what is live. | |
| nameOrId | Yes | Composition name (exact match) or numeric item id — or an array of either to batch several comps into one round trip. If you don't know any, call ae_project_info first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint, so safety is covered. The description adds meaningful behavioral context by listing the exact comp properties returned and noting that an array fetches several comps in one call, which tells the agent what to expect beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences with zero filler. The key capabilities (returned fields, batching) are front-loaded and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only info tool with no output schema, the description adequately enumerates the returned data and batching behavior. It could mention error cases or use of the instance parameter, but the schema already covers instance details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds a semantic nuance: passing an array fetches several comps in one call, clarifying batching behavior beyond the schema's type definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Detailed comp info' and enumerates the returned properties (size, fps, duration, work area, motion blur, layer summaries). It does not explicitly name sibling tools to differentiate, so not a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use, when-not-to-use, or alternative-tool guidance. The description only covers parameter input (name/ID or array). The schema mentions calling ae_project_info first, but that context is absent from the description itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | After Effects instance to address for this call, when several are running (AfterFX.exe -m): an instance id (its AE_MCP_INSTANCE at launch, or the `name` given to instance.start) or the name of the project file it has open. Omit to use this server's default (AE_MCP_INSTANCE, else the single live instance). ae_context and ae_do instance.list show what is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes the safety profile, and the description adds useful behavioral context by enumerating the returned payload and disclosing the undo contract (one auto undo group per call). It does not say anything about cost, size, or staleness of the returned context, which keeps it out of 5 territory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the payload list front-loaded and the usage instruction following it; no filler. The list of context items is dense but each element earns its place by telling the agent what it gets back.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so by enumerating the context categories. Combined with a fully documented optional parameter and readOnlyHint, an agent has enough to call it correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single optional `instance` parameter is fully documented in the schema (100% coverage), including fallback behavior and where to list live instances. The description adds no meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the resource (ambient session context) and enumerates the concrete contents: project state, active comp, selected layers, item list, AE.* helpers, ES3 rules, and the undo contract. This clearly distinguishes it from narrower siblings like ae_project_info, ae_comp_info, and ae_layer_info, though it never says so explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Call at session start; then rely on ae_do response context' gives a clear lifecycle rule for when to use it and when not to repeat it. It does not name the sibling info tools as alternatives, so it falls short of a full when/when-not/alternative statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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] } })
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | Arguments for the operation. Validated against ae_catalog's declared params: missing required args, wrong types, and unknown keys are rejected before AE is contacted. Omit for zero-param operations. | |
| instance | No | After Effects instance to address for this call, when several are running (AfterFX.exe -m): an instance id (its AE_MCP_INSTANCE at launch, or the `name` given to instance.start) or the name of the project file it has open. Omit to use this server's default (AE_MCP_INSTANCE, else the single live instance). ae_context and ae_do instance.list show what is live. | |
| operation | Yes | Operation name from ae_catalog (e.g. 'layer.create_solid', 'keyframe.add'). | |
| timeoutMs | No | Per-call timeout in milliseconds (default 60000). Raise for long operations like render.start or big batch.run calls. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The single destructiveHint=true annotation is far from the whole story, and the description fills the gap well: validation happens before AE is contacted, every call is wrapped in one undo group (whole call reverts with one Ctrl+Z), batch.run counts as one call, and the beginUndoGroup/endUndoGroup prohibition is stated. It stops short of describing failure/timeout behavior in detail, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and then layers on batching, undo semantics, the eval.run caveat, and the response note. Dense but each sentence carries actionable information; the trailing example is slightly long but earns its place by illustrating arg structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic dispatcher over arbitrary operations with no output schema, this is complete: it explains where operation names come from, how args are validated, undo/batch semantics, the undo/redo exception, instance addressing, and that the response includes ambient context at no extra round trip.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already documented and the baseline is 3. The description nonetheless adds meaning beyond the schema: operation names are sourced from ae_catalog, args are validated against declared params (missing/wrong-type/unknown rejected), and the worked example shows the real args shape for keyframe.add.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Execute an atomic operation by name (from ae_catalog).' It clearly differentiates itself from siblings — ae_catalog lists/names operations, while ae_do executes them — and the inline keyframe.add example makes the role concrete without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing rules: use ae_catalog for operation names, prefer ONE batch.run over several ae_do calls, and a stated exception (undo/redo run outside the undo group and cannot ride in a batch). This is genuine when/when-not/alternative guidance, not inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Words to search for across every topic. | |
| topic | No | Topic name as listed (case-insensitive). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered and the bar is lower. The description usefully discloses the three access modes and the case-insensitive topic matching, but says nothing about result shape, topic granularity, or size of the knowledge base — the agent cannot tell how much text a read will return.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what the knowledge covers, then the invocation modes, then the when-to-use guidance — a sensible order. The content enumeration in the opening sentence is long but each item signals a distinct capability an agent might need to locate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With two optional params, full schema coverage, no output schema and readOnly annotations, nothing material is missing — the no-argument mode gives the agent a self-discovery path, so the absence of a topic listing in the description is not a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real semantics: that `query` spans every topic, that `topic` matches names as listed, and that omitting both yields a topic index. That is meaningfully more than the per-field schema strings provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and enumerates its contents (workflow rules, easing/timing, kinetic typography, PSD-to-animation, installed plugins/presets/MOGRTs, brand rules). This is clearly distinguished from the sibling probes (ae_comp_info, ae_layer_info) which return live app state rather than authored knowledge.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives the selection rule: no argument lists topics, `topic` reads one, `query` searches all, plus a when-to-use directive ('read the relevant topic BEFORE planning a non-trivial animation or choosing an effect'). This is exactly the when/when-not/alternatives pattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | 'summary' omits properties still at their default value (no keyframes, no expression, never touched) — typically 5-10x smaller. Group skeletons are kept, so effects/masks still show. Default 'full'. | |
| instance | No | After Effects instance to address for this call, when several are running (AfterFX.exe -m): an instance id (its AE_MCP_INSTANCE at launch, or the `name` given to instance.start) or the name of the project file it has open. Omit to use this server's default (AE_MCP_INSTANCE, else the single live instance). ae_context and ae_do instance.list show what is live. | |
| layerIndex | Yes | 1-based layer index — or an array of indices, or 'all' for every layer in the comp, returned together in one round trip. | |
| compNameOrId | Yes | Composition name (exact match) or numeric item id. | |
| includeProperties | No | Include the full property tree (Transform/Effects/Masks/Text). Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description carries extra weight and delivers: it warns the full tree is often 100KB+ per comp and that includeProperties=false skips the property walk entirely. This is actionable performance/cost context beyond the structured fields. It does not cover auth or instance-resolution behavior, which the schema fields handle instead.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, front-loaded with the returned content and then the scoping/size guidance; each clause carries information. Slightly long, but nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by enumerating the returned structure, the size expectation, and the detail/includeProperties downgrades. Combined with 100% parameter coverage, an agent has enough to call it correctly; only the instance-resolution nuance and no explicit sibling routing leave minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter is already documented in the schema, so the baseline is 3. The description's layerIndex sentence largely restates the schema's anyOf (single index, array, 'all'), though it adds the audit rationale for batching. It adds little semantic detail the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource with an explicit enumeration of what is returned (transform, effects, masks, text, shape contents, keyframes with interpolation names). It is clearly distinguishable from siblings like ae_comp_info or ae_project_info. An agent can tell exactly what this call yields without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real usage direction: use detail:'summary' to start audits, and 'all' to audit a whole comp in one round trip. It explains the flag trade-offs but never names or excludes a sibling tool, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| pretty | No | Pretty-print the JSON (2-space indent). Default: true when writing to disk, false otherwise. | |
| outPath | No | If set, write the exported JSON to this absolute path on disk. If omitted, the JSON is returned inline in the tool response (can get large). | |
| instance | No | After Effects instance to address for this call, when several are running (AfterFX.exe -m): an instance id (its AE_MCP_INSTANCE at launch, or the `name` given to instance.start) or the name of the project file it has open. Omit to use this server's default (AE_MCP_INSTANCE, else the single live instance). ae_context and ae_do instance.list show what is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only destructiveHint=false in annotations, the description carries most of the burden and does well: it discloses the disk-write side effect, that inline output may be large, and the full scope of what is serialized. It stops short of noting performance cost on large projects or any error behavior, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with zero filler. The scope enumeration leads, and the output-destination rule follows immediately, making it fully front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description compensates by enumerating the exact JSON contents (comps, layers, keyframes, effects, etc.) and flagging that inline responses can be large. Combined with a fully documented parameter schema, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and all three parameters (pretty, outPath, instance) have thorough descriptions, so the schema does the heavy lifting. The description's mention of outPath vs inline is a restatement of what the schema already documents, adding no format or syntax detail beyond it — the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (serialize/export) and resource (entire project) and enumerates exactly what is captured — folders, comps, layers, keyframes, effects, shapes, markers, time remap, solids, file refs. This clearly distinguishes it from the inverse sibling ae_project_import_json and from ae_save_project, which persists rather than serializes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the mode selection rule — set `outPath` to write to disk, omit it to get the JSON inline — which is the key decision an agent must make. It does not, however, say when to prefer this over siblings like ae_project_info (summary) or ae_save_project (persist), so routing among related tools is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ae_project_import_jsonImport project JSONADestructive
Rebuild the project from JSON (produced by ae_project_export_json). Supports clearFirst, dryRun (validate-only), skipValidation.
| Name | Required | Description | Default |
|---|---|---|---|
| json | No | Inline JSON document (object, not string). Mutually exclusive with `inPath`. | |
| dryRun | No | If true, validate the document and return a plan without touching AE. Useful for debugging malformed exports. | |
| inPath | No | Absolute path to a JSON document produced by ae_project_export_json. Mutually exclusive with `json`. | |
| instance | No | After Effects instance to address for this call, when several are running (AfterFX.exe -m): an instance id (its AE_MCP_INSTANCE at launch, or the `name` given to instance.start) or the name of the project file it has open. Omit to use this server's default (AE_MCP_INSTANCE, else the single live instance). ae_context and ae_do instance.list show what is live. | |
| clearFirst | No | Remove all existing items from the current project before importing. Default: false (appends). | |
| skipValidation | No | Skip Node-side schema validation. Only use if you trust the input and want to hand broken data to AE for diagnosis. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, and the schema fully documents clearFirst's destructive behavior and skipValidation's risk. The description's recitation of parameter names adds no behavioral context beyond the structured data, and says nothing about auth, instance defaults, or failure semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and provenance in one clause, then lists flags tersely. Slightly fragmentary ('Supports ...'), but nothing wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter mutation tool with no output schema, the description plus the fully-covered schema and the destructiveHint annotation cover what an agent needs to invoke it. It stops short of describing return/plan output or rollback behavior after a destructive clearFirst import.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters (including the mutually-exclusive json/inPath pair and the instance addressing) are already fully documented in the schema. The description only restates three flag names, adding no meaning beyond 'dryRun (validate-only)' which the schema itself states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Rebuild the project from JSON') and explicitly identifies the producing sibling (ae_project_export_json), which no sibling tool list otherwise resolves. An agent can tell this is the inverse of the export tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The pairing with ae_project_export_json implies when to reach for this (round-tripping an export), and 'dryRun (validate-only)' hints at a pre-flight use. But there is no explicit when-not or guidance on choosing between inline `json` vs `inPath`, leaving usage to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ae_project_infoProject infoARead-only
Project-level info: file path, dirty flag, all items with type/summary, active item. Start here.
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | After Effects instance to address for this call, when several are running (AfterFX.exe -m): an instance id (its AE_MCP_INSTANCE at launch, or the `name` given to instance.start) or the name of the project file it has open. Omit to use this server's default (AE_MCP_INSTANCE, else the single live instance). ae_context and ae_do instance.list show what is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the safety profile, and the description adds real behavioral value by disclosing the return payload (dirty flag, item list with type/summary, active item) even though no output schema exists. It does not cover the multi-instance addressing behavior, but that is documented in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence listing the payload, followed by a two-word directive. No filler, and the enumerable content is front-loaded before the 'Start here' call to action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-param, read-only info tool with no output schema, describing the returned fields is the key completeness requirement and it is met. The only gap is clarifying its position relative to the comp/layer info siblings, which 'Start here' only loosely implies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one optional parameter and schema description coverage is 100%, so the detailed `instance` semantics live entirely in the schema. The description adds nothing about instance selection, which is acceptable at the baseline given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (project) and enumerates exactly what is returned: file path, dirty flag, items with type/summary, active item. This distinguishes it implicitly from ae_comp_info and ae_layer_info, which are the comp- and layer-level counterparts, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Start here.' gives an implied entry-point hint, telling the agent this is a reasonable first call before drilling into comps/layers. There is no explicit when-not-to-use or named alternative, so guidance remains inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| time | No | Time in seconds to render. Give exactly one of `time` or `times`. | |
| times | No | Several times in seconds, rendered in ONE call. Files are written as <outPath stem>_<index><ext> and reported in `frames` (index-aligned). | |
| analyze | No | Measure each capture: uniform bands at every edge (width + transparent/color — black bars, letterboxing, empty margins), the bounding box of non-background pixels, coverage, mean RGB. Reported per frame as `analysis` (measured on the capture before color conversion). | |
| outPath | Yes | Absolute path to write the PNG. Parent directory is created if missing. With `times`, used as the naming stem for every frame. | |
| instance | No | After Effects instance to address for this call, when several are running (AfterFX.exe -m): an instance id (its AE_MCP_INSTANCE at launch, or the `name` given to instance.start) or the name of the project file it has open. Omit to use this server's default (AE_MCP_INSTANCE, else the single live instance). ae_context and ae_do instance.list show what is live. | |
| returnImage | No | Attach the result as an image in the tool response (the contact sheet when one was made, otherwise the first frame), downscaled to fit `previewMaxSide`. Use this to SEE the frame yourself instead of only getting a file path. Default true. | |
| colorManaged | No | 'auto' (default): detect the working space and return a viewer-accurate, 8-bit sRGB-tagged PNG. 'off': raw legacy output (16-bit, untagged, working-space values — dark/wrong-looking in color-managed projects). | |
| compNameOrId | Yes | Composition name or numeric item id. | |
| contactSheet | No | Tile all rendered frames into ONE labelled PNG (#index + time above each tile). Pass {} for defaults. | |
| previewMaxSide | No | Longest side of the attached preview image in px (default 1024). | |
| useDisplayStartTime | No | If true, times are interpreted relative to comp.displayStartTime. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only carry destructiveHint=false; the description shouldered the rest and does well on execution traits (headless, deterministic, file naming, contact-sheet defaults). The color-management section is unusually candid about fallbacks and the `colorWarning` escape hatch. However, it omits cost/latency expectations for multi-frame renders up to 32 items and says nothing about mutation of disk state beyond created parent directories.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, and each subsequent sentence covers a distinct decision (single vs multi-frame, contact sheet, analysis, color pipeline). It is a single dense paragraph of ~150 words that would scan faster as a short list, and the color-management sentence is long enough to bury its actionable tail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 11 parameters, a nested object, and no output schema, the description carries the response contract itself: it names `frames`, `analysis`, `colorPipeline`, and `colorWarning`, and explains what lands on disk. An agent has everything needed to call it correctly and interpret what comes back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description still adds value by explaining the interaction between `time`/`times` (mutually exclusive, index-aligned output), how `outPath` doubles as a naming stem, and why `colorManaged: off` yields dark/wrong-looking results. These are behavioral consequences rather than restatements, though much of the per-parameter detail is already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+output format ("Render one or more frames to PNG") and immediately frames the intent with a metaphor plus a concrete use ("visually verify edits", "pair with mutations for a visual feedback loop"). This clearly separates it from the sibling info/context tools, none of which produce pixels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing rules: use `time` for one frame, `times` for several in ONE call for motion checks, `contactSheet` when a motion check should be one image, `analyze` when you want numeric checks instead of eyeballing. It also states the pairing pattern (mutations + render = feedback loop), so an agent knows when to reach for it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ae_save_projectSave projectBDestructive
Save the project. Pass path for Save As.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Optional absolute path to save the project to (Save As). If omitted, save to the existing path — errors if the project has never been saved. | |
| instance | No | After Effects instance to address for this call, when several are running (AfterFX.exe -m): an instance id (its AE_MCP_INSTANCE at launch, or the `name` given to instance.start) or the name of the project file it has open. Omit to use this server's default (AE_MCP_INSTANCE, else the single live instance). ae_context and ae_do instance.list show what is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so overwrite risk is flagged structurally, but the description adds no behavioral context of its own (no overwrite warning, no undo/irreversibility note, no permission requirements). With annotations carrying the safety profile, the description contributes essentially nothing beyond restating the name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the Save As affordance front-loaded. Nothing wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter save tool with 100% schema coverage and a destructiveHint annotation, the definition is largely complete; the only real gap is that overwrite/irreversibility context is left entirely to the annotation rather than being reinforced in text.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the `path` description already explains the Save As behavior and the never-saved error. The description merely repeats a subset ('Pass `path` for Save As') without adding format or constraint detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Save the project') and distinguishes the Save As variant via the `path` argument. Clear enough for an agent, though there is no need for sibling differentiation since no other tool in the list saves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The line 'Pass `path` for Save As' implies when to supply the argument, but the description itself gives no when-not guidance or note about the failure case; that context lives only in the schema's parameter description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ae_version_infoVersion infoARead-only
AE version, build, capabilities (saveFrameToPng, app.effects, Socket). Call at session start to know what APIs are available.
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | After Effects instance to address for this call, when several are running (AfterFX.exe -m): an instance id (its AE_MCP_INSTANCE at launch, or the `name` given to instance.start) or the name of the project file it has open. Omit to use this server's default (AE_MCP_INSTANCE, else the single live instance). ae_context and ae_do instance.list show what is live. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this is a safe read. Beyond that, the description discloses what the response reports (capability availability), which is decision-relevant for an agent choosing which APIs to attempt. It does not cover instance-resolution failure behavior, but the annotation carries the safety burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences: the first declares exactly what comes back, the second declares when to call it. No filler, no restatement of the title, and the highest-value information leads.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the work of sketching the return payload (version, build, capability list), which is sufficient for a trivially simple zero-required-param info tool. Only minor detail, such as the shape of the capability list, is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single optional 'instance' parameter and schema coverage is 100%, so the schema already documents instance resolution thoroughly. The description adds nothing about parameters, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact resource contents (AE version, build, capability flags like saveFrameToPng, app.effects, Socket), which is far more specific than a tautology on 'Version info'. It implicitly distinguishes itself from info siblings such as ae_project_info or ae_comp_info by scoping to the host application itself rather than a document, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Call at session start to know what APIs are available' gives an explicit trigger condition, which is exactly the kind of when-to-call guidance most descriptions lack. There is no when-not or named alternative, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
12 tool updates
v1.0.0- First observed
ae_catalog - First observed
ae_comp_info - First observed
ae_context - First observed
ae_do - First observed
ae_guide - First observed
ae_layer_info - First observed
ae_project_export_json - First observed
ae_project_import_json - First observed
ae_project_info - First observed
ae_render_frame - First observed
ae_save_project - First observed
ae_version_info
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
Video editing skills, motion design prompts and studio concepts for creators who edit with Claude.
- mcpOAuthio.styleforge
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.
Compose, edit and render video with your AI agent. Turn footage into finished edits with content-aware reframing, word-timed captions and motion graphics. Hosted MCP with OAuth sign-in; cloud processing uses credits.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceDrives After Effects, Photoshop, Illustrator, Premiere Pro (and Character Animator puppet authoring) from Claude.70 npm1MIT
- 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.176 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
- AlicenseAqualityAmaintenanceLets 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.83173 npm1MIT