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.
Files changed (129) hide show
  1. package/CHANGELOG.md +89 -0
  2. package/README.md +77 -17
  3. package/after-effects-cep-plugin/CSXS/manifest.xml +3 -3
  4. package/after-effects-cep-plugin/bridge-directory-security.cjs +1 -0
  5. package/artifacts/MCPBridgeCEP.zxp +0 -0
  6. package/cep-plugin/CSXS/manifest.xml +3 -3
  7. package/cep-plugin/bridge-directory-security.cjs +1 -0
  8. package/cep-plugin/index.html +1 -1
  9. package/cep-plugin/main.js +3 -0
  10. package/cep-plugin/updater.cjs +1 -1
  11. package/dist/ai/editorial-review.d.ts +263 -0
  12. package/dist/ai/editorial-review.js +262 -0
  13. package/dist/ai/transcript-word-edits.d.ts +8 -1
  14. package/dist/ai/transcript-word-edits.js +28 -4
  15. package/dist/bridge/file-bridge.d.ts +8 -1
  16. package/dist/bridge/file-bridge.js +88 -12
  17. package/dist/bridge/script-builder.js +89 -7
  18. package/dist/bridge/uxp-websocket-bridge.d.ts +5 -0
  19. package/dist/bridge/uxp-websocket-bridge.js +30 -1
  20. package/dist/context/context-storage-security.d.ts +5 -0
  21. package/dist/context/context-storage-security.js +54 -0
  22. package/dist/context/project-context-store.js +77 -18
  23. package/dist/index.js +1 -1
  24. package/dist/platform-capabilities.d.ts +3 -3
  25. package/dist/security/capabilities.js +6 -0
  26. package/dist/server.js +6 -0
  27. package/dist/tool-capability-report.js +5 -0
  28. package/dist/tools/adjacent-media-bounds.js +5 -2
  29. package/dist/tools/advanced.d.ts +18 -0
  30. package/dist/tools/advanced.js +83 -24
  31. package/dist/tools/audio.d.ts +1 -1
  32. package/dist/tools/audio.js +45 -17
  33. package/dist/tools/clipboard.js +175 -122
  34. package/dist/tools/competitor-gaps.d.ts +18 -0
  35. package/dist/tools/competitor-gaps.js +81 -12
  36. package/dist/tools/discovery.d.ts +38 -2
  37. package/dist/tools/discovery.js +13 -6
  38. package/dist/tools/edit-plans.d.ts +23 -11
  39. package/dist/tools/edit-plans.js +89 -8
  40. package/dist/tools/editor-requests.d.ts +7 -0
  41. package/dist/tools/editor-requests.js +27 -9
  42. package/dist/tools/editorial-review.d.ts +119 -0
  43. package/dist/tools/editorial-review.js +34 -0
  44. package/dist/tools/effects.js +49 -4
  45. package/dist/tools/export.d.ts +60 -1
  46. package/dist/tools/export.js +362 -26
  47. package/dist/tools/health.d.ts +3 -3
  48. package/dist/tools/inspection.d.ts +60 -3
  49. package/dist/tools/inspection.js +71 -27
  50. package/dist/tools/interchange-analysis.d.ts +1 -0
  51. package/dist/tools/interchange-analysis.js +7 -3
  52. package/dist/tools/keyframes.d.ts +42 -0
  53. package/dist/tools/keyframes.js +99 -41
  54. package/dist/tools/markers.js +30 -9
  55. package/dist/tools/mask-fit.js +3 -1
  56. package/dist/tools/media.d.ts +5 -0
  57. package/dist/tools/media.js +33 -10
  58. package/dist/tools/metadata.d.ts +20 -0
  59. package/dist/tools/metadata.js +59 -48
  60. package/dist/tools/mogrt-validation.d.ts +3 -0
  61. package/dist/tools/mogrt-validation.js +23 -0
  62. package/dist/tools/playback.js +5 -6
  63. package/dist/tools/playhead.js +46 -16
  64. package/dist/tools/project.d.ts +12 -1
  65. package/dist/tools/project.js +35 -3
  66. package/dist/tools/ripple-delete-script.d.ts +2 -0
  67. package/dist/tools/ripple-delete-script.js +66 -15
  68. package/dist/tools/ripple-remove-ranges.d.ts +93 -0
  69. package/dist/tools/ripple-remove-ranges.js +263 -0
  70. package/dist/tools/ripple-timeout.d.ts +10 -0
  71. package/dist/tools/ripple-timeout.js +13 -0
  72. package/dist/tools/scripting.d.ts +33 -1
  73. package/dist/tools/scripting.js +22 -7
  74. package/dist/tools/sequence-read.d.ts +44 -0
  75. package/dist/tools/sequence-read.js +56 -0
  76. package/dist/tools/source-monitor.js +2 -2
  77. package/dist/tools/source-to-timeline.d.ts +84 -0
  78. package/dist/tools/source-to-timeline.js +167 -0
  79. package/dist/tools/spot-workflows.js +3 -1
  80. package/dist/tools/stock-titles.js +1 -1
  81. package/dist/tools/text.js +4 -0
  82. package/dist/tools/timeline.d.ts +12 -0
  83. package/dist/tools/timeline.js +114 -49
  84. package/dist/tools/track-targeting.d.ts +10 -0
  85. package/dist/tools/track-targeting.js +125 -35
  86. package/dist/tools/transcript-word-edits.js +1 -1
  87. package/dist/tools/transitions.js +40 -12
  88. package/dist/tools/utility.d.ts +12 -0
  89. package/dist/tools/utility.js +30 -2
  90. package/dist/tools/uxp-advanced-workflows.js +2 -2
  91. package/dist/tools/uxp-apply-snapshot.d.ts +19 -0
  92. package/dist/tools/uxp-apply-snapshot.js +41 -0
  93. package/dist/tools/uxp-clone-workflows.d.ts +5 -1
  94. package/dist/tools/uxp-clone-workflows.js +14 -11
  95. package/dist/tools/uxp-next-workflows.d.ts +1 -0
  96. package/dist/tools/uxp-next-workflows.js +8 -1
  97. package/dist/tools/uxp-ripple-delete-workflows.d.ts +5 -1
  98. package/dist/tools/uxp-ripple-delete-workflows.js +16 -13
  99. package/dist/tools/uxp-slide-workflows.d.ts +5 -1
  100. package/dist/tools/uxp-slide-workflows.js +15 -12
  101. package/dist/tools/uxp-slip-workflows.d.ts +4 -0
  102. package/dist/tools/uxp-slip-workflows.js +3 -2
  103. package/dist/tools/uxp.d.ts +32 -1
  104. package/dist/tools/uxp.js +15 -2
  105. package/dist/tools/workflow-recipes.d.ts +7 -2
  106. package/dist/tools/workflow-recipes.js +11 -2
  107. package/dist/workflows/agent-instructions.js +10 -5
  108. package/dist/workflows/catalog.d.ts +28 -3
  109. package/dist/workflows/catalog.js +31 -1
  110. package/dist/workflows/tool-metadata.js +5 -0
  111. package/dist/workflows/tool-packs.js +2 -0
  112. package/docs/editorial-review-workflows.md +95 -0
  113. package/docs/supported-actions.md +40 -33
  114. package/package.json +3 -2
  115. package/public-product-manifest.json +6 -6
  116. package/scripts/normalize-release-names.mjs +72 -0
  117. package/uxp-plugin/advanced-workflows.cjs +87 -12
  118. package/uxp-plugin/clone-workflows.cjs +8 -0
  119. package/uxp-plugin/commands.cjs +28 -4
  120. package/uxp-plugin/dialogue-workflows.cjs +4 -0
  121. package/uxp-plugin/index.cjs +1 -0
  122. package/uxp-plugin/manifest.json +1 -1
  123. package/uxp-plugin/next-workflows.cjs +20 -7
  124. package/uxp-plugin/ripple-delete-workflows.cjs +38 -0
  125. package/uxp-plugin/slide-workflows.cjs +42 -4
  126. package/uxp-plugin/slip-workflows.cjs +65 -24
  127. package/uxp-plugin/transcript-import.cjs +35 -14
  128. package/uxp-plugin/unique-identity-workflows.cjs +18 -4
  129. 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: 386 core tools across 57 modules, 4 resources, and 19 guided workflows. A connected UXP host adds 96 capability-gated tools.
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 386 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.
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.19.0
132
+ ### Latest release: 1.20.0
114
133
 
