MCP server#
Clipkit ships a hosted MCP connector — add it to Claude (or Cursor, Codex, Gemini, Cline…) by URL and the model authors video projects directly through tool calls instead of generating JSON in chat. No install, no sign-in, no key for free authoring.
Under the hood it's a thin wrapper around @clipkit/protocol: every mutation runs through the same validator the runtime uses, so an agent can never advance a project into a state the renderer would reject.
Get started#
Add this URL as a custom MCP connector:
https://www.clipkit.dev/mcp
That's the whole setup. The endpoint:
- speaks the standard Streamable HTTP transport,
- runs sessionless (any request lands on any instance — see Projects and sessions),
- is open — no sign-in, no OAuth, and no API key for free authoring,
- works in web and desktop clients alike (nothing runs on your machine).
Pick your client below for a copy-paste quickstart.
Connect your agent#
One-step quickstarts for every major MCP client — same URL each time, wired the way that client expects:
| Client | Quickstart |
|---|---|
| Connect → | |
| Connect → | |
| Connect → | |
| Connect → | |
| Connect → | |
| Connect → | |
| Connect → | |
| Connect → | |
| Connect → | |
| Connect → | |
| Connect → | |
| Connect → | |
| Connect → |
Using a client that isn't listed? Any MCP client works — add a remote server with URL https://www.clipkit.dev/mcp and pick the Streamable HTTP transport (not SSE).
Projects and sessions#
The hosted connector is sessionless: there's no per-connection memory, so a project is addressed by an explicit project_id.
create_project,set_project,create_promo, andload_projecteach return aproject_id.- Pass that
project_idto subsequent tools (add_element,edit_element,preview_still, …) to keep working on the same project.
Hosted projects are scratch state and expire after a period of inactivity. The durable artifacts are the editor link (open_in_editor) and renders (render_video) — or call get_project and store the JSON yourself.
Free, anonymous authoring needs no key. A
CLIPKIT_API_KEY(Settings → API keys) is only required for the paidrender_videopath. Creating projects and rendering stills (preview_still) are free.
transcribe_to_captionsis not on the hosted connector. It runs Whisper in a child process and needsffmpegon the host, neither of which exists in the hosted sandbox. Use the local server for transcription. (Hosted speech-to-text is on the roadmap.)
Tools#
| Tool | Purpose |
|---|---|
read_docs | Return a canonical doc (authoring guide / protocol / brand) as text. |
get_schema | Return the JSON Schema for a Source, or one element type's fields. |
create_project | Start a new blank project (optional dimensions/duration). Returns its project_id. |
set_project | Replace the entire Source with a validated JSON object. Returns its project_id. |
get_project | Return the current Source as JSON. |
describe_project | Plain-language structural summary + render-time warnings. |
add_element | Append one element (optionally into a group via parent_id). |
edit_element | Merge changed fields into one element by id (anywhere in the tree, incl. nested). |
delete_element | Delete one element by id (anywhere in the tree). |
validate_project | Schema validation + render-time warnings. |
preview_still | Render one frame to a PNG so the agent can SEE the result (free). |
create_promo | Assemble a designed promo from prebuilt scenes; returns an editor link. |
open_in_editor | Create a share link that opens the project in the web editor. |
load_project | Import a shared project by id / editor URL. |
render_video | Render a finished MP4 in the cloud (paid; needs CLIPKIT_API_KEY). |
transcribe_to_captions | Speech-to-text a media file into a timed caption element. Local server only — not on the hosted connector. |
Every stateful tool takes a project_id (see Projects and sessions). Validation is non-negotiable — every mutation hits @clipkit/protocol before being applied. Invalid edits return a structured error with the offending JSON path; valid edits commit atomically, so the agent never observes a half-applied project.
Resources#
The server publishes the canonical Clipkit reference docs as MCP resources, so any host that supports resource attachment can pull them into the model's context without web search.
| URI | Contents |
|---|---|
clipkit://docs/agents.md | The authoring guide (AGENTS.md). Patterns, recipes, conventions. |
clipkit://docs/protocol.md | The normative protocol spec (PROTOCOL.md). |
clipkit://docs/brand.md | Brand reference (BRAND.md). Voice, colors, typography. |
Resources are embedded at the server's build time — the bytes you load are the bytes that shipped with the version of the server, never a live fetch.
Workflow#
A typical agent loop:
create_project— start with the right dimensions and duration; keep the returnedproject_id.add_elementonce per element (text, shape, image, video, audio, caption), orset_projectto author the whole composition at once.edit_elementto tune properties iteratively (color, position, font_size).preview_stillto SEE a frame;validate_projectto confirm before exporting.get_projectto retrieve the final JSON.open_in_editorfor an editor link, orrender_videofor a finished MP4.
Schema reference#
See the protocol spec for the full element type catalog (video, image, text, shape, audio, group, caption, particles) and every field on every element.
Run it locally#
Prefer to run the server on your own machine — to keep project data local, self-host, or use transcribe_to_captions (which only works locally)? ClipKit also runs over stdio via npx, with no clone and no build:
npx -y @clipkit/cli mcp
You won't normally invoke it directly — configure your MCP host to launch it. Each agent quickstart carries the exact config for its client.
Hosted vs local#
Close, but not the same toolset:
| Hosted connector | Local server (npx) | |
|---|---|---|
| Setup | paste a URL — nothing installed | npx launches it on your machine |
| Tools | 15 | 16 |
Authoring + preview_still | ✓ | ✓ |
transcribe_to_captions (Whisper) | ✗ | ✓ — needs ffmpeg + a one-time npm i @huggingface/transformers |
render_video (MP4) | ✗ | ✓ — needs CLIPKIT_API_KEY |
ingest_asset (host media) | ✓ | ✗ |
| Project state | saved here — resumable, shareable by id | in-memory, discarded when the process exits |
| Requires | nothing | Node 18+, ~50 MB on first run |
"Local" describes where the project state and Whisper live. preview_still and render_video still call clipkit.dev in both modes — neither runs a renderer on your machine, so the local server is not an offline mode.
Hosts that connect from a vendor's servers — ChatGPT, the Grok app, the OpenAI Responses API mcp tool — can't launch a local process, so they're hosted-only.
Claude Desktop#
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{ "mcpServers": { "clipkit": { "command": "npx", "args": ["-y", "@clipkit/cli", "mcp"] } } }
Restart Claude Desktop. The Clipkit tools appear in the tools menu; the clipkit:// resources appear under the Resources picker.
Cursor / Zed / other hosts#
Use the same command + args pair. Any MCP host that speaks the stdio transport will work — see the agent quickstarts for per-client config keys.
Local differences#
project_idis optional. A local server holds one implicit project per process, so you can omitproject_identirely.- State is in-memory. It lives only for the server session and isn't persisted — call
get_projectand save the JSON, oropen_in_editor, to keep your work. transcribe_to_captionsworks here, with two prerequisites:ffmpegon your machine, and the Whisper engine — an optional peer the lean install skips. The first time you call it without the engine, it fails with the exact fix:npm i @huggingface/transformers(~350 MB, one-time).render_videoworks here, but it's still the paid cloud render — setCLIPKIT_API_KEY(ack_live_…key from Settings → API keys) in the server's env, or the tool returns an error telling you to.ingest_assetis missing. Asset hosting is authenticated and team-scoped, so it only exists on the hosted connector. Reference media by URL instead.- First run is light — the CLI installs lean (~50 MB); the ~350 MB Whisper runtime is an opt-in you only pull if you use
transcribe_to_captions. npx caches the download after the first run.