Skip to main content
Glama

MCP for After Effects

mcp-aftereffects

CI License: MIT Node After Effects Platform

English | 日本語

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

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

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

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

CAUTION

This tool directly manipulates After Effects projects via AI.

The AI can read project contents and modify compositions, layers, effects, keyframes, and more.

Additionally, information the AI reads from the project may be sent to the AI service you are using. This may include composition names, layer names, expressions, keyframes, footage file paths, etc.

If using this for projects under NDA or unreleased works, please check the data retention policy of the AI service you are using and the logs of your MCP client beforehand.

For first-time use, we recommend trying it with a backup or a test .aep file rather than a critical project.

Capabilities

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

  • Inspect project contents

  • Investigate compositions and layers

  • Edit layers and properties

  • Add or modify keyframes

  • Edit effects and masks

  • Edit text and shapes

  • Set expressions

  • Save projects

  • Create and restore project backups

  • Render frames to preview changes

For example, you can give instructions like these:

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

"Apply the revisions mentioned in this PDF."

"Point out any issues in this AEP."

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

Related MCP server: After Effects MCP Server

Requirements

  • Windows or macOS

  • Adobe After Effects 2024 / 2025 / 2026

  • Node.js 24 or higher

  • MCP-compatible client (Claude Code, Claude Desktop, etc.)

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

After Effects Settings

In After Effects Preferences, please turn ON the following:

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

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

For macOS

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

If it is not permitted, go to:

System Settings → Privacy & Security → Automation

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

Quick Start

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

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

Next, register mcp-aftereffects with your MCP client.

Claude Code

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

Claude Desktop

Add the following to your MCP configuration file:

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

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

Read-Only Mode

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

Add the following to your MCP client configuration:

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

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

Advanced Settings

Usually, no configuration is necessary.

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

Specifying After Effects Location

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

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

Limiting Operation Scope

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

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

Multiple After Effects Instances

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

npx @kumoproductions/mcp-aftereffects install-agent

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

  • AE_MCP_INSTANCE in the server's env names the default instance for the whole session, either by the id the instance was started with or by the project file it has open ("shotA", "shotA.aep", or a full path when two projects share a name).

  • Every tool takes an optional instance argument to address another instance for a single call.

  • ae_context and ae_do instance.list show what is live.

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

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

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

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

Parallel Work with Worker Instances

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

  1. instance.start { name: "w1", copyFrom: "<main .aep>" } — a worker with its own copy

  2. Work in it: any tool with instance: "w1"

  3. ae_save_project with instance: "w1"

  4. project.merge { path: "<the copy>" } in the main instance — the copy comes in as a folder; nothing already in the project is touched

  5. instance.stop { name: "w1" }

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

Execution of Arbitrary ExtendScript

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

This feature is disabled by default.

CAUTION

Enabling arbitrary ExtendScript allows operations outside of After Effects.

This may permit actions that affect your entire computer, such as file or process manipulation.

This feature is disabled by default. Enable it only if necessary.

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

"env": {
  "AE_MCP_ENABLE_EVAL": "1"
}

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

Official Releases

NOTE

Official releases are distributed only through npm and GitHub Releases.

Please exercise caution if obtaining packages claiming to be @kumoproductions/mcp-aftereffects or files claiming to be this server from any other location.

Troubleshooting

Operations Timeout

Please check the following:

  • Is After Effects running?

  • Is a project open?

  • Is "Allow Scripts to Write Files and Access Network" turned ON?

  • On macOS, is the Automation permission enabled?

NO_INSTANCE

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

DIALOG_OPEN — After Effects Is Showing a Dialog

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

  • instance.dialogs lists the dialogs every running After Effects is showing.

  • instance.dismiss_dialog { id } closes it with Escape, the dialog's cancel action: a warning is acknowledged, and a question such as "Save changes before closing?" is cancelled rather than answered — nothing is saved or discarded. A dialog you want answered differently has to be clicked by you.

  • The agent resumes on its own once the dialog is gone; no restart is needed.

  • To avoid the missing-files warning in the first place, start After Effects without a project and open it with project.open, which suppresses the dialog.

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

  • With Accessibility permission for the app that runs the MCP server (System Settings > Privacy & Security > Accessibility — your terminal, or the MCP client app), every dialog is found and its text read, and instance.dismiss_dialog works the same way as on Windows: Escape, the cancel action. A "Save changes before closing?" prompt is cancelled (the project stays open and unsaved); a warning or script alert() is acknowledged. After Effects is not brought to the front.

  • Without that permission, dialogs are only guessed at from the window list: most are found, with empty text (accessibility: false), but some — such as the Adobe licensing prompt — are missed, and none can be dismissed from here.

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

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

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

After Effects Not Found

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

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

