# io.github.AJSMonty/adobe-mcp (npm · @ajsmonty/adobe-mcp)

Drive Adobe CC (AE, Photoshop, Illustrator, Premiere, Character Animator) from any MCP client

- Trust score: 70/100 (medium)
- Change this week: +46
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-04

## Components

- npm · `@ajsmonty/adobe-mcp`: 70/100 (this document), [markdown](https://verifymcp.io/servers/ajsmonty-adobe-mcp/ajsmonty-adobe-mcp.md), [page](https://verifymcp.io/servers/ajsmonty-adobe-mcp/ajsmonty-adobe-mcp)

## Channel facts

- Registry: `npm`
- Package: `@ajsmonty/adobe-mcp`
- Version: `1.1.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-04.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 19 days ago).
  - Security-disclosure policy not yet verified: we couldn't inspect the source repository.
- **Schema Quality & AI Usability**: 77/100
  - AI-judged instruction clarity (excellent).
  - Tool/resource definitions use about 2876 tokens (~102/item across 28 items; 28 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 30/100
  - Stability observed for 9 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add ajsmonty-adobe-mcp -- npx -y @ajsmonty/adobe-mcp
```

### Codex

```bash
codex mcp add ajsmonty-adobe-mcp -- npx -y @ajsmonty/adobe-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ajsmonty-adobe-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@ajsmonty/adobe-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add ajsmonty-adobe-mcp --command npx --arg -y --arg @ajsmonty/adobe-mcp
```

### Hermes

```yaml
mcp_servers:
  ajsmonty-adobe-mcp:
    command: "npx"
    args: ["-y", "@ajsmonty/adobe-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "ajsmonty-adobe-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@ajsmonty/adobe-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-04 (score 70, 0)

- [functional regression] Security disclosure: fail → unverified

### 2026-08-03 (score 70, +4)

- [functional improvement] Stability: unverified → 0.27

### 2026-08-02 (score 66, +30)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] Schema quality: unverified → excellent
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] MCP protocol: unverified → pass
- [functional] Licence: MIT

### 2026-08-01 (score 36, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-07-31 (score 21, −25)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 46, +22)

- [functional improvement] Tool coverage: unverified → 100

### 2026-07-28 (score 24, −22)

- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified

### 2026-07-27 (score 46)

First indexed and scored.

## MCP tools (28)

### `ae_run_extendscript` (~171 tokens)

Run ExtendScript in After Effects

Execute ExtendScript (JSX) inside After Effects and return the result. Runs as a function body: end with `return <value>` (JSON-serialized). ES3 only — no arrow functions, template literals, let/const, JSON, Array.map. Collections are 1-indexed. Wrapped in one undo group. GOTCHAS: text wiggly selector matchName is 'ADBE Text Wiggly Selector'; seamless noise loops = Evolution expression time*(360/duration) + Cycle Evolution on; PSD-imported comps need nested durations extended and anchors re-placed from PS pixel bounds. More: knowledge_search.

Input parameters:

- `code` (string, required): ExtendScript function body; `return` sends back a result.
- `timeout_seconds` (number): Max seconds (default 120).

### `ae_get_state` (~65 tokens)

Inspect the open AE project

Project item tree (comps, footage, folders) with sizes/durations/layer counts, or one comp's layers in detail (kind, timing, transform, text, effects) via comp_name.

Input parameters:

- `comp_name` (string): Comp to inspect in layer-level detail.

### `ae_save_frame` (~78 tokens)

Render an AE comp frame to PNG

Render one frame of a comp and return it inline so you can visually verify work. AE 2022+.

Input parameters:

- `comp_name` (string, required): Composition to render.
- `max_width` (number): Downscale to at most this width (default 1024).
- `time` (number): Seconds (default: comp's current time).

### `ae_render_comp` (~134 tokens)

Render an AE comp via the Render Queue

Queue a comp and render it to disk (blocks until finished). Uses an H.264 output module template when available, else Lossless MOV. Registers the output as a workflow asset. If the call times out, the render may still have completed — check the output file (stable size, right duration) before re-queueing.

Input parameters:

- `comp_name` (string, required): Composition to render.
- `om_template` (string): Output module template name override.
- `output_path` (string): Absolute output path (default ~/Desktop/<comp>.mp4).
- `timeout_seconds` (number): Max seconds (default 570).

### `ps_run_extendscript` (~176 tokens)

Run ExtendScript in Photoshop

Execute ExtendScript (JSX) inside Photoshop and return the result. Runs as a function body: end with `return <value>`. ES3 only. Key DOM: app.documents, activeDocument, artLayers, layerSets, selection (polygon points), doc.saveAs/exportDocument, charIDToTypeID for ActionDescriptor work. GOTCHAS: the active document can silently change between calls — start scripts with app.activeDocument = app.documents.getByName(...); text sizes/positions need new UnitValue(n,'px') (plain numbers can throw 'Internal error'); no ellipse selection (pass a 72-point polygon); layer edits require the doc frontmost. More: knowledge_search.

Input parameters:

- `code` (string, required): ExtendScript function body.
- `timeout_seconds` (number): Max seconds (default 120).

### `ps_get_state` (~37 tokens)

Inspect open Photoshop documents

Lists open documents; for the active document returns the full layer tree (groups, layer kinds, text contents, visibility, opacity, bounds).

### `ps_save_preview` (~46 tokens)

Preview the active Photoshop document

Save a flattened PNG copy of the active document and return it inline for visual verification.

Input parameters:

- `max_width` (number): Downscale to at most this width (default 1024).

### `ps_export` (~83 tokens)

Export the active Photoshop document

Export the active document to png/jpg/psd at a path. PSD keeps layers (the format AE imports as a layered comp). Registers the file as a workflow asset.

Input parameters:

- `output_path` (string, required): Absolute output path; extension chooses format (.png/.jpg/.psd).
- `quality` (number): JPEG quality 1-12 (default 10).

### `ps_run_action` (~43 tokens)

Run a Photoshop action

Play a recorded action from an action set (instant reusable 'skill').

Input parameters:

- `action` (string, required): Action name.
- `action_set` (string, required): Action set name.

### `ai_run_extendscript` (~163 tokens)

Run ExtendScript in Illustrator

Execute ExtendScript (JSX) inside Illustrator and return the result. Runs as a function body: end with `return <value>`. ES3 only. Key DOM: app.documents, activeDocument, artboards, layers, pathItems (setEntirePath), textFrames, groupItems, symbols. Colors via new RGBColor(). GOTCHAS: exports/previews act on the ACTIVE document — activate by name first; documents.add() switches the active doc; no blend API (interpolate shapes in a loop); artboardRect is [0, H, W, 0] with Y up. More: knowledge_search.

Input parameters:

- `code` (string, required): ExtendScript function body.
- `timeout_seconds` (number): Max seconds (default 120).

### `ai_get_state` (~35 tokens)

Inspect open Illustrator documents

Lists open documents; for the active document returns artboards (name, rect), layers with item counts, and text frame contents.

### `ai_save_preview` (~66 tokens)

Preview an Illustrator artboard

Export the active document (active or given artboard) as PNG and return it inline for visual verification.

Input parameters:

- `artboard_index` (number): Artboard index (default: active).
- `max_width` (number): Downscale to at most this width (default 1024).

### `ai_export` (~92 tokens)

Export the active Illustrator document

Export to svg/png/pdf, or save a layered .ai copy (the format AE imports as a layered comp). Exports the ACTIVE document — set app.activeDocument to the right one first. Registers the file as a workflow asset.

Input parameters:

- `output_path` (string, required): Absolute output path; extension chooses format (.svg/.png/.pdf/.ai).
- `scale` (number): PNG scale percent (default 100).

### `ppro_run_extendscript` (~210 tokens)

Run ExtendScript in Premiere Pro

Execute ExtendScript inside Premiere via the mcp-bridge panel (must be open: Window → Extensions → MCP Bridge). Runs as a function body; end with `return <value>`. Key DOM: app.project (rootItem, sequences, importFiles, importAEComps), app.project.activeSequence (videoTracks/audioTracks/clips, markers), app.encoder. GOTCHAS: app.enableQE() unlocks qe.* (getVideoTransitionList returns an array of name strings; clip.addTransition(trans, atStart, '00:00:00:12')); autoReframeSequence needs the motion preset as the STRING 'default'; pre-trim cut lists with projectItem.setInPoint/setOutPoint(sec, 4) before createNewSequenceFromClips; dynamic-linked comps are named 'Comp/Project.aep'. More: knowledge_search.

Input parameters:

- `code` (string, required): ExtendScript function body.
- `timeout_seconds` (number): Max seconds (default 120).

### `ppro_get_state` (~44 tokens)

Inspect the open Premiere project

Project name/path, bin tree, sequences with track/clip inventory (clip name, start, end, duration in seconds). Also reports whether the bridge panel is alive.

### `ppro_import_media` (~49 tokens)

Import media files into Premiere

Import files into the project root (or a named bin, created if missing).

Input parameters:

- `bin_name` (string): Target bin name.
- `paths` (array, required): Absolute file paths to import.

### `ppro_import_ae_comp` (~70 tokens)

Dynamic Link an AE comp into Premiere

Import comps from an After Effects project file via Dynamic Link — no intermediate render; AE edits update the Premiere timeline live.

Input parameters:

- `aep_path` (string, required): Absolute path to the .aep project file (must be saved).
- `comp_names` (array, required): Comp names to link.

### `ppro_save_frame` (~59 tokens)

Export a frame of the active Premiere sequence

Render one frame of the active sequence to PNG and return it inline.

Input parameters:

- `max_width` (number): Downscale to at most this width (default 1024).
- `seconds` (number): Time in seconds (default: playhead).

### `ppro_export_sequence` (~124 tokens)

Export the active Premiere sequence

Render the active sequence to a file using an Adobe .epr encoder preset (searches Premiere's system presets for a match-source H.264 preset by default). Registers the output as an asset.

Input parameters:

- `output_path` (string, required): Absolute output path (e.g. ~/Desktop/edit.mp4).
- `preset_path` (string): Absolute path to an .epr preset (default: Match Source H.264).
- `timeout_seconds` (number): Max seconds (default 570).
- `work_area_only` (boolean): Export work area only (default false).

### `ch_taxonomy` (~44 tokens)

Character Animator rigging reference

Returns the PSD/AI layer-naming taxonomy Character Animator auto-rigs from. Use with ps_run_extendscript or ai_run_extendscript to author custom puppets.

### `ch_build_puppet` (~169 tokens)

Generate a rig-ready Character Animator puppet

Builds a layered PSD puppet in Photoshop with the full CH auto-rig taxonomy (head, brows, eyes with pupils+blinks, 14 mouth visemes, body with limbs) using a simple cartoon style, saves it to the workspace, and registers it as an asset. Import the PSD into CH to perform it.

Input parameters:

- `hair` (array): Hair RGB 0-255 (default [250,225,90]).
- `name` (string, required): Character name (used for the root group and filename).
- `shirt` (array): Shirt RGB 0-255 (default [51,140,191]).
- `skin` (array): Skin RGB 0-255 (default [255,222,184]).
- `timeout_seconds` (number): Max seconds (default 300).

### `workflow_assets` (~83 tokens)

List workflow assets

The shared cross-app asset registry. Every export/render from any adapter registers here with {id, app, kind, path}. Use it to pull one app's output into another.

Input parameters:

- `app` (string): Filter by app (ae/ps/ai/ppro).
- `kind` (string): Filter by kind (png/svg/psd/ai/video...).

### `handoff_import_to_ae` (~103 tokens)

Import a file into After Effects (layered handoff)

Import a file into the AE project. Layered .psd (Photoshop) and .ai (Illustrator) files can import as a COMP — every source layer becomes an animatable AE layer. This is the design→motion handoff.

Input parameters:

- `file_path` (string, required): Absolute path (.psd/.ai for layered import, or any footage).
- `import_as` (string): Default comp for .psd/.ai, else footage.

### `handoff_place_in_ps` (~52 tokens)

Place a file into the active Photoshop document

Place an image/vector file (SVG, PNG, AI...) as a layer in the active Photoshop document — the Illustrator→Photoshop handoff.

Input parameters:

- `file_path` (string, required): Absolute path to place.

### `list_scripts` (~60 tokens)

List installed script tools

List .jsx/.jsxbin tools in the per-app scripts library (scripts/{ae,ps,ai,ppro}/), with descriptions from header comments.

Input parameters:

- `app` (string): Filter to one app (ae/ps/ai/ppro).

### `run_script` (~101 tokens)

Run an installed script tool

Execute a script from the library in its app (like File → Scripts → Run Script File). Action scripts run immediately; ScriptUI panels open for the user. Set up selections first via the app's run_extendscript.

Input parameters:

- `app` (string, required): Which app: ae/ps/ai/ppro.
- `name` (string, required): Script filename from list_scripts (case-insensitive).
- `timeout_seconds` (number): Max seconds (default 120).

### `knowledge_search` (~101 tokens)

Search the adobe-mcp knowledge base

Search accumulated scripting lessons/gotchas for the Adobe apps (seeded + learned at runtime). Query by keywords, optionally filtered by app (ae/ps/ai/ppro/ch). Empty query lists everything. Consult this BEFORE attempting unusual scripting; it is cheaper than rediscovering a gotcha.

Input parameters:

- `app` (string): Filter: ae, ps, ai, ppro, ch.
- `query` (string): Keywords (empty = list all).

### `knowledge_add` (~165 tokens)

Record a new lesson in the knowledge base

Persist a scripting lesson/gotcha so future sessions (and other users of this install) benefit. Use after solving an error whose fix was NOT auto-suggested, or discovering a non-obvious technique. `match` keywords are matched against future error text to auto-surface the lesson — choose distinctive substrings of the error message (e.g. 'Illegal Parameter type').

Input parameters:

- `app` (string, required): ae, ps, ai, ppro, ch, or 'any'.
- `example` (string): Minimal working code example.
- `lesson` (string, required): The gotcha and its fix, 1-3 sentences.
- `match` (array): Error-text substrings that should auto-surface this lesson.
- `title` (string, required): Short name for the lesson.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/ajsmonty-adobe-mcp/ajsmonty-adobe-mcp#diagnostics

## Score history

- 2026-08-04: 70
- 2026-08-03: 70
- 2026-08-02: 66
- 2026-08-01: 36
- 2026-07-31: 21
- 2026-07-30: 46
- 2026-07-28: 24
- 2026-07-27: 46

## Links

- npm package: https://www.npmjs.com/package/@ajsmonty/adobe-mcp
- Socket report: https://socket.dev/npm/package/@ajsmonty/adobe-mcp
- Repository: https://github.com/AJSMonty/adobe-mcp
- Changelog RSS feed: https://verifymcp.io/servers/ajsmonty-adobe-mcp/ajsmonty-adobe-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/ajsmonty-adobe-mcp/ajsmonty-adobe-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/ajsmonty-adobe-mcp/ajsmonty-adobe-mcp
