Dsrupt After Effects MCP
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., "@Dsrupt After Effects MCPWhat's in my current After Effects project?"
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.
Dsrupt After Effects MCP
A local MCP server that connects an AI agent to Adobe After Effects, with the agent's working knowledge served by the same server as skills.
Desktop agent / MCP client (Codex, Claude Code, Claude Desktop, Cursor, ...)
| stdio
Dsrupt After Effects MCP (Node)
| file mailbox + OS scripting (AppleScript / AfterFX.exe -r)
Adobe After EffectsTwo surfaces, one process:
Tools: inspect the project, comps and layers; discover the 197 catalogued operations and run them; render a frame to check the result; save.
Skills:
ae_get_skillserves an index, then one skill, then one reference, so the agent loads only what the current task needs instead of carrying every guide in context.
The runtime derives from the MIT-licensed kumoproductions/mcp-aftereffects; see UPSTREAM.md. Windows and macOS, After Effects 2024 to 2026, Node 24+. No panel or plugin is installed in After Effects.
This tool edits the open After Effects project. Anything the agent reads (comp names, expressions, footage paths) may be sent to the AI service behind your client. Try it on a copy first, and keep
AE_MCP_READONLY=1for inspection-only sessions.
Install
git clone https://github.com/Dsrupt-Technologies/dsrupt-after-effects-mcp.git
cd dsrupt-after-effects-mcp
npm ci --ignore-scripts
npm run build
node dist/cli/index.js doctordoctor checks Node and npm, the built server, the skill bundle, the mailbox directory,
and where After Effects is installed. It does not launch After Effects. Then register the
server with your client:
node dist/cli/index.js install-codex # Codex CLI
node dist/cli/index.js install-claude-code # Claude Code
node dist/cli/index.js config # JSON block for Claude Desktop, Cursor, others
node dist/cli/index.js install-skill # entry skill for Codex/Claude Code sessionsinstall-skill copies a small dsrupt-after-effects skill into ~/.agents/skills and
~/.claude/skills, so an agent that has not been told about the server can still find it
(in Codex or ChatGPT desktop: /dsrupt-after-effects). Every real instruction stays on the
server behind ae_get_skill.
Platform notes: Windows, macOS, and MCP clients.
Related MCP server: aftr
Verify the connection
Installation and a working After Effects link are different facts, so they are checked separately:
node dist/cli/index.js doctor # 1. Node/npm, files, skills, AE location
node dist/cli/index.js check-ae # 2. server starts, 3. tools advertised, 4. skills served,
# 5. After Effects answers ae_project_info (read-only)check-ae only talks to an After Effects that is already running, so it never boots one by
surprise; pass --allow-launch to change that. The sixth state, whether your agent's
current conversation can call the tools, is only visible from inside the client: ask it to
run ae_get_skill({}) and then ae_project_info({}).
First calls from the agent
ae_get_skill({}): the skill index.ae_get_skill({ name: "ae-clean-rig" }): the entry skill. It routes to references such asreferences/sliders.mdand to companion skills.ae_project_info({}): what is open. This is the live connection test.ae_catalog({}), thenae_catalog({ category: "layer" }): exact operations and parameters.ae_do({ operation: "layer.create_text", args: { comp: "Main", text: "Hello", name: "Title" } }).ae_render_frame({ compNameOrId: "Main", time: 1, outPath: "/tmp/check.png" }), then look at it.ae_save_project({}).
The twelve tools are listed in docs/TOOLS.md. Operations are not tools;
the agent discovers them through ae_catalog at runtime.
Skills
Skill | Load it for |
| Every task. Inspect first, build native and editable, animate sparsely, verify by rendering, save where intended. Routes to nine references: construction, reference motion, typography, effects, media, editable rigs, sliders, validation, scripting. |
| Timing, easing, anticipation and settle, reveals, expressions, motion proof. |
| Interface layouts: static design first, tokens, component anatomy. |
| Parallax, 3D layers and cameras, shadows, glass surfaces. |
| Reusable A-to-B transitions with a progress control. |
| How the transport works, policy switches, error codes, recovery after timeouts. |
Skills live in skills/, are described by skills/manifest.json, and are verified by hash
before being served. See docs/SKILLS.md to edit or add one.
Safety
Every
ae_docall is one undo group.batch.runis one undo group too, but not a transaction: earlier steps stay applied if a later one fails.A
TIMEOUTmay mean the change already applied. The skills tell the agent to inspect before retrying a mutation.AE_MCP_READONLY=1withholds saving and importing and limitsae_doto read operations.AE_MCP_ALLOW_CATEGORIESnarrows the catalog. Arbitrary ExtendScript (eval.run) is off unlessAE_MCP_ENABLE_EVAL=1.Operations that change After Effects application settings (not the project) require
confirm: true.The connection test and the doctor never mutate the project. The live smoke test (
npm run smoke) refuses to run in anything but a fresh, empty, unsaved project.
Environment
Variable | Meaning |
| After Effects to use: |
| Extra folders to probe for an install ( |
|
|
| Comma-separated operation categories to allow. |
|
|
| Move the request/response mailbox (keep it per-user). |
Without an override, After Effects is found in this order: a running After Effects process,
then installed copies under Program Files, the Windows registry, Start Menu shortcuts,
/Applications, ~/Applications, a Spotlight bundle-id query, and DSRUPT_AE_SEARCH_DIRS.
Newest year wins; locate-ae shows every candidate and what was probed.
Development
npm run check # skills check, typecheck, lint, format, JSX ES3 lint, docs drift
npm run test:offline # 300+ tests, no After Effects needed
npm test # adds the e2e suites, which self-skip without a running AE
npm run smoke # live demo in a fresh empty project; writes runtime/dsrupt-smoke/
npm run test:package # pack, install to a temp prefix, start the server from thereInternals, error codes and how to add an operation are in CONTRIBUTING.md. The comparison with the upstream project and the reference fork is in docs/COMPARISON.md; what has actually been verified, and where, is in docs/VALIDATION.md.
License
MIT. Copyright (c) 2026 kumo.productions, Inc. (upstream runtime) and Dsrupt Technologies (modifications). Adobe and Adobe After Effects are trademarks of Adobe Inc.; this project is independent and 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 |
|---|---|---|---|
| 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=true, so no contradiction. The description adds behavioral context by stating the tool returns detailed fields and supports batching multiple comps in one call, which is useful beyond the annotation's safety signal.
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, well-structured sentence that front-loads the key information (what it returns) and then explains the input options. Zero fluff, every word earns its place.
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 read-only info tool with one parameter and no output schema, the description covers all essential details: return content, input flexibility, and batching. No critical information 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?
Schema description coverage is 100% and fully explains the nameOrId parameter (string/number/array, exact match, fallback to ae_project_info). The description's mention of arrays reinforces but does not add new semantic meaning beyond 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?
The description uses a specific verb ('fetch' implied) and resource ('comp info'), lists concrete fields (size, fps, duration, work area, motion blur, layer summaries), and clearly distinguishes from siblings like ae_layer_info (layers) and ae_project_info (project-level) by focusing on compositions.
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 implies when to use it (when you have a comp name or id) and the schema explicitly advises calling ae_project_info if you lack one. This gives clear context and a specific alternative, though the main description doesn't contrast with other sibling tools.
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 |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses the undo contract ('every call = one auto undo group'), which is a notable behavioral trait. It also mentions ES3 rules and AE.* helpers, adding context beyond the annotation. No contradiction.
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 sentences with high density: the first lists the tool's contents, the second gives the usage instruction. Every word earns its place, no redundancy.
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-parameter, no-output-schema context tool, the description covers what it provides, when to call it, and how to proceed with ae_do responses. The undo contract mention prevents surprises, making it sufficiently complete for its simplicity.
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 are zero parameters, so the description correctly does not need to explain parameter details. Baseline 4 applies, and the description adds value by clarifying what contextual information the tool returns.
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 providing ambient session context, listing specific content like project state, active comp, selected layers, and AE.* helpers. This distinguishes it from sibling tools like ae_comp_info or ae_layer_info, which are focused queries.
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?
It explicitly instructs 'Call at session start' and suggests relying on ae_do response context afterward, giving clear timing and handoff. It does not mention when-not-to-use or list alternatives, but the session-start directive is strong.
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. | |
| 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?
Beyond the destructiveHint annotation, the description discloses key behaviors: arguments are validated before reaching AE, every call is wrapped in one undo group, and the response includes ambient context at zero extra round trips. It also warns against calling beginUndoGroup/endUndoGroup in eval.run code. This adds substantial context beyond the structured annotation.
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?
Though the description is longer than average, every sentence conveys essential information: purpose, usage guidance, undo behavior, response context, and example. It is well-structured and front-loaded with the core purpose, then expands into usage details without redundancy.
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?
Given the tool's generic nature (executes any catalog operation) and lack of output schema, the description covers invocation, validation, batching, undo behavior, response contents, and includes an example. It is sufficiently complete for an agent to select and invoke the tool correctly, especially with sibling tool context.
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 schema already documents all three parameters with 100% coverage. The description adds value by explaining validation semantics ('Arguments are validated against the operation's declared parameters'), clarifying that args can be omitted for zero-param operations, and providing a concrete example with operation and args. This goes beyond what the schema alone provides.
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 states the tool's function: 'Execute an atomic operation by name (from ae_catalog).' It distinguishes ae_do from sibling tools like ae_comp_info and ae_layer_info by positioning it as the generic executor for operations defined in the catalog, making the purpose specific and unambiguous.
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?
Provides explicit usage guidance: 'Have more than one operation to run? Wrap them in ONE batch.run instead of several ae_do calls' and notes that read/verify steps can ride in the same batch. It also clearly states when not to use ae_do (for undo/redo operations that cannot ride inside a batch.run).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ae_get_skillAfter Effects skillsARead-only
Read the bundled After Effects skills, one document at a time, without touching After Effects or the network. No arguments: the index (skill names, one-line descriptions, reference lists). { name }: that skill's entry document. { name, reference }: one reference listed by the entry. Start every AE task with ae_get_skill({ name: 'ae-clean-rig' }); load references only when the task needs them.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Skill name exactly as listed in the index, e.g. 'ae-clean-rig'. | |
| reference | No | Reference path exactly as listed by the skill, e.g. 'references/sliders.md'. Requires name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
ReadOnlyHint is already present, and the description adds useful behavioral detail: the tool is local only, makes no network calls, and never touches After Effects. It also explains how outputs vary by argument combination (index, entry, or reference). This goes beyond the annotation without contradicting it.
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 compact and front-loaded, with each sentence contributing either an access mode, an example, or a usage rule. There is no filler or repetition of schema metadata.
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 documentation reader with two optional parameters and no output schema, the description is complete: it covers invocation modes, gives a starting example, clarifies reference loading, and states the tool's non-invasive behavior. 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?
Even though the schema already describes both parameters, the description adds substantial meaning by defining the three call modes (no args, { name }, { name, reference }) and providing a concrete example skill name. That is exactly the kind of contextual semantics the schema alone does not convey.
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 states a specific verb ('Read') and resource ('bundled After Effects skills'), and distinguishes itself from the sibling AE-operation tools by noting it does not touch After Effects or the network. It also lays out the document access modes, so an agent can tell exactly what the tool does.
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?
It provides an explicit workflow directive: 'Start every AE task with ae_get_skill({ name: 'ae-clean-rig' })' and advises loading references only when needed. It does not explicitly name alternative tools or exclusions, but the 'without touching After Effects' phrasing clearly implies it is for reading skill docs, not performing AE actions.
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. layerIndex accepts one index, an ARRAY of indices, or 'all' — auditing a whole comp is one call. Set includeProperties=false to skip the property tree walk.
| Name | Required | Description | Default |
|---|---|---|---|
| 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 declare readOnlyHint=true, and the description adds behavioral nuance beyond that: the batch round-trip efficiency ('auditing a whole comp is one call') and the optional 'property tree walk' that can be skipped via includeProperties=false. No contradictions with 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. The primary purpose and content list are front-loaded, followed by the most impactful usage note (batch indices) and the optional flag. Zero filler.
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 layer inspection tool with no output schema, the description adequately lists the return content categories and explains the includeProperties control. It does not describe the exact return structure, but given the schema's clarity and the read-only annotation, this is sufficient for an agent to invoke 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 description coverage is 100%, so the baseline is 3. The description echoes the layerIndex array/'all' behavior already in the schema and adds the property tree walk context, but this is more behavioral than parameter-specific. It does not add meaning beyond what the schema already documents for each parameter.
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 states a specific verb ('Full layer info') with a clear resource (layer) and enumerates the content areas (transform, effects, masks, text, shape contents, keyframes). It naturally differentiates from sibling tools like ae_comp_info and ae_project_info, which target different resources.
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 gives concrete usage context: layerIndex accepts a single index, an array, or 'all', enabling whole-comp auditing in one call. It also explains the includeProperties toggle. However, it does not explicitly name alternatives or state when not to use it; the sibling distinction is implied but not stated.
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). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide destructiveHint=false. The description adds valuable behavioral context: it writes to outPath or returns inline, and warns that inline JSON can get large. This goes beyond the minimal annotation and helps the agent anticipate size-related performance implications, though it does not disclose every edge case (e.g., overwrite behavior or exact JSON structure).
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, front-loaded with the core action and scope, followed by the output-mode detail. Every phrase earns its place; the list of serialized components is concise but informative, and there is no fluff.
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?
Given there is no output schema, the description does the work of explaining what the tool returns by listing serialized components and stating that JSON is returned inline when outPath is omitted. It also flags the potential for large outputs. It could specify the root JSON structure or error behavior, but for a complex export tool, this is a reasonably complete picture.
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% with detailed descriptions for both `pretty` and `outPath`. The tool description simply restates the outPath behavior ('Write to outPath or return inline') without adding new parameter semantics. Since the schema already explains defaults and behavior, the description adds no extra value, meeting the baseline for high 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 clearly states the tool serializes the entire project to JSON with a specific list of included elements (folders, comps, layers, keyframes, effects, shapes, markers, time remap, solids, file refs). This is a specific verb+resource that distinguishes it from siblings like ae_project_info or ae_project_import_json.
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 clearly implies when to use this tool (for full project export) and explains the two output modes (write to path or inline). It does not explicitly name alternatives or state when not to use it, but the 'entire project' scope and inline warning provide sufficient contextual guidance relative to sibling tools.
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`. | |
| 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 provide destructiveHint: true, lowering the burden. The description adds the configurable flags (clearFirst, dryRun, skipValidation) but uses the word 'Rebuild' without clarifying that the default behavior is to append rather than replace. This is misleading and violates the expectation of transparency about side effects.
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 a single concise sentence with no filler. It front-loads the primary action and then lists the key optional switches, making it easy to parse.
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?
Although the schema and annotations fill in many details, the description's ambiguous use of 'Rebuild' conflicts with the schema's note that clearFirst defaults to false (appends). This mismatch leaves a critical gap for a mutation tool, as an agent might assume it replaces the project when it actually appends unless told otherwise.
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 schema description coverage is 100%, with each parameter already fully explained. The tool description only names three flags without adding any new semantic information beyond what the schema provides, so the baseline score of 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?
The description clearly states the action ('Rebuild the project from JSON') and ties it to a sibling tool (ae_project_export_json), making it unmistakable as the import counterpart. This distinguishes it from the other sibling tools and provides a specific verb and resource.
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 context is clear: it is the inverse of ae_project_export_json and should be used when reconstructing a project from an exported JSON file. However, it does not explicitly state when not to use it or mention alternatives beyond the export tool, so it falls 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.
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 |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already indicates a safe read operation. The description adds what data is returned but doesn't disclose potential behavior such as response size, performance implications, or whether all items are loaded at once, which is minimal for a simple read tool.
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 a single, front-loaded sentence that directly states what the tool provides and includes a useful 'Start here' guidance. Every word earns its place with no redundancy.
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-parameter tool with no output schema, the description fully covers its return values (file path, dirty flag, items, active item) and positions it within the tool family. The 'Start here' hint provides sufficient context for an initial exploration tool.
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?
With zero parameters, there is no schema detail to clarify. The description effectively lists the output contents, compensating for the absence of parameters and adding semantic meaning to the tool's purpose.
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 states the tool provides project-level info including specific data fields (file path, dirty flag, all items, active item), distinguishing it from sibling tools like ae_comp_info and ae_layer_info which focus on compositions and layers. The phrase 'Start here' reinforces its role as an entry point.
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' implies this should be the first tool used when exploring a project, but it doesn't explicitly state when to use this vs alternatives like ae_comp_info or ae_catalog. No exclusions or alternative recommendations are given.
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 a single frame to PNG. Use to visually verify edits. The agent's 'eyes' — pair with mutations for a visual feedback loop. Headless and deterministic. 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 | Yes | Time in seconds to render. | |
| outPath | Yes | Absolute path to write the PNG. Parent directory is created if missing. | |
| 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. | |
| useDisplayStartTime | No | If true, `time` is interpreted relative to comp.displayStartTime. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the single destructiveHint annotation, the description discloses headless and deterministic execution, the transient OCIO color transform behavior, fallback paths, and the colorWarning/colorPipeline response fields to inspect. This is substantial behavioral transparency.
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 front-loaded with purpose and usage, then provides necessary technical caveats about color management. Every sentence earns its place; there is no filler or empty marketing language.
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 tool with no output schema and sparse annotations, this description is unusually complete. It explains the output format, color-managed behavior, fallback scenarios, and which response fields to check, while parameters are already fully documented in the schema.
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% with detailed parameter documentation. The description reinforces color behavior but does not add meaningful parameter-level meaning beyond what the schema already provides, so the baseline of 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?
The description states a specific verb and resource: 'Render a single frame to PNG.' It goes further by framing the tool as the agent's 'eyes' for visually verifying edits, which clearly differentiates it from the sibling project-management and automation tools.
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?
It explicitly says to use the tool to visually verify edits and recommends pairing it with mutations for a visual feedback loop. It does not name exclusions or alternative tools, but the intended usage context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ae_save_projectSave projectADestructive
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond the destructiveHint annotation, such as the error condition for unsaved projects and the Save As path behavior. It does not contradict the annotation and clarifies the tool's side effects adequately.
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 concise sentences, front-loaded with the core action and a precise pointer to the path parameter. Every word earns its place with no redundancy.
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 save operation with one optional parameter, full schema coverage, and a destructive annotation, the description plus schema provide complete guidance. No output schema is needed for a save action, and the behavior is fully documented.
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 the schema description fully explains the path parameter, including Save As semantics and error behavior. The description adds no new meaning beyond a concise restatement, so 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?
The description clearly states the tool saves the project, with a specific verb and resource. It distinguishes itself from siblings like export/import JSON by focusing on native project save, including the Save As nuance via path.
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 schema description provides clear guidance on when to omit path (existing save) versus provide path (Save As), including the error condition if never saved. However, it does not explicitly mention alternatives or when not to use this tool, keeping it just shy of a 5.
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 |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already indicates safety, and the description adds that it reports capabilities like saveFrameToPng, app.effects, and Socket. This is useful but minimal; it doesn't detail the response format or potential variations.
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?
One sentence packs the core purpose and a usage directive, with no filler. The description is front-loaded and every word earns its place.
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-parameter read-only tool, the description sufficiently covers what the tool returns (version, build, capabilities) and when to use it. No output schema exists, but the description provides enough context.
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 tool has zero parameters, and the schema covers 100% trivially. The description doesn't need to elaborate, so the baseline of 4 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 clearly states that the tool retrieves AE version, build, and capabilities, which distinguishes it from sibling info tools that target specific project/comp/layer resources.
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 instructs calling at session start to discover available APIs, providing clear timing guidance. It doesn't name alternatives, but no sibling serves this exact purpose, so the guidance is sufficient.
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
v0.1.0- First observed
ae_catalog - First observed
ae_comp_info - First observed
ae_context - First observed
ae_do - First observed
ae_get_skill - 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 are clearly scoped by AE object level (project/comp/layer) or function (render, save, import/export). ae_context and ae_project_info overlap somewhat in ambient/project state, and ae_version_info/ae_context both ask to be called at session start, but descriptions distinguish them sufficiently.
The ae_ prefix and snake_case are consistent, with an info suffix for read-only inspectors and verb_noun names for actions. The generic ae_do and noun-only ae_context/ae_catalog deviate slightly from a strict verb_noun pattern, but the convention is still predictable.
12 tools is well within the ideal range and each tool serves a meaningful role in the AE workflow. The count feels appropriately scoped without redundancy or bloat.
The set covers inspection at project/comp/layer levels, mutation through ae_do, visual verification via ae_render_frame, persistence, and full JSON round-tripping. Minor gaps like an explicit undo/redo tool or direct project lifecycle operations exist, but they are largely addressable through ae_do/operations.
Maintenance
Related MCP Connectors
Build and run visual creative-production workflows from your AI agent.
- mcp-serverOAuthcom.make
Give your AI agents the tools to build, manage, and run automation workflows.
Generate and edit images, video, voice, lip-sync and 3D models from your AI agent.
- SkilderOAuthai.skilder
One place to build, share, and govern the skills and tools your AI agents use at work.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to control Adobe After Effects for project inspection, composition creation, and layer manipulation via a hardened bridge panel.-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to control Adobe After Effects to create videos programmatically, with commands for comps, layers, effects, and rendering.7 npm20MIT
- 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.1717 npm1MIT
- AlicenseNot gradedqualityBmaintenanceLets AI live-connect to Adobe After Effects to read project and comp structure, render and inspect frames, edit keyframes, expressions, and effects, and build or render projects end to end, all with undo support and safety guards.MIT