Clipkit

dev.clipkitPublished by clipkit.devOfficial publisherv1.0.0Updated Oct 24, 2026

MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.

VerifiedStreamable HTTPWeb executableDeveloper ToolsMedia & Design

Overview

AI-generated overview

Clipkit exposes a JSON video schema as tools so an assistant can compose, preview and export video projects programmatically.

What you can do
  • Read schema docs and per-element JSON schemas for authoring
  • Create, replace, inspect and summarize a video project's source JSON
  • Add, edit or delete single elements, including nested ones, and validate the result
  • Render a single frame to PNG for visual checking
  • Build a designed promo from scenes, or open the project in the web editor and reload it later
  • Host remote media as assets and transcribe audio into word-timestamped captions
When to use it
Useful when an assistant should author or iterate on short videos, promos, intros or data videos from chat, checking frames visually and handing back an editor link or a rendered MP4.
Requirements
Remote endpoint at clipkit.dev, or the npm package run via npx. Optional CLIPKIT_API_KEY (dashboard key) to own projects on a team; CLIPKIT_API_URL overrides the host. Rendering a finished MP4 needs the API key and consumes credits.
Before you install
Projects are in-memory per session and anonymous projects expire after 7 days, so save the JSON externally. render_video is paid and consumes credits. ingest_asset fetches remote media and hosts it on Clipkit, with limits for anonymous projects. The API key is sent as a bearer token.

Installation

In SourceWeft

  1. Open Clipkit in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/dev.clipkit%2Fclipkit/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "clipkit": {
      "type": "http",
      "url": "https://www.clipkit.dev/mcp"
    }
  }
}

README

@clipkit/mcp-server

An MCP server that exposes the Clipkit schema as tools, letting AI agents compose video projects programmatically. The Clipkit schema is the protocol — agents don't speak a custom DSL, they construct schema-valid JSON.

Install + run

bash
npx -y @clipkit/mcp-server

Or wire it into a host like Claude Desktop:

json
{  "mcpServers": {    "clipkit": {      "command": "npx",      "args": ["-y", "@clipkit/mcp-server"],      "env": {        "CLIPKIT_API_URL": "https://clipkit.dev",        "CLIPKIT_API_KEY": "ck_live_…"      }    }  }}

Environment

VarPurpose
CLIPKIT_API_URLHost for create_promo / open_in_editor links. Defaults to https://clipkit.dev. Set to http://localhost:3000 when developing against a local web app.
CLIPKIT_API_KEYOptional dashboard key (ck_live_…, from Settings → API keys). When set, projects are owned by your team (permanent on paid plans) and sent as Authorization: Bearer. Without it, projects are anonymous and expire after 7 days.

Tools

ToolDescription
create_promoFastest path to a designed promo: an ordered list of scenes → composed via the pattern library → returns a shareable editor link.
create_projectReset to a blank source. Optional dimensions, duration, fps, output format.
set_projectReplace the entire source with a validated JSON object. The primary way to build (a composition, or many elements at once).
add_element / edit_element / delete_elementTweak a single element in an existing composition. edit_element merges a partial element (only the keys you pass change).
get_projectReturn the current Clipkit source JSON.
describe_projectPlain-language summary — dimensions, timeline by track, element counts, render-time warnings. Cheaper to read than the full JSON.
validate_projectSchema validation plus render-time warnings even when valid (emoji/non-ASCII dropped by the font atlas, elements past the end, missing duration).
preview_stillRender one frame to a PNG and return it as an image — how a chat-mode agent sees its work. Free + rate-limited.
transcribe_to_captionsTranscribe a media url (or local path) into a word-timestamped caption element. Whisper in-process — no key, no upload.
open_in_editorValidate the current project and return a link that opens it in the Clipkit editor (free).
load_projectRe-import a shared project by share id or editor URL — the round-trip for open_in_editor.
render_videoRender the current project to a finished MP4 in the cloud (paid — consumes credits, needs CLIPKIT_API_KEY).

Every mutation goes through @clipkit/protocol's validator before being applied. Invalid edits return a structured error with the offending path; valid edits are committed atomically.

Workflow

  1. Compose — create_promo for a designed video, or write a full source JSON and call set_project.
  2. See — preview_still to look at a frame; validate_project / describe_project for a structural read-back. Loop: edit → preview_still → fix.
  3. Tweak — add_element / edit_element / delete_element for single-element changes to a large composition.
  4. Deliver — open_in_editor for a free editor link (and load_project to re-import it later), or render_video for a finished MP4.

