premiere-pro-mcp 1.16.3 → 1.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +73 -0
- package/README.md +72 -25
- package/after-effects-cep-plugin/CSXS/manifest.xml +2 -2
- package/after-effects-cep-plugin/bridge-directory-security.cjs +18 -9
- package/artifacts/MCPBridgeCEP.zxp +0 -0
- package/cep-plugin/CSXS/manifest.xml +3 -3
- package/cep-plugin/bridge-directory-security.cjs +18 -9
- package/cep-plugin/index.html +1 -1
- package/cep-plugin/updater.cjs +1 -1
- package/dist/ai/mask-fit.d.ts +125 -0
- package/dist/ai/mask-fit.js +308 -0
- package/dist/ai/timeline-qa.js +1 -1
- package/dist/bridge/file-bridge.d.ts +7 -0
- package/dist/bridge/file-bridge.js +21 -8
- package/dist/bridge/script-builder.js +180 -20
- package/dist/index.js +1 -1
- package/dist/resources/adobe-uxp-coverage.json +52 -0
- package/dist/resources/extendscript-reference.js +3 -3
- package/dist/resources/live-context-resources.js +1 -1
- package/dist/resources/uxp-js-api-inventory.json +10 -10
- package/dist/security/capabilities.js +3 -0
- package/dist/server.js +2 -0
- package/dist/tools/advanced.js +33 -8
- package/dist/tools/clipboard.d.ts +58 -0
- package/dist/tools/clipboard.js +495 -0
- package/dist/tools/inspection.js +21 -60
- package/dist/tools/mask-fit.d.ts +182 -0
- package/dist/tools/mask-fit.js +357 -0
- package/dist/tools/media.d.ts +5 -0
- package/dist/tools/media.js +109 -8
- package/dist/tools/metadata.d.ts +26 -0
- package/dist/tools/metadata.js +212 -17
- package/dist/tools/project.js +27 -9
- package/dist/tools/sequence.js +3 -3
- package/dist/tools/source-monitor.d.ts +5 -0
- package/dist/tools/source-monitor.js +66 -5
- package/dist/tools/timeline-qa.js +1 -1
- package/dist/tools/timeline.d.ts +42 -0
- package/dist/tools/timeline.js +298 -56
- package/dist/tools/track-targeting.d.ts +5 -0
- package/dist/tools/track-targeting.js +168 -38
- package/dist/tools/uxp-timeline-source-label-workflows.d.ts +8 -1
- package/dist/tools/uxp-timeline-source-label-workflows.js +14 -5
- package/dist/tools/uxp-workflows.d.ts +59 -0
- package/dist/tools/uxp-workflows.js +36 -3
- package/dist/tools/uxp.d.ts +157 -0
- package/dist/workflows/agent-instructions.js +14 -0
- package/dist/workflows/catalog.d.ts +8 -2
- package/dist/workflows/catalog.js +9 -0
- package/dist/workflows/tool-metadata.js +1 -0
- package/dist/workflows/tool-packs.js +5 -1
- package/docs/supported-actions.md +23 -20
- package/package.json +2 -2
- package/public-product-manifest.json +6 -6
- package/scripts/generate-marketing-reference.mjs +1 -0
- package/uxp-plugin/commands.cjs +1 -1
- package/uxp-plugin/index.cjs +5 -1
- package/uxp-plugin/manifest.json +1 -1
- package/uxp-plugin/timeline-source-label-workflows.cjs +46 -9
- package/uxp-plugin/workflows.cjs +255 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,79 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [1.17.0] - 2026-09-21
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- `paste_clip_attributes` copies a source clip's effect stack, values, and
|
|
14
|
+
keyframes onto a target clip with per-property readback. Masks and a differing
|
|
15
|
+
Blend Mode are reported as not copied because no documented scripting surface
|
|
16
|
+
exposes them. (#595)
|
|
17
|
+
- `compute_mask_fit_motion` computes Motion Scale/Position that place a still's
|
|
18
|
+
subject inside an existing Rounded Crop, Crop, or similar mask. Inspect only.
|
|
19
|
+
(#594)
|
|
20
|
+
- `set_clip_duration` sets a placed timeline clip's duration or absolute end by
|
|
21
|
+
moving only `TrackItem.end`, so still images can be extended past their import
|
|
22
|
+
length. It refuses overlaps with the next clip, guards effect keyframes when
|
|
23
|
+
shortening, reads start/end back, and restores the original end when Premiere
|
|
24
|
+
clamps the write. (#592)
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
|
|
28
|
+
- Clip speed messaging is consistent across `speed_change`, `set_clip_speed_qe`,
|
|
29
|
+
`set_clip_properties`, agent instructions, docs, and skills: documented
|
|
30
|
+
ExtendScript and UXP (through 26.3) expose only speed getters, the QE setter
|
|
31
|
+
stays unused, and `set_clip_duration` is the supported timing alternative. (#593)
|
|
32
|
+
|
|
33
|
+
### Fixed
|
|
34
|
+
|
|
35
|
+
- `set_target_track` targets exclusively by default (`exclusive: false` keeps
|
|
36
|
+
other tracks targeted) and reads every track back; `get_target_tracks` lists
|
|
37
|
+
every targeted track and unreadable tracks. (#587)
|
|
38
|
+
- `create_bars_and_tone` returns the created item's name, node ID, and tree path.
|
|
39
|
+
(#588)
|
|
40
|
+
- `get_bin_contents` resolves nested bins by node ID with guarded child access and
|
|
41
|
+
clean errors instead of a raw TypeError. (#589)
|
|
42
|
+
- `manage_timeline_source_label_uxp` accepts `sequence_id` and resolves it by GUID,
|
|
43
|
+
failing closed instead of targeting the active sequence. (#590)
|
|
44
|
+
- `create_bin` honors `parent_bin_id` and reads back the new bin's parent. (#591)
|
|
45
|
+
- Windows bridge-directory ACL checks ignore capability and app-container SIDs
|
|
46
|
+
(`S-1-15-*`), so the default location under `%LOCALAPPDATA%` no longer fails at
|
|
47
|
+
startup; the ancestry error names each offending path and SID. (#581)
|
|
48
|
+
|
|
49
|
+
## [1.16.4] - 2026-09-20
|
|
50
|
+
|
|
51
|
+
### Added
|
|
52
|
+
|
|
53
|
+
- Claude Fable 5.1 client workflow guidance for Cursor and other compatible MCP
|
|
54
|
+
clients, covering model selection, data-retention opt-in, tool discovery, and
|
|
55
|
+
serialized Premiere verification. (#576)
|
|
56
|
+
- Named Premiere metadata field inspect and update through existing CEP and UXP
|
|
57
|
+
tools, with field readback instead of requiring complete packet dumps. (#577)
|
|
58
|
+
|
|
59
|
+
### Changed
|
|
60
|
+
|
|
61
|
+
- Shared `AGENTS.md` as the canonical repo map for IDE and coding-agent stubs,
|
|
62
|
+
and pin client CEP install commands to the published package. (#582)
|
|
63
|
+
|
|
64
|
+
### Fixed
|
|
65
|
+
|
|
66
|
+
- `set_item_in_out` and `set_source_in_out` pass seconds, not ticks, to
|
|
67
|
+
`ProjectItem.setInPoint`/`setOutPoint` and verify tick readback. A Source
|
|
68
|
+
Monitor readback mismatch restores original marks when possible and otherwise
|
|
69
|
+
reports a partial state. The ExtendScript reference documents those setter
|
|
70
|
+
arguments as seconds. (#579)
|
|
71
|
+
- CEP `create_subsequence` verifies the new sequence without ES5
|
|
72
|
+
`Array.indexOf`, which ExtendScript does not provide. (#579)
|
|
73
|
+
- `ripple_delete` now fails closed when QE sync-lock state cannot be read,
|
|
74
|
+
instead of omitting neighbours and reporting a verified ripple. (#578)
|
|
75
|
+
- Still-image `capture_frame` / `export_frame` AME fallback restores sequence
|
|
76
|
+
in/out only after those marks can be read, so a failed restore cannot leave
|
|
77
|
+
the sequence pinned to one frame. (#580)
|
|
78
|
+
|
|
79
|
+
Automated checks do not establish licensed Premiere or After Effects playback or
|
|
80
|
+
rendered-output verification.
|
|
81
|
+
|
|
9
82
|
## [1.16.3] - 2026-09-18
|
|
10
83
|
|
|
11
84
|
### Changed
|
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ Free, MIT licensed, local-first, and published to npm as [`premiere-pro-mcp`](ht
|
|
|
12
12
|
|
|
13
13
|
[Website](https://premiere-pro-mcp.com/) · [Recorded demo](https://premiere-pro-mcp.com/demo/) · [Compare servers](https://premiere-pro-mcp.com/compare/) · [Setup guides](https://premiere-pro-mcp.com/blog/how-to-set-up-premiere-pro-mcp/) · [Search tools](https://premiere-pro-mcp.com/tools/) · [Troubleshooting](https://premiere-pro-mcp.com/docs/troubleshooting/) · [Release facts](https://premiere-pro-mcp.com/facts/)
|
|
14
14
|
|
|
15
|
-
Development source:
|
|
15
|
+
Development source: 384 core tools across 57 modules, 4 resources, and 19 guided workflows. A connected UXP host adds 95 capability-gated tools.
|
|
16
16
|
|
|
17
17
|
The [completed AE render handoff](docs/after-effects-render-handoff.md) previews and confirms importing one finished render into an existing Premiere bin, with host and file rechecks and an import receipt.
|
|
18
18
|
|
|
@@ -50,7 +50,7 @@ The [completed AE render handoff](docs/after-effects-render-handoff.md) previews
|
|
|
50
50
|
- [Configure your MCP client](#3-configure-your-mcp-client)
|
|
51
51
|
- [Verify the bridge in Premiere Pro](#4-verify-the-bridge-in-premiere-pro)
|
|
52
52
|
- [Clients and capability coverage](#codex-plugin)
|
|
53
|
-
- [Codex plugin](#codex-plugin) · [Claude](#claude) · [GPT-6 Astra tool discovery](#gpt-6-astra-and-agent-tool-discovery)
|
|
53
|
+
- [Codex plugin](#codex-plugin) · [Claude](#claude) · [GPT-6 Astra tool discovery](#gpt-6-astra-and-agent-tool-discovery) · [Claude Fable 5.1](#claude-fable-51)
|
|
54
54
|
- [Windows and macOS capability coverage](#windows-and-macos-capability-coverage)
|
|
55
55
|
- [After Effects MOGRT studio](#after-effects-mogrt-studio)
|
|
56
56
|
- [Collaboration and AI feature boundaries](#collaboration-and-ai-feature-boundaries)
|
|
@@ -104,13 +104,13 @@ and repository before configuring a client. The new
|
|
|
104
104
|
VS Code, or Codex settings that point directly to this installation. It is a
|
|
105
105
|
feature included in v1.15.1 and later.
|
|
106
106
|
|
|
107
|
-
The current source exposes
|
|
107
|
+
The current source exposes 384 core tools for supported workflow steps spanning the supported ExtendScript, QE DOM, local media and interchange analysis, revisioned project-context retrieval, safe edit-planning, project-intake preview, review handoff, connection verification, and guarded After Effects MOGRT authoring, batch, library, render-queue, inspection, and Premiere-handoff workflows. A compatible, authenticated UXP panel adds 95 documented, capability-gated tools without replacing the production CEP bridge.
|
|
108
108
|
|
|
109
109
|
<a id="latest-release"></a>
|
|
110
110
|
|
|
111
|
-
### Latest release: 1.
|
|
111
|
+
### Latest release: 1.17.0
|
|
112
112
|
|
|
113
|
-
The published v1.16.
|
|
113
|
+
The published v1.16.4 npm artifact contains **381 core tools**, 379 in its default profile,
|
|
114
114
|
and 474 with a compatible UXP connection. The development catalog above can include
|
|
115
115
|
unreleased work. See the [versioned facts and package provenance](https://premiere-pro-mcp.com/facts/).
|
|
116
116
|
|
|
@@ -160,7 +160,7 @@ if the connection is unavailable.
|
|
|
160
160
|
local Premiere processes. See the generated [supported action catalog](docs/supported-actions.md)
|
|
161
161
|
for individual capability and verification contracts.
|
|
162
162
|
|
|
163
|
-
See the [v1.
|
|
163
|
+
See the [v1.17.0 release notes](https://github.com/leancoderkavy/premiere-pro-mcp/releases/tag/v1.17.0)
|
|
164
164
|
for complete details. Live installation in Premiere Pro still requires host verification.
|
|
165
165
|
|
|
166
166
|
### Current MCP protocol support
|
|
@@ -208,7 +208,7 @@ their bins, media rules, and organization rules before a facility uses one.
|
|
|
208
208
|
> ### Install the published package (verify the name)
|
|
209
209
|
>
|
|
210
210
|
> ```bash
|
|
211
|
-
> npm i -g premiere-pro-mcp@1.
|
|
211
|
+
> npm i -g premiere-pro-mcp@1.17.0
|
|
212
212
|
> ```
|
|
213
213
|
>
|
|
214
214
|
> This repository publishes only **`premiere-pro-mcp`**. A differently named package (`adobe-premiere-pro-mcp`) may also declare a `premiere-pro-mcp` executable. Before configuring a client, confirm:
|
|
@@ -216,7 +216,7 @@ their bins, media rules, and organization rules before a facility uses one.
|
|
|
216
216
|
> | Check | Expected |
|
|
217
217
|
> | --- | --- |
|
|
218
218
|
> | Package name | `premiere-pro-mcp` (not `adobe-premiere-pro-mcp`) |
|
|
219
|
-
> | Version | `1.
|
|
219
|
+
> | Version | `1.17.0` |
|
|
220
220
|
> | Homepage / repo | https://premiere-pro-mcp.com/ · https://github.com/leancoderkavy/premiere-pro-mcp |
|
|
221
221
|
>
|
|
222
222
|
> ```bash
|
|
@@ -229,9 +229,9 @@ their bins, media rules, and organization rules before a facility uses one.
|
|
|
229
229
|
|
|
230
230
|
### Easiest supported path: Claude Desktop
|
|
231
231
|
|
|
232
|
-
1. Download the current [Claude Desktop bundle (`.mcpb`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.
|
|
232
|
+
1. Download the current [Claude Desktop bundle (`.mcpb`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.17.0/premiere-pro-mcp-1.17.0.mcpb).
|
|
233
233
|
2. In Claude Desktop, open **Settings > Extensions > Advanced settings > Install Extension**, select the downloaded bundle, and restart Claude Desktop.
|
|
234
|
-
3. Download the separate [signed Premiere connector (`.zxp`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.
|
|
234
|
+
3. Download the separate [signed Premiere connector (`.zxp`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.17.0/MCPBridgeCEP.zxp). Open it with your trusted ZXP installer. If your computer has no ZXP installer, use the npm connector installer in **Advanced setup** below.
|
|
235
235
|
4. Restart Premiere, open a project, then open **Window > Extensions > MCP for Adobe Premiere Pro**.
|
|
236
236
|
5. In Claude, enter: `Safely check my Premiere connection with verify_premiere_connection. Make no changes.`
|
|
237
237
|
|
|
@@ -488,6 +488,9 @@ Add to `.cursor/mcp.json` in your project or global config:
|
|
|
488
488
|
}
|
|
489
489
|
```
|
|
490
490
|
|
|
491
|
+
After the server is enabled, select Claude Fable 5.1 in Cursor when you want a
|
|
492
|
+
longer-horizon session. See [Claude Fable 5.1 workflows](docs/claude-fable-5-1.md).
|
|
493
|
+
|
|
491
494
|
</details>
|
|
492
495
|
|
|
493
496
|
<details>
|
|
@@ -528,11 +531,11 @@ From a clone of this repository:
|
|
|
528
531
|
```bash
|
|
529
532
|
codex plugin marketplace add .
|
|
530
533
|
codex plugin add premiere-pro@premiere-pro-mcp
|
|
531
|
-
npx -y premiere-pro-mcp@1.
|
|
534
|
+
npx -y premiere-pro-mcp@1.16.4 --install-cep
|
|
532
535
|
```
|
|
533
536
|
|
|
534
537
|
Restart Premiere Pro and start a new Codex session after installation. The plugin
|
|
535
|
-
launches `premiere-pro-mcp@1.
|
|
538
|
+
launches `premiere-pro-mcp@1.16.4` through `npx`; the separate CEP installation is
|
|
536
539
|
required because the MCP server communicates with the running Premiere host through
|
|
537
540
|
the local bridge.
|
|
538
541
|
|
|
@@ -563,7 +566,7 @@ For Claude Code, add this repository as a marketplace and install the plugin:
|
|
|
563
566
|
Then install the Premiere bridge and start a new Claude Code session:
|
|
564
567
|
|
|
565
568
|
```bash
|
|
566
|
-
npx -y premiere-pro-mcp@1.
|
|
569
|
+
npx -y premiere-pro-mcp@1.16.4 --install-cep
|
|
567
570
|
```
|
|
568
571
|
|
|
569
572
|
The Claude Code package lives in
|
|
@@ -581,6 +584,26 @@ Install the resulting file from `artifacts/` through **Settings > Extensions >
|
|
|
581
584
|
Advanced settings > Install Extension**. The Premiere CEP bridge must still be
|
|
582
585
|
installed separately.
|
|
583
586
|
|
|
587
|
+
### Claude Fable 5.1
|
|
588
|
+
|
|
589
|
+
Use Cursor, Claude Desktop, or Claude Code with Claude Fable 5.1
|
|
590
|
+
(`claude-fable-5-1`) when your account has access. Model selection belongs to the
|
|
591
|
+
client; this server does not run an Anthropic model. Fable 5.1 is optional:
|
|
592
|
+
other Claude models can call the same MCP tools. If Cursor Privacy Mode or an
|
|
593
|
+
Enterprise plan is enabled, an admin must approve Anthropic's Fable data-retention
|
|
594
|
+
policy before the model is available.
|
|
595
|
+
|
|
596
|
+
The server supplies session-aware workflow instructions and bounded tool discovery:
|
|
597
|
+
call `get_capabilities` with `{"tool_query":"transcript","tool_limit":10}` to
|
|
598
|
+
find relevant operations, their descriptions, and backend requirements. Keep
|
|
599
|
+
Premiere mutations serialized even in a long Fable 5.1 session. Image review of
|
|
600
|
+
returned frames is not playback or delivery proof.
|
|
601
|
+
|
|
602
|
+
See [Claude Fable 5.1 workflows](docs/claude-fable-5-1.md) for connection order,
|
|
603
|
+
privacy boundaries, evidence retrieval, Cursor's Opus fallback, and the division
|
|
604
|
+
between MCP and client capabilities. The public walkthrough is
|
|
605
|
+
[How to Use Claude Fable 5.1 with MCP for Adobe Premiere Pro](https://premiere-pro-mcp.com/blog/claude-fable-5-1-premiere-pro-mcp/).
|
|
606
|
+
|
|
584
607
|
### Windows and macOS capability coverage
|
|
585
608
|
|
|
586
609
|
| Surface | Windows | macOS | Verification boundary |
|
|
@@ -859,7 +882,7 @@ reports revision-bound notes, VFX state, change impact and turnover exceptions.
|
|
|
859
882
|
It performs local inspection; host edits and exports use separate guarded tools.
|
|
860
883
|
See [usage, example and remaining execution adapters](docs/film-editorial-workflows.md).
|
|
861
884
|
|
|
862
|
-
## Tools (
|
|
885
|
+
## Tools (384 core total; 382 under the default profile; 477 with a connected UXP bridge)
|
|
863
886
|
|
|
864
887
|
The [complete supported-actions catalog](docs/supported-actions.md) lists every
|
|
865
888
|
registered core tool, the two tools restricted behind explicit `unsafe-script`
|
|
@@ -899,7 +922,7 @@ the tables below are a shorter workflow-oriented overview.
|
|
|
899
922
|
| `set_scratch_disk_path` | Configure scratch disks |
|
|
900
923
|
| `consolidate_and_transfer` | Project Manager consolidation |
|
|
901
924
|
|
|
902
|
-
### Timeline & Editing (
|
|
925
|
+
### Timeline & Editing (11 + 27 advanced)
|
|
903
926
|
|
|
904
927
|
| Tool | Description |
|
|
905
928
|
| :--- | :---------- |
|
|
@@ -907,8 +930,9 @@ the tables below are a shorter workflow-oriented overview.
|
|
|
907
930
|
| `ripple_delete` | Remove clip and close gap (QE) |
|
|
908
931
|
| `roll_edit` / `slide_edit` / `slip_edit` | Professional trim modes (QE) |
|
|
909
932
|
| `move_clip_to_track` | Move between tracks (QE) |
|
|
910
|
-
| `reverse_clip` / `speed_change` / `set_clip_speed_qe` | Unavailable: Premiere
|
|
933
|
+
| `reverse_clip` / `speed_change` / `set_clip_speed_qe` | Unavailable: Premiere's documented ExtendScript and UXP APIs have no setter for a timeline clip's speed or direction; use `set_clip_duration` for timeline length |
|
|
911
934
|
| `split_clip` / `trim_clip` / `move_clip` | Basic edits; trim verifies source points and visible timeline edges |
|
|
935
|
+
| `set_clip_duration` | Set a clip's timeline duration or absolute end (extends still images); refuses next-clip overlaps and restores the original end if Premiere clamps |
|
|
912
936
|
| `set_clip_properties` | Opacity, scale, rotation, position (speed requests fail before mutation) |
|
|
913
937
|
| `link_selection` / `unlink_selection` | Link/unlink A/V |
|
|
914
938
|
|
|
@@ -923,9 +947,10 @@ the tables below are a shorter workflow-oriented overview.
|
|
|
923
947
|
|
|
924
948
|
> **Speed, caption, and visual-keyframe boundaries:** Premiere Pro 26.3 may reflect legacy QE
|
|
925
949
|
> speed/direction methods, but exposes no supported scripting setter or Time Remapping component
|
|
926
|
-
> for timeline-clip speed or direction. `
|
|
950
|
+
> for timeline-clip speed or direction (documented UXP through 26.3 has only `getSpeed` /
|
|
951
|
+
> `isSpeedReversed`). `reverse_clip`,
|
|
927
952
|
> `speed_change`, `set_clip_speed_qe`, and `set_clip_properties` with `speed` now stop before host mutation;
|
|
928
|
-
> use the Speed/Duration UI or pre-
|
|
953
|
+
> use `set_clip_duration` to change timeline length, or the Speed/Duration UI or pre-rendered media to retime. `add_text_overlay` likewise stops
|
|
929
954
|
> before mutation because a raw-text-to-caption API is not exposed; import an `.srt`/`.vtt`
|
|
930
955
|
> and use `create_caption_track`, or use a MOGRT/PNG overlay. Keyframe and caption-track
|
|
931
956
|
> responses can prove parameter/structure readback only—not rendered pixels—so verify playback
|
|
@@ -950,6 +975,15 @@ cut boundaries. Its QE path cannot prove effect-keyframe redistribution, so a su
|
|
|
950
975
|
labels those semantics `unverified`. These are CEP contract checks, not validation in a licensed
|
|
951
976
|
Premiere Pro 26.x host.
|
|
952
977
|
|
|
978
|
+
`set_clip_duration` changes a placed clip's timeline length without touching source in/out
|
|
979
|
+
directly: pass exactly one of `duration_seconds` (from the current start) or `end_seconds`
|
|
980
|
+
(absolute timeline end). It writes the documented `TrackItem.end` as a tick-based `Time`, refuses
|
|
981
|
+
an end that would overlap the next clip on the same track, applies the same `keyframe_policy`
|
|
982
|
+
guard as `trim_clip` when shortening, and reads start/end back. If Premiere clamps the end (for
|
|
983
|
+
example, video media with no remaining handle, or a still whose project item has in/out points),
|
|
984
|
+
the original end is restored and the tool returns an error. Linked audio/video partners are not
|
|
985
|
+
adjusted. This is a CEP contract check, not validation in a licensed Premiere Pro host.
|
|
986
|
+
|
|
953
987
|
### Effects & Color (8)
|
|
954
988
|
|
|
955
989
|
| Tool | Description |
|
|
@@ -1013,12 +1047,13 @@ presenting UI-only operations as available tools.
|
|
|
1013
1047
|
| `play_timeline` / `stop_playback` | Playback control (QE) |
|
|
1014
1048
|
| `play_source_monitor` | Play in source monitor |
|
|
1015
1049
|
|
|
1016
|
-
### Selection & Clipboard (7 +
|
|
1050
|
+
### Selection & Clipboard (7 + 7)
|
|
1017
1051
|
|
|
1018
1052
|
| Tool | Description |
|
|
1019
1053
|
| :--- | :---------- |
|
|
1020
1054
|
| `select_clips_by_name` / `select_clips_in_range` | Smart selection |
|
|
1021
1055
|
| `copy_effects_between_clips` | Copy effects via QE |
|
|
1056
|
+
| `paste_clip_attributes` | Paste Attributes: effect stack, values, and keyframes with per-property readback; masks and differing Blend Mode are reported, not copied |
|
|
1022
1057
|
| `batch_apply_effect` | Apply effect to multiple clips |
|
|
1023
1058
|
| `set_blend_mode` | 27 blend modes |
|
|
1024
1059
|
|
|
@@ -1087,6 +1122,12 @@ evidence behind these tools and their verification boundaries.
|
|
|
1087
1122
|
| `plan_speaker_checkerboard` | Per-speaker segments, split points, and track assignments for checkerboarded dialogue |
|
|
1088
1123
|
| `plan_active_speaker_reframe` | Active-speaker vertical reframe keyframes, or static stacked / side-by-side two-speaker layouts |
|
|
1089
1124
|
|
|
1125
|
+
### Mask Fit (1)
|
|
1126
|
+
|
|
1127
|
+
| Tool | Description |
|
|
1128
|
+
| :--- | :---------- |
|
|
1129
|
+
| `compute_mask_fit_motion` | Inspect only: Motion Scale and Position that place a still's subject box (source-image fractions) inside an existing Rounded Crop, Crop, or similar mask, with the math inputs and warnings. Apply with `set_clip_scale` / `set_clip_position`, then check with `capture_frame`. No image analysis. |
|
|
1130
|
+
|
|
1090
1131
|
### Rhythm Plans (2)
|
|
1091
1132
|
|
|
1092
1133
|
| Tool | Description |
|
|
@@ -1147,13 +1188,13 @@ Track targeting, batch operations, markers, audio levels, motion/transform, meta
|
|
|
1147
1188
|
|
|
1148
1189
|
## MCP Resources
|
|
1149
1190
|
|
|
1150
|
-
The server exposes fourteen LLM context resources and
|
|
1191
|
+
The server exposes fourteen LLM context resources and nineteen workflow prompts:
|
|
1151
1192
|
|
|
1152
1193
|
| Resource URI | Description |
|
|
1153
1194
|
| :----------- | :---------- |
|
|
1154
|
-
| `config://premiere-instructions` | Best practices: workflow order,
|
|
1195
|
+
| `config://premiere-instructions` | Best practices: workflow order, metadata layers, timeline rules, error handling |
|
|
1155
1196
|
| `config://extendscript-reference` | Complete ExtendScript API reference for writing custom scripts |
|
|
1156
|
-
| `config://premiere-workflows` | Machine-readable catalog for rough cuts, dialogue cleanup, captions, and delivery |
|
|
1197
|
+
| `config://premiere-workflows` | Machine-readable catalog for rough cuts, metadata review, dialogue cleanup, captions, and delivery |
|
|
1157
1198
|
| `config://premiere-project-context` | Revisioned local project-context indexing and retrieval workflow |
|
|
1158
1199
|
| `premiere://project/info` | Fresh, path-redacted current-project and active-sequence summary |
|
|
1159
1200
|
| `premiere://project/sequences` | Bounded sequence inventory with stable Premiere IDs |
|
|
@@ -1164,7 +1205,7 @@ The server exposes fourteen LLM context resources and eleven workflow prompts:
|
|
|
1164
1205
|
| `premiere://effects/applied` | Bounded active-timeline component inventory |
|
|
1165
1206
|
| `premiere://transitions/available` | Bounded video/audio transition catalog for planning |
|
|
1166
1207
|
| `premiere://export/presets` | Bounded export-preset names and formats, without native paths |
|
|
1167
|
-
| `premiere://project/metadata` |
|
|
1208
|
+
| `premiere://project/metadata` | Path-redacted project and active-timeline summary — not XMP or Project Metadata XML |
|
|
1168
1209
|
|
|
1169
1210
|
The ten `premiere://` snapshots are read-only CEP bridge requests. They include a
|
|
1170
1211
|
revision token for stale-state detection and omit native media, project-tree, preset,
|
|
@@ -1327,7 +1368,7 @@ premiere-pro-mcp/
|
|
|
1327
1368
|
├── src/
|
|
1328
1369
|
│ ├── index.ts # Entry point — stdio transport setup
|
|
1329
1370
|
│ ├── http-server.ts # Entry point — HTTP/SSE transport (Fly.io / remote)
|
|
1330
|
-
│ ├── server.ts # MCP server — registers
|
|
1371
|
+
│ ├── server.ts # MCP server — registers 384 tools, filtered by authority profile
|
|
1331
1372
|
│ ├── bridge/
|
|
1332
1373
|
│ │ ├── file-bridge.ts # File-based IPC (write .jsx, poll .json)
|
|
1333
1374
|
│ │ └── script-builder.ts # ExtendScript generator with ES3 helpers
|
|
@@ -1377,6 +1418,7 @@ premiere-pro-mcp/
|
|
|
1377
1418
|
├── Dockerfile # Multi-stage Docker build for Fly.io
|
|
1378
1419
|
├── fly.toml # Fly.io deployment config
|
|
1379
1420
|
├── RESEARCH.md # API research and implementation status
|
|
1421
|
+
├── AGENTS.md # IDE / coding-agent map
|
|
1380
1422
|
├── CONTRIBUTING.md # Contribution guidelines
|
|
1381
1423
|
├── CHANGELOG.md # Version history
|
|
1382
1424
|
└── LICENSE # MIT License
|
|
@@ -1433,7 +1475,9 @@ by default. Enable them only by setting
|
|
|
1433
1475
|
directories writable by group/other users are refused by both the server and panels;
|
|
1434
1476
|
tightening permissions alone cannot make previously staged commands trustworthy.
|
|
1435
1477
|
On Windows, only the current user, SYSTEM and Administrators may have write access,
|
|
1436
|
-
including inherited grants.
|
|
1478
|
+
including inherited grants. Windows capability and app-container SIDs (`S-1-15-*`)
|
|
1479
|
+
are ignored: they are not logon principals and appear as inherited FullControl on
|
|
1480
|
+
stock `%LOCALAPPDATA%` paths. ACL inspection failures also stop startup. Ancestors must
|
|
1437
1481
|
also prevent other users from replacing the bridge path; a private child inside a
|
|
1438
1482
|
broadly writable parent is insufficient (POSIX sticky temp directories are supported).
|
|
1439
1483
|
Choose a new directory under a private user-owned location if the connector rejects
|
|
@@ -1471,6 +1515,8 @@ Premiere Pro; its npm package is `premiere-pro-mcp`.
|
|
|
1471
1515
|
Install the [Claude Desktop bundle](#easiest-supported-path-claude-desktop), install
|
|
1472
1516
|
the separate signed Premiere connector, restart Premiere, then ask Claude to run
|
|
1473
1517
|
`verify_premiere_connection` with no changes. That first prompt is read-only.
|
|
1518
|
+
Claude Fable 5.1 is an optional client model for Cursor, Claude Desktop, or Claude
|
|
1519
|
+
Code; see [Claude Fable 5.1 workflows](docs/claude-fable-5-1.md).
|
|
1474
1520
|
|
|
1475
1521
|
**Where is the GitHub repository?**
|
|
1476
1522
|
<https://github.com/leancoderkavy/premiere-pro-mcp>. Releases, the signed `.zxp`
|
|
@@ -1596,6 +1642,7 @@ buy prioritized support, roadmap influence, or any claim about unverified host b
|
|
|
1596
1642
|
## Contributing
|
|
1597
1643
|
|
|
1598
1644
|
Contributions are welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
|
1645
|
+
AI agents and IDE assistants should read [AGENTS.md](AGENTS.md).
|
|
1599
1646
|
|
|
1600
1647
|
The evidence-backed [next improvement pull-request roadmap](docs/next-improvement-pr-roadmap.md)
|
|
1601
1648
|
breaks the proposed feature, protocol, reliability, and performance work into ten
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<ExtensionManifest Version="7.0" ExtensionBundleId="com.mcp.aftereffects.bridge" ExtensionBundleVersion="1.
|
|
2
|
+
<ExtensionManifest Version="7.0" ExtensionBundleId="com.mcp.aftereffects.bridge" ExtensionBundleVersion="1.17.0" ExtensionBundleName="MCP for Adobe After Effects">
|
|
3
3
|
<ExtensionList>
|
|
4
|
-
<Extension Id="com.mcp.aftereffects.bridge.panel" Version="1.
|
|
4
|
+
<Extension Id="com.mcp.aftereffects.bridge.panel" Version="1.17.0"/>
|
|
5
5
|
</ExtensionList>
|
|
6
6
|
<ExecutionEnvironment>
|
|
7
7
|
<HostList>
|
|
@@ -23,12 +23,12 @@
|
|
|
23
23
|
' $ancestorOwner = $ancestorAcl.GetOwner([System.Security.Principal.SecurityIdentifier]).Value',
|
|
24
24
|
' if ($ancestorOwner -notin $trustedAncestors) { $unsafeAncestors += [pscustomobject]@{ sid = $ancestorOwner; path = $ancestor.FullName; reason = "owner" } }',
|
|
25
25
|
' $unsafeAncestors += @($ancestorAcl.GetAccessRules($true, $true, [System.Security.Principal.SecurityIdentifier]) | Where-Object {',
|
|
26
|
-
' $_.AccessControlType -eq [System.Security.AccessControl.AccessControlType]::Allow -and (($_.PropagationFlags -band [System.Security.AccessControl.PropagationFlags]::InheritOnly) -eq 0) -and (($_.FileSystemRights -band $replacement) -ne 0) -and $_.IdentityReference.Value -notin $trustedAncestors',
|
|
26
|
+
' $_.AccessControlType -eq [System.Security.AccessControl.AccessControlType]::Allow -and (($_.PropagationFlags -band [System.Security.AccessControl.PropagationFlags]::InheritOnly) -eq 0) -and (($_.FileSystemRights -band $replacement) -ne 0) -and $_.IdentityReference.Value -notin $trustedAncestors -and $_.IdentityReference.Value -notlike "S-1-15-*"',
|
|
27
27
|
' } | ForEach-Object { [pscustomobject]@{ sid = $_.IdentityReference.Value; path = $ancestor.FullName; reason = "replacement_rights" } })',
|
|
28
28
|
' $ancestor = $ancestor.Parent',
|
|
29
29
|
'}',
|
|
30
30
|
'if ($initialize) {',
|
|
31
|
-
' if ($unsafeAncestors.Count -ne 0) { throw "Bridge directory ancestry is unsafe" }',
|
|
31
|
+
' if ($unsafeAncestors.Count -ne 0) { throw ("Bridge directory ancestry is unsafe: " + (($unsafeAncestors | ForEach-Object { "{0} ({1}: {2})" -f $_.path, $_.reason, $_.sid }) -join "; ")) }',
|
|
32
32
|
' $acl.SetAccessRuleProtection($true, $false)',
|
|
33
33
|
' $inheritance = [System.Security.AccessControl.InheritanceFlags]::ContainerInherit -bor [System.Security.AccessControl.InheritanceFlags]::ObjectInherit',
|
|
34
34
|
' $propagation = [System.Security.AccessControl.PropagationFlags]::None',
|
|
@@ -46,11 +46,17 @@
|
|
|
46
46
|
'$unsafe = @($acl.GetAccessRules($true, $true, [System.Security.Principal.SecurityIdentifier]) | Where-Object {',
|
|
47
47
|
' $_.AccessControlType -eq [System.Security.AccessControl.AccessControlType]::Allow -and (($_.FileSystemRights -band $mutating) -ne 0)',
|
|
48
48
|
'} | ForEach-Object {',
|
|
49
|
-
' if ($_.IdentityReference.Value -notin $trusted) { [pscustomobject]@{ sid = $_.IdentityReference.Value; isInherited = [bool]$_.IsInherited } }',
|
|
49
|
+
' if ($_.IdentityReference.Value -notin $trusted -and $_.IdentityReference.Value -notlike "S-1-15-*") { [pscustomobject]@{ sid = $_.IdentityReference.Value; isInherited = [bool]$_.IsInherited } }',
|
|
50
50
|
'})',
|
|
51
51
|
'[pscustomobject]@{ ownerSid = $owner; currentUserSid = $current; unsafeWriteAces = $unsafe; unsafeAncestorEntries = $unsafeAncestors } | ConvertTo-Json -Compress',
|
|
52
52
|
].join("\n");
|
|
53
53
|
|
|
54
|
+
// Capability (S-1-15-3-*) and app-container package (S-1-15-2-*) SIDs are not
|
|
55
|
+
// logon principals; stock profiles inherit one with FullControl on AppData (#581).
|
|
56
|
+
function isWindowsCapabilitySid(sid) {
|
|
57
|
+
return typeof sid === "string" && sid.toUpperCase().indexOf("S-1-15-") === 0;
|
|
58
|
+
}
|
|
59
|
+
|
|
54
60
|
function createBridgeDirectorySecurity(runtime) {
|
|
55
61
|
if (!runtime || !runtime.fs || !runtime.path) {
|
|
56
62
|
throw new Error("Bridge directory security requires filesystem and path runtimes");
|
|
@@ -170,26 +176,29 @@
|
|
|
170
176
|
if (!acl || !acl.ownerSid || !acl.currentUserSid || acl.ownerSid !== acl.currentUserSid) {
|
|
171
177
|
throw new Error("Bridge directory is not owned by the current Windows user: " + resolved);
|
|
172
178
|
}
|
|
173
|
-
var unsafe = Array.isArray(acl.unsafeWriteAces)
|
|
179
|
+
var unsafe = (Array.isArray(acl.unsafeWriteAces)
|
|
174
180
|
? acl.unsafeWriteAces
|
|
175
181
|
: acl.unsafeWriteAces
|
|
176
182
|
? [acl.unsafeWriteAces]
|
|
177
|
-
: [];
|
|
183
|
+
: []).filter(function (ace) { return !isWindowsCapabilitySid(ace && ace.sid); });
|
|
178
184
|
if (unsafe.length > 0) {
|
|
179
185
|
var unsafeSids = unsafe.map(function (ace) { return ace && ace.sid ? ace.sid : "unknown"; });
|
|
180
186
|
throw new Error(
|
|
181
187
|
"Bridge directory grants write access to untrusted identities (" + unsafeSids.join(", ") + "): " + resolved
|
|
182
188
|
);
|
|
183
189
|
}
|
|
184
|
-
var unsafeAncestors = Array.isArray(acl.unsafeAncestorEntries)
|
|
190
|
+
var unsafeAncestors = (Array.isArray(acl.unsafeAncestorEntries)
|
|
185
191
|
? acl.unsafeAncestorEntries
|
|
186
192
|
: acl.unsafeAncestorEntries
|
|
187
193
|
? [acl.unsafeAncestorEntries]
|
|
188
|
-
: []
|
|
194
|
+
: []).filter(function (entry) {
|
|
195
|
+
return !entry || entry.reason !== "replacement_rights" || !isWindowsCapabilitySid(entry.sid);
|
|
196
|
+
});
|
|
189
197
|
if (unsafeAncestors.length > 0) {
|
|
190
198
|
throw new Error(
|
|
191
|
-
"Bridge path has a replaceable ancestor " + unsafeAncestors
|
|
192
|
-
|
|
199
|
+
"Bridge path has a replaceable ancestor " + unsafeAncestors.map(function (entry) {
|
|
200
|
+
return (entry && entry.path) + " (" + (entry && entry.reason) + ": " + (entry && entry.sid ? entry.sid : "none") + ")";
|
|
201
|
+
}).join("; ")
|
|
193
202
|
);
|
|
194
203
|
}
|
|
195
204
|
if (newlyCreated && fs.readdirSync(resolved).length > 0) {
|
|
Binary file
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<ExtensionManifest Version="7.0" ExtensionBundleId="com.mcp.premiere.bridge" ExtensionBundleVersion="1.
|
|
2
|
+
<ExtensionManifest Version="7.0" ExtensionBundleId="com.mcp.premiere.bridge" ExtensionBundleVersion="1.17.0" ExtensionBundleName="MCP for Adobe Premiere Pro">
|
|
3
3
|
<ExtensionList>
|
|
4
|
-
<Extension Id="com.mcp.premiere.bridge.panel" Version="1.
|
|
5
|
-
<Extension Id="com.mcp.premiere.bridge.headless" Version="1.
|
|
4
|
+
<Extension Id="com.mcp.premiere.bridge.panel" Version="1.17.0"/>
|
|
5
|
+
<Extension Id="com.mcp.premiere.bridge.headless" Version="1.17.0"/>
|
|
6
6
|
</ExtensionList>
|
|
7
7
|
<ExecutionEnvironment>
|
|
8
8
|
<HostList>
|
|
@@ -23,12 +23,12 @@
|
|
|
23
23
|
' $ancestorOwner = $ancestorAcl.GetOwner([System.Security.Principal.SecurityIdentifier]).Value',
|
|
24
24
|
' if ($ancestorOwner -notin $trustedAncestors) { $unsafeAncestors += [pscustomobject]@{ sid = $ancestorOwner; path = $ancestor.FullName; reason = "owner" } }',
|
|
25
25
|
' $unsafeAncestors += @($ancestorAcl.GetAccessRules($true, $true, [System.Security.Principal.SecurityIdentifier]) | Where-Object {',
|
|
26
|
-
' $_.AccessControlType -eq [System.Security.AccessControl.AccessControlType]::Allow -and (($_.PropagationFlags -band [System.Security.AccessControl.PropagationFlags]::InheritOnly) -eq 0) -and (($_.FileSystemRights -band $replacement) -ne 0) -and $_.IdentityReference.Value -notin $trustedAncestors',
|
|
26
|
+
' $_.AccessControlType -eq [System.Security.AccessControl.AccessControlType]::Allow -and (($_.PropagationFlags -band [System.Security.AccessControl.PropagationFlags]::InheritOnly) -eq 0) -and (($_.FileSystemRights -band $replacement) -ne 0) -and $_.IdentityReference.Value -notin $trustedAncestors -and $_.IdentityReference.Value -notlike "S-1-15-*"',
|
|
27
27
|
' } | ForEach-Object { [pscustomobject]@{ sid = $_.IdentityReference.Value; path = $ancestor.FullName; reason = "replacement_rights" } })',
|
|
28
28
|
' $ancestor = $ancestor.Parent',
|
|
29
29
|
'}',
|
|
30
30
|
'if ($initialize) {',
|
|
31
|
-
' if ($unsafeAncestors.Count -ne 0) { throw "Bridge directory ancestry is unsafe" }',
|
|
31
|
+
' if ($unsafeAncestors.Count -ne 0) { throw ("Bridge directory ancestry is unsafe: " + (($unsafeAncestors | ForEach-Object { "{0} ({1}: {2})" -f $_.path, $_.reason, $_.sid }) -join "; ")) }',
|
|
32
32
|
' $acl.SetAccessRuleProtection($true, $false)',
|
|
33
33
|
' $inheritance = [System.Security.AccessControl.InheritanceFlags]::ContainerInherit -bor [System.Security.AccessControl.InheritanceFlags]::ObjectInherit',
|
|
34
34
|
' $propagation = [System.Security.AccessControl.PropagationFlags]::None',
|
|
@@ -46,11 +46,17 @@
|
|
|
46
46
|
'$unsafe = @($acl.GetAccessRules($true, $true, [System.Security.Principal.SecurityIdentifier]) | Where-Object {',
|
|
47
47
|
' $_.AccessControlType -eq [System.Security.AccessControl.AccessControlType]::Allow -and (($_.FileSystemRights -band $mutating) -ne 0)',
|
|
48
48
|
'} | ForEach-Object {',
|
|
49
|
-
' if ($_.IdentityReference.Value -notin $trusted) { [pscustomobject]@{ sid = $_.IdentityReference.Value; isInherited = [bool]$_.IsInherited } }',
|
|
49
|
+
' if ($_.IdentityReference.Value -notin $trusted -and $_.IdentityReference.Value -notlike "S-1-15-*") { [pscustomobject]@{ sid = $_.IdentityReference.Value; isInherited = [bool]$_.IsInherited } }',
|
|
50
50
|
'})',
|
|
51
51
|
'[pscustomobject]@{ ownerSid = $owner; currentUserSid = $current; unsafeWriteAces = $unsafe; unsafeAncestorEntries = $unsafeAncestors } | ConvertTo-Json -Compress',
|
|
52
52
|
].join("\n");
|
|
53
53
|
|
|
54
|
+
// Capability (S-1-15-3-*) and app-container package (S-1-15-2-*) SIDs are not
|
|
55
|
+
// logon principals; stock profiles inherit one with FullControl on AppData (#581).
|
|
56
|
+
function isWindowsCapabilitySid(sid) {
|
|
57
|
+
return typeof sid === "string" && sid.toUpperCase().indexOf("S-1-15-") === 0;
|
|
58
|
+
}
|
|
59
|
+
|
|
54
60
|
function createBridgeDirectorySecurity(runtime) {
|
|
55
61
|
if (!runtime || !runtime.fs || !runtime.path) {
|
|
56
62
|
throw new Error("Bridge directory security requires filesystem and path runtimes");
|
|
@@ -170,26 +176,29 @@
|
|
|
170
176
|
if (!acl || !acl.ownerSid || !acl.currentUserSid || acl.ownerSid !== acl.currentUserSid) {
|
|
171
177
|
throw new Error("Bridge directory is not owned by the current Windows user: " + resolved);
|
|
172
178
|
}
|
|
173
|
-
var unsafe = Array.isArray(acl.unsafeWriteAces)
|
|
179
|
+
var unsafe = (Array.isArray(acl.unsafeWriteAces)
|
|
174
180
|
? acl.unsafeWriteAces
|
|
175
181
|
: acl.unsafeWriteAces
|
|
176
182
|
? [acl.unsafeWriteAces]
|
|
177
|
-
: [];
|
|
183
|
+
: []).filter(function (ace) { return !isWindowsCapabilitySid(ace && ace.sid); });
|
|
178
184
|
if (unsafe.length > 0) {
|
|
179
185
|
var unsafeSids = unsafe.map(function (ace) { return ace && ace.sid ? ace.sid : "unknown"; });
|
|
180
186
|
throw new Error(
|
|
181
187
|
"Bridge directory grants write access to untrusted identities (" + unsafeSids.join(", ") + "): " + resolved
|
|
182
188
|
);
|
|
183
189
|
}
|
|
184
|
-
var unsafeAncestors = Array.isArray(acl.unsafeAncestorEntries)
|
|
190
|
+
var unsafeAncestors = (Array.isArray(acl.unsafeAncestorEntries)
|
|
185
191
|
? acl.unsafeAncestorEntries
|
|
186
192
|
: acl.unsafeAncestorEntries
|
|
187
193
|
? [acl.unsafeAncestorEntries]
|
|
188
|
-
: []
|
|
194
|
+
: []).filter(function (entry) {
|
|
195
|
+
return !entry || entry.reason !== "replacement_rights" || !isWindowsCapabilitySid(entry.sid);
|
|
196
|
+
});
|
|
189
197
|
if (unsafeAncestors.length > 0) {
|
|
190
198
|
throw new Error(
|
|
191
|
-
"Bridge path has a replaceable ancestor " + unsafeAncestors
|
|
192
|
-
|
|
199
|
+
"Bridge path has a replaceable ancestor " + unsafeAncestors.map(function (entry) {
|
|
200
|
+
return (entry && entry.path) + " (" + (entry && entry.reason) + ": " + (entry && entry.sid ? entry.sid : "none") + ")";
|
|
201
|
+
}).join("; ")
|
|
193
202
|
);
|
|
194
203
|
}
|
|
195
204
|
if (newlyCreated && fs.readdirSync(resolved).length > 0) {
|
package/cep-plugin/index.html
CHANGED
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
<section class="update-section" aria-live="polite">
|
|
82
82
|
<div class="update-copy">
|
|
83
83
|
<span class="section-label">MCP updates</span>
|
|
84
|
-
<strong id="updateTitle">Version 1.
|
|
84
|
+
<strong id="updateTitle">Version 1.17.0</strong>
|
|
85
85
|
<span id="updateDetail">Checking the global MCP server and connector release…</span>
|
|
86
86
|
</div>
|
|
87
87
|
<button id="btnUpdate" class="button button-update" onclick="handleUpdateClick()" type="button" aria-describedby="updateDetail" disabled>
|
package/cep-plugin/updater.cjs
CHANGED