mediafleet について
mediafleetは、設定したセルフホスト型メディアサービスを操作するMCPサーバー兼コマンドラインツールです。単一のJavaScriptサンドボックスツールから複数のサービスを呼び出し、結果をまとめられます。
主な機能
- 01単一MCPツールでJavaScriptを実行
- 02設定済みメディアサービスを横断して呼び出し
- 03GET、POST、PUT、DELETEリクエスト
- 04プロセス内でコードスニペットを保存
- 05生成物とログを実行結果に含める
活用シーン
- 01SonarrとPlexの検索結果をまとめる
- 02設定済みサービスの状態を確認
- 03メディアのワークフローを保存して再実行
MCP 対応
設定済みメディアサービスを呼び出せる非同期JavaScript関数を、サンドボックスで実行する`yarr`ツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 1 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| code | string | はい | サンドボックスで実行する JavaScript の非同期アロー関数。 |
詳細
mediafleet
mediafleet は、セルフホスト可能なメディアスタック全体を単一の MCP
ツールの背後にまとめます。サービスごと、操作ごとにツールを用意する代わりに、サーバーは
1 つの Code Mode ツール yarr を公開します。JavaScript の非同期アロー
関数を渡すと、設定したメディアサービス(Sonarr、Radarr、Prowlarr、Tautulli、
Overseerr、Bazarr、SABnzbd、qBittorrent、Plex、Jellyfin)を呼び出せる関数として
グローバルに公開したサンドボックス内で実行します。1 回の
呼び出しで 3 つのサービスにクエリを実行し、回答を組み合わせて、1 つの
結果として返せます。
このパッケージは、ドキュメントに記載されたインターフェースをクリーンルーム方式で再構築したものです。 以下で説明する 1 つのツール、サンドボックスのグローバル変数、アクションのディスパッチ、 スニペットストアなど、ドキュメントに記載されたコア機能をすべて実装しています。
設定
サービスは環境変数で有効にします。
| 変数 | 意味 |
|---|---|
YARR_SERVICES | 設定するサービスをカンマ区切りで指定します。未設定の場合、URL 変数が設定されているサービスはすべて設定済みとみなされます。 |
YARR_<SERVICE>_URL | ベース URL。例:YARR_SONARR_URL=http://localhost:8989。 |
YARR_<SERVICE>_API_KEY | API キー。X-Api-Key ヘッダーで送信されます。 |
YARR_PLEX_TOKEN | Plex の認証情報。X-Plex-Token ヘッダーで送信されます。 |
設定済みのサービスのみがサンドボックスに表示されます。設定されていない名前は
サンドボックス内に定義されず、api.<service> も使用できません。
サンドボックス
code 引数には非同期アロー関数を指定します。引数なしで
呼び出され(スニペットの実行では入力が渡されます。詳細は後述)、その戻り値は
プレーンな JSON 形式のデータに正規化され、実行中に書き込まれたアーティファクトや
取得したコンソール出力とともに、ツールの結果になります。
コードで使用できるグローバル変数:
- サービスごとの呼び出し可能関数 —
sonarr、radarr、… 呼び出すと GET を実行します(await sonarr("/api/v3/series"))。.get、.post、.put、.delete(path, body)も付属します。また、.status()は、 サービス標準のステータスエンドポイントを確認し、{service, ok, status}または{service, ok: false, error}を報告します。 api.<service>.get/post/put/delete(path, body)— 設定済みの各サービスで使用できる 明示的な HTTP インターフェースです。callTool(action, params)— ドキュメントに記載されたアクションをディスパッチします。汎用アクション:service_status({service?})、api_get、api_post、api_put、api_delete(各{service, path, body?})、help。Codemode アクション:codemode({code, input?}でネストしたコードを 実行。それ以外の場合は概要を返す)、op({path}で説明を取得、{name, input?}でスニペットを実行、{code, input?}でコードを実行)、snippet_list、snippet_save({name, code})、snippet_run({name, input?})、snippet_delete({name})。codemode.search(query)— サービス、API パス、アクション、ヘルパーのカタログを 部分一致で検索します。codemode.describe(path)— 指定したパスのカタログ項目を返します。例:codemode.describe("api.sonarr.get")。codemode.snippets()— ストア内のスニペットを一覧表示します。codemode.run(name, input)— 保存済みスニペットを実行します。関数には 引数としてinputが渡されます。writeArtifact(name, content)— 名前付きのテキストアーティファクトを保存します。 実行中に書き込まれたものはすべて、その実行結果とともに返されます。console.log/info/warn/error— 出力は取得され、実行のlogsとして返されます。 サーバーの標準出力には書き込まれません。
スニペットはプロセスごとのメモリ内ストアに保存されます。サーバープロセスの実行中は 呼び出しをまたいで保持され、プロセスの終了時に消去されます。
注意すべき制限が 2 つあります。サンドボックスは node:vm を使用しており、グローバル変数を
分離します(内部では process や require を使用できません)が、堅牢な
セキュリティ境界ではありません。また、破壊的な HTTP メソッドは特別に制限されていません。
コードで DELETE を実行すると、mediafleet は記述どおりに実行します。
インストール
npx @reneturcios/mediafleet yarr '{"code":"async () => { return await callTool(\"help\"); }"}'
または、コンテナイメージを実行します。
docker run -i ghcr.io/cloudcorprecords/mediafleet
コンテナはデフォルトで MCP サーバーとして起動します。CLI として使用するには、
CLI 引数を渡してください。サーバーを実行するプロセスに YARR_* 環境変数を渡すことを
忘れないでください。
CLI
mediafleet yarr '{"code":"async () => { return await api.sonarr.get(\"/api/v3/system/status\"); }"}'
mediafleet yarr '{"code":"async () => { const s = await callTool(\"service_status\"); return s; }"}'
mediafleet --version
mediafleet mcp
終了コード:成功時は 0、実行エラーまたは検証エラー時は 1、
使用方法のエラー時は 2 です。
MCP クライアントの設定
{
"mcpServers": {
"mediafleet": {
"command": "npx",
"args": ["-y", "@reneturcios/mediafleet", "mcp"],
"env": {
"YARR_SERVICES": "sonarr,radarr,plex",
"YARR_SONARR_URL": "http://localhost:8989",
"YARR_SONARR_API_KEY": "…",
"YARR_RADARR_URL": "http://localhost:7878",
"YARR_RADARR_API_KEY": "…",
"YARR_PLEX_URL": "http://localhost:32400",
"YARR_PLEX_TOKEN": "…"
}
}
}
}
MCP ツール
| ツール | 引数 | 機能 |
|---|---|---|
yarr | code: string(必須) | Code Mode サンドボックスで非同期のアロー関数を実行し、{result, artifacts, logs} を返します。 |
開発
npm install
npm run build # tsc -> dist/
npm test # tsx --test test/*.test.ts — fake executor and fake fetch only, no network
npm run dev # tsx src/cli.ts
すべてのサービス通信は、単一の差し替え可能な実行関数を経由します。また、デフォルトの実行関数による HTTP 通信は差し替え可能な fetch を経由します。これにより、実際のサービスに接続せずに、URL とヘッダーの構築も含め、テストスイートですべての機能をテストできます。
ライセンス
MIT — LICENSE を参照してください。Copyright (c) 2026 Rene Turcios。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。