After Effects MCP Server
Click on "Install 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., "@After Effects MCP ServerCreate a 10-second 1920x1080 composition with a text layer saying 'Hello'"
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.

Brought to you by Brandkick - We grow brands like they're our own.
After Effects MCP Server
A Model Context Protocol server for Adobe After Effects. Enables AI assistants to control After Effects through a WebSocket-based CEP panel.
Requirements
Adobe After Effects 2021+ (versions 18.x - 26.x)
Node.js 18+
pnpm
Related MCP server: After Effects MCP Server
Installation
git clone https://github.com/Brandkick/after-effects-mcp.git
cd after-effects-mcp
pnpm install
just setupConfiguration
Add to Claude Code config (~/.claude.json):
{
"mcpServers": {
"aftereffects": {
"command": "node",
"args": ["/path/to/after-effects-mcp/build/index.js"]
}
}
}Usage
Claude Code starts the MCP server automatically
Open After Effects
Open the panel: Window > Extensions > MCP Bridge
Setup: JPEG Output Template
For exportCompFrame to work, create a JPEG output template in After Effects:
Create any composition
File > Export > Add to Render Queue
Click "Output Module" settings
Set Format to "JPEG Sequence"
Set Quality to 50-70% (faster previews, smaller files)
Optionally resize: check "Resize" and set to 50% or a fixed size like 960x540
Click the template dropdown (top of dialog)
Select "Save As New Template..."
Name it exactly:
JPEG SequenceClick OK
This only needs to be done once per After Effects installation.
MCP Tools
Tool | Description |
| Execute any command (see Commands below) |
| List all available commands |
| Create a new composition |
| Set a single keyframe |
| Set multiple keyframes (batch) |
| Apply expressions to properties |
| Animate effect properties (batch) |
| Import files into project |
| Queue composition for render |
| Export single frame as PNG for visual verification |
Commands
All commands can be called via run-script. Use getHelp to see full documentation.
Project
getProjectInfo,newProject,saveProject,saveProjectAs,closeProjectcreateFolder,moveProjectItem,deleteProjectItemimportFootage,importPlaceholder,replaceFootage
Composition
listCompositions,getActiveComposition,createCompositionsetCompSettings- Modify duration, work area, frame rate, motion blur
Layers
createTextLayer,createShapeLayer,createSolidLayer,addLayerToCompgetLayerInfo,setLayerProperties- Name, transform, timingsetLayerFlags- Visibility, solo, shy, locked, motion blur, 3DdeleteLayer,duplicateLayer,reorderLayer,precomposeLayersetParentLayer,setTrackMattesetTextProperties- Font, size, color, justification
Animation
setLayerKeyframe,setLayerKeyframes(batch)setLayerExpressiongetKeyframes,deleteKeyframe,deleteKeyframes(batch)setKeyframeEasing,setKeyframesEasing(batch)copyKeyframes
Effects
applyEffect,applyEffectTemplatelistEffects,listAvailableEffects,getEffectPropertiessetEffectKeyframe,setEffectKeyframes(batch)
Time & Markers
setLayerTime- In/out point, start time, stretchenableTimeRemapping,setTimeRemapaddMarker,getMarkers,removeMarker
Camera & 3D
createCamera,createLightsetCameraProperties,setLightPropertiesset3DLayer,setMaterialOptions
Masks & Shapes
addMask,setMaskPath,setMaskProperties,deleteMaskaddShapePath,setShapePathVertices,addShapeModifier
Render
addToRenderQueue,renderQueue,queueInAMEgetRenderQueueStatus,clearRenderQueueexportCompFrame- Visual verification
Utility
getSelection,setSelectionbeginUndoGroup,endUndoGroup,getUndoGroupStatusgetPropertyInfo,listFonts
MCP Resources
Resource | Description |
| List all compositions |
| Visual verification workflow guide |
Development
just setup # Build and install CEP panel with debug mode
just build # Build only
just start # Start MCP server (for testing)
just clean # Remove build directoryArchitecture
Claude Code <--stdio--> MCP Server <--WebSocket:8765--> CEP Panel <--CSInterface--> ExtendScriptSee ARCHITECTURE.md for design principles.
Project Structure
after-effects-mcp/
├── src/
│ ├── index.ts # MCP server, tool definitions
│ ├── websocket-server.ts # WebSocket server
│ ├── logger.ts # Logging utility
│ ├── shared/
│ │ ├── commands.ts # Command registry (single source of truth)
│ │ └── config.ts # Configuration and timeouts
│ └── cep/ # CEP extension
│ ├── CSXS/manifest.xml
│ ├── index.html
│ ├── js/main.js # WebSocket client
│ └── jsx/modules/ # ExtendScript (modular)
│ ├── 00-polyfills.jsx
│ ├── 01-helpers.jsx
│ ├── 10-project.jsx
│ ├── 11-layer.jsx
│ ├── 12-keyframe.jsx
│ ├── 13-time.jsx
│ ├── 14-render.jsx
│ ├── 15-camera.jsx
│ ├── 16-mask.jsx
│ ├── 17-shape.jsx
│ ├── 18-selection.jsx
│ ├── 19-discovery.jsx
│ └── 99-dispatcher.jsx
├── scripts/
│ ├── install-cep.js
│ ├── build-jsx.ts # Concatenates JSX modules
│ └── generate-cep-config.ts
├── tests/
├── justfile
└── package.jsonLicense
MIT
Available Tools
10 toolsaddToRenderQueueB
Add a composition to the render queue
| Name | Required | Description | Default |
|---|---|---|---|
| compName | No | Composition name | |
| compIndex | No | Composition index | |
| outputPath | No | Output file path | |
| outputTemplate | No | Output module template name | |
| renderSettings | No | Render settings template name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states 'add', implying a mutation, but does not explain side effects, error behavior, or whether the rendering is asynchronous. This is minimal and provides little beyond the obvious.
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 redundant words or fluff. It is front-loaded and every word serves a purpose, making it highly efficient.
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?
The tool has 5 parameters, no annotations, and no output schema. The description only states the action and does not explain any prerequisites, return values, or behavior on success/failure. This is inadequate for a tool with optional parameters and no safety profile.
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 has 100% description coverage for all 5 parameters, so the description does not need to explain each parameter. The description adds no additional meaning beyond the schema, which is the baseline expectation.
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 'Add a composition to the render queue' clearly identifies the action (adding) and the target resource (composition to render queue). It distinguishes from sibling tools like exportCompFrame, which exports a frame, and createComposition, which creates a composition.
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 provides no guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or conditions. It simply states what it does without context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createCompositionB
Create a new After Effects composition
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Composition name | |
| width | No | Width in pixels (default: 1920) | |
| height | No | Height in pixels (default: 1080) | |
| duration | No | Duration in seconds (default: 10) | |
| frameRate | No | Frame rate (default: 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. The description only states 'Create' without mentioning side effects (e.g., adding to the current project), requirements (e.g., After Effects must be running), or return values. This is a significant gap for a mutation 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 concise sentence that is easy to parse and front-loaded. It wastes no words, but it is under-specified for a tool with five parameters and no annotations, making it feel minimal rather than appropriately sized.
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?
Despite full schema coverage, the description lacks critical behavioral context such as what happens after creation, whether it affects the active project, or any prerequisites. With no output schema and no annotations, the description is incomplete for an agent to fully understand the tool's behavior and impact.
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 covers 100% of the parameters with descriptions and defaults, so the schema already provides full parameter semantics. The description adds no additional meaning beyond the tool name, keeping the baseline of 3 because it neither enhances nor detracts from schema information.
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 verb 'Create' and the resource 'After Effects composition', making it distinct from siblings like run-script or importFootage. It is specific enough to identify the tool's primary function, though it lacks explicit sibling differentiation or additional context like whether it creates in the active project.
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 usage: use this tool to create a new After Effects composition. However, it does not explicitly state when to use it versus alternatives or mention any prerequisites. Since the sibling tools are all different operations, the implied context is clear but not fully articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exportCompFrameA
Export a single frame from a composition as PNG for visual verification. Use this after creating or modifying compositions to verify the result looks correct. Then use the Read tool on the returned path to view the image.
| Name | Required | Description | Default |
|---|---|---|---|
| time | No | Time in seconds (default: current time) | |
| quality | No | Render quality (default: draft) | |
| compName | No | Composition name | |
| compIndex | No | Composition index (1-based) | |
| outputPath | No | Output file path (default: /tmp/ae_preview_xxx.png) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosure. It does mention the output is a PNG and that a path is returned, which is useful. However, it does not disclose potential side effects such as overwriting existing files at the output path, or any permissions or resource implications. The behavior is simple, but more could be said.
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 three sentences, all of which serve a purpose: stating the function, indicating when to use it, and providing the follow-up step. There is no fluff or repetition of schema information, making it concise and well-structured with the key information front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 parameters, no output schema), the description is largely complete. It explains the tool's purpose, when to use it, and the resulting workflow. It does not explicitly state the return type, but the mention of 'returned path' implies it. The description effectively completes the workflow without requiring additional explanation.
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 covers 100% of the parameters with descriptions, so the baseline is 3. The description does not add any additional meaning to the parameters themselves; it only mentions the general purpose. Since the schema adequately documents each parameter, the description's lack of parameter-level detail is acceptable.
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: 'Export a single frame from a composition as PNG for visual verification.' It specifies the action (export), the resource (a single frame from a composition), and the output format (PNG). This is distinct from sibling tools that create or modify compositions, making its purpose 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?
The description explicitly states when to use the tool: 'Use this after creating or modifying compositions to verify the result looks correct.' It also provides a follow-up workflow: 'Then use the Read tool on the returned path to view the image.' While it lacks explicit when-not-to-use scenarios or named alternatives, the context is clear enough for an agent to select it for visual verification tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getHelpB
Get help on using the After Effects MCP integration
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations provided, so the description carries the full burden. It only says 'Get help' without disclosing what the help output looks like, whether it returns a list of commands, static text, or has any side effects. The description adds almost no behavioral context beyond the obvious purpose.
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: 'Get help on using the After Effects MCP integration'. Every word earns its place; there is no fluff or redundancy. It is appropriately concise for the tool's simplicity.
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 parameters and no output schema, the description is minimally viable but leaves gaps. It doesn't mention what kind of help is provided (e.g., a list of tools, usage examples, or error explanations). Since there is no output schema, the description is the sole source of behavioral context, and it lacks sufficient detail to fully understand the tool's output.
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, so the schema coverage is 100% by default. With 0 params, the baseline is 4, and the description correctly adds no parameter-specific information because none exist. It doesn't need to compensate for any gaps.
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 verb 'Get' and the resource 'help on using the After Effects MCP integration', which is distinct from all sibling tools that perform specific actions like creating compositions or setting keyframes. It is specific and not a tautology.
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 no explicit guidance on when to use this tool vs alternatives. It only implies that it's for getting help, but does not say 'use this when you need instructions' or mention any exclusions. Sibling tools are all concrete operations, but no comparison or context is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
importFootageC
Import footage into the After Effects project
| Name | Required | Description | Default |
|---|---|---|---|
| compName | No | Specific composition name to add to | |
| filePath | Yes | Absolute path to the file | |
| sequence | No | Import as image sequence | |
| addToComp | No | Add to active composition |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the basic action and does not mention side effects, handling of image sequences, whether it adds to a composition, or any error conditions. This is insufficient for a tool that mutates the project state.
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 sentence that is front-loaded with the key action and resource. It contains no unnecessary words or redundancy, making it extremely concise and well-structured for quick parsing.
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?
The tool has four parameters, no output schema, and no annotations. The description is minimal and does not elaborate on how import works (e.g., what occurs when sequence is true, what happens if addToComp is false, or how this relates to other composition tools). While the schema covers parameter definitions, the overall context for selecting and using the tool is lacking, especially without any usage guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are documented in the schema itself. The description adds no parameter information beyond what the schema already provides, so it meets the baseline but does not compensate or add extra semantic nuance.
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?
Description clearly states the action: 'Import footage into the After Effects project' with a specific verb and resource. It is unambiguous, though it does not explicitly differentiate from sibling tools like createComposition or run-script. Since the name itself is unique and the action is clear, it meets the 'clear but no sibling differentiation' level.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor any exclusions or prerequisites. The description simply states what it does, leaving the agent to infer usage from context and sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run-scriptB
Run a script command in After Effects. Use getHelp to see all available commands.
| Name | Required | Description | Default |
|---|---|---|---|
| script | Yes | Name of the script to run | |
| parameters | No | Optional parameters for the script |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only restates the action and points to getHelp, with no mention of side effects, project requirements, safety risks, or return value expectations.
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 concise sentences, no fluff. The first sentence states the purpose, and the second gives a useful pointer to getHelp. Well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic and potentially powerful script execution tool, the description is minimal. It lacks behavioral caveats, error information, and context on what scripts can or cannot do, making it incomplete for safe and correct invocation.
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 documents both parameters with 100% coverage. The description adds no additional meaning beyond the schema, which is the baseline case.
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 runs a script command in After Effects, using a specific verb and resource. It is somewhat generic but distinguishes itself from the more specific sibling tools by being the generic script execution 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?
The description explicitly tells users to use getHelp to see available commands, providing useful prerequisite context. However, it does not explicitly contrast run-script with sibling tools or state when to use it over them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setEffectKeyframesA
Set multiple keyframes on effect properties in a single call. More efficient for animating effects.
| Name | Required | Description | Default |
|---|---|---|---|
| compName | No | Composition name | |
| compIndex | No | Composition index (1-based) | |
| keyframes | Yes | Array of keyframes | |
| layerName | No | Layer name | |
| effectName | No | Effect name | |
| layerIndex | No | Layer index (1-based) | |
| effectIndex | No | Effect index (1-based) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the full burden. It mentions batching and efficiency but does not disclose behaviors like whether existing keyframes are overwritten, how targets are resolved, or error handling. This is insufficient for a mutation operation.
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, front-loaded with the primary action. No redundant wording; 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?
Given the complexity of 7 parameters including a nested keyframe structure, the description provides minimal high-level context. It does not explain the relationship between name/index selectors or the keyframe array structure, though the schema does. The lack of annotations and output schema leaves the description insufficient for a fully fluent agent.
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 descriptions cover all parameters (100%), so the baseline is 3. The description adds no additional parameter semantics beyond what is already in the schema, such as clarifications on property paths or selection by index vs name.
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 specifies the exact action (set multiple keyframes) and target (effect properties), using a clear verb and resource. It differentiates from siblings like setLayerKeyframes by explicitly mentioning effect properties.
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 phrase 'More efficient for animating effects' implies use for batch effect animation, but it does not explicitly discuss alternatives or when not to use it. No exclusion criteria are provided, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setLayerExpressionB
Set an expression on a layer property
| Name | Required | Description | Default |
|---|---|---|---|
| compIndex | Yes | Composition index (1-based) | |
| layerIndex | Yes | Layer index (1-based) | |
| propertyName | Yes | Property name | |
| expressionString | Yes | Expression code (empty string to remove) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full responsibility for behavioral disclosure. It does not mention whether the expression overwrites an existing one, what happens with invalid expressions, or whether properties must support expressions. This lack of context is a significant gap for a mutation 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 clear sentence with no redundancy. It gets directly to the point, though it could be enriched with more context. It earns its place but is minimal.
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?
The tool has four required parameters, no output schema, and no annotations. The description only states the core action, lacking details about return values, error conditions, prerequisites, or side effects. This is insufficient for a tool that modifies layer properties.
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 provides descriptions for all four parameters, so the baseline is 3. The tool description adds no additional parameter semantics beyond the schema, but since coverage is 100%, the schema carries the burden.
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 'set' and identifies the resource 'expression on a layer property', which clearly differentiates it from sibling tools like setLayerKeyframe and setEffectKeyframes that deal with keyframes. This is a clear and distinct purpose.
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?
There is no guidance on when to use this tool versus alternatives like setLayerKeyframe or run-script. The description simply states the action without contextual usage scenarios or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setLayerKeyframeA
Set a keyframe on a layer property. For multiple keyframes, use setLayerKeyframes instead.
| Name | Required | Description | Default |
|---|---|---|---|
| value | No | Keyframe value (number, array, etc.) | |
| compIndex | Yes | Composition index (1-based) | |
| layerIndex | Yes | Layer index (1-based) | |
| propertyName | Yes | Property name (e.g., 'Position', 'Opacity', 'Scale') | |
| timeInSeconds | Yes | Time in seconds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the basic operation without mentioning side effects, such as whether it overwrites existing keyframes, requires permission, or mutates the composition. The description adds minimal context beyond the operation itself.
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 short sentences, front-loaded with the primary action, and every word earns its place. It is concise and well-structured 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?
The tool is relatively simple with no output schema and no annotations. The description covers the core purpose and the key alternative, but it doesn't elaborate on edge cases or return behavior. However, given the low complexity, it is sufficiently complete for most agent needs, meriting a 4.
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 provides 100% parameter coverage with descriptions for all five parameters, so the baseline is 3. The description adds no additional parameter semantics beyond what the schema already states, but that is acceptable given the 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 action ('Set a keyframe') and the target ('layer property'), and explicitly distinguishes from the sibling tool setLayerKeyframes by noting it's for a single keyframe. This makes the purpose 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?
The description provides explicit guidance on when to use this tool versus the plural alternative: use this for a single keyframe, and setLayerKeyframes for multiple. This directly addresses the main alternative and gives clear usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setLayerKeyframesA
Set multiple keyframes in a single call. More efficient than repeated setLayerKeyframe calls.
| Name | Required | Description | Default |
|---|---|---|---|
| compName | No | Composition name | |
| compIndex | No | Composition index (1-based) | |
| keyframes | Yes | Array of keyframes | |
| layerName | No | Layer name | |
| layerIndex | No | Layer index (1-based) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden for behavioral disclosure. It states that the tool sets multiple keyframes but does not mention whether existing keyframes are overwritten, what the call returns, required permissions, or error behavior. For a mutation operation, this is a significant gap.
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 short sentences, front-loaded with the core purpose, and contains no redundant information. It is appropriately sized for the tool's simplicity.
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?
Despite having no output schema and no annotations, the description does not explain the effect of setting keyframes (e.g., replacement behavior), return values, or error cases. It also does not distinguish from setEffectKeyframes, which is a related sibling. The description is too thin for a tool that mutates layer state.
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% (all properties have descriptions), so the baseline is 3. The description adds no extra semantic context beyond what the schema already provides; it merely repeats that multiple keyframes are set.
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 verb ('Set') and resource ('multiple keyframes') and explicitly differentiates from the singular sibling tool setLayerKeyframe by highlighting batch efficiency. This makes the purpose unambiguous and distinguishes it from the main alternative.
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 this is more efficient than repeated setLayerKeyframe calls, which tells the agent when to use this tool instead of the singular version. This is an explicit usage guideline with a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a distinct purpose: keyframe tools are differentiated by single/multiple and layer/effect scope, and the rest target different operations (composition, import, render, export, help, script execution). No two tools are easily confused.
Most tools follow a camelCase verbNoun pattern (createComposition, setLayerKeyframes, importFootage). The only exception is run-script, which uses lowercase with a hyphen, creating a minor inconsistency.
With 10 tools, the set is well-scoped for After Effects automation—covering composition creation, footage import, animation, rendering, and frame export. Each tool earns its place without redundancy.
The toolset covers core workflows but misses common operations like adding layers, setting static layer properties, or managing project files. The run-script tool can mitigate these gaps, but it is a workaround rather than a dedicated interface.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Build and run visual creative-production workflows from your AI agent.
Create AI animations and export transparent sprite sheets, alpha video, frames, and game assets.
Give your AI agents the tools to build, manage, and run automation workflows.
An MCP connector for Adobe After Effects. Real, editable layers and keyframes, not scripts.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables AI assistants to control Adobe After Effects for composition, layer, effect, preset, marker, and audio automation through a bridge panel.308416MIT
- AlicenseCqualityDmaintenanceEnables AI assistants to control Adobe After Effects through the MCP protocol, including composition creation, layer management, and animation.1384MIT
- -licenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to control Adobe After Effects through a standardized MCP protocol, providing tools for composition creation, layer management, and animation.
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to control Adobe After Effects for project inspection, composition creation, and layer manipulation via a hardened bridge panel.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/brandkickagency/aftereffects-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server