Skip to main content
Glama
README.md
# 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

B3/5.0

Scored across 17 tools

Disambiguation4/5

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.

Naming Consistency3/5

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.

Tool Count4/5

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.

Completeness4/5

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.

Maintenance

ActivityMaintained
ResponsivenessNo issues