MCP server¶
prpr ships a Model Context Protocol
server so LLM agents (Claude, Cursor, and any MCP client) drive Premiere
through typed tools instead of shell parsing.
Setup¶
prpr mcp install-claude # writes Claude Desktop's config
prpr mcp install-cursor # writes Cursor's config
prpr mcp serve # or run the stdio server yourself
prpr mcp tools --detail # introspect all tools + schemas
The server hosts the bridge itself — with Premiere running and the
prpr bridge panel open, tools connect lazily on first call. Meta tools
(version, doctor, media_scan, render_presets, static schema
topics) work even without Premiere, so first-time setup is instant.
Tool surface¶
77 tools mirroring dvr's tool names
wherever the capability exists in both apps — an agent that knows dvr's
tools already knows prpr's:
- State:
ping,inspect,timeline_inspect,clip_where,media_inspect,media_bins,media_ls - Projects/timelines:
project_list/ensure/save/delete,timeline_list/ensure/switch/rename/delete/append/clear - Markers:
marker_add,marker_list,marker_remove - Media:
media_import,media_scan,media_bin_ensure,media_move,media_subclip,media_attach_proxy,media_transcribe - Effects (prpr-only):
effects_list,effect_apply,effect_param_set(transforms + keyframes),transition_add,clip_components,timeline_insert_mogrt,timeline_scene_detect - Export:
render_presets,render_submit,render_frame,render_watch,interchange_export(FCPXML/OTIO/AAF) - Declarative:
apply_spec,spec_export,diff_timelines,diff_to_spec,snapshot_save/list/restore,lint - Setup:
doctor,plugin_install,plugin_status,reconnect
Operations Premiere can't perform (render_queue, page_set,
interchange_import, ...) are still registered and return a structured
NotSupportedError with a fix naming the closest alternative — agents
get an actionable failure, never a missing tool. See
parity.
Resources¶
prpr://inspect, prpr://timeline/current, prpr://media/bins,
prpr://render/presets, prpr://doctor, and prpr://schema/<topic>.
Eval escape hatch¶
Set PRPR_MCP_ENABLE_EVAL=1 to expose the eval tool, which runs raw
JavaScript inside Premiere with the full premierepro module in scope
(the body of an async (ppro, uxp, H, args) => {...} function). dvr's
eval runs Python against Resolve; same tool name, same gate, same
spirit.
Error shape¶
Failures return isError: true with dvr's error JSON:
{"error": {"type": "TimelineError", "message": "...", "cause": "...", "fix": "...", "state": {...}}}