@vibeframe/mcp-server 0.75.0 → 0.76.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 +24 -19
- package/dist/index.js +18 -18
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ Confirmed MCP hosts today: **Claude Desktop**, **Cursor**, **OpenCode**, and **C
|
|
|
8
8
|
|
|
9
9
|
| Surface | Package | How you call it |
|
|
10
10
|
|---------|---------|-----------------|
|
|
11
|
-
| MCP host (Claude Desktop / Cursor / OpenCode / Claude Code) | `@vibeframe/mcp-server` *(this)* | host calls tool by name, for example `
|
|
11
|
+
| MCP host (Claude Desktop / Cursor / OpenCode / Claude Code) | `@vibeframe/mcp-server` *(this)* | host calls tool by name, for example `mcp__vibeframe__build({...})` |
|
|
12
12
|
| Shell / scripts (any agent host: Codex / Aider / Gemini CLI / etc.) | `@vibeframe/cli` | `vibe init my-video && vibe build my-video && vibe render my-video` |
|
|
13
13
|
| Standalone agent REPL | `@vibeframe/cli` (`vibe agent`) | natural language -> CLI calls |
|
|
14
14
|
|
|
@@ -74,7 +74,7 @@ claude mcp add vibeframe -- npx -y @vibeframe/mcp-server
|
|
|
74
74
|
Once connected, your MCP host can resolve prompts like these into typed tool calls:
|
|
75
75
|
|
|
76
76
|
> "Scaffold a 12-second Swiss-Pulse promo project, three beats, and render it"
|
|
77
|
-
> *→ `
|
|
77
|
+
> *→ `init` + 3× `scene_add` + `render`*
|
|
78
78
|
|
|
79
79
|
> "Generate a cinematic backdrop image, animate it for 5 seconds, add narration"
|
|
80
80
|
> *→ `generate_image` + `generate_motion` + `generate_speech`*
|
|
@@ -84,20 +84,25 @@ Once connected, your MCP host can resolve prompts like these into typed tool cal
|
|
|
84
84
|
|
|
85
85
|
## Available Tools
|
|
86
86
|
|
|
87
|
-
Tool names are MCP-side. Your host typically prefixes them (e.g. Claude shows them as `
|
|
87
|
+
Tool names are MCP-side. Your host typically prefixes them (e.g. Claude shows them as `mcp__vibeframe__init`). Each one wraps the same engine call as the matching `vibe` CLI subcommand.
|
|
88
88
|
|
|
89
|
-
###
|
|
89
|
+
### Project flow (top-level)
|
|
90
|
+
|
|
91
|
+
| Tool | Description |
|
|
92
|
+
|------|-------------|
|
|
93
|
+
| `init` | Scaffold a video project with `STORYBOARD.md` + `DESIGN.md` |
|
|
94
|
+
| `build` | Build a storyboard project: narration TTS, image assets, scene HTML composition |
|
|
95
|
+
| `render` | Deterministic Hyperframes render → MP4/WebM/MOV |
|
|
96
|
+
|
|
97
|
+
### Scene authoring (lower-level)
|
|
90
98
|
|
|
91
99
|
| Tool | Description |
|
|
92
100
|
|------|-------------|
|
|
93
|
-
| `scene_init` | Low-level scene project scaffold with `STORYBOARD.md` + `DESIGN.md` |
|
|
94
101
|
| `scene_styles` | List the 8 vendored visual identities (Swiss Pulse, Data Drift, …) or fetch one |
|
|
95
102
|
| `scene_add` | Append a beat (narration + backdrop + composed HTML) |
|
|
96
103
|
| `scene_install_skill` | Install the Hyperframes skill bundle into a scene project |
|
|
97
104
|
| `scene_lint` | Validate composition HTML against the visual identity |
|
|
98
|
-
| `scene_render` | Deterministic Hyperframes render → MP4 |
|
|
99
105
|
| `scene_compose_prompts` | Emit the per-beat compose plan without making an LLM call |
|
|
100
|
-
| `scene_build` | Build a storyboard project from `STORYBOARD.md` cues with narration, image assets, composition, and render steps |
|
|
101
106
|
|
|
102
107
|
### Generation (13)
|
|
103
108
|
|
|
@@ -139,7 +144,7 @@ Tool names are MCP-side. Your host typically prefixes them (e.g. Claude shows th
|
|
|
139
144
|
| Tool | Description |
|
|
140
145
|
|------|-------------|
|
|
141
146
|
| `audio_dub` | AI voice dubbing (ElevenLabs) |
|
|
142
|
-
| `
|
|
147
|
+
| `audio_clone_voice` | Voice clone from sample |
|
|
143
148
|
| `audio_isolate` | Vocal / background isolation |
|
|
144
149
|
| `audio_duck` | Auto-duck BGM under speech |
|
|
145
150
|
| `audio_transcribe` | Transcript with word-level timing (Whisper) |
|
|
@@ -152,14 +157,14 @@ Tool names are MCP-side. Your host typically prefixes them (e.g. Claude shows th
|
|
|
152
157
|
| `detect_scenes` | Find shot boundaries |
|
|
153
158
|
| `detect_beats` | Find music beats |
|
|
154
159
|
|
|
155
|
-
###
|
|
160
|
+
### Inspection (4)
|
|
156
161
|
|
|
157
162
|
| Tool | Description |
|
|
158
163
|
|------|-------------|
|
|
159
|
-
| `
|
|
160
|
-
| `
|
|
161
|
-
| `
|
|
162
|
-
| `
|
|
164
|
+
| `inspect_media` | Unified image / video / YouTube analysis (Gemini) |
|
|
165
|
+
| `inspect_video` | Temporal video understanding (Gemini) |
|
|
166
|
+
| `inspect_review` | AI video review + auto-fix suggestions |
|
|
167
|
+
| `inspect_suggest` | Natural-language project edit suggestions (Gemini); optional auto-apply |
|
|
163
168
|
|
|
164
169
|
### Timeline (10)
|
|
165
170
|
|
|
@@ -179,14 +184,14 @@ Tool names are MCP-side. Your host typically prefixes them (e.g. Claude shows th
|
|
|
179
184
|
| `project_create` / `project_info` | `.vibe.json` lifecycle |
|
|
180
185
|
| `export_video` | Export project to MP4/WebM/MOV via FFmpeg |
|
|
181
186
|
|
|
182
|
-
###
|
|
187
|
+
### Remix & pipelines (4)
|
|
183
188
|
|
|
184
189
|
| Tool | Description |
|
|
185
190
|
|------|-------------|
|
|
186
|
-
| `
|
|
187
|
-
| `
|
|
188
|
-
| `
|
|
189
|
-
| `
|
|
191
|
+
| `run` | Execute a multi-stage YAML pipeline (`vibe run pipeline.yaml`) |
|
|
192
|
+
| `remix_highlights` | Long-form → highlight clips |
|
|
193
|
+
| `remix_auto_shorts` | Long-form → vertical shorts |
|
|
194
|
+
| `remix_regenerate_scene` | Re-render a single scene against an existing storyboard.{yaml,json} |
|
|
190
195
|
|
|
191
196
|
### Walkthrough (1)
|
|
192
197
|
|
|
@@ -225,7 +230,7 @@ API keys are read from the host's environment (`~/.zshrc`, MCP config `env` bloc
|
|
|
225
230
|
| Variable | Used by |
|
|
226
231
|
|----------|---------|
|
|
227
232
|
| `OPENAI_API_KEY` | gpt-image-2, Whisper, GPT |
|
|
228
|
-
| `ANTHROPIC_API_KEY` | Claude (translate-srt, highlights,
|
|
233
|
+
| `ANTHROPIC_API_KEY` | Claude (translate-srt, highlights, build compose pipeline) |
|
|
229
234
|
| `GOOGLE_API_KEY` | Gemini (analyze, review, silence-cut, narrate) |
|
|
230
235
|
| `ELEVENLABS_API_KEY` | TTS, voice-clone, dubbing, SFX |
|
|
231
236
|
| `XAI_API_KEY` | Grok |
|
package/dist/index.js
CHANGED
|
@@ -462655,7 +462655,7 @@ var sceneStylesTool = defineTool({
|
|
|
462655
462655
|
name: "scene_styles",
|
|
462656
462656
|
category: "scene",
|
|
462657
462657
|
cost: "free",
|
|
462658
|
-
description: "List the 8 vendored visual identities available for `
|
|
462658
|
+
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.",
|
|
462659
462659
|
schema: sceneStylesSchema,
|
|
462660
462660
|
async execute(args) {
|
|
462661
462661
|
if (args.name) {
|
|
@@ -462715,7 +462715,7 @@ var sceneInitSchema = z.object({
|
|
|
462715
462715
|
duration: z.number().optional().describe("Default root composition duration in seconds. Default 10.")
|
|
462716
462716
|
});
|
|
462717
462717
|
var sceneInitTool = defineTool({
|
|
462718
|
-
name: "
|
|
462718
|
+
name: "init",
|
|
462719
462719
|
category: "scene",
|
|
462720
462720
|
cost: "free",
|
|
462721
462721
|
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.",
|
|
@@ -462882,7 +462882,7 @@ var sceneRenderSchema = z.object({
|
|
|
462882
462882
|
workers: z.number().optional().describe("Capture worker count (1-16). Default 1.")
|
|
462883
462883
|
});
|
|
462884
462884
|
var sceneRenderTool = defineTool({
|
|
462885
|
-
name: "
|
|
462885
|
+
name: "render",
|
|
462886
462886
|
category: "scene",
|
|
462887
462887
|
cost: "free",
|
|
462888
462888
|
description: "Render a scene project to MP4/WebM/MOV via the Hyperframes producer. Requires Chrome installed locally. Output defaults to renders/<projectName>-<isoStamp>.<format>.",
|
|
@@ -462899,7 +462899,7 @@ var sceneRenderTool = defineTool({
|
|
|
462899
462899
|
workers: args.workers
|
|
462900
462900
|
});
|
|
462901
462901
|
if (!result.success) {
|
|
462902
|
-
return { success: false, error: result.error ?? "
|
|
462902
|
+
return { success: false, error: result.error ?? "render failed" };
|
|
462903
462903
|
}
|
|
462904
462904
|
return {
|
|
462905
462905
|
success: true,
|
|
@@ -462937,10 +462937,10 @@ var sceneBuildSchema = z.object({
|
|
|
462937
462937
|
force: z.boolean().optional().describe("Re-dispatch primitives even when cached assets exist.")
|
|
462938
462938
|
});
|
|
462939
462939
|
var sceneBuildTool = defineTool({
|
|
462940
|
-
name: "
|
|
462940
|
+
name: "build",
|
|
462941
462941
|
category: "scene",
|
|
462942
462942
|
cost: "high",
|
|
462943
|
-
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
|
|
462943
|
+
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.",
|
|
462944
462944
|
schema: sceneBuildSchema,
|
|
462945
462945
|
async execute(args, ctx) {
|
|
462946
462946
|
const projectDir = args.projectDir ? resolve23(ctx.workingDirectory, args.projectDir) : ctx.workingDirectory;
|
|
@@ -462960,7 +462960,7 @@ var sceneBuildTool = defineTool({
|
|
|
462960
462960
|
force: args.force
|
|
462961
462961
|
});
|
|
462962
462962
|
if (!result.success) {
|
|
462963
|
-
return { success: false, error: result.error ?? "
|
|
462963
|
+
return { success: false, error: result.error ?? "build failed" };
|
|
462964
462964
|
}
|
|
462965
462965
|
return {
|
|
462966
462966
|
success: true,
|
|
@@ -463043,7 +463043,7 @@ var sceneComposePromptsTool = defineTool({
|
|
|
463043
463043
|
name: "scene_compose_prompts",
|
|
463044
463044
|
category: "scene",
|
|
463045
463045
|
cost: "free",
|
|
463046
|
-
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. Pairs with scene_install_skill (Phase H1). Phase H2 of the agentic-native composer plan; the internal-LLM batch path (
|
|
463046
|
+
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. 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.",
|
|
463047
463047
|
schema: sceneComposePromptsSchema,
|
|
463048
463048
|
async execute(args, ctx) {
|
|
463049
463049
|
const projectDir = resolve23(ctx.workingDirectory, args.projectDir);
|
|
@@ -463136,7 +463136,7 @@ var audioIsolateTool = defineTool({
|
|
|
463136
463136
|
}
|
|
463137
463137
|
});
|
|
463138
463138
|
var audioVoiceCloneTool = defineTool({
|
|
463139
|
-
name: "
|
|
463139
|
+
name: "audio_clone_voice",
|
|
463140
463140
|
category: "audio",
|
|
463141
463141
|
cost: "low",
|
|
463142
463142
|
description: "Clone a voice from audio samples using ElevenLabs. Requires ELEVENLABS_API_KEY.",
|
|
@@ -463923,7 +463923,7 @@ async function executeSuggestEdit(options) {
|
|
|
463923
463923
|
|
|
463924
463924
|
// ../cli/src/tools/manifest/analyze.ts
|
|
463925
463925
|
var analyzeMediaTool = defineTool({
|
|
463926
|
-
name: "
|
|
463926
|
+
name: "inspect_media",
|
|
463927
463927
|
category: "analyze",
|
|
463928
463928
|
cost: "low",
|
|
463929
463929
|
description: "Analyze media (image, video, or YouTube URL) using Gemini AI. Requires GOOGLE_API_KEY.",
|
|
@@ -463951,7 +463951,7 @@ var analyzeMediaTool = defineTool({
|
|
|
463951
463951
|
}
|
|
463952
463952
|
});
|
|
463953
463953
|
var analyzeVideoTool = defineTool({
|
|
463954
|
-
name: "
|
|
463954
|
+
name: "inspect_video",
|
|
463955
463955
|
category: "analyze",
|
|
463956
463956
|
cost: "low",
|
|
463957
463957
|
description: "Analyze video content using Gemini AI with temporal understanding. Requires GOOGLE_API_KEY.",
|
|
@@ -463979,7 +463979,7 @@ var analyzeVideoTool = defineTool({
|
|
|
463979
463979
|
}
|
|
463980
463980
|
});
|
|
463981
463981
|
var analyzeReviewTool = defineTool({
|
|
463982
|
-
name: "
|
|
463982
|
+
name: "inspect_review",
|
|
463983
463983
|
category: "analyze",
|
|
463984
463984
|
cost: "low",
|
|
463985
463985
|
description: "AI video review: analyzes quality, suggests fixes, and optionally auto-applies them. Requires GOOGLE_API_KEY.",
|
|
@@ -464007,7 +464007,7 @@ var analyzeReviewTool = defineTool({
|
|
|
464007
464007
|
}
|
|
464008
464008
|
});
|
|
464009
464009
|
var analyzeSuggestTool = defineTool({
|
|
464010
|
-
name: "
|
|
464010
|
+
name: "inspect_suggest",
|
|
464011
464011
|
category: "analyze",
|
|
464012
464012
|
cost: "low",
|
|
464013
464013
|
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.",
|
|
@@ -465325,7 +465325,7 @@ async function executePipeline(manifest2, options = {}) {
|
|
|
465325
465325
|
|
|
465326
465326
|
// ../cli/src/tools/manifest/pipeline.ts
|
|
465327
465327
|
var pipelineHighlightsTool = defineTool({
|
|
465328
|
-
name: "
|
|
465328
|
+
name: "remix_highlights",
|
|
465329
465329
|
category: "pipeline",
|
|
465330
465330
|
cost: "low",
|
|
465331
465331
|
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).",
|
|
@@ -465358,10 +465358,10 @@ var pipelineHighlightsTool = defineTool({
|
|
|
465358
465358
|
}
|
|
465359
465359
|
});
|
|
465360
465360
|
var pipelineAutoShortsTool = defineTool({
|
|
465361
|
-
name: "
|
|
465361
|
+
name: "remix_auto_shorts",
|
|
465362
465362
|
category: "pipeline",
|
|
465363
465363
|
cost: "medium",
|
|
465364
|
-
description: "Automatically generate short-form content (Reels/TikTok/Shorts) from a longer video. Same API key requirements as
|
|
465364
|
+
description: "Automatically generate short-form content (Reels/TikTok/Shorts) from a longer video. Same API key requirements as remix_highlights.",
|
|
465365
465365
|
schema: z6.object({
|
|
465366
465366
|
video: z6.string().describe("Path to the input video file"),
|
|
465367
465367
|
outputDir: z6.string().optional().describe("Output directory for shorts"),
|
|
@@ -465395,7 +465395,7 @@ var pipelineAutoShortsTool = defineTool({
|
|
|
465395
465395
|
}
|
|
465396
465396
|
});
|
|
465397
465397
|
var pipelineRunTool = defineTool({
|
|
465398
|
-
name: "
|
|
465398
|
+
name: "run",
|
|
465399
465399
|
category: "pipeline",
|
|
465400
465400
|
cost: "very-high",
|
|
465401
465401
|
surfaces: ["mcp"],
|
|
@@ -465474,7 +465474,7 @@ var pipelineRunTool = defineTool({
|
|
|
465474
465474
|
}
|
|
465475
465475
|
});
|
|
465476
465476
|
var pipelineRegenerateSceneTool = defineTool({
|
|
465477
|
-
name: "
|
|
465477
|
+
name: "remix_regenerate_scene",
|
|
465478
465478
|
category: "pipeline",
|
|
465479
465479
|
cost: "high",
|
|
465480
465480
|
description: "Regenerate specific scenes against an existing storyboard.{yaml,json} on disk. Can regenerate video, image, or narration independently.",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibeframe/mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.76.0",
|
|
4
4
|
"description": "VibeFrame MCP Server - AI-native video editing via Model Context Protocol",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -57,8 +57,8 @@
|
|
|
57
57
|
"tsx": "^4.21.0",
|
|
58
58
|
"typescript": "^5.3.3",
|
|
59
59
|
"vitest": "^1.2.2",
|
|
60
|
-
"@vibeframe/
|
|
61
|
-
"@vibeframe/
|
|
60
|
+
"@vibeframe/core": "0.76.0",
|
|
61
|
+
"@vibeframe/cli": "0.76.0"
|
|
62
62
|
},
|
|
63
63
|
"engines": {
|
|
64
64
|
"node": ">=20"
|