Developer Information

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

  • docs/TOOLS.md

  • CONTRIBUTING.md

Contributing

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

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

License

MIT © 2026 kumo.productions, Inc.

Trademark

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

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

Available Tools

11 tools
ae_catalogOperation catalogA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoFilter by category. Omit to list all categories with operation counts, then drill into a specific category.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 infoA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
instanceNoAfter 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.
nameOrIdYesComposition 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

A3.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 contextA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
instanceNoAfter 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

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 operationA
Destructive

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] } })

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoArguments 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.
instanceNoAfter 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.
operationYesOperation name from ae_catalog (e.g. 'layer.create_solid', 'keyframe.add').
timeoutMsNoPer-call timeout in milliseconds (default 60000). Raise for long operations like render.start or big batch.run calls.

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_layer_infoLayer infoA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNo'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'.
instanceNoAfter 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.
layerIndexYes1-based layer index — or an array of indices, or 'all' for every layer in the comp, returned together in one round trip.
compNameOrIdYesComposition name (exact match) or numeric item id.
includePropertiesNoInclude the full property tree (Transform/Effects/Masks/Text). Default true.

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
prettyNoPretty-print the JSON (2-space indent). Default: true when writing to disk, false otherwise.
outPathNoIf 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).
instanceNoAfter 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

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 JSONA
Destructive

Rebuild the project from JSON (produced by ae_project_export_json). Supports clearFirst, dryRun (validate-only), skipValidation.

ParametersJSON Schema
NameRequiredDescriptionDefault
jsonNoInline JSON document (object, not string). Mutually exclusive with `inPath`.
dryRunNoIf true, validate the document and return a plan without touching AE. Useful for debugging malformed exports.
inPathNoAbsolute path to a JSON document produced by ae_project_export_json. Mutually exclusive with `json`.
instanceNoAfter 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.
clearFirstNoRemove all existing items from the current project before importing. Default: false (appends).
skipValidationNoSkip Node-side schema validation. Only use if you trust the input and want to hand broken data to AE for diagnosis.

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 infoA
Read-only

Project-level info: file path, dirty flag, all items with type/summary, active item. Start here.

ParametersJSON Schema
NameRequiredDescriptionDefault
instanceNoAfter 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

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeNoTime in seconds to render. Give exactly one of `time` or `times`.
timesNoSeveral times in seconds, rendered in ONE call. Files are written as <outPath stem>_<index><ext> and reported in `frames` (index-aligned).
analyzeNoMeasure 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).
outPathYesAbsolute path to write the PNG. Parent directory is created if missing. With `times`, used as the naming stem for every frame.
instanceNoAfter 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.
colorManagedNo'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).
compNameOrIdYesComposition name or numeric item id.
contactSheetNoTile all rendered frames into ONE labelled PNG (#index + time above each tile). Pass {} for defaults.
useDisplayStartTimeNoIf true, times are interpreted relative to comp.displayStartTime. Default false.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=false, so the description carries the behavioral load and does it well: headless, deterministic, per-frame file naming, contact-sheet output, numeric analysis, and a detailed color-management escalation path including fallbacks and an explicit colorWarning. This is exactly what an agent needs to interpret a surprising PNG.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and usage in the first two sentences, then parameter and color behavior. It is long and the color-managed paragraph is dense, but each sentence carries operational information rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 9 parameters, nested contactSheet, and no output schema, the description fills the gap by naming the response fields (frames, analysis, colorPipeline, colorWarning) and their interpretation. Nothing an agent needs to call or read the result correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 interpretive meaning the schema lacks: `times` is a single-call motion check with index-aligned files, `analyze` is measured before color conversion, and the fallback pipeline is surfaced via colorPipeline/colorWarning. It mostly restates a few parameters, so not a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ('Render one or more frames to PNG') and frames the tool's role ('the agent's eyes') so it is immediately distinguishable from every sibling, none of which capture imagery. An agent can place it 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear when-to-use guidance — visually verify edits, pair with mutations for a feedback loop, motion checks via `times` — which selects the right mode of call. It stops short of naming alternatives or explicit when-not-to-use conditions, but no sibling competes for this job.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ae_save_projectSave projectB
Destructive

Save the project. Pass path for Save As.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoOptional absolute path to save the project to (Save As). If omitted, save to the existing path — errors if the project has never been saved.
instanceNoAfter 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

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 infoA
Read-only

AE version, build, capabilities (saveFrameToPng, app.effects, Socket). Call at session start to know what APIs are available.

