Multi-language MCP server for controlling Adobe Premiere Pro via gRPC and CEP/ExtendScript bridges. Provides intelligent editing, analytics, media processing, and project automation tools across video editing workflows.
The server provides 32 tools with consistent naming conventions (all start with 'premiere_' prefix), and nearly all have descriptions and parameter schemas. However, there are critical gaps: (1) Many tools lack output schema documentation, the source shows input schemas but does not document what fields agents should expect in responses. (2) Several tool descriptions are generic or lack actionable context (e.g., 'premiere_match_frame' and 'premiere_reverse_match_frame' have empty input objects but no guidance on when to use them or what they return). (3) Error handling guidance is absent, tools like 'premiere_close' with force=true (DESTRUCTIVE) lack recovery instructions. (4) No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are visible in the schema. (5) Complex multi-track operations (e.g., 'premiere_paste_attributes') have incomplete parameter descriptions for the 'attributes' comma-separated list. The tool coverage is broad (advanced editing, AI features, analytics, app control) and naming is clear, but production-grade polish is missing.
Analyze and normalize all audio clips in a sequence to broadcast standards. Uses Rust waveform analysis to measure LUFS, Python to compute per-clip gain adjustments, and the TypeScript bridge to apply them. Default target: -24 LUFS (broadcast standard).
Match the color grading of a destination clip to a source reference clip using Lumetri. Analyzes both clips via Rust, computes adjustments with Python, and applies Lumetri parameters via the TypeScript bridge.
Quit Adobe Premiere Pro. By default, sends a graceful quit via AppleScript, which may trigger a 'Save changes?' dialog. Use force=true to kill the process immediately without saving. Returns status ('closed', 'closing', 'not_running').
Get audio level statistics across all audio tracks in a sequence.
Get a breakdown of all codecs used across project media with counts per codec.
Output schemas not documented. Tools return responses but the source code does not specify what fields agents should expect. For example, 'premiere_get_project_summary' description says 'Get a comprehensive project summary' but no output schema is visible (sequence count, bin count, clip count, total duration, disk usage are mentioned in description but not formally defined). This forces LLMs to guess field names and breaks tool chaining.
Tools with empty input schemas lack context. 'premiere_match_frame', 'premiere_reverse_match_frame', and 'premiere_lift_selection' have empty {} inputs but descriptions do not explain: (1) How does the tool know which clip to match? (2) Are there state assumptions (e.g., playhead position must be set first)? (3) What is the expected side effect? This violates the pattern that every tool must enable the LLM to decide when and how to call it without external context.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | <=2025-11-25 | v2 |
Get a breakdown of all color spaces used across project media with counts per color space.
Get the distribution of clip durations across the project as histogram data (buckets with counts).
Calculate the edit point density (edit points per minute) for a sequence.
List all effects used in a sequence with usage counts per effect.
Get a breakdown of all frame rates used across project media with counts per frame rate.
Get a breakdown of project media by type (video, audio, image, graphics) with counts and total duration per type.
Get a pacing report for a sequence including average clip duration and cuts per minute.
Get a comprehensive project summary including sequence count, bin count, clip count, total duration, and disk usage.
Get a breakdown of all resolutions used across project media with counts per resolution.
Get a comprehensive summary of a specific sequence including track count, clip count, duration, and effects used.
Get track utilization percentages for each track in a sequence (used time vs total duration).
List all transitions used in a sequence with usage counts per transition type.
Run a comprehensive health check on the Premiere Pro pipeline. Verifies that the Premiere Pro process is running, that the WebSocket bridge is reachable (via premiere_ping), and reports an overall health status. If Premiere Pro has crashed, the response includes a 'restart_available' flag indicating you can call premiere_open to relaunch it. Returns: process_running, bridge_connected, premiere_version, project_open, overall_status ('healthy', 'degraded', 'down'), and restart_available.
Check whether Adobe Premiere Pro is currently running as a macOS process. Returns {running: true/false} and, when running, the process IDs. Use this before calling tools that require Premiere to be open.
Lift the area between the sequence in/out points, removing clips but leaving a gap. Set in/out points first.
Match frame: find the source frame in the project that corresponds to the current playhead position. Opens the source clip in the Source Monitor.
Launch Adobe Premiere Pro on macOS. If Premiere is already running and a project_path is provided, the project is opened in the existing instance. When wait is true (default), the call blocks until Premiere finishes launching (up to 60 seconds). Returns status ('launched', 'already_running', 'timeout') and timing information.
Copy specific attributes (motion, opacity, speed, effects, audio) from one clip and apply them to another.
Paste from clipboard using insert mode, pushing subsequent clips forward on the timeline.
Reverse match frame: find the timeline position that corresponds to the current source monitor position.
Ripple trim a clip edge by a time delta. Adjusts the clip boundary and shifts all subsequent clips on the track.
Roll trim: move the edit point between two adjacent clips. Shortens one clip while extending the other so total duration stays the same.
Slide a clip: move a clip between its neighbours without changing its source content. Adjusts adjacent clips to fill the gap.
Slip a clip: change which portion of the source media is shown without changing the clip's position or duration on the timeline.
Analyze audio for silence and automatically cut dead air from a track. Uses Rust waveform analysis to detect silence regions, Python to compute optimal cut points, and the TypeScript bridge to execute razor cuts.
Trim a clip to remove silence/dead air at its start and end. Uses Rust waveform analysis to detect leading/trailing silence, then trims the clip via the TypeScript bridge.
AI suggests appropriate transition types and durations for each edit point in a sequence, based on content analysis of adjacent clips (scene changes, pacing, mood).
No tool annotations. The MCP spec supports readOnlyHint, destructiveHint, and idempotentHint annotations. These tools span read, write, and destructive operations (e.g., 'premiere_close' with force=true), but no annotations are visible in the schema. This prevents MCP clients from understanding safety classification and restricting agent permissions.
Error handling is generic or absent. Tools like 'premiere_paste_attributes' allow a comma-separated 'attributes' parameter but provide no validation guidance. The description says '(default: motion,opacity,effects)' but does not explain what happens if an invalid attribute is passed, or how the LLM should recover. Tools like 'premiere_close' with force=true are DESTRUCTIVE but include no confirmation step or dry-run mode.
Analytics tools lack output structure. Ten analytics tools ('premiere_get_*_breakdown', 'premiere_get_*_report') have generic descriptions ('Get a breakdown of...') but no formal output schema. Agents do not know: Are results paginated? What is the structure of 'counts' or 'histogram buckets'? Are there nested fields? This prevents LLMs from parsing and chaining results.
Parameter descriptions lack detail. Many parameters are documented minimally. For example, 'premiere_paste_attributes' has a 'attributes' parameter described as 'Comma-separated list of attributes to copy: motion,opacity,speed,effects,audio (default: motion,opacity,effects)'. This is informal, it should specify: (1) allowed values as an enum, (2) behavior if invalid values are passed, (3) case sensitivity.
STDIO-only transport. The server is bound to STDIO (see .mcp.json: 'type: stdio'). STDIO is not remotely accessible and cannot be used by hosted MCP clients. This caps the protocol readiness score at 50 and limits deployment flexibility.