Clipwave MCP for any AI agent.
Connect Clipwave to your agent and generate images and video — and drive the Media Studio editor — straight from your prompts. One hosted endpoint, your credits.
https://clipwave.io/api/mcpMedia Studio is the single home for every piece of creative work.
Every ad, VSL, and source element — scenes, takes, overlays, captions, and audio stems (music and voice on separate tracks) — lives in a project as individually editable clips on a timeline. Agents (over this MCP) and humans (in the dashboard) edit the same project, by clip id, deterministically: swap a clip, replace an end-card, split music from voice, retime a caption — without re-rendering the whole thing from scratch.
The loop is always generate or upload → it lands in the library → place it on the timeline → refine by id → export. Bulk-load a whole back-catalog once, then every future tweak is a few calls, not a rebuild. Large files skip the request body entirely via presigned upload.
Bulk-load a folder onto a timeline
Large files skip the request body via a presigned upload. Loop: request_upload → PUT the bytes →add_reference → add_clip. Then export.
import requests, os, glob
API = "https://clipwave.io/api/mcp"; KEY = "cw_live_…"
def tool(name, args):
r = requests.post(API, json={"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":name,"arguments":args}},
headers={"Authorization": f"Bearer {KEY}"})
return r.json()["result"] # {content:[{text}]} → parse the JSON text
pid = tool("video_editor_create_project",
{"name":"My video","aspect_ratio":"9:16"})["project_id"]
for path in sorted(glob.glob("clips/*.mp4")):
up = tool("video_editor_request_upload",
{"filename": os.path.basename(path), "content_type":"video/mp4"})
requests.put(up["upload_url"], data=open(path,"rb").read(),
headers={"Content-Type":"video/mp4"}) # no size cap
asset = tool("video_editor_add_reference",
{"project_id": pid, "url": up["file_url"]})
tool("video_editor_add_clip", # LIBRARY → TIMELINE
{"project_id": pid, "asset_id": asset["asset_id"], "track":"video"})
tool("video_editor_get_timeline", {"project_id": pid}) # verify durations
tool("video_editor_export", {"project_id": pid}) # → video_urlSmall files (< ~6 MB) can skip the presign and use video_editor_upload_file with base64. Audio goes on track:"voice"|"music"|"sfx"; images become stills via duration_sec.
Connect in three steps.
Create an API key
Grab a cw_live_ key from /dashboard/api-keys. (Claude connectors and other OAuth clients skip this — you just sign in.)
Add the connector
Point your agent at the Clipwave endpoint below and pass the key as a Bearer header.
Connect & create
Sign in, then ask your agent to generate — it runs on your account's credits.
/plugin marketplace add ClipWave-io/clipwave-plugins /plugin install clipwave@clipwave
Then /mcp → clipwave → authenticate. Ships this server plus two skills (model choice & timeline editing) and the /clipwave-video and /clipwave-edit commands. Source on GitHub.
Settings → Connectors → Add custom connector → URL: https://clipwave.io/api/mcp → Connect → sign in to Clipwave
OAuth handles the rest — Claude registers itself and asks you to sign in once.
claude mcp add clipwave \ --transport http https://clipwave.io/api/mcp \ --header "Authorization: Bearer cw_live_…" # or skip the key and use OAuth: # omit --header, then run /mcp → authenticate
{
"mcpServers": {
"clipwave": {
"url": "https://clipwave.io/api/mcp",
"headers": { "Authorization": "Bearer cw_live_…" }
}
}
}Just describe it. Clipwave builds it.
Generate images
"5 product shots of my serum, soft studio lighting, 1:1"
Generate video
"a 15-second skincare UGC ad with captions"
Edit in Media Studio
"add scene 2, crossfade between clips, then export"
Build a full ad
"script → scenes → voiceover → lip-sync → one MP4"
The toolset
Generation + the full Media Studio editor. The endpoint self-briefs on connect, so agents learn these automatically.
list_modelsModel catalog with capabilities. Call first — never guess a model_id.
media_forge_generateGenerate video or image. Async → returns a job_id.
job_statusPoll a job until completed, then read result.video / result.images.
video_editor_create_projectCreate a project (shared library + timelines).
video_editor_list_projectsList the user's projects.
video_editor_create_videoAdd another video to a project.
video_editor_get_stateInspect a video's timeline + library + context.
video_editor_set_contextSet the creative brief the agent reads each turn.
video_editor_instructOne natural-language instruction (generate a scene, add subtitles, set a transition…).
video_editor_add_clipPlace a library asset on the timeline by id.
video_editor_add_referenceImport a public image/video/audio URL into the library.
video_editor_upload_fileUpload raw file bytes into the library.
video_editor_exportStitch the timeline into one MP4. Returns a video_url.
list_models → pick an exact model id
video_editor_create_project → { project_id }
video_editor_instruct "scene 1: …" → generates + places a clip
video_editor_instruct "scene 2: …, continue the look"
…add subtitles / set a transition
video_editor_get_state(video_id) → verify the timeline
video_editor_export → { video_url }Questions, answered.
Which agents are supported?
Key or login?
cw_live_ Bearer key. OAuth clients — including Claude's custom connectors — just have you sign in: discovery, dynamic client registration and PKCE are all automatic via /.well-known/oauth-protected-resource/api/mcp.Is there a one-command install?
/plugin marketplace add ClipWave-io/clipwave-plugins then /plugin install clipwave@clipwave. That bundles this server with two skills and the /clipwave-video and /clipwave-edit commands. Everywhere else, add the endpoint above as a connector.Whose credits does it use?
What can it actually do?
Does it self-explain?
initialize response returns an instructions guide the agent reads automatically (auth, when to use each tool, the editor flow).