ParametersJSON Schema
NameRequiredDescriptionDefault
instanceNoAfter 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

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

  1. 10 tool updatesv0.3.1
    • Changedae_comp_info2 fields changed
      • addedInput schema / properties / instance
        Added value: +{
        +  "description": "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.",
        +  "type": "string"
        +}
      • changedInput schema / properties / nameOrId / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "items": {
        -      "anyOf": [
        -        {
        -          "type": "string"
        -        },
        -        {
        -          "type": "number"
        -        }
        -      ]
        -    },
        -    "minItems": 1,
        -    "type": "array"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "items": {
        +      "type": [
        +        "string",
        +        "number"
        +      ]
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  }
        +]
    • Changedae_context1 field changed
      • addedInput schema / properties / instance
        Added value: +{
        +  "description": "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.",
        +  "type": "string"
        +}
    • Changedae_do1 field changed
      • addedInput schema / properties / instance
        Added value: +{
        +  "description": "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.",
        +  "type": "string"
        +}
    • Changedae_layer_info4 fields changed
      • removedInput schema / properties / compNameOrId / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  }
        -]
      • addedInput schema / properties / compNameOrId / type
        Added value: +[
        +  "string",
        +  "number"
        +]
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "'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'.",
        +  "enum": [
        +    "full",
        +    "summary"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / instance
        Added value: +{
        +  "description": "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.",
        +  "type": "string"
        +}
    • Changedae_project_export_json1 field changed
      • addedInput schema / properties / instance
        Added value: +{
        +  "description": "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.",
        +  "type": "string"
        +}
    • Changedae_project_import_json1 field changed
      • addedInput schema / properties / instance
        Added value: +{
        +  "description": "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.",
        +  "type": "string"
        +}
    • Changedae_project_info1 field changed
      • addedInput schema / properties / instance
        Added value: +{
        +  "description": "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.",
        +  "type": "string"
        +}
    • Changedae_render_frame10 fields changed
      • addedInput schema / properties / analyze
        Added value: +{
        +  "description": "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).",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / compNameOrId / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  }
        -]
      • addedInput schema / properties / compNameOrId / type
        Added value: +[
        +  "string",
        +  "number"
        +]
      • addedInput schema / properties / contactSheet
        Added value: +{
        +  "description": "Tile all rendered frames into ONE labelled PNG (#index + time above each tile). Pass {} for defaults.",
        +  "properties": {
        +    "columns": {
        +      "description": "Tiles per row (default ceil(sqrt(n))).",
        +      "exclusiveMinimum": 0,
        +      "maximum": 9007199254740991,
        +      "type": "integer"
        +    },
        +    "outPath": {
        +      "description": "Sheet path (default <outPath stem>_sheet.png).",
        +      "type": "string"
        +    },
        +    "thumbWidth": {
        +      "description": "Tile width in px, never upscaled (default 480).",
        +      "maximum": 2048,
        +      "minimum": 16,
        +      "type": "integer"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / instance
        Added value: +{
        +  "description": "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.",
        +  "type": "string"
        +}
      • changedInput schema / properties / outPath / description
        Previous value: -"Absolute path to write the PNG. Parent directory is created if missing."New value: +"Absolute path to write the PNG. Parent directory is created if missing. With `times`, used as the naming stem for every frame."
      • changedInput schema / properties / time / description
        Previous value: -"Time in seconds to render."New value: +"Time in seconds to render. Give exactly one of `time` or `times`."
      • addedInput schema / properties / times
        Added value: +{
        +  "description": "Several times in seconds, rendered in ONE call. Files are written as <outPath stem>_<index><ext> and reported in `frames` (index-aligned).",
        +  "items": {
        +    "minimum": 0,
        +    "type": "number"
        +  },
        +  "maxItems": 32,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • changedInput schema / properties / useDisplayStartTime / description
        Previous value: -"If true, `time` is interpreted relative to comp.displayStartTime. Default false."New value: +"If true, times are interpreted relative to comp.displayStartTime. Default false."
      • changedInput schema / required
        Previous value: -[
        -  "compNameOrId",
        -  "time",
        -  "outPath"
        -]New value: +[
        +  "compNameOrId",
        +  "outPath"
        +]
    • Changedae_save_project1 field changed
      • addedInput schema / properties / instance
        Added value: +{
        +  "description": "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.",
        +  "type": "string"
        +}
    • Changedae_version_info1 field changed
      • addedInput schema / properties / instance
        Added value: +{
        +  "description": "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.",
        +  "type": "string"
        +}
  2. 11 tool updatesv0.1.0
    • First observedae_catalog
    • First observedae_comp_info
    • First observedae_context
    • First observedae_do
    • First observedae_layer_info
    • First observedae_project_export_json
    • First observedae_project_import_json
    • First observedae_project_info
    • First observedae_render_frame
    • First observedae_save_project
    • First observedae_version_info

TDQS

A4/5.0

Scored across 11 tools

Disambiguation4/5

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

Naming Consistency5/5

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

Tool Count5/5

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

Completeness4/5

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

Maintenance

ActivityMaintained
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers