premiere-pro-mcp 1.14.7 → 1.14.8
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 +43 -0
- package/README.md +84 -24
- package/after-effects-cep-plugin/CSInterface.js +9 -0
- package/after-effects-cep-plugin/CSXS/manifest.xml +38 -0
- package/after-effects-cep-plugin/host.jsx +5 -0
- package/after-effects-cep-plugin/index.html +27 -0
- package/after-effects-cep-plugin/main.js +129 -0
- package/artifacts/MCPBridgeCEP.zxp +0 -0
- package/cep-plugin/CSXS/manifest.xml +3 -3
- package/cep-plugin/index.html +4 -4
- package/cep-plugin/main.js +215 -41
- package/cep-plugin/updater.cjs +131 -1
- package/dist/ai/caption-timing.d.ts +60 -0
- package/dist/ai/caption-timing.js +205 -0
- package/dist/bridge/after-effects-bridge.d.ts +11 -0
- package/dist/bridge/after-effects-bridge.js +30 -0
- package/dist/bridge/after-effects-script-builder.d.ts +7 -0
- package/dist/bridge/after-effects-script-builder.js +57 -0
- package/dist/bridge/file-bridge.d.ts +10 -0
- package/dist/bridge/file-bridge.js +74 -25
- package/dist/diagnostics.d.ts +29 -1
- package/dist/diagnostics.js +103 -1
- package/dist/doctor-repairs.d.ts +31 -0
- package/dist/doctor-repairs.js +121 -0
- package/dist/index.js +66 -15
- package/dist/platform-capabilities.d.ts +1 -1
- package/dist/resources/premiere-doc-inventory.json +46 -31
- package/dist/security/capabilities.js +16 -1
- package/dist/server.js +67 -89
- package/dist/tool-capability-report.js +48 -0
- package/dist/tools/captions.d.ts +51 -2
- package/dist/tools/captions.js +152 -21
- package/dist/tools/health.d.ts +1 -1
- package/dist/tools/mogrt-authoring.d.ts +192 -0
- package/dist/tools/mogrt-authoring.js +419 -0
- package/dist/tools/project-context.d.ts +123 -1
- package/dist/tools/project-context.js +177 -4
- package/dist/workflows/tool-metadata.js +2 -0
- package/docs/mogrt-authoring.md +63 -0
- package/docs/project-context-engine.md +10 -0
- package/docs/supported-actions.md +10 -6
- package/package.json +11 -4
- package/public-product-manifest.json +101 -0
- package/scripts/generate-premiere-doc-inventory.mjs +84 -41
- package/scripts/generate-public-product-manifest.mjs +130 -0
- package/scripts/install-cep.ps1 +17 -14
- package/scripts/install-cep.sh +26 -9
- package/scripts/uninstall-cep.ps1 +12 -9
- package/scripts/uninstall-cep.sh +22 -6
- package/scripts/verify-npm-package.mjs +4 -0
- package/uxp-plugin/manifest.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,49 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [1.14.8] - 2026-09-04
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Added a separate After Effects CEP bridge and four approval-gated MOGRT
|
|
14
|
+
authoring tools. The initial `lower_third` recipe only runs in an already
|
|
15
|
+
saved, workspace-contained AE project and exports to an existing approved
|
|
16
|
+
directory.
|
|
17
|
+
- Added one-time preview tokens, explicit export confirmation, isolated AE
|
|
18
|
+
bridge helpers/temp directory, and local ZIP-header artifact verification.
|
|
19
|
+
- Added a local SRT/VTT timing-review plan for lecture and interview captions,
|
|
20
|
+
including bounded correction previews and a separate structural/playback/
|
|
21
|
+
rendered-output verification checklist.
|
|
22
|
+
- Added revision-bound, opt-in editorial evidence import for caller-supplied
|
|
23
|
+
transcript, shot, audio, note, and opaque frame-reference data; it remains
|
|
24
|
+
local and rejects stale source or timeline revisions.
|
|
25
|
+
- Added no-write `premiere-pro-mcp --doctor --plan-fixes` repair guidance and a
|
|
26
|
+
narrowly scoped, confirmation-gated local connector recovery path.
|
|
27
|
+
- Added a generated public workflow manifest, workflow-proof receipt/runbook,
|
|
28
|
+
and a universal client setup guide with explicit distribution boundaries.
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
|
|
32
|
+
- Added an in-panel global npm/CEP connector update handoff for Windows. It
|
|
33
|
+
requires confirmation, waits for Premiere to close without forcing it, and
|
|
34
|
+
uses the published-package update path.
|
|
35
|
+
- Reused immutable MCP registration descriptors and JSON Schema adapters across
|
|
36
|
+
stateless server construction, while retaining per-request context, telemetry,
|
|
37
|
+
and UXP state. Concurrent CEP commands now share a response-directory watcher
|
|
38
|
+
with polling retained as the correctness fallback.
|
|
39
|
+
- Refined the public landing for mobile and reduced motion, removed the deferred
|
|
40
|
+
3D dependency path, and refreshed its facts, structured data, sitemap, public
|
|
41
|
+
crawl policy, and machine-readable reference files.
|
|
42
|
+
|
|
43
|
+
### Safety
|
|
44
|
+
|
|
45
|
+
- MOGRT authoring never accepts arbitrary script text, creates or switches AE
|
|
46
|
+
projects, creates output directories, overwrites artifacts, or treats host
|
|
47
|
+
acceptance/a ZIP header as import, rendered-frame, or visual proof.
|
|
48
|
+
- Caption timing plans, editorial evidence import, doctor repair plans, and
|
|
49
|
+
public workflow materials remain distinct from licensed-host, playback,
|
|
50
|
+
rendered-output, provider, or marketplace verification.
|
|
51
|
+
|
|
9
52
|
## [1.14.7] - 2026-09-02
|
|
10
53
|
|
|
11
54
|
### Added
|
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
**Give compatible AI assistants structured control over supported Adobe Premiere Pro workflows.**
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
332 core tools across 39 modules, 4 resources, and 11 guided workflows. A connected UXP host adds 91 capability-gated tools.
|
|
12
12
|
|
|
13
13
|
[](LICENSE)
|
|
14
14
|
[](https://nodejs.org)
|
|
@@ -31,22 +31,36 @@ An [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server that l
|
|
|
31
31
|
"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."
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
The AI handles the entire workflow through
|
|
35
|
-
|
|
36
|
-
### Latest release: 1.14.
|
|
37
|
-
|
|
38
|
-
- **
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
34
|
+
The AI handles the entire workflow through 332 core tools 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. A compatible, authenticated UXP panel adds 91 documented, capability-gated tools without replacing the production CEP bridge.
|
|
35
|
+
|
|
36
|
+
### Latest release: 1.14.8
|
|
37
|
+
|
|
38
|
+
- **MOGRT authoring:** an optional, separate After Effects CEP connector can
|
|
39
|
+
create one approval-gated lower-third recipe in an already saved workspace
|
|
40
|
+
project, then report local artifact evidence without claiming visual proof.
|
|
41
|
+
- **Global-update handoff:** a global npm installation can show its server and
|
|
42
|
+
connector update state in the Windows CEP panel and, after explicit
|
|
43
|
+
confirmation, update only after Premiere has been quit; it never changes a
|
|
44
|
+
project, client configuration, source checkout, or custom npm prefix.
|
|
45
|
+
- **Local review planning:** caption timing previews parse caller-supplied
|
|
46
|
+
SRT/VTT without writing or importing it, while revision-bound editorial
|
|
47
|
+
evidence stays in the opt-in local context index without provider calls.
|
|
48
|
+
- **Repair preview:** `premiere-pro-mcp --doctor --plan-fixes` produces a
|
|
49
|
+
privacy-safe, no-write repair plan; the narrowly eligible connector repair
|
|
50
|
+
still requires an explicit confirmation that Premiere is closed.
|
|
51
|
+
- **Auditable guidance:** the universal setup guide, generated public workflow
|
|
52
|
+
manifest, and proof runbook make workflow and verification boundaries
|
|
53
|
+
inspectable without claiming a licensed-host walkthrough occurred.
|
|
54
|
+
- **Faster, clearer delivery:** immutable MCP registration work is reused
|
|
55
|
+
safely across stateless requests, and the landing now has a lighter,
|
|
56
|
+
mobile-first workflow view plus current machine-readable facts and crawl
|
|
57
|
+
guidance for its public pages.
|
|
45
58
|
- **Explicit boundary:** the hosted endpoint remains an operator-managed MCP
|
|
46
|
-
|
|
47
|
-
|
|
59
|
+
service; unauthenticated callers are rejected and it does not pair users to
|
|
60
|
+
local Premiere processes. See the generated [supported action catalog](docs/supported-actions.md)
|
|
61
|
+
for individual capability and verification contracts.
|
|
48
62
|
|
|
49
|
-
See the [v1.14.
|
|
63
|
+
See the [v1.14.8 release notes](https://github.com/leancoderkavy/premiere-pro-mcp/releases/tag/v1.14.8)
|
|
50
64
|
for complete details. Live installation in Premiere Pro still requires host verification.
|
|
51
65
|
|
|
52
66
|
### Current MCP protocol support
|
|
@@ -93,9 +107,9 @@ their bins, media rules, and organization rules before a facility uses one.
|
|
|
93
107
|
|
|
94
108
|
### Easiest supported path: Claude Desktop
|
|
95
109
|
|
|
96
|
-
1. Download the current [Claude Desktop bundle (`.mcpb`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.14.
|
|
110
|
+
1. Download the current [Claude Desktop bundle (`.mcpb`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.14.8/premiere-pro-mcp-1.14.8.mcpb).
|
|
97
111
|
2. In Claude Desktop, open **Settings > Extensions > Advanced settings > Install Extension**, select the downloaded bundle, and restart Claude Desktop.
|
|
98
|
-
3. Download the separate [signed Premiere connector (`.zxp`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.14.
|
|
112
|
+
3. Download the separate [signed Premiere connector (`.zxp`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.14.8/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.
|
|
99
113
|
4. Restart Premiere, open a project, then open **Window > Extensions > MCP for Adobe Premiere Pro**.
|
|
100
114
|
5. In Claude, enter: `Safely check my Premiere connection with verify_premiere_connection. Make no changes.`
|
|
101
115
|
|
|
@@ -118,6 +132,11 @@ If a bridge, project, or active sequence is missing, fix that setup state before
|
|
|
118
132
|
|
|
119
133
|
Cursor, VS Code/Copilot, Windsurf, and other MCP clients do not currently have a project-provided one-click installer. Use their MCP settings with the advanced npm route below. Keep the assistant, server, connector, and Premiere on the same computer.
|
|
120
134
|
|
|
135
|
+
For a portable reference users can download and attach to any AI assistant, see
|
|
136
|
+
the [MCP for Adobe Premiere Pro setup guide for AI assistants](premiere-mcp-setup-guide.md).
|
|
137
|
+
Attaching the guide provides assistant context; the local server and Premiere
|
|
138
|
+
connector still need to be installed separately.
|
|
139
|
+
|
|
121
140
|
<details>
|
|
122
141
|
<summary><strong>Advanced setup: npm or source</strong></summary>
|
|
123
142
|
|
|
@@ -188,6 +207,19 @@ premiere-pro-mcp --update
|
|
|
188
207
|
client configuration and projects untouched. Restart Premiere and your MCP
|
|
189
208
|
client afterward, then run `verify_premiere_connection` before editing.
|
|
190
209
|
|
|
210
|
+
**From the MCP for Adobe Premiere Pro panel (Windows global npm install):**
|
|
211
|
+
|
|
212
|
+
The **MCP updates** card compares the installed global server and connector
|
|
213
|
+
with npm `latest`. Choose **Update after quit**, review the confirmation, then
|
|
214
|
+
quit Premiere normally. A per-user helper waits for Premiere to exit; it never
|
|
215
|
+
force-quits the app, then installs the published npm package and refreshes its
|
|
216
|
+
matching connector. This also supports older global installs that predate the
|
|
217
|
+
`--update` command.
|
|
218
|
+
When you reopen Premiere, the panel reports the result and reminds you to
|
|
219
|
+
restart your MCP client and verify the connection. This flow never changes a
|
|
220
|
+
project or MCP client configuration. It deliberately will not update a Git
|
|
221
|
+
checkout, a custom npm prefix, or a Claude Desktop `.mcpb` bundle.
|
|
222
|
+
|
|
191
223
|
**Installed from a Git clone:**
|
|
192
224
|
|
|
193
225
|
```bash
|
|
@@ -374,11 +406,11 @@ From a clone of this repository:
|
|
|
374
406
|
```bash
|
|
375
407
|
codex plugin marketplace add .
|
|
376
408
|
codex plugin add premiere-pro@premiere-pro-mcp
|
|
377
|
-
npx -y premiere-pro-mcp@1.14.
|
|
409
|
+
npx -y premiere-pro-mcp@1.14.8 --install-cep
|
|
378
410
|
```
|
|
379
411
|
|
|
380
412
|
Restart Premiere Pro and start a new Codex session after installation. The plugin
|
|
381
|
-
launches `premiere-pro-mcp@1.14.
|
|
413
|
+
launches `premiere-pro-mcp@1.14.8` through `npx`; the separate CEP installation is
|
|
382
414
|
required because the MCP server communicates with the running Premiere host through
|
|
383
415
|
the local bridge.
|
|
384
416
|
|
|
@@ -398,7 +430,7 @@ For Claude Code, add this repository as a marketplace and install the plugin:
|
|
|
398
430
|
Then install the Premiere bridge and start a new Claude Code session:
|
|
399
431
|
|
|
400
432
|
```bash
|
|
401
|
-
npx -y premiere-pro-mcp@1.14.
|
|
433
|
+
npx -y premiere-pro-mcp@1.14.8 --install-cep
|
|
402
434
|
```
|
|
403
435
|
|
|
404
436
|
The Claude Code package lives in
|
|
@@ -423,6 +455,7 @@ installed separately.
|
|
|
423
455
|
| CEP production bridge | Premiere Pro 2020–2026 | Premiere Pro 2020–2026 | Run `get_capabilities`, then `ping` with Premiere open |
|
|
424
456
|
| UXP preview bridge | Premiere Pro 25.6+ | Premiere Pro 25.6+ | Live loopback WebSocket and host API verification required |
|
|
425
457
|
| npm CEP installer | Copies plugin and verifies `REG_SZ` debug keys | Copies plugin and verifies the installed manifest/debug settings | Restart Premiere after installation |
|
|
458
|
+
| AE MOGRT authoring CEP bridge | After Effects 2018+ | After Effects 2018+ | Opens only a saved, workspace-contained AE project; a local ZIP check is not import, playback, or visual verification |
|
|
426
459
|
| CI build and unit tests | Node 20, 22, and 24 | Node 20, 22, and 24 | GitHub-hosted OS runners; no Adobe host is available in CI |
|
|
427
460
|
|
|
428
461
|
`get_capabilities` reports the current operating system, temp directory, CEP/UXP coverage, enabled authority profile, and any live-host verification still required. It also includes the full `tools` catalog generated from the tools registered by the server, including tools disabled by the active profile. Every entry identifies:
|
|
@@ -437,7 +470,7 @@ installed separately.
|
|
|
437
470
|
QE-backed tools are reported as `experimental` because QE is undocumented and can vary between Premiere builds. Authority availability is reported separately from implementation support, so disabling `edit`, for example, does not incorrectly label editing tools as unsupported. Static metadata never claims that a Premiere operation succeeded; use `ping` and inspect each tool result for runtime evidence.
|
|
438
471
|
|
|
439
472
|
MCP `tools/list` is filtered to the active authority profile. The default
|
|
440
|
-
`inspect,edit,export,filesystem` profile advertises
|
|
473
|
+
`inspect,edit,export,filesystem` profile advertises 330 of the 332 registered
|
|
441
474
|
tools and omits `execute_extendscript` and `evaluate_expression`, which require
|
|
442
475
|
explicit `unsafe-script` authority. `ping` and `get_capabilities` remain visible
|
|
443
476
|
under every profile so a restricted or misconfigured server can still explain
|
|
@@ -460,6 +493,32 @@ The tool-specific `data` shape remains versioned by the individual tool result,
|
|
|
460
493
|
so clients can reliably distinguish transport success from a Premiere or local
|
|
461
494
|
operation failure without parsing the text block.
|
|
462
495
|
|
|
496
|
+
### After Effects MOGRT authoring
|
|
497
|
+
|
|
498
|
+
This is a narrow authoring path, not an arbitrary After Effects script runner.
|
|
499
|
+
Install the separate local connector, fully restart After Effects, and open
|
|
500
|
+
**Window > Extensions > MCP for Adobe After Effects**:
|
|
501
|
+
|
|
502
|
+
```bash
|
|
503
|
+
premiere-pro-mcp --install-after-effects-cep
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
Then open a saved `.aep` project inside an approved workspace and use this order:
|
|
507
|
+
|
|
508
|
+
1. `verify_after_effects_connection` — read-only connector and saved-project check.
|
|
509
|
+
2. `preview_mogrt_recipe` — produces an expiring, one-time plan for the supported
|
|
510
|
+
`lower_third` recipe; it never creates directories or contacts Adobe.
|
|
511
|
+
3. `create_mogrt_recipe` with that token and `confirm_export: true` — creates one
|
|
512
|
+
composition, saves the open project, and requests one `.mogrt` export.
|
|
513
|
+
4. `verify_mogrt_artifact` — checks only local file existence and its ZIP header.
|
|
514
|
+
|
|
515
|
+
The authoring connector uses `AFTER_EFFECTS_MCP_TEMP_DIR` (default: the OS temp
|
|
516
|
+
directory plus `after-effects-mcp-bridge`), completely separate from
|
|
517
|
+
`PREMIERE_TEMP_DIR`. The tool will not create, replace, or switch projects; it
|
|
518
|
+
requires the already-open AE project and output directory to be contained by the
|
|
519
|
+
same approved workspace. A valid local artifact still needs import into a
|
|
520
|
+
disposable Premiere sequence and rendered-frame review before delivery.
|
|
521
|
+
|
|
463
522
|
`inspect_sequence_review_report` creates one read-only handoff report from
|
|
464
523
|
Premiere timeline readback: sequence structure, primary-track gaps, disabled
|
|
465
524
|
clips, muted tracks, marker timing, and offline-source evidence. It never
|
|
@@ -637,7 +696,7 @@ opaque `UniqueSerializeable` identity twice, and rejects drift without retaining
|
|
|
637
696
|
the value or treating it as edit authority. See the [unique-identity workflow
|
|
638
697
|
notes](docs/uxp-unique-identity-workflows.md) for its bounds and proof boundary.
|
|
639
698
|
|
|
640
|
-
## Tools (
|
|
699
|
+
## Tools (332 core total; 330 under the default profile; 421 with a connected UXP bridge)
|
|
641
700
|
|
|
642
701
|
The [complete supported-actions catalog](docs/supported-actions.md) lists every
|
|
643
702
|
registered core tool, the two tools restricted behind explicit `unsafe-script`
|
|
@@ -1013,11 +1072,11 @@ premiere-pro-mcp/
|
|
|
1013
1072
|
├── src/
|
|
1014
1073
|
│ ├── index.ts # Entry point — stdio transport setup
|
|
1015
1074
|
│ ├── http-server.ts # Entry point — HTTP/SSE transport (Fly.io / remote)
|
|
1016
|
-
│ ├── server.ts # MCP server — registers
|
|
1075
|
+
│ ├── server.ts # MCP server — registers 332 tools, filtered by authority profile
|
|
1017
1076
|
│ ├── bridge/
|
|
1018
1077
|
│ │ ├── file-bridge.ts # File-based IPC (write .jsx, poll .json)
|
|
1019
1078
|
│ │ └── script-builder.ts # ExtendScript generator with ES3 helpers
|
|
1020
|
-
│ ├── tools/ #
|
|
1079
|
+
│ ├── tools/ # 39 tool modules
|
|
1021
1080
|
│ │ ├── discovery.ts # Project discovery and queries
|
|
1022
1081
|
│ │ ├── recovery.ts # Read-only autosave discovery and private bridge telemetry
|
|
1023
1082
|
│ │ ├── project.ts # Project management and import
|
|
@@ -1056,6 +1115,7 @@ premiere-pro-mcp/
|
|
|
1056
1115
|
│ ├── main.js # Bridge polling and script execution
|
|
1057
1116
|
│ ├── host.jsx # ExtendScript entry point
|
|
1058
1117
|
│ └── CSInterface.js # Adobe CEP interface library
|
|
1118
|
+
├── after-effects-cep-plugin/ # Separate AE CEP bridge for guarded MOGRT recipes
|
|
1059
1119
|
├── scripts/
|
|
1060
1120
|
│ ├── install-cep.sh # macOS CEP installer (symlink + debug mode)
|
|
1061
1121
|
│ └── install-cep.ps1 # Windows CEP installer (copy + REG_SZ debug mode)
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/* Minimal CEP bridge API used by the local After Effects connector. */
|
|
2
|
+
function CSInterface() {}
|
|
3
|
+
CSInterface.prototype.evalScript = function (script, callback) {
|
|
4
|
+
if (typeof __adobe_cep__ !== "undefined") {
|
|
5
|
+
__adobe_cep__.evalScript(script, callback || function () {});
|
|
6
|
+
} else if (callback) {
|
|
7
|
+
callback("EvalScript Error: Not in CEP environment");
|
|
8
|
+
}
|
|
9
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<ExtensionManifest Version="7.0" ExtensionBundleId="com.mcp.aftereffects.bridge" ExtensionBundleVersion="1.14.8" ExtensionBundleName="MCP for Adobe After Effects">
|
|
3
|
+
<ExtensionList>
|
|
4
|
+
<Extension Id="com.mcp.aftereffects.bridge.panel" Version="1.14.8"/>
|
|
5
|
+
</ExtensionList>
|
|
6
|
+
<ExecutionEnvironment>
|
|
7
|
+
<HostList>
|
|
8
|
+
<Host Name="AEFT" Version="15.0"/>
|
|
9
|
+
</HostList>
|
|
10
|
+
<LocaleList>
|
|
11
|
+
<Locale Code="All"/>
|
|
12
|
+
</LocaleList>
|
|
13
|
+
<RequiredRuntimeList>
|
|
14
|
+
<RequiredRuntime Name="CSXS" Version="9.0"/>
|
|
15
|
+
</RequiredRuntimeList>
|
|
16
|
+
</ExecutionEnvironment>
|
|
17
|
+
<DispatchInfoList>
|
|
18
|
+
<Extension Id="com.mcp.aftereffects.bridge.panel">
|
|
19
|
+
<DispatchInfo>
|
|
20
|
+
<Resources>
|
|
21
|
+
<MainPath>./index.html</MainPath>
|
|
22
|
+
<ScriptPath>./host.jsx</ScriptPath>
|
|
23
|
+
<CEFCommandLine>
|
|
24
|
+
<Parameter>--allow-file-access-from-files</Parameter>
|
|
25
|
+
<Parameter>--enable-nodejs</Parameter>
|
|
26
|
+
</CEFCommandLine>
|
|
27
|
+
</Resources>
|
|
28
|
+
<Lifecycle><AutoVisible>true</AutoVisible></Lifecycle>
|
|
29
|
+
<UI>
|
|
30
|
+
<Type>Panel</Type>
|
|
31
|
+
<Menu>MCP for Adobe After Effects</Menu>
|
|
32
|
+
<Geometry><Size><Height>250</Height><Width>390</Width></Size><MinSize><Height>200</Height><Width>320</Width></MinSize></Geometry>
|
|
33
|
+
<Icons/>
|
|
34
|
+
</UI>
|
|
35
|
+
</DispatchInfo>
|
|
36
|
+
</Extension>
|
|
37
|
+
</DispatchInfoList>
|
|
38
|
+
</ExtensionManifest>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<title>MCP for Adobe After Effects</title>
|
|
7
|
+
<style>
|
|
8
|
+
body { margin: 0; background: #202124; color: #f3f4f6; font: 13px/1.45 Arial, sans-serif; }
|
|
9
|
+
main { padding: 18px; } h1 { margin: 0 0 5px; font-size: 16px; } p { color: #c7cbd1; }
|
|
10
|
+
label { display: block; margin: 16px 0 6px; font-weight: bold; } input { box-sizing: border-box; width: 100%; padding: 8px; border: 1px solid #555; border-radius: 4px; background: #111827; color: white; }
|
|
11
|
+
button { margin-top: 12px; padding: 8px 12px; border: 0; border-radius: 4px; background: #2563eb; color: white; cursor: pointer; } #status { display: inline-block; margin-left: 9px; color: #86efac; }
|
|
12
|
+
small { display: block; margin-top: 8px; color: #9ca3af; }
|
|
13
|
+
</style>
|
|
14
|
+
</head>
|
|
15
|
+
<body>
|
|
16
|
+
<main>
|
|
17
|
+
<h1>MCP for Adobe After Effects</h1>
|
|
18
|
+
<p>Local authoring connector for approval-gated MOGRT recipes.</p>
|
|
19
|
+
<label for="tempDir">After Effects bridge directory</label>
|
|
20
|
+
<input id="tempDir" spellcheck="false" autocomplete="off" aria-describedby="bridgeHelp">
|
|
21
|
+
<button id="toggle" type="button">Start connector</button><strong id="status" role="status">Stopped</strong>
|
|
22
|
+
<small id="bridgeHelp">This must match AFTER_EFFECTS_MCP_TEMP_DIR when that environment variable is set for your MCP client.</small>
|
|
23
|
+
</main>
|
|
24
|
+
<script src="CSInterface.js"></script>
|
|
25
|
+
<script src="main.js"></script>
|
|
26
|
+
</body>
|
|
27
|
+
</html>
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/* Dedicated AE CEP file bridge. It deliberately uses a different directory
|
|
2
|
+
* from the Premiere connector so simultaneous Adobe hosts cannot claim each
|
|
3
|
+
* other's ExtendScript commands. */
|
|
4
|
+
(function () {
|
|
5
|
+
var cs = new CSInterface();
|
|
6
|
+
var fs = nodeRequire("fs");
|
|
7
|
+
var path = nodeRequire("path");
|
|
8
|
+
var os = nodeRequire("os");
|
|
9
|
+
var pollTimer = null;
|
|
10
|
+
var heartbeatTimer = null;
|
|
11
|
+
var running = false;
|
|
12
|
+
var tempDir = defaultBridgeDirectory();
|
|
13
|
+
var engineId = Math.random().toString(36).slice(2, 8);
|
|
14
|
+
|
|
15
|
+
function nodeRequire(moduleName) {
|
|
16
|
+
if (typeof require !== "undefined") return require(moduleName);
|
|
17
|
+
var node = typeof cep_node !== "undefined" ? cep_node : window.cep_node;
|
|
18
|
+
if (node && typeof node.require === "function") return node.require(moduleName);
|
|
19
|
+
throw new Error("Node.js is unavailable. Confirm --enable-nodejs in the CEP manifest, then fully restart After Effects.");
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function defaultBridgeDirectory() {
|
|
23
|
+
try {
|
|
24
|
+
var process = nodeRequire("process");
|
|
25
|
+
var configured = process && process.env && process.env.AFTER_EFFECTS_MCP_TEMP_DIR;
|
|
26
|
+
if (typeof configured === "string" && configured.trim()) return configured.trim();
|
|
27
|
+
} catch (ignored) {}
|
|
28
|
+
return path.join(os.tmpdir(), "after-effects-mcp-bridge");
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function setStatus(value, active) {
|
|
32
|
+
document.getElementById("status").textContent = value;
|
|
33
|
+
document.getElementById("status").style.color = active ? "#86efac" : "#fca5a5";
|
|
34
|
+
document.getElementById("toggle").textContent = active ? "Stop connector" : "Start connector";
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function writeFileAtomic(filePath, text) {
|
|
38
|
+
var staged = filePath + "." + engineId + ".staged";
|
|
39
|
+
try {
|
|
40
|
+
fs.writeFileSync(staged, text, "utf8");
|
|
41
|
+
fs.renameSync(staged, filePath);
|
|
42
|
+
return true;
|
|
43
|
+
} catch (error) {
|
|
44
|
+
try { if (fs.existsSync(staged)) fs.unlinkSync(staged); } catch (ignored) {}
|
|
45
|
+
setStatus("Connector needs attention", false);
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function heartbeat() {
|
|
51
|
+
if (!tempDir) return;
|
|
52
|
+
writeFileAtomic(path.join(tempDir, "bridge-heartbeat.json"), JSON.stringify({ protocolVersion: 1, state: running ? "running" : "waiting" }));
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function readCommandFiles() {
|
|
56
|
+
try {
|
|
57
|
+
return fs.readdirSync(tempDir).filter(function (entry) {
|
|
58
|
+
return entry.indexOf("cmd_") === 0 && entry.slice(-4) === ".jsx";
|
|
59
|
+
}).sort();
|
|
60
|
+
} catch (ignored) { return []; }
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function replyFor(result) {
|
|
64
|
+
if (!result || result === "undefined" || result === "null") {
|
|
65
|
+
return JSON.stringify({ success: false, error: "The After Effects connector received an empty evalScript result. Reopen the panel and retry once." });
|
|
66
|
+
}
|
|
67
|
+
try { return JSON.stringify(JSON.parse(result)); }
|
|
68
|
+
catch (ignored) {
|
|
69
|
+
return result.indexOf("Error") === 0
|
|
70
|
+
? JSON.stringify({ success: false, error: result })
|
|
71
|
+
: JSON.stringify({ success: true, data: result });
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function processOne(fileName) {
|
|
76
|
+
var source = path.join(tempDir, fileName);
|
|
77
|
+
var claim = source + "." + engineId + ".claimed";
|
|
78
|
+
try { fs.renameSync(source, claim); } catch (ignored) { return; }
|
|
79
|
+
var script;
|
|
80
|
+
try { script = fs.readFileSync(claim, "utf8"); } catch (error) { script = null; }
|
|
81
|
+
try { if (fs.existsSync(claim)) fs.unlinkSync(claim); } catch (ignored) {}
|
|
82
|
+
if (!script) return;
|
|
83
|
+
var id = fileName.replace("cmd_", "").replace(".jsx", "");
|
|
84
|
+
var busy = path.join(tempDir, "busy_" + id + ".json");
|
|
85
|
+
var started = Date.now();
|
|
86
|
+
var busyTimer = setInterval(function () {
|
|
87
|
+
try { fs.writeFileSync(busy, JSON.stringify({ id: id, elapsedMs: Date.now() - started }), "utf8"); } catch (ignored) {}
|
|
88
|
+
}, 2000);
|
|
89
|
+
cs.evalScript(script, function (result) {
|
|
90
|
+
clearInterval(busyTimer);
|
|
91
|
+
try { if (fs.existsSync(busy)) fs.unlinkSync(busy); } catch (ignored) {}
|
|
92
|
+
writeFileAtomic(path.join(tempDir, "res_" + id + ".json"), replyFor(String(result || "")));
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function processCommands() {
|
|
97
|
+
var files = readCommandFiles();
|
|
98
|
+
for (var index = 0; index < files.length; index++) processOne(files[index]);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function start() {
|
|
102
|
+
tempDir = document.getElementById("tempDir").value.trim();
|
|
103
|
+
if (!tempDir) { setStatus("Set a bridge directory", false); return; }
|
|
104
|
+
try { fs.mkdirSync(tempDir, { recursive: true, mode: 0o700 }); }
|
|
105
|
+
catch (error) { setStatus("Cannot create bridge directory", false); return; }
|
|
106
|
+
running = true;
|
|
107
|
+
heartbeat();
|
|
108
|
+
if (pollTimer) clearInterval(pollTimer);
|
|
109
|
+
if (heartbeatTimer) clearInterval(heartbeatTimer);
|
|
110
|
+
pollTimer = setInterval(processCommands, 200);
|
|
111
|
+
heartbeatTimer = setInterval(heartbeat, 1000);
|
|
112
|
+
try { localStorage.setItem("after_effects_mcp_temp_dir", tempDir); } catch (ignored) {}
|
|
113
|
+
setStatus("Connector running", true);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function stop() {
|
|
117
|
+
running = false;
|
|
118
|
+
heartbeat();
|
|
119
|
+
if (pollTimer) clearInterval(pollTimer);
|
|
120
|
+
if (heartbeatTimer) clearInterval(heartbeatTimer);
|
|
121
|
+
pollTimer = null;
|
|
122
|
+
heartbeatTimer = null;
|
|
123
|
+
setStatus("Stopped", false);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
var field = document.getElementById("tempDir");
|
|
127
|
+
try { field.value = localStorage.getItem("after_effects_mcp_temp_dir") || tempDir; } catch (ignored) { field.value = tempDir; }
|
|
128
|
+
document.getElementById("toggle").onclick = function () { if (running) stop(); else start(); };
|
|
129
|
+
}());
|
|
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.14.
|
|
2
|
+
<ExtensionManifest Version="7.0" ExtensionBundleId="com.mcp.premiere.bridge" ExtensionBundleVersion="1.14.8" ExtensionBundleName="MCP for Adobe Premiere Pro">
|
|
3
3
|
<ExtensionList>
|
|
4
|
-
<Extension Id="com.mcp.premiere.bridge.panel" Version="1.14.
|
|
5
|
-
<Extension Id="com.mcp.premiere.bridge.headless" Version="1.14.
|
|
4
|
+
<Extension Id="com.mcp.premiere.bridge.panel" Version="1.14.8"/>
|
|
5
|
+
<Extension Id="com.mcp.premiere.bridge.headless" Version="1.14.8"/>
|
|
6
6
|
</ExtensionList>
|
|
7
7
|
<ExecutionEnvironment>
|
|
8
8
|
<HostList>
|
package/cep-plugin/index.html
CHANGED
|
@@ -80,11 +80,11 @@
|
|
|
80
80
|
|
|
81
81
|
<section class="update-section" aria-live="polite">
|
|
82
82
|
<div class="update-copy">
|
|
83
|
-
<span class="section-label">
|
|
84
|
-
<strong id="updateTitle">Version 1.14.
|
|
85
|
-
<span id="updateDetail">Checking
|
|
83
|
+
<span class="section-label">MCP updates</span>
|
|
84
|
+
<strong id="updateTitle">Version 1.14.8</strong>
|
|
85
|
+
<span id="updateDetail">Checking the global MCP server and connector release…</span>
|
|
86
86
|
</div>
|
|
87
|
-
<button id="btnUpdate" class="button button-update" onclick="handleUpdateClick()" type="button" disabled>
|
|
87
|
+
<button id="btnUpdate" class="button button-update" onclick="handleUpdateClick()" type="button" aria-describedby="updateDetail" disabled>
|
|
88
88
|
Check again
|
|
89
89
|
</button>
|
|
90
90
|
</section>
|