MCP Video Generation with Veo2 について
MCP Video Generation with Veo2 は、Google Veo で動画を、Gemini で画像を生成する MCP サーバーです。MCP クライアントから生成機能を利用したい開発者向けに、設定可能なモデル、HTTP 接続、メディアの保存機能を備えています。
主な機能
- 01Veo による テキストまたは画像からの動画生成
- 02Gemini による画像生成
- 03動画・画像モデル ID の設定
- 04stdio、Streamable HTTP、SSE の接続方式
- 05保存済みメディアのリソース取得
活用シーン
- 01MCP クライアントからプロンプトに基づく短い動画を生成
- 02既存の画像を動画にアニメーション化
- 03生成済みメディアファイルの一覧取得と再利用
MCP 対応
本プロジェクトは MCP サーバーであり、generateVideoFromText、generateImage、listGeneratedVideos などのツールを公開し、メディアを videos:// および images:// リソースとして返します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Google Veo と Gemini の画像 MCP サーバー
Google Veo で動画を、Gemini で画像を生成します。既存のインストールとの互換性を保つため、パッケージ名は
mcp-video-generation-veo2 のままです。バージョン 2 では、保守されている設定可能なモデルと MCP SDK 2 を使用します。
インストールと実行
Node.js 22 または 24 を使用してください。このリポジトリから次を実行します。
npm ci
npm run build
node dist/index.js
MCP ホストからは、絶対パスの dist/index.js を指定して node を直接起動してください。stdio の子プロセスとして npm start を起動しないでください。npm 自身のバナーによって JSON-RPC ストリームが破損することがあります。インストール済みのパッケージからは mcp-video-generation-veo2 も実行できます。
{
"mcpServers": {
"veo": {
"command": "node",
"args": ["/absolute/path/mcp-veo2/dist/index.js"],
"env": {
"GOOGLE_API_KEY": "YOUR_GOOGLE_API_KEY",
"VIDEO_MODEL": "veo-3.1-generate-preview",
"IMAGE_MODEL": "gemini-3.1-flash-image"
}
}
}
}
API キーが必要なのは生成時だけです。モデルの検出、テンプレート、保存済みメディアへのアクセスには必要ありません。Google モデルへのアクセス、課金、クォータを有効にする必要があります。MCP リクエストがキャンセルされた場合やタイムアウトした場合でも、生成によって料金が発生することがあります。このサーバーは、有料の生成リクエストを自動的に再試行しません。
HTTP と既存の SSE クライアント
MCP_AUTH_TOKEN に 24 文字以上のランダムな値を設定してから、次を実行します。
node dist/index.js http
ブラウザー接続チェックを行うには、http://127.0.0.1:3000/ を開きます。このページでは MCP トークンを要求し、メモリ内に保持して、実際の MCP リクエストを使って保存済みメディアを一覧表示します。
/mcp:MCP 2026-07-28 およびステートレスな従来の Streamable HTTP に対応します。/sseと/messages?sessionId=...:LibreChat などの既存クライアント向けに、従来の SSE との互換性を提供します。各接続は専用の MCP サーバーを持ち、リクエスト本文は一度だけ解析されます。SSE セッションは POST がない状態で 10 分経過すると期限切れになります。node dist/index.js sseは、同じ HTTP リスナーのエイリアスとして引き続き使用できます。- 初回の SSE GET を含むすべての MCP リクエストで、
Authorization: Bearer <MCP_AUTH_TOKEN>を送信してください。Google API キーは別の、サーバー専用の認証情報です。
デフォルトのバインドアドレスはループバックです。サービスを公開するには、プロキシのデプロイ環境に合わせて HOST、ALLOWED_HOSTS、ALLOWED_ORIGINS を設定し、そのプロキシで TLS を終端してください。明示的に設定された Host の値とブラウザーのオリジンのみが信頼されます。各デプロイ環境とストレージディレクトリは単一の運用者が管理するものです。信頼できないテナント間で Bearer トークンやストレージを共有しないでください。これは静的 Bearer 認証によるデプロイ環境の認証であり、完全な OAuth 認可サーバーではありません。
Issue #5 の file:// フロントエンドと /sse/tool/listGeneratedVideos URL は、MCP REST API ではありませんでした。付属のページまたは MCP クライアントを使用してください。不透明な Origin: null と悪意のあるオリジンは拒否されます。ワイルドカード CORS は有効になっていません。以前の公開 /videos ディレクトリサーバーは削除されました。
ツールとメディア
7 つのツール名はすべてそのままです。
| ツール | 入力 |
|---|---|
generateVideoFromText | prompt、省略可能な動画設定 |
generateVideoFromImage | image、省略可能な prompt と動画設定 |
generateImage | prompt、省略可能な includeFullData |
generateVideoFromGeneratedImage | prompt、省略可能な videoPrompt と動画設定 |
listGeneratedVideos | 入力なし |
listGeneratedImages | 入力なし |
getImage | 保存済み画像の UUID、省略可能な includeFullData |
設定はフラットなツール引数です。たとえば次のとおりです。
{
"prompt": "A slow camera pan through a sunlit forest",
"aspectRatio": "16:9",
"durationSeconds": 8,
"resolution": "720p"
}
Veo 3.1 で指定できる動画の長さは 4、6、8 秒です。1080p/4k には 8 秒が必要です。テキスト生成では personGeneration=allow_all を使用します。画像のアニメーションでは allow_adult を使用しますが、Google の地域制限とフィルタリングが適用されます。1 回の呼び出しにつき、動画または画像が 1 つ生成されます。明示的に指定された未対応の設定は、プロバイダーによる生成の開始前にエラーになります。
画像入力には、base64 文字列、MCP 画像オブジェクト { "type": "image", "mimeType": "image/png", "data": "..." }、許可された HTTPS URL、または IMAGE_INPUT_DIR 配下の絶対ファイルパスを指定できます。PNG、JPEG、WebP は MIME タイプとファイルシグネチャによって検証されます。入力画像の上限は 10 MiB です。URL のインポートには、オペレーターが管理する IMAGE_URL_HOSTS の明示的な許可リストが必要です。リダイレクト先もこの許可リスト内でなければなりません。信頼できないホストは許可しないでください。
出力にはメタデータと videos://<uuid> または images://<uuid> のリソースリンクが含まれます。リソースからは実際のメディアデータが返されます。動画データが MCP 画像として誤って扱われることはありません。includeFullData=true を指定すると、ツールの結果にメディアが追加で埋め込まれます。上限は 8 MiB です。相互運用性を確保するため、リソースの上限も 8 MiB です。それを超えるアセットは STORAGE_DIR に保存され、オペレーターがサーバー上で取得できます。
動画のダウンロードは常にサーバー上で実行されます。API キーはヘッダーで送信され、返される URL や保存される URL に含まれることはありません。リダイレクトには上限があり、ホストをまたぐリダイレクト先には Google キーが送信されません。ダウンロードしたバイトデータ、メタデータ、API レスポンスにはサイズ制限があります。プロバイダーのエラー本文や生のリクエスト引数はログに記録されません。起動時には、有効な過去のメタデータが許可リストを通じて書き換えられ、メディアファイルは保持される一方、古いキーを含む URL と絶対パスは削除されます。以前のリリースで公開されたキーはローテーションし、下流のログやバックアップにある過去のコピーも削除してください。
設定
.env.exampleをコピーするか、環境変数を設定してください。
| 変数 | デフォルト/意味 |
|---|---|
GOOGLE_API_KEY | プロバイダーキー。GEMINI_API_KEYはエイリアスです |
VIDEO_MODEL | veo-3.1-generate-preview |
IMAGE_MODEL | gemini-3.1-flash-image |
STORAGE_DIR | ./generated-videos。画像はそのimagesサブディレクトリに保存されます |
HOST、PORT | 127.0.0.1、3000 |
MCP_AUTH_TOKEN | HTTP/SSEで必須。24文字以上 |
ALLOWED_HOSTS | 追加のカンマ区切りの完全一致host[:port]値 |
ALLOWED_ORIGINS | 追加のカンマ区切りの完全一致HTTP(S)オリジン |
IMAGE_INPUT_DIR | STORAGE_DIR/images。実際のパスはこのディレクトリ内に収める必要があります |
IMAGE_URL_HOSTS | 空。信頼するHTTPSソースホストをカンマ区切りで指定します |
GENERATION_TIMEOUT_MS | 600000。上限は1800000 |
POLL_INTERVAL_MS | 10000 |
MAX_MEDIA_BYTES | 67108864。上限は134217728 |
Veo 2、Imagen 3、Imagen 4は2026年末時点のデフォルトとして適していません。
GoogleのVeoガイドには、現在の
動画インターフェースが記載されています。画像生成
には現在のGemini画像モデルが掲載されています。この実装では、サポートされている
generateContent画像APIを使用しています。Googleの
Interactionsの概要
では、引き続きサポートされていることが確認できます。デプロイ前に、モデルの提供状況と
非推奨化を再確認してください。
モデルIDを設定できるため、互換性のあるモデルに置き換えられますが、将来のモデルが
同じパラメーターを受け付ける保証はありません。現在のVeo 3.1の識別子は
プレビュー版のため、2026年末まで利用できるとは保証できません。
バージョン2への移行
- MCP stdioとHTTPでは、SDK2の実際の
serveStdio/createMcpHandlerエントリーを通じてリビジョン2026-07-28を提供します。従来のstdio/HTTP/SSEも引き続きテスト対象です。 - duration 5/7、
numberOfVideos=2、numberOfImages>1、サポート対象外の人物モード、enhancePrompt=true、autoDownload=falseは、明示的にエラーになります。 - メディアは常にローカルにダウンロードされ、公開ストレージディレクトリへのアクセスは削除されました。
- MCP stdioにはNode/パッケージのバイナリを直接使用してください。生成用の認証情報がなくても、ツール一覧の表示は妨げられなくなりました。
- サポートされていないリソースのサブスクリプションは通知されません。
検証
npm run check
テストでは、認証情報不要のプロバイダーフィクスチャと、実際のstdio、Streamable HTTP、 従来のSSE、本番環境専用のパック済みインストールを使用します。スキーマエラー、 キャンセル、キーの取り扱い、リダイレクト、サイズ制限、メディアタイプ、パス境界、 接続の分離、Host/Origin/認証チェック、正常なEOFを網羅しています。CIはNode 22 および24で実行されます。自動テストでは有料の生成は行いません。プロバイダーの課金、 地域ごとのアクセス、視覚的な品質を確認するには、実アカウントでのテストが別途必要です。
MITライセンスです。元のサンプルはexample-files/にあります。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。