@ffmpeg-micro/mcp-server
@ffmpeg-micro/mcp-server
AIエージェント(Claude Code、Claude Desktop、Cursor、Windsurf、VS Code、その他MCP互換クライアント)が、FFmpeg Micro REST APIを通じて動画トランスコードの作成・監視・ダウンロードを実行できるようにするModel Context Protocolサーバーです。
機能
FFmpeg Microの公開APIに対応するツールを公開します:
ツール | 機能 |
| 1つ以上の入力動画( |
| 単一ジョブの現在の状態を取得します。 |
| ジョブを一覧表示します。オプションで |
| 保留中または処理中のジョブをキャンセルします。 |
| 完了したジョブの出力ファイルに対する有効期限10分の署名付きHTTPS URLを生成します。 |
| 便利ツール:ジョブを作成して完了までポーリングし、署名付きダウンロードURLを1回の呼び出しで返します。 |
| 直接アップロードの流れのステップ1。ホストがファイルのバイト列をPUTするための署名付きHTTPS URLを返します。 |
| 直接アップロードの流れのステップ2。最終的な |
| ブループリント実行を開始します。事前構築済みの動画ワークフロー(字幕付け、リサイズ、ウォーターマーク、広告など)です。 |
| ブループリント実行のステータス、ステップ、出力URLを取得します(複数出力のブループリントはラベル付きの |
| 便利ツール:ブループリント実行を開始し、完了・失敗・文字起こしレビューの一時停止までポーリングします。 |
|
|
ブループリント
ブループリントは POST /v1/blueprints/{slug}/runs の背後にある事前構築済みワークフローです。各ブループリントの入力フィールドはツールの説明に記載されています。注意点:
ほとんどのブループリントはFFmpegレーンで実行され、プランのコンピュート時間を消費します(トークンは消費しません)。生成系ブループリント(
product-ad)はトークンを消費します。402 insufficient_tokensレスポンスは、アカウントにトークンパックが必要であることを意味します(ダッシュボード)。caption-videoはawaiting_reviewで一時停止し、文字起こし(srt_text)を返すため、エージェントはレンダリング前にレビュー・編集できます。continue_blueprint_runで再開します。複数出力のブループリント(
listing-kit、hook-variants)はoutputs配列として{label, url}を返します。存在する場合はoutput_urlよりもこちらを優先してください。出力URLは有効期限10分で署名されています。新しいリンクを取得するには実行を再取得してください。
ローカルファイルのアップロード
request_upload_url + confirm_upload のペアにより、MCPホストは生のAPIキーや gs:// URLを扱うことなく、ローカルファイルをFFmpeg Microのストレージバケットにアップロードできます:
ホストが
{filename, contentType, fileSize}を指定してrequest_upload_urlを呼び出します → 有効期限の短い署名付きHTTPS URLを受け取ります。ホストは同じ
Content-Typeでファイルのバイト列をそのURLにPUTします。ホストが
{filename: <ステップ1で受け取ったストレージファイル名>, fileSize}を指定してconfirm_uploadを呼び出します → 最終的なgs://...のfileUrlを受け取ります。ホストはその
fileUrlをtranscribe_audio/transcode_video/transcode_and_waitに渡します。
Related MCP server: Rendi MCP Server
クイックスタート
これをプロジェクトの .mcp.json(またはMCPクライアントの設定)に追加します:
{
"mcpServers": {
"ffmpeg-micro": {
"type": "http",
"url": "https://mcp.ffmpeg-micro.com"
}
}
}これだけです。AIツールが初めて接続すると、ブラウザウィンドウが開き、OAuth経由でFFmpeg Microアカウントにサインインします。承認後、トークンはキャッシュされ、再度求められることはありません。
APIキーのコピーも、環境変数の設定も不要です。
認証
OAuth(推奨)
MCPサーバーはPKCEと動的クライアント登録を備えたOAuth 2.1をサポートしています。MCPクライアントがフロー全体を自動的に処理します:
クライアントが
/.well-known/oauth-authorization-server経由でOAuthエンドポイントを検出しますクライアントが動的に自身を登録します
ブラウザが開き、サインインしてアクセスを承認します
トークンが交換されキャッシュされます。以降の接続は即座に行われます
これは、上記の設定で headers や env ブロックなしで使用した場合のデフォルトです。
APIキー(代替)
APIキーを直接使用したい場合(自動化やCIなど)、Bearerトークンとして渡すことができます:
{
"mcpServers": {
"ffmpeg-micro": {
"type": "http",
"url": "https://mcp.ffmpeg-micro.com",
"headers": {
"Authorization": "Bearer your_api_key_here"
}
}
}
}APIキーはダッシュボードから取得できます。
stdio(ローカルインストール)
npx を使用してサーバーをローカルプロセスとして実行します。Node.js 22.14以降が必要です。
{
"mcpServers": {
"ffmpeg-micro": {
"command": "npx",
"args": ["-y", "@ffmpeg-micro/mcp-server"],
"env": {
"FFMPEG_MICRO_API_KEY": "your_api_key_here"
}
}
}
}npx -y は毎回最新版を取得します。stdioサーバーをサポートするすべてのMCPクライアントがこの設定で動作します。
互換ツール
HTTP設定(OAuth)は、ストリーミング可能なHTTPトランスポートをサポートするすべてのMCPクライアントで動作します:
Claude Code(CLI)
Claude Desktop
Cursor
Windsurf
VS Code(GitHub Copilot MCP)
stdio設定は、stdioトランスポートをサポートするすべてのMCPクライアントで動作します。
プロンプト例
接続すると、次のような依頼ができます:
「この動画を720p MP4にトランスコードして、完了したらダウンロードURLを教えて。」
「この横長の動画を正方形にクロップして。」
「動画に『エピソード12』というテキストオーバーレイを追加して。」
「今週の失敗したジョブを一覧表示して。」
「ジョブ
b5f5a9c0-9e33-4e77-8a5b-6a0c2cd9c0b3をキャンセルして。」
開発
git clone https://github.com/javidjamae/ffmpeg-micro-mcp.git
cd ffmpeg-micro-mcp
./scripts/setup.shsetup.sh は依存関係のインストール、ビルド、gitフックの設定を行います。
MCPクライアントをローカルビルドに向けてイテレーションします:
{
"mcpServers": {
"ffmpeg-micro-dev": {
"command": "node",
"args": ["/absolute/path/to/ffmpeg-micro-mcp/dist/index.js"],
"env": { "FFMPEG_MICRO_API_KEY": "…" }
}
}
}MCP Inspector は、ツールスキーマとレスポンスのイテレーションに最速の方法です:
npx @modelcontextprotocol/inspector node dist/index.jsローカルAPIゲートウェイに対してHTTPサーバーをローカルで実行するには:
FFMPEG_MICRO_API_URL=http://localhost:8081 npm run serve統合テストをローカルで実行
FFMPEG_MICRO_API_KEY=your_key npm run test:integration統合テストは実際のFFmpeg Micro本番APIにアクセスします。読み取り専用です(ジョブは作成されません)。
アップロードツールのエンドツーエンドのスモークテスト
ユニットテストはモックされた fetch を使用するため、ツールの登録・Zodスキーマ・URLパスは検証されますが、ワイヤー形式がゲートウェイが実際に返すものと一致するかは検証されません。2つのスモークスクリプトが、実際のAPIキーを使用して実際のMCPサーバーに対して request_upload_url → PUT → confirm_upload の完全なフローを実行します。順番に実行してください。まずstdio(最も速いシグナル)、次にデプロイ済みのHTTPサーバーをマージ前後で実行します:
# 1. stdio (local dist build) — spawns dist/index.js as a subprocess
npm run build
FFMPEG_MICRO_API_KEY=your_key node scripts/smoke-upload-stdio.mjs <local-file>
# 2. HTTP (any deployed server — local `npm run serve`, Vercel preview, or prod)
FFMPEG_MICRO_API_KEY=your_key MCP_URL=https://mcp.ffmpeg-micro.com/ \
node scripts/smoke-upload-http.mjs <local-file>両スクリプトはデフォルトで本番APIにアクセスし、課金対象の分数を消費します(stdioスクリプトは transcribe_audio に連鎖してエンドツーエンドの確認を行います)。15-second.mp3 のような小さなファイルを渡すことで、コストをほぼ無視できる程度に抑えられます。
3つ目のスクリプトはブループリントツールのスモークテストを行います(run_blueprint + get_blueprint_run を resize-format で完了までポーリングし、その後 run_blueprint_and_wait を hook-variants で実行して複数出力を検証します)。FFmpegレーンのブループリントのみを使用するため、プランのコンピュート時間は消費しますがトークンは消費しません:
npm run build
FFMPEG_MICRO_API_KEY=your_key node scripts/smoke-blueprints-stdio.mjs保護がかかったVercelプレビューへのアクセス
Vercelプレビューデプロイは、デフォルトでDeployment Protectionによって保護されています。プレビューURLに対してHTTPスモークスクリプトを実行するには、プロジェクトのVercel設定でProtection-Bypass-for-Automationトークンを生成し、VERCEL_BYPASS 経由で渡します:
FFMPEG_MICRO_API_KEY=your_key \
MCP_URL=https://your-preview.vercel.app/ \
VERCEL_BYPASS=your_bypass_token \
node scripts/smoke-upload-http.mjs <local-file>スクリプトはすべてのリクエストで x-vercel-protection-bypass ヘッダーとしてトークンを送信します。x-vercel-set-bypass-cookie: true は送信しません。そのバリアントはPOSTでクッキー設定用の307リダイレクトをトリガーし、MCP SDKの StreamableHTTPClientTransport がリダイレクトに追従しないため、リクエストが失敗します。ヘッダー単独では、リダイレクトによる追加の往復なしで直接200が返ります。
リリースプロセス
リリースはトラステッドパブリッシング経由でnpmに公開され、com.ffmpeg-micro/mcp-server としてMCPレジストリにも公開されます。認証は ffmpeg-micro.com 上のEd25519 DNS TXTレコードを介して行われます。対応する秘密鍵は MCP_PRIVATE_KEY GitHub Actionsシークレットに保存されています。npm側はOIDCトラステッドパブリッシングを使用するため、npmトークンは保存されません。
リリースはChangesetsで自動化されています。コントリビューターは手動でバージョンを上げたり、コミットにタグを付けたり、公開コマンドを実行したりする必要はありません。PRにchangesetを添付するだけで、リリースパイプラインが残りを処理します。
コントリビューターのフロー(すべてのPR)
出荷コードを変更するすべてのPRにはchangesetを含める必要があります。CIチェックがこれを強制します。
# While working on your PR:
npx changesetCLIがバンプ種別(major/minor/patch)と短い概要を求めます。.changeset/ の下にMarkdownファイルが書き込まれるので、そのファイルをPRにコミットしてください。
リリースを伴わないPR向けの回避策(ドキュメント、CI、内部リファクタリング、動作に影響のないテスト変更):
PRに
no-changesetラベルを追加する、またはnpx changeset --emptyを実行して「リリース不要」を明示的に宣言する。
メンテナーのフロー(リリースの作成)
手動でリリースを作成する必要はありません。パイプラインが行います:
changesetファイルを添付したPRが
mainにマージされます。.github/workflows/release.ymlがmainへのプッシュのたびに実行されます。保留中のchangesetが存在する場合、アクションによって作成(または更新)されたchore(release): version packagesPRが開かれます。そのPRは:保留中のchangesetを消費するために
changeset versionを実行package.jsonをバンプscripts/sync-server-version.mjsでserver.jsonを再同期CHANGELOG.mdにエントリを追記結果を自身のブランチにコミット
出荷する準備ができたらVersion Packages PRをレビューしてマージします。複数のchangesetを蓄積してからマージすることもできます。
mainにさらにマージされるたびにPRは自動更新されます。マージ時にリリースワークフローが再度実行されます。今回は保留中のchangesetがないため、
changesets/actionがバージョンバンプを検出して:npm publish(OIDCトラステッドパブリッシング、来歴証明付き)GitHub Releaseとgitタグを自動的に作成
ワークフローの最終ステップで
mcp-publisherをインストールし、DNS秘密鍵で認証して、com.ffmpeg-micro/mcp-serverとしてMCPレジストリに公開します。
バージョン同期ガード
.github/workflows/release.yml は main へのプッシュのたびにバージョン一致チェックを実行します。package.json.version、server.json.version、server.json.packages[0].version がずれた場合、ビルドは明確に失敗します。通常は scripts/sync-server-version.mjs がこれらを一致させ続けますが、ガードは同期を忘れた手動編集を検出します。
検証
Version Packages PRがマージされ、ワークフローが成功したら:
npm view @ffmpeg-micro/mcp-server version
curl -s "https://registry.modelcontextprotocol.io/v0/servers?search=com.ffmpeg-micro/mcp-server" | jq '.servers[] | {v: .server.version, isLatest: ._meta."io.modelcontextprotocol.registry/official".isLatest}'例:コントリビューターのウォークスルー
新しい delete_transcode ツールを追加する場合を想定します。PRフローは:
git switch -c feat/delete-transcode
# ... make the code + test changes ...
npx changeset
# ? Which packages would you like to include? › @ffmpeg-micro/mcp-server
# ? Which type of change is this for @ffmpeg-micro/mcp-server? › minor
# ? Please enter a summary for this change › Add delete_transcode tool
git add .changeset/*.md src/ tests/
git commit -m "feat: add delete_transcode tool"
git push -u origin feat/delete-transcode
gh pr createCIは3つのチェックを実行します:
test— ユニットテストcheck(Require changeset)—.changeset/*.mdが存在することを確認Vercel— プレビューデプロイ
マージ後、Version Packages PR は自動的に開かれるか、自身を更新してあなたのエントリーを含めます。リリースの準備ができたら、それをマージしてください。
ルール
server.jsonまたはpackage.jsonのバージョンフィールドを手動で編集しないでください。 Changesets が両方を管理します。scripts/sync-server-version.mjsがpackage.jsonをserver.jsonにミラーリングします。CI のドリフトガードは、両者が乖離するとリリースを失敗させます。リリースに手動で
git tagを付けないでください。changesets/actionは publish の一部としてタグと GitHub Release を作成します。手動のタグは新しいワークフローでは認識されません。Require-changeset チェックを迂回しないでください。
.changeset/config.jsonや.changeset/README.mdへの変更をコミットしても、それらはカウントされません。npx changeset、no-changesetラベル、またはnpx changeset --emptyを使用してください。
リリース関連ファイル
package.json— バージョンの信頼できる情報源。MCP Registry が npm パッケージの検証に必要とするmcpNameも保持します。changeset versionによってバージョンが更新されます。server.json— MCP Registry のメタデータ。バージョンフィールドはpackage.jsonから自動的に同期されます。.changeset/config.json— Changesets の設定(公開アクセス、GitHub 対応のチェンジログフォーマッタ)。.changeset/*.md— 次のchangeset versionの実行で消費される保留中のリリースノート。scripts/sync-server-version.mjs—package.jsonのバージョンをserver.jsonにミラーリングします。.github/workflows/release.yml— 公開パイプライン(changesets/action + MCP Registry ステップ)。.github/workflows/require-changeset.yml— PR に changeset が存在することを強制します。
トラブルシューティング
自分の PR で
Require changesetチェックが失敗する —npx changesetを実行し、生成されたファイルをコミットしてください。ドキュメントのみ / CI のみの PR の場合は、no-changesetラベルを追加するか、npx changeset --emptyを実行してください。バージョン同期ガードのステップで CI が失敗する —
server.jsonが手動で編集されています。ローカルでnode scripts/sync-server-version.mjsを実行し、コミットしてプッシュしてください。ガードはpackage.json.version、server.json.version、server.json.packages[0].versionを比較します。機能 PR のマージ後に
changesets/actionが Version Packages PR を開かなかった — PR の.changeset/*.mdファイルに実際にコンテンツ(バンプタイプとサマリーを含む空でない front matter)があったか確認してください。空の changeset は「リリース不要」を示し、意図的に無視されます。mcp-publisher publishが "package not found" で失敗する — npm が新しいバージョンの伝播をまだ完了していません。リリースワークフローのDetermine if MCP Registry publish is neededステップはnpm viewを最大約 50 秒間再試行し、それでもバージョンが公開されていない場合はバックオフして、レジストリへの公開を次の main へのプッシュまで延期します(そのプッシュによりドリフトが自己修復されます)。手動実行でこれが発生した場合は、30 秒待って再公開してください。MCP Registry が npm より 1 バージョン遅れている —
Determine if MCP Registry publish is neededステップがスキップされた(またはneeded=falseを返した)ためです。main に任意のコミットをプッシュして再実行をトリガーしてください。ゲートはpackage.json↔ npm ↔ レジストリを比較し、自動的に追いつきます。それでもスキップされる場合は、ステップのログ出力で各ソースが報告したバージョンを確認してください。mcp-publisher publishが "mcpName mismatch" で検証に失敗する —package.jsonのmcpNameはserver.jsonのnameと一致している必要があります(両方ともcom.ffmpeg-micro/mcp-serverであるべきです)。mcp-publisher login dnsが "public key mismatch" で失敗する —MCP_PRIVATE_KEYシークレットがffmpeg-micro.comの TXT レコードと一致しなくなっています。ローカルで鍵ペアを再生成し、TXT レコードと GitHub シークレットの両方を更新してください。
ライセンス
MIT — LICENSE を参照してください。
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityDmaintenanceProvides powerful video and audio editing capabilities through FFmpeg, enabling AI assistants to perform professional-grade operations including format conversion, trimming, overlays, transitions, and advanced audio processing.2784MIT
- AlicenseNot gradedqualityDmaintenanceEnables cloud-based FFmpeg video and audio processing through the Rendi API, allowing AI assistants to convert, edit, and manipulate media files without local FFmpeg installation.1MIT
- AlicenseAqualityDmaintenanceProvides video and audio manipulation tools powered by FFmpeg, enabling AI assistants to perform media operations such as cutting, converting, and removing silence.61052MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that exposes FFmpeg as structured tools for AI-agent-driven video editing, enabling operations like trimming, subtitling, and transcoding via natural language.1682MIT
Related MCP Connectors
Transform video, audio and images, and generate media from prompts. FFmpeg, captions, models.
Create and manage cinematic AI video renders through the Future Video Studio Agent API.
Transcode and host video from one prompt; get a playable link back. Agent-native, over MCP.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/javidjamae/ffmpeg-micro-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server