premiere-pro-mcp 1.19.0 → 1.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +89 -0
- package/README.md +77 -17
- package/after-effects-cep-plugin/CSXS/manifest.xml +3 -3
- package/after-effects-cep-plugin/bridge-directory-security.cjs +1 -0
- package/artifacts/MCPBridgeCEP.zxp +0 -0
- package/cep-plugin/CSXS/manifest.xml +3 -3
- package/cep-plugin/bridge-directory-security.cjs +1 -0
- package/cep-plugin/index.html +1 -1
- package/cep-plugin/main.js +3 -0
- package/cep-plugin/updater.cjs +1 -1
- package/dist/ai/editorial-review.d.ts +263 -0
- package/dist/ai/editorial-review.js +262 -0
- package/dist/ai/transcript-word-edits.d.ts +8 -1
- package/dist/ai/transcript-word-edits.js +28 -4
- package/dist/bridge/file-bridge.d.ts +8 -1
- package/dist/bridge/file-bridge.js +88 -12
- package/dist/bridge/script-builder.js +89 -7
- package/dist/bridge/uxp-websocket-bridge.d.ts +5 -0
- package/dist/bridge/uxp-websocket-bridge.js +30 -1
- package/dist/context/context-storage-security.d.ts +5 -0
- package/dist/context/context-storage-security.js +54 -0
- package/dist/context/project-context-store.js +77 -18
- package/dist/index.js +1 -1
- package/dist/platform-capabilities.d.ts +3 -3
- package/dist/security/capabilities.js +6 -0
- package/dist/server.js +6 -0
- package/dist/tool-capability-report.js +5 -0
- package/dist/tools/adjacent-media-bounds.js +5 -2
- package/dist/tools/advanced.d.ts +18 -0
- package/dist/tools/advanced.js +83 -24
- package/dist/tools/audio.d.ts +1 -1
- package/dist/tools/audio.js +45 -17
- package/dist/tools/clipboard.js +175 -122
- package/dist/tools/competitor-gaps.d.ts +18 -0
- package/dist/tools/competitor-gaps.js +81 -12
- package/dist/tools/discovery.d.ts +38 -2
- package/dist/tools/discovery.js +13 -6
- package/dist/tools/edit-plans.d.ts +23 -11
- package/dist/tools/edit-plans.js +89 -8
- package/dist/tools/editor-requests.d.ts +7 -0
- package/dist/tools/editor-requests.js +27 -9
- package/dist/tools/editorial-review.d.ts +119 -0
- package/dist/tools/editorial-review.js +34 -0
- package/dist/tools/effects.js +49 -4
- package/dist/tools/export.d.ts +60 -1
- package/dist/tools/export.js +362 -26
- package/dist/tools/health.d.ts +3 -3
- package/dist/tools/inspection.d.ts +60 -3
- package/dist/tools/inspection.js +71 -27
- package/dist/tools/interchange-analysis.d.ts +1 -0
- package/dist/tools/interchange-analysis.js +7 -3
- package/dist/tools/keyframes.d.ts +42 -0
- package/dist/tools/keyframes.js +99 -41
- package/dist/tools/markers.js +30 -9
- package/dist/tools/mask-fit.js +3 -1
- package/dist/tools/media.d.ts +5 -0
- package/dist/tools/media.js +33 -10
- package/dist/tools/metadata.d.ts +20 -0
- package/dist/tools/metadata.js +59 -48
- package/dist/tools/mogrt-validation.d.ts +3 -0
- package/dist/tools/mogrt-validation.js +23 -0
- package/dist/tools/playback.js +5 -6
- package/dist/tools/playhead.js +46 -16
- package/dist/tools/project.d.ts +12 -1
- package/dist/tools/project.js +35 -3
- package/dist/tools/ripple-delete-script.d.ts +2 -0
- package/dist/tools/ripple-delete-script.js +66 -15
- package/dist/tools/ripple-remove-ranges.d.ts +93 -0
- package/dist/tools/ripple-remove-ranges.js +263 -0
- package/dist/tools/ripple-timeout.d.ts +10 -0
- package/dist/tools/ripple-timeout.js +13 -0
- package/dist/tools/scripting.d.ts +33 -1
- package/dist/tools/scripting.js +22 -7
- package/dist/tools/sequence-read.d.ts +44 -0
- package/dist/tools/sequence-read.js +56 -0
- package/dist/tools/source-monitor.js +2 -2
- package/dist/tools/source-to-timeline.d.ts +84 -0
- package/dist/tools/source-to-timeline.js +167 -0
- package/dist/tools/spot-workflows.js +3 -1
- package/dist/tools/stock-titles.js +1 -1
- package/dist/tools/text.js +4 -0
- package/dist/tools/timeline.d.ts +12 -0
- package/dist/tools/timeline.js +114 -49
- package/dist/tools/track-targeting.d.ts +10 -0
- package/dist/tools/track-targeting.js +125 -35
- package/dist/tools/transcript-word-edits.js +1 -1
- package/dist/tools/transitions.js +40 -12
- package/dist/tools/utility.d.ts +12 -0
- package/dist/tools/utility.js +30 -2
- package/dist/tools/uxp-advanced-workflows.js +2 -2
- package/dist/tools/uxp-apply-snapshot.d.ts +19 -0
- package/dist/tools/uxp-apply-snapshot.js +41 -0
- package/dist/tools/uxp-clone-workflows.d.ts +5 -1
- package/dist/tools/uxp-clone-workflows.js +14 -11
- package/dist/tools/uxp-next-workflows.d.ts +1 -0
- package/dist/tools/uxp-next-workflows.js +8 -1
- package/dist/tools/uxp-ripple-delete-workflows.d.ts +5 -1
- package/dist/tools/uxp-ripple-delete-workflows.js +16 -13
- package/dist/tools/uxp-slide-workflows.d.ts +5 -1
- package/dist/tools/uxp-slide-workflows.js +15 -12
- package/dist/tools/uxp-slip-workflows.d.ts +4 -0
- package/dist/tools/uxp-slip-workflows.js +3 -2
- package/dist/tools/uxp.d.ts +32 -1
- package/dist/tools/uxp.js +15 -2
- package/dist/tools/workflow-recipes.d.ts +7 -2
- package/dist/tools/workflow-recipes.js +11 -2
- package/dist/workflows/agent-instructions.js +10 -5
- package/dist/workflows/catalog.d.ts +28 -3
- package/dist/workflows/catalog.js +31 -1
- package/dist/workflows/tool-metadata.js +5 -0
- package/dist/workflows/tool-packs.js +2 -0
- package/docs/editorial-review-workflows.md +95 -0
- package/docs/supported-actions.md +40 -33
- package/package.json +3 -2
- package/public-product-manifest.json +6 -6
- package/scripts/normalize-release-names.mjs +72 -0
- package/uxp-plugin/advanced-workflows.cjs +87 -12
- package/uxp-plugin/clone-workflows.cjs +8 -0
- package/uxp-plugin/commands.cjs +28 -4
- package/uxp-plugin/dialogue-workflows.cjs +4 -0
- package/uxp-plugin/index.cjs +1 -0
- package/uxp-plugin/manifest.json +1 -1
- package/uxp-plugin/next-workflows.cjs +20 -7
- package/uxp-plugin/ripple-delete-workflows.cjs +38 -0
- package/uxp-plugin/slide-workflows.cjs +42 -4
- package/uxp-plugin/slip-workflows.cjs +65 -24
- package/uxp-plugin/transcript-import.cjs +35 -14
- package/uxp-plugin/unique-identity-workflows.cjs +18 -4
- package/uxp-plugin/workspace.cjs +26 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,95 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [1.20.0] - 2026-10-06
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- `ripple_remove_timeline_ranges` previews and then applies a multi-range ripple removal (up to 50 sorted ranges) across unlocked, sync-locked tracks. Apply needs a single-use preview confirmation token and the `edit` capability, cuts on Premiere's own sequence timecode, and verifies every resulting clip by readback. It uses the experimental QE razor; a timeout after Premiere accepts the edit is reported as `mutationOutcome: "unknown"`. Live Premiere verification was reported by the contributor on 25.2.3 and 26.5.2; it was not re-run for this release.
|
|
14
|
+
|
|
15
|
+
- `set_footage_interpretation` accepts `field_type` (0 progressive, 1 upper field first, 2 lower field first) and reads it back (#806).
|
|
16
|
+
- `import_folder` accepts `target_bin` and skips `Thumbs.db`, `desktop.ini` and `.DS_Store` (#807).
|
|
17
|
+
- `get_encoder_presets` accepts `limit` and `offset`; the result adds `total` and `offset` (#808).
|
|
18
|
+
- `import_fcp_xml` accepts `mode: "into_open_project"` (with optional `target_bin`) to import into the open project; it succeeds only when the sequence count grew, and `project_path` is required only in the default `new_project` mode (#811).
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- `import_media` no longer reports an error when an `.xml`, `.aaf`, `.edl` or `.prproj` file imports correctly. Interchange files create sequences and bins rather than an item with the file's path, so they now return `outcome: "committed_unverified"` with `interchange: true`, which stops retries from duplicating the sequence (#805).
|
|
23
|
+
|
|
24
|
+
- `duplicate_clip` no longer places a copy one frame short. Premiere can snap the source out point a frame early, so on Premiere 26.5.2 a 677-frame clip was copied as 676 frames, and the tool still reported `verified` because it allowed two frames of drift. It now trims each placed copy, and its linked partner, back to the original end, reports `endCorrected`, and verifies start, end and source in-point to within half a frame.
|
|
25
|
+
|
|
26
|
+
- Effect parameter reads and writes use Premiere's lossless colour API for static colour controls, returning `[alpha, red, green, blue]` instead of a packed number. CEP refuses keyframed colour operations that cannot be read or written losslessly. Effect tools now refuse repeated property names with candidate indices or accept `property_index`; this applies to parameter reads, writes, keyframe operations, colour correction and built-in property workflows that resolve names.
|
|
27
|
+
|
|
28
|
+
- `razor_all_tracks` and `split_clip` cut on the requested frame in drop-frame sequences. They built a non-drop `HH:MM:SS:FF` string, which Premiere reads as drop-frame timecode on 29.97/59.94 DF sequences, so cuts landed early by the dropped-frame count (2 frames after the first minute, 28 frames at 16 minutes, measured on 25.2.3) and `razor_all_tracks` still reported `verified: true`. Both now let Premiere format the timecode in the sequence's display format, snap the cut to a frame, and verify the new boundary within half a frame; `razor_all_tracks` reports a misplaced cut as `committed_unverified`.
|
|
29
|
+
- Batched ripple-range previews now cap clip samples at 50 while retaining per-track counts and a confirmation fingerprint for the complete plan. Razor track spans are computed from one initial clip snapshot; cuts use Premiere's sequence-display timecode for fractional and drop-frame rates and refuse any resulting boundary more than half a frame from the snapped range edge. Frame-exact decimal ranges no longer appear as adjustments, and mutation receipts use the shared QE undo-stack reader.
|
|
30
|
+
|
|
31
|
+
- `add_audio_keyframes` and `setup_ducking` can add the first keyframe to a clip again. On Premiere 25.2.3 a property with no keyframes returns `undefined` from `getKeys()` (with `isTimeVarying()` false), which the audio and shared keyframe readers treated as unreadable storage, so both tools refused every clip without existing Volume keys. That state now reads as an empty key list; `null`, malformed lists, and `undefined` on a time-varying property still refuse.
|
|
32
|
+
|
|
33
|
+
- `detect_beats` no longer snaps tempo to a coarse grid or lets the beat grid drift. It decoded audio at 200 Hz and built a 20 Hz onset envelope, so periods could only take 50 ms steps (73 BPM reported as 75, 146 as 150) and the returned beat times drifted by about 0.4 s after 30 beats. It now decodes at 4 kHz, uses a 100 Hz envelope, and refines the period to a fraction of a sample across the whole file. On 3-minute click tracks from 60 to 174 BPM, tempo is exact and every beat time is within 20 ms.
|
|
34
|
+
|
|
35
|
+
- `detect_repeated_takes` no longer groups a short sentence with a much longer, different one because they share a few words. Similarity used bag-of-words containment, so on a real interview transcript "We have new city projects" (5 words) scored 0.8 against a 20-word sentence mentioning "different new city projects", and the default `keep: "last"` proposed removing 7.9 s of real content. When one sentence is under 60% of the other's length, containment now only counts a false start that matches the start of the longer sentence in order; similar-length retakes behave as before.
|
|
36
|
+
|
|
37
|
+
- `map_source_ranges_to_timeline` now treats `getSpeed() === 100` as normal speed on older Premiere hosts while continuing to refuse retimed or reversed clips.
|
|
38
|
+
|
|
39
|
+
- `set_sequence_frame_rate` sets exact NTSC timebases. It divided by the rounded decimal (`TICKS_PER_SECOND / 29.97`), giving 8475675676 ticks per frame for 29.97 and 10594594595 for 23.976, which are near-NTSC rates that drift against camera media and differ from Premiere's own presets (8475667200 and 10594584000). Requests within 0.005 fps of 23.976, 29.97, 47.952, 59.94 or 119.88 now use the exact `nominal × 1000/1001` timebase, and the receipt reports `ntsc` and `exactFrameRate`.
|
|
40
|
+
|
|
41
|
+
- Timeline edits for playhead, clip placement/duration/trim, sequence marks and sequence markers snap requested times to the active sequence frame grid, verify stored boundaries within 1/1000 frame, and report changed requested/applied values.
|
|
42
|
+
|
|
43
|
+
- `navigate_playhead` now reports timecode using Premiere's sequence display format, including drop-frame punctuation.
|
|
44
|
+
|
|
45
|
+
- Transition receipts distinguish verified placement from handle-limited duration, mark each deviating placement, and count duration deviations. Premiere-built title copies report their application-support location and are documented as user-managed files that must not be removed while any project references them.
|
|
46
|
+
- Filler-removal guidance explains that hesitation sounds require transcripts that preserve disfluencies; Whisper's default output omits them.
|
|
47
|
+
|
|
48
|
+
- FCP XML export receipts parse Premiere's BOM-prefixed Translation Report issue lines, bound effect details while reporting truncation, and wait for the XML size and modification time to stabilize before reporting its size.
|
|
49
|
+
- CEP command timeouts cancel still-unclaimed work when another recent busy marker or connector heartbeat shows Premiere is blocked; mutating commands report `not_applied`, while claimed work with a fresh busy marker continues waiting.
|
|
50
|
+
|
|
51
|
+
- `paste_clip_attributes` and `copy_effect_values` copy colour parameters (such as Lumetri White Balance) with `getColorValue()` / `setColorValue()`. `getValue()` returns these as one packed number above 2^53, so writing it back stored a different colour. On Premiere 25.2.3 a grey white balance came back as transparent blue. Keyframed colour parameters are reported as not copied instead of being written.
|
|
52
|
+
- `copy_effect_values` matches properties by position, then by unique display name. Lumetri Color repeats names such as Saturation and Intensity across sections, and the first-name match wrote values into the wrong controls. On 25.2.3 this left a correctly graded clip with the wrong Saturation and Intensity. Values that already match and unreadable section headers are no longer rewritten, and a failed copy now names the properties it skipped or could not verify.
|
|
53
|
+
|
|
54
|
+
- `copy_effects_between_clips` now copies and reads back effect parameter values and keyframes, updates an existing target effect instead of stacking a default instance, and refuses when the requested source effect is missing.
|
|
55
|
+
|
|
56
|
+
- Corrected the still-capture guidance from #771. Premiere's QE PNG stills are not wrong about keyframes. They are RGBA with straight alpha, so a fading clip keeps its colours and carries the fade only in alpha. On Premiere 26.5.2 macOS, stills composited over black matched an actual H.264 export (58.0 against 58.4 YAVG at mid-fade), and linear, hold and bezier gave different alpha (168, 255 and 189) at the same instant. The earlier "QE stills hold opacity" note came from measuring stills without their alpha channel. `export_frame` and `capture_frame` now report `hasAlpha` from the PNG header with a compositing note, and the client instructions, skills, interpolation receipts and review-frame scopes say to composite stills over black before comparing them with a video export.
|
|
57
|
+
|
|
58
|
+
- UXP tools on Premiere 26.5.2, found live on macOS:
|
|
59
|
+
- **Project-item IDs.** The project root and some folders return no `getId` until cast with `ProjectItem.cast`. `inspect_project_tree_uxp` and `inspect_unique_object_identity_uxp` failed, and bin listings reported empty IDs. The advanced-workflow and unique-identity helpers now cast, as the other helpers already did.
|
|
60
|
+
- **Slip, slide and split edits.** Premiere 26.5 applies TrackItem start/end and in/out actions like trims, so each edge action also moves its source point.
|
|
61
|
+
- `slip_track_item_uxp` landed as a move. It now restores the timeline position with a second, measured move (two undo steps).
|
|
62
|
+
- `slide_track_item_uxp` trimmed both neighbours twice. It now sends only the edge actions and writes source points afterwards only when they did not follow.
|
|
63
|
+
- `make_split_edit_uxp` extended the audio twice, and it never checked whether the extension was free. An L-cut into the next audio clip left two items over the same range, and Premiere crashed (heap corruption) while drawing them. It now refuses when the extension would overlap another item on the same track, and it applies the source point only when needed.
|
|
64
|
+
- **`ripple_delete_track_item_uxp`** deleted without rippling when another track had an item over the deleted range, such as a linked audio partner or a spanning adjustment layer. It now refuses before any change and names those items.
|
|
65
|
+
- **Snapshots.** Slip, slide, ripple-delete and duplicate `inspect` results now include a snake_case `expected_snapshot` that `apply` accepts unchanged. Previously the camelCase inspect output was rejected by the apply schema.
|
|
66
|
+
- **Capabilities.** The bridge re-reads the panel's live capabilities before refusing a command that the connect-time handshake marked unsupported, and `get_uxp_capabilities` reports the live list. A panel that connected before a project was open or a workspace was approved hid 25 of 192 commands for the session.
|
|
67
|
+
- **Markers.** `manage_markers_uxp` `add` now forwards and applies `color_index` and verifies every requested field. Previously the colour was dropped while the add reported verified.
|
|
68
|
+
- **Frame export.** `export_frame_uxp` retries with the file extension when Premiere rejects an extension-less name ("File Format is not supported"). It also waits up to 15 s for the PNG, which 26.5.2 writes after the call returns, and it checks for the file by walking the approved workspace folder: a plugin with request-only file access cannot open arbitrary `file:` URLs, so the old check reported a written frame as missing.
|
|
69
|
+
- **Media health.** `maintain_media_health_uxp` treats a single `project_item_id` as a one-item list for inspect, refresh and set_offline.
|
|
70
|
+
|
|
71
|
+
### Changed
|
|
72
|
+
|
|
73
|
+
- Long-host receipts detect FCP Translation Report modals and report written XML/OMF as committed_unverified after host timeout; export preflight reports composite black/dead-air intervals within sequence In/Out with optional paged per-track details; media, ripple, and marker readbacks include generated-no-file classification, 1-based track labels, marker GUID and color. Queued commands now cancel atomically behind a fresh busy operation when possible, distinguishing not_applied from unknown mutation outcomes.
|
|
74
|
+
|
|
75
|
+
## [1.19.1] - 2026-10-04
|
|
76
|
+
|
|
77
|
+
### Fixed
|
|
78
|
+
|
|
79
|
+
- Sequence inspection reads now return bounded clip/gap pages, track counts and continuation offsets, with track/time filters and a response budget (#769).
|
|
80
|
+
- Transcription start tolerates unavailable optional ClipProjectItem identity access while preserving target resolution and replay guards (#772).
|
|
81
|
+
- CEP/UXP interpolation and still-capture receipts separate stored values and file existence from temporal animation. The 26.5.2 Windows capture report remains unresolved; contributor 25.2.3 macOS evidence distinguishes a QE still artifact from correctly encoded video curves (#771).
|
|
82
|
+
- Save As refuses unverified destination existence without overwrite confirmation. Committed duplicate, slide and slip edits retain replayable partial receipts when readback fails.
|
|
83
|
+
- Transcript import permits host-attached empty transcripts, creates TextSegments inside lockedAccess and compares full canonical JSON content when Adobe reformats the export. Nonempty transcript overwrite remains refused (#773).
|
|
84
|
+
- Transition duration arguments use frame-grid timecode. Direct MOGRT import refuses malformed ZIP/JSON templates before host dispatch (#773).
|
|
85
|
+
|
|
86
|
+
- `clear_item_in_out` verifies a cleared Out mark against the item's `MediaDuration` and `MediaTimebase` (frames for video, samples for audio), so audio items verify too, and reports the In and Out results separately. Live on Premiere 25.2.3: a cleared Out reads the full media length, and `MediaTimebase` is `48000 Hz` for audio and `25.00 fps` for video. (#696)
|
|
87
|
+
- An empty Source Monitor returns `undefined`, not `null`, on Premiere 25.2.3. The close and playback tools now treat a getter that returns `null` or `undefined` without throwing as an empty monitor; only a throwing getter is unreadable. Previously `close_all_source_clips` reported a genuinely empty monitor as `committed_unverified`. (#694)
|
|
88
|
+
- `add_to_timeline` counts only clips that match the inserted source and start at the insertion time as inserted, and reports split remainders separately (`splitRemainders`). A same-source mid-clip insert on 25.2.3 previously reported `insertedTrackItems: 2` for one inserted clip. (#680)
|
|
89
|
+
- Mutating bridge commands that time out after Premiere accepts them can report `mutationOutcome: unknown` and `timelineChanged: null`, with guidance to inspect before retrying.
|
|
90
|
+
- `encode_project_item`, `encode_file`, and `manage_proxies` `create` no longer call `app.encoder.startBatch()` after queueing. That API starts every ready Adobe Media Encoder job, including unrelated jobs already in the queue. Batch start is now opt-in with `start_batch: true`, matching `add_to_render_queue`. Use `start_batch_encode` to start the queue later.
|
|
91
|
+
- `ripple_delete`, ripple removal in `remove_from_timeline`, and rippling `apply_edit_plan` removals shift clips with `TrackItem.move()` and single-pass per-track lookups. The contributor measured one pause cut on Premiere 25.2.3 macOS dropping from about 31 minutes to about 3 on a 2-hour, 1,490-clip podcast sequence. Ripples that would move more than 400 clips refuse before mutation with a count and time estimate unless `allow_large_ripple` is set, host waits scale with the work without shortening a longer configured timeout, and an edit that times out after Premiere accepted it reports an unknown timeline state instead of a plain failure.
|
|
92
|
+
- `trim_clip`, `set_clip_duration`, `slip_edit`, `roll_edit`, and `slide_edit` no longer refuse every unlinked clip by default. On Premiere 25.2.3 `getLinkedItems()` returns `null` (without throwing) for a clip with no linked partner, which these tools treated as unreadable linkage; it now means "no partners", while throwing or malformed collections still refuse. `roll_edit` and `slide_edit` also accept the numeric `0` that `isSpeedReversed()` returns for a forward clip on that host (`1`/`true` still refuse), so they no longer refuse every clip there.
|
|
93
|
+
|
|
94
|
+
### Added
|
|
95
|
+
|
|
96
|
+
- `ripple_remove_timeline_ranges` previews up to 50 frame-snapped pause ranges, then removes them in one guarded pass across unlocked sync-locked tracks, shifting each surviving clip once with a verified receipt.
|
|
97
|
+
|
|
9
98
|
## [1.19.0] - 2026-10-02
|
|
10
99
|
|
|
11
100
|
### Added
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
# MCP for Adobe Premiere Pro
|
|
3
|
+
# MCP for Adobe Premiere Pro — local MCP server
|
|
4
4
|
|
|
5
5
|
<!-- mcp-name: io.github.leancoderkavy/premiere-pro -->
|
|
6
6
|
|
|
@@ -14,7 +14,7 @@ Free, MIT licensed, local-first, and published to npm as [`premiere-pro-mcp`](ht
|
|
|
14
14
|
|
|
15
15
|
[Website](https://premiere-pro-mcp.com/) · [Recorded demo](https://premiere-pro-mcp.com/demo/) · [Compare servers](https://premiere-pro-mcp.com/compare/) · [Setup guides](https://premiere-pro-mcp.com/blog/how-to-set-up-premiere-pro-mcp/) · [Search tools](https://premiere-pro-mcp.com/tools/) · [Troubleshooting](https://premiere-pro-mcp.com/docs/troubleshooting/) · [Release facts](https://premiere-pro-mcp.com/facts/)
|
|
16
16
|
|
|
17
|
-
Development source:
|
|
17
|
+
Development source: 393 core tools across 60 modules, 4 resources, and 24 guided workflows. A connected UXP host adds 96 capability-gated tools.
|
|
18
18
|
|
|
19
19
|
The [completed AE render handoff](docs/after-effects-render-handoff.md) previews and confirms importing one finished render into an existing Premiere bin, with host and file rechecks and an import receipt.
|
|
20
20
|
|
|
@@ -74,6 +74,25 @@ The [completed AE render handoff](docs/after-effects-render-handoff.md) previews
|
|
|
74
74
|
|
|
75
75
|
## What is this?
|
|
76
76
|
|
|
77
|
+
**MCP for Adobe Premiere Pro** is the independent, MIT-licensed local MCP server
|
|
78
|
+
published as `premiere-pro-mcp` by
|
|
79
|
+
[leancoderkavy/premiere-pro-mcp](https://github.com/leancoderkavy/premiere-pro-mcp).
|
|
80
|
+
Install this package and its separate Premiere connector to connect a compatible
|
|
81
|
+
AI assistant to supported project inspection, timeline editing, and export tools.
|
|
82
|
+
Start with `verify_premiere_connection` and make no changes until the bridge works.
|
|
83
|
+
|
|
84
|
+
### Find the right Adobe Premiere Pro MCP guide
|
|
85
|
+
|
|
86
|
+
| Goal | Guide |
|
|
87
|
+
| --- | --- |
|
|
88
|
+
| Understand the local server and connector | [What is Adobe Premiere Pro MCP?](https://premiere-pro-mcp.com/what-is-premiere-pro-mcp/) |
|
|
89
|
+
| Connect Claude Desktop, Cursor, or Codex | [Claude Desktop](https://premiere-pro-mcp.com/blog/claude-desktop-premiere-pro-mcp-setup/) · [Cursor](https://premiere-pro-mcp.com/blog/cursor-premiere-pro-mcp-setup/) · [Codex](https://premiere-pro-mcp.com/blog/codex-premiere-pro-mcp-setup/) |
|
|
90
|
+
| Choose between similarly named projects | [Source-linked server comparison](https://premiere-pro-mcp.com/compare/) |
|
|
91
|
+
| Match a repeatable task to a tool and verification step | [Adobe Premiere Pro automation guide](https://premiere-pro-mcp.com/blog/premiere-pro-workflow-automation/) |
|
|
92
|
+
| Check a tool before planning an edit | [Published tool catalog](https://premiere-pro-mcp.com/tools/) |
|
|
93
|
+
| Confirm released version and provenance | [Published package facts](https://premiere-pro-mcp.com/facts/) |
|
|
94
|
+
|
|
95
|
+
|
|
77
96
|
An [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server that lets AI assistants like **Claude**, **Windsurf**, **Cursor**, **GitHub Copilot**, or any MCP-compatible client directly control Adobe Premiere Pro — importing media, editing timelines, applying effects, managing keyframes, exporting, and more.
|
|
78
97
|
|
|
79
98
|
```text
|
|
@@ -106,16 +125,19 @@ and repository before configuring a client. The new
|
|
|
106
125
|
VS Code, or Codex settings that point directly to this installation. It is a
|
|
107
126
|
feature included in v1.15.1 and later.
|
|
108
127
|
|
|
109
|
-
The current source exposes
|
|
128
|
+
The current source exposes 393 core tools for supported workflow steps spanning the supported ExtendScript, QE DOM, local media and interchange analysis, revisioned project-context retrieval, safe edit-planning, project-intake preview, review handoff, connection verification, and guarded After Effects MOGRT authoring, batch, library, render-queue, inspection, and Premiere-handoff workflows. A compatible, authenticated UXP panel adds 96 documented, capability-gated tools without replacing the production CEP bridge.
|
|
110
129
|
|
|
111
130
|
<a id="latest-release"></a>
|
|
112
131
|
|
|
113
|
-
### Latest release: 1.
|
|
132
|
+
### Latest release: 1.20.0
|
|
114
133
|
|
|
115
|
-
The published v1.
|
|
116
|
-
and
|
|
134
|
+
The published v1.20.0 npm artifact contains **393 core tools**, 391 in its default profile,
|
|
135
|
+
and 487 with a compatible UXP connection. The development catalog above can include
|
|
117
136
|
unreleased work. See the [versioned facts and package provenance](https://premiere-pro-mcp.com/facts/).
|
|
118
137
|
|
|
138
|
+
GitHub releases use `v<SemVer>` for both title and tag, such as `v1.20.0`.
|
|
139
|
+
See [release naming and version conventions](docs/release-conventions.md).
|
|
140
|
+
|
|
119
141
|
### Try a bounded workflow
|
|
120
142
|
|
|
121
143
|
Choose a setup guide: [Claude Desktop](https://premiere-pro-mcp.com/blog/claude-desktop-premiere-pro-mcp-setup/),
|
|
@@ -132,6 +154,13 @@ if the connection is unavailable.
|
|
|
132
154
|
|
|
133
155
|
### Release highlights
|
|
134
156
|
|
|
157
|
+
- **1.20.0 verified range removal:** `ripple_remove_timeline_ranges` previews, then applies a multi-range ripple removal with a single-use confirmation token and clip-level readback (QE razor; experimental).
|
|
158
|
+
- **1.20.0 effect safety:** effect colours read and write losslessly, ambiguous property names (for example repeated Lumetri controls) are refused unless `property_index` is given, and `duplicate_clip` copies keep the original length.
|
|
159
|
+
- **1.20.0 import and metadata additions:** `import_fcp_xml` can import into the open project, `import_folder` accepts `target_bin`, `get_encoder_presets` pages with `limit`/`offset`, `set_footage_interpretation` sets `field_type`, and XML/AAF/EDL imports through `import_media` no longer report a false error.
|
|
160
|
+
- **1.19.1 timeline fixes:** bounded sequence pages with continuation, measured unlinked-clip compatibility, and faster ripple movement with a large-edit opt-in and scaled host waits.
|
|
161
|
+
- **1.19.1 safer handoffs:** AME queue-wide start requires explicit opt-in, malformed MOGRT files refuse before host import, and uncertain committed edits retain inspection guidance.
|
|
162
|
+
- **1.19.1 transcript and capture fixes:** empty host-attached transcripts can accept guarded imports; stored values and still files do not establish temporal animation. A short actual video export is needed to assess keyframe curves.
|
|
163
|
+
|
|
135
164
|
- **Editorial planning:** film evidence, transcript cleanup, caption authoring, shorts and chapter planning, rhythm and speaker layouts, timeline QA, and platform delivery plans.
|
|
136
165
|
- **Cross-app handoff:** capability-aware workflow routes and guarded After Effects render-to-Premiere handoff.
|
|
137
166
|
- **Editing correctness:** verified readback and explicit capability or committed-but-unverified failures across transition, import, effects, source identity, and track operations. Insert edits ripple QE sync-locked tracks instead of silently desyncing neighbours.
|
|
@@ -162,7 +191,7 @@ if the connection is unavailable.
|
|
|
162
191
|
local Premiere processes. See the generated [supported action catalog](docs/supported-actions.md)
|
|
163
192
|
for individual capability and verification contracts.
|
|
164
193
|
|
|
165
|
-
See the [v1.
|
|
194
|
+
See the [v1.20.0 release notes](https://github.com/leancoderkavy/premiere-pro-mcp/releases/tag/v1.20.0)
|
|
166
195
|
for complete details. Live installation in Premiere Pro still requires host verification.
|
|
167
196
|
|
|
168
197
|
### Current MCP protocol support
|
|
@@ -210,7 +239,7 @@ their bins, media rules, and organization rules before a facility uses one.
|
|
|
210
239
|
> ### Install the published package (verify the name)
|
|
211
240
|
>
|
|
212
241
|
> ```bash
|
|
213
|
-
> npm i -g premiere-pro-mcp@1.
|
|
242
|
+
> npm i -g premiere-pro-mcp@1.20.0
|
|
214
243
|
> ```
|
|
215
244
|
>
|
|
216
245
|
> This repository publishes only **`premiere-pro-mcp`**. A differently named package (`adobe-premiere-pro-mcp`) may also declare a `premiere-pro-mcp` executable. Before configuring a client, confirm:
|
|
@@ -218,7 +247,7 @@ their bins, media rules, and organization rules before a facility uses one.
|
|
|
218
247
|
> | Check | Expected |
|
|
219
248
|
> | --- | --- |
|
|
220
249
|
> | Package name | `premiere-pro-mcp` (not `adobe-premiere-pro-mcp`) |
|
|
221
|
-
> | Version | `1.
|
|
250
|
+
> | Version | `1.20.0` |
|
|
222
251
|
> | Homepage / repo | https://premiere-pro-mcp.com/ · https://github.com/leancoderkavy/premiere-pro-mcp |
|
|
223
252
|
>
|
|
224
253
|
> ```bash
|
|
@@ -231,9 +260,9 @@ their bins, media rules, and organization rules before a facility uses one.
|
|
|
231
260
|
|
|
232
261
|
### Easiest supported path: Claude Desktop
|
|
233
262
|
|
|
234
|
-
1. Download the current [Claude Desktop bundle (`.mcpb`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.
|
|
263
|
+
1. Download the current [Claude Desktop bundle (`.mcpb`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.20.0/premiere-pro-mcp-1.20.0.mcpb).
|
|
235
264
|
2. In Claude Desktop, open **Settings > Extensions > Advanced settings > Install Extension**, select the downloaded bundle, and restart Claude Desktop.
|
|
236
|
-
3. Download the separate [signed Premiere connector (`.zxp`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.
|
|
265
|
+
3. Download the separate [signed Premiere connector (`.zxp`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.20.0/MCPBridgeCEP.zxp). Open it with your trusted ZXP installer. If your computer has no ZXP installer, use the npm connector installer in **Advanced setup** below.
|
|
237
266
|
4. Restart Premiere, open a project, then open **Window > Extensions > MCP for Adobe Premiere Pro**.
|
|
238
267
|
5. In Claude, enter: `Safely check my Premiere connection with verify_premiere_connection. Make no changes.`
|
|
239
268
|
|
|
@@ -537,11 +566,11 @@ From a clone of this repository:
|
|
|
537
566
|
```bash
|
|
538
567
|
codex plugin marketplace add .
|
|
539
568
|
codex plugin add premiere-pro@premiere-pro-mcp
|
|
540
|
-
npx -y premiere-pro-mcp@1.
|
|
569
|
+
npx -y premiere-pro-mcp@1.20.0 --install-cep
|
|
541
570
|
```
|
|
542
571
|
|
|
543
572
|
Restart Premiere Pro and start a new Codex session after installation. The plugin
|
|
544
|
-
launches `premiere-pro-mcp@1.
|
|
573
|
+
launches `premiere-pro-mcp@1.20.0` through `npx`; the separate CEP installation is
|
|
545
574
|
required because the MCP server communicates with the running Premiere host through
|
|
546
575
|
the local bridge.
|
|
547
576
|
|
|
@@ -579,7 +608,7 @@ For Claude Code, add this repository as a marketplace and install the plugin:
|
|
|
579
608
|
Then install the Premiere bridge and start a new Claude Code session:
|
|
580
609
|
|
|
581
610
|
```bash
|
|
582
|
-
npx -y premiere-pro-mcp@1.
|
|
611
|
+
npx -y premiere-pro-mcp@1.20.0 --install-cep
|
|
583
612
|
```
|
|
584
613
|
|
|
585
614
|
The Claude Code package lives in
|
|
@@ -903,7 +932,9 @@ reports revision-bound notes, VFX state, change impact and turnover exceptions.
|
|
|
903
932
|
It performs local inspection; host edits and exports use separate guarded tools.
|
|
904
933
|
See [usage, example and remaining execution adapters](docs/film-editorial-workflows.md).
|
|
905
934
|
|
|
906
|
-
|
|
935
|
+
Reviewed assistant-editing tools now provide dialogue candidate decisions, quote paper-edit CSV, batch copy previews, sync-evidence triage, and owned-footage B-roll review. These are local evidence reviews, not new host engines. See [review workflow contracts](docs/editorial-review-workflows.md).
|
|
936
|
+
|
|
937
|
+
## Tools (393 core total; 391 under the default profile; 487 with a connected UXP bridge)
|
|
907
938
|
|
|
908
939
|
The [complete supported-actions catalog](docs/supported-actions.md) lists every
|
|
909
940
|
registered core tool, the two tools restricted behind explicit `unsafe-script`
|
|
@@ -1342,7 +1373,7 @@ user/device authorization are implemented.
|
|
|
1342
1373
|
| `PREMIERE_MCP_CAPABILITIES` | Comma-separated authority profile; add `unsafe-script` only when raw scripting is required | `inspect,edit,export,filesystem` |
|
|
1343
1374
|
| `PREMIERE_MCP_DEBUG` | Set to `1` (or `true`) to emit verbose server diagnostics to stderr | unset |
|
|
1344
1375
|
| `PREMIERE_CONTEXT_BACKEND` | Local project-context store: `auto`, `sqlite`, `json`, or `memory` | `auto` |
|
|
1345
|
-
| `PREMIERE_CONTEXT_DIR` | Override
|
|
1376
|
+
| `PREMIERE_CONTEXT_DIR` | Override local context storage; unsafe existing ownership/permissions/links are rejected, safe POSIX directories/files tightened to 0700/0600 | OS application-data directory |
|
|
1346
1377
|
| `PORT` | HTTP port (HTTP/SSE transport only) | `3000` |
|
|
1347
1378
|
| `MCP_AUTH_TOKEN` | Operator bearer token for controlled HTTP deployments; mutually exclusive with OAuth mode | unset |
|
|
1348
1379
|
| `MCP_OAUTH_ISSUER` | Exact trusted OAuth/OIDC token issuer URL | unset |
|
|
@@ -1392,7 +1423,7 @@ premiere-pro-mcp/
|
|
|
1392
1423
|
├── src/
|
|
1393
1424
|
│ ├── index.ts # Entry point — stdio transport setup
|
|
1394
1425
|
│ ├── http-server.ts # Entry point — HTTP/SSE transport (Fly.io / remote)
|
|
1395
|
-
│ ├── server.ts # MCP server — registers
|
|
1426
|
+
│ ├── server.ts # MCP server — registers 393 tools, filtered by authority profile
|
|
1396
1427
|
│ ├── bridge/
|
|
1397
1428
|
│ │ ├── file-bridge.ts # File-based IPC (write .jsx, poll .json)
|
|
1398
1429
|
│ │ └── script-builder.ts # ExtendScript generator with ES3 helpers
|
|
@@ -1462,6 +1493,8 @@ All generated scripts use **ES3 syntax** (`var`, manual `for` loops, no arrow fu
|
|
|
1462
1493
|
|
|
1463
1494
|
### Security
|
|
1464
1495
|
|
|
1496
|
+
Metadata privacy: CEP `get_metadata` and `get_xmp_metadata` now default to bounded parsed fields with GPS, serial, author and contact values omitted. Raw packets require explicit packet flags and `include_sensitive: true`; source media paths require `include_media_path: true`. Existing callers expecting raw XML must opt in. Disk context can retain names, transcripts and notes; select `PREMIERE_CONTEXT_BACKEND=memory` to avoid persistence.
|
|
1497
|
+
|
|
1465
1498
|
Understand the trust model before deploying this: **any client that can reach the MCP
|
|
1466
1499
|
server can control Premiere Pro.** `execute_extendscript` and `evaluate_expression` are
|
|
1467
1500
|
arbitrary-code-execution tools by design and are omitted from discovery and denied at call time
|
|
@@ -1568,6 +1601,33 @@ No. This is an independent MIT-licensed project, not an Adobe product and not Ad
|
|
|
1568
1601
|
native AI Assistant. It is also distinct from other MCP servers for Premiere Pro;
|
|
1569
1602
|
`premiere-pro-mcp` is the only npm package published from this repository.
|
|
1570
1603
|
|
|
1604
|
+
**Does local-first mean my AI assistant sends no data to a cloud service?**
|
|
1605
|
+
The recommended Premiere bridge runs locally. Your AI client's handling of prompts
|
|
1606
|
+
and tool results still applies. Review its settings before sharing sensitive project
|
|
1607
|
+
information; local-first is not a universal no-upload guarantee.
|
|
1608
|
+
|
|
1609
|
+
**Is every action previewed, undoable, and host-verified?**
|
|
1610
|
+
Tool contracts differ. Review action modes and approval requirements before calling
|
|
1611
|
+
an edit. Readback-confirmed results are `verified`; `committed_unverified` means the
|
|
1612
|
+
host accepted a change but verification is incomplete. Inspect Premiere before
|
|
1613
|
+
retrying an uncertain mutation. Save a duplicate project for evaluation and confirm
|
|
1614
|
+
rendered output separately.
|
|
1615
|
+
|
|
1616
|
+
**Which Adobe Premiere Pro tasks are good first automation candidates?**
|
|
1617
|
+
Start with a read-only project and timeline inventory. Then evaluate one bounded
|
|
1618
|
+
workflow on a duplicate project: approved media imports, bin organization, marker
|
|
1619
|
+
preparation, or review-frame exports. The [automation guide](https://premiere-pro-mcp.com/blog/premiere-pro-workflow-automation/)
|
|
1620
|
+
links exact tool contracts and explains what evidence to check. A still-frame export
|
|
1621
|
+
does not prove playback or audio; a local delivery QC scan does not prove every
|
|
1622
|
+
platform requirement.
|
|
1623
|
+
|
|
1624
|
+
**Where can search engines and AI assistants find current product facts?**
|
|
1625
|
+
Use the website's [facts page](https://premiere-pro-mcp.com/facts/) and
|
|
1626
|
+
[generated AI reference](https://premiere-pro-mcp.com/llms.txt), which describe the
|
|
1627
|
+
integrity-verified published npm artifact. The source counts in this README can
|
|
1628
|
+
include changes not yet published. Neither catalog counts nor unit tests establish
|
|
1629
|
+
that an operation succeeded on a particular Premiere host.
|
|
1630
|
+
|
|
1571
1631
|
**Is it free?**
|
|
1572
1632
|
Yes. The server, the CEP connector, and the documentation are MIT licensed and free
|
|
1573
1633
|
to use.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<ExtensionManifest Version="7.0" ExtensionBundleId="com.mcp.aftereffects.bridge" ExtensionBundleVersion="1.
|
|
2
|
+
<ExtensionManifest Version="7.0" ExtensionBundleId="com.mcp.aftereffects.bridge" ExtensionBundleVersion="1.20.0" ExtensionBundleName="MCP for Adobe After Effects">
|
|
3
3
|
<ExtensionList>
|
|
4
|
-
<Extension Id="com.mcp.aftereffects.bridge.panel" Version="1.
|
|
5
|
-
<Extension Id="com.mcp.aftereffects.bridge.headless" Version="1.
|
|
4
|
+
<Extension Id="com.mcp.aftereffects.bridge.panel" Version="1.20.0"/>
|
|
5
|
+
<Extension Id="com.mcp.aftereffects.bridge.headless" Version="1.20.0"/>
|
|
6
6
|
</ExtensionList>
|
|
7
7
|
<ExecutionEnvironment>
|
|
8
8
|
<HostList>
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
'}',
|
|
30
30
|
'if ($initialize) {',
|
|
31
31
|
' if ($unsafeAncestors.Count -ne 0) { throw ("Bridge directory ancestry is unsafe: " + (($unsafeAncestors | ForEach-Object { "{0} ({1}: {2})" -f $_.path, $_.reason, $_.sid }) -join "; ")) }',
|
|
32
|
+
' $acl.SetOwner((New-Object System.Security.Principal.SecurityIdentifier($current)))',
|
|
32
33
|
' $acl.SetAccessRuleProtection($true, $false)',
|
|
33
34
|
' $inheritance = [System.Security.AccessControl.InheritanceFlags]::ContainerInherit -bor [System.Security.AccessControl.InheritanceFlags]::ObjectInherit',
|
|
34
35
|
' $propagation = [System.Security.AccessControl.PropagationFlags]::None',
|
|
Binary file
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<ExtensionManifest Version="7.0" ExtensionBundleId="com.mcp.premiere.bridge" ExtensionBundleVersion="1.
|
|
2
|
+
<ExtensionManifest Version="7.0" ExtensionBundleId="com.mcp.premiere.bridge" ExtensionBundleVersion="1.20.0" ExtensionBundleName="MCP for Adobe Premiere Pro">
|
|
3
3
|
<ExtensionList>
|
|
4
|
-
<Extension Id="com.mcp.premiere.bridge.panel" Version="1.
|
|
5
|
-
<Extension Id="com.mcp.premiere.bridge.headless" Version="1.
|
|
4
|
+
<Extension Id="com.mcp.premiere.bridge.panel" Version="1.20.0"/>
|
|
5
|
+
<Extension Id="com.mcp.premiere.bridge.headless" Version="1.20.0"/>
|
|
6
6
|
</ExtensionList>
|
|
7
7
|
<ExecutionEnvironment>
|
|
8
8
|
<HostList>
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
'}',
|
|
30
30
|
'if ($initialize) {',
|
|
31
31
|
' if ($unsafeAncestors.Count -ne 0) { throw ("Bridge directory ancestry is unsafe: " + (($unsafeAncestors | ForEach-Object { "{0} ({1}: {2})" -f $_.path, $_.reason, $_.sid }) -join "; ")) }',
|
|
32
|
+
' $acl.SetOwner((New-Object System.Security.Principal.SecurityIdentifier($current)))',
|
|
32
33
|
' $acl.SetAccessRuleProtection($true, $false)',
|
|
33
34
|
' $inheritance = [System.Security.AccessControl.InheritanceFlags]::ContainerInherit -bor [System.Security.AccessControl.InheritanceFlags]::ObjectInherit',
|
|
34
35
|
' $propagation = [System.Security.AccessControl.PropagationFlags]::None',
|
package/cep-plugin/index.html
CHANGED
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
<section class="update-section" aria-live="polite">
|
|
82
82
|
<div class="update-copy">
|
|
83
83
|
<span class="section-label">MCP updates</span>
|
|
84
|
-
<strong id="updateTitle">Version 1.
|
|
84
|
+
<strong id="updateTitle">Version 1.20.0</strong>
|
|
85
85
|
<span id="updateDetail">Checking the global MCP server and connector release…</span>
|
|
86
86
|
</div>
|
|
87
87
|
<button id="btnUpdate" class="button button-update" onclick="handleUpdateClick()" type="button" aria-describedby="updateDetail" disabled>
|
package/cep-plugin/main.js
CHANGED
|
@@ -321,6 +321,9 @@ function processOneCommand(cmdFileName) {
|
|
|
321
321
|
|
|
322
322
|
// While evalScript is in flight, heartbeat a busy file so the MCP server can
|
|
323
323
|
// tell "script still running (modal dialog?)" apart from "plugin not running".
|
|
324
|
+
// This setInterval runs on CEP's own event loop. A host call that blocks that
|
|
325
|
+
// loop (as long exports or a modal can) also stalls the heartbeat; absence of
|
|
326
|
+
// a fresh marker is therefore not proof that Premiere is idle.
|
|
324
327
|
// Only starts after 2s, so fast commands never touch the extra file.
|
|
325
328
|
var busyFilePath = path.join(tempDir, "busy_" + id + ".json");
|
|
326
329
|
var startedAt = new Date().getTime();
|
package/cep-plugin/updater.cjs
CHANGED