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.
Files changed (48) hide show
  1. package/CHANGELOG.md +90 -0
  2. package/README.md +103 -41
  3. package/cep-plugin/CSXS/manifest.xml +32 -2
  4. package/cep-plugin/index.html +65 -81
  5. package/cep-plugin/main.js +38 -10
  6. package/cep-plugin/styles.css +227 -0
  7. package/dist/bridge/file-bridge.js +102 -17
  8. package/dist/bridge/script-builder.d.ts +19 -3
  9. package/dist/bridge/script-builder.js +75 -13
  10. package/dist/index.js +18 -4
  11. package/dist/platform-capabilities.d.ts +42 -0
  12. package/dist/platform-capabilities.js +54 -0
  13. package/dist/security/audit.d.ts +14 -0
  14. package/dist/security/audit.js +12 -0
  15. package/dist/security/capabilities.d.ts +23 -0
  16. package/dist/security/capabilities.js +66 -0
  17. package/dist/security/index.d.ts +3 -0
  18. package/dist/security/index.js +3 -0
  19. package/dist/server.js +49 -10
  20. package/dist/tools/advanced.js +7 -2
  21. package/dist/tools/audio.js +24 -8
  22. package/dist/tools/edit-plans.d.ts +90 -0
  23. package/dist/tools/edit-plans.js +131 -0
  24. package/dist/tools/health.d.ts +46 -1
  25. package/dist/tools/health.js +12 -2
  26. package/dist/tools/sequence.d.ts +1 -0
  27. package/dist/tools/sequence.js +93 -9
  28. package/dist/tools/timeline.js +9 -3
  29. package/dist/tools/transitions.js +32 -1
  30. package/dist/workflows/catalog.d.ts +46 -0
  31. package/dist/workflows/catalog.js +65 -0
  32. package/dist/workflows/tool-metadata.d.ts +13 -0
  33. package/dist/workflows/tool-metadata.js +22 -0
  34. package/package.json +15 -9
  35. package/scripts/install-cep.ps1 +68 -0
  36. package/scripts/install-cep.sh +31 -1
  37. package/scripts/publish-npm.mjs +182 -0
  38. package/uxp-plugin/README.md +15 -0
  39. package/uxp-plugin/index.cjs +95 -0
  40. package/uxp-plugin/index.html +10 -0
  41. package/uxp-plugin/manifest.json +22 -0
  42. package/uxp-plugin/protocol.cjs +25 -0
  43. package/dist/prompts/index.d.ts +0 -25
  44. package/dist/prompts/index.js +0 -243
  45. package/dist/resources/live.d.ts +0 -35
  46. package/dist/resources/live.js +0 -114
  47. package/dist/tools/registry.d.ts +0 -17
  48. 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 28 modules the most comprehensive MCP server for video editing.
7
+ 269 tools across 29 modules, 3 resources, and 4 guided workflows.
8
8
 
9
9
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
10
10
  [![Node.js](https://img.shields.io/badge/Node.js-18%2B-green.svg)](https://nodejs.org)
11
11
  [![MCP](https://img.shields.io/badge/MCP-1.27-purple.svg)](https://modelcontextprotocol.io)
12
12
  [![npm](https://img.shields.io/npm/v/premiere-pro-mcp.svg)](https://www.npmjs.com/package/premiere-pro-mcp)
13
13
  [![Fly.io](https://img.shields.io/badge/Fly.io-deployed-7C3AED.svg)](https://premiere-pro-mcp.fly.dev)
14
- [![Premiere Pro](https://img.shields.io/badge/Premiere%20Pro-2020--2025%2B-9999FF.svg)](https://www.adobe.com/products/premiere.html)
14
+ [![Premiere Pro](https://img.shields.io/badge/Premiere%20Pro-2020--2026-9999FF.svg)](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 that cover nearly every ExtendScript and QE DOM API available in Premiere Pro.
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 symlinks the plugin into Premiere Pro's extensions folder and enables debug mode.
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 DWORD values to `1`:
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. Start the bridge in Premiere Pro
189
+ ### 4. Verify the bridge in Premiere Pro
156
190
 
157
191
  1. Open (or restart) Premiere Pro
158
- 2. Go to **Window > Extensions > MCP Bridge**
159
- 3. Set the **Temp Directory** to match your MCP client config (e.g., `/tmp/premiere-mcp-bridge`)
160
- 4. Click **Start Bridge** you should see a green "Running" status
161
- 5. Ask your AI assistant: *"What's my current Premiere Pro project?"*
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 (269)
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 two LLM context resources:
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
- fly deploy --remote-only
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 for HTTP transport auth (optional) | unset |
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 all 269 tools + 2 resources
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
- └── install-cep.sh # CEP plugin installer (symlink + debug mode)
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
- ### Why CEP instead of UXP?
527
+ ### CEP and UXP backends
470
528
 
471
- CEP (Common Extensibility Platform) provides full ExtendScript access in Premiere Pro, including the undocumented **QE DOM** which is the only way to apply effects by name, perform ripple deletes, and do advanced trim operations. UXP in Premiere Pro is still maturing and lacks equivalent API coverage. CEP works across **Premiere Pro 2020–2025+**.
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 `buildToolScript()` function prepends a library of helper functions to every script.
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 run ExtendScript inside your Premiere Pro.** `execute_extendscript` and
481
- `send_raw_script` are arbitrary-code-execution tools by design. Treat access to the server
482
- the same way you'd treat a shell on the machine running Premiere.
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: `defaults read com.adobe.CSXS.12 PlayerDebugMode` should return `1`
514
- 2. Check the plugin exists: `ls ~/Library/Application\ Support/Adobe/CEP/extensions/MCPBridgeCEP`
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. Verify the CEP panel shows "Running" with a green dot
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. Check if Premiere Pro is busy (rendering, modal dialog open)
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.0.0" ExtensionBundleName="MCP Bridge">
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.0.0"/>
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>
@@ -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
- <style>
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
- <h1>MCP Bridge (CEP)</h1>
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
- <div class="status-row">
75
- <div class="status-dot" id="statusDot"></div>
76
- <span id="statusText">Stopped</span>
77
- </div>
78
- <div class="status-row">
79
- <span>Commands processed: <strong id="cmdCount">0</strong></span>
80
- </div>
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
- <label for="tempDir">Temp Directory</label>
83
- <input type="text" id="tempDir" value="">
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
- <div style="display: flex; gap: 8px;">
86
- <button id="btnStart" onclick="startBridge()">Start Bridge</button>
87
- <button id="btnStop" class="stop" onclick="stopBridge()" disabled>Stop Bridge</button>
88
- <button onclick="saveTempDir()">Save Config</button>
89
- </div>
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
- <div id="log"></div>
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>