premiere-pro-mcp 1.1.5 → 1.2.1
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 +90 -0
- package/README.md +103 -41
- package/cep-plugin/CSXS/manifest.xml +32 -2
- package/cep-plugin/index.html +65 -81
- package/cep-plugin/main.js +38 -10
- package/cep-plugin/styles.css +227 -0
- package/dist/bridge/file-bridge.js +102 -17
- package/dist/bridge/script-builder.d.ts +19 -3
- package/dist/bridge/script-builder.js +75 -13
- package/dist/index.js +18 -4
- package/dist/platform-capabilities.d.ts +42 -0
- package/dist/platform-capabilities.js +54 -0
- package/dist/security/audit.d.ts +14 -0
- package/dist/security/audit.js +12 -0
- package/dist/security/capabilities.d.ts +23 -0
- package/dist/security/capabilities.js +66 -0
- package/dist/security/index.d.ts +3 -0
- package/dist/security/index.js +3 -0
- package/dist/server.js +49 -10
- package/dist/tools/advanced.js +7 -2
- package/dist/tools/audio.js +24 -8
- package/dist/tools/edit-plans.d.ts +90 -0
- package/dist/tools/edit-plans.js +131 -0
- package/dist/tools/health.d.ts +46 -1
- package/dist/tools/health.js +12 -2
- package/dist/tools/sequence.d.ts +1 -0
- package/dist/tools/sequence.js +93 -9
- package/dist/tools/timeline.js +9 -3
- package/dist/tools/transitions.js +32 -1
- package/dist/workflows/catalog.d.ts +46 -0
- package/dist/workflows/catalog.js +65 -0
- package/dist/workflows/tool-metadata.d.ts +13 -0
- package/dist/workflows/tool-metadata.js +22 -0
- package/package.json +15 -9
- package/scripts/install-cep.ps1 +68 -0
- package/scripts/install-cep.sh +31 -1
- package/scripts/publish-npm.mjs +182 -0
- package/uxp-plugin/README.md +15 -0
- package/uxp-plugin/index.cjs +95 -0
- package/uxp-plugin/index.html +10 -0
- package/uxp-plugin/manifest.json +22 -0
- package/uxp-plugin/protocol.cjs +25 -0
- package/dist/prompts/index.d.ts +0 -25
- package/dist/prompts/index.js +0 -243
- package/dist/resources/live.d.ts +0 -35
- package/dist/resources/live.js +0 -114
- package/dist/tools/registry.d.ts +0 -17
- package/dist/tools/registry.js +0 -66
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,96 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
6
6
|
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- Added `npm run publish:npm`, `npm run publish:npm:dry-run`, and a manual GitHub Actions npm
|
|
12
|
+
publish workflow that validates builds, tests, packed files, duplicate versions, and uses
|
|
13
|
+
token-free OIDC trusted publishing with automatic provenance.
|
|
14
|
+
|
|
15
|
+
## [1.2.1] - 2026-07-21
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- Added `get_capabilities` for machine-readable Windows/macOS runtime, CEP/UXP backend,
|
|
20
|
+
authority-profile, and live-host verification reporting.
|
|
21
|
+
- Added GitHub Actions build, test, and package validation on Windows and macOS with Node 18 and 22.
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- Audio-level writes now convert dB to Premiere's amplitude value and verify the applied value.
|
|
26
|
+
- Audio keyframes now use Premiere `Time` objects and verify each written value.
|
|
27
|
+
- Ripple delete, razor, and native transition tools now verify host state and return actionable
|
|
28
|
+
errors instead of false success on affected Premiere Pro 26.3 installations. ([#21](https://github.com/leancoderkavy/premiere-pro-mcp/issues/21))
|
|
29
|
+
- Capability profiles now enforce `inspect` and `edit` across the complete tool surface and treat
|
|
30
|
+
expression evaluation as unsafe scripting instead of allowing unclassified tools through.
|
|
31
|
+
- The npm CLI now copies the CEP plugin on macOS, verifies installation metadata, rejects unsupported
|
|
32
|
+
host operating systems, and avoids platform-specific `/tmp` configuration in cross-platform examples.
|
|
33
|
+
|
|
34
|
+
### Performance
|
|
35
|
+
|
|
36
|
+
- Prefer event-driven bridge response notification with a conservative polling fallback, reducing
|
|
37
|
+
idle filesystem checks while preserving compatibility with filesystems where watching is
|
|
38
|
+
unavailable or unreliable.
|
|
39
|
+
- Cache immutable tool catalogs and converted Zod schemas across stateless HTTP server instances.
|
|
40
|
+
A local 100-iteration benchmark reduced average repeated server construction from 5.87 ms to
|
|
41
|
+
2.21 ms (62.4%).
|
|
42
|
+
|
|
43
|
+
## [1.2.0] - 2026-07-20
|
|
44
|
+
|
|
45
|
+
### Added
|
|
46
|
+
|
|
47
|
+
- Added preview/apply edit plans with strict operation validation, SHA-256 confirmation binding,
|
|
48
|
+
operation IDs, and structured audit events.
|
|
49
|
+
- Added capability profiles. Raw ExtendScript tools now require explicit `unsafe-script` authority.
|
|
50
|
+
- Added structured MCP tool results, safety annotations, four guided workflow prompts, and the
|
|
51
|
+
`config://premiere-workflows` resource.
|
|
52
|
+
- Added a packaged Premiere 25.6+ UXP bridge preview with capability discovery, state-change
|
|
53
|
+
events, reconnecting WebSocket transport, and supported frame export with file verification.
|
|
54
|
+
|
|
55
|
+
### Validation
|
|
56
|
+
|
|
57
|
+
- TypeScript build passes, all 333 automated tests pass in a single-worker run, and the npm dry-run
|
|
58
|
+
package contains both CEP and UXP bundles. Live Premiere verification of the UXP host API and
|
|
59
|
+
loopback transport remains outstanding.
|
|
60
|
+
|
|
61
|
+
## [1.1.7] - 2026-07-20
|
|
62
|
+
|
|
63
|
+
### Changed
|
|
64
|
+
|
|
65
|
+
- Redesigned the Premiere Pro CEP bridge panel with clearer connection status, responsive
|
|
66
|
+
controls, improved directory configuration, and a larger live activity monitor.
|
|
67
|
+
- Added accessible labels, focus states, reduced-motion support, and consistent status details
|
|
68
|
+
without changing the bridge command workflow.
|
|
69
|
+
|
|
70
|
+
### Validation
|
|
71
|
+
|
|
72
|
+
- TypeScript build and 315 automated tests pass. The panel was also rendered at a 500 x 700 CEP
|
|
73
|
+
viewport and visually checked against the approved design concept.
|
|
74
|
+
|
|
75
|
+
## [1.1.6] - 2026-07-20
|
|
76
|
+
|
|
77
|
+
### Fixed
|
|
78
|
+
|
|
79
|
+
- **Frame capture's Media Encoder fallback now exports exactly one frame.** The fallback passed
|
|
80
|
+
tick values to sequence in/out methods that require seconds, producing an invalid export range
|
|
81
|
+
when the undocumented QE frame-export method wrote no file. The range and its saved state are
|
|
82
|
+
now converted to seconds. ([#9](https://github.com/leancoderkavy/premiere-pro-mcp/issues/9))
|
|
83
|
+
|
|
84
|
+
- **Windows CEP installation now enables unsigned-extension discovery correctly.** The CLI uses a
|
|
85
|
+
native PowerShell installer on Windows and creates `PlayerDebugMode` as the `REG_SZ` value Adobe
|
|
86
|
+
requires. Previous instructions incorrectly specified a DWORD, and the Bash installer never
|
|
87
|
+
enabled Windows debug mode. ([#14](https://github.com/leancoderkavy/premiere-pro-mcp/issues/14))
|
|
88
|
+
|
|
89
|
+
- CEP bundle and extension versions now match the npm package version, with regression coverage to
|
|
90
|
+
prevent future drift.
|
|
91
|
+
|
|
92
|
+
### Validation
|
|
93
|
+
|
|
94
|
+
- TypeScript build and 315 automated tests pass. The corrected Premiere runtime paths still require
|
|
95
|
+
live confirmation on a machine with Premiere Pro installed.
|
|
96
|
+
|
|
7
97
|
## [1.1.2] - 2026-07-11
|
|
8
98
|
|
|
9
99
|
The headline of this release is that the CEP 12 bridge fix from
|
package/README.md
CHANGED
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
|
|
5
5
|
**Give AI full control over Adobe Premiere Pro.**
|
|
6
6
|
|
|
7
|
-
269 tools across
|
|
7
|
+
269 tools across 29 modules, 3 resources, and 4 guided workflows.
|
|
8
8
|
|
|
9
9
|
[](LICENSE)
|
|
10
10
|
[](https://nodejs.org)
|
|
11
11
|
[](https://modelcontextprotocol.io)
|
|
12
12
|
[](https://www.npmjs.com/package/premiere-pro-mcp)
|
|
13
13
|
[](https://premiere-pro-mcp.fly.dev)
|
|
14
|
-
[](https://www.adobe.com/products/premiere.html)
|
|
15
15
|
|
|
16
16
|
</div>
|
|
17
17
|
|
|
@@ -25,7 +25,21 @@ An [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server that l
|
|
|
25
25
|
"Add the B-roll clips to V2, apply a cross dissolve between each, color correct them to match the A-roll, and export a 1080p ProRes."
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
The AI handles the entire workflow through 269 tools
|
|
28
|
+
The AI handles the entire workflow through 269 tools spanning the supported ExtendScript, QE DOM, and safe edit-planning surfaces.
|
|
29
|
+
|
|
30
|
+
### What's new in 1.2.1
|
|
31
|
+
|
|
32
|
+
- Mutation tools now verify Premiere state, audio dB is converted to amplitude correctly, and
|
|
33
|
+
affected Premiere Pro 26.3 hosts return actionable errors instead of false success.
|
|
34
|
+
- npm publishing now has a guided local helper and a GitHub Actions workflow so releases can be
|
|
35
|
+
published without repeating manual auth and validation steps.
|
|
36
|
+
|
|
37
|
+
### Added in 1.2.0
|
|
38
|
+
|
|
39
|
+
- **Safe edit plans:** preview compound insert/remove operations, bind approval to a SHA-256 plan token, then apply the validated plan in one bridge command.
|
|
40
|
+
- **Capability profiles:** unsafe scripting is disabled by default and requires explicit `unsafe-script` authority.
|
|
41
|
+
- **Modern MCP responses:** tools expose safety annotations and structured results; four workflow prompts and a machine-readable workflow resource guide common edits.
|
|
42
|
+
- **UXP bridge preview:** a packaged Premiere 25.6+ panel adds capability discovery, state events, reconnecting WebSocket transport, and supported frame export with file verification. Live host verification is still required.
|
|
29
43
|
|
|
30
44
|
---
|
|
31
45
|
|
|
@@ -62,7 +76,36 @@ premiere-pro-mcp --install-cep
|
|
|
62
76
|
npm run install-cep
|
|
63
77
|
```
|
|
64
78
|
|
|
65
|
-
This
|
|
79
|
+
This installs the plugin into Premiere Pro's per-user extensions folder and enables debug mode.
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Publishing to npm
|
|
84
|
+
|
|
85
|
+
The easiest repeatable path is the token-free GitHub Actions workflow:
|
|
86
|
+
|
|
87
|
+
1. In the npm package settings, configure GitHub Actions as the trusted publisher for
|
|
88
|
+
`leancoderkavy/premiere-pro-mcp` and workflow file `npm-publish.yml`.
|
|
89
|
+
2. Allow the `npm publish` action.
|
|
90
|
+
3. Open **Actions -> Publish npm -> Run workflow** and keep the default `latest` tag.
|
|
91
|
+
|
|
92
|
+
The workflow installs dependencies, builds, runs tests, verifies the packed files, refuses to
|
|
93
|
+
republish an existing version, then publishes through short-lived OIDC credentials with automatic
|
|
94
|
+
provenance. No npm token or recurring OTP is required.
|
|
95
|
+
|
|
96
|
+
For local publishing, use the guided helper:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
npm run publish:npm
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Useful local variants:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
npm run publish:npm:dry-run
|
|
106
|
+
NPM_OTP=123456 npm run publish:npm
|
|
107
|
+
NPM_TOKEN=npm_xxx npm run publish:npm
|
|
108
|
+
```
|
|
66
109
|
|
|
67
110
|
<details>
|
|
68
111
|
<summary>Manual installation (macOS)</summary>
|
|
@@ -83,7 +126,7 @@ done
|
|
|
83
126
|
<summary>Manual installation (Windows)</summary>
|
|
84
127
|
|
|
85
128
|
1. Copy the `cep-plugin` folder to `%APPDATA%\Adobe\CEP\extensions\MCPBridgeCEP`
|
|
86
|
-
2. Open Registry Editor and set these
|
|
129
|
+
2. Open Registry Editor and set these **String (`REG_SZ`)** values to `1` (not DWORD):
|
|
87
130
|
- `HKEY_CURRENT_USER\Software\Adobe\CSXS.12\PlayerDebugMode`
|
|
88
131
|
- (repeat for CSXS.9 through CSXS.14)
|
|
89
132
|
|
|
@@ -101,10 +144,7 @@ Edit `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) o
|
|
|
101
144
|
"mcpServers": {
|
|
102
145
|
"premiere-pro": {
|
|
103
146
|
"command": "node",
|
|
104
|
-
"args": ["/absolute/path/to/premiere-pro-mcp/dist/index.js"]
|
|
105
|
-
"env": {
|
|
106
|
-
"PREMIERE_TEMP_DIR": "/tmp/premiere-mcp-bridge"
|
|
107
|
-
}
|
|
147
|
+
"args": ["/absolute/path/to/premiere-pro-mcp/dist/index.js"]
|
|
108
148
|
}
|
|
109
149
|
}
|
|
110
150
|
}
|
|
@@ -121,10 +161,7 @@ Add to your MCP server configuration:
|
|
|
121
161
|
{
|
|
122
162
|
"premiere-pro": {
|
|
123
163
|
"command": "node",
|
|
124
|
-
"args": ["/absolute/path/to/premiere-pro-mcp/dist/index.js"]
|
|
125
|
-
"env": {
|
|
126
|
-
"PREMIERE_TEMP_DIR": "/tmp/premiere-mcp-bridge"
|
|
127
|
-
}
|
|
164
|
+
"args": ["/absolute/path/to/premiere-pro-mcp/dist/index.js"]
|
|
128
165
|
}
|
|
129
166
|
}
|
|
130
167
|
```
|
|
@@ -141,10 +178,7 @@ Add to `.cursor/mcp.json` in your project or global config:
|
|
|
141
178
|
"mcpServers": {
|
|
142
179
|
"premiere-pro": {
|
|
143
180
|
"command": "node",
|
|
144
|
-
"args": ["/absolute/path/to/premiere-pro-mcp/dist/index.js"]
|
|
145
|
-
"env": {
|
|
146
|
-
"PREMIERE_TEMP_DIR": "/tmp/premiere-mcp-bridge"
|
|
147
|
-
}
|
|
181
|
+
"args": ["/absolute/path/to/premiere-pro-mcp/dist/index.js"]
|
|
148
182
|
}
|
|
149
183
|
}
|
|
150
184
|
}
|
|
@@ -152,13 +186,25 @@ Add to `.cursor/mcp.json` in your project or global config:
|
|
|
152
186
|
|
|
153
187
|
</details>
|
|
154
188
|
|
|
155
|
-
### 4.
|
|
189
|
+
### 4. Verify the bridge in Premiere Pro
|
|
156
190
|
|
|
157
191
|
1. Open (or restart) Premiere Pro
|
|
158
|
-
2.
|
|
159
|
-
3.
|
|
160
|
-
4.
|
|
161
|
-
|
|
192
|
+
2. The bridge starts automatically using the default temp directory (or its previously saved setting)
|
|
193
|
+
3. Optionally go to **Window > Extensions > MCP Bridge** to confirm the green "Running" status or change the **Temp Directory** to match your MCP client config
|
|
194
|
+
4. Ask your AI assistant: *"What's my current Premiere Pro project?"*
|
|
195
|
+
|
|
196
|
+
The default bridge directory is derived from the operating system on both sides, so most local setups should not set `PREMIERE_TEMP_DIR`. If you override it, use the same absolute path in the MCP server and CEP panel; Windows and macOS paths are not interchangeable.
|
|
197
|
+
|
|
198
|
+
### Windows and macOS capability coverage
|
|
199
|
+
|
|
200
|
+
| Surface | Windows | macOS | Verification boundary |
|
|
201
|
+
|---|---|---|---|
|
|
202
|
+
| CEP production bridge | Premiere Pro 2020–2026 | Premiere Pro 2020–2026 | Run `get_capabilities`, then `ping` with Premiere open |
|
|
203
|
+
| UXP preview bridge | Premiere Pro 25.6+ | Premiere Pro 25.6+ | Live loopback WebSocket and host API verification required |
|
|
204
|
+
| npm CEP installer | Copies plugin and verifies `REG_SZ` debug keys | Copies plugin and verifies the installed manifest/debug settings | Restart Premiere after installation |
|
|
205
|
+
| CI build and unit tests | Node 18 and 22 | Node 18 and 22 | GitHub-hosted OS runners; no Adobe host is available in CI |
|
|
206
|
+
|
|
207
|
+
`get_capabilities` reports the current operating system, temp directory, CEP/UXP coverage, enabled authority profile, and any live-host verification still required. It does not claim a Premiere operation succeeded; use `ping` and inspect each tool result for runtime evidence.
|
|
162
208
|
|
|
163
209
|
---
|
|
164
210
|
|
|
@@ -199,7 +245,7 @@ The file-based IPC bridge is simple, reliable, and works across macOS and Window
|
|
|
199
245
|
|
|
200
246
|
---
|
|
201
247
|
|
|
202
|
-
## Tools (
|
|
248
|
+
## Tools (268)
|
|
203
249
|
|
|
204
250
|
### Discovery & Inspection (10 + 10)
|
|
205
251
|
|
|
@@ -242,6 +288,14 @@ The file-based IPC bridge is simple, reliable, and works across macOS and Window
|
|
|
242
288
|
| `set_clip_properties` | Opacity, scale, rotation, position |
|
|
243
289
|
| `link_selection` / `unlink_selection` | Link/unlink A/V |
|
|
244
290
|
|
|
291
|
+
> **Premiere Pro 26.3 compatibility:** some installations silently ignore QE structural edits
|
|
292
|
+
> (`ripple_delete`, razor/split) and existing effect-parameter writes. These tools now verify
|
|
293
|
+
> the resulting sequence state and return an error instead of a false success. For structural
|
|
294
|
+
> edits, rebuild the wanted source ranges into a new sequence with `create_sequence` and
|
|
295
|
+
> `add_to_timeline`. Native transitions are unavailable when the host does not expose
|
|
296
|
+
> `qeTrack.addTransition`; overlay clips remain a workaround for transitions that do not need
|
|
297
|
+
> to blend adjacent source frames. See [issue #21](https://github.com/leancoderkavy/premiere-pro-mcp/issues/21).
|
|
298
|
+
|
|
245
299
|
### Effects & Color (8)
|
|
246
300
|
|
|
247
301
|
| Tool | Description |
|
|
@@ -304,7 +358,7 @@ The file-based IPC bridge is simple, reliable, and works across macOS and Window
|
|
|
304
358
|
|
|
305
359
|
| Tool | Description |
|
|
306
360
|
|------|-------------|
|
|
307
|
-
| `create_sequence` / `create_sequence_from_preset` | Create sequences |
|
|
361
|
+
| `create_sequence` / `create_sequence_from_preset` | Create sequences from `.sqpreset` files without opening Premiere's modal dialog |
|
|
308
362
|
| `duplicate_sequence` / `delete_sequence` | Manage sequences |
|
|
309
363
|
| `auto_reframe_sequence` | Auto-reframe for social media |
|
|
310
364
|
| `attach_custom_property` | FCP XML custom properties |
|
|
@@ -333,12 +387,13 @@ Track targeting, batch operations, markers, audio levels, motion/transform, meta
|
|
|
333
387
|
|
|
334
388
|
## MCP Resources
|
|
335
389
|
|
|
336
|
-
The server exposes
|
|
390
|
+
The server exposes three LLM context resources and four workflow prompts:
|
|
337
391
|
|
|
338
392
|
| Resource URI | Description |
|
|
339
393
|
|-------------|-------------|
|
|
340
394
|
| `config://premiere-instructions` | Best practices: workflow order, timeline rules, effect tips, error handling |
|
|
341
395
|
| `config://extendscript-reference` | Complete ExtendScript API reference for writing custom scripts |
|
|
396
|
+
| `config://premiere-workflows` | Machine-readable catalog for rough cuts, dialogue cleanup, captions, and delivery |
|
|
342
397
|
|
|
343
398
|
These are automatically available to MCP clients that support resources, giving the AI deep context about how to drive Premiere Pro effectively.
|
|
344
399
|
|
|
@@ -370,10 +425,9 @@ A live instance is running at **https://premiere-pro-mcp.fly.dev**.
|
|
|
370
425
|
git clone https://github.com/ppmcp/premiere-pro-mcp.git
|
|
371
426
|
cd premiere-pro-mcp
|
|
372
427
|
fly apps create your-app-name
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
# Optional: add bearer token auth
|
|
428
|
+
# Required: add bearer token auth
|
|
376
429
|
fly secrets set MCP_AUTH_TOKEN=your-secret-token
|
|
430
|
+
fly deploy --remote-only
|
|
377
431
|
```
|
|
378
432
|
|
|
379
433
|
Then connect with:
|
|
@@ -399,8 +453,11 @@ Then connect with:
|
|
|
399
453
|
|----------|-------------|--------|
|
|
400
454
|
| `PREMIERE_TEMP_DIR` | Shared temp directory for MCP ↔ CEP communication | OS temp dir + `/premiere-mcp-bridge` |
|
|
401
455
|
| `PREMIERE_TIMEOUT_MS` | Command timeout in milliseconds | `30000` |
|
|
456
|
+
| `PREMIERE_DEFAULT_SEQUENCE_PRESET` | Override the auto-discovered `.sqpreset` used by `create_sequence` | auto-discovered |
|
|
457
|
+
| `PREMIERE_MCP_CAPABILITIES` | Comma-separated authority profile; add `unsafe-script` only when raw scripting is required | `inspect,edit,export,filesystem` |
|
|
402
458
|
| `PORT` | HTTP port (HTTP/SSE transport only) | `3000` |
|
|
403
|
-
| `MCP_AUTH_TOKEN` | Bearer token
|
|
459
|
+
| `MCP_AUTH_TOKEN` | Bearer token required by the HTTP transport | unset |
|
|
460
|
+
| `ALLOW_UNAUTHENTICATED` | Set to `1` to run HTTP without auth (unsafe; throwaway instances only) | unset |
|
|
404
461
|
|
|
405
462
|
---
|
|
406
463
|
|
|
@@ -411,7 +468,7 @@ premiere-pro-mcp/
|
|
|
411
468
|
├── src/
|
|
412
469
|
│ ├── index.ts # Entry point — stdio transport setup
|
|
413
470
|
│ ├── http-server.ts # Entry point — HTTP/SSE transport (Fly.io / remote)
|
|
414
|
-
│ ├── server.ts # MCP server — registers
|
|
471
|
+
│ ├── server.ts # MCP server — registers 268 tools + 3 resources + 4 prompts
|
|
415
472
|
│ ├── bridge/
|
|
416
473
|
│ │ ├── file-bridge.ts # File-based IPC (write .jsx, poll .json)
|
|
417
474
|
│ │ └── script-builder.ts # ExtendScript generator with ES3 helpers
|
|
@@ -453,7 +510,8 @@ premiere-pro-mcp/
|
|
|
453
510
|
│ ├── host.jsx # ExtendScript entry point
|
|
454
511
|
│ └── CSInterface.js # Adobe CEP interface library
|
|
455
512
|
├── scripts/
|
|
456
|
-
│
|
|
513
|
+
│ ├── install-cep.sh # macOS CEP installer (symlink + debug mode)
|
|
514
|
+
│ └── install-cep.ps1 # Windows CEP installer (copy + REG_SZ debug mode)
|
|
457
515
|
├── Dockerfile # Multi-stage Docker build for Fly.io
|
|
458
516
|
├── fly.toml # Fly.io deployment config
|
|
459
517
|
├── RESEARCH.md # API research and implementation status
|
|
@@ -466,20 +524,20 @@ premiere-pro-mcp/
|
|
|
466
524
|
|
|
467
525
|
## Technical Details
|
|
468
526
|
|
|
469
|
-
###
|
|
527
|
+
### CEP and UXP backends
|
|
470
528
|
|
|
471
|
-
CEP
|
|
529
|
+
CEP remains the production backend because it provides broad ExtendScript access and the undocumented **QE DOM** used for effects, ripple deletes, and advanced trims across Premiere Pro 2020–2026. The packaged `uxp-plugin` is a Premiere 25.6+ preview backend for supported frame export, capability discovery, and state events. It does not silently retry failed UXP mutations through CEP.
|
|
472
530
|
|
|
473
531
|
### ExtendScript Compatibility
|
|
474
532
|
|
|
475
|
-
All generated scripts use **ES3 syntax** (`var`, manual `for` loops, no arrow functions, no `let`/`const`) since ExtendScript is based on ECMAScript 3. The
|
|
533
|
+
All generated scripts use **ES3 syntax** (`var`, manual `for` loops, no arrow functions, no `let`/`const`) since ExtendScript is based on ECMAScript 3. The bridge writes a versioned helper library to the shared temp directory and loads it once per ExtendScript engine via `$.evalFile`; each command then sends only its tool-specific script.
|
|
476
534
|
|
|
477
535
|
### Security
|
|
478
536
|
|
|
479
537
|
Understand the trust model before deploying this: **any client that can reach the MCP
|
|
480
|
-
server can
|
|
481
|
-
|
|
482
|
-
|
|
538
|
+
server can control Premiere Pro.** `execute_extendscript` and `send_raw_script` are
|
|
539
|
+
arbitrary-code-execution tools by design and are disabled by default. Enable them only by setting
|
|
540
|
+
`PREMIERE_MCP_CAPABILITIES=inspect,edit,export,filesystem,unsafe-script`.
|
|
483
541
|
|
|
484
542
|
- **Run it locally over stdio** unless you have a specific reason not to. That's the safe default.
|
|
485
543
|
- **The HTTP transport (`http-server`) requires `MCP_AUTH_TOKEN`** and refuses to start
|
|
@@ -510,8 +568,12 @@ Many tools use the undocumented QE DOM (enabled via `app.enableQE()`). These too
|
|
|
510
568
|
<details>
|
|
511
569
|
<summary><strong>CEP plugin doesn't appear in Premiere Pro</strong></summary>
|
|
512
570
|
|
|
513
|
-
1. Verify debug mode:
|
|
514
|
-
|
|
571
|
+
1. Verify debug mode:
|
|
572
|
+
- macOS: `defaults read com.adobe.CSXS.12 PlayerDebugMode` should return `1`
|
|
573
|
+
- Windows: `reg query "HKCU\SOFTWARE\Adobe\CSXS.12" /v PlayerDebugMode` should report `REG_SZ 1` (a `REG_DWORD` value is not valid for unsigned CEP discovery)
|
|
574
|
+
2. Check the plugin exists:
|
|
575
|
+
- macOS: `ls ~/Library/Application\ Support/Adobe/CEP/extensions/MCPBridgeCEP`
|
|
576
|
+
- Windows: `dir "%APPDATA%\Adobe\CEP\extensions\MCPBridgeCEP"`
|
|
515
577
|
3. Completely restart Premiere Pro (not just close/reopen the project)
|
|
516
578
|
4. Check the CSXS version matches your Premiere Pro version
|
|
517
579
|
|
|
@@ -520,9 +582,9 @@ Many tools use the undocumented QE DOM (enabled via `app.enableQE()`). These too
|
|
|
520
582
|
<details>
|
|
521
583
|
<summary><strong>Commands timeout or hang</strong></summary>
|
|
522
584
|
|
|
523
|
-
1.
|
|
585
|
+
1. Open the CEP panel and verify it shows "Running" with a green dot (the bridge normally starts automatically)
|
|
524
586
|
2. Ensure temp directories match between MCP client config and CEP panel
|
|
525
|
-
3.
|
|
587
|
+
3. Read the timeout error: if it reports an in-flight heartbeat, dismiss any open Premiere modal dialog; without a heartbeat, verify the bridge is running and using the same temp directory
|
|
526
588
|
4. Increase timeout: set `PREMIERE_TIMEOUT_MS` to `60000` or higher
|
|
527
589
|
5. Try `ping` tool to test basic connectivity
|
|
528
590
|
|
|
@@ -1,7 +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.2.1" ExtensionBundleName="MCP Bridge">
|
|
3
3
|
<ExtensionList>
|
|
4
|
-
<Extension Id="com.mcp.premiere.bridge.panel" Version="1.
|
|
4
|
+
<Extension Id="com.mcp.premiere.bridge.panel" Version="1.2.1"/>
|
|
5
|
+
<Extension Id="com.mcp.premiere.bridge.headless" Version="1.2.1"/>
|
|
5
6
|
</ExtensionList>
|
|
6
7
|
<ExecutionEnvironment>
|
|
7
8
|
<HostList>
|
|
@@ -45,5 +46,34 @@
|
|
|
45
46
|
</UI>
|
|
46
47
|
</DispatchInfo>
|
|
47
48
|
</Extension>
|
|
49
|
+
<Extension Id="com.mcp.premiere.bridge.headless">
|
|
50
|
+
<DispatchInfo>
|
|
51
|
+
<Resources>
|
|
52
|
+
<MainPath>./index.html</MainPath>
|
|
53
|
+
<ScriptPath>./host.jsx</ScriptPath>
|
|
54
|
+
<CEFCommandLine>
|
|
55
|
+
<Parameter>--allow-file-access-from-files</Parameter>
|
|
56
|
+
<Parameter>--enable-nodejs</Parameter>
|
|
57
|
+
</CEFCommandLine>
|
|
58
|
+
</Resources>
|
|
59
|
+
<Lifecycle>
|
|
60
|
+
<AutoVisible>false</AutoVisible>
|
|
61
|
+
<StartOn>
|
|
62
|
+
<Event>com.adobe.csxs.events.ApplicationActivate</Event>
|
|
63
|
+
<Event>applicationActivate</Event>
|
|
64
|
+
</StartOn>
|
|
65
|
+
</Lifecycle>
|
|
66
|
+
<UI>
|
|
67
|
+
<Type>Custom</Type>
|
|
68
|
+
<Geometry>
|
|
69
|
+
<Size>
|
|
70
|
+
<Height>1</Height>
|
|
71
|
+
<Width>1</Width>
|
|
72
|
+
</Size>
|
|
73
|
+
</Geometry>
|
|
74
|
+
<Icons/>
|
|
75
|
+
</UI>
|
|
76
|
+
</DispatchInfo>
|
|
77
|
+
</Extension>
|
|
48
78
|
</DispatchInfoList>
|
|
49
79
|
</ExtensionManifest>
|
package/cep-plugin/index.html
CHANGED
|
@@ -1,94 +1,78 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
|
-
<html>
|
|
2
|
+
<html lang="en">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
5
6
|
<title>MCP Bridge</title>
|
|
6
|
-
<
|
|
7
|
-
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
8
|
-
body {
|
|
9
|
-
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
|
|
10
|
-
background: #1e1e1e;
|
|
11
|
-
color: #e0e0e0;
|
|
12
|
-
padding: 16px;
|
|
13
|
-
font-size: 13px;
|
|
14
|
-
}
|
|
15
|
-
h1 { font-size: 16px; margin-bottom: 12px; color: #fff; }
|
|
16
|
-
.status-row {
|
|
17
|
-
display: flex;
|
|
18
|
-
align-items: center;
|
|
19
|
-
margin-bottom: 8px;
|
|
20
|
-
}
|
|
21
|
-
.status-dot {
|
|
22
|
-
width: 10px; height: 10px;
|
|
23
|
-
border-radius: 50%;
|
|
24
|
-
margin-right: 8px;
|
|
25
|
-
background: #666;
|
|
26
|
-
}
|
|
27
|
-
.status-dot.connected { background: #4caf50; }
|
|
28
|
-
.status-dot.error { background: #f44336; }
|
|
29
|
-
.status-dot.waiting { background: #ff9800; }
|
|
30
|
-
label { display: block; margin: 12px 0 4px; font-weight: 600; }
|
|
31
|
-
input[type="text"] {
|
|
32
|
-
width: 100%;
|
|
33
|
-
padding: 6px 8px;
|
|
34
|
-
background: #2d2d2d;
|
|
35
|
-
border: 1px solid #444;
|
|
36
|
-
color: #e0e0e0;
|
|
37
|
-
border-radius: 4px;
|
|
38
|
-
font-size: 12px;
|
|
39
|
-
}
|
|
40
|
-
button {
|
|
41
|
-
margin-top: 8px;
|
|
42
|
-
padding: 6px 16px;
|
|
43
|
-
background: #0078d4;
|
|
44
|
-
color: #fff;
|
|
45
|
-
border: none;
|
|
46
|
-
border-radius: 4px;
|
|
47
|
-
cursor: pointer;
|
|
48
|
-
font-size: 12px;
|
|
49
|
-
}
|
|
50
|
-
button:hover { background: #106ebe; }
|
|
51
|
-
button.stop { background: #d32f2f; }
|
|
52
|
-
button.stop:hover { background: #b71c1c; }
|
|
53
|
-
#log {
|
|
54
|
-
margin-top: 12px;
|
|
55
|
-
background: #111;
|
|
56
|
-
border: 1px solid #333;
|
|
57
|
-
border-radius: 4px;
|
|
58
|
-
padding: 8px;
|
|
59
|
-
max-height: 120px;
|
|
60
|
-
overflow-y: auto;
|
|
61
|
-
font-family: "Cascadia Code", "Fira Code", monospace;
|
|
62
|
-
font-size: 11px;
|
|
63
|
-
line-height: 1.5;
|
|
64
|
-
}
|
|
65
|
-
.log-entry { color: #999; }
|
|
66
|
-
.log-entry.cmd { color: #4fc3f7; }
|
|
67
|
-
.log-entry.ok { color: #81c784; }
|
|
68
|
-
.log-entry.err { color: #ef5350; }
|
|
69
|
-
</style>
|
|
7
|
+
<link rel="stylesheet" href="styles.css">
|
|
70
8
|
</head>
|
|
71
9
|
<body>
|
|
72
|
-
<
|
|
10
|
+
<main class="panel-shell">
|
|
11
|
+
<header class="panel-header">
|
|
12
|
+
<div class="brand-mark" aria-hidden="true"><span>M</span></div>
|
|
13
|
+
<div class="brand-copy">
|
|
14
|
+
<h1>MCP Bridge</h1>
|
|
15
|
+
<p>Premiere Pro connection</p>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="auto-start"><span></span>Auto-start</div>
|
|
18
|
+
</header>
|
|
73
19
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
20
|
+
<section class="status-panel" aria-live="polite">
|
|
21
|
+
<div class="status-indicator" aria-hidden="true">
|
|
22
|
+
<div class="status-ring"><div class="status-dot connected" id="statusDot"></div></div>
|
|
23
|
+
</div>
|
|
24
|
+
<div class="status-copy">
|
|
25
|
+
<span class="section-label">Bridge status</span>
|
|
26
|
+
<strong id="statusText">Connected</strong>
|
|
27
|
+
<span id="statusDetail">Premiere Pro link is active</span>
|
|
28
|
+
</div>
|
|
29
|
+
<div class="command-stat">
|
|
30
|
+
<strong id="cmdCount">0</strong>
|
|
31
|
+
<span>commands</span>
|
|
32
|
+
</div>
|
|
33
|
+
</section>
|
|
81
34
|
|
|
82
|
-
|
|
83
|
-
|
|
35
|
+
<section class="config-section">
|
|
36
|
+
<div class="section-heading">
|
|
37
|
+
<div>
|
|
38
|
+
<span class="section-label">Configuration</span>
|
|
39
|
+
<h2>Bridge directory</h2>
|
|
40
|
+
</div>
|
|
41
|
+
<button class="save-link" id="btnSave" onclick="saveTempDir()" type="button" title="Save bridge directory">
|
|
42
|
+
<svg viewBox="0 0 20 20" aria-hidden="true"><path d="M4 3.5h9.4L16.5 6v10.5h-13v-13Z"/><path d="M6.5 3.5v5h7v-5M6.5 16.5v-5h7v5"/></svg>
|
|
43
|
+
Save
|
|
44
|
+
</button>
|
|
45
|
+
</div>
|
|
46
|
+
<label class="sr-only" for="tempDir">Temporary bridge directory</label>
|
|
47
|
+
<div class="path-field">
|
|
48
|
+
<svg viewBox="0 0 20 20" aria-hidden="true"><path d="M2.5 5.5h5l1.5 2h8.5v8h-15v-10Z"/></svg>
|
|
49
|
+
<input type="text" id="tempDir" value="" spellcheck="false">
|
|
50
|
+
</div>
|
|
51
|
+
<p class="field-help">Commands and responses are exchanged through this local folder.</p>
|
|
52
|
+
</section>
|
|
84
53
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
54
|
+
<div class="action-row">
|
|
55
|
+
<button id="btnStart" class="button button-primary" onclick="startBridge()" type="button">
|
|
56
|
+
<svg viewBox="0 0 20 20" aria-hidden="true"><path class="fill-icon" d="m7 5 8 5-8 5V5Z"/></svg>
|
|
57
|
+
Start Bridge
|
|
58
|
+
</button>
|
|
59
|
+
<button id="btnStop" class="button button-stop" onclick="stopBridge()" type="button" disabled>
|
|
60
|
+
<svg viewBox="0 0 20 20" aria-hidden="true"><rect class="fill-icon" x="6" y="6" width="8" height="8" rx="1"/></svg>
|
|
61
|
+
Stop
|
|
62
|
+
</button>
|
|
63
|
+
</div>
|
|
90
64
|
|
|
91
|
-
|
|
65
|
+
<section class="activity-section">
|
|
66
|
+
<div class="section-heading activity-heading">
|
|
67
|
+
<div>
|
|
68
|
+
<span class="section-label">Live monitor</span>
|
|
69
|
+
<h2>Activity</h2>
|
|
70
|
+
</div>
|
|
71
|
+
<span class="activity-state"><span></span>Listening</span>
|
|
72
|
+
</div>
|
|
73
|
+
<div id="log" role="log" aria-live="polite"></div>
|
|
74
|
+
</section>
|
|
75
|
+
</main>
|
|
92
76
|
|
|
93
77
|
<script src="CSInterface.js"></script>
|
|
94
78
|
<script src="main.js"></script>
|