mcpField
R
runcomfy-mcp

runcomfy-mcp

リモート
runcomfy.comメディア・デザイン16 週間前に更新
リポジトリ公式サイト

runcomfy-mcp について

runcomfy-mcpは、RunComfyユーザー向けのリモートMCPサーバーです。ComfyUIのデプロイ、ホストモデルの実行、LoRAのトレーニングに加え、データセットやジョブ結果、残高を扱う31のツールを提供します。

主な機能

  1. 01ComfyUIデプロイの管理
  2. 02推論リクエストの送信と追跡
  3. 03ホストモデルの検索と実行
  4. 04データセット作成とLoRAトレーニング
  5. 05アカウント残高の確認

活用シーン

  1. 01ComfyUIワークフローを専用エンドポイントにデプロイ
  2. 02デプロイを管理せずカタログモデルを実行
  3. 03LoRAをトレーニングしてチェックポイントを取得
  4. 04RunComfy APIの利用前に残高を確認

MCP 対応

リモートMCPエンドポイントを通じて、RunComfyのServerless、Model、Trainer、アカウント機能を扱う31のツールを公開します。MCPクライアントはRunComfy APIトークンまたはOAuth 2.1で認証します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://mcp.runcomfy.com/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

すべてのエンドポイント
Streamable HTTPhttps://mcp.runcomfy.com/mcp認証が必要

ツール

詳細

RunComfy MCP

RunComfy プラットフォーム向けの MCP サーバー — Serverless API (ComfyUI)、Model API、Trainer API。デプロイを管理し、ホスト型モデルを実行し、LoRA をトレーニングして、Claude、Cursor、Windsurf などの AI アシスタントから結果を取得できます。

エンドポイント:https://mcp.runcomfy.com/mcp

ドキュメント:docs.runcomfy.com/mcp


できること

RunComfy のドキュメントを 1:1 で反映した 31 個のツールを、3 つの製品とアカウント残高にわたって提供します。

Serverless API (ComfyUI) — 専用エンドポイントで独自のワークフローを実行

ドキュメント:docs.runcomfy.com/serverless

カテゴリーツール
デプロイ管理list_deployments、get_deployment、create_deployment、update_deployment、delete_deployment
推論submit_request、get_request_status、get_request_result、cancel_request
高度な機能call_instance_proxy
Model API — 必要に応じて利用できるホスト型カタログモデル

ドキュメント:docs.runcomfy.com/model-apis

カテゴリーツール
カタログlist_models、get_model、list_model_categories
推論run_model、get_model_request_status、get_model_request_result、cancel_model_request

管理するデプロイは不要で、リクエストごとに課金されます。list_models ではキーワードまたは機能(category=image-to-video)でカタログを検索でき、get_model はモデルの入力スキーマ(プロパティの型、デフォルト値、列挙値、範囲)を返し、run_model でモデルを実行します。そのため、アシスタントはツールを離れたりパラメーターを推測したりせずに、「動画を作って」という指示から有効なリクエストを実行できます。

各エントリーには description、price_unit あたりの base_price_usd、およびモデルページへの model_url も含まれます。

model_id は、runcomfy.com/models のモデルページに表示されている識別子です。スラッシュも含みます。例:blackforestlabs/flux-1-kontext/pro/edit。ファイル入力には、公開された HTTPS URL を指定する必要があります。

Trainer API — データセットと AI Toolkit による LoRA トレーニング

ドキュメント:docs.runcomfy.com/trainer-apis

カテゴリーツール
データセットcreate_dataset、list_datasets、get_dataset_status、delete_dataset
データセットのアップロードupload_dataset_file_from_url、upload_dataset_text_file、get_dataset_upload_urls
トレーニングジョブsubmit_training_job、get_training_job_status、get_training_job_result、cancel_training_job、resume_training_job、edit_training_job

一般的な流れ:データセットを作成 → メディアと対応する .txt キャプションをアップロード → READY になるまでポーリング → AI Toolkit の YAML 設定でジョブを送信 → ステータスをポーリング → 結果からチェックポイントを取得します。

