{"id":565038,"recorded_at":"2026-10-27T21:53:10.739948Z","observed_at":"2026-10-27T21:53:10.739860Z","subject_kind":"endpoint","subject":"f852b047-d10b-40c5-ab52-d9cfda143986","kind":"mcp.tools","method":"probe.mcp/1","body":{"count":15,"tools":[{"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.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"element":{"additionalProperties":{},"description":"A Clipkit element object. Must include `type`.","type":"object"},"parent_id":{"description":"Optional id of a group to add this element INTO (nested). Omit to add at the top level.","minLength":1,"type":"string"},"project_id":{"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.)","minLength":1,"type":"string"}},"required":["element"],"type":"object"},"name":"add_element"},{"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).","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"background_color":{"description":"Hex color, e.g. \"#000000\".","type":"string"},"duration":{"description":"Composition duration in seconds. Default 10.","exclusiveMinimum":0,"type":"number"},"frame_rate":{"description":"Frame rate. Default 30.","exclusiveMinimum":0,"type":"number"},"height":{"description":"Composition height in pixels. Default 1080.","exclusiveMinimum":0,"type":"integer"},"output_dither":{"anyOf":[{"type":"boolean"},{"additionalProperties":true,"properties":{"amplitude":{"maximum":8,"minimum":0,"type":"number"},"enabled":{"type":"boolean"},"pattern":{"enum":["bayer","noise"],"type":"string"}},"type":"object"}],"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."},"output_format":{"description":"Output container/codec. Default \"mp4\".","enum":["mp4","gif"],"type":"string"},"project_id":{"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.)","minLength":1,"type":"string"},"width":{"description":"Composition width in pixels. Default 1920.","exclusiveMinimum":0,"type":"integer"}},"type":"object"},"name":"create_project"},{"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\".","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"height":{"description":"Default 1080.","exclusiveMinimum":0,"type":"integer"},"motion_blur":{"description":"Supersampled motion-blur samples (≥2 enables it — nicer but slower to render). Default off.","maximum":32,"minimum":0,"type":"integer"},"project_id":{"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.)","minLength":1,"type":"string"},"scenes":{"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:[…]}]","items":{"anyOf":[{"additionalProperties":false,"properties":{"color":{"description":"Accent color slot. Default \"green\".","enum":["pink","green","blue","lavender","purple","yellow","gray"],"type":"string"},"duration":{"description":"Scene length in seconds. Sensible default per scene type.","exclusiveMinimum":0,"type":"number"},"tagline":{"type":"string"},"type":{"const":"hero","type":"string"},"wordmark":{"type":"string"}},"required":["type","wordmark"],"type":"object"},{"additionalProperties":false,"properties":{"color":{"$ref":"#/properties/scenes/items/anyOf/0/properties/color"},"duration":{"$ref":"#/properties/scenes/items/anyOf/0/properties/duration"},"subtitle":{"type":"string"},"text":{"type":"string"},"type":{"const":"kinetic","type":"string"}},"required":["type","text"],"type":"object"},{"additionalProperties":false,"properties":{"color":{"$ref":"#/properties/scenes/items/anyOf/0/properties/color"},"duration":{"$ref":"#/properties/scenes/items/anyOf/0/properties/duration"},"screenshot":{"format":"uri","type":"string"},"type":{"const":"showcase","type":"string"}},"required":["type","screenshot"],"type":"object"},{"additionalProperties":false,"properties":{"color":{"$ref":"#/properties/scenes/items/anyOf/0/properties/color"},"duration":{"$ref":"#/properties/scenes/items/anyOf/0/properties/duration"},"headline":{"type":"string"},"kicker":{"type":"string"},"subtitle":{"type":"string"},"type":{"const":"title","type":"string"}},"required":["type","headline"],"type":"object"},{"additionalProperties":false,"properties":{"color":{"$ref":"#/properties/scenes/items/anyOf/0/properties/color"},"cta":{"type":"string"},"duration":{"$ref":"#/properties/scenes/items/anyOf/0/properties/duration"},"tagline":{"type":"string"},"type":{"const":"cta","type":"string"},"wordmark":{"type":"string"}},"required":["type","wordmark","cta"],"type":"object"},{"additionalProperties":false,"properties":{"color":{"$ref":"#/properties/scenes/items/anyOf/0/properties/color"},"dateRange":{"type":"string"},"duration":{"$ref":"#/properties/scenes/items/anyOf/0/properties/duration"},"stats":{"items":{"additionalProperties":false,"properties":{"current":{"type":"number"},"label":{"type":"string"},"previous":{"type":"number"}},"required":["label","current"],"type":"object"},"maxItems":4,"minItems":1,"type":"array"},"title":{"type":"string"},"type":{"const":"stats","type":"string"}},"required":["type","stats"],"type":"object"},{"additionalProperties":false,"properties":{"bars":{"items":{"additionalProperties":false,"properties":{"label":{"type":"string"},"previous":{"type":"number"},"value":{"type":"number"}},"required":["label","value"],"type":"object"},"maxItems":6,"minItems":1,"type":"array"},"color":{"$ref":"#/properties/scenes/items/anyOf/0/properties/color"},"dateRange":{"type":"string"},"duration":{"$ref":"#/properties/scenes/items/anyOf/0/properties/duration"},"title":{"type":"string"},"type":{"const":"bars","type":"string"}},"required":["type","bars"],"type":"object"},{"additionalProperties":false,"properties":{"color":{"$ref":"#/properties/scenes/items/anyOf/0/properties/color"},"dateRange":{"type":"string"},"duration":{"$ref":"#/properties/scenes/items/anyOf/0/properties/duration"},"items":{"items":{"additionalProperties":false,"properties":{"label":{"type":"string"},"value":{"type":"number"}},"required":["label","value"],"type":"object"},"maxItems":12,"minItems":1,"type":"array"},"title":{"type":"string"},"type":{"const":"ranking","type":"string"}},"required":["type","items"],"type":"object"},{"additionalProperties":false,"properties":{"cards":{"items":{"additionalProperties":false,"properties":{"label":{"type":"string"},"previous":{"type":"number"},"total":{"type":"number"},"value":{"type":"number"}},"required":["label","value","total"],"type":"object"},"maxItems":4,"minItems":1,"type":"array"},"color":{"$ref":"#/properties/scenes/items/anyOf/0/properties/color"},"dateRange":{"type":"string"},"duration":{"$ref":"#/properties/scenes/items/anyOf/0/properties/duration"},"title":{"type":"string"},"type":{"const":"pie","type":"string"}},"required":["type","cards"],"type":"object"}]},"minItems":1,"type":"array"},"theme":{"description":"Visual theme. Default \"cinematic\" (dark, serif, premium).","enum":["cinematic","mux","minimal"],"type":"string"},"width":{"description":"Default 1920.","exclusiveMinimum":0,"type":"integer"}},"required":["scenes"],"type":"object"},"name":"create_promo"},{"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.)","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"id":{"description":"The id of the element to delete.","minLength":1,"type":"string"},"project_id":{"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.)","minLength":1,"type":"string"}},"required":["id"],"type":"object"},"name":"delete_element"},{"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.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"project_id":{"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.)","minLength":1,"type":"string"}},"type":"object"},"name":"describe_project"},{"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.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"id":{"description":"The id of the element to edit.","minLength":1,"type":"string"},"patch":{"additionalProperties":{},"description":"Partial element: the fields to change. Omitted keys are left as-is; a key set to null is removed.","type":"object"},"project_id":{"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.)","minLength":1,"type":"string"}},"required":["id","patch"],"type":"object"},"name":"edit_element"},{"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.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"project_id":{"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.)","minLength":1,"type":"string"}},"type":"object"},"name":"get_project"},{"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.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"element_type":{"description":"Limit to one element type's fields (e.g. \"text\"). Omit for the full Source schema (large).","enum":["video","image","text","shape","audio","group","caption","particles"],"type":"string"}},"type":"object"},"name":"get_schema"},{"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.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"filename":{"description":"Optional display name for the asset.","type":"string"},"project_id":{"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.)","minLength":1,"type":"string"},"url":{"description":"A public http(s) URL to an image, video, or audio file.","format":"uri","type":"string"}},"required":["url"],"type":"object"},"name":"ingest_asset"},{"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.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"id_or_url":{"description":"A share id, or a clipkit.dev/editor?id=… URL.","minLength":1,"type":"string"},"project_id":{"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.)","minLength":1,"type":"string"}},"required":["id_or_url"],"type":"object"},"name":"load_project"},{"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.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"project_id":{"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.)","minLength":1,"type":"string"}},"type":"object"},"name":"open_in_editor"},{"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.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"project_id":{"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.)","minLength":1,"type":"string"},"time":{"description":"Composition time in seconds to capture. Default 0 (first frame).","minimum":0,"type":"number"}},"type":"object"},"name":"preview_still"},{"description":"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.)","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"topic":{"description":"Which doc. Default \"agents\".","enum":["agents","protocol","brand","card","pattern-data-viz","pattern-cinematic-ui","pattern-ui-screencast","pattern-lighting","pattern-promo-teaser"],"type":"string"}},"type":"object"},"name":"read_docs"},{"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?, 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.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"project_id":{"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.)","minLength":1,"type":"string"},"source":{"additionalProperties":{},"description":"A full Clipkit source object.","type":"object"}},"required":["source"],"type":"object"},"name":"set_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.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"project_id":{"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.)","minLength":1,"type":"string"}},"type":"object"},"name":"validate_project"}]},"body_sha256":"522d5c5d0f61254d5b17e9092191704dd5c09f9987bc1b3fe5d82edf0f0e000e","prev_id":null,"leaf":"0x275e33e562c1ebffc1d9e547c04e584fe3826e8bce8eafc14077aaf03dd87654","leaf_text":"{\"body\":\"522d5c5d0f61254d5b17e9092191704dd5c09f9987bc1b3fe5d82edf0f0e000e\",\"id\":565038,\"kind\":\"mcp.tools\",\"method\":\"probe.mcp/1\",\"observed_us\":1793137990739860,\"prev\":null,\"subject\":\"f852b047-d10b-40c5-ab52-d9cfda143986\",\"subject_kind\":\"endpoint\"}","day":{"day":"2026-10-27","leaves":273461,"root":"0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795","chained":"0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4","anchor_chain":"eip155:5042002","anchor_tx":"0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4","anchor_block":69414147},"proof":["0x275e5026f4298caf5e31899170f6d0b7e5fda3821868c8a04e9c5472cc272967","0xfd3b08a5a2d9e0c29bd89a40c9f0528c50830b2ab0fade407b50cf8c2338342a","0x13fcc582f3646ec28fa4eb2a5ef17b69f754c12f04a2a7b008d567a9b8b4a8e3","0x367c62bbad5b17fd4d7fb015bbf50fb2b8615798fab1da32def4021da3670f55","0x163a1a55f4688b85ee23e5251dd2364ccd6cb28dfc89bc6f628184aaf4a2cc8a","0x4e3d09fa4f7ed6dc7e928150534c7e0f8dcd94a2f08103e0759450e63d6be4ee","0x1db6ae65091614eec6445f7182979ba0c87fb0e81535fed9855c2420ded9cdc7","0xe3b076c9a4953bcee2c1d8fe59dd4b4fe8c0dcbf9154c23341abeedd67c1cb99","0x753cccf321b12a1eca69cde319db23cdd3e464c2db352b5fa082cae67f1e0daa","0xbb442d214adf08f578849181fdfb23278d82dbf1151f63bb64a2c559052d766f","0x2d75a3b8f36f049e598ecd7557138ba9fd051a8555ec519a603c54db3bb1093f","0xf5aa0adf486bca586314afc4935e732d521d3d8275e51eb4c8d2de46b00ea2c1","0x28be2f2303fcac4decdb6323b0f4ee8f8a31038beb758eaafc604a98626292e4","0x8ff18b1523f9fbdd16a5796cbe184b46854c06256508af8de5509b598370c725","0xa383a1cfe9b3f6af67eb4c7642564b9424d46d7fca90e7ba175d549f8b67dd0c","0x52efa60e0c3d8525486d2310eb3b6b566c9677c64fd1f819edb072cf101bcbdb","0x22c1fb9487ee0b9732fa017a0cc321eb27a60c08450d112f755089796e12cb1c","0xa20d48798a34aba12eb9c7297722982d910f06c148f5e27ac59307422964a585","0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699"]}