Rust-based MCP servers and Adobe host bridge panels for LLM-driven local automation.
This repository was renamed from after-effects-mcp-rs to adobe-mcp-rs so the project can grow beyond After Effects. The current codebase contains the most complete implementation for After Effects, plus experimental Premiere Pro, Photoshop, Illustrator, and InDesign paths.
- Japanese: README-ja.md
Last synchronized with the code on 2026-07-15.
| Host app | Binary | Bridge runtime | Status | Current boundary |
|---|---|---|---|---|
| After Effects | ae-mcp |
Startup / ExtendScript JSX | Primary | Uses a headless Startup bootstrap and the serve-daemon broker |
| Premiere Pro | pr-mcp |
UXP 25.6+, CEP / ExtendScript 24.0+ fallback | Experimental | Initial sequence/export surface; serve-daemon broker required |
| Photoshop | ps-mcp |
UXP 23.3+ (API v2) | Experimental | Initial generic execution and read-only document/layer surface |
| Illustrator | ai-mcp |
CEP / ExtendScript 24.0+ (CSXS 10) | Experimental | Initial document/artboard/layer/export surface; runtime packaging needs validation |
| InDesign | id-mcp |
UXP Startup Script 18.5+ PoC | Experimental | Panel-free raw app.doScript and document/page/story reads; real-host verification required |
Primary means the default operational path is implemented. Experimental means a binary, bridge, and minimal MCP surface exist, but real-host E2E, packaging, runtime compatibility, or broker/service parity still needs hardening. Planned is reserved for hosts without a usable binary-and-bridge pair. See the host status source of truth for the full criteria, runtime constraints, and verification procedure.
The workspace is split into reusable Rust crates and host-specific binaries:
| Path | Role |
|---|---|
crates/ae-mcp |
After Effects CLI, MCP stdio server, daemon, and bridge commands |
crates/pr-mcp |
Premiere Pro CLI and MCP stdio server |
crates/ps-mcp |
Photoshop CLI and MCP stdio server |
crates/ai-core |
Illustrator tool specs, prompts, and allowlisted script names |
crates/ai-mcp |
Illustrator CLI and MCP stdio server |
crates/id-core |
InDesign raw-first tool specs and allowlisted read templates |
crates/id-mcp |
InDesign CLI and MCP stdio server |
crates/mcp-core |
Shared config, MCP tool/prompt specs, bridge path defaults |
crates/bridge-core |
File bridge client, instance discovery, request registry, result retention |
crates/daemon-core |
Shared TCP broker/client, per-instance scheduler, global-exclusive gate |
crates/platform-service |
Windows current-user autostart and macOS launchd helpers |
crates/pr-core |
Premiere Pro tool specs, prompts, and allowlisted script names |
crates/ps-core |
Photoshop tool specs, help text, and allowlisted script names |
src/scripts |
After Effects JSX bridge and helper scripts |
src/premiere/uxp |
Premiere Pro UXP bridge panel |
src/premiere/cep |
Legacy Premiere Pro CEP bridge fallback |
src/photoshop/uxp |
Photoshop UXP bridge panel |
src/illustrator/cep |
Illustrator CEP / ExtendScript bridge panel |
src/indesign/uxp |
InDesign UXP Startup Script bridge |
All five binaries use the same local TCP broker model: serve-stdio proxies normal MCP execution to serve-daemon, which routes file-bridge commands to instances/<instanceId>/ and retains results by requestId. Jobs are FIFO within one instance, may run in parallel on separate instances, and can request a host-wide global-exclusive gate.
Default loopback addresses are host-specific: After Effects 127.0.0.1:47655, Premiere Pro :47656, Photoshop :47657, Illustrator :47658, and InDesign :47659. daemon_addr in a host-specific config can override the default. The root command/result files and each binary's bridge CLI remain available only for compatibility and diagnostics; they are not the normal MCP transport. See ADR 0001.
Prerequisites:
- Rust stable and Cargo
- The Adobe host app you want to automate
- For UXP bridges, Adobe UXP Developer Tool and host developer mode where required
Build all Rust binaries:
cargo build --releaseBuild one host binary:
cargo build --release -p ae-mcp
cargo build --release -p pr-mcp
cargo build --release -p ps-mcp
cargo build --release -p ai-mcp
cargo build --release -p id-mcpInstall the headless bridge runtime and Startup bootstrap:
powershell -ExecutionPolicy Bypass -File .\scripts\install-bridge.ps1bash ./scripts/install-bridge.shIn After Effects:
- Enable
Allow Scripts to Write Files and Access Network. - Restart After Effects.
The repository bridge is designed to start from Scripts/Startup without opening a panel or enabling an Auto-run checkbox. This headless lifecycle still requires real-host validation across supported AE versions; see After Effects bridge lifecycle.
Run the broker:
.\target\release\ae-mcp.exe serve-daemonRegister the MCP server:
codex mcp add aftereffects -- "<ABSOLUTE_PATH>\target\release\ae-mcp.exe" serve-stdioBuild the binary:
cargo build --release -p pr-mcpLoad the UXP bridge from src/premiere/uxp/mcp-bridge-premiere with Adobe UXP Developer Tool, then open Window > UXP Plugins > Premiere MCP Bridge in Premiere Pro and enable Auto-run commands.
Start pr-mcp serve-daemon before registering or using the MCP server.
Register the MCP server:
codex mcp add premiere -- "<ABSOLUTE_PATH>\target\release\pr-mcp.exe" serve-stdioBuild the binary:
cargo build --release -p ps-mcpLoad the UXP bridge from src/photoshop/uxp/mcp-bridge-photoshop with Adobe UXP Developer Tool, then open Photoshop MCP Bridge from the Photoshop Plugins menu and keep Auto-run commands enabled.
Start ps-mcp serve-daemon before registering or using the MCP server.
Register the MCP server:
codex mcp add photoshop -- "<ABSOLUTE_PATH>\target\release\ps-mcp.exe" serve-stdioBuild the binary:
cargo build --release -p ai-mcpInstall or copy src/illustrator/cep/mcp-bridge-illustrator into a CEP extensions directory, then open Window > Extensions > Illustrator MCP Bridge in Illustrator and enable Auto-run commands.
Start ai-mcp serve-daemon before registering or using the MCP server.
Register the MCP server:
codex mcp add illustrator -- "<ABSOLUTE_PATH>\target\release\ai-mcp.exe" serve-stdioBuild id-mcp, copy src/indesign/uxp/mcp-bridge-indesign.idjs into the installed InDesign version's Scripts/Startup Scripts folder, restart InDesign, and start id-mcp serve-daemon. The repository design has no panel or Auto-run toggle, but Startup Script persistence remains a real-host PoC gate.
The raw-first run-script surface uses InDesign's documented app.doScript String input instead of eval/Function. Inline and file sources are synchronous function bodies that receive args and return a value, not general top-level .idjs programs; top-level await and caller-owned script.setResult are unsupported. This is a real-host-unverified PoC; see InDesign MCP PoC and E2E gate before relying on it for production documents.
codex mcp add indesign -- "<ABSOLUTE_PATH>\target\release\id-mcp.exe" serve-stdioAfter Effects:
.\target\release\ae-mcp.exe health
.\target\release\ae-mcp.exe serve-daemonIn another terminal:
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list-ae-instances","arguments":{}}}' | .\target\release\ae-mcp.exe serve-stdioPremiere Pro:
.\target\release\pr-mcp.exe health
.\target\release\pr-mcp.exe serve-daemonIn another terminal:
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list-premiere-instances","arguments":{}}}' | .\target\release\pr-mcp.exe serve-stdioPhotoshop:
.\target\release\ps-mcp.exe health
.\target\release\ps-mcp.exe serve-daemonIn another terminal:
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list-photoshop-instances","arguments":{}}}' | .\target\release\ps-mcp.exe serve-stdioIllustrator:
.\target\release\ai-mcp.exe health
.\target\release\ai-mcp.exe serve-daemonIn another terminal:
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list-illustrator-instances","arguments":{}}}' | .\target\release\ai-mcp.exe serve-stdioAfter Effects currently exposes:
run-jsxrun-jsx-fileget-jsx-resultlist-ae-instancesget-resultsget-helpsave-frame-pngcleanup-preview-folderrun-bridge-test
This nine-tool list is the complete After Effects public contract returned by tools/list. Historical names such as run-script, create-composition, effect helpers, render-queue helpers, and project lifecycle helpers remain accepted only by hidden compatibility dispatch. A legacy call includes a deprecation notice and its public replacement; prompts and setup instructions do not depend on hidden names.
run-script is intentionally not republished. Its allowlist remains useful for old clients, but its asynchronous direct-file behavior does not match the synchronous daemon-backed public contract. New host-specific operations should use explicit run-jsx calls (mode: "unsafe"). The aftereffects://compositions resource and every operation named by an After Effects prompt use the daemon broker; prompts themselves only return reusable instructions.
Premiere Pro currently exposes:
run-jsxrun-jsx-filerun-scriptget-jsx-resultget-resultsget-helplist-premiere-instancesrun-bridge-test
Photoshop currently exposes:
run-jsxrun-jsx-filerun-scriptget-jsx-resultget-resultsget-helplist-photoshop-instancesrun-bridge-test
Illustrator currently exposes:
run-jsxrun-jsx-filerun-scriptget-jsx-resultget-resultsget-helplist-illustrator-instancesrun-bridge-test
For arbitrary code execution, pass mode: "unsafe" and a short description. unsafe does not mean sandboxed: host-side JavaScript/JSX runs with the Adobe host's authority. See the run-jsx-file trust policy for allowed roots, trusted path/hash entries, extensions, migration behavior, and retained audit metadata.
The public API follows a raw-script-first direction. When an LLM can compose the host JavaScript/JSX directly, generic script execution, structured input, recipes, and result recovery take priority over one Tool per operation. Static deletion detection and confirmation can reduce accidents but do not create a sandbox, so they are described as risk policies rather than a "safe mode." See the capability matrix for the host comparison, proposed schemas, guard limitations, and Tool admission criteria.
- Done: Extract host metadata into
HostSpec. - Done: Normalize the bridge protocol and retained request records across hosts.
- Done: Share the
daemon-corebroker model across all five binaries; keep direct file bridge only for compatibility and diagnostics. - Introduce a common script contract, capability reporting, payload limits, and explicitly non-sandboxed risk preflight in phases.
- Validate and harden the InDesign UXP Startup Script PoC and After Effects automatic-start/reconnect PoC on real hosts.
- Harden Photoshop write/modal/export and Illustrator export/packaging behavior against real host versions.
Detailed notes are in docs/adobe-host-roadmap.md.
The repository container keeps the bare Git data, the main checkout, and issue worktrees separate:
Documents/GitHub/adobe-mcp-rs/
.repo.git/ # central bare repository
main/ # main worktree
worktrees/ # issue/feature worktrees
Useful commands:
cd .\main
git worktree list
git worktree add ..\worktrees\issue-123 -b codex/issue-123 main
git worktree remove ..\worktrees\issue-123See docs/worktree.md for the local workflow notes.
- Adobe host roadmap
- Adobe host capability matrix and raw-script-first policy
- After Effects MCP public surface
- Worktree workflow
- Codex MCP setup
- Operations runbook
- Bridge contract and Adobe host smoke testing
- InDesign MCP PoC and E2E gate
- Installer E2E guide
- Release checklist
- Rust migration specification
- TS to Rust migration guide
This project is licensed under the MIT License. See LICENSE.