@vibeframe/cli 0.110.0 → 0.111.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +201 -1
- package/dist/tools/adapters/mcp.d.ts +10 -0
- package/dist/tools/adapters/mcp.js +14 -1
- package/dist/tools/define-tool.d.ts +26 -0
- package/dist/tools/manifest/index.js +200 -0
- package/package.json +3 -3
|
@@ -53173,6 +53173,8 @@ var sceneStylesTool = defineTool({
|
|
|
53173
53173
|
name: "scene_list_styles",
|
|
53174
53174
|
category: "scene",
|
|
53175
53175
|
cost: "free",
|
|
53176
|
+
title: "List Visual Styles",
|
|
53177
|
+
annotations: { readOnly: true, openWorld: false },
|
|
53176
53178
|
description: "List the 8 vendored visual identities available for `init --visual-style` (Swiss Pulse, Data Drift, \u2026) or, when `name` is provided, return the full DESIGN.md hard-gate body for one style. The DESIGN.md content is what the LLM uses as a non-negotiable visual rulebook during compose-scenes-with-skills.",
|
|
53177
53179
|
schema: sceneStylesSchema,
|
|
53178
53180
|
async execute(args) {
|
|
@@ -53234,6 +53236,8 @@ var sceneInitTool = defineTool({
|
|
|
53234
53236
|
name: "init",
|
|
53235
53237
|
category: "scene",
|
|
53236
53238
|
cost: "free",
|
|
53239
|
+
title: "Initialize Video Project",
|
|
53240
|
+
annotations: { readOnly: false, destructive: false, idempotent: true, openWorld: false },
|
|
53237
53241
|
description: "Scaffold a new VibeFrame video scene project. Supports minimal, agent, and full profiles; full includes the current HTML render backend metadata. Idempotent: re-running keeps user-authored files and merges backend config instead of overwriting. No API keys required.",
|
|
53238
53242
|
schema: sceneInitSchema,
|
|
53239
53243
|
async execute(args, ctx) {
|
|
@@ -53284,6 +53288,8 @@ var sceneAddTool = defineTool({
|
|
|
53284
53288
|
name: "scene_add",
|
|
53285
53289
|
category: "scene",
|
|
53286
53290
|
cost: "low",
|
|
53291
|
+
title: "Add Scene from Preset",
|
|
53292
|
+
annotations: { readOnly: false, openWorld: true },
|
|
53287
53293
|
description: "Add a single scene to an existing scene project. Optionally generates narration audio (ElevenLabs) and/or a backdrop image (Gemini/OpenAI), then emits compositions/scene-<id>.html with a paused GSAP timeline and splices a clip reference into the root index.html. Use skipAudio:true and skipImage:true for text-only scenes that need no API calls.",
|
|
53288
53294
|
schema: sceneAddSchema,
|
|
53289
53295
|
async execute(args, ctx) {
|
|
@@ -53362,6 +53368,8 @@ var sceneLintTool = defineTool({
|
|
|
53362
53368
|
name: "scene_lint",
|
|
53363
53369
|
category: "scene",
|
|
53364
53370
|
cost: "free",
|
|
53371
|
+
title: "Lint Scene Compositions",
|
|
53372
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
53365
53373
|
description: "Validate every scene file in a project against the public Hyperframes lint rules (in-process, no Chrome required). Returns errors, warnings, and info findings per file. Optional fix:true mechanically repairs `timed_element_missing_clip_class` only \u2014 other issues surface with fixHints.",
|
|
53366
53374
|
schema: sceneLintSchema,
|
|
53367
53375
|
async execute(args, ctx) {
|
|
@@ -53399,6 +53407,8 @@ var sceneRepairTool = defineTool({
|
|
|
53399
53407
|
name: "scene_repair",
|
|
53400
53408
|
category: "scene",
|
|
53401
53409
|
cost: "free",
|
|
53410
|
+
title: "Repair Scene Compositions",
|
|
53411
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
53402
53412
|
description: "Apply deterministic mechanical scene repairs. Currently uses the safe lint auto-fix allow-list and never performs semantic creative rewrites.",
|
|
53403
53413
|
schema: sceneRepairSchema,
|
|
53404
53414
|
async execute(args, ctx) {
|
|
@@ -53479,6 +53489,8 @@ var sceneRenderTool = defineTool({
|
|
|
53479
53489
|
name: "render",
|
|
53480
53490
|
category: "scene",
|
|
53481
53491
|
cost: "free",
|
|
53492
|
+
title: "Render Video to MP4",
|
|
53493
|
+
annotations: { readOnly: false, openWorld: false },
|
|
53482
53494
|
description: "Render a scene project to MP4/WebM/MOV via the Hyperframes producer. Requires Chrome installed locally. Output defaults to renders/<projectName>-<isoStamp>.<format>. Long runs: over MCP, calls exceeding ~45s return immediately with { promoted: true, jobId, status: 'running' } \u2014 poll status_job every 15-30s until completed/failed instead of re-invoking render. Emits MCP progress notifications when the client supplies a progressToken.",
|
|
53483
53495
|
schema: sceneRenderSchema,
|
|
53484
53496
|
async execute(args, ctx) {
|
|
@@ -53608,6 +53620,8 @@ var sceneBuildTool = defineTool({
|
|
|
53608
53620
|
name: "build",
|
|
53609
53621
|
category: "scene",
|
|
53610
53622
|
cost: "high",
|
|
53623
|
+
title: "Build Video from Storyboard",
|
|
53624
|
+
annotations: { readOnly: false, openWorld: true },
|
|
53611
53625
|
description: "v0.60 one-shot orchestrator: read STORYBOARD.md per-beat YAML cues (narration / backdrop / duration), dispatch TTS + image generation per beat, compose scene HTML via the compose-scenes-with-skills pipeline, then render to MP4. Use this instead of chaining init + scene_add + render manually. Caches by SHA256 of (DESIGN.md + cue body) so re-runs are idempotent and cheap. Long runs: over MCP, calls exceeding ~45s return immediately with { promoted: true, jobId, status: 'running' } \u2014 poll status_job every 15-30s until completed/failed instead of re-invoking build. Emits MCP progress notifications when the client supplies a progressToken. When the MCP host supports elicitation, unspecified asset choices (narration provider, backdrop images, cost cap) are confirmed with the user via a form before the build starts.",
|
|
53612
53626
|
schema: sceneBuildSchema,
|
|
53613
53627
|
async execute(args, ctx) {
|
|
@@ -53690,6 +53704,8 @@ var sceneInstallSkillTool = defineTool({
|
|
|
53690
53704
|
name: "scene_install_skill",
|
|
53691
53705
|
category: "scene",
|
|
53692
53706
|
cost: "free",
|
|
53707
|
+
title: "Install Hyperframes Skill",
|
|
53708
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
53693
53709
|
description: "Install the vendored Hyperframes skill bundle into a scene project so the host agent (Claude Code, Cursor, Codex, Aider) can read framework rules + house style directly. Writes a universal SKILL.md + references/ at the project root, plus per-host layouts (.claude/skills/hyperframes/ for Claude Code, .cursor/rules/hyperframes.mdc for Cursor) when those hosts are detected. Phase H1 of the agentic-native composer plan \u2014 once installed, the host agent itself can author scene HTML using the rules instead of relying on vibe's internal LLM call.",
|
|
53694
53710
|
schema: sceneInstallSkillSchema,
|
|
53695
53711
|
async execute(args, ctx) {
|
|
@@ -53736,6 +53752,8 @@ var sceneComposePromptsTool = defineTool({
|
|
|
53736
53752
|
name: "scene_compose_prompts",
|
|
53737
53753
|
category: "scene",
|
|
53738
53754
|
cost: "free",
|
|
53755
|
+
title: "Get Scene Authoring Prompts",
|
|
53756
|
+
annotations: { readOnly: true, openWorld: false },
|
|
53739
53757
|
description: "Emit the per-beat compose plan for the host agent to author scene HTML itself. Reads STORYBOARD.md + DESIGN.md and returns each beat's outputPath + userPrompt + cues + body, plus references to the project's SKILL.md (Hyperframes rules) and DESIGN.md (visual identity). The host agent writes each compositions/scene-<id>.html file directly \u2014 VibeFrame makes NO LLM call here. Hosts that cannot write files (e.g. Claude Desktop) submit each authored beat with scene_submit instead. Pairs with scene_install_skill (Phase H1). Phase H2 of the agentic-native composer plan; the internal-LLM batch path (build) remains as a fallback for non-agent contexts.",
|
|
53740
53758
|
schema: sceneComposePromptsSchema,
|
|
53741
53759
|
async execute(args, ctx) {
|
|
@@ -53778,6 +53796,8 @@ var sceneSubmitTool = defineTool({
|
|
|
53778
53796
|
name: "scene_submit",
|
|
53779
53797
|
category: "scene",
|
|
53780
53798
|
cost: "free",
|
|
53799
|
+
title: "Submit Scene HTML",
|
|
53800
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
53781
53801
|
description: "Submit host-authored Hyperframes scene HTML for one beat. Validates with the same lint as the batch composer and writes compositions/scene-<id>.html on pass; on lint errors it returns the findings WITHOUT writing so you can fix and resubmit. This completes agent-mode compose for hosts that cannot write files (e.g. Claude Desktop): build (mode agent) \u2192 needs-author plan \u2192 author each beat from its composePrompts userPrompt \u2192 scene_submit per beat \u2192 build (stage sync) \u2192 render. No internal LLM call \u2014 the submitting agent is the composer.",
|
|
53782
53802
|
schema: sceneSubmitSchema,
|
|
53783
53803
|
async execute(args, ctx) {
|
|
@@ -53819,6 +53839,8 @@ var audioTranscribeTool = defineTool({
|
|
|
53819
53839
|
name: "audio_transcribe",
|
|
53820
53840
|
category: "audio",
|
|
53821
53841
|
cost: "low",
|
|
53842
|
+
title: "Transcribe Audio",
|
|
53843
|
+
annotations: { readOnly: false, openWorld: true },
|
|
53822
53844
|
description: "Transcribe audio using OpenAI Whisper. Outputs text, SRT, or VTT. Requires OPENAI_API_KEY.",
|
|
53823
53845
|
schema: external_exports.object({
|
|
53824
53846
|
audioPath: external_exports.string().describe("Input audio file path"),
|
|
@@ -53848,6 +53870,8 @@ var audioIsolateTool = defineTool({
|
|
|
53848
53870
|
name: "audio_isolate",
|
|
53849
53871
|
category: "audio",
|
|
53850
53872
|
cost: "low",
|
|
53873
|
+
title: "Isolate Vocals from Audio",
|
|
53874
|
+
annotations: { readOnly: false, openWorld: true },
|
|
53851
53875
|
description: "Isolate vocals from audio using ElevenLabs. Requires ELEVENLABS_API_KEY.",
|
|
53852
53876
|
schema: external_exports.object({
|
|
53853
53877
|
audioPath: external_exports.string().describe("Input audio file path"),
|
|
@@ -53867,6 +53891,8 @@ var audioVoiceCloneTool = defineTool({
|
|
|
53867
53891
|
name: "audio_clone_voice",
|
|
53868
53892
|
category: "audio",
|
|
53869
53893
|
cost: "low",
|
|
53894
|
+
title: "Clone Voice from Samples",
|
|
53895
|
+
annotations: { readOnly: false, destructive: false, openWorld: true },
|
|
53870
53896
|
description: "Clone a voice from audio samples using ElevenLabs. Requires ELEVENLABS_API_KEY.",
|
|
53871
53897
|
schema: external_exports.object({
|
|
53872
53898
|
samplePaths: external_exports.array(external_exports.string()).describe("Audio sample file paths (1-25 files)"),
|
|
@@ -53888,6 +53914,8 @@ var audioDubTool = defineTool({
|
|
|
53888
53914
|
name: "audio_dub",
|
|
53889
53915
|
category: "audio",
|
|
53890
53916
|
cost: "high",
|
|
53917
|
+
title: "Dub Audio to Another Language",
|
|
53918
|
+
annotations: { readOnly: false, openWorld: true },
|
|
53891
53919
|
description: "Dub audio/video to another language (transcribe + translate + TTS). Requires OPENAI_API_KEY, ANTHROPIC_API_KEY, ELEVENLABS_API_KEY.",
|
|
53892
53920
|
schema: external_exports.object({
|
|
53893
53921
|
mediaPath: external_exports.string().describe("Input media file (video or audio)"),
|
|
@@ -53918,6 +53946,8 @@ var audioDuckTool = defineTool({
|
|
|
53918
53946
|
name: "audio_duck",
|
|
53919
53947
|
category: "audio",
|
|
53920
53948
|
cost: "free",
|
|
53949
|
+
title: "Duck Background Music",
|
|
53950
|
+
annotations: { readOnly: false, openWorld: false },
|
|
53921
53951
|
description: "Auto-duck background music when voice is present using FFmpeg sidechain compression. Free, no API key needed.",
|
|
53922
53952
|
schema: external_exports.object({
|
|
53923
53953
|
musicPath: external_exports.string().describe("Background music file path"),
|
|
@@ -54214,6 +54244,8 @@ var editSilenceCutTool = defineTool({
|
|
|
54214
54244
|
name: "edit_silence_cut",
|
|
54215
54245
|
category: "edit",
|
|
54216
54246
|
cost: "free",
|
|
54247
|
+
title: "Cut Silence from Video",
|
|
54248
|
+
annotations: { readOnly: false, openWorld: true },
|
|
54217
54249
|
description: "Remove silent segments from a video using FFmpeg or Gemini AI detection. No API key needed for FFmpeg mode.",
|
|
54218
54250
|
schema: external_exports.object({
|
|
54219
54251
|
videoPath: external_exports.string().describe("Path to the input video file"),
|
|
@@ -54244,6 +54276,8 @@ var editCaptionTool = defineTool({
|
|
|
54244
54276
|
name: "edit_caption",
|
|
54245
54277
|
category: "edit",
|
|
54246
54278
|
cost: "low",
|
|
54279
|
+
title: "Burn Captions into Video",
|
|
54280
|
+
annotations: { readOnly: false, openWorld: true },
|
|
54247
54281
|
description: "Transcribe audio and burn styled captions into video. Requires OPENAI_API_KEY for Whisper transcription.",
|
|
54248
54282
|
schema: external_exports.object({
|
|
54249
54283
|
videoPath: external_exports.string().describe("Path to the input video file"),
|
|
@@ -54268,6 +54302,8 @@ var editFadeTool = defineTool({
|
|
|
54268
54302
|
name: "edit_fade",
|
|
54269
54303
|
category: "edit",
|
|
54270
54304
|
cost: "free",
|
|
54305
|
+
title: "Apply Fade Effects",
|
|
54306
|
+
annotations: { readOnly: false, openWorld: false },
|
|
54271
54307
|
description: "Apply fade in/out effects to video and/or audio. No API key needed.",
|
|
54272
54308
|
schema: external_exports.object({
|
|
54273
54309
|
videoPath: external_exports.string().describe("Path to the input video file"),
|
|
@@ -54291,6 +54327,8 @@ var editNoiseReduceTool = defineTool({
|
|
|
54291
54327
|
name: "edit_noise_reduce",
|
|
54292
54328
|
category: "edit",
|
|
54293
54329
|
cost: "free",
|
|
54330
|
+
title: "Reduce Audio Noise",
|
|
54331
|
+
annotations: { readOnly: false, openWorld: false },
|
|
54294
54332
|
description: "Reduce audio/video noise using FFmpeg filters. No API key needed.",
|
|
54295
54333
|
schema: external_exports.object({
|
|
54296
54334
|
inputPath: external_exports.string().describe("Path to the input media file"),
|
|
@@ -54312,6 +54350,8 @@ var editJumpCutTool = defineTool({
|
|
|
54312
54350
|
name: "edit_jump_cut",
|
|
54313
54351
|
category: "edit",
|
|
54314
54352
|
cost: "low",
|
|
54353
|
+
title: "Remove Filler Words",
|
|
54354
|
+
annotations: { readOnly: false, openWorld: true },
|
|
54315
54355
|
description: "Remove filler words (um, uh, like, etc.) from video using Whisper transcription. Requires OPENAI_API_KEY.",
|
|
54316
54356
|
schema: external_exports.object({
|
|
54317
54357
|
videoPath: external_exports.string().describe("Path to the input video file"),
|
|
@@ -54335,6 +54375,8 @@ var editTextOverlayTool = defineTool({
|
|
|
54335
54375
|
name: "edit_text_overlay",
|
|
54336
54376
|
category: "edit",
|
|
54337
54377
|
cost: "free",
|
|
54378
|
+
title: "Overlay Static Text",
|
|
54379
|
+
annotations: { readOnly: false, openWorld: false },
|
|
54338
54380
|
description: "Apply simple static text burn-in on video using FFmpeg drawtext. No API key needed. For designed or animated overlays, use edit_motion_overlay.",
|
|
54339
54381
|
schema: external_exports.object({
|
|
54340
54382
|
videoPath: external_exports.string().describe("Path to the input video file"),
|
|
@@ -54361,6 +54403,8 @@ var editMotionOverlayTool = defineTool({
|
|
|
54361
54403
|
name: "edit_motion_overlay",
|
|
54362
54404
|
category: "edit",
|
|
54363
54405
|
cost: "low",
|
|
54406
|
+
title: "Apply Motion Graphics Overlay",
|
|
54407
|
+
annotations: { readOnly: false, openWorld: true },
|
|
54364
54408
|
description: "Apply designed motion graphics overlays to an existing video. Generates Remotion overlays from a prompt, or overlays a user-provided .json/.lottie animation via the Hyperframes renderer.",
|
|
54365
54409
|
schema: external_exports.object({
|
|
54366
54410
|
videoPath: external_exports.string().describe("Path to the input video file"),
|
|
@@ -54397,6 +54441,8 @@ var editTranslateSrtTool = defineTool({
|
|
|
54397
54441
|
name: "edit_translate_srt",
|
|
54398
54442
|
category: "edit",
|
|
54399
54443
|
cost: "low",
|
|
54444
|
+
title: "Translate SRT Subtitles",
|
|
54445
|
+
annotations: { readOnly: false, openWorld: true },
|
|
54400
54446
|
description: "Translate SRT subtitle files using Claude or OpenAI. Requires ANTHROPIC_API_KEY or OPENAI_API_KEY.",
|
|
54401
54447
|
schema: external_exports.object({
|
|
54402
54448
|
srtPath: external_exports.string().describe("Path to the input SRT file"),
|
|
@@ -54419,6 +54465,8 @@ var editGradeTool = defineTool({
|
|
|
54419
54465
|
name: "edit_grade",
|
|
54420
54466
|
category: "edit",
|
|
54421
54467
|
cost: "low",
|
|
54468
|
+
title: "Apply Color Grading",
|
|
54469
|
+
annotations: { readOnly: false, openWorld: true },
|
|
54422
54470
|
description: "Apply AI-generated color grading using Claude + FFmpeg. Use preset for free built-in grades, or style for custom AI-generated grades (needs ANTHROPIC_API_KEY).",
|
|
54423
54471
|
schema: external_exports.object({
|
|
54424
54472
|
videoPath: external_exports.string().describe("Input video file path"),
|
|
@@ -54441,6 +54489,8 @@ var editSpeedRampTool = defineTool({
|
|
|
54441
54489
|
name: "edit_speed_ramp",
|
|
54442
54490
|
category: "edit",
|
|
54443
54491
|
cost: "low",
|
|
54492
|
+
title: "Apply Content-Aware Speed Ramping",
|
|
54493
|
+
annotations: { readOnly: false, openWorld: true },
|
|
54444
54494
|
description: "Apply content-aware speed ramping. Analyzes speech with Whisper, plans speed changes with Claude, applies with FFmpeg. Requires OPENAI_API_KEY + ANTHROPIC_API_KEY.",
|
|
54445
54495
|
schema: external_exports.object({
|
|
54446
54496
|
videoPath: external_exports.string().describe("Input video file path (must have audio)"),
|
|
@@ -54465,6 +54515,8 @@ var editReframeTool = defineTool({
|
|
|
54465
54515
|
name: "edit_reframe",
|
|
54466
54516
|
category: "edit",
|
|
54467
54517
|
cost: "free",
|
|
54518
|
+
title: "Reframe Video Aspect Ratio",
|
|
54519
|
+
annotations: { readOnly: false, openWorld: false },
|
|
54468
54520
|
description: "Auto-reframe video to a different aspect ratio using smart cropping. Free (FFmpeg only).",
|
|
54469
54521
|
schema: external_exports.object({
|
|
54470
54522
|
videoPath: external_exports.string().describe("Input video file path"),
|
|
@@ -54487,6 +54539,8 @@ var editInterpolateTool = defineTool({
|
|
|
54487
54539
|
name: "edit_interpolate",
|
|
54488
54540
|
category: "edit",
|
|
54489
54541
|
cost: "free",
|
|
54542
|
+
title: "Create Slow Motion with Frame Interpolation",
|
|
54543
|
+
annotations: { readOnly: false, openWorld: false },
|
|
54490
54544
|
description: "Create slow motion with AI frame interpolation using FFmpeg minterpolate. Free, no API key needed.",
|
|
54491
54545
|
schema: external_exports.object({
|
|
54492
54546
|
videoPath: external_exports.string().describe("Input video file path"),
|
|
@@ -54509,6 +54563,8 @@ var editUpscaleTool = defineTool({
|
|
|
54509
54563
|
name: "edit_upscale",
|
|
54510
54564
|
category: "edit",
|
|
54511
54565
|
cost: "free",
|
|
54566
|
+
title: "Upscale Video Resolution",
|
|
54567
|
+
annotations: { readOnly: false, openWorld: false },
|
|
54512
54568
|
description: "Upscale video resolution using FFmpeg (Lanczos scaling). Free, no API key needed.",
|
|
54513
54569
|
schema: external_exports.object({
|
|
54514
54570
|
videoPath: external_exports.string().describe("Input video file path"),
|
|
@@ -54530,6 +54586,8 @@ var editAnimatedCaptionTool = defineTool({
|
|
|
54530
54586
|
name: "edit_animated_caption",
|
|
54531
54587
|
category: "edit",
|
|
54532
54588
|
cost: "low",
|
|
54589
|
+
title: "Add Animated Captions",
|
|
54590
|
+
annotations: { readOnly: false, openWorld: true },
|
|
54533
54591
|
description: "Add animated word-by-word captions (TikTok/Reels style). Supports highlight, bounce, pop-in, neon, karaoke-sweep, typewriter styles. Requires OPENAI_API_KEY for Whisper.",
|
|
54534
54592
|
schema: external_exports.object({
|
|
54535
54593
|
videoPath: external_exports.string().describe("Path to the input video file"),
|
|
@@ -54562,6 +54620,8 @@ var editImageTool = defineTool({
|
|
|
54562
54620
|
name: "edit_image",
|
|
54563
54621
|
category: "edit",
|
|
54564
54622
|
cost: "low",
|
|
54623
|
+
title: "Edit Image with AI",
|
|
54624
|
+
annotations: { readOnly: false, openWorld: true },
|
|
54565
54625
|
description: "Edit image(s) using Gemini (Nano Banana). Provide image paths and an edit prompt. Requires GOOGLE_API_KEY.",
|
|
54566
54626
|
schema: external_exports.object({
|
|
54567
54627
|
imagePaths: external_exports.array(external_exports.string()).describe("Input image file path(s)"),
|
|
@@ -54585,6 +54645,8 @@ var editFillGapsTool = defineTool({
|
|
|
54585
54645
|
name: "edit_fill_gaps",
|
|
54586
54646
|
category: "edit",
|
|
54587
54647
|
cost: "high",
|
|
54648
|
+
title: "Fill Timeline Gaps with AI Video",
|
|
54649
|
+
annotations: { readOnly: false, openWorld: true },
|
|
54588
54650
|
description: "Fill timeline gaps with AI-generated video using Kling image-to-video. Detects empty regions in a project's timeline, extracts the last frame of the preceding clip, and generates a continuation video. Requires KLING_API_KEY and IMGBB_API_KEY (image hosting for Kling).",
|
|
54589
54651
|
schema: external_exports.object({
|
|
54590
54652
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -56067,6 +56129,8 @@ var inspectProjectTool = defineTool({
|
|
|
56067
56129
|
name: "inspect_project",
|
|
56068
56130
|
category: "analyze",
|
|
56069
56131
|
cost: "free",
|
|
56132
|
+
title: "Inspect Project",
|
|
56133
|
+
annotations: { readOnly: false, openWorld: false },
|
|
56070
56134
|
description: "Local project inspection: checks STORYBOARD.md, DESIGN.md, config, build-report, scene lint, composition files, and referenced assets. Writes review-report.json by default.",
|
|
56071
56135
|
schema: external_exports.object({
|
|
56072
56136
|
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION2),
|
|
@@ -56101,6 +56165,8 @@ var inspectRenderTool = defineTool({
|
|
|
56101
56165
|
name: "inspect_render",
|
|
56102
56166
|
category: "analyze",
|
|
56103
56167
|
cost: "low",
|
|
56168
|
+
title: "Inspect Render",
|
|
56169
|
+
annotations: { readOnly: false, openWorld: false },
|
|
56104
56170
|
description: "Render inspection: runs cheap local video checks by default, optionally adds Gemini AI review with ai: true, and writes review-report.json by default.",
|
|
56105
56171
|
schema: external_exports.object({
|
|
56106
56172
|
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION2),
|
|
@@ -56165,6 +56231,8 @@ var analyzeMediaTool = defineTool({
|
|
|
56165
56231
|
name: "inspect_media",
|
|
56166
56232
|
category: "analyze",
|
|
56167
56233
|
cost: "low",
|
|
56234
|
+
title: "Inspect Media with AI",
|
|
56235
|
+
annotations: { readOnly: true, openWorld: true },
|
|
56168
56236
|
description: "Analyze media (image, video, or YouTube URL) using Gemini AI. Requires GOOGLE_API_KEY.",
|
|
56169
56237
|
schema: external_exports.object({
|
|
56170
56238
|
source: external_exports.string().describe("Path to image/video or YouTube URL"),
|
|
@@ -56193,6 +56261,8 @@ var analyzeVideoTool = defineTool({
|
|
|
56193
56261
|
name: "inspect_video",
|
|
56194
56262
|
category: "analyze",
|
|
56195
56263
|
cost: "low",
|
|
56264
|
+
title: "Inspect Video with AI",
|
|
56265
|
+
annotations: { readOnly: true, openWorld: true },
|
|
56196
56266
|
description: "Analyze video content using Gemini AI with temporal understanding. Requires GOOGLE_API_KEY.",
|
|
56197
56267
|
schema: external_exports.object({
|
|
56198
56268
|
source: external_exports.string().describe("Path to video file"),
|
|
@@ -56221,6 +56291,8 @@ var analyzeReviewTool = defineTool({
|
|
|
56221
56291
|
name: "inspect_review",
|
|
56222
56292
|
category: "analyze",
|
|
56223
56293
|
cost: "low",
|
|
56294
|
+
title: "Review Video with AI",
|
|
56295
|
+
annotations: { readOnly: false, openWorld: true },
|
|
56224
56296
|
description: "AI video review: analyzes quality, suggests fixes, and optionally auto-applies them. Requires GOOGLE_API_KEY.",
|
|
56225
56297
|
schema: external_exports.object({
|
|
56226
56298
|
videoPath: external_exports.string().describe("Path to the video file to review"),
|
|
@@ -56249,6 +56321,8 @@ var analyzeSuggestTool = defineTool({
|
|
|
56249
56321
|
name: "inspect_suggest",
|
|
56250
56322
|
category: "analyze",
|
|
56251
56323
|
cost: "low",
|
|
56324
|
+
title: "Suggest Edits with AI",
|
|
56325
|
+
annotations: { readOnly: false, openWorld: true },
|
|
56252
56326
|
description: "Get natural-language edit suggestions for a project from Gemini. Returns suggestions array with type/confidence/clipIds. With `apply: true`, applies the first suggestion in place. Requires GOOGLE_API_KEY.",
|
|
56253
56327
|
schema: external_exports.object({
|
|
56254
56328
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -56296,6 +56370,8 @@ var generateMotionTool = defineTool({
|
|
|
56296
56370
|
name: "generate_motion",
|
|
56297
56371
|
category: "generate",
|
|
56298
56372
|
cost: "low",
|
|
56373
|
+
title: "Generate Motion Graphics",
|
|
56374
|
+
annotations: { readOnly: false, openWorld: true },
|
|
56299
56375
|
description: "Generate standalone motion graphics using Claude or Gemini + Remotion. For overlays on an existing video, prefer edit_motion_overlay. Requires ANTHROPIC_API_KEY (Claude) or GOOGLE_API_KEY (Gemini).",
|
|
56300
56376
|
schema: external_exports.object({
|
|
56301
56377
|
description: external_exports.string().describe("Description of the motion graphic to generate"),
|
|
@@ -56335,6 +56411,8 @@ var generateSpeechTool = defineTool({
|
|
|
56335
56411
|
name: "generate_speech",
|
|
56336
56412
|
category: "generate",
|
|
56337
56413
|
cost: "low",
|
|
56414
|
+
title: "Generate Speech Audio",
|
|
56415
|
+
annotations: { readOnly: false, openWorld: true },
|
|
56338
56416
|
description: "Generate speech from text using ElevenLabs TTS. Requires ELEVENLABS_API_KEY.",
|
|
56339
56417
|
schema: external_exports.object({
|
|
56340
56418
|
text: external_exports.string().describe("Text to convert to speech"),
|
|
@@ -56355,6 +56433,8 @@ var generateNarrationTool = defineTool({
|
|
|
56355
56433
|
name: "generate_narration",
|
|
56356
56434
|
category: "generate",
|
|
56357
56435
|
cost: "low",
|
|
56436
|
+
title: "Generate Narration Audio",
|
|
56437
|
+
annotations: { readOnly: false, openWorld: true },
|
|
56358
56438
|
description: "Generate narration from text using ElevenLabs TTS. Product-facing alias for generate_speech. Requires ELEVENLABS_API_KEY.",
|
|
56359
56439
|
schema: external_exports.object({
|
|
56360
56440
|
text: external_exports.string().describe("Narration text to convert to speech"),
|
|
@@ -56379,6 +56459,8 @@ var generateSoundEffectTool = defineTool({
|
|
|
56379
56459
|
name: "generate_sound_effect",
|
|
56380
56460
|
category: "generate",
|
|
56381
56461
|
cost: "low",
|
|
56462
|
+
title: "Generate Sound Effect",
|
|
56463
|
+
annotations: { readOnly: false, openWorld: true },
|
|
56382
56464
|
description: "Generate sound effects using ElevenLabs. Requires ELEVENLABS_API_KEY.",
|
|
56383
56465
|
schema: external_exports.object({
|
|
56384
56466
|
prompt: external_exports.string().describe("Description of the sound effect"),
|
|
@@ -56400,6 +56482,8 @@ var generateMusicTool = defineTool({
|
|
|
56400
56482
|
name: "generate_music",
|
|
56401
56483
|
category: "generate",
|
|
56402
56484
|
cost: "low",
|
|
56485
|
+
title: "Generate Music",
|
|
56486
|
+
annotations: { readOnly: false, openWorld: true },
|
|
56403
56487
|
description: "Generate background music from text prompt. ElevenLabs (default, up to 10min) or Replicate MusicGen (max 30s). Requires ELEVENLABS_API_KEY or REPLICATE_API_TOKEN.",
|
|
56404
56488
|
schema: external_exports.object({
|
|
56405
56489
|
prompt: external_exports.string().describe("Description of the music to generate"),
|
|
@@ -56445,6 +56529,8 @@ var generateMusicStatusTool = defineTool({
|
|
|
56445
56529
|
name: "generate_music_status",
|
|
56446
56530
|
category: "generate",
|
|
56447
56531
|
cost: "free",
|
|
56532
|
+
title: "Check Music Generation Status",
|
|
56533
|
+
annotations: { readOnly: true, openWorld: true },
|
|
56448
56534
|
description: "Check Replicate music generation task status. `generate_music` returns a task id; this tool polls it until the audio URL is ready. Requires REPLICATE_API_TOKEN.",
|
|
56449
56535
|
schema: external_exports.object({
|
|
56450
56536
|
taskId: external_exports.string().describe("Task ID returned from generate_music")
|
|
@@ -56468,6 +56554,8 @@ var generateImageTool = defineTool({
|
|
|
56468
56554
|
name: "generate_image",
|
|
56469
56555
|
category: "generate",
|
|
56470
56556
|
cost: "low",
|
|
56557
|
+
title: "Generate Image",
|
|
56558
|
+
annotations: { readOnly: false, openWorld: true },
|
|
56471
56559
|
description: "Generate an image using AI. Supports Gemini (free), OpenAI GPT Image, or Grok Imagine. Requires GOOGLE_API_KEY (Gemini), OPENAI_API_KEY (OpenAI), or XAI_API_KEY (Grok).",
|
|
56472
56560
|
schema: external_exports.object({
|
|
56473
56561
|
prompt: external_exports.string().describe("Image description prompt"),
|
|
@@ -56501,6 +56589,8 @@ var generateStoryboardTool = defineTool({
|
|
|
56501
56589
|
name: "generate_storyboard",
|
|
56502
56590
|
category: "generate",
|
|
56503
56591
|
cost: "low",
|
|
56592
|
+
title: "Generate Storyboard",
|
|
56593
|
+
annotations: { readOnly: false, openWorld: true },
|
|
56504
56594
|
description: "Generate a video storyboard from text content using Claude. Returns scene segments with descriptions, visuals, and narration. Requires ANTHROPIC_API_KEY.",
|
|
56505
56595
|
schema: external_exports.object({
|
|
56506
56596
|
content: external_exports.string().describe("Text content to analyze (script, article, etc.)"),
|
|
@@ -56524,6 +56614,8 @@ var generateBackgroundTool = defineTool({
|
|
|
56524
56614
|
name: "generate_background",
|
|
56525
56615
|
category: "generate",
|
|
56526
56616
|
cost: "low",
|
|
56617
|
+
title: "Generate Background Image",
|
|
56618
|
+
annotations: { readOnly: false, openWorld: true },
|
|
56527
56619
|
description: "Generate a cinematic backdrop image (OpenAI gpt-image-2 / DALL\xB7E variant tuned for video backgrounds). Returns the image URL and, when `output` is provided, downloads the PNG to disk. Requires OPENAI_API_KEY.",
|
|
56528
56620
|
schema: external_exports.object({
|
|
56529
56621
|
description: external_exports.string().describe("Background description / image prompt."),
|
|
@@ -56548,6 +56640,8 @@ var generateThumbnailTool = defineTool({
|
|
|
56548
56640
|
name: "generate_thumbnail",
|
|
56549
56641
|
category: "generate",
|
|
56550
56642
|
cost: "low",
|
|
56643
|
+
title: "Generate Thumbnail",
|
|
56644
|
+
annotations: { readOnly: false, openWorld: true },
|
|
56551
56645
|
description: "Extract the best thumbnail frame from a video using Gemini AI analysis. Requires GOOGLE_API_KEY.",
|
|
56552
56646
|
schema: external_exports.object({
|
|
56553
56647
|
videoPath: external_exports.string().describe("Path to the video file"),
|
|
@@ -56569,6 +56663,8 @@ var generateVideoTool = defineTool({
|
|
|
56569
56663
|
name: "generate_video",
|
|
56570
56664
|
category: "generate",
|
|
56571
56665
|
cost: "high",
|
|
56666
|
+
title: "Generate Video",
|
|
56667
|
+
annotations: { readOnly: false, openWorld: true },
|
|
56572
56668
|
description: "Generate video using AI. Supports Seedance 2.0 via fal.ai, Grok, Kling, Runway, and Veo. Requires FAL_API_KEY, XAI_API_KEY, KLING_API_KEY, RUNWAY_API_SECRET, or GOOGLE_API_KEY.",
|
|
56573
56669
|
schema: external_exports.object({
|
|
56574
56670
|
prompt: external_exports.string().describe("Text prompt describing the video"),
|
|
@@ -56630,6 +56726,8 @@ var generateVideoStatusTool = defineTool({
|
|
|
56630
56726
|
name: "generate_video_status",
|
|
56631
56727
|
category: "generate",
|
|
56632
56728
|
cost: "free",
|
|
56729
|
+
title: "Check Video Generation Status",
|
|
56730
|
+
annotations: { readOnly: false, openWorld: true },
|
|
56633
56731
|
description: "Check video generation status for Grok, Runway, Kling, or Veo tasks.",
|
|
56634
56732
|
schema: external_exports.object({
|
|
56635
56733
|
taskId: external_exports.string().describe("Task ID from video generation"),
|
|
@@ -56660,6 +56758,8 @@ var generateVideoCancelTool = defineTool({
|
|
|
56660
56758
|
name: "generate_video_cancel",
|
|
56661
56759
|
category: "generate",
|
|
56662
56760
|
cost: "free",
|
|
56761
|
+
title: "Cancel Video Generation",
|
|
56762
|
+
annotations: { readOnly: false, openWorld: true },
|
|
56663
56763
|
description: "Cancel a Runway video generation task.",
|
|
56664
56764
|
schema: external_exports.object({
|
|
56665
56765
|
taskId: external_exports.string().describe("Task ID to cancel")
|
|
@@ -56678,6 +56778,8 @@ var generateVideoExtendTool = defineTool({
|
|
|
56678
56778
|
name: "generate_video_extend",
|
|
56679
56779
|
category: "generate",
|
|
56680
56780
|
cost: "high",
|
|
56781
|
+
title: "Extend Generated Video",
|
|
56782
|
+
annotations: { readOnly: false, openWorld: true },
|
|
56681
56783
|
description: "Extend video duration using Kling or Veo. Requires the video/operation ID from a previous generation.",
|
|
56682
56784
|
schema: external_exports.object({
|
|
56683
56785
|
videoId: external_exports.string().describe("Video ID (Kling) or operation name (Veo)"),
|
|
@@ -57079,6 +57181,8 @@ var storyboardListTool = defineTool({
|
|
|
57079
57181
|
name: "storyboard_list",
|
|
57080
57182
|
category: "storyboard",
|
|
57081
57183
|
cost: "free",
|
|
57184
|
+
title: "List Storyboard Beats",
|
|
57185
|
+
annotations: { readOnly: true, openWorld: false },
|
|
57082
57186
|
description: "List beats, ids, durations, and cue blocks from a project's STORYBOARD.md.",
|
|
57083
57187
|
schema: projectDirSchema,
|
|
57084
57188
|
async execute(args, ctx) {
|
|
@@ -57105,6 +57209,8 @@ var storyboardValidateTool = defineTool({
|
|
|
57105
57209
|
name: "storyboard_validate",
|
|
57106
57210
|
category: "storyboard",
|
|
57107
57211
|
cost: "free",
|
|
57212
|
+
title: "Validate Storyboard",
|
|
57213
|
+
annotations: { readOnly: true, openWorld: false },
|
|
57108
57214
|
description: "Validate STORYBOARD.md beat ids and cue blocks.",
|
|
57109
57215
|
schema: projectDirSchema,
|
|
57110
57216
|
async execute(args, ctx) {
|
|
@@ -57135,6 +57241,8 @@ var storyboardGetTool = defineTool({
|
|
|
57135
57241
|
name: "storyboard_get",
|
|
57136
57242
|
category: "storyboard",
|
|
57137
57243
|
cost: "free",
|
|
57244
|
+
title: "Get Storyboard Beat",
|
|
57245
|
+
annotations: { readOnly: true, openWorld: false },
|
|
57138
57246
|
description: "Return one STORYBOARD.md beat as structured data.",
|
|
57139
57247
|
schema: external_exports.object({
|
|
57140
57248
|
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
@@ -57157,6 +57265,8 @@ var storyboardSetTool = defineTool({
|
|
|
57157
57265
|
name: "storyboard_set",
|
|
57158
57266
|
category: "storyboard",
|
|
57159
57267
|
cost: "free",
|
|
57268
|
+
title: "Set Storyboard Cue",
|
|
57269
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
57160
57270
|
description: "Set or unset one cue on one beat in STORYBOARD.md.",
|
|
57161
57271
|
schema: external_exports.object({
|
|
57162
57272
|
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
@@ -57193,6 +57303,8 @@ var storyboardMoveTool = defineTool({
|
|
|
57193
57303
|
name: "storyboard_move",
|
|
57194
57304
|
category: "storyboard",
|
|
57195
57305
|
cost: "free",
|
|
57306
|
+
title: "Reorder Storyboard Beat",
|
|
57307
|
+
annotations: { readOnly: false, openWorld: false },
|
|
57196
57308
|
description: "Move one beat after another beat in STORYBOARD.md.",
|
|
57197
57309
|
schema: external_exports.object({
|
|
57198
57310
|
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
@@ -57223,6 +57335,8 @@ var storyboardReviseTool = defineTool({
|
|
|
57223
57335
|
name: "storyboard_revise",
|
|
57224
57336
|
category: "storyboard",
|
|
57225
57337
|
cost: "low",
|
|
57338
|
+
title: "Revise Storyboard with AI",
|
|
57339
|
+
annotations: { readOnly: false, openWorld: true },
|
|
57226
57340
|
description: "Revise an existing STORYBOARD.md from a natural-language request. Reads project context, validates the revised storyboard, and writes unless dryRun is true.",
|
|
57227
57341
|
schema: external_exports.object({
|
|
57228
57342
|
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
@@ -57254,6 +57368,8 @@ var planTool = defineTool({
|
|
|
57254
57368
|
name: "plan",
|
|
57255
57369
|
category: "storyboard",
|
|
57256
57370
|
cost: "free",
|
|
57371
|
+
title: "Plan Build Cost and Stages",
|
|
57372
|
+
annotations: { readOnly: true, openWorld: false },
|
|
57257
57373
|
description: "Read STORYBOARD.md and return the build plan, missing artifacts, provider needs, and estimated cost.",
|
|
57258
57374
|
schema: external_exports.object({
|
|
57259
57375
|
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
@@ -58951,6 +59067,8 @@ var pipelineHighlightsTool = defineTool({
|
|
|
58951
59067
|
name: "remix_highlights",
|
|
58952
59068
|
category: "pipeline",
|
|
58953
59069
|
cost: "low",
|
|
59070
|
+
title: "Extract Video Highlights",
|
|
59071
|
+
annotations: { readOnly: false, openWorld: true },
|
|
58954
59072
|
description: "Extract highlight clips from a longer video using AI analysis. Requires OPENAI_API_KEY+ANTHROPIC_API_KEY or GOOGLE_API_KEY (with --use-gemini).",
|
|
58955
59073
|
schema: external_exports.object({
|
|
58956
59074
|
media: external_exports.string().describe("Path to the input video file"),
|
|
@@ -58984,6 +59102,8 @@ var pipelineAutoShortsTool = defineTool({
|
|
|
58984
59102
|
name: "remix_auto_shorts",
|
|
58985
59103
|
category: "pipeline",
|
|
58986
59104
|
cost: "medium",
|
|
59105
|
+
title: "Generate Auto Shorts",
|
|
59106
|
+
annotations: { readOnly: false, openWorld: true },
|
|
58987
59107
|
description: "Automatically generate short-form content (Reels/TikTok/Shorts) from a longer video. Same API key requirements as remix_highlights.",
|
|
58988
59108
|
schema: external_exports.object({
|
|
58989
59109
|
video: external_exports.string().describe("Path to the input video file"),
|
|
@@ -59021,6 +59141,8 @@ var pipelineRunTool = defineTool({
|
|
|
59021
59141
|
name: "run",
|
|
59022
59142
|
category: "pipeline",
|
|
59023
59143
|
cost: "very-high",
|
|
59144
|
+
title: "Run YAML Pipeline",
|
|
59145
|
+
annotations: { readOnly: false, openWorld: true },
|
|
59024
59146
|
surfaces: ["mcp"],
|
|
59025
59147
|
description: "Execute a declarative YAML pipeline (Video as Code). Accepts either a file path or inline YAML. Supports dry-run, resume-from-checkpoint, and budget limits. Cost depends on the steps \u2014 use dryRun: true first to preview.",
|
|
59026
59148
|
schema: external_exports.object({
|
|
@@ -59100,6 +59222,8 @@ var pipelineRegenerateSceneTool = defineTool({
|
|
|
59100
59222
|
name: "remix_regenerate_scene",
|
|
59101
59223
|
category: "pipeline",
|
|
59102
59224
|
cost: "high",
|
|
59225
|
+
title: "Regenerate Storyboard Scenes",
|
|
59226
|
+
annotations: { readOnly: false, openWorld: true },
|
|
59103
59227
|
description: "Regenerate specific scenes against an existing storyboard.{yaml,json} on disk. Can regenerate video, image, or narration independently.",
|
|
59104
59228
|
schema: external_exports.object({
|
|
59105
59229
|
projectDir: external_exports.string().describe("Path to the project output directory containing storyboard.json"),
|
|
@@ -59136,6 +59260,8 @@ var detectScenesTool = defineTool({
|
|
|
59136
59260
|
name: "detect_scenes",
|
|
59137
59261
|
category: "detect",
|
|
59138
59262
|
cost: "free",
|
|
59263
|
+
title: "Detect Scene Cuts",
|
|
59264
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
59139
59265
|
description: "Detect scene changes in video using FFmpeg. No API key needed.",
|
|
59140
59266
|
schema: external_exports.object({
|
|
59141
59267
|
videoPath: external_exports.string().describe("Path to the input video file"),
|
|
@@ -59160,6 +59286,8 @@ var detectSilenceTool = defineTool({
|
|
|
59160
59286
|
name: "detect_silence",
|
|
59161
59287
|
category: "detect",
|
|
59162
59288
|
cost: "free",
|
|
59289
|
+
title: "Detect Silence Periods",
|
|
59290
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
59163
59291
|
description: "Detect silence periods in audio/video using FFmpeg. No API key needed.",
|
|
59164
59292
|
schema: external_exports.object({
|
|
59165
59293
|
mediaPath: external_exports.string().describe("Path to the audio/video file"),
|
|
@@ -59181,6 +59309,8 @@ var detectBeatsTool = defineTool({
|
|
|
59181
59309
|
name: "detect_beats",
|
|
59182
59310
|
category: "detect",
|
|
59183
59311
|
cost: "free",
|
|
59312
|
+
title: "Detect Audio Beats",
|
|
59313
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
59184
59314
|
description: "Detect beats in audio for music sync using FFmpeg loudness analysis. No API key needed.",
|
|
59185
59315
|
schema: external_exports.object({
|
|
59186
59316
|
audioPath: external_exports.string().describe("Path to the audio file"),
|
|
@@ -59242,6 +59372,8 @@ var timelineCreateTool = defineTool({
|
|
|
59242
59372
|
name: "timeline_create",
|
|
59243
59373
|
category: "timeline",
|
|
59244
59374
|
cost: "free",
|
|
59375
|
+
title: "Create Timeline",
|
|
59376
|
+
annotations: { readOnly: false, openWorld: false },
|
|
59245
59377
|
description: "Create a low-level timeline JSON file for FFmpeg-style editing",
|
|
59246
59378
|
schema: external_exports.object({
|
|
59247
59379
|
name: external_exports.string().describe("Timeline name or directory path"),
|
|
@@ -59272,6 +59404,8 @@ var timelineInfoTool = defineTool({
|
|
|
59272
59404
|
name: "timeline_info",
|
|
59273
59405
|
category: "timeline",
|
|
59274
59406
|
cost: "free",
|
|
59407
|
+
title: "Get Timeline Info",
|
|
59408
|
+
annotations: { readOnly: true, openWorld: false },
|
|
59275
59409
|
description: "Get information about a timeline JSON file. Legacy *.vibe.json files are supported.",
|
|
59276
59410
|
schema: external_exports.object({
|
|
59277
59411
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file")
|
|
@@ -59299,6 +59433,8 @@ var timelineAddSourceTool = defineTool({
|
|
|
59299
59433
|
name: "timeline_add_source",
|
|
59300
59434
|
category: "timeline",
|
|
59301
59435
|
cost: "free",
|
|
59436
|
+
title: "Add Source to Timeline",
|
|
59437
|
+
annotations: { readOnly: false, openWorld: false },
|
|
59302
59438
|
description: "Add a media source (video, audio, image) to the timeline",
|
|
59303
59439
|
schema: external_exports.object({
|
|
59304
59440
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -59324,6 +59460,8 @@ var timelineAddClipTool = defineTool({
|
|
|
59324
59460
|
name: "timeline_add_clip",
|
|
59325
59461
|
category: "timeline",
|
|
59326
59462
|
cost: "free",
|
|
59463
|
+
title: "Add Clip to Timeline",
|
|
59464
|
+
annotations: { readOnly: false, openWorld: false },
|
|
59327
59465
|
description: "Add a clip to the timeline from an existing source",
|
|
59328
59466
|
schema: external_exports.object({
|
|
59329
59467
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -59355,6 +59493,8 @@ var timelineSplitClipTool = defineTool({
|
|
|
59355
59493
|
name: "timeline_split_clip",
|
|
59356
59494
|
category: "timeline",
|
|
59357
59495
|
cost: "free",
|
|
59496
|
+
title: "Split Clip",
|
|
59497
|
+
annotations: { readOnly: false, openWorld: false },
|
|
59358
59498
|
description: "Split a clip at a specific time",
|
|
59359
59499
|
schema: external_exports.object({
|
|
59360
59500
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -59373,6 +59513,8 @@ var timelineTrimClipTool = defineTool({
|
|
|
59373
59513
|
name: "timeline_trim_clip",
|
|
59374
59514
|
category: "timeline",
|
|
59375
59515
|
cost: "free",
|
|
59516
|
+
title: "Trim Clip",
|
|
59517
|
+
annotations: { readOnly: false, openWorld: false },
|
|
59376
59518
|
description: "Trim a clip by adjusting its start or end",
|
|
59377
59519
|
schema: external_exports.object({
|
|
59378
59520
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -59392,6 +59534,8 @@ var timelineMoveClipTool = defineTool({
|
|
|
59392
59534
|
name: "timeline_move_clip",
|
|
59393
59535
|
category: "timeline",
|
|
59394
59536
|
cost: "free",
|
|
59537
|
+
title: "Move Clip",
|
|
59538
|
+
annotations: { readOnly: false, openWorld: false },
|
|
59395
59539
|
description: "Move a clip to a new position or track",
|
|
59396
59540
|
schema: external_exports.object({
|
|
59397
59541
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -59414,6 +59558,8 @@ var timelineDeleteClipTool = defineTool({
|
|
|
59414
59558
|
name: "timeline_delete_clip",
|
|
59415
59559
|
category: "timeline",
|
|
59416
59560
|
cost: "free",
|
|
59561
|
+
title: "Delete Clip",
|
|
59562
|
+
annotations: { readOnly: false, openWorld: false },
|
|
59417
59563
|
description: "Delete a clip from the timeline",
|
|
59418
59564
|
schema: external_exports.object({
|
|
59419
59565
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -59430,6 +59576,8 @@ var timelineDuplicateClipTool = defineTool({
|
|
|
59430
59576
|
name: "timeline_duplicate_clip",
|
|
59431
59577
|
category: "timeline",
|
|
59432
59578
|
cost: "free",
|
|
59579
|
+
title: "Duplicate Clip",
|
|
59580
|
+
annotations: { readOnly: false, openWorld: false },
|
|
59433
59581
|
description: "Duplicate a clip on the timeline (optionally at a new start time)",
|
|
59434
59582
|
schema: external_exports.object({
|
|
59435
59583
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -59448,6 +59596,8 @@ var timelineAddEffectTool = defineTool({
|
|
|
59448
59596
|
name: "timeline_add_effect",
|
|
59449
59597
|
category: "timeline",
|
|
59450
59598
|
cost: "free",
|
|
59599
|
+
title: "Add Effect to Clip",
|
|
59600
|
+
annotations: { readOnly: false, openWorld: false },
|
|
59451
59601
|
description: "Add an effect to a clip",
|
|
59452
59602
|
schema: external_exports.object({
|
|
59453
59603
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -59474,6 +59624,8 @@ var timelineAddTrackTool = defineTool({
|
|
|
59474
59624
|
name: "timeline_add_track",
|
|
59475
59625
|
category: "timeline",
|
|
59476
59626
|
cost: "free",
|
|
59627
|
+
title: "Add Track to Timeline",
|
|
59628
|
+
annotations: { readOnly: false, openWorld: false },
|
|
59477
59629
|
description: "Add a new track to the timeline",
|
|
59478
59630
|
schema: external_exports.object({
|
|
59479
59631
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -59500,6 +59652,8 @@ var timelineListTool = defineTool({
|
|
|
59500
59652
|
name: "timeline_list",
|
|
59501
59653
|
category: "timeline",
|
|
59502
59654
|
cost: "free",
|
|
59655
|
+
title: "List Timeline Contents",
|
|
59656
|
+
annotations: { readOnly: true, openWorld: false },
|
|
59503
59657
|
description: "List all sources, tracks, and clips in a project",
|
|
59504
59658
|
schema: external_exports.object({
|
|
59505
59659
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file")
|
|
@@ -59541,6 +59695,8 @@ var projectCreateTool = defineTool({
|
|
|
59541
59695
|
name: "project_create",
|
|
59542
59696
|
category: "project",
|
|
59543
59697
|
cost: "free",
|
|
59698
|
+
title: "Create Project",
|
|
59699
|
+
annotations: { readOnly: false, openWorld: false },
|
|
59544
59700
|
description: "Deprecated alias for creating low-level timeline state. Prefer timeline_create.",
|
|
59545
59701
|
schema: external_exports.object({
|
|
59546
59702
|
name: external_exports.string().describe("Project name"),
|
|
@@ -59565,6 +59721,8 @@ var projectInfoTool = defineTool({
|
|
|
59565
59721
|
name: "project_info",
|
|
59566
59722
|
category: "project",
|
|
59567
59723
|
cost: "free",
|
|
59724
|
+
title: "Get Project Info",
|
|
59725
|
+
annotations: { readOnly: true, openWorld: false },
|
|
59568
59726
|
description: "Deprecated alias for timeline_info. Legacy *.vibe.json files remain supported.",
|
|
59569
59727
|
schema: external_exports.object({
|
|
59570
59728
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file")
|
|
@@ -60451,6 +60609,8 @@ var exportVideoTool = defineTool({
|
|
|
60451
60609
|
name: "export_video",
|
|
60452
60610
|
category: "export",
|
|
60453
60611
|
cost: "free",
|
|
60612
|
+
title: "Export Timeline to Video",
|
|
60613
|
+
annotations: { readOnly: false, openWorld: false },
|
|
60454
60614
|
description: "Export a VibeFrame timeline to a video file (MP4, WebM, or MOV). Requires FFmpeg.",
|
|
60455
60615
|
schema: external_exports.object({
|
|
60456
60616
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -60541,6 +60701,8 @@ var fsListTool = defineTool({
|
|
|
60541
60701
|
name: "fs_list",
|
|
60542
60702
|
category: "agent-only",
|
|
60543
60703
|
cost: "free",
|
|
60704
|
+
title: "List Files",
|
|
60705
|
+
annotations: { readOnly: true, openWorld: false },
|
|
60544
60706
|
surfaces: ["agent"],
|
|
60545
60707
|
description: "List files and directories in a path",
|
|
60546
60708
|
schema: external_exports.object({
|
|
@@ -60574,6 +60736,8 @@ var fsReadTool = defineTool({
|
|
|
60574
60736
|
name: "fs_read",
|
|
60575
60737
|
category: "agent-only",
|
|
60576
60738
|
cost: "free",
|
|
60739
|
+
title: "Read File",
|
|
60740
|
+
annotations: { readOnly: true, openWorld: false },
|
|
60577
60741
|
surfaces: ["agent"],
|
|
60578
60742
|
description: "Read contents of a text file",
|
|
60579
60743
|
schema: external_exports.object({
|
|
@@ -60596,6 +60760,8 @@ var fsWriteTool = defineTool({
|
|
|
60596
60760
|
name: "fs_write",
|
|
60597
60761
|
category: "agent-only",
|
|
60598
60762
|
cost: "free",
|
|
60763
|
+
title: "Write File",
|
|
60764
|
+
annotations: { readOnly: false, openWorld: false },
|
|
60599
60765
|
surfaces: ["agent"],
|
|
60600
60766
|
description: "Write content to a file",
|
|
60601
60767
|
schema: external_exports.object({
|
|
@@ -60616,6 +60782,8 @@ var fsExistsTool = defineTool({
|
|
|
60616
60782
|
name: "fs_exists",
|
|
60617
60783
|
category: "agent-only",
|
|
60618
60784
|
cost: "free",
|
|
60785
|
+
title: "Check Path Exists",
|
|
60786
|
+
annotations: { readOnly: true, openWorld: false },
|
|
60619
60787
|
surfaces: ["agent"],
|
|
60620
60788
|
description: "Check if a file or directory exists",
|
|
60621
60789
|
schema: external_exports.object({
|
|
@@ -60637,6 +60805,8 @@ var batchImportTool = defineTool({
|
|
|
60637
60805
|
name: "batch_import",
|
|
60638
60806
|
category: "agent-only",
|
|
60639
60807
|
cost: "free",
|
|
60808
|
+
title: "Batch Import Media",
|
|
60809
|
+
annotations: { readOnly: false, openWorld: false },
|
|
60640
60810
|
surfaces: ["agent"],
|
|
60641
60811
|
description: "Import multiple media files from a directory into a project. Scans directory for video, audio, and image files.",
|
|
60642
60812
|
schema: external_exports.object({
|
|
@@ -60706,6 +60876,8 @@ var batchConcatTool = defineTool({
|
|
|
60706
60876
|
name: "batch_concat",
|
|
60707
60877
|
category: "agent-only",
|
|
60708
60878
|
cost: "free",
|
|
60879
|
+
title: "Batch Concatenate Sources",
|
|
60880
|
+
annotations: { readOnly: false, openWorld: false },
|
|
60709
60881
|
surfaces: ["agent"],
|
|
60710
60882
|
description: "Concatenate multiple sources into sequential clips on the timeline",
|
|
60711
60883
|
schema: external_exports.object({
|
|
@@ -60775,6 +60947,8 @@ var batchApplyEffectTool = defineTool({
|
|
|
60775
60947
|
name: "batch_apply_effect",
|
|
60776
60948
|
category: "agent-only",
|
|
60777
60949
|
cost: "free",
|
|
60950
|
+
title: "Batch Apply Effect",
|
|
60951
|
+
annotations: { readOnly: false, openWorld: false },
|
|
60778
60952
|
surfaces: ["agent"],
|
|
60779
60953
|
description: "Apply an effect to multiple clips at once",
|
|
60780
60954
|
schema: external_exports.object({
|
|
@@ -60831,6 +61005,8 @@ var timelineClearTool = defineTool({
|
|
|
60831
61005
|
name: "timeline_clear",
|
|
60832
61006
|
category: "agent-only",
|
|
60833
61007
|
cost: "free",
|
|
61008
|
+
title: "Clear Timeline",
|
|
61009
|
+
annotations: { readOnly: false, openWorld: false },
|
|
60834
61010
|
surfaces: ["agent"],
|
|
60835
61011
|
description: "Clear timeline contents (remove clips, tracks, or sources)",
|
|
60836
61012
|
schema: external_exports.object({
|
|
@@ -60905,6 +61081,8 @@ var projectSetTool = defineTool({
|
|
|
60905
61081
|
name: "project_set",
|
|
60906
61082
|
category: "agent-only",
|
|
60907
61083
|
cost: "free",
|
|
61084
|
+
title: "Update Project Settings",
|
|
61085
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
60908
61086
|
surfaces: ["agent"],
|
|
60909
61087
|
description: "Update timeline settings (name, aspect ratio, frame rate)",
|
|
60910
61088
|
schema: external_exports.object({
|
|
@@ -60950,6 +61128,8 @@ var projectOpenTool = defineTool({
|
|
|
60950
61128
|
name: "project_open",
|
|
60951
61129
|
category: "agent-only",
|
|
60952
61130
|
cost: "free",
|
|
61131
|
+
title: "Open Project",
|
|
61132
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
60953
61133
|
surfaces: ["agent"],
|
|
60954
61134
|
description: "Open an existing project and set it as the current context",
|
|
60955
61135
|
schema: external_exports.object({
|
|
@@ -60988,6 +61168,8 @@ var projectSaveTool = defineTool({
|
|
|
60988
61168
|
name: "project_save",
|
|
60989
61169
|
category: "agent-only",
|
|
60990
61170
|
cost: "free",
|
|
61171
|
+
title: "Save Project",
|
|
61172
|
+
annotations: { readOnly: false, openWorld: false },
|
|
60991
61173
|
surfaces: ["agent"],
|
|
60992
61174
|
description: "Save the current project (uses ctx.agent.projectPath if no path given)",
|
|
60993
61175
|
schema: external_exports.object({
|
|
@@ -61022,6 +61204,8 @@ var exportAudioTool = defineTool({
|
|
|
61022
61204
|
name: "export_audio",
|
|
61023
61205
|
category: "agent-only",
|
|
61024
61206
|
cost: "free",
|
|
61207
|
+
title: "Export Audio",
|
|
61208
|
+
annotations: { readOnly: false, openWorld: false },
|
|
61025
61209
|
surfaces: ["agent"],
|
|
61026
61210
|
description: "Export audio track from a project. Not implemented \u2014 use export_video then strip audio with FFmpeg.",
|
|
61027
61211
|
schema: external_exports.object({
|
|
@@ -61040,6 +61224,8 @@ var exportSubtitlesTool = defineTool({
|
|
|
61040
61224
|
name: "export_subtitles",
|
|
61041
61225
|
category: "agent-only",
|
|
61042
61226
|
cost: "free",
|
|
61227
|
+
title: "Export Subtitles",
|
|
61228
|
+
annotations: { readOnly: false, openWorld: false },
|
|
61043
61229
|
surfaces: ["agent"],
|
|
61044
61230
|
description: "Export subtitles from transcription. Not implemented \u2014 use audio_transcribe to generate subtitles from audio.",
|
|
61045
61231
|
schema: external_exports.object({
|
|
@@ -61058,6 +61244,8 @@ var mediaInfoTool = defineTool({
|
|
|
61058
61244
|
name: "media_info",
|
|
61059
61245
|
category: "agent-only",
|
|
61060
61246
|
cost: "free",
|
|
61247
|
+
title: "Get Media Info",
|
|
61248
|
+
annotations: { readOnly: true, openWorld: false },
|
|
61061
61249
|
surfaces: ["agent"],
|
|
61062
61250
|
description: "Get information about a media file (duration, resolution, codec, etc.)",
|
|
61063
61251
|
schema: external_exports.object({
|
|
@@ -61142,6 +61330,8 @@ var mediaCompressTool = defineTool({
|
|
|
61142
61330
|
name: "media_compress",
|
|
61143
61331
|
category: "agent-only",
|
|
61144
61332
|
cost: "free",
|
|
61333
|
+
title: "Compress Media",
|
|
61334
|
+
annotations: { readOnly: false, openWorld: false },
|
|
61145
61335
|
surfaces: ["agent"],
|
|
61146
61336
|
description: "Compress a video or audio file using FFmpeg",
|
|
61147
61337
|
schema: external_exports.object({
|
|
@@ -61203,6 +61393,8 @@ var mediaConvertTool = defineTool({
|
|
|
61203
61393
|
name: "media_convert",
|
|
61204
61394
|
category: "agent-only",
|
|
61205
61395
|
cost: "free",
|
|
61396
|
+
title: "Convert Media",
|
|
61397
|
+
annotations: { readOnly: false, openWorld: false },
|
|
61206
61398
|
surfaces: ["agent"],
|
|
61207
61399
|
description: "Convert media file to a different format using FFmpeg",
|
|
61208
61400
|
schema: external_exports.object({
|
|
@@ -61250,6 +61442,8 @@ var mediaConcatTool = defineTool({
|
|
|
61250
61442
|
name: "media_concat",
|
|
61251
61443
|
category: "agent-only",
|
|
61252
61444
|
cost: "free",
|
|
61445
|
+
title: "Concatenate Media Files",
|
|
61446
|
+
annotations: { readOnly: false, openWorld: false },
|
|
61253
61447
|
surfaces: ["agent"],
|
|
61254
61448
|
description: "Concatenate multiple media files into one using FFmpeg",
|
|
61255
61449
|
schema: external_exports.object({
|
|
@@ -61786,6 +61980,8 @@ var guideTool = defineTool({
|
|
|
61786
61980
|
name: "guide",
|
|
61787
61981
|
category: "agent",
|
|
61788
61982
|
cost: "free",
|
|
61983
|
+
title: "Load Workflow Guide",
|
|
61984
|
+
annotations: { readOnly: true, openWorld: false },
|
|
61789
61985
|
description: "Load the step-by-step guide for a vibe workflow (motion overlays, BUILD scene authoring, YAML pipeline authoring, architecture choices). Universal CLI-equivalent of `vibe guide <topic>` and Claude Code's /vibe-* slash commands. Without a topic, returns the guide catalog for discovery.",
|
|
61790
61986
|
schema: guideSchema,
|
|
61791
61987
|
async execute(args) {
|
|
@@ -61821,6 +62017,8 @@ var statusJobTool = defineTool({
|
|
|
61821
62017
|
name: "status_job",
|
|
61822
62018
|
category: "status",
|
|
61823
62019
|
cost: "free",
|
|
62020
|
+
title: "Check Job Status",
|
|
62021
|
+
annotations: { readOnly: false, destructive: false, openWorld: true },
|
|
61824
62022
|
description: "Read one local async job record and optionally refresh supported provider status. Supports Runway/Kling video and Replicate music live checks. Also tracks long-running MCP build/render jobs (jobType build/render, provider local): their records are updated in-process \u2014 on completion result.payload carries the full tool result; status 'unknown' means the MCP server restarted mid-job (check build-report.json / render-report.json on disk).",
|
|
61825
62023
|
schema: external_exports.object({
|
|
61826
62024
|
jobId: external_exports.string().describe("Local job id returned by a no-wait command."),
|
|
@@ -61856,6 +62054,8 @@ var statusProjectTool = defineTool({
|
|
|
61856
62054
|
name: "status_project",
|
|
61857
62055
|
category: "status",
|
|
61858
62056
|
cost: "free",
|
|
62057
|
+
title: "Check Project Status",
|
|
62058
|
+
annotations: { readOnly: false, destructive: false, openWorld: true },
|
|
61859
62059
|
description: "Summarize build-report.json, review-report.json, and local async job records for a VibeFrame project.",
|
|
61860
62060
|
schema: external_exports.object({
|
|
61861
62061
|
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION4),
|