Cavi Adobe Authoring MCP
# Cavi Adobe MCP
Local MCP servers for Adobe Photoshop, Illustrator, After Effects, Animate, Character
Animator and Dimension. Each server edits owned copies of documents inside one
workspace, records every native operation before it runs, and reports an uncertain
outcome as unknown instead of retrying it.
| Command | Server name | Applications |
|---|---|---|
| `cavi-adobe-authoring-mcp` | `cavi-adobe-authoring` | Photoshop, Illustrator, After Effects (`aerender`), FFmpeg review movies |
| `cavi-animate-mcp` | `cavi-animate-authoring` | Animate |
| `cavi-character-animator-mcp` | `cavi-character-animator-mcp` | Character Animator |
| `cavi-dimension-mcp` | `cavi-adobe-dimension` | Dimension |
Startup and tool discovery never launch an application. A tool reaches an application
only when it is called, and only an application that is already installed and licensed.
## Requirements
- macOS, Python 3.11+ and [uv](https://docs.astral.sh/uv/).
- The Adobe applications you use, installed and signed in. No license or account is
supplied by these servers.
- Automation access for the MCP host to control the application (Photoshop,
Illustrator, Animate). The servers never request permissions; they report a denial.
- Animate and Character Animator also use a small native helper compiled on first use,
which needs the Swift command-line compiler (`xcode-select --install`) and existing
Accessibility access. Character Animator capture also needs Screen Recording access.
- `ffmpeg` on `PATH` for review movies.
## Install
```sh
uv tool install cavi-adobe-mcp
```
Register the servers you need in your MCP client and set the workspace:
```json
{
"mcpServers": {
"adobe-authoring": {
"command": "cavi-adobe-authoring-mcp",
"env": {"CAVI_ADOBE_WORKSPACE": "/Users/me/Art"}
}
}
}
```
## Configuration
| Variable | Meaning |
|---|---|
| `CAVI_ADOBE_WORKSPACE` | Absolute directory every tool path is relative to. Required. |
| `CAVI_ADOBE_DATA` | Private server state: native helper builds and Character Animator journals. Defaults to `~/.local/share/cavi-adobe-mcp`. |
| `CAVI_CHARACTER_ANIMATOR_APP` | The Character Animator application, when more than one is installed. |
Ownership records live inside the workspace (`.adobe-authoring/`, `.animate-authoring/`);
keep them private.
## Tools
- Authoring: `adobe_status`, `adobe_inspect`, `adobe_open_copy`, `adobe_create_canvas`,
`adobe_edit_layers`, `adobe_add_group`, `adobe_place_image`, `adobe_add_rectangle`,
`adobe_add_path`, `adobe_add_text`, `adobe_apply_mask`, `adobe_fonts`, `adobe_export`,
`adobe_close_copy`, `adobe_operation_control`, `after_effects_render`,
`media_review_movie`.
- Animate: `animate_status`, `animate_inspect`, `animate_open_copy`,
`animate_create_from_png`, `animate_set_stage_size_from_source`, `animate_edit_timeline`,
`animate_export_frames`, `animate_close_copy`, `animate_operation_control`.
- Character Animator: `character_status`, `session_control`, `project_select`,
`project_save_copy`, `inspect`, `capture`, `scene_action`, `scene_export`,
`import_media`, `export_inspect`, `export_ingest`, `operation_control`.
- Dimension: `dimension_status`, `dimension_launch`, `dimension_inspect`,
`dimension_render_start`, `dimension_render_inspect`.
Every tool error returns one structured result (`code`, `outcome`, `next_action`) from
[`cavi-mcp-core`](https://github.com/cavi-ai/mcp-core). An `unknown` outcome means the
application may have changed: inspect it, or resolve the recorded operation with the
server's `operation_control` tool, before trying again.
## Development
```sh
uv sync --locked --dev
uv run --locked python -m unittest discover -s tests
uv run --locked ruff check .
```
Tests that drive the real applications run only when their `CAVI_*_NATIVE` variable is
set; the rest use recorded responses and never launch an application.
## License
MIT. Adobe, Photoshop, Illustrator, After Effects, Animate, Character Animator and
Dimension are trademarks of Adobe Inc.; this project is not affiliated with Adobe.
TDQS
Scored across 17 tools
Most tools target a distinct resource+action (open_copy, create_canvas, place_image, add_text, apply_mask, export, close_copy), so an agent can generally select correctly. The main soft spots are the state-inspection cluster (adobe_status vs adobe_inspect vs adobe_operation_control) and the two geometry creators (adobe_add_rectangle vs adobe_add_path), which require reading descriptions to separate.
The majority are snake_case verb_noun with an adobe_ prefix, but the prefix scheme is split (adobe_*, after_effects_render, media_review_movie) and two tools (adobe_fonts, adobe_operation_control) are noun-only rather than verb-led. Still readable, but not a single predictable convention.
17 tools is at the heavy edge for a single server, but the scope genuinely spans Photoshop, Illustrator, After Effects rendering, and FFmpeg review, and each tool maps to a distinct authoring step. Nothing looks like filler, though it is close to the point where splitting by app would help.
The lifecycle is well covered: open/copy, canvas creation, composition primitives (group, image, rect, path, text), layer edit, masking, export, close, and retained-operation recovery, plus render and review for animation. The notable gap is mutation of existing content — no delete/remove, move/transform, or text re-edit tool — so revisions rely on rebuilding or discarding the owned copy.