Docs

component MCP tool

Custom components and scene config.

View as Markdown

MCP name component dispatches to renderer component.

Does not use hosted quota. Local editor operation.

Custom components and scene config. action create writes a new component from name, code, componentName. action createFromTemplate instantiates a catalog template. action edit updates an existing component assetId. action setSceneConfig sets resolution, fps, background, style, or caption defaults. After create or createFromTemplate, place the component with timeline_edit action addClip, type component, and the returned assetId. Editor must be open. Does not use hosted quota. Local editor operation.

Advertised MCP input

This tool is registered with passthrough. The fields below are what listTools advertises. The renderer still validates the child fields for the chosen action or kind. Extra advertised-only values are documented under Reachable behavior.

FieldTypeRequiredConstraintsDefaultDescription
actionenum("create", "createFromTemplate", "edit", "setSceneConfig")yesaction for component
resultStartintegernomin 0; max 90071992547409910First character offset to return. Use 0 for the first call.
resultEndintegernomin 1; max 90071992547409918000Exclusive end offset. resultEnd - resultStart must be at most 8000. Increment resultStart by 8000 to page through large results.

Reachable behavior

Advertised action values match the renderer children: create, createFromTemplate, edit, setSceneConfig.

Renderer child fields

These are the authoritative fields for each action. Send them on the same MCP call. Grouped MCP tools use passthrough, so these fields are not all listed in the advertised schema.

action=create

Renderer tool: createComponent.

Create a new Vidova custom component asset with TSX source code. Supports inputDefs including asset inputs: clip values store asset IDs; at preview/render, video/audio/image/model3d inputs become playback URLs, while assetTypes ['vidova'] becomes a VidovaClipData object with screen, camera, cursor, click, and keyboard data. For image/video/audio signals use @initial('') — never put an asset ID in @initial. Pass the signal to <Img src> or <Video src> with explicit width and height. Place only the component clip; do not add a parallel image/video clip for the same asset. Import from @vidova/2d, @vidova/core, and @vidova/components. Shaders are SkSL, not GLSL: wrap content in a cached node and pass shaders={{ fragment, uniforms }}. Put #include "@vidova/core/shaders/common.sksl" at the top of the fragment, or wrap the body with withCommonShader() from @vidova/core. Entry point is half4 main(float2 coord); sample with sampleSource(uv). For embedded Video nodes, call videoRef().play() directly; never spawn(videoRef().play()) because Video.play() returns void. The component will be compiled and available for use on the timeline.

FieldTypeRequiredConstraintsDefaultDescription
namestringyesminLength 1Display name for the component asset
codestringyesminLength 1Vidova Motion TSX source code
componentNamestringyesminLength 1Exported class name (e.g. ProgressRing)
inputDefsobject[]noInput definitions for dynamic props. For type 'asset', default/component input values are asset IDs; Vidova resolves them to playback URLs before passing props into the component.
inputDefs[].namestringyes
inputDefs[].typeenum("string", "number", "boolean", "color", "enum", "asset", "font")yes
inputDefs[].defaultstring \number \booleanyes
inputDefs[].labelstringno
inputDefs[].optionsstring[]noFor type 'enum': list of allowed options the user can choose from
inputDefs[].assetTypesenum("video", "audio", "image", "model3d", "vidova")[]noFor type 'asset': accepted asset kinds. Defaults to video/audio/image/model3d/vidova.
descriptionstringnoShort description of what the component does

action=createFromTemplate

Renderer tool: createComponentFromTemplate.

Create a component from a premade template. Much faster than writing code from scratch. Use this when the user wants a standard component like simple text, a world map, typewriter text, progress ring, counter, pulsing dot, or lower third bar. You can customise the component by passing inputOverrides to set colours, text, sizes, and other parameters. Available templates:

FieldTypeRequiredConstraintsDefaultDescription
templateIdstringyesminLength 1ID of the template to use. Available templates:
inputOverridesobjectnoOverride default input values. Keys must match the template's inputDef names. For example: { "highlightCountry": "Brazil", "landColor": "#1b4332" }
namestringnominLength 1Custom display name for the asset. Defaults to the template name.
descriptionstringnoShort description of this instance

Catalog templateId values:

  • simple-text
  • typewriter
  • progress-ring
  • counter
  • pulsing-dot
  • world-map-3d
  • lower-third-bar
  • fullscreen-overlay-a
  • fullscreen-overlay-b
  • fullscreen-overlay-c
  • fullscreen-overlay-d
  • fullscreen-overlay-e
  • fullscreen-overlay-f
  • callout-arrow
  • keystroke-display
  • code-block
  • caption-pill
  • caption-karaoke
  • caption-highlight

action=edit

Renderer tool: editComponent.

Edit an existing Vidova custom component. Can update code, name, componentName, inputDefs, or description. inputDefs may include asset inputs: clip values store asset IDs; at preview/render, video/audio/image/model3d inputs become playback URLs, while assetTypes ['vidova'] becomes a VidovaClipData object. For image/video/audio signals use @initial('') — never put an asset ID in @initial. Pass the signal to <Img src> or <Video src> with explicit width and height. Place only the component clip; do not add a parallel image/video clip for the same asset. Import from @vidova/2d, @vidova/core, and @vidova/components. Shaders are SkSL, not GLSL: wrap content in a cached node and pass shaders={{ fragment, uniforms }}. Put #include "@vidova/core/shaders/common.sksl" at the top of the fragment, or wrap the body with withCommonShader() from @vidova/core. Entry point is half4 main(float2 coord); sample with sampleSource(uv). For embedded Video nodes, call videoRef().play() directly; never spawn(videoRef().play()) because Video.play() returns void. When updating code, provide the complete new source.

FieldTypeRequiredConstraintsDefaultDescription
assetIdstringyesminLength 1ID of the component asset to edit
codestringnoUpdated Vidova Motion TSX source code
namestringnoUpdated display name
componentNamestringnoUpdated exported class name
inputDefsobject[]noUpdated input definitions. For type 'asset', default/component input values are asset IDs; Vidova resolves them to playback URLs before passing props into the component.
inputDefs[].namestringyes
inputDefs[].typeenum("string", "number", "boolean", "color", "enum", "asset", "font")yes
inputDefs[].defaultstring \number \booleanyes
inputDefs[].labelstringno
inputDefs[].optionsstring[]noFor type 'enum': list of allowed options the user can choose from
inputDefs[].assetTypesenum("video", "audio", "image", "model3d", "vidova")[]noFor type 'asset': accepted asset kinds. Defaults to video/audio/image/model3d/vidova.
descriptionstringnoUpdated description

action=setSceneConfig

Renderer tool: setSceneConfig.

Set project resolution, frame rate, background, wallpaper, name, caption/text defaults, or a complete project style. Only provided fields are updated; explicit fields are applied after styleState.

FieldTypeRequiredConstraintsDefaultDescription
widthintegernomin 320; max 9007199254740991Output width in pixels (min 320)
heightintegernomin 240; max 9007199254740991Output height in pixels (min 240)
fpsintegernomin 1; max 240Frames per second (1–240). Common: 24, 30, 60.
backgroundstringnominLength 1Background color, gradient, or CSS value
backgroundImageobject \nullno
namestringnominLength 1; maxLength 180Project name
captionSettingsobjectnostrictProject caption defaults; merges with current/default settings.
captionSettings.enabledbooleanno
captionSettings.fontFamilystringno
captionSettings.fontWeight400 \500 \700no
captionSettings.fontSizenumberno
captionSettings.distanceFromBottomnumberno
captionSettings.styleenum("pill", "karaoke-lime", "karaoke-magenta", "karaoke-cyan", "outlined", "bold-outline", "minimal", "word-highlight", "pink-pill", "dark-pill-lime", "cloud-blob", "amber-tape", "studio")no
captionSettings.textColorstringno
captionSettings.highlightColorstringno
captionSettings.backgroundColorstringno
captionSettings.shadowColorstringno
captionSettings.shadowBlurnumberno
captionSettings.maxCharsPerLinenumberno
textClipSettingsobjectnostrictDefaults for newly created text clips; merges with current/default settings.
textClipSettings.fontFamilystringno
textClipSettings.fontWeight400 \500 \700no
textClipSettings.defaultFontSizenumberno
textClipSettings.defaultFillstringno
styleStateobjectnostrictComplete project style plus override keys. The style is applied to existing Vidova clips.
styleState.styleobjectyesstrict
styleState.style.idenum("launch", "demo-day", "tutorial", "social-cut", "deep-dive", "sales-demo", "parallax", "sunset", "pop", "terminal", "course", "mobile", "webinar", "mono", "plain")yes
styleState.style.backgroundstringyesminLength 1
styleState.style.paddingnumberyesmin 0; max 400
styleState.style.cornerRadiusnumberyesmin 0; max 200
styleState.style.shadowStrengthnumberyesmin 0; max 100
styleState.style.zoomIntensity0 \1 \2 \3 \4 \
styleState.style.zoomFeelenum("soft-spring", "snappy-spring", "soft-landing", "fast-settle", "gentle-curve")no"soft-spring"
styleState.style.zoom3Dbooleannofalse
styleState.style.cursorStyleenum("default", "cartoon", "modern", "original", "banana", "capitaine-dark", "capitaine-light", "touch", "tahoe", "whitesur", "bibata", "bibata-original")no"default"
styleState.style.cursorSizenumbernomin 24; max 20064
styleState.style.cursorSpotlightbooleannofalse
styleState.style.cameraShapeenum("default", "squircle", "circle")yes
styleState.style.cameraSizenumberyesmin 0; max 1
styleState.style.showShortcutsbooleanyes
styleState.style.captionsEnabledbooleanyes
styleState.style.captionStyleenum("pill", "karaoke-lime", "karaoke-magenta", "karaoke-cyan", "outlined", "bold-outline", "minimal", "word-highlight", "pink-pill", "dark-pill-lime", "cloud-blob", "amber-tape", "studio")yes
styleState.style.captionFontSizenumberyesmin 8; max 200
styleState.overridesenum("background", "padding", "cornerRadius", "shadowStrength", "zoomIntensity", "zoomFeel", "zoom3D", "cursor", "cameraShape", "cameraSize", "showShortcuts", "captions")[]yes

Result window

Every local MCP tool accepts resultStart and resultEnd so large payloads can be paged.

  • resultStart — first character offset. Default 0.
  • resultEnd — exclusive end offset. Default 8000.
  • resultEnd - resultStart must be at most 8000 characters.
  • Increment resultStart by 8000 to read the next window.