videolab-mcp
Claude(または任意のMCPホスト)をショート動画用のハンズオン動画編集ツールに変えるMCPサーバーです。音楽ライブラリの閲覧や新規トラックの生成、Veoによる静止画のアニメーション化、OmniHumanによるポートレートのリップシンク、スクリプトの作成・書き換え、ElevenLabsによるナレーション合成が可能です。FFmpegでタイムラインを結合し、結果を再生した後、音楽やナレーション、特定のクリップを差し替えることで、最初からレンダリングし直すことなく低コストで反復編集が行えます。
また、長文テキスト(PDF、書籍、論文など)を、AI生成のナレーション、キャプション、Bロールを備えた構造化ドキュメンタリー動画に変換するtext-to-documentaryスキルも搭載しています。
スタンドアロンでポータブル、設定も可能です。APIキーはご自身でご用意ください。
含まれるもの
ワークフロー全体をカバーするツール:
カテゴリ | ツール |
音楽 |
|
Bロール |
|
シーンアセット |
|
画像 |
|
ナレーション (ElevenLabs) |
|
スクリプト (Anthropic) |
|
動画結合 (FFmpeg) |
|
アニメーション (Veo) |
|
トーキングヘッド (Fal OmniHuman) |
|
ドキュメンタリー |
|
診断 |
|
ツール呼び出しを消費せずに閲覧するためのリソース: library://music, library://broll, library://renders, library://voiceovers, library://scripts, library://scenes
ガイド付きのマルチステップフローのためのプロンプト: make-scene-promo, remix-render, compose-music-for-scene
skills/ 内のスキル: text-to-documentary — PDF/書籍から、章立てされた構造的な物語構成を持つドキュメンタリー動画を作成します。
Related MCP server: ffmpeg-mcp
要件
Node.js 18以上
PATH上のFFmpeg(または設定で
ffmpeg.binaryに絶対パスを指定)使用するプロバイダーのAPIキー(事前必須ではありません。初回呼び出し時に遅延初期化されます)
クイックスタート
git clone <this-repo> videolab-mcp
cd videolab-mcp
npm install
npm run build
cp videolab.config.example.json videolab.config.json
cp .env.example .env # then fill in keys you haveClaude Desktopに接続します(macOSの場合は ~/Library/Application Support/Claude/claude_desktop_config.json、Windowsの場合は %AppData%\Claude\claude_desktop_config.json):
{
"mcpServers": {
"videolab": {
"command": "node",
"args": ["C:\\path\\to\\videolab-mcp\\build\\index.js"],
"env": {
"ELEVENLABS_API_KEY": "...",
"ANTHROPIC_API_KEY": "...",
"GOOGLE_VEO_API_KEY": "...",
"FAL_KEY": "...",
"VIDEOLAB_CONFIG": "C:\\path\\to\\videolab-mcp\\videolab.config.json"
}
}
}
}Claude Desktopを再起動します。チャットを開き、ping を呼び出して接続を確認してください。
設定
2つのファイルを使用します。.env はシークレット用です:
ELEVENLABS_API_KEY=
ANTHROPIC_API_KEY=
GOOGLE_VEO_API_KEY=
FAL_KEY=videolab.config.json はそれ以外(ストレージ、プロバイダー、FFmpegフラグ、デフォルト値)の設定用です。サンプルファイルは、ローカルストレージ、JSONインデックス、ElevenLabs/Anthropic/Veo/Falプロバイダー、モバイル(9:16)デフォルトといった、依存関係のない合理的な設定になっています。
ウォークスルー — プロモーション動画をゼロから作成する
Claude DesktopでMCPサーバーを接続した状態で:
User: Make a 20-second mobile promo for the test scene.
Claude:
→ list_scene_assets({ sceneRef: { key: "test-scene" } })
→ 3 assets: magenta, cyan, orange
→ generate_script({
context: "Test scene with three coloured backdrops",
durationSeconds: 20, tone: "punchy"
})
→ scriptId: script_a3f, slot breakdown shown
→ generate_voiceover({ text: "<the script>" })
→ voiceoverId: vo_8d2
→ generate_music({
prompt: "driving electronic, slow build, retro synth pad",
durationMs: 20000
})
→ trackId: music_4e1
→ assemble_promo({
timeline: {
platform: "mobile",
slots: [
{ source: { kind: "scene", id: "asset-test-magenta" }, durationMs: 7000 },
{ source: { kind: "scene", id: "asset-test-cyan" }, durationMs: 7000 },
{ source: { kind: "scene", id: "asset-test-orange" }, durationMs: 6000 }
]
},
voiceoverId: "vo_8d2",
musicId: "music_4e1"
})
→ renderId: render_94c, autoplays in default video player
User: Make the music more chill.
Claude:
→ generate_music({ prompt: "soft ambient pad, gentle rhythm", durationMs: 20000 })
→ trackId: music_c70
→ swap_music({ renderId: "render_94c", newMusicId: "music_c70" })
→ renderId: render_d11 (rev of render_94c) — only re-mixes audio (~2s)
User: Replace the orange shot with a Veo animation of the magenta image zooming in.
Claude:
→ animate_image_to_video({
imageSource: { kind: "scene", id: "asset-test-magenta" },
prompt: "slow camera push-in, dust particles drifting"
})
→ clipId: broll_veo_a8b
→ swap_clip({
renderId: "render_d11",
slotIndex: 2,
newSource: { kind: "broll", id: "broll_veo_a8b" }
})
→ renderId: render_2f9 (rev of render_d11)反復ループ
ワークフローを快適にするポイントです:
assemble_promoは、スロットごとの中間ファイル (slot_*.mp4)、音声なしのvisuals.mp4、オーディオミックス、最終的なoutput.mp4をすべてmedia/renders/<renderId>/配下に書き出します。swap_music/swap_voiceoverは、親のvisuals.mp4を再利用し、オーディオのみを再ミックスします。通常、所要時間は約2秒です。swap_clipは、ビジュアルストリームを再構築し、オーディオを再ミックスします。通常、所要時間は約5〜10秒です。すべてのレンダリングは
parentIdでリンクされた新しいrenderIdとなるため、以前のバージョンを失うことはありません。
Text-to-documentaryモード
skills/text-to-documentary/ スキルは、PDF、書籍、または貼り付けられた長文テキストを、章ごとに約5分のドキュメンタリー動画シリーズに変換します。各動画は構造化された物語構成(フック → コアアイデア → 例 → パターン割り込み → マイクロ要約 → クリフハンガー)を持ち、ElevenLabsのタイムスタンプによるカラオケ風キャプションと、AI生成のBロールが含まれます。
使用ツール: extract_pdf, split_chapters, plan_documentary_scenes, validate_attention, generate_voiceover, generate_image, animate_image_to_video, generate_music, assemble_promo
Claude Codeやスキルをサポートするホストを使用している場合、トリガー(「このPDFをドキュメンタリーにして」「この本から動画を作って」など)でスキルが自動的に読み込まれます。それ以外の場合は、skills/text-to-documentary/SKILL.md を読んで手順を確認し、直接ツールを呼び出してください。
カスタムシーンアセットプロバイダー
このサーバーはシーンアセットに対してプロバイダー非依存です。同梱の json-manifest プロバイダーはJSONファイルから読み込みます。より複雑なもの(CMS、データベース、APIなど)は SceneAssetProvider として実装します:
export interface SceneAssetProvider {
readonly kind: string;
describeRefShape(): string; // shows up in the tool description so the host knows what to send
listAssets(ref: SceneRef): Promise<SceneAsset[]>;
getAsset(id: string): Promise<SceneAsset | null>;
}実装を src/providers/scene-assets/<your-name>.ts に配置し、src/providers/factory.ts の buildSceneAssets に登録し、src/config.ts の設定スキーマに追加してください。ストレージバックエンド(S3、Azure)も同様のパターンです。src/providers/types.ts:StorageProvider を参照してください。
プロバイダーマトリックス
対象 | デフォルトプロバイダー | 環境変数 | 設定フィールド |
ストレージ | local | — |
|
インデックス (アセットメタデータ) | json | — |
|
音楽生成 | ElevenLabs Music |
|
|
TTS | ElevenLabs |
|
|
スクリプト LLM | Anthropic Claude |
|
|
画像生成 | Gemini Nano Banana |
|
|
画像から動画へ | Google Veo |
|
|
トーキングヘッド | Fal OmniHuman |
|
|
シーンアセット | json-manifest | — |
|
環境変数によるモデルのオーバーライド: ANTHROPIC_MODEL, ELEVENLABS_MUSIC_MODEL, VEO_MODEL, VEO_ENDPOINT, VEO_POLL_INTERVAL_MS, VEO_POLL_TIMEOUT_MS, FAL_OMNIHUMAN_MODEL, PROMO_VIDEO_LOG_LEVEL
ライセンス
MIT — LICENSE を参照してください。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/aTreeFrog/videolab-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
