{"name":"dev.clipkit/clipkit","slug":"clipkit","title":null,"description":"MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.","url":"https://mcp.market/server/clipkit","rating":null,"grade":"B","score":72,"certified":false,"status":"active","category":"media","tags":["media"],"presence":{"score":27,"stars":17,"forks":1,"downloads_week":null,"last_push_at":"2026-08-12T06:35:15.000Z","license":"Apache-2.0"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T04:55:26.306Z","last_ok_at":"2026-11-04T04:55:26.306Z","latency_ms":636},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/clipkit-video/clipkit","website":null,"version":"1.0.0","remotes":[{"type":"streamable-http","url":"https://www.clipkit.dev/mcp"}],"packages":[],"tools":[{"name":"add_element","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"element":{"type":"object","additionalProperties":{},"description":"A Clipkit element object. Must include `type`."},"parent_id":{"type":"string","minLength":1,"description":"Optional id of a group to add this element INTO (nested). Omit to add at the top level."},"project_id":{"type":"string","minLength":1,"description":"Which project to act on — the id returned by create_project / set_project / create_promo / load_project. ALWAYS pass it once a project exists in this conversation; omitting it on a build tool creates a brand-new project. (Omit only on the local stdio server working a single project.)"}},"required":["element"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"create_project","description":"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).","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"width":{"type":"integer","exclusiveMinimum":0,"description":"Composition width in pixels. Default 1920."},"height":{"type":"integer","exclusiveMinimum":0,"description":"Composition height in pixels. Default 1080."},"duration":{"type":"number","exclusiveMinimum":0,"description":"Composition duration in seconds. Default 10."},"frame_rate":{"type":"number","exclusiveMinimum":0,"description":"Frame rate. Default 30."},"output_format":{"type":"string","enum":["mp4","gif"],"description":"Output container/codec. Default \"mp4\"."},"background_color":{"type":"string","description":"Hex color, e.g. \"#000000\"."},"output_dither":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"enabled":{"type":"boolean"},"amplitude":{"type":"number","minimum":0,"maximum":8},"pattern":{"type":"string","enum":["bayer","noise"]}},"additionalProperties":true}],"description":"Anti-banding output dither — DEFAULT ON, leave unset. Pass false for byte-exact undithered output, or { amplitude, pattern } to tune. Stops gradients / soft shadows / blur from showing 8-bit banding; deterministic."},"project_id":{"type":"string","minLength":1,"description":"Which project to act on — the id returned by create_project / set_project / create_promo / load_project. ALWAYS pass it once a project exists in this conversation; omitting it on a build tool creates a brand-new project. (Omit only on the local stdio server working a single project.)"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"create_promo","description":"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\".","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"scenes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"hero"},"wordmark":{"type":"string"},"tagline":{"type":"string"},"color":{"type":"string","enum":["pink","green","blue","lavender","purple","yellow","gray"],"description":"Accent color slot. Default \"green\"."},"duration":{"type":"number","exclusiveMinimum":0,"description":"Scene length in seconds. Sensible default per scene type."}},"required":["type","wordmark"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"kinetic"},"text":{"type":"string"},"subtitle":{"type":"string"},"color":{"$ref":"#/properties/scenes/items/anyOf/0/properties/color"},"duration":{"$ref":"#/properties/scenes/items/anyOf/0/properties/duration"}},"required":["type","text"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"showcase"},"screenshot":{"type":"string","format":"uri"},"color":{"$ref":"#/properties/scenes/items/anyOf/0/properties/color"},"duration":{"$ref":"#/properties/scenes/items/anyOf/0/properties/duration"}},"required":["type","screenshot"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"title"},"headline":{"type":"string"},"kicker":{"type":"string"},"subtitle":{"type":"string"},"color":{"$ref":"#/properties/scenes/items/anyOf/0/properties/color"},"duration":{"$ref":"#/properties/scenes/items/anyOf/0/properties/duration"}},"required":["type","headline"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"cta"},"wordmark":{"type":"string"},"tagline":{"type":"string"},"cta":{"type":"string"},"color":{"$ref":"#/properties/scenes/items/anyOf/0/properties/color"},"duration":{"$ref":"#/properties/scenes/items/anyOf/0/properties/duration"}},"required":["type","wordmark","cta"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"stats"},"title":{"type":"string"},"dateRange":{"type":"string"},"stats":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"current":{"type":"number"},"previous":{"type":"number"}},"required":["label","current"],"additionalProperties":false},"minItems":1,"maxItems":4},"color":{"$ref":"#/properties/scenes/items/anyOf/0/properties/color"},"duration":{"$ref":"#/properties/scenes/items/anyOf/0/properties/duration"}},"required":["type","stats"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"bars"},"title":{"type":"string"},"dateRange":{"type":"string"},"bars":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"number"},"previous":{"type":"number"}},"required":["label","value"],"additionalProperties":false},"minItems":1,"maxItems":6},"color":{"$ref":"#/properties/scenes/items/anyOf/0/properties/color"},"duration":{"$ref":"#/properties/scenes/items/anyOf/0/properties/duration"}},"required":["type","bars"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"ranking"},"title":{"type":"string"},"dateRange":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"number"}},"required":["label","value"],"additionalProperties":false},"minItems":1,"maxItems":12},"color":{"$ref":"#/properties/scenes/items/anyOf/0/properties/color"},"duration":{"$ref":"#/properties/scenes/items/anyOf/0/properties/duration"}},"required":["type","items"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"pie"},"title":{"type":"string"},"dateRange":{"type":"string"},"cards":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"number"},"total":{"type":"number"},"previous":{"type":"number"}},"required":["label","value","total"],"additionalProperties":false},"minItems":1,"maxItems":4},"color":{"$ref":"#/properties/scenes/items/anyOf/0/properties/color"},"duration":{"$ref":"#/properties/scenes/items/anyOf/0/properties/duration"}},"required":["type","cards"],"additionalProperties":false}]},"minItems":1,"description":"Ordered scenes; mix types to fit the brief — you do NOT need hero/cta. e.g. a single [{type:\"kinetic\",text:\"…\"}], a sequence [{type:\"title\",headline:\"…\"},{type:\"showcase\",screenshot:\"…\"},{type:\"title\",headline:\"…\"}], or a data piece [{type:\"ranking\",title:\"…\",items:[…]}]"},"theme":{"type":"string","enum":["cinematic","mux","minimal"],"description":"Visual theme. Default \"cinematic\" (dark, serif, premium)."},"motion_blur":{"type":"integer","minimum":0,"maximum":32,"description":"Supersampled motion-blur samples (≥2 enables it — nicer but slower to render). Default off."},"width":{"type":"integer","exclusiveMinimum":0,"description":"Default 1920."},"height":{"type":"integer","exclusiveMinimum":0,"description":"Default 1080."},"project_id":{"type":"string","minLength":1,"description":"Which project to act on — the id returned by create_project / set_project / create_promo / load_project. ALWAYS pass it once a project exists in this conversation; omitting it on a build tool creates a brand-new project. (Omit only on the local stdio server working a single project.)"}},"required":["scenes"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"delete_element","description":"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.)","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"The id of the element to delete."},"project_id":{"type":"string","minLength":1,"description":"Which project to act on — the id returned by create_project / set_project / create_promo / load_project. ALWAYS pass it once a project exists in this conversation; omitting it on a build tool creates a brand-new project. (Omit only on the local stdio server working a single project.)"}},"required":["id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"describe_project","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"project_id":{"type":"string","minLength":1,"description":"Which project to act on — the id returned by create_project / set_project / create_promo / load_project. ALWAYS pass it once a project exists in this conversation; omitting it on a build tool creates a brand-new project. (Omit only on the local stdio server working a single project.)"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"edit_element","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"The id of the element to edit."},"patch":{"type":"object","additionalProperties":{},"description":"Partial element: the fields to change. Omitted keys are left as-is; a key set to null is removed."},"project_id":{"type":"string","minLength":1,"description":"Which project to act on — the id returned by create_project / set_project / create_promo / load_project. ALWAYS pass it once a project exists in this conversation; omitting it on a build tool creates a brand-new project. (Omit only on the local stdio server working a single project.)"}},"required":["id","patch"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_project","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"project_id":{"type":"string","minLength":1,"description":"Which project to act on — the id returned by create_project / set_project / create_promo / load_project. ALWAYS pass it once a project exists in this conversation; omitting it on a build tool creates a brand-new project. (Omit only on the local stdio server working a single project.)"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_schema","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"element_type":{"type":"string","enum":["video","image","text","shape","audio","group","caption","particles"],"description":"Limit to one element type's fields (e.g. \"text\"). Omit for the full Source schema (large)."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"ingest_asset","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"A public http(s) URL to an image, video, or audio file."},"filename":{"type":"string","description":"Optional display name for the asset."},"project_id":{"type":"string","minLength":1,"description":"Which project to act on — the id returned by create_project / set_project / create_promo / load_project. ALWAYS pass it once a project exists in this conversation; omitting it on a build tool creates a brand-new project. (Omit only on the local stdio server working a single project.)"}},"required":["url"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"load_project","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id_or_url":{"type":"string","minLength":1,"description":"A share id, or a clipkit.dev/editor?id=… URL."},"project_id":{"type":"string","minLength":1,"description":"Which project to act on — the id returned by create_project / set_project / create_promo / load_project. ALWAYS pass it once a project exists in this conversation; omitting it on a build tool creates a brand-new project. (Omit only on the local stdio server working a single project.)"}},"required":["id_or_url"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"open_in_editor","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"project_id":{"type":"string","minLength":1,"description":"Which project to act on — the id returned by create_project / set_project / create_promo / load_project. ALWAYS pass it once a project exists in this conversation; omitting it on a build tool creates a brand-new project. (Omit only on the local stdio server working a single project.)"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"preview_still","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"time":{"type":"number","minimum":0,"description":"Composition time in seconds to capture. Default 0 (first frame)."},"project_id":{"type":"string","minLength":1,"description":"Which project to act on — the id returned by create_project / set_project / create_promo / load_project. ALWAYS pass it once a project exists in this conversation; omitting it on a build tool creates a brand-new project. (Omit only on the local stdio server working a single project.)"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"read_docs","description":"Return a canonical Clipkit doc as text. topic \"card\" = the ~8KB compact authoring card — the recommended context for authoring; \"pattern-data-viz\" / \"pattern-cinematic-ui\" / \"pattern-ui-screencast\" = ~4-5KB archetype 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.)","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"topic":{"type":"string","enum":["agents","protocol","brand","card","pattern-data-viz","pattern-cinematic-ui","pattern-ui-screencast"],"description":"Which doc. Default \"agents\"."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"set_project","description":"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?, fonts?, camera?, lights?, elements:[…] }; every element has a `type` plus base fields (id, x, y, width, height, time, duration, track, opacity, rotation, animations, keyframe_animations) and type-specific fields. 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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"source":{"type":"object","additionalProperties":{},"description":"A full Clipkit source object."},"project_id":{"type":"string","minLength":1,"description":"Which project to act on — the id returned by create_project / set_project / create_promo / load_project. ALWAYS pass it once a project exists in this conversation; omitting it on a build tool creates a brand-new project. (Omit only on the local stdio server working a single project.)"}},"required":["source"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"validate_project","description":"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"project_id":{"type":"string","minLength":1,"description":"Which project to act on — the id returned by create_project / set_project / create_promo / load_project. ALWAYS pass it once a project exists in this conversation; omitting it on a build tool creates a brand-new project. (Omit only on the local stdio server working a single project.)"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}],"scan":{"score":72,"grade":"B","scanned_at":"2026-09-25T21:43:10.930Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-25T21:43:10.939Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1992ms"]},"poisoning":{"score":15,"max":15,"notes":["15 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 4 write-action tools with no auth"]},"maintenance":{"score":12,"max":15,"notes":["last push 45 days ago"]},"identity":{"score":4,"max":10,"notes":["namespace and repository owner differ"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://www.clipkit.dev/mcp","reachable":true,"authRequired":false,"latencyMs":1992,"serverInfo":{"name":"clipkit","version":"0.0.0"}}],"packages":[],"repo":{"found":true,"owner":"clipkit-video","repo":"clipkit","archived":false,"pushedAt":"2026-08-12T06:35:15Z","stars":17,"forks":1,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/296988713?v=4","ownerCreatedAt":"2026-06-25T20:07:34Z","license":"Apache-2.0"},"icon":{"url":"https://www.clipkit.dev/icon.svg?b3d73563853d768d","source":"site"},"presence":{"stars":17,"forks":1,"downloadsWeek":null,"license":"Apache-2.0","lastPushAt":"2026-08-12T06:35:15.000Z","score":27}}}},"grade_history":[],"reviews":[]}