feat: initial commit - Jhonny Editor
- Adicionado estrutura completa do projeto - Configurado MCP server para Premiere Pro - Adicionado documentação e skills - Configurado Gitignore para o projeto
This commit is contained in:
Executable
+21
@@ -0,0 +1,21 @@
|
||||
# Recommendation 21: stateless MCP 2026-07-28 migration
|
||||
|
||||
## Evidence
|
||||
|
||||
MCP 2026-07-28 removes the initialization handshake and protocol session. Each request carries its protocol version and client capabilities, while discovery moves to `server/discover`.
|
||||
|
||||
- [MCP 2026-07-28 release](https://blog.modelcontextprotocol.io/posts/2026-07-28)
|
||||
- [MCP stateless proposal](https://modelcontextprotocol.io/seps/2575-stateless-mcp)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Add a negotiated 2026-07-28 HTTP path while preserving the current legacy path. Make every request independently validate version, client capabilities, authentication, and server identity; remove any hidden dependency on transport affinity.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Tests distribute consecutive requests across fresh server instances without losing application handles.
|
||||
- Legacy clients negotiate the existing protocol rather than receiving partial 2026 behavior.
|
||||
- Unsupported versions fail with the specified typed error.
|
||||
- A migration document identifies every session-derived assumption.
|
||||
|
||||
Stateless transport does not make Premiere project state stateless or prove host execution.
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
# Recommendation 22: MRTR confirmation for consequential edits
|
||||
|
||||
## Evidence
|
||||
|
||||
MCP 2026-07-28 introduces `InputRequiredResult` so a server can request user input during an active call and the client can retry with `inputResponses`.
|
||||
|
||||
- [MCP key changes](https://modelcontextprotocol.io/specification/2026-07-28/changelog)
|
||||
- [MCP release candidate details](https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Use MRTR for overwrite, delete, relink, and export-overwrite confirmations when the client advertises support. Bind the response to a canonical operation digest, project revision, expiry, and authenticated principal.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- A changed plan, project revision, principal, or expired prompt invalidates the response.
|
||||
- Clients without MRTR receive the existing explicit-token flow.
|
||||
- Retries are idempotent before the host commit boundary.
|
||||
- Tests cover approve, decline, replay, mismatch, and disconnect.
|
||||
|
||||
MRTR is a confirmation transport, not evidence that a human understood the edit.
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
# Recommendation 23: MCP routing-header integrity
|
||||
|
||||
## Evidence
|
||||
|
||||
MCP 2026-07-28 adds `Mcp-Method` and `Mcp-Name` headers for routing without parsing request bodies and defines `HeaderMismatchError` when they disagree with the JSON-RPC payload.
|
||||
|
||||
- [MCP key changes](https://modelcontextprotocol.io/specification/2026-07-28/changelog)
|
||||
- [MCP SDK release overview](https://blog.modelcontextprotocol.io/posts/sdk-betas-2026-07-28)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Validate routing headers against the parsed body before authentication scope selection or dispatch. Treat headers as bounded routing hints, never as independent authorization facts, and redact sensitive resource names from access logs.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Missing, duplicate, oversized, and mismatched headers have deterministic outcomes.
|
||||
- Proxies cannot authorize one tool while dispatching another.
|
||||
- Header values use strict byte and character limits.
|
||||
- Compatibility tests cover clients from both protocol generations.
|
||||
|
||||
This complements exact HTTP route admission; it addresses semantic routing after admission.
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
# Recommendation 24: per-request capability envelope
|
||||
|
||||
## Evidence
|
||||
|
||||
In stateless MCP, every request carries protocol version and client capabilities in `_meta`; servers publish their identity and capabilities through discovery and result metadata.
|
||||
|
||||
- [SEP-2575: Make MCP Stateless](https://modelcontextprotocol.io/seps/2575-stateless-mcp)
|
||||
- [MCP 2026-07-28 release](https://blog.modelcontextprotocol.io/posts/2026-07-28)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Create one validated request envelope used by tool, prompt, and resource handlers. It should normalize protocol version, client capabilities, client identity, auth scope, request ID, and advertised response features before business logic runs.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Missing required capabilities fail before any bridge call.
|
||||
- Unknown optional capabilities are ignored and recorded with bounded cardinality.
|
||||
- Result metadata reports the actual server version handling the call.
|
||||
- Fuzz tests cover malformed and adversarial `_meta` objects.
|
||||
|
||||
Client metadata is self-asserted unless independently authenticated.
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
# Recommendation 25: formal MCP extension negotiation
|
||||
|
||||
## Evidence
|
||||
|
||||
MCP 2026-07-28 establishes a formal extensions framework so optional features can evolve without silently changing the protocol core.
|
||||
|
||||
- [MCP 2026-07-28 release](https://blog.modelcontextprotocol.io/posts/2026-07-28)
|
||||
- [MCP release candidate](https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Add a single extension registry describing supported versions, stability, required client capabilities, configuration gates, and fallback behavior. Route Tasks and future UI integrations through it instead of scattered feature flags.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Unknown or incompatible extensions never alter core tool behavior.
|
||||
- Experimental extensions are disabled by default and labeled in discovery.
|
||||
- Registry snapshots are contract-tested across releases.
|
||||
- Each extension documents downgrade and removal behavior.
|
||||
|
||||
Advertising an extension means protocol support only, not Premiere host support.
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
# Recommendation 26: request-scoped observability migration
|
||||
|
||||
## Evidence
|
||||
|
||||
MCP 2026-07-28 removes `logging/setLevel`; protocol logs become a per-request opt-in through `_meta`. The specification also formalizes deprecation of the older logging capability.
|
||||
|
||||
- [MCP stateless proposal](https://modelcontextprotocol.io/seps/2575-stateless-mcp)
|
||||
- [Python SDK migration guide](https://py.sdk.modelcontextprotocol.io/migration)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Separate client-visible diagnostic logs from server telemetry. Honor the negotiated request log level, correlate all records with operation and bridge IDs, and export privacy-filtered traces and metrics independently of MCP notifications.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- No protocol log is emitted without explicit per-request opt-in.
|
||||
- Secrets, media paths, transcript text, and project names are redacted by default.
|
||||
- Trace sampling and label cardinality are bounded.
|
||||
- Legacy logging behavior is version-gated and removal-dated.
|
||||
|
||||
Telemetry can diagnose a call but cannot prove the visual result in Premiere.
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
# Recommendation 27: protocol deprecation ledger
|
||||
|
||||
## Evidence
|
||||
|
||||
The 2026-07-28 MCP revision removes the initialization handshake, protocol sessions, `logging/setLevel`, and top-level `roots/list`, while establishing a formal deprecation policy.
|
||||
|
||||
- [MCP 2026-07-28 changelog](https://modelcontextprotocol.io/specification/2026-07-28/changelog)
|
||||
- [SEP-2575](https://modelcontextprotocol.io/seps/2575-stateless-mcp)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Maintain a machine-readable ledger for every deprecated protocol behavior: first warning version, replacement, telemetry signal, planned removal, compatibility tests, and operator override.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- CI fails when deprecated code lacks an owner or removal condition.
|
||||
- Release notes are generated from the ledger without overstating compatibility.
|
||||
- Usage telemetry is aggregate and privacy-safe.
|
||||
- Removing a path requires zero observed use or an explicit breaking release decision.
|
||||
|
||||
The ledger governs server compatibility, not Adobe API deprecations unless separately listed.
|
||||
Executable
+20
@@ -0,0 +1,20 @@
|
||||
# Recommendation 28: MCP error taxonomy and allocation
|
||||
|
||||
## Evidence
|
||||
|
||||
MCP 2026-07-28 reserves JSON-RPC server error codes `-32020` through `-32099` for the specification and defines typed errors for header mismatch, missing capability, and unsupported version.
|
||||
|
||||
- [MCP key changes](https://modelcontextprotocol.io/specification/2026-07-28/changelog)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Create a central error registry that keeps protocol-reserved errors separate from Premiere, bridge, validation, authentication, and internal failures. Map errors to retryability, mutation certainty, safe client text, and telemetry class.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- No implementation-defined error uses the protocol-reserved range.
|
||||
- Every bridge failure states whether a host mutation may have committed.
|
||||
- Stack traces and private paths never reach clients.
|
||||
- Snapshot tests lock codes, shapes, and backward-compatible text fallbacks.
|
||||
|
||||
A structured error reports uncertainty; it must not convert unknown host state into failure or success.
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
# Recommendation 29: UXP API-era compatibility adapter
|
||||
|
||||
## Evidence
|
||||
|
||||
Adobe changed `Sequence.setSelection` in Premiere 26.3 from asynchronous `Promise<boolean>` to synchronous `boolean`, demonstrating that host-version differences can change call semantics.
|
||||
|
||||
- [Adobe UXP changelog](https://developer.adobe.com/premiere-pro/uxp/changelog)
|
||||
- [Adobe Sequence reference](https://developer.adobe.com/premiere-pro/uxp/ppro-reference/classes/sequence)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Centralize version-sensitive Adobe calls behind typed adapters that normalize sync/async returns without guessing support. Generate an audited compatibility table from official declarations and runtime probes.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- The 25.x and 26.3 selection signatures have explicit contract fixtures.
|
||||
- Unknown versions fail closed for mutations and expose diagnostics.
|
||||
- Runtime probes do not mutate user projects.
|
||||
- Direct version-sensitive calls outside the adapter fail lint or review checks.
|
||||
|
||||
Contract fixtures are not a substitute for runs in each licensed host version.
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
# Recommendation 30: signed host capability attestation
|
||||
|
||||
## Evidence
|
||||
|
||||
Adobe documents host and UXP runtime version inspection, while Premiere APIs declare minimum versions per method. Static package declarations can therefore differ from the connected runtime.
|
||||
|
||||
- [Understanding UXP APIs](https://developer.adobe.com/premiere-pro/uxp/resources/fundamentals/apis)
|
||||
- [Adobe UXP changelog](https://developer.adobe.com/premiere-pro/uxp/changelog)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Have the authenticated panel produce a nonce-bound capability attestation containing host version, UXP version, plugin build hash, probed stable methods, and timestamp. Bind it to the current WebSocket connection and expire it quickly.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Replayed, expired, cross-connection, and mismatched-build attestations are rejected.
|
||||
- Probes are read-only and bounded.
|
||||
- Tool discovery uses the attested intersection, not package-version assumptions.
|
||||
- Diagnostics distinguish declared, probed, and live-verified capability.
|
||||
|
||||
Attestation proves what the panel observed, not that a later host operation succeeded.
|
||||
Executable
+20
@@ -0,0 +1,20 @@
|
||||
# Recommendation 31: Adobe sample parity drift check
|
||||
|
||||
## Evidence
|
||||
|
||||
Adobe’s official Premiere UXP samples exercise projects, sequences, markers, metadata, effects, exports, encoder, transcripts, and project conversion, with manifests treated as authoritative for version compatibility.
|
||||
|
||||
- [Adobe Premiere UXP samples](https://github.com/AdobeDocs/uxp-premiere-pro-samples)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Add a scheduled, review-only drift job that compares pinned Adobe sample manifests and package versions with this repository’s coverage manifest. Produce candidate gaps without automatically enabling tools or beta APIs.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Inputs are pinned by commit SHA and artifact hash.
|
||||
- Changes open an auditable report, not an automatic production mutation.
|
||||
- Stable and beta declarations remain separate.
|
||||
- Removed or changed APIs create blocking review items for affected tools.
|
||||
|
||||
Sample usage is implementation guidance, not a compatibility guarantee.
|
||||
bm/premiere-pro-mcp-main/docs/recommendations/2026-08-18-round-2/32-transaction-deadline-readback.md
Executable
+21
@@ -0,0 +1,21 @@
|
||||
# Recommendation 32: transaction deadline and readback budget
|
||||
|
||||
## Evidence
|
||||
|
||||
Adobe UXP mutations are expressed as actions and executed through project transactions; many surrounding reads remain asynchronous and can stall independently.
|
||||
|
||||
- [Adobe Sequence reference](https://developer.adobe.com/premiere-pro/uxp/ppro-reference/classes/sequence)
|
||||
- [Understanding UXP APIs](https://developer.adobe.com/premiere-pro/uxp/resources/fundamentals/apis)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Define separate deadlines for preflight, synchronous action construction, transaction execution, and post-commit readback. Return a receipt that identifies the last known phase and never retries an uncertain mutation automatically.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Tests inject timeouts at every phase and assert mutation certainty.
|
||||
- Readback exhaustion returns `committed_unverified`, not false failure.
|
||||
- The scheduler prevents a timed-out call from releasing unsafe conflicting work.
|
||||
- Phase budgets are configurable within capped limits.
|
||||
|
||||
A completed transaction still requires host readback or human observation for outcome claims.
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
# Recommendation 33: generated UXP permission minimization
|
||||
|
||||
## Evidence
|
||||
|
||||
Adobe UXP manifests explicitly declare network and local-file-system permissions. Permission scope is part of the install-time trust boundary.
|
||||
|
||||
- [Adobe UXP manifest](https://developer.adobe.com/premiere-pro/uxp/plugins/concepts/manifest/)
|
||||
- [Adobe UXP network recipe](https://developer.adobe.com/premiere-pro/uxp/resources/recipes/network)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Generate release manifests from a reviewed permission policy and fail CI on undeclared expansion. Separate development, benchmark, and production permissions; include a human-readable permission diff in releases.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Production never inherits development-only addon or network permissions.
|
||||
- New permissions require rationale, threat analysis, and explicit review.
|
||||
- Runtime endpoints are still validated even when Adobe requires a broad domain declaration.
|
||||
- Packaged manifest hashes are verified in release provenance.
|
||||
|
||||
Manifest minimization reduces exposure but does not replace runtime authentication.
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
# Recommendation 34: UXP filesystem token lifecycle
|
||||
|
||||
## Evidence
|
||||
|
||||
UXP local filesystem access is permission-gated and user-selected entries may be represented by persistent tokens rather than unrestricted native paths.
|
||||
|
||||
- [Adobe UXP manifest](https://developer.adobe.com/premiere-pro/uxp/plugins/concepts/manifest/)
|
||||
- [Adobe UXP file-system recipes](https://developer.adobe.com/premiere-pro/uxp/resources/recipes/)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Introduce a token broker that records purpose, project binding, creation time, last use, and revocation without exposing raw tokens to MCP clients. Re-prompt when a token is stale or no longer resolves.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Tokens are encrypted at rest or remain solely in UXP-managed storage.
|
||||
- Logs and tool results never contain token values.
|
||||
- Revocation, moved files, and denied reauthorization fail deterministically.
|
||||
- Cleanup is bounded by age and count with explicit user controls.
|
||||
|
||||
A valid token authorizes filesystem access only; it does not validate media contents.
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
# Recommendation 35: versioned UXP bridge protocol
|
||||
|
||||
## Evidence
|
||||
|
||||
Adobe’s UXP runtime and Premiere API surface evolve independently, while this project connects the panel through an authenticated loopback WebSocket.
|
||||
|
||||
- [Understanding UXP APIs](https://developer.adobe.com/premiere-pro/uxp/resources/fundamentals/apis)
|
||||
- [Adobe UXP changelog](https://developer.adobe.com/premiere-pro/uxp/changelog)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Version the panel/server hello, command envelope, event envelope, error shape, and feature flags. Negotiate the highest mutually supported bridge version and reject ambiguous downgrade.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Cross-version fixtures cover the current and previous supported bridge version.
|
||||
- Unknown commands and fields have documented forward-compatibility behavior.
|
||||
- Downgrade cannot bypass authentication or capability checks.
|
||||
- Fuzz tests bound nesting, arrays, strings, and numeric values after frame parsing.
|
||||
|
||||
Bridge negotiation is distinct from MCP protocol and Adobe host-version negotiation.
|
||||
Executable
+20
@@ -0,0 +1,20 @@
|
||||
# Recommendation 36: privacy-safe context retention policy
|
||||
|
||||
## Evidence
|
||||
|
||||
Stateless MCP permits explicit application handles for state that must survive calls; it does not require indefinite application storage.
|
||||
|
||||
- [MCP stateless release candidate](https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Add per-project TTL, byte quota, transcript opt-in, field-level redaction, compaction receipts, and delete/export controls to the project-context store. Keep operational state separate from model-ready summaries.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Raw transcript text is disabled by default for persistent context.
|
||||
- Quota enforcement is deterministic and never evicts an active write silently.
|
||||
- Delete removes primary and derived records with an audit receipt that contains no content.
|
||||
- Tests cover crash recovery, clock skew, corruption, and concurrent compaction.
|
||||
|
||||
Retention policy reduces stored data; it does not make model inference private by itself.
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
# Recommendation 37: transcript round-trip integrity
|
||||
|
||||
## Evidence
|
||||
|
||||
Adobe’s stable UXP `Transcript` API can export transcript JSON, import JSON into text segments, create an import action, query supported languages, and test transcript presence.
|
||||
|
||||
- [Adobe Transcript reference](https://developer.adobe.com/premiere-pro/uxp/ppro-reference/classes/transcript)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Add a dry-run transcript importer that validates schema, language metadata, time ordering, clip identity, and a canonical content digest before constructing an Adobe action. Verify post-commit presence and bounded export equivalence.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Malformed, overlapping, out-of-range, and wrong-clip segments fail before mutation.
|
||||
- Confirmation binds the canonical digest and project revision.
|
||||
- Readback reports semantic differences without leaking transcript text into logs.
|
||||
- Real-host fixtures cover supported languages and large transcripts.
|
||||
|
||||
JSON equivalence does not prove word-level alignment or transcription accuracy.
|
||||
Executable
+20
@@ -0,0 +1,20 @@
|
||||
# Recommendation 38: metadata batch planner
|
||||
|
||||
## Evidence
|
||||
|
||||
Adobe’s production-style metadata sample supports column copy/exchange, batch prefix/suffix/numbering, metadata export, and clip-marker export.
|
||||
|
||||
- [Adobe Premiere UXP samples](https://github.com/AdobeDocs/uxp-premiere-pro-samples)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Create a bounded metadata plan/preview/apply workflow with explicit namespaces, typed coercion, per-item expected values, conflict detection, and chunked transactions. Default to exporting a rollback artifact before changes.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Preview identifies writable fields, collisions, truncation, and no-op edits.
|
||||
- Apply requires exact project revision and plan digest.
|
||||
- Partial batches return per-item certainty and never retry unknown commits.
|
||||
- Sensitive metadata fields are excluded unless explicitly allowlisted.
|
||||
|
||||
Adobe’s sample demonstrates a workflow pattern; real project schemas still require host validation.
|
||||
bm/premiere-pro-mcp-main/docs/recommendations/2026-08-18-round-2/39-sequence-sandbox-verification.md
Executable
+20
@@ -0,0 +1,20 @@
|
||||
# Recommendation 39: sequence-sandbox verification mode
|
||||
|
||||
## Evidence
|
||||
|
||||
Adobe’s stable `Sequence.createCloneAction` can clone a sequence through an undoable action.
|
||||
|
||||
- [Adobe Sequence reference](https://developer.adobe.com/premiere-pro/uxp/ppro-reference/classes/sequence)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Offer an opt-in verification mode that clones the target sequence, applies a proposed edit plan only to the clone, captures bounded structural diffs, and requires a separate confirmation before applying an independently revalidated plan to the original.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Clone names and IDs are collision-safe and traceable to an operation receipt.
|
||||
- The original sequence is never targeted during sandbox execution.
|
||||
- Cleanup is explicit and refuses deletion if identity or revision changed.
|
||||
- Tests cover clone failure, partial apply, user edits, and stale confirmation.
|
||||
|
||||
Success on a clone does not guarantee identical rendering or a safe original apply.
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
# Recommendation 40: export artifact reconciliation
|
||||
|
||||
## Evidence
|
||||
|
||||
Adobe’s stable `EncoderManager` supports Premiere and AME export workflows, and its events distinguish queue, progress, completion, error, and cancellation.
|
||||
|
||||
- [Adobe EncoderManager reference](https://developer.adobe.com/premiere-pro/uxp/ppro-reference/classes/encodermanager/)
|
||||
- [Adobe UXP changelog](https://developer.adobe.com/premiere-pro/uxp/changelog)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Add an export reconciler that joins operation receipts, encoder events, expected destination, artifact stat/hash, and optional media probe into one state machine. On restart, recover only from durable evidence and never re-submit an uncertain job automatically.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- States distinguish queued, rendering, cancelled, failed, completed-no-artifact, and verified-artifact.
|
||||
- Event gaps and duplicate events produce explicit uncertainty.
|
||||
- Overwrite policy and artifact identity are bound to the original confirmation.
|
||||
- Windows/macOS live-host runs cover Premiere and AME paths.
|
||||
|
||||
An artifact hash proves file identity, not visual or editorial correctness.
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
# Recommendation 01: exact HTTP route admission
|
||||
|
||||
## Evidence
|
||||
|
||||
The MCP HTTP transport is a security boundary. The current server accepts any URL
|
||||
whose text starts with `/mcp`, so `/mcp-typo` reaches the authenticated transport.
|
||||
The latest MCP transport guidance expects one configured endpoint, and the existing
|
||||
roadmap already requires rejection before server construction.
|
||||
|
||||
- [MCP 2026-07-28 transport specification](https://modelcontextprotocol.io/specification/2026-07-28/basic/transports)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Parse the request URL once and admit only the exact `/mcp` pathname. Allow only the
|
||||
methods supported by Streamable HTTP, return `404` for other paths and `405` with an
|
||||
`Allow` header for other methods, and do this before authentication telemetry or MCP
|
||||
server allocation.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- `/mcp`, `/mcp?client=x`, and the health route retain documented behavior.
|
||||
- `/mcp-typo`, encoded separator variants, and unsupported methods never construct a server.
|
||||
- Unit tests cover malformed URLs without exposing request headers or tokens.
|
||||
|
||||
This is transport hardening only; it does not validate a live Premiere host.
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
# Recommendation 02: bound HTTP requests and sockets
|
||||
|
||||
## Evidence
|
||||
|
||||
Remote MCP requests can currently consume an unbounded body and inherit Node's
|
||||
generic timeout behavior. MCP tools can drive Premiere, so parsing and socket limits
|
||||
must apply before a transport or host operation is allocated.
|
||||
|
||||
- [MCP security best practices](https://modelcontextprotocol.io/specification/2026-07-28/basic/security_best_practices)
|
||||
- [Node HTTP server timeouts](https://nodejs.org/api/http.html#class-httpserver)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Add validated environment settings for maximum body bytes, headers timeout, request
|
||||
timeout, keep-alive timeout, and maximum requests per socket. Count bytes while the
|
||||
request streams and return deterministic `408` or `413` responses before MCP parsing.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- Oversized and slow requests never invoke `createServer` or a Premiere bridge.
|
||||
- Invalid configuration fails startup instead of silently disabling a limit.
|
||||
- Boundary tests cover chunked bodies, declared lengths, disconnects, and exact limits.
|
||||
|
||||
This is remote-transport containment, not proof of host cancellation.
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
# Recommendation 03: authorization-scoped throttling
|
||||
|
||||
## Evidence
|
||||
|
||||
Authentication establishes who may call tools but does not bound request rate. MCP
|
||||
security guidance recommends defense in depth for exposed authorization boundaries.
|
||||
|
||||
- [MCP authorization security](https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Add a bounded token-bucket limiter keyed by a one-way credential fingerprint, with
|
||||
trusted-proxy-aware IP fallback only when explicitly configured. Reject before MCP
|
||||
server construction, cap key cardinality, expire idle buckets, and emit aggregate
|
||||
telemetry without tokens, IP addresses, arguments, or project data.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- Burst and sustained limits have deterministic `429` behavior and `Retry-After`.
|
||||
- Different credentials do not consume each other's budgets.
|
||||
- Memory remains bounded under rotating identifiers and process restart semantics are documented.
|
||||
- Fly/edge limits remain recommended because one-process counters are not account-wide.
|
||||
|
||||
This control supplements authentication; it does not replace it.
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
# Recommendation 04: Premiere operation scheduler
|
||||
|
||||
## Evidence
|
||||
|
||||
Concurrent MCP requests can reach one interactive Premiere host. Adobe UXP mutations
|
||||
are committed through project transactions, but that does not serialize independent
|
||||
requests or make a timed-out mutation safe to replay.
|
||||
|
||||
- [Adobe Project.executeTransaction](https://developer.adobe.com/premiere-pro/uxp/ppro-reference/classes/project/#executetransaction)
|
||||
- [MCP cancellation](https://modelcontextprotocol.io/specification/2026-07-28/basic/utilities/cancellation)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Introduce one FIFO mutation lane plus configurable safe-read concurrency. Classify
|
||||
before enqueueing, bound queue length and wait time, attach operation IDs, and stop
|
||||
queued work on disconnect. Never claim cancellation after the host commit boundary.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- Mutations cannot overlap; explicitly safe reads demonstrate bounded parallelism.
|
||||
- Queue overflow and expiry return stable overload errors without host calls.
|
||||
- Tests cover fairness, disconnects, timeouts, and mutation/read classification.
|
||||
- Metrics expose counts and timings only, never project or tool arguments.
|
||||
|
||||
Contract tests cannot replace a real-host concurrency run.
|
||||
@@ -0,0 +1,26 @@
|
||||
# Recommendation 05: negotiated MCP Tasks
|
||||
|
||||
## Evidence
|
||||
|
||||
The 2026-07-28 MCP release adds standardized long-running task semantics. Premiere
|
||||
exports, proxy generation, transcription, and analysis can exceed an interactive
|
||||
request, while Adobe APIs may offer no mid-call cancellation point.
|
||||
|
||||
- [MCP 2026-07-28 release](https://blog.modelcontextprotocol.io/posts/2026-07-28)
|
||||
- [MCP Tasks extension](https://modelcontextprotocol.io/seps/2663-tasks-extension)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Negotiate Tasks and initially wrap exports only. Use authorization-scoped random
|
||||
IDs, bounded retention, progress, expiry, and precise queued/running/committed states.
|
||||
Keep the synchronous path for clients without support and persist no project args or
|
||||
results containing media data.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- Compatible clients can start, inspect, cancel, and retrieve an export result.
|
||||
- Incompatible clients never receive an unknown task handle.
|
||||
- Restart and cancellation tests define recoverable states and commit boundaries.
|
||||
- Task count, retention bytes, and telemetry cardinality are capped.
|
||||
|
||||
Tasks do not make a blocking Adobe export API cancellable.
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
# Recommendation 06: strict tool output schemas
|
||||
|
||||
## Evidence
|
||||
|
||||
MCP 2026-07-28 tools may advertise `outputSchema`. The server returns structured
|
||||
results but does not publish or validate per-tool output contracts, leaving clients
|
||||
unable to distinguish schema drift from host failures.
|
||||
|
||||
- [MCP tools specification](https://modelcontextprotocol.io/specification/2026-07-28/server/tools)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Add shared success/error/verification schemas and migrate read-only diagnostics first.
|
||||
Validate `structuredContent` before return, preserve the text block for compatibility,
|
||||
and maintain a machine-readable waiver list for unmigrated tools.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- Every migrated tool publishes valid JSON Schema 2020-12 output.
|
||||
- Representative success and failure paths reject schema drift in CI.
|
||||
- Error codes, operation semantics, and verification boundaries are typed.
|
||||
- Schema failure never converts an ambiguous host mutation into a retry.
|
||||
|
||||
Start with read-only tools; mutation migration needs separate host evidence.
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
# Recommendation 07: JSON Schema constraint fidelity
|
||||
|
||||
## Evidence
|
||||
|
||||
Tool parameters are authored as JSON Schema but the server's JSON-Schema-to-Zod
|
||||
adapter currently preserves types and string enums while dropping bounds such as
|
||||
`minLength`, `maxLength`, numeric limits, and array limits. MCP treats input schemas
|
||||
as the tool contract.
|
||||
|
||||
- [MCP tools specification](https://modelcontextprotocol.io/specification/2026-07-28/server/tools)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Compile supported constraints into Zod, reject unsupported schema keywords during CI,
|
||||
add integer and non-string enum support, and cap schema depth/size. Do not silently
|
||||
coerce values or apply defaults that change existing tool behavior.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- Boundary tests cover strings, numbers, integers, arrays, enums, and nested objects.
|
||||
- Every catalog schema compiles deterministically with a bounded cache.
|
||||
- Unsupported keywords produce a build-time migration report.
|
||||
- Existing valid client calls remain compatible.
|
||||
|
||||
This improves server-side validation; it does not validate Adobe host semantics.
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
# Recommendation 08: contained artifact resource links
|
||||
|
||||
## Evidence
|
||||
|
||||
MCP tool results can return resource links and embedded resources. Export, AAF, and
|
||||
compatibility reports currently describe paths in ordinary result data, which is
|
||||
hard for clients to consume safely.
|
||||
|
||||
- [MCP tool result content](https://modelcontextprotocol.io/specification/2026-07-28/server/tools)
|
||||
- [MCP resource security](https://modelcontextprotocol.io/specification/2026-07-28/server/resources)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Create authorization-scoped artifact IDs and expose only registered, size-bounded
|
||||
files under a dedicated URI scheme. Canonicalize paths, reject links/reparse points,
|
||||
set short expirations, and never turn an arbitrary tool-supplied path into a resource.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- Export/report results include a resource link only after artifact registration.
|
||||
- Traversal, alternate separators, symlinks, oversized files, and expired IDs fail closed.
|
||||
- Resource reads recheck authorization and MIME type.
|
||||
- Existing text and structured results remain available to older clients.
|
||||
|
||||
Artifact existence still requires post-export verification.
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
# Recommendation 09: workflow-scoped tool packs
|
||||
|
||||
## Evidence
|
||||
|
||||
The server advertises 285 core tools. Large discovery payloads consume client context
|
||||
and make correct-tool selection harder. MCP discovery is capability-driven, and the
|
||||
2026-07-28 release adds cache metadata for list results.
|
||||
|
||||
- [MCP 2026-07-28 release](https://blog.modelcontextprotocol.io/posts/2026-07-28)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Define versioned essential, rough-cut, audio, captions, color, delivery, inspection,
|
||||
and advanced packs. Operator selection controls visibility only; authority checks
|
||||
remain separate and direct calls to hidden unauthorized tools stay denied.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- Every tool belongs to at least one pack and retains an authority classification.
|
||||
- Essential completes diagnosis, inspection, safe preview, save, and delivery.
|
||||
- Full-catalog mode remains available through a documented compatibility window.
|
||||
- Benchmarks measure list bytes, schema time, prompt tokens, and correct-tool selection.
|
||||
|
||||
Tool packs are context optimization, not an authorization mechanism.
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
# Recommendation 10: cacheable discovery with invalidation
|
||||
|
||||
## Evidence
|
||||
|
||||
MCP 2026-07-28 adds `ttlMs` and `cacheScope` to list results. This server repeatedly
|
||||
builds large tool catalogs whose contents vary with authority and UXP connection state.
|
||||
|
||||
- [MCP 2026-07-28 release](https://blog.modelcontextprotocol.io/posts/2026-07-28)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Return private cache metadata for tools, prompts, and resources when the installed SDK
|
||||
supports it. Key caches by server version, authority profile, selected tool pack, UXP
|
||||
protocol/capabilities, and connector state. Emit list-changed notifications only to
|
||||
clients that negotiate them, coalescing connection churn.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- Cache keys never cross authorization profiles.
|
||||
- UXP connect/disconnect and pack changes invalidate discovery deterministically.
|
||||
- Repeated list benchmarks show lower serialization work and bytes transferred.
|
||||
- Older clients retain current behavior without unknown fields or notifications.
|
||||
|
||||
No cache may preserve tools after their authority is revoked.
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
# Recommendation 11: UXP bridge backpressure
|
||||
|
||||
## Evidence
|
||||
|
||||
The authenticated UXP bridge bounds each WebSocket frame but its pending-request map
|
||||
has no count limit. A burst can therefore allocate timers and request state faster
|
||||
than a single interactive Premiere host can complete commands.
|
||||
|
||||
- [Adobe UXP network operations](https://developer.adobe.com/premiere-pro/uxp/resources/recipes/network)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Add configurable pending and queued limits, reject excess work before generating a
|
||||
request ID, and expose aggregate active/rejected counters. Coordinate with the future
|
||||
operation scheduler so only one component owns mutation ordering.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- Pending entries and timers never exceed the configured cap.
|
||||
- Rejections have a stable `UXP_OVERLOADED` code and never reach the panel.
|
||||
- Timeout, send failure, disconnect, replacement connection, and stop release capacity.
|
||||
- Load tests demonstrate bounded heap and telemetry cardinality.
|
||||
|
||||
Backpressure does not imply that Adobe host calls are cancellable.
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
# Recommendation 12: remove UXP tokens from URLs
|
||||
|
||||
## Evidence
|
||||
|
||||
The loopback bridge authenticates with a token query parameter. URLs are more likely
|
||||
than headers to appear in diagnostics, proxy logs, screenshots, or error strings.
|
||||
Adobe UXP WebSocket access remains permission-gated by the manifest and runtime URL checks.
|
||||
|
||||
- [Adobe UXP network security](https://developer.adobe.com/premiere-pro/uxp/resources/recipes/network)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Move the secret to a WebSocket subprotocol or supported authorization header while
|
||||
retaining constant-time comparison, loopback binding, exact path checks, and a short
|
||||
documented compatibility window for query authentication. Redact both forms everywhere.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- New panel connections contain no secret in the URL.
|
||||
- Missing, duplicate, malformed, and wrong credentials fail before upgrade.
|
||||
- Logs, telemetry, status UI, and errors never contain credential material.
|
||||
- Compatibility mode is opt-in, warned, tested, and assigned a removal version.
|
||||
|
||||
The chosen mechanism must be proven in Premiere 26.3 UXP, not only browser mocks.
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
# Recommendation 13: UXP connection liveness
|
||||
|
||||
## Evidence
|
||||
|
||||
A TCP/WebSocket connection can remain open while Premiere is modal, suspended, or no
|
||||
longer processing panel messages. Current state reports connected until socket closure
|
||||
or a command timeout, delaying diagnosis and tying up pending work.
|
||||
|
||||
- [Adobe UXP WebSocket guidance](https://developer.adobe.com/premiere-pro/uxp/resources/recipes/network)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Add protocol-level heartbeat sequence numbers and bounded round-trip measurements.
|
||||
Classify `connected`, `degraded`, and `stale`; stop admitting new mutations when stale,
|
||||
but never replay a timed-out mutation after reconnection.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- Heartbeats are authenticated, size-bounded, and excluded from tool telemetry.
|
||||
- Miss thresholds tolerate short event-loop stalls without reconnect storms.
|
||||
- Stale connections reject new work and settle pending requests deterministically.
|
||||
- Diagnostics distinguish socket liveness from successful Premiere host execution.
|
||||
|
||||
Live-host tests must cover modal dialogs, sleep/wake, panel reload, and Premiere exit.
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
# Recommendation 14: revisioned in-panel project index
|
||||
|
||||
## Evidence
|
||||
|
||||
Several UXP commands traverse the complete project tree to resolve items. Adobe exposes
|
||||
stable project/item identities and project events; repeated breadth-first traversal
|
||||
scales poorly and duplicate names must not resolve silently.
|
||||
|
||||
- [Adobe Premiere UXP Project API](https://developer.adobe.com/premiere-pro/uxp/ppro-reference/classes/project)
|
||||
- [Adobe UXP events](https://developer.adobe.com/premiere-pro/uxp/resources/fundamentals/events)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Maintain a bounded index by item GUID, exact name, normalized path hash, type, and
|
||||
parent identity. Increment revisions from documented events and successful commands;
|
||||
when event evidence is incomplete, mark stale and rebuild instead of guessing.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- Duplicate names return bounded matches or require a stable identity.
|
||||
- Entry count/memory are capped and cleared on project close or disconnect.
|
||||
- Lost/coalesced event tests prove a full rebuild restores correctness.
|
||||
- Large fixtures improve p50/p95 lookup without changing command results.
|
||||
|
||||
Mock benchmarks are not live-host performance evidence.
|
||||
Executable
+24
@@ -0,0 +1,24 @@
|
||||
# Recommendation 15: paginated project discovery
|
||||
|
||||
## Evidence
|
||||
|
||||
Large Premiere projects can contain thousands of items. Returning an entire tree in
|
||||
one tool response increases host traversal time, MCP payload size, and model context.
|
||||
Adobe's Project API provides stable items; MCP tools can expose bounded cursors.
|
||||
|
||||
- [Adobe Premiere UXP Project API](https://developer.adobe.com/premiere-pro/uxp/ppro-reference/classes/project)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Add cursor-based, revision-locked project-item discovery with explicit page and field
|
||||
limits. Cursors should be opaque, authorization-scoped, short-lived, and invalidated
|
||||
when the project-index revision changes. Default fields exclude native paths.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- Page size, response bytes, traversal time, and cursor count are bounded.
|
||||
- Changed projects return `refresh_required` rather than mixed-revision pages.
|
||||
- Duplicate names retain stable IDs and parent identity.
|
||||
- Tests cover expired, forged, cross-project, and cross-credential cursors.
|
||||
|
||||
Pagination depends on stable identity but not on undocumented QE behavior.
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
# Recommendation 16: project-context delta capture
|
||||
|
||||
## Evidence
|
||||
|
||||
The durable context engine correctly separates source and timeline revisions, but a
|
||||
capture still rebuilds a bounded active-sequence snapshot. Documented project events
|
||||
and stable identities can reduce repeated work if event loss fails closed.
|
||||
|
||||
- [Adobe UXP events](https://developer.adobe.com/premiere-pro/uxp/resources/fundamentals/events)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Accept an optional prior revision and return added, changed, removed, and retained
|
||||
record IDs. Coalesce event hints, re-read affected records, and force a full capture
|
||||
when event continuity, project identity, truncation, or schema compatibility is uncertain.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- Applying a delta to its exact base equals a fresh full snapshot.
|
||||
- Wrong/stale bases return `full_refresh_required` without partial persistence.
|
||||
- Deltas and event queues are count/byte/time bounded.
|
||||
- Source enrichments survive timeline-only changes and invalidate on source revision changes.
|
||||
|
||||
Events are hints; correctness continues to come from bounded readback.
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
# Recommendation 17: reproducible live-host compatibility lab
|
||||
|
||||
## Evidence
|
||||
|
||||
Adobe's 26.3 UXP changelog includes breaking and new APIs, while automated adapters
|
||||
cannot establish behavior in licensed Premiere builds. The coverage manifest keeps
|
||||
live-host evidence separate but lacks a reproducible collection protocol.
|
||||
|
||||
- [Adobe Premiere UXP changelog](https://developer.adobe.com/premiere-pro/uxp/changelog)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Package privacy-safe small/medium/large fixture manifests and a manual host runner.
|
||||
Record host/OS versions, artifact SHA-256, backend, command, timing phases, observable
|
||||
readback, and outcome—never project/media names, paths, transcripts, or arguments.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- Reports distinguish verified, committed-unverified, unsupported, failed, and not-run.
|
||||
- Evidence promotion requires exact host, OS, artifact hash, command, and readback.
|
||||
- CI validates schemas/fixtures without labeling mocks as Premiere.
|
||||
- Reports include p50/p95/max dispatch, host, verification, and total latency.
|
||||
|
||||
The lab remains manual because CI is not a licensed interactive Premiere host.
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
# Recommendation 18: capability-aware transcript language cache
|
||||
|
||||
## Evidence
|
||||
|
||||
Premiere 26.3 adds `Transcript.querySupportedLanguages()`. Re-querying immutable host
|
||||
metadata for every planning workflow adds round trips, while assuming languages from
|
||||
locale or prior hosts would misrepresent installed capability.
|
||||
|
||||
- [Adobe Premiere UXP changelog](https://developer.adobe.com/premiere-pro/uxp/changelog)
|
||||
- [Adobe Transcript API](https://developer.adobe.com/premiere-pro/uxp/ppro-reference/classes/transcript)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Cache the bounded normalized language list by exact Premiere version, UXP protocol,
|
||||
and connection generation. Invalidate on reconnect or capability change, return cache
|
||||
age/source, and never infer language-pack installation beyond Adobe's returned data.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- Repeated reads on one connection use one host call.
|
||||
- Reconnect, version change, probe failure, and explicit refresh invalidate safely.
|
||||
- Codes/names are normalized, deduplicated, size-bounded, and preserve unknown fields only in debug fixtures.
|
||||
- A query failure returns unavailable, never a stale claim from another host.
|
||||
|
||||
This optimizes capability discovery; it does not start transcription.
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
# Recommendation 19: bounded Object Mask audit
|
||||
|
||||
## Evidence
|
||||
|
||||
Premiere 26.3 exposes `ObjectMaskUtils`, while the public surface currently supports
|
||||
inspection rather than object selection, mask creation, tracking, or parameter edits.
|
||||
The repository correctly exposes a single-target check but not a project-wide audit.
|
||||
|
||||
- [Adobe Premiere UXP changelog](https://developer.adobe.com/premiere-pro/uxp/changelog)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Add a read-only, paginated audit over explicit sequence/project-item identities using
|
||||
only documented `hasObjectMask` probes. Reuse the revisioned index, cap host calls per
|
||||
page, return per-item errors, and do not infer mask quality, tracking state, or editability.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- Inputs require stable IDs; duplicate names never choose a target.
|
||||
- Page size, host calls, duration, response bytes, and error count are bounded.
|
||||
- Stale project revisions require refresh.
|
||||
- Capability reports continue to label creation/tracking/editing unsupported.
|
||||
|
||||
Live Premiere validation must confirm which documented item types the probe accepts.
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
# Recommendation 20: AAF artifact verification
|
||||
|
||||
## Evidence
|
||||
|
||||
Premiere 26.3 adds `ProjectConverter.exportAAF()` and `AAFExportOptions`. The existing
|
||||
UXP tool truthfully records Adobe's boolean return with `outputVerified: false`; a host
|
||||
return alone does not prove that a usable artifact exists.
|
||||
|
||||
- [Adobe Premiere UXP changelog](https://developer.adobe.com/premiere-pro/uxp/changelog)
|
||||
- [Adobe ProjectConverter API](https://developer.adobe.com/premiere-pro/uxp/ppro-reference/classes/projectconverter)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
After a successful host return, verify the approved destination is contained, exists,
|
||||
is a regular non-link file, has a stable nonzero size, and was modified by this operation.
|
||||
Return a scoped artifact link and preserve `usable_in_target_nle: not_verified` unless an
|
||||
independent importer validates it.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- Pre-existing, missing, empty, unstable, linked, and outside-root paths fail verification.
|
||||
- Verification never changes Adobe's host return or silently retries export.
|
||||
- Results separate host-return, filesystem-artifact, and downstream-usability evidence.
|
||||
- Windows/macOS live runs cover success, cancellation, overwrite, and permission failure.
|
||||
|
||||
File existence is not proof that another NLE can import the AAF correctly.
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
# Recommendation 41: filtered MCP subscription stream
|
||||
|
||||
## Evidence
|
||||
|
||||
MCP 2026-07-28 replaces unsolicited change notifications and `resources/subscribe` with one client-opened `subscriptions/listen` stream. Servers must only send notification types and resource URIs accepted by the stream filter.
|
||||
|
||||
- [MCP subscriptions](https://modelcontextprotocol.io/specification/2026-07-28/basic/patterns/subscriptions)
|
||||
- [TypeScript SDK 2026-07-28 migration](https://ts.sdk.modelcontextprotocol.io/v2/migration/support-2026-07-28.html)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Publish tool-catalog, workflow-resource, and privacy-safe project-context changes through a bounded subscription bus. Authorize every requested notification category and URI before acknowledging it, with an in-process default and an explicit multi-replica adapter.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Unrequested notification types and URIs are never delivered.
|
||||
- Slow consumers have bounded queues, coalescing, and explicit overflow semantics.
|
||||
- Legacy notification behavior remains protocol-version gated.
|
||||
- Disconnect, cancellation, reconnect, and multi-tenant isolation have contract tests.
|
||||
|
||||
The stream reports server-side change events; it does not prove Premiere applied an edit.
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
# Recommendation 42: contextual prompt and resource completions
|
||||
|
||||
## Evidence
|
||||
|
||||
MCP completion lets servers suggest up to 100 values for prompt arguments and resource-template variables, optionally using already resolved arguments as context.
|
||||
|
||||
- [MCP completion](https://modelcontextprotocol.io/specification/draft/server/utilities/completion)
|
||||
- [MCP TypeScript SDK completion](https://ts.sdk.modelcontextprotocol.io/v2/servers/completion.html)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Add completions for workflow prompt names, safe operation profiles, project-context handles, and resource-template identifiers. Generate suggestions only from the caller's authorized, current capability view and never expose raw paths or transcript text.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Results are prefix-bounded, deterministic, deduplicated, and capped at 100.
|
||||
- Missing context returns an empty result rather than widening scope.
|
||||
- Stale or unauthorized handles are omitted.
|
||||
- Latency, cardinality, and cross-principal isolation are tested.
|
||||
|
||||
Completion values are usability hints and must still pass normal tool validation.
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
# Recommendation 43: MRTR roots as an explicit workspace boundary
|
||||
|
||||
## Evidence
|
||||
|
||||
MCP roots let clients expose selected file or directory URIs. In MCP 2026-07-28, a server obtains roots during a request through an MRTR `ListRootsRequest` and the client must advertise the roots capability.
|
||||
|
||||
- [MCP roots](https://modelcontextprotocol.io/specification/2026-07-28/client/roots)
|
||||
- [MCP multi-round-trip requests](https://py.sdk.modelcontextprotocol.io/handlers/multi-round-trip)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
For workspace import, preset, interchange, and export operations, intersect configured server policy with client-provided roots. Bind the canonical root set to the operation digest and revalidate it immediately before filesystem access.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Unsupported clients retain the existing explicit-path policy without silent widening.
|
||||
- Symlink, junction, case, encoding, and parent-traversal tests fail closed.
|
||||
- Changed roots invalidate pending confirmation and application handles.
|
||||
- Root names and paths are redacted from default telemetry.
|
||||
|
||||
Client-provided roots describe intended scope; operating-system permissions remain authoritative.
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
# Recommendation 44: resource annotations and context budgets
|
||||
|
||||
## Evidence
|
||||
|
||||
MCP resources and content blocks may declare `audience`, `priority`, and `lastModified` annotations so clients can filter, rank, and reason about freshness.
|
||||
|
||||
- [MCP resources](https://modelcontextprotocol.io/specification/2026-07-28/server/resources)
|
||||
- [MCP tools and embedded resources](https://modelcontextprotocol.io/specification/2026-07-28/server/tools)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Annotate supported-actions, workflow, diagnostics, and project-context resources from a centralized policy. Pair annotations with explicit byte/token budgets, deterministic truncation, and freshness derived from revisioned source data.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Priority is policy-defined and cannot be raised by project content.
|
||||
- `lastModified` reflects the source revision rather than response generation time.
|
||||
- Audience filtering never substitutes for authorization.
|
||||
- Budget and truncation behavior is stable across pagination and cache hits.
|
||||
|
||||
Annotations are client hints, not mandatory context inclusion or a security boundary.
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
# Recommendation 45: prompt and resource injection boundary
|
||||
|
||||
## Evidence
|
||||
|
||||
The MCP prompt specification requires implementations to validate prompt inputs and outputs to prevent injection and unauthorized resource access. Premiere metadata and transcripts are untrusted project content.
|
||||
|
||||
- [MCP prompts security](https://modelcontextprotocol.io/specification/2026-07-28/server/prompts)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Represent project-derived text as labeled data blocks with provenance, size limits, and escaping rather than concatenating it into trusted workflow instructions. Separate server-authored instructions, user arguments, and Premiere-derived content in every prompt renderer.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Adversarial clip names, markers, metadata, and transcripts cannot add server instructions.
|
||||
- Resource links are independently authorized before rendering.
|
||||
- Truncation preserves provenance and cannot splice delimiters ambiguously.
|
||||
- A corpus tests injection, Unicode controls, nested markup, and oversized content.
|
||||
|
||||
Containment reduces instruction confusion but cannot guarantee model behavior.
|
||||
Executable
+20
@@ -0,0 +1,20 @@
|
||||
# Recommendation 46: layered MCP end-to-end ping
|
||||
|
||||
## Evidence
|
||||
|
||||
MCP clients and servers can use `ping()` to verify that the protocol peer still answers independently of application operations.
|
||||
|
||||
- [MCP TypeScript client calls](https://ts.sdk.modelcontextprotocol.io/v2/clients/calling.html)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Expose separate transport, authenticated-server, UXP-panel, and Premiere-readiness liveness levels. Use MCP ping only for the first two levels and keep bounded Adobe read probes behind explicit diagnostics.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Ping performs no project mutation and returns no project content.
|
||||
- Timeouts distinguish network, server event-loop, bridge, modal-host, and no-project states.
|
||||
- Rate limits prevent ping amplification or telemetry-cardinality abuse.
|
||||
- Tests prove a successful MCP ping cannot mark the Premiere host ready.
|
||||
|
||||
This complements the UXP heartbeat; the two signals measure different hops.
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
# Recommendation 47: canonical MCP resource URI policy
|
||||
|
||||
## Evidence
|
||||
|
||||
MCP resources require valid unique URIs and may use standard or custom schemes. Resource templates and subscriptions make URI identity part of authorization, caching, and notification routing.
|
||||
|
||||
- [MCP resources](https://modelcontextprotocol.io/specification/2026-07-28/server/resources)
|
||||
- [MCP subscriptions](https://modelcontextprotocol.io/specification/2026-07-28/basic/patterns/subscriptions)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Define canonical custom URIs for project contexts, operation receipts, compatibility reports, and artifacts. Normalize and validate scheme, authority, encoding, path segments, identifiers, and query fields before lookup or authorization.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Equivalent encodings cannot create cache or authorization aliases.
|
||||
- File URIs never bypass the existing path containment policy.
|
||||
- Unknown schemes and duplicate canonical identities fail deterministically.
|
||||
- Subscription and read authorization use the same canonicalizer.
|
||||
|
||||
A canonical URI identifies a server resource; it does not establish filesystem safety by itself.
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
# Recommendation 48: experimental C2PA inspection lab
|
||||
|
||||
## Evidence
|
||||
|
||||
Adobe documents C2PA soft-binding resolution for recovering a manifest after credentials are stripped, while Premiere Content Credentials automation remains beta or lacks a stable documented Premiere API.
|
||||
|
||||
- [Adobe CAI soft-binding API](https://developer.adobe.com/cai-soft-binding-api)
|
||||
- [Adobe Premiere UXP changelog](https://developer.adobe.com/premiere-pro/uxp/changelog)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Build an opt-in, read-only lab that accepts an explicitly selected artifact, extracts only bounded provenance identifiers, and optionally resolves a soft binding through an allowlisted Adobe endpoint. Keep it outside the stable action catalog until a stable Premiere API and host evidence exist.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Disabled by default with separate network consent and quotas.
|
||||
- No signing, credential creation, or authenticity verdict is claimed.
|
||||
- Manifest output is size-bounded, schema-validated, and privacy-redacted.
|
||||
- Fixtures cover absent, malformed, stripped, conflicting, and offline credentials.
|
||||
|
||||
C2PA provenance data supplies history claims; it does not prove media is truthful.
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
# Recommendation 49: UXP external-launch policy
|
||||
|
||||
## Evidence
|
||||
|
||||
Adobe UXP requires explicit `launchProcess` manifest permissions for external schemes and file extensions, distinguishes `openPath()` from `openExternal()`, and reports user denial through return values.
|
||||
|
||||
- [Adobe UXP external-process recipe](https://developer.adobe.com/premiere-pro/uxp/resources/recipes/external-process)
|
||||
- [Adobe Premiere UXP manifest](https://developer.adobe.com/premiere-pro/uxp/plugins/concepts/manifest/)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
If the panel adds “open export,” “reveal artifact,” or documentation links, route them through one allowlisted launch broker. Require a user gesture, canonical destination, scheme/extension policy, and explicit denial handling.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Production permissions contain only reviewed schemes and extensions.
|
||||
- Arguments, custom commands, UNC paths, and untrusted URLs are rejected.
|
||||
- Launch failures never become export failures or success claims.
|
||||
- Windows and macOS packaging tests verify the exact manifest.
|
||||
|
||||
This recommendation does not add process execution to the current production panel.
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
# Recommendation 50: keyframe semantic verification
|
||||
|
||||
## Evidence
|
||||
|
||||
Adobe’s stable `ComponentParam` API exposes keyframe lists, values at time, and interpolation actions; `Keyframe` exposes position, value, and temporal interpolation mode.
|
||||
|
||||
- [Adobe ComponentParam reference](https://developer.adobe.com/premiere-pro/uxp/ppro-reference/classes/componentparam)
|
||||
- [Adobe Keyframe reference](https://developer.adobe.com/premiere-pro/uxp/ppro-reference/classes/keyframe)
|
||||
|
||||
## Proposed improvement
|
||||
|
||||
Extend typed effect automation with a dry-run keyframe plan that canonicalizes tick positions, parameter value types, interpolation modes, and expected pre-state. After one transaction, read back the complete affected range and report semantic differences.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Duplicate ticks, unsupported value shapes, invalid interpolation, and out-of-range times fail before mutation.
|
||||
- Confirmation binds component identity, parameter identity, sequence revision, and plan digest.
|
||||
- Unknown commit state is never automatically retried.
|
||||
- Licensed-host fixtures cover scalar, boolean, color, and point parameters where supported.
|
||||
|
||||
Keyframe readback proves parameter state, not rendered visual correctness.
|
||||
Executable
+29
@@ -0,0 +1,29 @@
|
||||
# Silence review marker plan
|
||||
|
||||
## Repository-fit gap
|
||||
|
||||
`detect_silence` already makes a local FFmpeg analysis available, but its returned
|
||||
timecodes are explicitly relative to the source media. It could not translate a
|
||||
silence into a timeline position when the source had been trimmed before it was
|
||||
placed, leaving an editor or agent to do the arithmetic manually.
|
||||
|
||||
## External comparison
|
||||
|
||||
The current [PremiereProMCP `workflow_clean_silence` implementation](https://github.com/CaYatur/PremiereProMCP/blob/main/server/src/tools/workflow.ts)
|
||||
detects source silences and sends marker-add commands using those source-derived
|
||||
timestamps. That is useful automation, but direct marker mutation is unsafe if
|
||||
the source range or placement does not match the assumed timeline mapping.
|
||||
|
||||
## Chosen improvement and benefit
|
||||
|
||||
`plan_silence_review_markers` produces bounded candidate ranges for exactly one
|
||||
known 1x placement. It clips each silence to the supplied source in/out range,
|
||||
maps the retained range to a timeline start, redacts the local source path, and
|
||||
does not create markers or modify a sequence. This removes manual trim-offset
|
||||
math while preserving a human review step before any editorial change.
|
||||
|
||||
## Explicit boundary
|
||||
|
||||
The plan does not infer speed changes, remapping, reverse playback, multicam,
|
||||
nested sequences, or rendered timeline audio. Those cases require Premiere-host
|
||||
evidence rather than arithmetic from a decoded source file.
|
||||
Executable
+28
@@ -0,0 +1,28 @@
|
||||
# Marker-anchored review frames
|
||||
|
||||
## Repository-fit gap
|
||||
|
||||
The server already exports evenly spaced sequence review frames and clip-midpoint
|
||||
frames, while `list_markers` exposes marker positions separately. An editor or
|
||||
agent wanting a visual receipt for existing review markers therefore has to list
|
||||
the markers and make one individual frame-export call for every marker. Evenly
|
||||
spaced sampling can miss the annotated moments entirely.
|
||||
|
||||
## Competitive observation
|
||||
|
||||
The current [Adobe Premiere Pro MCP catalog](https://github.com/hetpatel-11/Adobe_Premiere_Pro_MCP/blob/main/README.md)
|
||||
promotes marker discovery and batch-oriented editing as first-class workflow
|
||||
building blocks. Its source also implements bounded, per-item batch requests
|
||||
such as [`add_to_timeline_batch`](https://github.com/hetpatel-11/Adobe_Premiere_Pro_MCP/blob/main/src/tools/index.ts).
|
||||
That supports the product need for marker-based batch handoff, but this project
|
||||
does not reuse the competitor implementation or its unsupported-host claims.
|
||||
|
||||
## Chosen improvement and benefit
|
||||
|
||||
`export_sequence_marker_review_frames` reads the active sequence's existing
|
||||
markers once, sorts and bounds the matches, and exports a file-verified
|
||||
composite frame at each selected marker start in the same bridge request. It
|
||||
can narrow by marker type and time range, reports truncation and partial file
|
||||
failures, and never changes any Premiere marker. This turns an N+1 bridge-call
|
||||
review loop into one bounded call while keeping the returned frame paths and
|
||||
verification scope explicit.
|
||||
Reference in New Issue
Block a user