サーバーはリモートで実行されるため、ローカルファイルを読み取ることはできません。upload_dataset_file_from_url を使って HTTP 経由でアクセスできるメディアをアップロードし、upload_dataset_text_file を使ってキャプションを直接書き込みます。ローカルファイルまたは 150 MB を超えるファイルの場合は、get_dataset_upload_urls を使い、署名付き URL に PUT でバイトデータを直接アップロードしてください。

アカウント
カテゴリーツール
残高get_balance

1 つのウォレットで 3 つの製品すべてを利用できます。get_balance は残高を返します。読み取り用の balance_usd と、しきい値を正確に確認するための balance_microdollars(ドルの 100 万分の 1 単位)を確認できます。報告する残高は 1 つだけのため、製品ごとにミラーされず、api.runcomfy.net から提供されます。

LoRA 間の切り替え

トレーニング済みの LoRA は、デプロイしなくても実行できます。ベースモデルの model_id を run_model に渡し、入力として LoRA を指定します。例:{"lora": {"path": "my_first_lora_3000.safetensors"}} — LoRA Assets にある名前、または get_training_job_result から取得したチェックポイントなどの公開 URL を指定できます。選択したハードウェアを使う専用エンドポイントが必要な場合は、デプロイして Serverless ツールを使用してください。


クイックセットアップ

各クライアントは、Profile ページで取得できる RunComfy API トークンを使って認証します。指定方法は 2 通りあります。

  • API トークンヘッダー — あらゆる Streamable HTTP クライアントで動作します。最も簡単な方法で、ブラウザーの OAuth フローに対応していないクライアントで使える唯一の方法です。
  • ブラウザー OAuth — 設定ファイルにトークンを記載する必要はありません。Claude.ai、Cursor、および Claude Code など、ループバックコールバックを登録するローカルクライアントでサポートされています。
Claude Code

トークンヘッダーを使う場合(コマンド 1 つで完了します)。

claude mcp add --transport http runcomfy https://mcp.runcomfy.com/mcp --header "Authorization: Bearer YOUR_RUNCOMFY_TOKEN"

または、ブラウザー OAuth を使う場合はヘッダーを省略し、Claude Code 内で /mcp を実行して Authenticate を選択します。

claude mcp add --transport http runcomfy https://mcp.runcomfy.com/mcp

--transport http は Streamable HTTP トランスポートです。Claude Code は streamable-http を値として受け付けません。また、ハイフン 1 つの -transport/-header も受け付けません。どちらもサーバーへの接続前に失敗します。

claude mcp list を実行して確認してください。runcomfy: connected と表示されます。

Claude.ai

Settings → Connectors → Add custom connector で https://mcp.runcomfy.com/mcp を追加し、Connect を選択します。Claude は RunComfy の OAuth 2.1 エンドポイントを検出して RunComfy の同意ページを開き、RunComfy Profile に表示された API トークンのいずれかを入力するよう求めます。トークンは RunComfy によって検証され、MCP 認可グラント内で暗号化されます。Claude に返されることはありません。

Cursor

.cursor/mcp.json:

{
  "mcpServers": {
    "runcomfy": {
      "url": "https://mcp.runcomfy.com/mcp",
      "headers": { "Authorization": "Bearer YOUR_RUNCOMFY_TOKEN" }
    }
  }
}
VS Code(Copilot)

.vscode/mcp.json:

{
  "servers": {
    "runcomfy": {
      "type": "http",
      "url": "https://mcp.runcomfy.com/mcp",
      "headers": { "Authorization": "Bearer YOUR_RUNCOMFY_TOKEN" }
    }
  }
}
Windsurf

Settings → MCP:

{
  "mcpServers": {
    "runcomfy": {
      "serverUrl": "https://mcp.runcomfy.com/mcp",
      "headers": { "Authorization": "Bearer YOUR_RUNCOMFY_TOKEN" }
    }
  }
}
その他のクライアント
  • URL:https://mcp.runcomfy.com/mcp
  • トランスポート:Streamable HTTP
  • 認証:各リクエストで Authorization: Bearer <token> を指定するか、ループバックリダイレクト URI または正確なサポート対象クライアントコールバックを使って OAuth 2.1 で認証します
トラブルシューティング
症状原因
RunComfy rejected this API token を伴う 401トークンが間違っているか、有効期限切れか、コピー時に欠落しています。Profile で新しいトークンを生成してください。レスポンス本文に修正方法が記載されています。
error_description を伴わない 401サーバーに Authorization ヘッダーが届いていません。ヘッダーが 1 つの引数として引用符で囲まれていることを確認してください:--header "Authorization: Bearer ..."
OAuth 中の invalid_client_metadataクライアントが、ループバックおよび正確なクライアント許可リストの範囲外のコールバックを登録しました。サポート対象のコールバックまたはトークンヘッダーを使用してください。
OAuth 中の invalid_target設定 URL は末尾にスラッシュを付けず、https://mcp.runcomfy.com/mcp と完全に一致させる必要があります。RFC 8707 により、トークンはこのリソースに厳密に紐付けられます。
Retry-After を伴う 503トークンを検証するための RunComfy API に接続できませんでした。再試行してください。
4291 つの IP アドレスから、トークン認証済みリクエストが 1 分間に 600 件を超えています。

RunComfy Profile でトークンを再生成すると、アクセスを取り消せます。すべての MCP リクエストでトークンが上流で再検証されるため、トークンヘッダーと、それを使って作成された OAuth グラントは無効になります。

アーキテクチャ

MCP Client ──RunComfy API token──┐
                                 │   Cloudflare Worker (/mcp)
MCP Client ──MCP OAuth token─────┤   validates the credential, resolves
                                 │   it to one user's RunComfy token
                                 ▼
                         Cloudflare Container
                         (Python FastMCP app)
                                 │ request-scoped RunComfy credential
                 ┌───────────────┼───────────────┐
                 ▼               ▼               ▼
        api.runcomfy.net  model-api.       trainer-api.
         (Serverless)     runcomfy.net     runcomfy.net
                            (Model)          (Trainer)

1 つの RunComfy トークンで 3 つすべての製品を認証するため、同じ認証情報の解決処理ですべてのツールを利用できます。

どちらの種類の認証情報も、コンテナに到達する前に、リクエスト単位の同じ ID ヘッダーに統合されます。形式によって区別されます。OAuth アクセストークンは必ず userId:grantId:secret 形式で、RunComfy API トークンにはコロンが含まれません。

  • Cloudflare Worker(src/index.ts)— OAuth 2.1 認可サーバーおよび保護対象リソースの境界です。認証情報がない場合、無効な場合、期限切れの場合、または対象が異なる場合は、MCP の初期化やツールの検出を行う前に拒否されます。
  • 直接 API トークン(src/index.ts)— Authorization: Bearer として提示された RunComfy Profile トークンは、リクエストごとに api.runcomfy.net に対して再検証され、送信元 IP ごとにレート制限され、そのまま転送されることはありません。
  • OAuth 同意(src/oauth-bridge.ts)— 既存の RunComfy Profile トークンを検証し、暗号化された OAuth グラントデータにのみ保存して、対象が制限された別の MCP アクセストークンを発行します。動的クライアント登録では、ループバックコールバック(Claude Code などのローカルクライアント向け)、ホスト型クライアントのコールバックに対する完全一致の許可リスト、および Cursor の完全一致する旧式アプリコールバックを受け入れます。Cursor は cursor://anysphere.cursor-mcp/oauth/callback、https://www.cursor.com/agents/mcp/oauth/callback、http://localhost:8787/callback をまとめて登録します。実際のリダイレクト先として localhost が使用される場合でも、3 つすべてを受け入れる必要があります。任意のカスタムプロトコルやコールバックの別形式は引き続き拒否され、S256 PKCE が必須です。
  • Python コンテナ(server.py)— Serverless、Model、Trainer API にまたがる 31 個のツールを備えた FastMCP アプリです。共有の運用者用認証情報は持たず、認証済みのエッジから現在のユーザーのリクエスト単位の RunComfy トークンが提供されない場合は、フェイルクローズします。
  • Cloudflare Container は最初のリクエスト時に自動起動し、10 分間アイドル状態が続くとスリープします。

プロジェクトの構成

.github/workflows/deploy.yml  CI: typecheck, test, deploy to Cloudflare
src/index.ts          Cloudflare Worker entrypoint
src/oauth-bridge.ts   OAuth consent and RunComfy token validation
server.py             MCP tool definitions (31 tools)
runcomfy_client.py    RunComfy API clients (serverless, model, trainer)
container_app.py      ASGI middleware (request IDs, token forwarding)
container_entrypoint.py  Uvicorn startup
container_runtime.py  Env validation, structured logging
wrangler.jsonc        Cloudflare Worker + Container config
Dockerfile            Container image
.env.example          Local dev config

ローカル開発

# Python 3.11+
python3.11 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
python -m container_entrypoint

ローカルエンドポイント:

  • http://127.0.0.1:8000/healthz
  • http://127.0.0.1:8000/mcp

ローカルの Python エンドポイントには、共有のフォールバック認証情報が意図的にありません。 保護されたツールの呼び出しは、認証済みの Worker 境界を経由する必要があります。


デプロイ

main にプッシュすると、.github/workflows/deploy.yml によって自動的にデプロイされます。 型チェック、Worker のテスト、コンテナのテストがすべて成功すると、 wrangler deploy --containers-rollout immediate により Worker と Python コンテナがまとめてデプロイされます。プルリクエストでは、デプロイせずに同じチェックを実行します。このワークフローは Actions タブから手動で実行することもできます。

リポジトリのシークレットが 1 つ必要です。

シークレット用途
CLOUDFLARE_API_TOKENwrangler.jsonc で指定されたアカウントに対する Edit Cloudflare Workers 権限を持つトークン
CLOUDFLARE_ACCOUNT_ID任意です。account_id はすでに wrangler.jsonc にコミットされています。別のアカウントにデプロイする場合にのみ設定してください。

手動でデプロイするには(Containers が有効な Cloudflare Workers Paid プランが必要です):

npm install
npm run check
npm test
npx wrangler deploy --containers-rollout immediate

MCP エンドポイントは https://mcp.runcomfy.com/mcp で利用可能になります(カスタムドメインは wrangler.jsonc で設定されています)。


環境変数とバインディング

共有の RunComfy API キーシークレットは意図的に設けていません。OAuth の状態は OAUTH_KV バインディングに保存され、すべての上流リクエストは OAuth グラントを認可したユーザーに紐付けられます。

Worker 変数(wrangler.jsonc 内)
名前デフォルト値説明
CONTAINER_INSTANCE_NAMEruncomfy-unifiedDurable Object インスタンス名
CONTAINER_STARTUP_TIMEOUT_MS15000コンテナ起動までの最大待機時間
CONTAINER_PORT_READY_TIMEOUT_MS30000ポートが使用可能になるまでの最大待機時間
MCP_MAX_BODY_BYTES1048576リクエストボディの最大サイズ
OPENAI_APPS_CHALLENGE現在の申請トークンOpenAI ドメイン所有権確認用の公開トークンです。GET /.well-known/openai-apps-challenge でそのまま返されます。未設定または空の場合は 404 を返します。既存のトークンを置き換える前に、所有権を確認してください。
MCP_DIRECT_TOKEN_RATE_LIMITER600 / 60sAPI トークン認証済みの /mcp リクエストに対する IP ごとの上限
RUNCOMFY_SERVERLESS_BASE_URLhttps://api.runcomfy.netServerless API のベース URL
RUNCOMFY_MODEL_API_BASE_URLhttps://model-api.runcomfy.netModel API のベース URL
RUNCOMFY_TRAINER_API_BASE_URLhttps://trainer-api.runcomfy.netTrainer API のベース URL
ローカル Python 開発(.env ファイル)
名前必須説明
RUNCOMFY_SERVERLESS_BASE_URLいいえServerless のベース URL を上書きします(デフォルト:https://api.runcomfy.net)
RUNCOMFY_MODEL_API_BASE_URLいいえModel API のベース URL を上書きします(デフォルト:https://model-api.runcomfy.net)
RUNCOMFY_TRAINER_API_BASE_URLいいえTrainer API のベース URL を上書きします(デフォルト:https://trainer-api.runcomfy.net)
RUNCOMFY_MCP_MOUNT_PREFIXいいえMCP のマウントパスのプレフィックス(デフォルト:空)

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。