mcp server
adobe-animate-mcp-server
Model Context Protocol server for Adobe Animate - allows AI to control and automate Adobe Animate through natural language commands. Includes 46 tools for document creation, drawing, animation, Action
Set up
Runs on your computer. Pick your agent and operating system.
Before you start
- Node.js 20 or newer
{
"mcpServers": {
"adobe-animate-mcp-server": {
"command": "npx",
"args": [
"-y",
"adobe-animate-mcp-server"
]
}
}
}same format Cursor, GitHub Copilot CLI, Junie, JetBrains AI Assistant, Augment (Auggie CLI), Factory Droid, Kiro, Devin CLI +12
Values in angle brackets are placeholders. Restart Claude Desktop after editing its config.Claude Desktop docs
README
synced Oct 25, 2026Overview
adobe-animate-mcp-server is a local Model Context Protocol server that lets an AI assistant control Adobe Animate through JSFL, Adobe Animate's scripting system.
Instead of manually writing and running JSFL scripts, you can ask your assistant to create documents, draw shapes, manage timelines, add ActionScript, inspect symbols and layers, read compiler output, and export/publish work. The server translates those requests into JSFL, runs them in Adobe Animate, and returns structured results back to the assistant.
This is especially useful for animation prototyping, Flash/Animate game workflows, repetitive authoring tasks, and debugging timeline or ActionScript projects.
Highlights
- Create new Animate documents with custom dimensions and frame rates.
- Draw rectangles, ovals, text, and imported image assets.
- Add layers, keyframes, classic tweens, and symbols.
- Add ActionScript 2.0 or 3.0 to frames, instances, and named symbols.
- Inspect the current project name, file path, save state, layers, and library items.
- Run custom JSFL and return structured JSON back to the AI assistant.
- Check compiler/debug output and trigger test movie workflows.
- Export or publish Animate projects from natural language commands.
Requirements
- Adobe Animate 2020 or later.
- Node.js 18 or later.
- An MCP-compatible client, such as Cursor, Claude Desktop, or another MCP host.
- Windows or macOS. The current executor includes Windows-oriented Animate paths, but the JSFL concepts are cross-platform.
Quick Start
Install dependencies and build the server:
npm install
npm run build
Start the server locally:
npm start
For development, rebuild and start in one command:
npm run dev
MCP Client Setup
Add the server to your MCP client configuration. Replace the example path with the absolute path to your local dist/index.js.
{
"mcpServers": {
"adobe-animate": {
"command": "node",
"args": [
"C:/path/to/adobe-animate-mcp-server/dist/index.js"
]
}
}
}
On Windows, forward slashes are recommended inside JSON paths:
C:/Users/YourName/projects/adobe-animate-mcp-server/dist/index.js
After saving the config, restart your MCP client so it reloads the server.
How It Works
flowchart LR
userPrompt["Natural language request"] --> mcpClient["MCP client"]
mcpClient --> server["Adobe Animate MCP Server"]
server --> toolRouter["Tool router"]
toolRouter --> jsflGenerator["JSFL generator"]
jsflGenerator --> animate["Adobe Animate"]
animate --> outputFile["Structured output file"]
outputFile --> server
server --> mcpClient
- You ask your assistant to do something in Adobe Animate.
- The MCP client sends a tool call to this server.
- The server chooses the matching tool and generates JSFL.
- The JSFL runs in Adobe Animate.
- Results are written to a temporary output file and returned to the assistant.
Example Prompts
Create a document:
Create a new Adobe Animate document that's 1280x720 at 30fps.
Draw artwork:
Draw a dark blue rectangle that fills the background, then add white title text in the center.
Set up a game scene:
Create layers named Background, Player, Enemies, UI, and Actions.
Organize the timeline:
Create a clean game timeline folder structure with Actions, UI, Player, Enemies, World, Background, and Audio folders.
Inspect the current project:
What is the current Animate project name and where is the FLA saved?
Debug ActionScript:
Test my movie and show me any compiler errors or warnings.
Run custom JSFL and return data:
Run custom JSFL that returns the current document name and layer count.
Tool Reference
Document And Drawing
| Tool | What It Does |
|---|---|
create_new_document | Creates a new Animate document with dimensions and frame rate. |
save_document | Saves the current .fla file to a specific path. |
add_layer | Adds a new timeline layer. |
draw_rectangle | Draws a rectangle on the stage. |
draw_oval | Draws an oval or ellipse on the stage. |
add_text | Adds editable text to the stage. |
import_image | Imports an image to the stage or library. |
export_movie | Publishes or exports the current animation. |
Animation
| Tool | What It Does |
|---|---|
create_keyframe | Inserts a keyframe at a specific frame. |
create_motion_tween | Creates a classic motion tween between frames. |
convert_to_symbol | Converts selected artwork into a movie clip, button, or graphic symbol. |
ActionScript 2.0 And 3.0
| Tool | What It Does |
|---|---|
get_actionscript_info | Reports document ActionScript version, document class, source/class paths, publish profile data, and AS2/AS3 capability warnings. |
set_actionscript_version | Attempts to set the document ActionScript version through safe JSFL properties and reports if the host blocks it. |
add_actionscript_to_frame | Adds AS2, AS3, or auto-detected ActionScript to a specific timeline frame. |
add_actionscript_to_instance | Adds AS2, AS3, or auto-detected ActionScript to the selected instance. |
add_actionscript_to_symbol_by_name | Finds a named symbol instance and adds AS2, AS3, or auto-detected ActionScript. |
set_document_class | Sets the AS3 document class. AS2 does not use AS3 document classes. |
add_stop_action | Adds stop(); to a frame. |
add_gotoAndPlay_action | Adds gotoAndPlay(...) frame navigation. |
add_gotoAndStop_action | Adds gotoAndStop(...) frame navigation. |
add_as2_keyboard_controls | Adds AS2 Key.isDown(...) movement controls for a player instance. |
add_as2_button_handler | Adds an AS2 button handler such as onRelease. |
add_as2_frame_loop | Adds an AS2 onEnterFrame loop. |
add_as3_keyboard_controls | Adds AS3 KeyboardEvent.KEY_DOWN movement controls for a player instance. |
add_as3_button_handler | Adds an AS3 MouseEvent.CLICK button handler. |
add_as3_document_class_stub | Creates an AS3 Main.as-style class file and sets it as the document class. |
create_actionscript_file | Creates an external AS2 or AS3 .as file beside the .fla or in a provided folder. |
scan_actionscript_usage | Scans frame and instance scripts and classifies likely AS2 vs AS3 syntax. |
test_movie_and_report | Starts Test Movie and returns ActionScript/project metadata plus compiler-output guidance. |
Inspection And Debugging
| Tool | What It Does |
|---|---|
get_document_info | Returns document dimensions, timeline state, layers, and project name fields. |
get_project_info | Returns project name, file path, save state, document class, timeline summary, and library summary. |
get_compiler_errors | Reads document/debug status or starts a test movie compile check. |
clear_output_panel | Clears the Adobe Animate output panel. |
get_library_items | Lists symbols, bitmaps, sounds, fonts, and other library items. |
get_layers_info | Returns detailed layer information. |
get_timeline_tree | Returns the timeline as folder/layer metadata. |
select_layer_by_name | Selects a layer by name. |
Utilities
| Tool | What It Does |
|---|---|
select_all | Selects all elements on the current frame. |
delete_selection | Deletes the current selection. |
run_custom_jsfl | Runs custom JSFL for advanced workflows. |
ActionScript 2.0 And 3.0 Support
This MCP has version-aware ActionScript tooling. It can insert, inspect, template, scan, and manage both AS2-style and AS3-style code.
There is one important product limitation: modern Adobe Animate supports AS3, while AS2 is legacy/deprecated and may require an older Flash/Animate host to compile. The MCP does not hide that limitation. When you request AS2, tools return capability warnings if the current document/app does not report AS2 support.
Use get_actionscript_info before adding larger scripts:
Check the current ActionScript version and tell me whether this FLA can compile AS2 or AS3.
Add AS2 frame code:
Add AS2 keyboard controls for the player instance named player.
Add AS3 frame code:
Add AS3 keyboard controls for the player instance named player.
Create an external AS3 document class:
Create an AS3 document class stub named Main and set it as the document class.
Create an external AS2 class/helper file:
Create an AS2 ActionScript file named GameController beside the FLA.
Scan for mixed script styles:
Scan this FLA for ActionScript and tell me whether it looks like AS2, AS3, or mixed.
Supported version modes:
as2 Legacy ActionScript 2.0 code and templates.
as3 Modern ActionScript 3.0 code and templates.
auto Infer the likely version from the code and document metadata.
Timeline Folder Organization
| Tool | What It Does |
|---|---|
create_layer_folder | Creates a timeline folder layer with optional placement, visibility, and lock settings. |
create_timeline_folder_structure | Creates a reusable folder/layer structure for game projects. |
move_layer_to_folder | Moves a layer into a folder block using Animate's timeline ordering APIs. |
set_folder_expanded | Expands or collapses one folder, or all folders with folderName: "*" |
rename_layer_or_folder | Renames an existing layer or folder by name. |
delete_layer_or_folder | Deletes a layer or folder, optionally including the folder's child layer block. |
Timeline Folder Workflow
Timeline folders help keep a Flash or Animate game project readable. A clean game timeline might look like this:
Actions
Frame Scripts
Labels
UI
HUD
Menus
Text
Player
Player Art
Player Hitbox
Player Effects
Enemies
Enemy Art
Enemy Hitboxes
Enemy Effects
World
Platforms
Pickups
Triggers
Background
Sky
Backdrop
Parallax
Audio
Music
SFX
You can ask the assistant to create that structure in one request:
Create the default game timeline folder structure.
Then inspect it:
Show me the timeline tree and tell me which layers have ActionScript.
The timeline tree response includes folder layers, child layers, visibility, lock state, frame counts, and whether each layer contains ActionScript.
Note: Adobe Animate's JSFL API exposes timeline layers mostly as a flat list. The MCP interprets folder membership as a folder block: the folder layer plus the following non-folder layers until the next folder. This matches the way the new folder tools create and organize game timelines.
Project Metadata Capture
The get_project_info tool is designed for workflows where the assistant needs to understand the active Animate file before making changes.
Typical response fields include:
{
"projectName": "GLING DING HORROR GAME",
"documentName": "GLING DING HORROR GAME.fla",
"fileName": "GLING DING HORROR GAME.fla",
"path": "C:\\Users\\You\\Documents\\GLING DING HORROR GAME.fla",
"saved": true,
"modified": false,
"dimensions": {
"width": 640,
"height": 480,
"frameRate": 30
}
}
This helps the assistant avoid guessing which project is open and makes it easier to build game-specific workflows around the active .fla.
Custom JSFL Output
run_custom_jsfl supports structured output. Inside your JSFL, assign a value to __mcpResult and the server will return it to the MCP client:
var doc = fl.getDocumentDOM();
__mcpResult = {
documentName: doc ? doc.name : null,
layerCount: doc ? doc.getTimeline().layerCount : 0
};
If custom JSFL throws an error, the MCP response includes the error instead of only saying the script executed.
Example Scripts
The examples/ directory contains standalone JSFL scripts that can be run manually from Adobe Animate:
examples/create_bouncing_ball.jsflexamples/create_text_animation.jsflexamples/draw_shapes.jsfl
To run one manually, open Adobe Animate and choose Commands > Run Command..., then select the .jsfl file.
Project Structure
adobe-animate-mcp-server/
├── src/
│ ├── index.ts
│ ├── tools.ts
│ └── jsfl-executor.ts
├── examples/
├── dist/
├── adobe-animate-logo.png
├── package.json
├── tsconfig.json
└── README.md
Key files:
src/index.tsstarts the MCP server and registers tool handlers.src/tools.tsdefines tool schemas and generates JSFL scripts.src/jsfl-executor.tswrites JSFL to disk, launches Animate, captures structured output, and returns it to the MCP client.
Development
Build the TypeScript project:
npm run build
Run the compiled server:
npm start
Run a development cycle:
npm run dev
Troubleshooting
Adobe Animate Must Be Running
Adobe Animate needs to be installed and available for JSFL execution. Some workflows work best when Animate is already open with a document loaded.
Restart Your MCP Client After Changes
If you add a new tool or rebuild the server, restart your MCP client so it reloads the tool list.
Use Forward Slashes In Config Paths
Use this in MCP JSON config:
C:/Users/YourName/projects/adobe-animate-mcp-server/dist/index.js
Avoid unescaped backslashes in JSON:
C:\Users\YourName\projects\adobe-animate-mcp-server\dist\index.js
Manual JSFL Fallback
If automatic execution fails, you can still run generated JSFL manually:
- Copy the JSFL script.
- Open Adobe Animate.
- Choose Commands > Run Command....
- Paste or select the script and run it.
You can also place reusable .jsfl commands in:
C:\Users\[YourUsername]\AppData\Local\Adobe\Animate [Version]\en_US\Configuration\Commands\
Resources
Contributing
Contributions are welcome. Good areas to improve include:
- More game-development helper tools.
- Better export/publish profile control.
- More robust cross-platform Animate executable discovery.
- Additional JSFL examples and templates.
- End-to-end tests for generated JSFL snippets.
License
MIT License. See LICENSE for details.
Disclaimer
This is an unofficial community project. It is not affiliated with, sponsored by, or endorsed by Adobe. Adobe Animate is a trademark of Adobe Inc.