Turn long-form video into short, AI-clipped highlights, and publish or schedule them to connected social accounts.
OpusClip ships in the w6w first-party pack. It declares 22 actions, 2 health checks, and the host runs its code in a sandbox that never sees the credential.
io.w6w.opusclipOpusClip turns a long-form video into short, vertical, AI-curated clips: submit a video URL, choose a curation model (talking-head-tuned ClipBasic or prompt-driven ClipAnything) and it returns ready-to-post clips with captions, an optional AI-generated headline, and a brand template applied.
This app covers the OpusClip Clip API end to end — creating and sharing projects, reading back the clips a project produced, brand templates, and export links for a single clip or a whole collection — plus content-safety censor jobs, AI thumbnail generation, and a project’s trimmed source-video transcript.
It also covers social distribution: list connected social accounts, generate platform-tuned captions for a clip, publish a clip immediately or schedule it for later, and cancel a pending schedule.
Health checks track OpusClip’s own status page. There is no live, pre-emptive read of remaining monthly API quota — the vendor only reports the cap by refusing a request with it already hit — so that check is declared unavailable rather than guessed at.
Three routes to the same 22 actions. The Workflow tab is generated from OpusClip's own manifest and carries its real ids, so it is copy-pasteable; the Code and CLI examples are the same call for any action on any app, so every app-specific value in them is a blank you fill in.
brand-template-list List your account's brand templates. Use a templateId as clip-project-create's brandTemplateId to apply one, or use one of OpusClip's preset ids (see the README).
censor-job-create Start an asynchronous job to bleep or mask flagged content in a clip.
clip-project-create Submit a long-form video (YouTube, Google Drive, Vimeo, a public S3 MP4, and more) to create a new clipping project.
clip-project-update-visibility Set a project's visibility. PUBLIC lets anyone open, edit and export it; DEFAULT restricts it to team members.
collection-list List your account's collections, or the collections containing a given clip.
generative-job-create Experimental. Generate thumbnail options for a video. 7 credits per call, charged on success and refunded on failure.
generative-job-get Poll a thumbnail generation job for its status, progress, and result.
post-task-create Publish a clip immediately to a connected social account. Each X post costs 1 credit.
publish-schedule-cancel Cancel a scheduled publish task before its publish time.
publish-schedule-create Schedule a clip for future publishing to a connected social account. Each X post costs 1 credit.
social-account-list List the connected social destinations available for posting.
social-copy-job-create Generate platform-tuned post copy (title, description, hashtags) for a clip.
social-copy-job-get Poll a social copy generation job for its status and generated copy.
transcript-get Get a project's trimmed source-video transcript (paragraphs with word-level timings). Returns null if the project has no transcript yet.
A workflow step names the app and the action, and the editor fills in the
connection when you pick one. This is the Step shape from the
workflow spec, carrying OpusClip's real ids.
{
"manifestVersion": "2",
"name": "opusclip-example",
"steps": [
{
"id": "censor-job-create",
"uses": {
"app": "io.w6w.opusclip",
"action": "censor-job-create",
"connection": "conn_YOUR_CONNECTION_ID"
},
"with": {
"projectId": "<projectId>",
"clipId": "<clipId>"
}
}
]
}censor-job-create brand-template-list censor-job-get clip-list clip-project-create +17 more actions available
Every app-specific value here is a blank you have to fill in. An
app action is reached through the connection that authenticates it, so the
address is a connection id, not the app id — and connections belong to your account,
so a public page cannot know yours. Create one for OpusClip, then fill in
the three blanks: conn_YOUR_CONNECTION_ID, the action key, and the
parameters that action declares. The call itself is real — the shape is transcribed
from the studio's own snippet builder, which prints the same kind of blanks — but
nothing in it is specific to OpusClip. The Workflow tab is where this app's
real ids are.
npm install @w6w/sdkyarn add @w6w/sdkpnpm add @w6w/sdkdeno add npm:@w6w/sdkimport { W6wClient, isActionRun } from "@w6w/sdk";
// Reads W6W_BASE_URL and W6W_TOKEN from the environment when omitted.
const client = new W6wClient();
const envelope = await client.run({
urn: "conn_YOUR_CONNECTION_ID",
action: "censor-job-create",
payload: {
projectId: "<value>",
clipId: "<value>",
// beepSound: "<value>",
},
});
if (isActionRun(envelope)) console.log(envelope.value); npm install -g @w6w/cli w6w run conn_YOUR_CONNECTION_ID --action censor-job-create --payload '{"projectId":"<value>","clipId":"<value>"}' Give an AI agent OpusClip — without giving it OpusClip's credentials. One MCP endpoint exposes every app, function and workflow the caller is entitled to, as tools it can discover and run. Access is granted per team while we onboard.
One tool call{
"name": "w6w_invoke",
"arguments": {
"ref": "app:io.w6w.opusclip#censor-job-create",
"input": {
"projectId": "<projectId>",
"clipId": "<clipId>"
}
}
}
Every tool names its target with a single ref. The
app: form above doesn't name a connection at all — the
host resolves which of the caller's OpusClip connections to sign
with, and refuses rather than guesses when the answer is ambiguous.
The token is attached host-side, at the moment of the call. It is never a tool argument, never in the model's context, and never in a transcript — so a prompt injection has nothing to exfiltrate.
Tools are derived per end user from what that person has actually connected and is entitled to — not one shared bot identity carrying the union of everyone's access.
Multi-step work runs on the workflow engine and returns a run handle the agent can poll — retries, branching and state survive the conversation that started them.
OpusClip's declared health checks are on the surface too, so an agent can tell "the vendor is down" from "your credential expired" before it burns a retry on either.
The MCP surface is part of the hosted platform. OpusClip itself is MIT, and the runtime that executes it is source-available (FSL).
OpusClip declares its own checks, so its health is a property of the app rather than something the host guesses at.
Page-level status plus per-component detail from status.opus.pro (Instatus). A component's own status can read OPERATIONAL while it carries an open incident, so this check also folds in each component's activeIncidents.