115
- The published v1.19.0 npm artifact contains **386 core tools**, 384 in its default profile,
116
- and 480 with a compatible UXP connection. The development catalog above can include
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.19.0 release notes](https://github.com/leancoderkavy/premiere-pro-mcp/releases/tag/v1.19.0)
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.19.0
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.19.0` |
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.19.0/premiere-pro-mcp-1.19.0.mcpb).
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.19.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.
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.19.0 --install-cep
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.19.0` through `npx`; the separate CEP installation is
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.19.0 --install-cep
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
- ## Tools (386 core total; 384 under the default profile; 480 with a connected UXP bridge)
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 the local project-context storage directory | OS application-data directory |
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 386 tools, filtered by authority profile
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.19.0" ExtensionBundleName="MCP for Adobe After Effects">
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.19.0"/>
5
- <Extension Id="com.mcp.aftereffects.bridge.headless" Version="1.19.0"/>
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.19.0" ExtensionBundleName="MCP for Adobe Premiere Pro">
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.19.0"/>
5
- <Extension Id="com.mcp.premiere.bridge.headless" Version="1.19.0"/>
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',
@@ -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.19.0</strong>
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>
@@ -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();
@@ -7,7 +7,7 @@
7
7
  })(this, function () {
8
8
  "use strict";
9
9
 
10
- var CURRENT_VERSION = "1.19.0";
10
+ var CURRENT_VERSION = "1.20.0";
11
11
  var PACKAGE_NAME = "premiere-pro-mcp";
12
12
  var LATEST_PACKAGE_API = "https://registry.npmjs.org/" + PACKAGE_NAME;
13
13
  var LATEST_RELEASE_API =