This page records the Adobe 26.3 UXP surface targeted by this branch. It is a
capability plan and public-contract reference, not a claim that every supported
Premiere build has been exercised. The package must interrogate the connected
panel through capabilities.get; package version, static TypeScript declarations,
and unit tests are insufficient evidence that a particular host supports a command.
The later stable-API expansion is documented separately in the stable UXP workflow matrix. Its coverage entries share this pinned 26.3 declaration baseline and the same pending live-host gate.
Adobe's 26.3 changelog
is the primary release baseline. It introduced the APIs below and tightened the
rule that create*Action() calls occur inside project.lockedAccess() before the
action is consumed by project.executeTransaction().
Use the stable @adobe/premierepro 26.3.0 package
for declarations. It contains types only; Premiere supplies the runtime module as
require("premierepro"). Adobe's npm beta channel is a preview of later work
(currently 26.5) and is not a supported runtime target for this MCP release. A
beta declaration or a beta sample may guide research, but it must not add a tool,
minimum-version claim, or production capability until Adobe ships the API in a
stable host and the live-host gate below passes.
Adobe's TypeScript guidance and ESLint guidance are part of the implementation baseline. In particular, the lint rules flag action creation outside locks, asynchronous lock/transaction callbacks, and actions that escape their lock scope.
All entries in this table target Premiere 26.3+ and require a connected authenticated
local panel. Supported means the command has a documented API and an MCP contract;
the runtime probe can still return supported: false for an individual host. The
verification column describes the required evidence, not a completed test run.
| MCP tool | UXP protocol command | Adobe API | Operation | Capability state | Verification evidence |
|---|---|---|---|---|---|
rename_track_uxp |
track.rename |
AudioTrack, VideoTrack, and CaptionTrack createSetNameAction() |
Undoable project mutation | Supported when the selected track type and action APIs probe true | Read back the target track's name after the committed transaction; live host must also validate Undo. |
create_subclip_uxp |
subclip.create |
ClipProjectItem.createSubClipAction() |
Undoable project mutation | Supported when the resolved item is a clip and action APIs probe true | Return and re-resolve the created subclip identity; live host must validate hard boundaries and audio/video options. |
list_markers_uxp |
marker.list |
Marker.guid, getColor(), getUrl(), getTarget(), plus marker accessors |
Read-only | Supported when sequence or clip marker APIs probe true | Return marker values and the stable 26.3 guid; optional web-link URL/target and raw RGBA component fields require explicit caller opt-in and do not mutate Premiere. |
inspect_premiere_events_uxp |
events.list, events.wait |
EventManager, six root SnapEvent.EVENT_SNAP_* constants, and root OperationCompleteEvent.EVENT_CLIP_EXTEND_REACHED / EVENT_EFFECT_DRAG_OVER |
Read-only bounded event receipt monitoring | Base event journaling remains capability-gated; each optional root constant must probe as a non-empty event name | Register only available documented constants as passive timeline.snap.*, operation.clip.extend.reached, and coalesced operation.effect.drag.over receipts. Return the ordinary 256-entry/60-second bounded journal with allowlisted scalar detail only; no raw host event payload, guaranteed emission, project-state invalidation, terminal completion, downstream edit completion, or licensed-host proof is claimed. |
set_source_monitor_position_uxp |
sourceMonitor.position.set |
SourceMonitor.setPosition() |
Source Monitor state mutation; no edit-history claim | Supported when setPosition and position read-back APIs probe true |
Read SourceMonitor.getPosition() after setting the requested TickTime. |
manage_sequence_range_uxp |
sequence.range.inspect, sequence.range.update |
Sequence range accessors plus createSetInPointAction(), createSetOutPointAction(), and createSetZeroPointAction() |
Undoable sequence-range mutation | Supported when every accessor, action, TickTime, and transaction primitive probes true |
Read the complete range after one transaction and require it to match the guarded request; live host must also validate Undo. |
manage_sequence_playhead_uxp |
sequence.playhead.inspect, sequence.playhead.set |
Sequence.getPlayerPosition() and Sequence.setPlayerPosition() |
Sequence player-state mutation; no project-save or Undo claim | Supported when the active sequence, TickTime, getter, and setter probe true |
Require the inspected sequence GUID and exact current position, serialize competing setters, then read the player position back. |
manage_app_preferences_uxp |
preferences.inspect, preferences.set |
AppPreference.getValue(), setValue(), the three documented preference keys, and persistence constants |
Direct application-state update; no project-save, transaction, or Undo claim | Supported when all three named keys, both property-type constants, and the exact getter/setter probe true | Return three bounded native strings. A write accepts only one allow-listed key and string value, requires the exact inspected value, explicit persistence and confirmation, serializes competing writes to that key, and verifies exact native-string readback. This is not a licensed-host proof. |
inspect_installed_mogrt_directory_uxp |
graphics.mogrtPath.inspect |
SequenceEditor.getInstalledMogrtPath() |
Read-only installed-MOGRT directory availability readback | Supported when the static documented getter probes true | Validate only one bounded native string. The path remains redacted unless include_path: true; the bridge does not enumerate or read the directory, import MOGRTs, prove template compatibility, or validate a licensed host. |
inspect_sequence_timing_uxp |
sequence.timing.inspect |
Sequence.getFrameSize(), getTimebase(), audio/video time-display getters, and getProjectItem() |
Read-only active-sequence timing and ownership snapshot | Supported when the active sequence exposes each listed getter; invocation then requires the returned ProjectItem to expose a valid ID | Return bounded native values and reject a different active sequence at read completion. This is not a locked atomic snapshot, does not detect a transient switch back to the same sequence, and is not licensed-host proof. |
inspect_frame_alignment_uxp |
time.frameAlignment.inspect |
FrameRate.createWithValue(), TickTime.createWithSeconds(), createWithFrameAndFrameRate(), alignToFrame(), and alignToNearestFrame() |
Read-only native frame-boundary conversion for caller-owned values | Supported when the documented native FrameRate and TickTime factories plus both alignment methods probe true | Accept one bounded rate plus either seconds or a frame count, and return native seconds/tick-string values. It never infers a sequence rate, changes Premiere, or proves timeline placement, playback, persistence, or licensed-host behavior. |
inspect_sequence_timing_by_guid_uxp |
sequence.timingByGuid.inspect |
Project.getSequence(), Guid.fromString(), and the bounded sequence-timing accessors |
Read-only exact known-sequence timing and ownership snapshot | Supported when Project GUID lookup parses and resolves; the requested target's timing accessors are probed at invocation | Require one exact known sequence GUID, including a non-active target without activating it, and reject a changed project, missing target, GUID mismatch, or any difference across two complete timing snapshots. This is not an atomic host snapshot or licensed-host proof. |
calculate_tick_time_uxp |
time.tickArithmetic.inspect |
TickTime.createWithTicks(), add(), subtract(), multiply(), divide(), and tick/second readback |
Read-only native tick arithmetic | Supported when the TickTime factory probes true and the selected instance method exists at invocation | Accept only canonical bounded tick strings and non-zero integer multiply/divide factors, then return native ticks and seconds. It accepts no seconds or frame rates, does not align frames or infer timecode, and does not inspect project state, rendering, playback, or a licensed host. |
manage_sequence_display_format_uxp |
sequence.displayFormat.inspect, sequence.displayFormat.update |
Sequence.getSettings(), createSetSettingsAction(), and SequenceSettings audio/video display-format getters, setters, and constants |
One undoable sequence-settings mutation | Supported when the getters, setters, documented constants, and transaction primitives probe true | Require the inspected sequence GUID and complete two-code snapshot, serialize all competing updates for that sequence, commit one native settings action, and read both codes back. Contract coverage is not licensed-host or Undo proof. |
automate_effect_parameters_uxp |
parameters.point.inspect, parameters.point.set |
ComponentParam.getStartValue(), isTimeVarying(), createKeyframe(), createSetValueAction(), PointF, and Project transaction primitives |
One undoable static PointF parameter mutation | Supported when the active coordinate resolves a parameter exposing the PointF constructor, point start-value readback, and transaction action APIs | Inspect reads the complete PointF x/y snapshot twice and rejects an intervening change. Update requires that exact snapshot, confirmation, and operation ID; it serializes competing updates for that parameter, creates one action in one transaction, and reads x/y back. Keyframed PointF edits, rendered output, playback, persistence, Undo, and licensed-host behavior are not proven. |
automate_effect_parameters_uxp |
parameters.point.displacement.inspect |
ComponentParam.getValueAtTime(), TickTime.createWithSeconds(), and PointF.distanceTo() |
Read-only animated PointF endpoint displacement | Supported when the active coordinate resolves a time-varying PointF parameter whose two native samples expose distanceTo() |
Require an exact coordinate and a strictly increasing, bounded two-time interval. Read the complete project/sequence/component/parameter identity, animation state, both native points, and native straight-line distance twice; reject any drift. It is an endpoint displacement, not total path length, a keyframe edit, rendered motion, playback, persistence, Undo, or licensed-host proof. |
automate_effect_parameters_uxp |
parameters.color.inspect, parameters.color.set |
ComponentParam.getStartValue(), isTimeVarying(), createKeyframe(), createSetValueAction(), Color, and Project transaction primitives |
One undoable static Color parameter mutation | Supported when the active coordinate resolves a parameter exposing the Color constructor, color start-value readback, and transaction action APIs | Inspect reads the complete raw RGBA snapshot twice and rejects an intervening change. Update requires that exact snapshot, confirmation, and operation ID; it serializes competing updates for that parameter, creates one action in one transaction, and reads RGBA back. Keyframed Color edits, color management, rendered appearance, playback, persistence, Undo, and licensed-host behavior are not proven. |
inspect_effect_parameter_catalog_uxp |
parameters.catalog.inspect |
Audio/video component-chain accessors, Component.getParamCount()/getParam(), and ComponentParam descriptor accessors |
Read-only bounded component-parameter discovery | Supported when the active coordinate exposes a documented component chain, identity getters, and every parameter descriptor accessor | Return at most 64 parameter indices, display names, and keyframe capability/state entries; never read raw parameter values. Read the complete target twice and reject changed project, active-sequence, component-identity, or descriptor data. This does not prove parameter values, editability, rendering, playback, persistence, Undo, or licensed-host behavior. |
inspect_source_media_provenance_uxp |
source.provenance.inspect |
Project.getRootItem(), FolderItem.getItems(), and ClipProjectItem.getMediaFilePath() / getOriginatingProjectPath() |
Read-only, opt-in source-path provenance inspection | Supported when the documented Project, FolderItem, and ClipProjectItem casts probe true | Require one exact Project-item ID and at least one explicit path-disclosure flag. Resolve only that item twice through a 4096-item bounded tree and reject a changed project, target, or selected path. It does not return a tree, access the filesystem, validate a path, establish origin or rights, or prove a licensed host. |
inspect_source_proxy_uxp |
source.proxy.inspect |
Project.getRootItem(), FolderItem.getItems(), and ClipProjectItem.canChangeMediaPath() / isOffline() / canProxy() / hasProxy() / getProxyPath() |
Read-only, bounded source-proxy readiness inspection | Supported when the documented Project, FolderItem, and ClipProjectItem casts plus all listed proxy getters probe true | Require one exact Project-item ID. Resolve only that item twice through a 4096-item bounded tree and reject a changed project, target, or selected state. The proxy path getter runs only after explicit opt-in and only for an attached proxy; it does not access the filesystem, attach/relink media, prove proxy compatibility, playback, persistence, or a licensed host. |
manage_source_media_timing_uxp |
source.mediaTiming.inspect, source.mediaTiming.setStart |
ClipProjectItem.getMedia(), stable Media.start/duration, Media.createSetStartAction(), TickTime, and Project transaction primitives |
One undoable source-media start-time mutation | Supported when the resolved clip's media surface, TickTime factory, and transaction primitives probe true | Require the exact project-item ID and a complete start/duration snapshot, serialize competing updates for that clip, reject a changed synchronous timing snapshot under the action lock, then read back the requested start and unchanged duration. Contract coverage is not licensed-host, timecode-display, persistence, or Undo proof. |
manage_source_media_overrides_uxp |
source.mediaOverrides.inspect, source.mediaOverrides.update |
ClipProjectItem.getFootageInterpretation(), FootageInterpretation.getFrameRate(), getPixelAspectRatio(), createSetOverrideFrameRateAction(), createSetOverridePixelAspectRatioAction(), and Project transaction primitives |
One undoable explicit source-media interpretation-override mutation | Supported when the resolved clip, effective interpretation getters, dedicated override actions, and transaction primitives probe true | Require the exact project/item/effective-value snapshot, confirmation, and operation ID; serialize this protocol's competing source-media timing/override updates per item; construct requested actions under one lock and commit one transaction, then read both effective values back. Adobe exposes no explicit-override-presence or clear getter, so matching effective values do not prove persistence or distinguish an override from file-native interpretation. Contract coverage is not licensed-host or Undo proof. |
inspect_track_item_identity_uxp |
trackItem.identity.inspect |
Audio/video TrackItem.getMatchName(), getType(), getMediaType(), getTrackIndex(), and getIsSelected() |
Read-only single-track-item identity snapshot | Supported when the active sequence, requested track item, and every documented identity getter probe true | Require one bounded audio/video coordinate, optionally reject a stale expected sequence GUID, and re-read the active sequence identity before returning. It returns no paths, effect parameters, rendered output, or visual proof; a switch away and back to the same sequence during the call is not detected, and contract coverage is not licensed-host proof. |
slip_track_item_uxp |
trackItem.slip.inspect, trackItem.slip |
Audio/video TrackItem timing getters, createSetInPointAction(), createSetOutPointAction(), and Project transaction primitives |
One undoable source-only slip | Supported when the active sequence exposes the bounded requested clip and all required timing/action APIs | Require a complete reviewed snapshot, explicit confirmation, and operation ID; serialize competing slips per item, create exactly two source-point actions in one transaction, then verify unchanged timeline timing plus the exact shifted source range. It supports only forward 1x items and does not prove media-handle availability, rendered frames, linked-item sync, persistence, Undo, or licensed-host behavior. |
slide_track_item_uxp |
trackItem.slide.inspect, trackItem.slide |
Audio/video TrackItem timing getters; createMoveAction(), timeline/source trim actions; and Project transaction primitives |
One undoable contiguous three-item slide | Supported when the bounded requested center item has immediate contiguous same-track clip neighbours and every required action API probes true | Require a complete three-item snapshot, confirmation, and operation ID; serialize slides and slips on the track, create five actions in one transaction, then verify every source/timeline boundary and both retained cuts. Only forward 1x items with matching source/timeline durations are supported; media handles, linked A/V, rendering, playback, persistence, Undo, and licensed-host behavior remain unproven. |
duplicate_track_item_uxp |
trackItem.clone.inspect, trackItem.clone |
Audio/video TrackItem timing/source getters, SequenceEditor.getEditor(), createCloneTrackItemAction(), TickTime, and Project transaction primitives |
One undoable append-only same-track duplicate | Supported when the requested final clip item, documented clone action, and transaction primitives probe true | Require a complete final-item snapshot, confirmation, and operation ID; serialize with slips/slides on that track, make exactly one clone action/transaction, then read back only the source and deterministic appended coordinate. It does not clone into occupied ranges or another track, and does not prove media handles, linked A/V, rendering, playback, persistence, Undo, or licensed-host behavior. |
ripple_delete_track_item_uxp |
trackItem.rippleDelete.inspect, trackItem.rippleDelete |
Audio/video TrackItem timing/source getters, TrackItemSelection, Constants.MediaType, SequenceEditor.getEditor(), createRemoveItemsAction(), and Project transaction primitives |
One undoable contiguous same-track ripple delete | Supported when the requested item has an immediate contiguous same-track successor and the documented selection, remove-action, and transaction primitives probe true | Require complete target/successor snapshots, confirmation, and an operation ID; serialize with slips/slides/duplicates on that track, make one single-item ripple action and transaction, then read only the successor at the removed coordinate. Final items, gaps, other tracks, linked A/V, media handles, rendering, playback, persistence, Undo, and licensed-host behavior remain outside this proof. |
manage_timeline_source_label_uxp |
timeline.sourceLabel.inspect, timeline.sourceLabel.update |
Audio/video track item getProjectItem(), ClipProjectItem.cast(), source getColorLabelIndex()/createSetColorLabelAction(), and Project transaction primitives |
One undoable source Project-item color-label mutation resolved from an active timeline coordinate | Supported when the active coordinate resolves a clip source with the documented color-label action | Require the complete coordinate/source-label snapshot, confirmation, and operation ID; serialize all bridge color-label mutations for that source item, re-resolve before action construction, commit one transaction, and read the coordinate/source label back. A source label is project-global, not a timeline-only instance label; rendered appearance, playback, persistence, Undo, and licensed-host behavior are not proven. |
manage_sequence_preview_frame_uxp |
sequence.previewFrame.inspect, sequence.previewFrame.update |
Project.getSequences(), Sequence.getSettings(), SequenceSettings.getPreviewFrameRect()/setPreviewFrameRect(), RectF, Sequence.createSetSettingsAction(), and Project transaction primitives |
One undoable preview-frame rectangle mutation for one exact sequence GUID | Supported when the resolved target exposes the documented preview-frame accessors, RectF constructor, settings action, and transaction primitives | Inspect double-reads a bounded native width/height snapshot. Update requires the complete snapshot, confirmation, and operation ID; it serializes bridge updates by reviewed project/sequence, revalidates before one settings transaction, then reads that exact sequence back. UXP exposes no compare-and-swap or UI/cross-extension lock; video frame dimensions, rendering, playback, persistence, Undo, and licensed-host behavior are not proven. |
create_empty_sequence_uxp |
sequences.createEmpty |
Project.createSequence(), Project.getSequences(), and sequence identity accessors |
Direct project mutation; no Undo or transaction claim | Supported when the active project exposes documented empty-sequence creation | Require explicit confirmation and an operation ID, serialize the complete project-sequence capacity snapshot through creation and post-call collection readback, and verify the returned identity. Contract coverage is not licensed-host proof. |
inspect_project_tree_uxp |
projectTree.inspect |
Project.getRootItem(), FolderItem.getItems(), and project-item identity accessors |
Read-only bounded Project-panel tree snapshot | Supported when the active project exposes a readable root folder and runtime folder casts | Return only stable IDs, names, types, parent IDs, bin state, and optional color-label indexes, capped at 512 items and depth 16. It omits media paths, metadata, and content; depth or item truncation is explicit, and this is not licensed-host proof. |
inspect_project_panel_metadata_uxp |
metadata.columns.get, metadata.projectPanel.get |
Metadata.getProjectColumnsMetadata() and Metadata.getProjectPanelMetadata() |
Read-only bounded Project-panel metadata snapshot | Supported when the exact documented accessor probes true; item columns additionally resolve one media item | Return one native metadata string capped at 350,000 characters and 900,000 serialized UTF-8 bytes. This read-only tool intentionally offers no schema creation or write route; it is not an atomic project snapshot or licensed-host proof. |
manage_project_panel_metadata_uxp |
metadata.projectPanel.get, metadata.projectPanel.update |
Metadata.getProjectPanelMetadata(), Metadata.setProjectPanelMetadata(), Project.guid, and Project.lockedAccess() |
Direct non-undoable active-project panel-metadata replacement | Supported when the exact getter, setter, active-project GUID, and lock probe true | Require exact inspected project GUID and XML, confirm_update: true, and an operation ID. Cap each XML string at 12 KiB UTF-8, serialize this bridge's competing updates per project, re-snapshot immediately before starting the setter, then require exact active-project XML readback. Adobe exposes no atomic compare-and-set, so user-interface/extension races, persistence, UI results, Undo, cancellation, and licensed-host behavior are not claimed. |
create_project_metadata_field_uxp |
metadata.projectSchema.inspect, metadata.projectSchema.create |
Metadata.getProjectPanelMetadata(), addPropertyToProjectMetadataSchema(), four documented metadata-type constants, Project.guid, and Project.lockedAccess() |
Direct non-undoable Project metadata-schema field creation | Supported when the exact panel getter, schema creator, type constants, active-project GUID, and lock probe true | Require exact inspected project GUID and 12 KiB UTF-8-bounded panel XML, a bounded typed name/label, confirm_create: true, and an operation ID. Serialize this bridge's schema/create and panel-replacement requests per project, then re-snapshot before invoking the direct API. Adobe provides neither atomic compare-and-set nor a field-level schema getter: host acceptance and changed panel XML are evidence only, so success is always committed_unverified; persistence, UI results, Undo, cancellation, and licensed-host behavior are not claimed. |
has_transcript_uxp |
transcript.has |
Transcript.hasTranscript() |
Read-only | Native 26.3 support is used when it probes true; the existing 25.6 transcript-export compatibility probe is labeled as a fallback | Return Adobe's native boolean when available; never infer transcript presence from names or transcript text. |
import_transcript_uxp |
transcript.import |
Transcript.hasTranscript(), exportToJSON(), importFromJSON(), and createImportTextSegmentsAction() with Project transaction primitives |
One undoable source-transcript replacement | Supported when the exact transcript, project-root traversal, clip-cast, and transaction APIs probe true | Require an exact project GUID, project-item ID, and current transcript SHA-256 (or null for an untranscribed clip), explicit confirmation, and an operation ID. Serialize competing imports for that clip; cap input at 24 KiB and snapshots at 1 MiB; re-snapshot before action creation; then require exact export-SHA readback. A committed readback failure is committed_unverified, not proof of the imported text, Undo, persistence, or licensed-host behavior. |
export_aaf_uxp |
interchange.aaf.export |
ProjectConverter.exportAAF() and AAFExportOptions |
Export side effect; no project undo claim | Supported when converter and option APIs probe true | Record Premiere's boolean result and, in a live host, confirm the intended AAF artifact exists and is usable. |
audit_object_masks_uxp |
objectMask.audit |
ObjectMaskUtils.hasObjectMask(), Project.getSequences()/getSequence(), and sequence GUID/name accessors |
Read-only bounded project/sequence Object Mask presence audit | Supported when the documented object-mask and active-project APIs probe true; exact-ID mode additionally requires GUID lookup | Audit at most 64 sequences, read project aggregate and per-sequence booleans twice, and reject any project/sequence/name/boolean drift. This reports presence only—not masks, tracking, rendered pixels, playback, or licensed-host behavior. |
inspect_unique_object_identity_uxp |
object.uniqueIdentity.inspect |
UniqueSerializeable.cast() and getUniqueID(), plus bounded Project item/sequence lookup |
Read-only opaque native identity inspection | Supported when the documented active-project and unique-serializable APIs probe true; target resolution is checked at invocation | Require exactly one existing project-item ID or sequence GUID. Resolve and read its opaque native identity twice, rejecting project, locator, or identity drift. It exposes no paths, metadata, content, persistence guarantee, edit authority, rendering, playback, or licensed-host proof. |
The 26.3 command-registry entries mark their documented status, 26.3 minimum,
read-only/destructive/undoable metadata, and an explicit reason if the host does
not expose the required API. transcript.has is a pre-existing protocol command:
its capability record identifies both its 25.6 export-probe compatibility path and
whether the 26.3 native check is present. A command failure is never retried
automatically through CEP or QE: a failed UXP mutation can already have changed
Premiere state. transcript.import is intentionally separate from the older 25.6
export/search compatibility path because its guarded target identity and native
hasTranscript() preflight require the stable 26.3 surface.
The MCP layer uses snake_case arguments and converts them to the protocol's
camelCase form. Unknown protocol properties must be rejected. Numeric time inputs
are finite, non-negative seconds and are converted to TickTime inside the panel.
Track indices are zero-based non-negative integers. Mutations accept the existing
bounded operation_id replay key where applicable.
rename_track_uxp:track_typeisvideo,audio, orcaption;track_indexis zero-based;nameis non-empty and at most 255 characters.create_subclip_uxp:nameis non-empty and at most 255 characters;start_secondsis finite and non-negative;end_secondsis finite and strictly greater thanstart_seconds. Supply at most oneproject_item_id(512 characters maximum) orproject_item_name(255 maximum); omitting both uses exactly one Project-panel selection.hard_boundariesdefaults tofalse;take_videoandtake_audioeach default totrue.list_markers_uxp:scopedefaults tosequenceand may beproject_item.inspect_frame_alignment_uxp:actionisalignorframe; both requireframe_ratefrom 1 through 240.alignrequiressecondsfrom 0 through 86,400 and rejectsframe_count;framerequires an integerframe_countfrom 0 through 20,736,000 and rejectsseconds. Both paths return only native TickTime readback for caller-owned inputs. The latter accepts one item selector as above.filtersis an optional list of at most 16 marker-type strings, each at most 64 characters. Web-linkurlandtargetfields are omitted unlessinclude_web_links=true, because a URL can contain sensitive query data. Rawcolorcomponents (red,green,blue, andalpha) are omitted unlessinclude_color_values=true; they are returned exactly as finite host values, without color-profile conversion or a rendered- appearance claim. When opted in, a host that does not expose an individual documented accessor returnsnullfor that field; this is a marker metadata snapshot, not a link reachability, browser-navigation, rendered-appearance, or licensed-host validation claim.set_source_monitor_position_uxp:secondsis finite and non-negative.manage_sequence_range_uxp:inspectreturns the active sequence GUID and its complete in/out/zero-point/end snapshot.updaterequires that GUID and the completeexpected_rangefrominspect, plus one or more bounded updates. Stale snapshots, unknown fields, and a final range outside0 <= in <= out <= endare rejected before any Premiere action is created. Zero point is independently bounded but is not conflated with the sequence in/out export range.manage_sequence_playhead_uxp:inspectreturns the active sequence GUID and current player position.setrequires both exact values plus a requested position, each finite and within 0 through 86400 seconds. A changed sequence or position outside a one-microsecond tolerance rejects before the setter is called; accepted requests require boolean host confirmation and player-position readback within that same tolerance. It controls UI player state only, so it does not claim a project save or Undo entry.manage_app_preferences_uxp:inspectreturns only the native string values for Adobe's three documented named keys:auto_peak_generation,import_workspace, andshow_quickstart_dialog.setrequires one of those keys, its exactexpected_valuefrom inspection, a stringvaluecapped at 1024 characters, an explicitpersistentornon_persistentflag,confirm_preference_change: true, and a boundedoperation_id. The panel serializes competing writes for the same key, rechecks the expected native string immediately before the direct setter, requires Adobe's boolean success, then requires exact native-string readback. Adobe exposes no project action, transaction, cancellation, or Undo boundary for this application state, so none is claimed; mock coverage is not licensed-host, persistence, or user-interface behavior proof.inspect_sequence_timing_uxp: accepts no arguments and returns the active sequence GUID/name, positive integral native frame dimensions, a positive bounded decimal timebase, non-negative integral audio/videoTimeDisplay.typecodes, and backing Project-item ID/name. Every field is bounded and validated. The panel re-resolves the active sequence after the asynchronous getter set and fails when its GUID no longer matches the sequence captured at request start. Adobe does not expose an atomic snapshot or activation revision here, so a transient switch back to the same sequence is not detectable. It performs no mutation, transaction, or operation replay.inspect_sequence_timing_by_guid_uxp: accepts exactly onesequence_guidreturned by a known native sequence listing or inspection. It parses that GUID through the documented UXPGuid.fromString()API and resolves it directly viaProject.getSequence()without changing the active sequence. It validates a complete bounded timing/Project-item snapshot, re-resolves the active project and requested GUID, and requires an equal complete second snapshot before returning. The protocol therefore rejects target removal, project or GUID mismatch, and observable timing changes during the request; Adobe supplies no atomic snapshot/revision, so same-value changes between observations and licensed-host behavior remain unproven.manage_sequence_display_format_uxp:inspectreturns the resolved sequence GUID, a completedisplayFormatssnapshot containing both nativeaudio_display_formatandvideo_display_formatcodes, and the exactSequenceSettingsconstants supported by that host.updaterequires the inspected GUID, both expected codes, at least one requested code from that returned list, and anoperation_id. The panel serializes the entire resolve/snapshot/stale-check/setter/action/readback flow per sequence, including different operation IDs; it rejects stale codes before either setter or action construction, executes onecreateSetSettingsAction()transaction, and verifies both requested codes through a new settings read. Completed duplicate operation IDs replay through the command registry. Cancellation is explicitly unsupported, and the mock contract does not prove host acceptance, persistence, or Undo behavior.manage_source_media_timing_uxp:inspectrequires oneproject_item_idand returns that ID plus finite non-negativestart_secondsandduration_seconds.set_startrequires the same ID, the completeexpected_timingsnapshot, a bounded finite non-negativestart_seconds,confirm_set_start: true, and an optionaloperation_id. The panel serializes the full preflight/action/readback boundary per project and item, rechecks the stable synchronous timing properties insidelockedAccess, commits exactly one native action in one transaction, and verifies the requested start and unchanged duration afterward. It neither uses beta-onlyMediagetters nor accepts a beta Promise-shaped timing property as a mutation fallback.manage_source_media_overrides_uxp:inspectrequires oneproject_item_idand returns its active project GUID, the ID, and bounded effective frame-rate and pixel-aspect-ratio values.updaterequires that completeexpected_overridessnapshot, an explicitconfirm_media_interpretation: true, a boundedoperation_id, and one or both requested overrides. Frame rate is a finite 1 through 240 value; pixel aspect is a positive integer numerator/denominator pair whose resulting ratio is 0.01 through 100. The panel serializes this protocol's source-media timing/override operations per project/item, rejects changed effective values before action creation, builds only the requested dedicated override actions under onelockedAccess()callback, commits exactly one transaction, and reads both effective values back.getFootageInterpretation()is asynchronous, so the effective snapshot is refreshed immediately before the lock rather than falsely claiming an in-lock getter recheck. Adobe provides no documented explicit-override presence or clear API: the tool cannot clear an override or distinguish a matching override from file-native interpretation. Mock and static contract coverage are not licensed-host, persistence, display, or Undo proof.slip_track_item_uxp:inspectreturns a complete bounded active-project, sequence, coordinate, timeline/source timing, speed, and reverse snapshot for one audio or video clip.applyrequires that exact snapshot,confirm_slip: true, a non-zero source offset from -60 to 60 seconds, and anoperation_id. Slips are serialized per target through stale preflight, action creation, transaction, and readback. The panel creates only the documented source-in and source-out actions in one transaction and requires timeline start/end/duration to remain unchanged on the coordinate-resolved readback. It supports forward 1x items only; a host may reject or normalize a source point beyond available media because this API exposes no source-handle maximum. A readback failure can follow a committed transaction and is not rendered-frame, A/V-link, persistence, Undo, or licensed-host proof.create_empty_sequence_uxp: requires a non-emptyname,confirm_non_undoable: true, and a bounded non-emptyoperation_id. It performs no sequence action or transaction because Adobe exposes this as a directProject.createSequence()call. The panel serializes the full project-sequence capacity preflight, creation call, and identity readback. A host rejection after a detected creation, missing identity, or unreadable readback returns a replayablecommitted_unverifiedpartial receipt; it does not claim Undo or cancellation.inspect_project_tree_uxp: accepts optionalmax_itemsfrom 1 through 512 (default 256) andmax_depthfrom 0 through 16 (default 6). The root item is returned separately; only non-root entries count towardmax_items. Children retain Premiere's returned order and include their depth and known parent ID.itemLimitReachedanddepthLimitAppliedexplicitly mark a partial traversal. This is a read-only structural snapshot, not an atomic project revision, media-path/metadata inventory, playback proof, or licensed-host validation.inspect_sequence_structure_uxp:include_source_project_itemsis false by default. Setting it true returns each bounded timeline clip's stable source ID.include_source_project_item_content_type: trueadditionally requires that ID opt-in and returns only the documented broad source categoryany,sequence, ormedia; unavailable or unrecognized host values arenull. It does not return a Project-panel type code, source name, media path, metadata, or tree state.include_source_project_item_classification: trueadditionally requires that ID opt-in and returns only documented source flags for sequence, merged-clip, multicam-clip, and offline status. A source unavailable to Premiere or an unavailable individual getter is represented asnull; no source name, type, media path, Project-panel metadata, or project-tree traversal is read. Only when explicitly requested byinclude_source_nested_sequence_identity: true, which also requires both source-ID and classification opt-ins. When and only whenisSequenceis exactlytrue, it returns the linked nested sequence's documented GUID; a non-sequence or unavailable nested source isnull. It neither inspects the nested sequence nor reads Project-panel state. This is a current bounded read, not an atomic source/timeline revision, playback proof, or licensed-host validation.inspect_project_panel_metadata_uxp: actionpanelreads the active project's native Project-panel metadata anditem_columnsresolves one media item using the existing ID/name/selection rules before reading its native column metadata. Each returned string may be empty but is capped at 350,000 characters and the complete serialized result at 900,000 UTF-8 bytes. This separate read-only tool has no setter route. The read is not a locked project revision, metadata-schema validation, persistence proof, or licensed-host validation.manage_project_panel_metadata_uxp:inspectreturns the active project panel XML.updaterequires that exact XML and project GUID, a 12 KiB UTF-8-bounded replacement,confirm_update: true, and anoperation_id. The panel serializes competing bridge updates per project, re-snapshots immediately before starting the direct setter underlockedAccess(), then requires exact active-project XML readback. Adobe supplies no atomic compare-and-set for this direct setter, so a user-interface or other-extension race is not excluded. The setter is non-undoable with no cancellation claim; mock coverage is not persistence, UI, Undo, or licensed-host proof.create_project_metadata_field_uxp:inspectreturns only the active project's 12 KiB UTF-8-bounded panel XML and identity required forcreate. Creation accepts one stable identifier, label, and one of Adobe's documentedinteger,real,text, orbooleantypes; it requires that exact snapshot,confirm_create: true, and anoperation_id. The panel serializes direct schema creation with direct panel-XML replacement requests for the project, then re-snapshots immediately before the synchronous direct call underlockedAccess(). Adobe has no atomic compare-and-set or field-level schema getter, so any host-accepted result remainscommitted_unverifiedeven when the post-call panel XML changed. UI/extension races, field presence, persistence, UI results, Undo, cancellation, and licensed-host behavior are not claimed.has_transcript_uxp: accepts at most one resolvedproject_item_idorproject_item_name; omitting both requires exactly one Project-panel selection.import_transcript_uxp: requires exactproject_item_id,project_guid, andexpected_transcript_revisionfrom a current transcript inspection; only an explicitnullrevision may create a transcript wherehas_transcript_uxpreports absence. It rejects stale project or transcript state before action creation, requiresconfirm_destructive: trueand a boundedoperation_id, accepts at most 24 KiB UTF-8 JSON, and does not accept a selected item or name as a mutation target. A successful transaction is still reportedcommitted_unverifiedwhen the capped export readback is unavailable or differs.export_aaf_uxp:output_file_pathis non-empty and at most 4096 characters. Its optional allow-listedoptionsfields are booleanmixdown_video,explode_to_mono,embed_audio,trim_sources,render_audio_effects,interleave_without_effects, andpreserve_parent_folder;sample_rateone of 32000, 44100, 48000, 88200, or 96000;bits_per_sampleone of 16, 24, or 32;audio_file_formataifforwav;handle_framesan integer from 0 to 10000; andvideo_mixdown_preset_pathat most 4096 characters.
The exact schemas are exercised by the repository's tests/tools/adobe-26-3-uxp-catalog.test.ts
and tests/uxp/adobe-26-3-commands.test.ts contract tests. These are interface
tests with a mock UXP host, not host integration tests.
- Keep existing CEP tools for their documented compatibility range. UXP is the preferred backend only when the exact UXP command is advertised as supported.
- Do not select a backend based only on
host.minVersion; inspect the live capability response for the active project and installed Premiere build. - For action mutations, create and add the action synchronously inside the
lockedAccess/executeTransactionboundary. Do not await inside either callback or return an action for later use. - Treat
Sequence.setSelection()as synchronous in 26.3; removeawaitor.then()chaining from callers. This change is independent of the guarded MCP commands but required for 26.3 compatibility. - Do not silently fall back after a UXP mutation error. Return backend,
operationId, result envelope, and verification state so the caller can inspect the host before deliberately choosing another operation.
Automated tests may prove these properties:
- MCP tools/list exposes documented UXP tools only with a UXP bridge;
- public schemas reject invalid shapes and translate into the documented protocol command names and camelCase arguments;
- capability probes report unavailable APIs without optimistic version guessing and distinguish the 26.3 native transcript check from its older export-probe fallback;
- sequence-range updates require the complete read snapshot, place all requested actions in one transaction, and reject a changed sequence or range before action construction;
- sequence-playhead requests reject stale sequence or position snapshots, serialize concurrent setters per sequence, and require boolean acceptance plus position readback;
- sequence-timing inspection probes every required getter, accepts only positive
integral
RectFvalues within Premiere's documented 10,240x8,192 sequence maximum and non-negative integralTimeDisplay.typecodes, bounds Project-item identity values, and rejects an active sequence mismatch at read completion; it does not prove detection of a transient switch back to the same sequence; and - sequence-display-format updates require a complete two-code snapshot and sequence GUID, reject stale values within the same per-sequence exclusion boundary, accept only runtime-advertised official constants, commit one settings action, replay a completed operation ID, and verify native readback; and
- source-media timing updates require confirmation plus a complete timing snapshot, serialize conflicting requests per project-item ID, reject an old snapshot before action construction, commit one action in one transaction, replay completed operation IDs, and require start/duration readback; and
- transcript import rejects unknown/unbounded input, missing confirmation, stale project or transcript revisions, and oversized project traversal before it creates an action; it serializes distinct operation IDs for one clip, commits exactly one transaction, replays a completed operation ID, and reports only an exact capped transcript-export SHA-256 match as verified; and
- action commands preserve lock/transaction boundaries and operation replay behavior in a contract host; and
- AAF options are bounded before a call reaches the host adapter.
They do not prove an Adobe host loaded the panel, accepted a transaction, wrote an AAF, or produced a usable Undo entry. Before release, validate on a real Premiere 26.3+ installation with the UXP Developer Tool and an authenticated bridge:
- Confirm
capabilities.getreports all intended commands supported. - Rename video, audio, and caption tracks; read each name back and Undo it.
- Create video-only, audio-only, and combined subclips; inspect item identity, media inclusion, in/out points, and hard-boundary behavior; then Undo.
- List existing markers twice and confirm their GUIDs are stable for the same project state.
- Set the Source Monitor position and read the position back with a sensible time tolerance.
- Inspect a sequence range, change one field and all three fields, verify the returned values, and Undo each update. Confirm stale range snapshots fail before changing the sequence.
- Inspect sequence timing, switch to another active sequence before readback completes, and confirm the command rejects the final mismatch. For an unchanged sequence, compare frame size, timebase, both time-display codes, and the backing Project-item identity with the Premiere UI. A transient switch that returns to the same sequence is outside this command's proof boundary.
- Inspect display formats, change audio and video codes separately and together,
confirm both codes read back, repeat an
operation_idwithout a second transaction, confirm a stale full snapshot is rejected, and Undo each accepted update. - Inspect one source clip's media timing, update its start from the returned
snapshot, confirm the requested start and unchanged duration read back, retry the
same
operation_id, exercise a stale snapshot, and Undo the accepted action. - Check both a transcribed and non-transcribed clip with
transcript.has. - Export an AAF with representative options; confirm the resulting artifact is present, opens in the intended downstream workflow, and any requested media side effects match the options.
- Disconnect/reconnect the panel and exercise duplicate
operation_idcalls; confirm that a completed mutation is replayed rather than repeated in the same panel session.
Only this final evidence can change a command's release status from
committed_unverified or supported_pending_live_host to verified for a
specific Premiere version and platform.
- Premiere Pro UXP 26.3 changelog
- AudioTrack
createSetNameAction, with matchingVideoTrackandCaptionTrackmethods - ClipProjectItem
createSubClipAction - Marker
guid - SourceMonitor
setPosition - Sequence range actions, timing accessors, and display formats
- ClipProjectItem and Media timing/start actions
- Transcript
hasTranscript - ProjectConverter
exportAAFand AAFExportOptions - Adobe official UXP samples