@vibeframe/mcp-server 0.110.0 → 0.111.0
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/README.md +17 -0
- package/dist/index.js +215 -2
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -323,6 +323,23 @@ API keys are read from the host's environment (`~/.zshrc`, MCP config `env` bloc
|
|
|
323
323
|
- Node.js 20+
|
|
324
324
|
- FFmpeg on `PATH` (export, editing, pipelines)
|
|
325
325
|
|
|
326
|
+
## Privacy Policy
|
|
327
|
+
|
|
328
|
+
VibeFrame is local-first: no telemetry, no VibeFrame-operated servers in the
|
|
329
|
+
data path. Projects and generated media stay in the workspace folder you
|
|
330
|
+
choose; content is sent only to the AI providers you configure (Anthropic,
|
|
331
|
+
OpenAI, Google, ElevenLabs, …) when you explicitly invoke them, and API keys
|
|
332
|
+
live only on your machine. Tools that reach external services are marked with
|
|
333
|
+
`openWorldHint` in their MCP annotations; everything else (timeline edits,
|
|
334
|
+
ffmpeg operations, linting, rendering, local Kokoro TTS) runs fully locally.
|
|
335
|
+
|
|
336
|
+
Full policy: <https://vibeframe.ai/privacy> (source:
|
|
337
|
+
[PRIVACY.md](https://github.com/vericontext/vibeframe/blob/main/PRIVACY.md)).
|
|
338
|
+
|
|
339
|
+
> Installing the `.mcpb` file directly shows a standard "not verified by
|
|
340
|
+
> Anthropic" sideload notice in Claude Desktop — that is expected for
|
|
341
|
+
> extensions distributed outside the official directory.
|
|
342
|
+
|
|
326
343
|
## License
|
|
327
344
|
|
|
328
345
|
MIT
|
package/dist/index.js
CHANGED
|
@@ -488359,6 +488359,8 @@ var sceneStylesTool = defineTool({
|
|
|
488359
488359
|
name: "scene_list_styles",
|
|
488360
488360
|
category: "scene",
|
|
488361
488361
|
cost: "free",
|
|
488362
|
+
title: "List Visual Styles",
|
|
488363
|
+
annotations: { readOnly: true, openWorld: false },
|
|
488362
488364
|
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.",
|
|
488363
488365
|
schema: sceneStylesSchema,
|
|
488364
488366
|
async execute(args) {
|
|
@@ -488420,6 +488422,8 @@ var sceneInitTool = defineTool({
|
|
|
488420
488422
|
name: "init",
|
|
488421
488423
|
category: "scene",
|
|
488422
488424
|
cost: "free",
|
|
488425
|
+
title: "Initialize Video Project",
|
|
488426
|
+
annotations: { readOnly: false, destructive: false, idempotent: true, openWorld: false },
|
|
488423
488427
|
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.",
|
|
488424
488428
|
schema: sceneInitSchema,
|
|
488425
488429
|
async execute(args, ctx) {
|
|
@@ -488470,6 +488474,8 @@ var sceneAddTool = defineTool({
|
|
|
488470
488474
|
name: "scene_add",
|
|
488471
488475
|
category: "scene",
|
|
488472
488476
|
cost: "low",
|
|
488477
|
+
title: "Add Scene from Preset",
|
|
488478
|
+
annotations: { readOnly: false, openWorld: true },
|
|
488473
488479
|
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.",
|
|
488474
488480
|
schema: sceneAddSchema,
|
|
488475
488481
|
async execute(args, ctx) {
|
|
@@ -488548,6 +488554,8 @@ var sceneLintTool = defineTool({
|
|
|
488548
488554
|
name: "scene_lint",
|
|
488549
488555
|
category: "scene",
|
|
488550
488556
|
cost: "free",
|
|
488557
|
+
title: "Lint Scene Compositions",
|
|
488558
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
488551
488559
|
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.",
|
|
488552
488560
|
schema: sceneLintSchema,
|
|
488553
488561
|
async execute(args, ctx) {
|
|
@@ -488585,6 +488593,8 @@ var sceneRepairTool = defineTool({
|
|
|
488585
488593
|
name: "scene_repair",
|
|
488586
488594
|
category: "scene",
|
|
488587
488595
|
cost: "free",
|
|
488596
|
+
title: "Repair Scene Compositions",
|
|
488597
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
488588
488598
|
description: "Apply deterministic mechanical scene repairs. Currently uses the safe lint auto-fix allow-list and never performs semantic creative rewrites.",
|
|
488589
488599
|
schema: sceneRepairSchema,
|
|
488590
488600
|
async execute(args, ctx) {
|
|
@@ -488665,6 +488675,8 @@ var sceneRenderTool = defineTool({
|
|
|
488665
488675
|
name: "render",
|
|
488666
488676
|
category: "scene",
|
|
488667
488677
|
cost: "free",
|
|
488678
|
+
title: "Render Video to MP4",
|
|
488679
|
+
annotations: { readOnly: false, openWorld: false },
|
|
488668
488680
|
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.",
|
|
488669
488681
|
schema: sceneRenderSchema,
|
|
488670
488682
|
async execute(args, ctx) {
|
|
@@ -488794,6 +488806,8 @@ var sceneBuildTool = defineTool({
|
|
|
488794
488806
|
name: "build",
|
|
488795
488807
|
category: "scene",
|
|
488796
488808
|
cost: "high",
|
|
488809
|
+
title: "Build Video from Storyboard",
|
|
488810
|
+
annotations: { readOnly: false, openWorld: true },
|
|
488797
488811
|
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.",
|
|
488798
488812
|
schema: sceneBuildSchema,
|
|
488799
488813
|
async execute(args, ctx) {
|
|
@@ -488876,6 +488890,8 @@ var sceneInstallSkillTool = defineTool({
|
|
|
488876
488890
|
name: "scene_install_skill",
|
|
488877
488891
|
category: "scene",
|
|
488878
488892
|
cost: "free",
|
|
488893
|
+
title: "Install Hyperframes Skill",
|
|
488894
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
488879
488895
|
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.",
|
|
488880
488896
|
schema: sceneInstallSkillSchema,
|
|
488881
488897
|
async execute(args, ctx) {
|
|
@@ -488922,6 +488938,8 @@ var sceneComposePromptsTool = defineTool({
|
|
|
488922
488938
|
name: "scene_compose_prompts",
|
|
488923
488939
|
category: "scene",
|
|
488924
488940
|
cost: "free",
|
|
488941
|
+
title: "Get Scene Authoring Prompts",
|
|
488942
|
+
annotations: { readOnly: true, openWorld: false },
|
|
488925
488943
|
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.",
|
|
488926
488944
|
schema: sceneComposePromptsSchema,
|
|
488927
488945
|
async execute(args, ctx) {
|
|
@@ -488964,6 +488982,8 @@ var sceneSubmitTool = defineTool({
|
|
|
488964
488982
|
name: "scene_submit",
|
|
488965
488983
|
category: "scene",
|
|
488966
488984
|
cost: "free",
|
|
488985
|
+
title: "Submit Scene HTML",
|
|
488986
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
488967
488987
|
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.",
|
|
488968
488988
|
schema: sceneSubmitSchema,
|
|
488969
488989
|
async execute(args, ctx) {
|
|
@@ -489006,6 +489026,8 @@ var audioTranscribeTool = defineTool({
|
|
|
489006
489026
|
name: "audio_transcribe",
|
|
489007
489027
|
category: "audio",
|
|
489008
489028
|
cost: "low",
|
|
489029
|
+
title: "Transcribe Audio",
|
|
489030
|
+
annotations: { readOnly: false, openWorld: true },
|
|
489009
489031
|
description: "Transcribe audio using OpenAI Whisper. Outputs text, SRT, or VTT. Requires OPENAI_API_KEY.",
|
|
489010
489032
|
schema: z3.object({
|
|
489011
489033
|
audioPath: z3.string().describe("Input audio file path"),
|
|
@@ -489035,6 +489057,8 @@ var audioIsolateTool = defineTool({
|
|
|
489035
489057
|
name: "audio_isolate",
|
|
489036
489058
|
category: "audio",
|
|
489037
489059
|
cost: "low",
|
|
489060
|
+
title: "Isolate Vocals from Audio",
|
|
489061
|
+
annotations: { readOnly: false, openWorld: true },
|
|
489038
489062
|
description: "Isolate vocals from audio using ElevenLabs. Requires ELEVENLABS_API_KEY.",
|
|
489039
489063
|
schema: z3.object({
|
|
489040
489064
|
audioPath: z3.string().describe("Input audio file path"),
|
|
@@ -489054,6 +489078,8 @@ var audioVoiceCloneTool = defineTool({
|
|
|
489054
489078
|
name: "audio_clone_voice",
|
|
489055
489079
|
category: "audio",
|
|
489056
489080
|
cost: "low",
|
|
489081
|
+
title: "Clone Voice from Samples",
|
|
489082
|
+
annotations: { readOnly: false, destructive: false, openWorld: true },
|
|
489057
489083
|
description: "Clone a voice from audio samples using ElevenLabs. Requires ELEVENLABS_API_KEY.",
|
|
489058
489084
|
schema: z3.object({
|
|
489059
489085
|
samplePaths: z3.array(z3.string()).describe("Audio sample file paths (1-25 files)"),
|
|
@@ -489075,6 +489101,8 @@ var audioDubTool = defineTool({
|
|
|
489075
489101
|
name: "audio_dub",
|
|
489076
489102
|
category: "audio",
|
|
489077
489103
|
cost: "high",
|
|
489104
|
+
title: "Dub Audio to Another Language",
|
|
489105
|
+
annotations: { readOnly: false, openWorld: true },
|
|
489078
489106
|
description: "Dub audio/video to another language (transcribe + translate + TTS). Requires OPENAI_API_KEY, ANTHROPIC_API_KEY, ELEVENLABS_API_KEY.",
|
|
489079
489107
|
schema: z3.object({
|
|
489080
489108
|
mediaPath: z3.string().describe("Input media file (video or audio)"),
|
|
@@ -489105,6 +489133,8 @@ var audioDuckTool = defineTool({
|
|
|
489105
489133
|
name: "audio_duck",
|
|
489106
489134
|
category: "audio",
|
|
489107
489135
|
cost: "free",
|
|
489136
|
+
title: "Duck Background Music",
|
|
489137
|
+
annotations: { readOnly: false, openWorld: false },
|
|
489108
489138
|
description: "Auto-duck background music when voice is present using FFmpeg sidechain compression. Free, no API key needed.",
|
|
489109
489139
|
schema: z3.object({
|
|
489110
489140
|
musicPath: z3.string().describe("Background music file path"),
|
|
@@ -489402,6 +489432,8 @@ var editSilenceCutTool = defineTool({
|
|
|
489402
489432
|
name: "edit_silence_cut",
|
|
489403
489433
|
category: "edit",
|
|
489404
489434
|
cost: "free",
|
|
489435
|
+
title: "Cut Silence from Video",
|
|
489436
|
+
annotations: { readOnly: false, openWorld: true },
|
|
489405
489437
|
description: "Remove silent segments from a video using FFmpeg or Gemini AI detection. No API key needed for FFmpeg mode.",
|
|
489406
489438
|
schema: z4.object({
|
|
489407
489439
|
videoPath: z4.string().describe("Path to the input video file"),
|
|
@@ -489432,6 +489464,8 @@ var editCaptionTool = defineTool({
|
|
|
489432
489464
|
name: "edit_caption",
|
|
489433
489465
|
category: "edit",
|
|
489434
489466
|
cost: "low",
|
|
489467
|
+
title: "Burn Captions into Video",
|
|
489468
|
+
annotations: { readOnly: false, openWorld: true },
|
|
489435
489469
|
description: "Transcribe audio and burn styled captions into video. Requires OPENAI_API_KEY for Whisper transcription.",
|
|
489436
489470
|
schema: z4.object({
|
|
489437
489471
|
videoPath: z4.string().describe("Path to the input video file"),
|
|
@@ -489456,6 +489490,8 @@ var editFadeTool = defineTool({
|
|
|
489456
489490
|
name: "edit_fade",
|
|
489457
489491
|
category: "edit",
|
|
489458
489492
|
cost: "free",
|
|
489493
|
+
title: "Apply Fade Effects",
|
|
489494
|
+
annotations: { readOnly: false, openWorld: false },
|
|
489459
489495
|
description: "Apply fade in/out effects to video and/or audio. No API key needed.",
|
|
489460
489496
|
schema: z4.object({
|
|
489461
489497
|
videoPath: z4.string().describe("Path to the input video file"),
|
|
@@ -489479,6 +489515,8 @@ var editNoiseReduceTool = defineTool({
|
|
|
489479
489515
|
name: "edit_noise_reduce",
|
|
489480
489516
|
category: "edit",
|
|
489481
489517
|
cost: "free",
|
|
489518
|
+
title: "Reduce Audio Noise",
|
|
489519
|
+
annotations: { readOnly: false, openWorld: false },
|
|
489482
489520
|
description: "Reduce audio/video noise using FFmpeg filters. No API key needed.",
|
|
489483
489521
|
schema: z4.object({
|
|
489484
489522
|
inputPath: z4.string().describe("Path to the input media file"),
|
|
@@ -489500,6 +489538,8 @@ var editJumpCutTool = defineTool({
|
|
|
489500
489538
|
name: "edit_jump_cut",
|
|
489501
489539
|
category: "edit",
|
|
489502
489540
|
cost: "low",
|
|
489541
|
+
title: "Remove Filler Words",
|
|
489542
|
+
annotations: { readOnly: false, openWorld: true },
|
|
489503
489543
|
description: "Remove filler words (um, uh, like, etc.) from video using Whisper transcription. Requires OPENAI_API_KEY.",
|
|
489504
489544
|
schema: z4.object({
|
|
489505
489545
|
videoPath: z4.string().describe("Path to the input video file"),
|
|
@@ -489523,6 +489563,8 @@ var editTextOverlayTool = defineTool({
|
|
|
489523
489563
|
name: "edit_text_overlay",
|
|
489524
489564
|
category: "edit",
|
|
489525
489565
|
cost: "free",
|
|
489566
|
+
title: "Overlay Static Text",
|
|
489567
|
+
annotations: { readOnly: false, openWorld: false },
|
|
489526
489568
|
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.",
|
|
489527
489569
|
schema: z4.object({
|
|
489528
489570
|
videoPath: z4.string().describe("Path to the input video file"),
|
|
@@ -489549,6 +489591,8 @@ var editMotionOverlayTool = defineTool({
|
|
|
489549
489591
|
name: "edit_motion_overlay",
|
|
489550
489592
|
category: "edit",
|
|
489551
489593
|
cost: "low",
|
|
489594
|
+
title: "Apply Motion Graphics Overlay",
|
|
489595
|
+
annotations: { readOnly: false, openWorld: true },
|
|
489552
489596
|
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.",
|
|
489553
489597
|
schema: z4.object({
|
|
489554
489598
|
videoPath: z4.string().describe("Path to the input video file"),
|
|
@@ -489585,6 +489629,8 @@ var editTranslateSrtTool = defineTool({
|
|
|
489585
489629
|
name: "edit_translate_srt",
|
|
489586
489630
|
category: "edit",
|
|
489587
489631
|
cost: "low",
|
|
489632
|
+
title: "Translate SRT Subtitles",
|
|
489633
|
+
annotations: { readOnly: false, openWorld: true },
|
|
489588
489634
|
description: "Translate SRT subtitle files using Claude or OpenAI. Requires ANTHROPIC_API_KEY or OPENAI_API_KEY.",
|
|
489589
489635
|
schema: z4.object({
|
|
489590
489636
|
srtPath: z4.string().describe("Path to the input SRT file"),
|
|
@@ -489607,6 +489653,8 @@ var editGradeTool = defineTool({
|
|
|
489607
489653
|
name: "edit_grade",
|
|
489608
489654
|
category: "edit",
|
|
489609
489655
|
cost: "low",
|
|
489656
|
+
title: "Apply Color Grading",
|
|
489657
|
+
annotations: { readOnly: false, openWorld: true },
|
|
489610
489658
|
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).",
|
|
489611
489659
|
schema: z4.object({
|
|
489612
489660
|
videoPath: z4.string().describe("Input video file path"),
|
|
@@ -489629,6 +489677,8 @@ var editSpeedRampTool = defineTool({
|
|
|
489629
489677
|
name: "edit_speed_ramp",
|
|
489630
489678
|
category: "edit",
|
|
489631
489679
|
cost: "low",
|
|
489680
|
+
title: "Apply Content-Aware Speed Ramping",
|
|
489681
|
+
annotations: { readOnly: false, openWorld: true },
|
|
489632
489682
|
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.",
|
|
489633
489683
|
schema: z4.object({
|
|
489634
489684
|
videoPath: z4.string().describe("Input video file path (must have audio)"),
|
|
@@ -489653,6 +489703,8 @@ var editReframeTool = defineTool({
|
|
|
489653
489703
|
name: "edit_reframe",
|
|
489654
489704
|
category: "edit",
|
|
489655
489705
|
cost: "free",
|
|
489706
|
+
title: "Reframe Video Aspect Ratio",
|
|
489707
|
+
annotations: { readOnly: false, openWorld: false },
|
|
489656
489708
|
description: "Auto-reframe video to a different aspect ratio using smart cropping. Free (FFmpeg only).",
|
|
489657
489709
|
schema: z4.object({
|
|
489658
489710
|
videoPath: z4.string().describe("Input video file path"),
|
|
@@ -489675,6 +489727,8 @@ var editInterpolateTool = defineTool({
|
|
|
489675
489727
|
name: "edit_interpolate",
|
|
489676
489728
|
category: "edit",
|
|
489677
489729
|
cost: "free",
|
|
489730
|
+
title: "Create Slow Motion with Frame Interpolation",
|
|
489731
|
+
annotations: { readOnly: false, openWorld: false },
|
|
489678
489732
|
description: "Create slow motion with AI frame interpolation using FFmpeg minterpolate. Free, no API key needed.",
|
|
489679
489733
|
schema: z4.object({
|
|
489680
489734
|
videoPath: z4.string().describe("Input video file path"),
|
|
@@ -489697,6 +489751,8 @@ var editUpscaleTool = defineTool({
|
|
|
489697
489751
|
name: "edit_upscale",
|
|
489698
489752
|
category: "edit",
|
|
489699
489753
|
cost: "free",
|
|
489754
|
+
title: "Upscale Video Resolution",
|
|
489755
|
+
annotations: { readOnly: false, openWorld: false },
|
|
489700
489756
|
description: "Upscale video resolution using FFmpeg (Lanczos scaling). Free, no API key needed.",
|
|
489701
489757
|
schema: z4.object({
|
|
489702
489758
|
videoPath: z4.string().describe("Input video file path"),
|
|
@@ -489718,6 +489774,8 @@ var editAnimatedCaptionTool = defineTool({
|
|
|
489718
489774
|
name: "edit_animated_caption",
|
|
489719
489775
|
category: "edit",
|
|
489720
489776
|
cost: "low",
|
|
489777
|
+
title: "Add Animated Captions",
|
|
489778
|
+
annotations: { readOnly: false, openWorld: true },
|
|
489721
489779
|
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.",
|
|
489722
489780
|
schema: z4.object({
|
|
489723
489781
|
videoPath: z4.string().describe("Path to the input video file"),
|
|
@@ -489750,6 +489808,8 @@ var editImageTool = defineTool({
|
|
|
489750
489808
|
name: "edit_image",
|
|
489751
489809
|
category: "edit",
|
|
489752
489810
|
cost: "low",
|
|
489811
|
+
title: "Edit Image with AI",
|
|
489812
|
+
annotations: { readOnly: false, openWorld: true },
|
|
489753
489813
|
description: "Edit image(s) using Gemini (Nano Banana). Provide image paths and an edit prompt. Requires GOOGLE_API_KEY.",
|
|
489754
489814
|
schema: z4.object({
|
|
489755
489815
|
imagePaths: z4.array(z4.string()).describe("Input image file path(s)"),
|
|
@@ -489773,6 +489833,8 @@ var editFillGapsTool = defineTool({
|
|
|
489773
489833
|
name: "edit_fill_gaps",
|
|
489774
489834
|
category: "edit",
|
|
489775
489835
|
cost: "high",
|
|
489836
|
+
title: "Fill Timeline Gaps with AI Video",
|
|
489837
|
+
annotations: { readOnly: false, openWorld: true },
|
|
489776
489838
|
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).",
|
|
489777
489839
|
schema: z4.object({
|
|
489778
489840
|
projectPath: z4.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -491256,6 +491318,8 @@ var inspectProjectTool = defineTool({
|
|
|
491256
491318
|
name: "inspect_project",
|
|
491257
491319
|
category: "analyze",
|
|
491258
491320
|
cost: "free",
|
|
491321
|
+
title: "Inspect Project",
|
|
491322
|
+
annotations: { readOnly: false, openWorld: false },
|
|
491259
491323
|
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.",
|
|
491260
491324
|
schema: z5.object({
|
|
491261
491325
|
projectDir: z5.string().optional().describe(PROJECT_DIR_DESCRIPTION2),
|
|
@@ -491290,6 +491354,8 @@ var inspectRenderTool = defineTool({
|
|
|
491290
491354
|
name: "inspect_render",
|
|
491291
491355
|
category: "analyze",
|
|
491292
491356
|
cost: "low",
|
|
491357
|
+
title: "Inspect Render",
|
|
491358
|
+
annotations: { readOnly: false, openWorld: false },
|
|
491293
491359
|
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.",
|
|
491294
491360
|
schema: z5.object({
|
|
491295
491361
|
projectDir: z5.string().optional().describe(PROJECT_DIR_DESCRIPTION2),
|
|
@@ -491354,6 +491420,8 @@ var analyzeMediaTool = defineTool({
|
|
|
491354
491420
|
name: "inspect_media",
|
|
491355
491421
|
category: "analyze",
|
|
491356
491422
|
cost: "low",
|
|
491423
|
+
title: "Inspect Media with AI",
|
|
491424
|
+
annotations: { readOnly: true, openWorld: true },
|
|
491357
491425
|
description: "Analyze media (image, video, or YouTube URL) using Gemini AI. Requires GOOGLE_API_KEY.",
|
|
491358
491426
|
schema: z5.object({
|
|
491359
491427
|
source: z5.string().describe("Path to image/video or YouTube URL"),
|
|
@@ -491382,6 +491450,8 @@ var analyzeVideoTool = defineTool({
|
|
|
491382
491450
|
name: "inspect_video",
|
|
491383
491451
|
category: "analyze",
|
|
491384
491452
|
cost: "low",
|
|
491453
|
+
title: "Inspect Video with AI",
|
|
491454
|
+
annotations: { readOnly: true, openWorld: true },
|
|
491385
491455
|
description: "Analyze video content using Gemini AI with temporal understanding. Requires GOOGLE_API_KEY.",
|
|
491386
491456
|
schema: z5.object({
|
|
491387
491457
|
source: z5.string().describe("Path to video file"),
|
|
@@ -491410,6 +491480,8 @@ var analyzeReviewTool = defineTool({
|
|
|
491410
491480
|
name: "inspect_review",
|
|
491411
491481
|
category: "analyze",
|
|
491412
491482
|
cost: "low",
|
|
491483
|
+
title: "Review Video with AI",
|
|
491484
|
+
annotations: { readOnly: false, openWorld: true },
|
|
491413
491485
|
description: "AI video review: analyzes quality, suggests fixes, and optionally auto-applies them. Requires GOOGLE_API_KEY.",
|
|
491414
491486
|
schema: z5.object({
|
|
491415
491487
|
videoPath: z5.string().describe("Path to the video file to review"),
|
|
@@ -491438,6 +491510,8 @@ var analyzeSuggestTool = defineTool({
|
|
|
491438
491510
|
name: "inspect_suggest",
|
|
491439
491511
|
category: "analyze",
|
|
491440
491512
|
cost: "low",
|
|
491513
|
+
title: "Suggest Edits with AI",
|
|
491514
|
+
annotations: { readOnly: false, openWorld: true },
|
|
491441
491515
|
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.",
|
|
491442
491516
|
schema: z5.object({
|
|
491443
491517
|
projectPath: z5.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -491486,6 +491560,8 @@ var generateMotionTool = defineTool({
|
|
|
491486
491560
|
name: "generate_motion",
|
|
491487
491561
|
category: "generate",
|
|
491488
491562
|
cost: "low",
|
|
491563
|
+
title: "Generate Motion Graphics",
|
|
491564
|
+
annotations: { readOnly: false, openWorld: true },
|
|
491489
491565
|
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).",
|
|
491490
491566
|
schema: z6.object({
|
|
491491
491567
|
description: z6.string().describe("Description of the motion graphic to generate"),
|
|
@@ -491525,6 +491601,8 @@ var generateSpeechTool = defineTool({
|
|
|
491525
491601
|
name: "generate_speech",
|
|
491526
491602
|
category: "generate",
|
|
491527
491603
|
cost: "low",
|
|
491604
|
+
title: "Generate Speech Audio",
|
|
491605
|
+
annotations: { readOnly: false, openWorld: true },
|
|
491528
491606
|
description: "Generate speech from text using ElevenLabs TTS. Requires ELEVENLABS_API_KEY.",
|
|
491529
491607
|
schema: z6.object({
|
|
491530
491608
|
text: z6.string().describe("Text to convert to speech"),
|
|
@@ -491545,6 +491623,8 @@ var generateNarrationTool = defineTool({
|
|
|
491545
491623
|
name: "generate_narration",
|
|
491546
491624
|
category: "generate",
|
|
491547
491625
|
cost: "low",
|
|
491626
|
+
title: "Generate Narration Audio",
|
|
491627
|
+
annotations: { readOnly: false, openWorld: true },
|
|
491548
491628
|
description: "Generate narration from text using ElevenLabs TTS. Product-facing alias for generate_speech. Requires ELEVENLABS_API_KEY.",
|
|
491549
491629
|
schema: z6.object({
|
|
491550
491630
|
text: z6.string().describe("Narration text to convert to speech"),
|
|
@@ -491569,6 +491649,8 @@ var generateSoundEffectTool = defineTool({
|
|
|
491569
491649
|
name: "generate_sound_effect",
|
|
491570
491650
|
category: "generate",
|
|
491571
491651
|
cost: "low",
|
|
491652
|
+
title: "Generate Sound Effect",
|
|
491653
|
+
annotations: { readOnly: false, openWorld: true },
|
|
491572
491654
|
description: "Generate sound effects using ElevenLabs. Requires ELEVENLABS_API_KEY.",
|
|
491573
491655
|
schema: z6.object({
|
|
491574
491656
|
prompt: z6.string().describe("Description of the sound effect"),
|
|
@@ -491590,6 +491672,8 @@ var generateMusicTool = defineTool({
|
|
|
491590
491672
|
name: "generate_music",
|
|
491591
491673
|
category: "generate",
|
|
491592
491674
|
cost: "low",
|
|
491675
|
+
title: "Generate Music",
|
|
491676
|
+
annotations: { readOnly: false, openWorld: true },
|
|
491593
491677
|
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.",
|
|
491594
491678
|
schema: z6.object({
|
|
491595
491679
|
prompt: z6.string().describe("Description of the music to generate"),
|
|
@@ -491635,6 +491719,8 @@ var generateMusicStatusTool = defineTool({
|
|
|
491635
491719
|
name: "generate_music_status",
|
|
491636
491720
|
category: "generate",
|
|
491637
491721
|
cost: "free",
|
|
491722
|
+
title: "Check Music Generation Status",
|
|
491723
|
+
annotations: { readOnly: true, openWorld: true },
|
|
491638
491724
|
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.",
|
|
491639
491725
|
schema: z6.object({
|
|
491640
491726
|
taskId: z6.string().describe("Task ID returned from generate_music")
|
|
@@ -491658,6 +491744,8 @@ var generateImageTool = defineTool({
|
|
|
491658
491744
|
name: "generate_image",
|
|
491659
491745
|
category: "generate",
|
|
491660
491746
|
cost: "low",
|
|
491747
|
+
title: "Generate Image",
|
|
491748
|
+
annotations: { readOnly: false, openWorld: true },
|
|
491661
491749
|
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).",
|
|
491662
491750
|
schema: z6.object({
|
|
491663
491751
|
prompt: z6.string().describe("Image description prompt"),
|
|
@@ -491691,6 +491779,8 @@ var generateStoryboardTool = defineTool({
|
|
|
491691
491779
|
name: "generate_storyboard",
|
|
491692
491780
|
category: "generate",
|
|
491693
491781
|
cost: "low",
|
|
491782
|
+
title: "Generate Storyboard",
|
|
491783
|
+
annotations: { readOnly: false, openWorld: true },
|
|
491694
491784
|
description: "Generate a video storyboard from text content using Claude. Returns scene segments with descriptions, visuals, and narration. Requires ANTHROPIC_API_KEY.",
|
|
491695
491785
|
schema: z6.object({
|
|
491696
491786
|
content: z6.string().describe("Text content to analyze (script, article, etc.)"),
|
|
@@ -491714,6 +491804,8 @@ var generateBackgroundTool = defineTool({
|
|
|
491714
491804
|
name: "generate_background",
|
|
491715
491805
|
category: "generate",
|
|
491716
491806
|
cost: "low",
|
|
491807
|
+
title: "Generate Background Image",
|
|
491808
|
+
annotations: { readOnly: false, openWorld: true },
|
|
491717
491809
|
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.",
|
|
491718
491810
|
schema: z6.object({
|
|
491719
491811
|
description: z6.string().describe("Background description / image prompt."),
|
|
@@ -491738,6 +491830,8 @@ var generateThumbnailTool = defineTool({
|
|
|
491738
491830
|
name: "generate_thumbnail",
|
|
491739
491831
|
category: "generate",
|
|
491740
491832
|
cost: "low",
|
|
491833
|
+
title: "Generate Thumbnail",
|
|
491834
|
+
annotations: { readOnly: false, openWorld: true },
|
|
491741
491835
|
description: "Extract the best thumbnail frame from a video using Gemini AI analysis. Requires GOOGLE_API_KEY.",
|
|
491742
491836
|
schema: z6.object({
|
|
491743
491837
|
videoPath: z6.string().describe("Path to the video file"),
|
|
@@ -491759,6 +491853,8 @@ var generateVideoTool = defineTool({
|
|
|
491759
491853
|
name: "generate_video",
|
|
491760
491854
|
category: "generate",
|
|
491761
491855
|
cost: "high",
|
|
491856
|
+
title: "Generate Video",
|
|
491857
|
+
annotations: { readOnly: false, openWorld: true },
|
|
491762
491858
|
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.",
|
|
491763
491859
|
schema: z6.object({
|
|
491764
491860
|
prompt: z6.string().describe("Text prompt describing the video"),
|
|
@@ -491820,6 +491916,8 @@ var generateVideoStatusTool = defineTool({
|
|
|
491820
491916
|
name: "generate_video_status",
|
|
491821
491917
|
category: "generate",
|
|
491822
491918
|
cost: "free",
|
|
491919
|
+
title: "Check Video Generation Status",
|
|
491920
|
+
annotations: { readOnly: false, openWorld: true },
|
|
491823
491921
|
description: "Check video generation status for Grok, Runway, Kling, or Veo tasks.",
|
|
491824
491922
|
schema: z6.object({
|
|
491825
491923
|
taskId: z6.string().describe("Task ID from video generation"),
|
|
@@ -491850,6 +491948,8 @@ var generateVideoCancelTool = defineTool({
|
|
|
491850
491948
|
name: "generate_video_cancel",
|
|
491851
491949
|
category: "generate",
|
|
491852
491950
|
cost: "free",
|
|
491951
|
+
title: "Cancel Video Generation",
|
|
491952
|
+
annotations: { readOnly: false, openWorld: true },
|
|
491853
491953
|
description: "Cancel a Runway video generation task.",
|
|
491854
491954
|
schema: z6.object({
|
|
491855
491955
|
taskId: z6.string().describe("Task ID to cancel")
|
|
@@ -491868,6 +491968,8 @@ var generateVideoExtendTool = defineTool({
|
|
|
491868
491968
|
name: "generate_video_extend",
|
|
491869
491969
|
category: "generate",
|
|
491870
491970
|
cost: "high",
|
|
491971
|
+
title: "Extend Generated Video",
|
|
491972
|
+
annotations: { readOnly: false, openWorld: true },
|
|
491871
491973
|
description: "Extend video duration using Kling or Veo. Requires the video/operation ID from a previous generation.",
|
|
491872
491974
|
schema: z6.object({
|
|
491873
491975
|
videoId: z6.string().describe("Video ID (Kling) or operation name (Veo)"),
|
|
@@ -492270,6 +492372,8 @@ var storyboardListTool = defineTool({
|
|
|
492270
492372
|
name: "storyboard_list",
|
|
492271
492373
|
category: "storyboard",
|
|
492272
492374
|
cost: "free",
|
|
492375
|
+
title: "List Storyboard Beats",
|
|
492376
|
+
annotations: { readOnly: true, openWorld: false },
|
|
492273
492377
|
description: "List beats, ids, durations, and cue blocks from a project's STORYBOARD.md.",
|
|
492274
492378
|
schema: projectDirSchema,
|
|
492275
492379
|
async execute(args, ctx) {
|
|
@@ -492296,6 +492400,8 @@ var storyboardValidateTool = defineTool({
|
|
|
492296
492400
|
name: "storyboard_validate",
|
|
492297
492401
|
category: "storyboard",
|
|
492298
492402
|
cost: "free",
|
|
492403
|
+
title: "Validate Storyboard",
|
|
492404
|
+
annotations: { readOnly: true, openWorld: false },
|
|
492299
492405
|
description: "Validate STORYBOARD.md beat ids and cue blocks.",
|
|
492300
492406
|
schema: projectDirSchema,
|
|
492301
492407
|
async execute(args, ctx) {
|
|
@@ -492326,6 +492432,8 @@ var storyboardGetTool = defineTool({
|
|
|
492326
492432
|
name: "storyboard_get",
|
|
492327
492433
|
category: "storyboard",
|
|
492328
492434
|
cost: "free",
|
|
492435
|
+
title: "Get Storyboard Beat",
|
|
492436
|
+
annotations: { readOnly: true, openWorld: false },
|
|
492329
492437
|
description: "Return one STORYBOARD.md beat as structured data.",
|
|
492330
492438
|
schema: z7.object({
|
|
492331
492439
|
projectDir: z7.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
@@ -492348,6 +492456,8 @@ var storyboardSetTool = defineTool({
|
|
|
492348
492456
|
name: "storyboard_set",
|
|
492349
492457
|
category: "storyboard",
|
|
492350
492458
|
cost: "free",
|
|
492459
|
+
title: "Set Storyboard Cue",
|
|
492460
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
492351
492461
|
description: "Set or unset one cue on one beat in STORYBOARD.md.",
|
|
492352
492462
|
schema: z7.object({
|
|
492353
492463
|
projectDir: z7.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
@@ -492384,6 +492494,8 @@ var storyboardMoveTool = defineTool({
|
|
|
492384
492494
|
name: "storyboard_move",
|
|
492385
492495
|
category: "storyboard",
|
|
492386
492496
|
cost: "free",
|
|
492497
|
+
title: "Reorder Storyboard Beat",
|
|
492498
|
+
annotations: { readOnly: false, openWorld: false },
|
|
492387
492499
|
description: "Move one beat after another beat in STORYBOARD.md.",
|
|
492388
492500
|
schema: z7.object({
|
|
492389
492501
|
projectDir: z7.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
@@ -492414,6 +492526,8 @@ var storyboardReviseTool = defineTool({
|
|
|
492414
492526
|
name: "storyboard_revise",
|
|
492415
492527
|
category: "storyboard",
|
|
492416
492528
|
cost: "low",
|
|
492529
|
+
title: "Revise Storyboard with AI",
|
|
492530
|
+
annotations: { readOnly: false, openWorld: true },
|
|
492417
492531
|
description: "Revise an existing STORYBOARD.md from a natural-language request. Reads project context, validates the revised storyboard, and writes unless dryRun is true.",
|
|
492418
492532
|
schema: z7.object({
|
|
492419
492533
|
projectDir: z7.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
@@ -492445,6 +492559,8 @@ var planTool = defineTool({
|
|
|
492445
492559
|
name: "plan",
|
|
492446
492560
|
category: "storyboard",
|
|
492447
492561
|
cost: "free",
|
|
492562
|
+
title: "Plan Build Cost and Stages",
|
|
492563
|
+
annotations: { readOnly: true, openWorld: false },
|
|
492448
492564
|
description: "Read STORYBOARD.md and return the build plan, missing artifacts, provider needs, and estimated cost.",
|
|
492449
492565
|
schema: z7.object({
|
|
492450
492566
|
projectDir: z7.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
@@ -494143,6 +494259,8 @@ var pipelineHighlightsTool = defineTool({
|
|
|
494143
494259
|
name: "remix_highlights",
|
|
494144
494260
|
category: "pipeline",
|
|
494145
494261
|
cost: "low",
|
|
494262
|
+
title: "Extract Video Highlights",
|
|
494263
|
+
annotations: { readOnly: false, openWorld: true },
|
|
494146
494264
|
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).",
|
|
494147
494265
|
schema: z8.object({
|
|
494148
494266
|
media: z8.string().describe("Path to the input video file"),
|
|
@@ -494176,6 +494294,8 @@ var pipelineAutoShortsTool = defineTool({
|
|
|
494176
494294
|
name: "remix_auto_shorts",
|
|
494177
494295
|
category: "pipeline",
|
|
494178
494296
|
cost: "medium",
|
|
494297
|
+
title: "Generate Auto Shorts",
|
|
494298
|
+
annotations: { readOnly: false, openWorld: true },
|
|
494179
494299
|
description: "Automatically generate short-form content (Reels/TikTok/Shorts) from a longer video. Same API key requirements as remix_highlights.",
|
|
494180
494300
|
schema: z8.object({
|
|
494181
494301
|
video: z8.string().describe("Path to the input video file"),
|
|
@@ -494213,6 +494333,8 @@ var pipelineRunTool = defineTool({
|
|
|
494213
494333
|
name: "run",
|
|
494214
494334
|
category: "pipeline",
|
|
494215
494335
|
cost: "very-high",
|
|
494336
|
+
title: "Run YAML Pipeline",
|
|
494337
|
+
annotations: { readOnly: false, openWorld: true },
|
|
494216
494338
|
surfaces: ["mcp"],
|
|
494217
494339
|
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.",
|
|
494218
494340
|
schema: z8.object({
|
|
@@ -494292,6 +494414,8 @@ var pipelineRegenerateSceneTool = defineTool({
|
|
|
494292
494414
|
name: "remix_regenerate_scene",
|
|
494293
494415
|
category: "pipeline",
|
|
494294
494416
|
cost: "high",
|
|
494417
|
+
title: "Regenerate Storyboard Scenes",
|
|
494418
|
+
annotations: { readOnly: false, openWorld: true },
|
|
494295
494419
|
description: "Regenerate specific scenes against an existing storyboard.{yaml,json} on disk. Can regenerate video, image, or narration independently.",
|
|
494296
494420
|
schema: z8.object({
|
|
494297
494421
|
projectDir: z8.string().describe("Path to the project output directory containing storyboard.json"),
|
|
@@ -494329,6 +494453,8 @@ var detectScenesTool = defineTool({
|
|
|
494329
494453
|
name: "detect_scenes",
|
|
494330
494454
|
category: "detect",
|
|
494331
494455
|
cost: "free",
|
|
494456
|
+
title: "Detect Scene Cuts",
|
|
494457
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
494332
494458
|
description: "Detect scene changes in video using FFmpeg. No API key needed.",
|
|
494333
494459
|
schema: z9.object({
|
|
494334
494460
|
videoPath: z9.string().describe("Path to the input video file"),
|
|
@@ -494353,6 +494479,8 @@ var detectSilenceTool = defineTool({
|
|
|
494353
494479
|
name: "detect_silence",
|
|
494354
494480
|
category: "detect",
|
|
494355
494481
|
cost: "free",
|
|
494482
|
+
title: "Detect Silence Periods",
|
|
494483
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
494356
494484
|
description: "Detect silence periods in audio/video using FFmpeg. No API key needed.",
|
|
494357
494485
|
schema: z9.object({
|
|
494358
494486
|
mediaPath: z9.string().describe("Path to the audio/video file"),
|
|
@@ -494374,6 +494502,8 @@ var detectBeatsTool = defineTool({
|
|
|
494374
494502
|
name: "detect_beats",
|
|
494375
494503
|
category: "detect",
|
|
494376
494504
|
cost: "free",
|
|
494505
|
+
title: "Detect Audio Beats",
|
|
494506
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
494377
494507
|
description: "Detect beats in audio for music sync using FFmpeg loudness analysis. No API key needed.",
|
|
494378
494508
|
schema: z9.object({
|
|
494379
494509
|
audioPath: z9.string().describe("Path to the audio file"),
|
|
@@ -494436,6 +494566,8 @@ var timelineCreateTool = defineTool({
|
|
|
494436
494566
|
name: "timeline_create",
|
|
494437
494567
|
category: "timeline",
|
|
494438
494568
|
cost: "free",
|
|
494569
|
+
title: "Create Timeline",
|
|
494570
|
+
annotations: { readOnly: false, openWorld: false },
|
|
494439
494571
|
description: "Create a low-level timeline JSON file for FFmpeg-style editing",
|
|
494440
494572
|
schema: z10.object({
|
|
494441
494573
|
name: z10.string().describe("Timeline name or directory path"),
|
|
@@ -494466,6 +494598,8 @@ var timelineInfoTool = defineTool({
|
|
|
494466
494598
|
name: "timeline_info",
|
|
494467
494599
|
category: "timeline",
|
|
494468
494600
|
cost: "free",
|
|
494601
|
+
title: "Get Timeline Info",
|
|
494602
|
+
annotations: { readOnly: true, openWorld: false },
|
|
494469
494603
|
description: "Get information about a timeline JSON file. Legacy *.vibe.json files are supported.",
|
|
494470
494604
|
schema: z10.object({
|
|
494471
494605
|
projectPath: z10.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file")
|
|
@@ -494493,6 +494627,8 @@ var timelineAddSourceTool = defineTool({
|
|
|
494493
494627
|
name: "timeline_add_source",
|
|
494494
494628
|
category: "timeline",
|
|
494495
494629
|
cost: "free",
|
|
494630
|
+
title: "Add Source to Timeline",
|
|
494631
|
+
annotations: { readOnly: false, openWorld: false },
|
|
494496
494632
|
description: "Add a media source (video, audio, image) to the timeline",
|
|
494497
494633
|
schema: z10.object({
|
|
494498
494634
|
projectPath: z10.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -494518,6 +494654,8 @@ var timelineAddClipTool = defineTool({
|
|
|
494518
494654
|
name: "timeline_add_clip",
|
|
494519
494655
|
category: "timeline",
|
|
494520
494656
|
cost: "free",
|
|
494657
|
+
title: "Add Clip to Timeline",
|
|
494658
|
+
annotations: { readOnly: false, openWorld: false },
|
|
494521
494659
|
description: "Add a clip to the timeline from an existing source",
|
|
494522
494660
|
schema: z10.object({
|
|
494523
494661
|
projectPath: z10.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -494549,6 +494687,8 @@ var timelineSplitClipTool = defineTool({
|
|
|
494549
494687
|
name: "timeline_split_clip",
|
|
494550
494688
|
category: "timeline",
|
|
494551
494689
|
cost: "free",
|
|
494690
|
+
title: "Split Clip",
|
|
494691
|
+
annotations: { readOnly: false, openWorld: false },
|
|
494552
494692
|
description: "Split a clip at a specific time",
|
|
494553
494693
|
schema: z10.object({
|
|
494554
494694
|
projectPath: z10.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -494567,6 +494707,8 @@ var timelineTrimClipTool = defineTool({
|
|
|
494567
494707
|
name: "timeline_trim_clip",
|
|
494568
494708
|
category: "timeline",
|
|
494569
494709
|
cost: "free",
|
|
494710
|
+
title: "Trim Clip",
|
|
494711
|
+
annotations: { readOnly: false, openWorld: false },
|
|
494570
494712
|
description: "Trim a clip by adjusting its start or end",
|
|
494571
494713
|
schema: z10.object({
|
|
494572
494714
|
projectPath: z10.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -494586,6 +494728,8 @@ var timelineMoveClipTool = defineTool({
|
|
|
494586
494728
|
name: "timeline_move_clip",
|
|
494587
494729
|
category: "timeline",
|
|
494588
494730
|
cost: "free",
|
|
494731
|
+
title: "Move Clip",
|
|
494732
|
+
annotations: { readOnly: false, openWorld: false },
|
|
494589
494733
|
description: "Move a clip to a new position or track",
|
|
494590
494734
|
schema: z10.object({
|
|
494591
494735
|
projectPath: z10.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -494608,6 +494752,8 @@ var timelineDeleteClipTool = defineTool({
|
|
|
494608
494752
|
name: "timeline_delete_clip",
|
|
494609
494753
|
category: "timeline",
|
|
494610
494754
|
cost: "free",
|
|
494755
|
+
title: "Delete Clip",
|
|
494756
|
+
annotations: { readOnly: false, openWorld: false },
|
|
494611
494757
|
description: "Delete a clip from the timeline",
|
|
494612
494758
|
schema: z10.object({
|
|
494613
494759
|
projectPath: z10.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -494624,6 +494770,8 @@ var timelineDuplicateClipTool = defineTool({
|
|
|
494624
494770
|
name: "timeline_duplicate_clip",
|
|
494625
494771
|
category: "timeline",
|
|
494626
494772
|
cost: "free",
|
|
494773
|
+
title: "Duplicate Clip",
|
|
494774
|
+
annotations: { readOnly: false, openWorld: false },
|
|
494627
494775
|
description: "Duplicate a clip on the timeline (optionally at a new start time)",
|
|
494628
494776
|
schema: z10.object({
|
|
494629
494777
|
projectPath: z10.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -494642,6 +494790,8 @@ var timelineAddEffectTool = defineTool({
|
|
|
494642
494790
|
name: "timeline_add_effect",
|
|
494643
494791
|
category: "timeline",
|
|
494644
494792
|
cost: "free",
|
|
494793
|
+
title: "Add Effect to Clip",
|
|
494794
|
+
annotations: { readOnly: false, openWorld: false },
|
|
494645
494795
|
description: "Add an effect to a clip",
|
|
494646
494796
|
schema: z10.object({
|
|
494647
494797
|
projectPath: z10.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -494668,6 +494818,8 @@ var timelineAddTrackTool = defineTool({
|
|
|
494668
494818
|
name: "timeline_add_track",
|
|
494669
494819
|
category: "timeline",
|
|
494670
494820
|
cost: "free",
|
|
494821
|
+
title: "Add Track to Timeline",
|
|
494822
|
+
annotations: { readOnly: false, openWorld: false },
|
|
494671
494823
|
description: "Add a new track to the timeline",
|
|
494672
494824
|
schema: z10.object({
|
|
494673
494825
|
projectPath: z10.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -494694,6 +494846,8 @@ var timelineListTool = defineTool({
|
|
|
494694
494846
|
name: "timeline_list",
|
|
494695
494847
|
category: "timeline",
|
|
494696
494848
|
cost: "free",
|
|
494849
|
+
title: "List Timeline Contents",
|
|
494850
|
+
annotations: { readOnly: true, openWorld: false },
|
|
494697
494851
|
description: "List all sources, tracks, and clips in a project",
|
|
494698
494852
|
schema: z10.object({
|
|
494699
494853
|
projectPath: z10.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file")
|
|
@@ -494736,6 +494890,8 @@ var projectCreateTool = defineTool({
|
|
|
494736
494890
|
name: "project_create",
|
|
494737
494891
|
category: "project",
|
|
494738
494892
|
cost: "free",
|
|
494893
|
+
title: "Create Project",
|
|
494894
|
+
annotations: { readOnly: false, openWorld: false },
|
|
494739
494895
|
description: "Deprecated alias for creating low-level timeline state. Prefer timeline_create.",
|
|
494740
494896
|
schema: z11.object({
|
|
494741
494897
|
name: z11.string().describe("Project name"),
|
|
@@ -494760,6 +494916,8 @@ var projectInfoTool = defineTool({
|
|
|
494760
494916
|
name: "project_info",
|
|
494761
494917
|
category: "project",
|
|
494762
494918
|
cost: "free",
|
|
494919
|
+
title: "Get Project Info",
|
|
494920
|
+
annotations: { readOnly: true, openWorld: false },
|
|
494763
494921
|
description: "Deprecated alias for timeline_info. Legacy *.vibe.json files remain supported.",
|
|
494764
494922
|
schema: z11.object({
|
|
494765
494923
|
projectPath: z11.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file")
|
|
@@ -495647,6 +495805,8 @@ var exportVideoTool = defineTool({
|
|
|
495647
495805
|
name: "export_video",
|
|
495648
495806
|
category: "export",
|
|
495649
495807
|
cost: "free",
|
|
495808
|
+
title: "Export Timeline to Video",
|
|
495809
|
+
annotations: { readOnly: false, openWorld: false },
|
|
495650
495810
|
description: "Export a VibeFrame timeline to a video file (MP4, WebM, or MOV). Requires FFmpeg.",
|
|
495651
495811
|
schema: z12.object({
|
|
495652
495812
|
projectPath: z12.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -495738,6 +495898,8 @@ var fsListTool = defineTool({
|
|
|
495738
495898
|
name: "fs_list",
|
|
495739
495899
|
category: "agent-only",
|
|
495740
495900
|
cost: "free",
|
|
495901
|
+
title: "List Files",
|
|
495902
|
+
annotations: { readOnly: true, openWorld: false },
|
|
495741
495903
|
surfaces: ["agent"],
|
|
495742
495904
|
description: "List files and directories in a path",
|
|
495743
495905
|
schema: z13.object({
|
|
@@ -495771,6 +495933,8 @@ var fsReadTool = defineTool({
|
|
|
495771
495933
|
name: "fs_read",
|
|
495772
495934
|
category: "agent-only",
|
|
495773
495935
|
cost: "free",
|
|
495936
|
+
title: "Read File",
|
|
495937
|
+
annotations: { readOnly: true, openWorld: false },
|
|
495774
495938
|
surfaces: ["agent"],
|
|
495775
495939
|
description: "Read contents of a text file",
|
|
495776
495940
|
schema: z13.object({
|
|
@@ -495793,6 +495957,8 @@ var fsWriteTool = defineTool({
|
|
|
495793
495957
|
name: "fs_write",
|
|
495794
495958
|
category: "agent-only",
|
|
495795
495959
|
cost: "free",
|
|
495960
|
+
title: "Write File",
|
|
495961
|
+
annotations: { readOnly: false, openWorld: false },
|
|
495796
495962
|
surfaces: ["agent"],
|
|
495797
495963
|
description: "Write content to a file",
|
|
495798
495964
|
schema: z13.object({
|
|
@@ -495813,6 +495979,8 @@ var fsExistsTool = defineTool({
|
|
|
495813
495979
|
name: "fs_exists",
|
|
495814
495980
|
category: "agent-only",
|
|
495815
495981
|
cost: "free",
|
|
495982
|
+
title: "Check Path Exists",
|
|
495983
|
+
annotations: { readOnly: true, openWorld: false },
|
|
495816
495984
|
surfaces: ["agent"],
|
|
495817
495985
|
description: "Check if a file or directory exists",
|
|
495818
495986
|
schema: z13.object({
|
|
@@ -495834,6 +496002,8 @@ var batchImportTool = defineTool({
|
|
|
495834
496002
|
name: "batch_import",
|
|
495835
496003
|
category: "agent-only",
|
|
495836
496004
|
cost: "free",
|
|
496005
|
+
title: "Batch Import Media",
|
|
496006
|
+
annotations: { readOnly: false, openWorld: false },
|
|
495837
496007
|
surfaces: ["agent"],
|
|
495838
496008
|
description: "Import multiple media files from a directory into a project. Scans directory for video, audio, and image files.",
|
|
495839
496009
|
schema: z13.object({
|
|
@@ -495903,6 +496073,8 @@ var batchConcatTool = defineTool({
|
|
|
495903
496073
|
name: "batch_concat",
|
|
495904
496074
|
category: "agent-only",
|
|
495905
496075
|
cost: "free",
|
|
496076
|
+
title: "Batch Concatenate Sources",
|
|
496077
|
+
annotations: { readOnly: false, openWorld: false },
|
|
495906
496078
|
surfaces: ["agent"],
|
|
495907
496079
|
description: "Concatenate multiple sources into sequential clips on the timeline",
|
|
495908
496080
|
schema: z13.object({
|
|
@@ -495972,6 +496144,8 @@ var batchApplyEffectTool = defineTool({
|
|
|
495972
496144
|
name: "batch_apply_effect",
|
|
495973
496145
|
category: "agent-only",
|
|
495974
496146
|
cost: "free",
|
|
496147
|
+
title: "Batch Apply Effect",
|
|
496148
|
+
annotations: { readOnly: false, openWorld: false },
|
|
495975
496149
|
surfaces: ["agent"],
|
|
495976
496150
|
description: "Apply an effect to multiple clips at once",
|
|
495977
496151
|
schema: z13.object({
|
|
@@ -496028,6 +496202,8 @@ var timelineClearTool = defineTool({
|
|
|
496028
496202
|
name: "timeline_clear",
|
|
496029
496203
|
category: "agent-only",
|
|
496030
496204
|
cost: "free",
|
|
496205
|
+
title: "Clear Timeline",
|
|
496206
|
+
annotations: { readOnly: false, openWorld: false },
|
|
496031
496207
|
surfaces: ["agent"],
|
|
496032
496208
|
description: "Clear timeline contents (remove clips, tracks, or sources)",
|
|
496033
496209
|
schema: z13.object({
|
|
@@ -496102,6 +496278,8 @@ var projectSetTool = defineTool({
|
|
|
496102
496278
|
name: "project_set",
|
|
496103
496279
|
category: "agent-only",
|
|
496104
496280
|
cost: "free",
|
|
496281
|
+
title: "Update Project Settings",
|
|
496282
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
496105
496283
|
surfaces: ["agent"],
|
|
496106
496284
|
description: "Update timeline settings (name, aspect ratio, frame rate)",
|
|
496107
496285
|
schema: z13.object({
|
|
@@ -496147,6 +496325,8 @@ var projectOpenTool = defineTool({
|
|
|
496147
496325
|
name: "project_open",
|
|
496148
496326
|
category: "agent-only",
|
|
496149
496327
|
cost: "free",
|
|
496328
|
+
title: "Open Project",
|
|
496329
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
496150
496330
|
surfaces: ["agent"],
|
|
496151
496331
|
description: "Open an existing project and set it as the current context",
|
|
496152
496332
|
schema: z13.object({
|
|
@@ -496185,6 +496365,8 @@ var projectSaveTool = defineTool({
|
|
|
496185
496365
|
name: "project_save",
|
|
496186
496366
|
category: "agent-only",
|
|
496187
496367
|
cost: "free",
|
|
496368
|
+
title: "Save Project",
|
|
496369
|
+
annotations: { readOnly: false, openWorld: false },
|
|
496188
496370
|
surfaces: ["agent"],
|
|
496189
496371
|
description: "Save the current project (uses ctx.agent.projectPath if no path given)",
|
|
496190
496372
|
schema: z13.object({
|
|
@@ -496219,6 +496401,8 @@ var exportAudioTool = defineTool({
|
|
|
496219
496401
|
name: "export_audio",
|
|
496220
496402
|
category: "agent-only",
|
|
496221
496403
|
cost: "free",
|
|
496404
|
+
title: "Export Audio",
|
|
496405
|
+
annotations: { readOnly: false, openWorld: false },
|
|
496222
496406
|
surfaces: ["agent"],
|
|
496223
496407
|
description: "Export audio track from a project. Not implemented \u2014 use export_video then strip audio with FFmpeg.",
|
|
496224
496408
|
schema: z13.object({
|
|
@@ -496237,6 +496421,8 @@ var exportSubtitlesTool = defineTool({
|
|
|
496237
496421
|
name: "export_subtitles",
|
|
496238
496422
|
category: "agent-only",
|
|
496239
496423
|
cost: "free",
|
|
496424
|
+
title: "Export Subtitles",
|
|
496425
|
+
annotations: { readOnly: false, openWorld: false },
|
|
496240
496426
|
surfaces: ["agent"],
|
|
496241
496427
|
description: "Export subtitles from transcription. Not implemented \u2014 use audio_transcribe to generate subtitles from audio.",
|
|
496242
496428
|
schema: z13.object({
|
|
@@ -496255,6 +496441,8 @@ var mediaInfoTool = defineTool({
|
|
|
496255
496441
|
name: "media_info",
|
|
496256
496442
|
category: "agent-only",
|
|
496257
496443
|
cost: "free",
|
|
496444
|
+
title: "Get Media Info",
|
|
496445
|
+
annotations: { readOnly: true, openWorld: false },
|
|
496258
496446
|
surfaces: ["agent"],
|
|
496259
496447
|
description: "Get information about a media file (duration, resolution, codec, etc.)",
|
|
496260
496448
|
schema: z13.object({
|
|
@@ -496339,6 +496527,8 @@ var mediaCompressTool = defineTool({
|
|
|
496339
496527
|
name: "media_compress",
|
|
496340
496528
|
category: "agent-only",
|
|
496341
496529
|
cost: "free",
|
|
496530
|
+
title: "Compress Media",
|
|
496531
|
+
annotations: { readOnly: false, openWorld: false },
|
|
496342
496532
|
surfaces: ["agent"],
|
|
496343
496533
|
description: "Compress a video or audio file using FFmpeg",
|
|
496344
496534
|
schema: z13.object({
|
|
@@ -496400,6 +496590,8 @@ var mediaConvertTool = defineTool({
|
|
|
496400
496590
|
name: "media_convert",
|
|
496401
496591
|
category: "agent-only",
|
|
496402
496592
|
cost: "free",
|
|
496593
|
+
title: "Convert Media",
|
|
496594
|
+
annotations: { readOnly: false, openWorld: false },
|
|
496403
496595
|
surfaces: ["agent"],
|
|
496404
496596
|
description: "Convert media file to a different format using FFmpeg",
|
|
496405
496597
|
schema: z13.object({
|
|
@@ -496447,6 +496639,8 @@ var mediaConcatTool = defineTool({
|
|
|
496447
496639
|
name: "media_concat",
|
|
496448
496640
|
category: "agent-only",
|
|
496449
496641
|
cost: "free",
|
|
496642
|
+
title: "Concatenate Media Files",
|
|
496643
|
+
annotations: { readOnly: false, openWorld: false },
|
|
496450
496644
|
surfaces: ["agent"],
|
|
496451
496645
|
description: "Concatenate multiple media files into one using FFmpeg",
|
|
496452
496646
|
schema: z13.object({
|
|
@@ -496986,6 +497180,8 @@ var guideTool = defineTool({
|
|
|
496986
497180
|
name: "guide",
|
|
496987
497181
|
category: "agent",
|
|
496988
497182
|
cost: "free",
|
|
497183
|
+
title: "Load Workflow Guide",
|
|
497184
|
+
annotations: { readOnly: true, openWorld: false },
|
|
496989
497185
|
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.",
|
|
496990
497186
|
schema: guideSchema,
|
|
496991
497187
|
async execute(args) {
|
|
@@ -497022,6 +497218,8 @@ var statusJobTool = defineTool({
|
|
|
497022
497218
|
name: "status_job",
|
|
497023
497219
|
category: "status",
|
|
497024
497220
|
cost: "free",
|
|
497221
|
+
title: "Check Job Status",
|
|
497222
|
+
annotations: { readOnly: false, destructive: false, openWorld: true },
|
|
497025
497223
|
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).",
|
|
497026
497224
|
schema: z15.object({
|
|
497027
497225
|
jobId: z15.string().describe("Local job id returned by a no-wait command."),
|
|
@@ -497057,6 +497255,8 @@ var statusProjectTool = defineTool({
|
|
|
497057
497255
|
name: "status_project",
|
|
497058
497256
|
category: "status",
|
|
497059
497257
|
cost: "free",
|
|
497258
|
+
title: "Check Project Status",
|
|
497259
|
+
annotations: { readOnly: false, destructive: false, openWorld: true },
|
|
497060
497260
|
description: "Summarize build-report.json, review-report.json, and local async job records for a VibeFrame project.",
|
|
497061
497261
|
schema: z15.object({
|
|
497062
497262
|
projectDir: z15.string().optional().describe(PROJECT_DIR_DESCRIPTION4),
|
|
@@ -497313,16 +497513,29 @@ function manifestToMcpTools(manifest2) {
|
|
|
497313
497513
|
const inputSchema = zodToJsonSchema(t2.schema);
|
|
497314
497514
|
return {
|
|
497315
497515
|
name: t2.name,
|
|
497516
|
+
title: t2.title,
|
|
497316
497517
|
description: t2.description,
|
|
497317
497518
|
inputSchema: {
|
|
497318
497519
|
type: "object",
|
|
497319
497520
|
properties: inputSchema.properties ?? {},
|
|
497320
497521
|
required: inputSchema.required ?? [],
|
|
497321
497522
|
...inputSchema.description ? { description: inputSchema.description } : {}
|
|
497322
|
-
}
|
|
497523
|
+
},
|
|
497524
|
+
annotations: toMcpAnnotations(t2.annotations)
|
|
497323
497525
|
};
|
|
497324
497526
|
});
|
|
497325
497527
|
}
|
|
497528
|
+
function toMcpAnnotations(a2) {
|
|
497529
|
+
if (a2.readOnly) {
|
|
497530
|
+
return { readOnlyHint: true, openWorldHint: a2.openWorld };
|
|
497531
|
+
}
|
|
497532
|
+
return {
|
|
497533
|
+
readOnlyHint: false,
|
|
497534
|
+
destructiveHint: a2.destructive ?? true,
|
|
497535
|
+
...a2.idempotent !== void 0 ? { idempotentHint: a2.idempotent } : {},
|
|
497536
|
+
openWorldHint: a2.openWorld
|
|
497537
|
+
};
|
|
497538
|
+
}
|
|
497326
497539
|
function buildMcpDispatcher(manifest2) {
|
|
497327
497540
|
const byName = /* @__PURE__ */ new Map();
|
|
497328
497541
|
for (const t2 of manifest2) {
|
|
@@ -497869,7 +498082,7 @@ var server2 = new Server(
|
|
|
497869
498082
|
{
|
|
497870
498083
|
name: "vibeframe",
|
|
497871
498084
|
// Stamped with the package version by build.js at bundle time.
|
|
497872
|
-
version: "0.
|
|
498085
|
+
version: "0.111.0"
|
|
497873
498086
|
},
|
|
497874
498087
|
{
|
|
497875
498088
|
capabilities: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibeframe/mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.111.0",
|
|
4
4
|
"description": "VibeFrame MCP Server - AI-native video editing via Model Context Protocol",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -60,8 +60,8 @@
|
|
|
60
60
|
"tsx": "^4.21.0",
|
|
61
61
|
"typescript": "^5.3.3",
|
|
62
62
|
"vitest": "^1.2.2",
|
|
63
|
-
"@vibeframe/
|
|
64
|
-
"@vibeframe/
|
|
63
|
+
"@vibeframe/cli": "0.111.0",
|
|
64
|
+
"@vibeframe/core": "0.111.0"
|
|
65
65
|
},
|
|
66
66
|
"engines": {
|
|
67
67
|
"node": ">=20"
|