"use client" import { useState } from "react" import { ArrowUpRight, Check, CheckCircle2, ChevronDown, CircleHelp, Copy, Download, ExternalLink, Laptop, LockKeyhole, MonitorCog, ShieldCheck, Sparkles, } from "lucide-react" import { product, safeFirstPrompt } from "@/lib/product" import { trackOnboardingEvent } from "@/lib/onboarding-events" type AssistantRoute = { id: "claude" | "cursor" | "vscode" | "other" name: string shortDescription: string availability: string primaryAction: string href: string detail: string status: "recommended" | "guided" | "advanced" } const assistantRoutes: AssistantRoute[] = [ { id: "claude", name: "Claude Desktop", shortDescription: "Download the self-contained desktop bundle.", availability: "Recommended for the easiest start", primaryAction: "Download Claude Desktop bundle", href: product.downloads.claudeBundle, detail: "Open the downloaded bundle in Claude Desktop. It includes the local server, so this path does not ask you to install Node just to connect Claude.", status: "recommended", }, { id: "cursor", name: "Cursor", shortDescription: "Use Cursor’s MCP settings to add the local connector.", availability: "Guided route", primaryAction: "Read the Cursor setup guide", href: product.links.readme, detail: "A one-click Cursor installer is not currently shipped. The guide explains the supported local route; manual configuration stays in Advanced setup below.", status: "guided", }, { id: "vscode", name: "VS Code / Copilot", shortDescription: "Connect through your editor’s MCP settings.", availability: "Guided route", primaryAction: "Read the VS Code setup guide", href: product.links.readme, detail: "A VS Code Marketplace install is not currently shipped. Use the guide for the supported local route, or see Advanced setup if your editor asks for a server command.", status: "guided", }, { id: "other", name: "Another assistant", shortDescription: "Use any MCP-compatible desktop client.", availability: "Advanced route", primaryAction: "Open compatibility guide", href: product.links.readme, detail: "If your assistant supports local MCP servers, it can use MCP for Adobe Premiere Pro. Its setup may require its own settings screen or the manual configuration in Advanced setup.", status: "advanced", }, ] function CopyButton({ text, label }: { text: string; label: string }) { const [copied, setCopied] = useState(false) async function copy() { try { await navigator.clipboard.writeText(text) setCopied(true) trackOnboardingEvent("onboarding_safe_prompt_copied") window.setTimeout(() => setCopied(false), 1800) } catch { setCopied(false) } } return ( ) } function statusClasses(status: AssistantRoute["status"]) { if (status === "recommended") return "border-purple-400/50 bg-purple-500/[0.08] text-purple-100" if (status === "guided") return "border-zinc-700 bg-zinc-950 text-zinc-200" return "border-zinc-800 bg-zinc-950/50 text-zinc-300" } export function ConnectSection() { const [activeId, setActiveId] = useState("claude") const [advancedOpen, setAdvancedOpen] = useState(false) const [recoveryOpen, setRecoveryOpen] = useState(false) const activeRoute = assistantRoutes.find((route) => route.id === activeId) ?? assistantRoutes[0] function selectRoute(route: AssistantRoute) { setActiveId(route.id) trackOnboardingEvent("onboarding_assistant_selected", { assistant: route.id }) } function trackDownload(route: AssistantRoute) { trackOnboardingEvent("onboarding_download_started", { route: route.id }) } return (

Connect the assistant you already use.

Pick your client. The first step only checks that it can reach Premiere; it makes no edits.

{assistantRoutes.map((route) => { const selected = activeId === route.id return ( ) })}

{activeRoute.name}

{activeRoute.detail}

trackDownload(activeRoute)} className="inline-flex min-h-12 items-center justify-center gap-2 rounded-lg bg-gradient-to-r from-[#8b7cff] to-[#ef76b9] px-5 text-sm font-semibold text-white shadow-[0_12px_40px_rgba(139,124,255,0.2)] transition-transform hover:-translate-y-0.5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-purple-200 focus-visible:ring-offset-4 focus-visible:ring-offset-black" > {activeRoute.id === "claude" ?

Set up in four steps.

  1. 01

    Install the Premiere connector

    This separate CEP connector is what lets your assistant talk to Premiere. Open the download with a trusted ZXP installer; if your computer has none, use the npm installer under Advanced setup.

    trackOnboardingEvent("onboarding_download_started", { route: "cep_connector" })} className="mt-4 inline-flex min-h-11 items-center gap-2 text-sm font-semibold text-purple-200 transition-colors hover:text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-purple-300 focus-visible:ring-offset-2 focus-visible:ring-offset-black" >
  2. 02

    Connect {activeRoute.name}

    Finish the route above, then fully close and reopen both your assistant and Premiere.

  3. 03

    Run a safe check

    Open a project and use the read-only prompt below. It runs the connection check and makes no changes.

  4. 04

    Ready to edit

    Once the connection check passes, try a preview before applying any edits.

{safeFirstPrompt}

{ const open = event.currentTarget.open setAdvancedOpen(open) if (open) trackOnboardingEvent("onboarding_advanced_opened") }} > Advanced setup for npm, manual configuration, and other MCP clients

Install from npm

Use this route if your assistant does not support a native bundle. It requires Node.js {product.nodeVersion}+.

npm install -g premiere-pro-mcp{`\n`}premiere-pro-mcp --install-cep

Manual server configuration

Only use this when your client asks for a command. Keep Premiere, the connector, and the client on the same computer.

{`{\n  "mcpServers": {\n    "premiere-pro": {\n      "command": "premiere-pro-mcp"\n    }\n  }\n}`}
) }