State

State is in-memory per server session. Each MCP connection gets a fresh project. There is no persistence; agents that want to save a project should call get_project and store the JSON externally.

Schema reference

See @clipkit/protocol for the full element type catalog (video, image, text, shape, audio, composition, caption) and their fields.

Source: packages/mcp-server/README.md at commit dcc26e5

Tools

15

read_docs

Read the Clipkit authoring docs

Return a canonical Clipkit doc as text. topic "card" = the ~8KB compact authoring card — the recommended context for authoring; "pattern-lighting" = the shine/neon/glow technique rigs; "pattern-data-viz" / "pattern-cinematic-ui" / "pattern-ui-screencast" / "pattern-promo-teaser" = ~4-5KB pattern cards (proven idioms: count-ups and bar rows; product hero shots with camera rigs; faked app UI with typing/cursor/clicks) — load ONE alongside the card when the brief matches its archetype; "agents" = the full authoring guide (fetch only when the card doesn't cover a need); "protocol" = the formal field spec; "brand" = brand reference. (Same docs offered as MCP resources, exposed as a tool so you can read them directly — resources are not always model-readable.)

Parameterstopic

get_schema

Get the Clipkit JSON Schema (exact fields)

Return the authoritative JSON Schema for a Clipkit Source — exact field names, types, and enums, generated from the protocol. Call with no argument for the full Source schema, or with element_type (e.g. "text", "shape", "particles") for just that element's fields (much smaller). Use this when authoring with set_project / add_element so you never guess a field.

Parameterselement_type

create_project

Create a new Clipkit project

Create a new, blank Clipkit project with the given dimensions and duration, and return its project_id. Defaults: 1920×1080, 10 seconds, 30 fps, output_format "mp4". Call this first when starting a new video. Pass an existing project_id to reset that project to blank; omit it to start a fresh project (note the returned id for subsequent tools).

Parameterswidthheightdurationframe_rateproject_idoutput_ditheroutput_formatbackground_color

get_project

Get the current Clipkit project JSON

Return the full current Clipkit source as JSON. Use this to inspect the project, pass it to a render pipeline, or compose follow-up edits.

Parametersproject_id

describe_project

Describe the current project in plain language

Return a compact, human-readable summary of the current project — dimensions, fps, duration, an element breakdown by type, a per-track timeline (paint order low→high), and render-time warnings. Much cheaper to read than get_project's full JSON; use it to orient yourself or sanity-check structure without dumping the whole source.

Parametersproject_id

set_project

Replace the entire Clipkit project

Replace the entire project with the given source JSON, returning its project_id. This is the PRIMARY way to build: use it to create a composition or to add/change many elements at once. (To tweak a single element in an existing project, use edit_element / add_element / delete_element instead.) REVISION RULE: if you are iterating on a video that already exists in this conversation — the user asked for changes, you are fixing your own work — you MUST pass its project_id so the project is updated in place and keeps one editor link and its version history. Omitting project_id creates a NEW, unrelated project and strands the old one; only omit for a genuinely different video. The input is validated against the @clipkit/protocol before being accepted; invalid inputs return an error. Shape: { width, height, duration, frame_rate, output_format, background_color?, defaults? (house easing, e.g. a spring), fonts?, camera?, lights?, elements:[…] }; every element has a `type` plus base fields (id, layer, x, y, width, height, time, duration, opacity, rotation, animations, keyframe_animations) and type-specific fields. CKP/1.1: keyframe easings accept a spring object {type:"spring", duration?, bounce?}; channels take stagger {each, from, ease, split, seed} to spread across text units / set copies / group children; groups take layout {direction, gap, align} (stack — no hand-computed positions); text takes a count-up {expr, format}. For exact field names + types call get_schema (optionally with an element_type) — the runtime ignores unrecognized keys, and this tool flags any it does not recognize.

Parameterssourcerequiredproject_id

add_element

Add an element to the current project

Append a single element to an existing project — a TWEAK, e.g. dropping in one more caption or shape. By default it is added at the top level; pass parent_id to add it INTO a group (nested). The element is any valid schema element: video, image, text, shape, audio, group, caption, or particles. To create a composition or add several elements at once, build the JSON and use set_project instead. The new element is validated as part of the project as a whole before being added. Call get_schema(element_type) for the exact per-type fields; unrecognized keys are flagged.

Parameterselementrequiredparent_idproject_id

edit_element

Tweak one existing element (merge changed fields)

Change fields on the element with the given id by merging in a partial element — only the keys you include change. The id may be any element ANYWHERE in the tree, including one nested inside a group (or its mask). Pass a whole nested value (e.g. a new `keyframe_animations` array) to replace that key; set a key to null to remove it. This is for TWEAKING an existing composition. To create a composition or change many elements at once, edit the JSON and call set_project instead. The result is re-validated before being accepted.

Parametersidrequiredpatchrequiredproject_id

delete_element

Delete one element by id

Delete the element with the given id, anywhere in the tree (including one nested inside a group or its mask) — a tweak to an existing composition. (The project must keep at least one top-level element.)

Parametersidrequiredproject_id

validate_project

Validate the current project (schema + render-time warnings)

Run the @clipkit/protocol validator against the current project AND surface render-time warnings even when the JSON is valid — things that pass the schema but the runtime will silently drop or clip: emoji / non-ASCII text (the runtime font atlas is ASCII-only), elements that run past the composition end, a missing top-level duration. Run it before you share or render the project. For a fuller timeline read-back, use describe_project.

Parametersproject_id

preview_still

Render one frame of the current project so you can SEE it

Render a single frame of the current project to a PNG and return it as an image you can look at. This is how you check your work — in chat there is no other way to see what a composition actually looks like. Use it liberally: after composing, after edits, and at different times to inspect motion. Stills are FREE (credits are only spent by render_video). Pass `time` (seconds) to choose the frame; defaults to 0.

Parameterstimeproject_id

create_promo

Compose a designed promo from prebuilt scenes (one fast option)

Assemble a designed-looking promo/intro/product/data video from the Clipkit pattern library: give an ordered list of SCENES and the words, and it bakes in the camera, glass, lighting, motion blur, timing, and layout, then returns an editor link. This is a FAST option when a conventional promo structure fits — it is NOT the only way to make a video and NOT a default; for anything specific or original, author the JSON yourself and call set_project (the full creative range). When you do use this, MIX scene types to fit the brief and vary the structure — a video can be a single kinetic headline, three title cards, a showcase montage, or a data explainer; you do NOT need a hero or a cta. Scene types: hero (glass-orb logo reveal: wordmark, tagline?), kinetic (letter-fly headline: text, subtitle?), showcase (a screenshot tilted in 3D: screenshot URL), title (full-frame title card: headline, kicker?, subtitle?), cta (closing card with a glass button: wordmark, tagline?, cta), stats (hero numbers: stats[{label,current,previous?}], title?), bars (bar chart: bars[{label,value,previous?}], title?), ranking (top-N list: items[{label,value}], title?), pie (pie cards: cards[{label,value,total,previous?}], title?). The data scenes (stats/bars/ranking/pie) look best with theme "mux".

Parametersthemewidthheightscenesrequiredproject_idmotion_blur

open_in_editor

Create a shareable link that opens the current project in the editor

Validate the current project and create a link that opens it in the Clipkit web editor, where the user can preview and refine it. This shares the PROJECT (nothing is rendered — that's render_video). Use after composing or editing. Returns a URL.

Parametersproject_id

ingest_asset

Host a remote image/video/audio so a project can use it

Fetch a remote media URL (image/video/audio) and HOST it on Clipkit, returning a stable asset_url to put in an element's `url`. Use this so the project's media survives — the original link may rot, be private, or block hotlinking. Anonymous projects allow up to 5 hosted assets / 100 MB total / 50 MB per file; when the limit is hit, tell the user to open the project (open_in_editor) and sign in to add more. Requires project_id.

Parametersurlrequiredfilenameproject_id

load_project

Load a shared project back into the session

Import a previously shared project as the current project, by its share id or its editor URL (e.g. https://clipkit.dev/editor?id=…), returning its project_id. Use this to continue working on a project the user opened in the editor or shared earlier — the round-trip for open_in_editor. Pass an existing project_id to load into that project; omit it to load into a new one.

Parametersid_or_urlrequiredproject_id

Version history

1
  1. v1.0.0LatestSep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts