
Premiere Pro MCP Server
io.github.zachshallbetterPublished by GitHub account zachshallbetterv0.1.0Updated Oct 27, 2026
Drive Adobe Premiere Pro from any MCP client: projects, sequences, timeline edits, effects, export.
Overview
Local MCP server that drives Adobe Premiere Pro through a UXP plugin: projects, sequences, timeline edits, effects, transcripts and export.
- What you can do
- Manage projects and media: create, open, save and close projects, list and search items, import media, create bins, relink and modify footage
- Work with sequences and the timeline: create and duplicate sequences, change settings, insert, trim, move and remove clips, manage tracks
- Edit markers, source monitor, effects, keyframes, colour and audio: apply and remove effects and transitions, set Lumetri and LUTs, add fades, adjust volume
- Handle graphics, captions and transcripts: insert Motion Graphics templates, import caption files, transcribe clips and export transcripts
- Export and metadata: export sequences, frames and timelines, queue Media Encoder jobs, read and write project and XMP…
- When to use it
- Useful when you want an assistant to script repetitive Premiere Pro editing work on a desktop machine — assembling rough cuts, applying effects and colour, adding markers and captions, or exporting deliverables — without clicking through the UI. It is a poor fit for production work right now, since the author states it has not been tested against a real Premiere Pro.
- Requirements
- Runs locally via npx (Node.js 18 or later) on macOS or Windows with Premiere Pro 25.6 or later installed. The bundled UXP plugin must be loaded with the UXP Developer Tool and connected from the MCP Bridge panel. Optional environment variables: BRIDGE_TOKEN (or PREMIERE_BRIDGE_TOKEN), PREMIERE_WS_PORT (default 3011), PREMIERE_ALLOWED_DIRS, PREMIERE_SCRIPT_TIMEOUT_MS, PREMIERE_CONNECT_WAIT_MS.
Installation
In SourceWeft
- Open Premiere Pro MCP Server in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
Premiere Pro MCP Server
An MCP server that drives Adobe Premiere Pro: projects and bins, sequences and their settings, timeline edits, markers, effects, keyframes and transitions, transcripts, metadata and export. It runs on the machine where Premiere Pro is installed and talks to it through a small UXP plugin inside Premiere Pro.
Status: untested against a real Premiere Pro. Every script is checked against Premiere Pro's UXP API reference and run against a stand-in DOM in the tests, but none has been run in Premiere Pro yet. Expect rough edges; see What is not certain yet.
Requires Premiere Pro 25.6 or later (macOS or Windows), the UXP Developer Tool to load the plugin, and Node.js 18 or later.
Why a plugin
Premiere Pro has no outside scripting route the other servers in this
repository use: no AppleScript dictionary, no COM object on Windows, and its
/C es.processFile command line works only while Premiere Pro launches,
returns no result and is unsupported. Adobe's supported way to automate
Premiere Pro is a plugin running inside it, and UXP is the plugin platform
Adobe is moving to (generally available from Premiere Pro 25.6; CEP stops
taking new Marketplace submissions in December 2027 and is removed from
December 2029).
A UXP plugin can open WebSocket connections but cannot accept them. So this
server listens on 127.0.0.1 and the plugin connects to it:
There is one process to run: the MCP server is also the WebSocket server.
Install
-
Add the server to your MCP client.
Claude Code:
Any client that reads an
mcpServersblock: -
Load the plugin in Premiere Pro. Until it is published, load it with the UXP Developer Tool:
- In Premiere Pro, turn on Developer Mode in the Plugins settings.
- Install and open the UXP Developer Tool from the Creative Cloud app.
- Add Plugin and choose
uxp/plugin/manifest.jsonfrom this package: in a clone,packages/premiere/uxp/plugin; afternpm install adobe-mcp-premiere,node_modules/adobe-mcp-premiere/uxp/plugin.premiere_statusprints the folder of the copy your server runs from. - Click Load, then open the MCP Bridge panel from Premiere Pro's Window menu.
-
In the panel, set the port (3011 unless you changed
PREMIERE_WS_PORT) and the token (if you setBRIDGE_TOKEN), and click Connect. The panel remembers both and reconnects every 3 s whenever the connection drops, so it connects again by itself after the MCP server restarts. -
Ask your client to run
premiere_status. It shows the port, whether the plugin is connected, the Premiere Pro version and the active project.
Conventions
- Sequences are chosen with
sequence:{ name },{ guid }(fromlist_sequences), or omitted for the active sequence. - Project items are chosen with
item:{ id }(fromlist_project_items),{ path: "Footage/Interviews/a.mov" }(bins from the project root), or{ name }when only one item has that name. - Clips in a sequence are chosen with
clip: { track, trackIndex, clipIndex }, aslist_clipsreports them:trackisvideooraudio, indexes start at 0 (track 0 is V1 or A1). Tools that take several clips takeclips: { items: [...], selected: true }, whereselectedadds the clips selected in the Timeline. Indexes shift after edits; list again. - Effects are chosen by component index and parameter name (or index) from
list_clip_effects. - Times are seconds. Files must be absolute paths inside your home
folder or a directory in
PREMIERE_ALLOWED_DIRS; tools that write a file refuse to replace an existing one unless you passoverwrite: true.
Tools
help({ tool }) describes any tool's parameters.
Most tools work with Premiere Pro 25.6. These need a later version, and say so
in their descriptions: export_timeline (26.2; AAF 26.3), renaming a track
(26.3), export_sequence's startQueue and xmp (26.3), the frame rate in
set_sequence_settings (26.2), close_sequence (26.2), create_subclip (26.3), positioning the Source Monitor (26.3), the work area in set_sequence_times (26.5),
transcribe_clip and clear_media_cache (26.5). On an older version those calls fail with a message
transcribe_clip (26.5), listing languages in list_transcription_languages (26.3; checking given codes works earlier). On an older version those calls fail with a message
naming the version.
Not offered, because Premiere Pro's UXP API has no call for them: linking and unlinking clips, audio transitions, playing the Program Monitor, clip speed, clip gain (other than the Volume effect's Level), editing caption text, track targeting, nesting, menu commands, undo, Lumetri's Auto button, and Lumetri curves (RGB and Hue Saturation curve points are not simple parameter values).
How it stays out of your way
- One undo step per call. Edits are built inside
project.lockedAccessand run withproject.executeTransaction, as Premiere Pro requires from 26.3, so each call is one entry in Edit > Undo. The few steps Premiere Pro does not record (playhead, track mute, work area, saving) say so. - No dialogs. Opening and closing projects turn Premiere Pro's prompts off;
importing passes
suppressUI. - One script at a time. The plugin runs scripts in order, never two at once.
- Timeouts say why. If Premiere Pro does not answer within
PREMIERE_SCRIPT_TIMEOUT_MS(default 120 s), the error says a dialog may be open. Raise it for long exports and transcriptions. - No raw input in scripts. Every value a caller passes is validated and written into the script as a JSON literal.
Configuration
Security
- Local only. The server listens on
127.0.0.1, never on other interfaces. - Token. Without
BRIDGE_TOKEN, any program on this machine can connect to the port as the plugin while none is connected (and would then receive the scripts and could answer them), and can send scripts through the HTTP endpoint described below. SetBRIDGE_TOKENon any machine other people or untrusted software use. With a token, the plugin's first message must carry it (a wrong token closes the connection with code 4001, no message within 5 s with 4002), and the HTTP endpoints requireAuthorization: Bearer <token>. Tokens are compared in constant time. - One plugin. While a plugin is connected, any other connection is closed with code 4009, even with the right token.
- No web pages. HTTP requests that carry an
Originheader (that is, from a browser page) are refused. - What the plugin can do. The panel runs whatever the server sends, with the
plugin's permissions: the Premiere Pro DOM and network access (the manifest
allows all domains because the port is configurable; the plugin itself only
connects to
127.0.0.1). It asks for no file-system permission: Premiere Pro reads and writes files itself, at paths the server has checked.execute_premiere_coderuns your own code unrestricted. - The panel stores the token in its
localStorage, in plain text.
Two MCP clients at once
Each MCP client starts its own copy of the server, but only one process can
listen on the port. The first one listens; a later one finds the port held by
another copy of this server (it asks GET /status) and forwards its scripts
to it over HTTP (POST /execute, with the token). Scripts from both clients
then run one at a time through the one plugin connection. If the first server
exits, the next call from the other takes the port over and waits up to
PREMIERE_CONNECT_WAIT_MS for the panel, which reconnects within 3 s.
If the port is held by some other program, calls fail with a message saying
so: choose another PREMIERE_WS_PORT and set it in the panel too. A second
copy with a different token is told the tokens differ.
Inside adobe-mcp-suite the port opens on the first Premiere Pro call rather
than at startup.
What is not certain yet
These follow Adobe's UXP reference but have not been seen working in Premiere Pro:
- Project items. Bins are told apart from clips by
FolderItem.castplus a successfulgetItems(), and sequences byClipProjectItem.isSequence(). The numericProjectItem.typeis reported as-is because its values are not documented. - Moving clips.
move_clipspasses the offset tocreateMoveAction, which the reference describes only by its TickTime argument. - Keyframe times.
add_keyframessetsKeyframe.position; whether that is measured from the clip or the sequence is not documented, so use the timeslist_clip_effectsreports. - Volume.
set_clip_volumefinds the Volume effect and its Level parameter by their English display names.adjust_clip_audiomultiplies Level by the decibel ratio, so it does not depend on how Level maps to dB, and passes pan as Effect Controls shows it (-100 to 100); how the Panner stores it is not confirmed. - Effects by name.
set_clip_transform,fade_clips,copy_clip_effectsandset_lumetri_colorfind effects and parameters by their English display names (Motion, Opacity, Blend Mode, Lumetri Color and its settings). None of the Lumetri names is checked in Premiere Pro, nor the value types of Input LUT, Look, the colour wheels and the HSL Secondary ranges; a name the effect lacks is reported with the names it has. Blend modes are written as their position in the Blend Mode menu (Normal = 0);blendModeIndextakes a raw value. - Keyframes relative to the clip.
jump_to_keyframe,copy_keyframes,copy_clip_effectsandfade_clipstreat keyframe times as the clip's source time (the In point is the clip's first frame), as ExtendScript does. Whether turning animation on adds a keyframe of its own is not known. - Source clip effects. Applying or removing them with
manage_source_effectsis not documented; the tool checks the effect count changed. - Exported frames.
exportSequenceFrametakes a file name and a folder; the server passes the base name and the folder separately. - Media. Layered files import merged (
importFileshas no layer option), and EDL, AAF and FCP XML go throughimportFileslike any file.modify_footagesets field order and alpha with theFIELD_TYPE_*andALPHACHANNEL_*values theFootageInterpretationobject carries.set_project_media_settingspasses a scratch disk folder path where the reference names only theScratchDiskFolderconstants. Search bin queries are passed as given; their syntax is not documented. - Media Encoder jobs.
encode_mediapasses the range as 0 (whole), 1 (in to out) or 2 (work area), as Adobe's sample does; for a whole file it passes an invalid end time (made by dividing a TickTime by zero, which the reference says returnsTIME_INVALID), as the sample passesTickTime.TIME_INVALID. - Events. What
wait_for_eventreports about an event is whatever plain values the event object carries; the reference does not describe them. - Auto-Save copies.
recover_projectlooks for copies named after the project in the Auto Save scratch disk, or in "Adobe Premiere Pro Auto-Save" beside the project when Premiere Pro reports the default symbolically. - The panel's WebSocket. Whether Premiere Pro's UXP sends an
Originheader, and whether a narrowernetwork.domainsentry with a port would work, are not known;premiere_statusshows the origin it saw.
Please report what you find, with the Premiere Pro version.
ArtCraft (FilmCraft) Support
This server features transparent adapter support for Storytold's FilmCraft nonlinear timeline video editor. When Premiere Pro is not installed or running, or when PREMIERE_TARGET=craft (or ADOBE_TARGET=craft) is set, compatible tools route directly to FilmCraft's loopback bridge protocol (127.0.0.1:9876 by default or FILMCRAFT_CONTROL_PORT).
Development
The audit runs every tool with sample arguments and parses each script it
generates; every ppro.<Class>, static member, constructor and
ppro.Constants.<Enum>.<VALUE> must exist in tests/fixtures/premiere-uxp-api.json,
every other member must be a member of some UXP class or plain JavaScript, and
a tool that uses a member added after 25.6 must declare the version it needs.
The fixture lists the 67 classes the capability atlas records, with their
members and constants from Adobe's UXP for Premiere reference
(AdobeDocs/uxp-premiere-pro, Apache-2.0); npm run fixtures regenerates it
(see scripts/generate-fixtures.js). tests/fixtures/feature-ids.json lists the
atlas feature ids the tools may claim.
Source: packages/premiere/README.md at commit 44b5b50
Tools
0Version history
1- v0.1.0LatestOct 20, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts
