POST /v1/run/:flow)です。それをMCPクライアント、つまりClaude Desktop、Cursor、またはMCPを話すその他のエージェントに渡したい場合、Jinba Trailは同じオートメーションを、1つのホスト型エンドポイント {base}/mcp 経由でMCPツールとして公開します。
ツールとして表示されるもの
オートメーションがMCPツールになるのは、次の3つすべてが真の場合だけです。- 公開済み — 下書きのオートメーションは、MCPでもRESTでも公開されません。
- MCPが有効 — 各オートメーションには、公開状態とは独立した「MCP経由で公開」トグルが設定ページにあります。これをオフにすると、そのオートメーションはすべてのキーの
tools/listから隠れます。RESTエンドポイント(/v1/run/:flow)には影響しません。このトグルが存在する前に作成されたオートメーションは、デフォルトで公開されます。 - 接続するキーのスコープ内 — キーが特定のオートメーション許可リスト付きで発行された場合、そのオートメーションだけがツールとして登録されます。スコープなしのキーでは、組織内の公開済みでMCP有効なすべてのオートメーションが表示されます。
tools/list に現れません。最小権限は呼び出し時に強制されるだけでなく、ツール検出にも表れます。
test-modeキー(
jbt_test_…)は、REST経由の場合と同じように振る舞います。入力にシークレットを含むオートメーションを見つけて呼び出すことはできますが、呼び出し自体は拒否されます。シークレットを使うオートメーションにはliveキー(jbt_live_…)を使ってください。シークレット入力はツールパラメーターになりません
オートメーションの入力にシークレット型のスロット(APIトークン、webhook URLなど)が含まれる場合、そのスロットはMCPツールのinputSchema には含まれません。シークレットではない入力だけがツールパラメーターになります。サーバーは呼び出し時に、組織の暗号化されたシークレットストアからシークレットを自分で解決します。REST呼び出しの場合とまったく同じです。MCPクライアントがシークレット値を見たり、要求したり、渡したりすることはできません。設計上であれ、引数をそのまま返す過度に寛容なクライアントによるものであれ、ツール呼び出しを通じてシークレットを漏らす方法はありません。
クライアントを接続する
APIキーを開き、MCPで接続カードまでスクロールします。接続に使うキーを選びます。ピッカーには組織のアクティブな(取り消されていない)キーが表示され、カードにはそのキーのスコープが平易な言葉で示されます(「呼び出せる自動化: get-order-status のみ」、またはスコープなしキーの場合は「組織の公開済み自動化すべてを呼び出せます」)。 キーをこのセッションで作成したばかりなら、コピー可能なスニペットには実際の平文キーが自動で差し込まれます。それ以外のキーでは、スニペットにはそのキーの実際の無害なプレフィックス(例:jbt_live_xxxx…)に続いて、明示的なプレースホルダーが表示されます。キー作成時に保存した値を貼り付けてください。Jinba Trailは、作成後に完全なキーを再表示することはありません。
クライアントによってMCPの扱い方が同じではないため、実際に異なる3つのスニペットが提供されます。Claude Desktopの claude_desktop_config.json は、stdio経由のローカルプロセスしか起動しません。この設定形式にはリモートHTTPトランスポートがないため、リモートサーバーへ到達するには、Claude Desktopがローカルプロセスとして起動するmcp-remoteブリッジを経由します。Cursorの mcp.json は、url + headers エントリでリモートサーバーを直接サポートします。ローカルプロセスもブリッジも不要です。生の mcp-remote コマンドは、Claude Desktopが内部で使うものと同じブリッジで、その他のstdio専用クライアントや手動の接続確認向けに、単体のシェル呼び出しとして示されています。
SSEとバッファリングされたJSON
{base}/mcp はステートレスなStreamable HTTPエンドポイントです。各 tools/call は1回のPOST内で応答され、リクエスト間でサーバー側に保持されるセッションはありません。仕様では、POSTクライアントが Accept: application/json, text/event-stream(常に両方の値)を送る必要があります。そのため、サーバーは値が存在することから好みを判断できません。代わりに、順序でネゴシエーションします。
text/event-streamが先に並んでいる → レスポンスはServer-Sent Eventsとしてストリーミングされます。呼び出しに_meta.progressTokenが含まれていた場合、サーバーは終端結果の前に、Runの実際のJournalエントリをnotifications/progressイベントとして転送します。通知はRunが記録した実際の手順ごとに1つで、合成されたプログレスバーではありません。mcp-remoteと現在のほとんどのクライアントは、この順序をデフォルトでは要求しないため、クライアントが明示的に要求しない限り表示されません。application/jsonが先(またはtext/event-streamがない) — デフォルトであり、mcp-remoteと上記の設定スニペットが現在送るものです。呼び出しごとに、バッファリングされたJSONオブジェクトを1つ受け取ります。このネゴシエーションが存在する前と同じです。
同期ディスパッチでは、
tools/call が解決する時点でRunはすでに完了しています。そのためSSEのprogressイベントは、ブラウザーがページを操作している間のライブの手順ごとのtickではなく、終端結果の直前にリプレイされる実際のJournalです。現時点では、MCP経由で実行中のRunをtailするためのサーバー側event busはありません。キュー実行と get-run-status
Jinba Trailは、デプロイごとの設定に応じて、次の2つの方法のどちらかでRunをディスパッチできます。
- Sync(デフォルト) —
tools/callはオートメーションが完了するまでブロックし、結果を直接返します。 - Queue —
tools/callはRunをキューに入れ、{ "run_id": "...", "status": "queued" }を返してすぐに戻ります。このモードでは、補助ツールget-run-statusも追加で登録されます。これにrun_idを渡すと、Runの現在の状態と、完了後はその出力が返ります。このツールはデプロイがQueueモードで実行されている場合にだけ表示されるため、Syncデプロイのtools/listには影響しません。
組織がたまたま文字どおり
get-run-status という名前のオートメーションを公開している場合、そのオートメーションが名前を獲得します。ポーリングツールは、実在するオートメーションがその名前をすでに主張していない場合にだけ登録されます。関連
PlaygroundとAPIキー
キーが発行されスコープ設定される場所と、同じBearerキーがREST呼び出しを認証する仕組み。
FlowをMCPで公開する
Jinba Trail外でセルフホストするための、エンジンのローカルでシングルユーザーのstdio
browserflow mcp。Docsページを読む
公開済みの各オートメーションに対してドキュメント化されるRESTのリクエスト/レスポンス形状。
オートメーション一覧
各オートメーションのMCP公開トグルと公開状態が置かれる場所。