Secure MCP Tunnel を使うと、ファイアウォールの受信ポートを開けたり、サーバーをインターネットに公開したりせずに、プライベート MCP サーバーを対応する OpenAI 製品に接続できます。MCP サーバーにすでにアクセスできるネットワーク内で tunnel-client を実行します。クライアントは OpenAI へのアウトバウンド HTTPS 接続を確立し、キューから MCP リクエストを取得してローカルのサーバーに転送し、同じトンネルを通じてレスポンスを返します。
Secure MCP Tunnel は、カスタム MCP サーバーのテストを含むプライベート MCP 接続に対応しています。公開プラグインの提出や配布には対応していません。公開プラグインには、インターネットから安定してアクセスできる HTTPS の MCP エンドポイントが必要です。MCP サーバーを非公開にする必要がある場合は、リクエストをサーバーに転送する HTTPS プロキシを公開してください。エンドポイントと認証の要件は、公開プラグインの提出を参照してください。
MCP トンネルとは
MCP トンネルは、ネットワーク内のホストから OpenAI がホストする MCP エンドポイントへのアウトバウンド専用接続です。プライベートネットワーク、オンプレミス環境、またはファイアウォールの内側にある MCP サーバーを、ChatGPT、Codex、Responses API などの対応する OpenAI 製品から呼び出す場合に使用します。
Secure MCP Tunnel では、MCP サーバーを非公開にしたまま、対応する OpenAI 製品から通常どおり MCP リクエストを送信できます。tunnel-client は OpenAI をポーリングして MCP リクエストを取得し、ローカルのサーバーに転送して、同じトンネルを通じてレスポンスを返します。
Secure MCP Tunnel の利用条件
- MCP サーバーがプライベートネットワーク、オンプレミス環境、開発用マシン、または既存のアクセス制御で保護された環境で動作していること
- MCP サーバーを公開せずに、ChatGPT、Codex、Responses API などの対応する OpenAI 製品から利用したいこと
tunnel-clientを実行するホストから、デフォルトではapi.openai.com:443、コントロールプレーンの mTLS を構成した場合はmtls.api.openai.com:443にアウトバウンド HTTPS リクエストを送信でき、プライベート MCP サーバーにもアクセスできること- MCP の基本概念については、まず MCP サーバーガイドを参照してください。
仕組み
- Platform のトンネル設定で、OpenAI がホストする MCP トンネルエンドポイントを作成または管理します。
- プライベート MCP サーバーにアクセスできるネットワーク内で
tunnel-clientを実行します。 tunnel-clientにトンネルの識別情報とプライベート MCP サーバーのアドレスを設定します。- OpenAI 製品は、OpenAI がホストするトンネルエンドポイントに MCP リクエストを送信します。
tunnel-clientはロングポーリングでキューからリクエストを取得し、各JSON-RPCリクエストをプライベート MCP サーバーに転送して、トンネル経由でレスポンスを返します。
プライベート MCP サーバーに公開リスナーは必要ありません。対応製品は OpenAI がホストするエンドポイントに通常どおり MCP リクエストを送信でき、ネットワーク接続は自社のネットワーク内から開始されます。コネクタがストリーミングで結果を要求した場合は、処理途中のサーバー送信イベントもトンネル経由で転送できます。
OpenAI 製品は OpenAI がホストするトンネルエンドポイントを呼び出します。tunnel-client はロングポーリングでキューからリクエストを取得し、同じトンネルを通じて MCP レスポンスを返します。
事前準備
次のものを用意してください。
tunnel_id(Platform のトンネル設定で取得)tunnel-clientの実行用 API キーtunnel-clientがネットワーク内から stdio または HTTP 経由でアクセスできる MCP サーバー
権限とアクセス
Platform のトンネル権限と、ChatGPT でカスタム MCP サーバーにアクセスする権限は別々に管理されます。
- トンネルを作成または編集するには、Tunnels の Read と Manage が必要です。
tunnel-clientを実行する場合や、アプリの作成時にトンネルを選択する場合は、Tunnels の Read と Use が必要です。- トンネル権限は Platform 組織単位で適用されます。Platform 組織のオーナーまたは RBAC 管理者がトンネルのロールを付与します。
- ChatGPT でカスタム MCP サーバーを追加、使用する際には、引き続きワークスペースの権限とセキュリティ制限が適用されます。カスタム MCP サーバーの追加を参照してください。
カスタム MCP サーバーの追加と使用に必要な権限は、対象の ChatGPT ワークスペースの管理者に依頼してください。トンネル権限は、対象の Platform 組織のオーナーまたは RBAC 管理者に依頼してください。
トンネルと対象の組織およびワークスペースの関連付け
トンネルは、1 つ以上の Platform 組織や ChatGPT ワークスペースに関連付けることができます。トンネルの検索または使用を許可するすべての組織とワークスペースを関連付けてください。
- トンネルを所有または管理する Platform 組織を追加します。
- アプリの作成時にトンネルを一覧表示する ChatGPT ワークスペースを追加します。
- 別の Platform 組織から Codex、Responses API などの対応製品を使ってプライベート MCP サーバーを呼び出す場合は、その組織も追加します。
- 同じ
tunnel_idをtunnel-clientに使用します。組織やワークスペースを追加しても、別のトンネルが作成されたり、プライベート MCP サーバーのエンドポイントが変わったりすることはありません。
個人アカウントの場合は、そのアカウントに属する個人用の Platform 組織を使用します。ChatGPT と Codex でテストする場合は、対象の ChatGPT ワークスペースと、Codex が使用する Platform 組織をトンネルに関連付けます。個人用の Platform 組織のみに関連付けたトンネルは、Enterprise/Edu ワークスペースには自動的に表示されません。
Platform 組織と ChatGPT ワークスペースがすでにリンクされている場合は、Platform のトンネル設定で未追加の組織またはワークスペースを追加できます。Platform 組織に対応する ChatGPT ワークスペースがない場合など、企業アカウントの構成を自動で確認できない場合は、OpenAI のアカウント担当チームに連絡し、トンネルを使用する企業アカウントの関連付けを審査のうえ手動で上書きするよう依頼してください。
ネットワーク要件
tunnel-client はインターネットからのインバウンド接続を必要としません。OpenAI へのアウトバウンド HTTPS 接続と、ローカルネットワークからプライベート MCP サーバーへの接続が必要です。
| 送信元 | 宛先 | 用途 |
|---|---|---|
tunnel-client を実行するホスト |
api.openai.com:443 の /v1/tunnel/*(HTTPS) |
デフォルトのポーリングとレスポンスの送信 |
tunnel-client を実行するホスト |
mtls.api.openai.com:443 の /v1/tunnel/*(HTTPS) |
コントロールプレーンの mTLS を構成した場合のポーリングとレスポンスの送信 |
tunnel-client を実行するホスト |
設定した stdio コマンドまたは MCP サーバーの URL | ネットワーク内からの MCP リクエストの転送 |
制限
Secure MCP Tunnel では、トンネルの作成とコネクタの MCP 通信に次のデフォルトの制限が適用されます。
| 制限項目 | デフォルト値 | 適用範囲 |
|---|---|---|
| トンネル数 | ChatGPT ワークスペースごとに 1,000、Platform 組織ごとに 1,000 | 各トンネルは、関連付けられたすべてのワークスペースと Platform 組織それぞれの作成上限にカウントされます。 |
| MCP リクエストレート | 1 分あたり 600 リクエスト(継続的に毎秒 10 リクエスト) | MCP チャネルをまたいで、トンネル ID と呼び出し元アプリケーション ID が同じリクエストで上限を共有します。呼び出し元アプリケーション ID を取得できない場合は、トンネル ID とユーザーが同じリクエストで上限を共有します。tunnel-client のプロセスを複数実行しても上限は増えません。 |
| シリアライズ後のリクエストまたはレスポンスのサイズ | 10 MiB(10,485,760 バイト) | ヘッダーとプロトコルのメタデータを含む、シリアライズ後のトンネルエンベロープ全体に適用されるため、MCP コンテンツに使用できる容量はこれよりわずかに小さくなります。ストリーミング中の各通知と最終レスポンスにもそれぞれ適用されます。 |
| リクエストの期限 | 120 秒 | OpenAI 側のキューにリクエストが入ってから最終レスポンスが届くまでの制限時間です。キューでの待ち時間も含まれ、進捗通知によって期限がリセットされることはありません。 |
| キュー内の待機リクエスト数 | トンネルごとに 1,000 リクエスト | MCP チャネル間で上限を共有します。tunnel-client がポーリングで取得するのを待っているリクエストが対象です。実行のために取得済みのリクエストは含まれません。 |
これらの制限はサービスを保護するためのもので、スループットやレイテンシを保証するものではありません。クリーンアップのためにキューのレコードが保持されていても、リクエストの期限は 120 秒のままです。トンネル数やトラフィックの上限の引き上げを希望する場合は、OpenAI サポートにお問い合わせください。
tunnel-client のセットアップ
Platform のトンネル設定を開き、そこにあるダウンロードリンクを使用するか、最新の公開版 tunnel-client を openai/tunnel-client から取得します。運用手順書には、特定のリリースの URL を固定で記載せず、常に最新リリースを参照する URL を記載してください。
すでにバイナリがある場合は、まず tunnel-client help quickstart を実行します。名前付きのローカル stdio プロファイルを使用する場合は、次のように実行します。
export CONTROL_PLANE_API_KEY="sk-..."
tunnel-client init \
--sample sample_mcp_stdio_local \
--profile local-stdio \
--tunnel-id tunnel_0123456789abcdef0123456789abcdef \
--mcp-command "python /path/to/server.py"
tunnel-client doctor --profile local-stdio --explain
tunnel-client run --profile local-stdio
HTTP の MCP サーバーの場合は --mcp-server-url https://mcp.internal.example.com/mcp を指定します。--mcp-command の代わりに使用してください。
アプリの作成中やテスト中は、tunnel-client run ... が正常に動作する状態を維持してください。アプリの検出と MCP ツールの呼び出しには、クライアントが実行中である必要があります。
/ui のローカル管理 UI では、ChatGPT、Codex、または API フローからテストする前に、実行中のクライアントが正常に動作し、準備が整い、接続されているかを確認できます。
tunnel-client の実行場所
tunnel-client は、プライベート MCP サーバーにすでにアクセスできる信頼境界内で実行します。代表的なデプロイ構成は次のとおりです。
- Kubernetes サイドカー:
tunnel-clientと MCP サーバーを同じ Pod 内で実行し、localhost経由で接続します。 - 専用の Kubernetes Deployment:プライベート Service 経由で MCP サーバーにすでにアクセスできる場合は、
tunnel-clientを別に実行します。 - VM または systemd サービス:
tunnel-clientを、プライベートネットワーク経由で MCP サーバーにアクセスできるホストで実行します。
ChatGPT からの接続
ChatGPT プラグインを開き、プラスボタンを選択してから カスタム MCP サーバーを追加 を選択します。次に トンネル を 接続 の項目で選択します。ChatGPT に利用可能なトンネルが表示されたら選択します。有効な tunnel_id がすでにある場合は貼り付けることもできます。認証を設定してリスクに関する警告を確認し、理解したうえで続行、プラグインとして作成 の順に選択します。
ChatGPT にトンネルが表示されない場合は、Platform 組織だけでなく対象の ChatGPT ワークスペースにもトンネルが関連付けられていることと、アプリの作成者に Tunnels の Read と Use が付与されていることを確認してください。
Codex を使ったセットアップと検証
Codex にセットアップを案内させるには、ブラウザから Platform と ChatGPT にアクセスできるようにし、プライベート MCP サーバーに接続できるホストへのターミナルアクセスも許可します。次のプロンプトを Codex に貼り付けてください。
社内の MCP サーバーと ChatGPT をつなぐプライベートな Secure MCP Tunnel のセットアップと、ChatGPT から実際にツールを呼び出すところまでの動作確認を手伝ってください。ブラウザやコンピューターの操作機能とターミナルを使い、https://developers.openai.com/api/docs/guides/secure-mcp-tunnels と https://github.com/openai/tunnel-client/blob/master/docs/onboarding.md の手順に沿って進めてください。作業中は、その都度、現在の UI と CLI のヘルプを確認してください。
まず、対象の Platform 組織と ChatGPT ワークスペース、MCP サーバーの HTTP URL または stdio コマンド、クライアントを実行するホストを特定してください。既存のトンネル、キー、ChatGPT のカスタム MCP プラグインを調べ、今回の用途に合うものは再利用してください。トンネルが対象の組織とワークスペースに関連付けられていることと、必要な権限が付与されていることを確認してください。トンネルの作成者には Tunnels Read + Manage が必要です。権限を制限した実行用キーとプラグインのオペレーターには、それぞれ Tunnels Read + Use が必要です。
シークレットの値そのものをチャット、コマンドの引数、ログ、スクリーンショット、設定ファイルに含めないでください。私がローカル環境で安全な入力手段を使って値を入力するか、環境変数の参照を指定できるように案内してください。サポート対象の tunnel-client をインストールし、`tunnel-client help quickstart` を実行してから、サーバーを設定してください。次に `tunnel-client doctor --profile <name> --explain` を実行し、クライアントを起動して、リクエストを処理する準備が整い、実際にポーリングしていることを確認してください。アプリの検出とツールの呼び出しに備えて、クライアントは起動したままにしてください。
ChatGPT プラグインで、非公開のカスタム MCP サーバーを追加するか、設定途中のサーバーのセットアップを完了してください。接続設定は「Connection: Tunnel」とし、先ほどと同じトンネルを選択して、必要な認証を設定してください。そのうえで、代表的な操作を安全に試せるツールを呼び出してください。確認項目ごとに、判断の根拠となった実際の表示や実行結果を報告してください。作業を進められない場合は、エラーの正確な内容と次に取るべき対応を報告してください。ChatGPT からのツール呼び出しが成功したことを確認してから、セットアップ完了と報告してください。
Responses API からの接続
MCP ツール定義の tunnel_id にトンネルの識別子を指定します。OpenAI がホストするトンネルエンドポイントを server_url に指定しないでください。server_url は、Responses API が直接アクセスできる MCP サーバーにのみ使用します。
curl https://api.openai.com/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-6-astra",
"input": "Use the private MCP server to answer my request.",
"tools": [
{
"type": "mcp",
"server_label": "private_mcp",
"tunnel_id": "tunnel_0123456789abcdef0123456789abcdef"
}
]
}'セキュリティとネットワーク
プライベート MCP サーバーは顧客が管理する環境内にとどまります。tunnel-client は実行用 API キーを使ってアウトバウンド HTTPS で OpenAI に接続します。必要に応じて、コントロールプレーンの mTLS も使用します。
- MCP サーバーのアドレスは非公開のままで、
tunnel-clientの実行環境内でのみ使用されます。 tunnel-clientは OpenAI のトンネルのコントロールプレーンで認証を受けます。対応する OpenAI 製品は、OpenAI がホストするトンネルエンドポイントを使用します。- トンネルへのアクセスは、既存の組織とワークスペースの設定に従います。公開の受信経路を別途設ける必要はありません。
tunnel-clientは、アウトバウンドプロキシ、カスタム CA バンドル、コントロールプレーン用のクライアント証明書、MCP 側のmTLSなど、企業のネットワーク要件に対応しています。
ログの記録範囲
Secure MCP Tunnel では、トンネルでの通信と、製品がアプリ単位で記録するログを区別しています。
- トンネルのコントロールプレーンでの認証、ロングポーリングとレスポンスの通信、トンネルで転送される個々のリクエストは、トンネル経路から ChatGPT Compliance Platform のアプリイベントとして出力されません。
- トンネルのメタデータの変更は、API プラットフォームの監査ログに
tunnel.created、tunnel.updated、tunnel.deletedとして記録されます。 - ChatGPT が Secure MCP Tunnel 経由でカスタムアプリにアクセスする場合も、トンネルの役割は通信の転送に限られます。アプリ側では通常どおり、アプリの呼び出しログや、アプリのリンク時またはリンク解除時の
APP_AUTH_LOGなどの認証ライフサイクルログを含む、アプリ単位のコンプライアンスログが記録されます。
高度な使い方:許可リストに基づく HTTP 呼び出し
Secure MCP Tunnel は、対応するエージェントや API フローから顧客のネットワーク内への、対象を限定した HTTP 呼び出しにも対応しています。tunnel-client には Harpoon という MCP サーバーが組み込まれています。Harpoon は設定済みの HTTP 接続先をラベルで識別できるようにし、呼び出し元はリクエストとレスポンスの制限内で、トンネル経由で接続先を呼び出せます。
少数のプライベート REST エンドポイントを公開せずにアクセスしたい場合に使用します。Harpoon は汎用プロキシではありません。呼び出し元が任意のホストを選ぶことはできず、リクエストには顧客が設定した接続先とメソッドだけを使用できます。
トラブルシューティング
- Platform のトンネル設定に「Tunnels access required」と表示される場合:トンネル権限はプロジェクト単位ではなく組織単位で設定します。対象の Platform 組織を選択し、組織のオーナーまたは RBAC 管理者に、必要な権限を持つロールまたはグループへの追加を依頼してください。トンネルを表示するには Read、作成、編集、削除するには Read と Manage が必要です。該当するロールがない場合は、管理者がロールを作成してグループに割り当て、そのグループにユーザーを追加できます。Use も必要になるのは、
tunnel-clientを実行する場合や、コネクタ設定でトンネルを選択する場合です。新しいロールの割り当てが反映されるまで、最大 30 分かかります。 - ChatGPT にトンネルが表示されない場合:Platform 組織だけでなく対象の ChatGPT ワークスペースもトンネルに関連付けられていることを確認し、次にコネクタのオペレーターに Tunnels の Use 権限があることを確認してください。企業アカウントのワークスペースを自動でリンクできない場合は、OpenAI のアカウント担当チームに連絡し、審査のうえ関連付けを手動で上書きするよう依頼してください。
- コネクタの検出やツールの呼び出しに失敗する場合:
tunnel-client run ...が実行中であることを確認し、tunnel-client doctor --profile <name> --explainを再度実行してください。 - トンネルの情報を表示できても編集できない場合:オペレーターに Tunnels の Read は付与されていても、Tunnels の Manage が付与されていない可能性があります。
tunnel-clientは/healthz、/readyz、/metricsの各エンドポイントと、/uiのローカル管理 UI を提供します。- デフォルトでは、管理 UI にはループバック経由でのみアクセスできます。運用担当者のネットワークからアクセスする必要がある場合に限り、リモートアクセスを許可してください。
- ChatGPT、Codex、または API フローからテストする前に、これらのエンドポイントや管理 UI で、クライアントが正常に動作し、準備が整い、ポーリングを行っていることを確認してください。
- クライアントが接続されていない場合、
tunnel-clientが再接続するまで、トンネル経由のリクエストは失敗します。 - 生の HTTP 通信のログ記録はデフォルトで無効です。サポート用にエクスポートするデータでは機密情報が伏せられます。
OAuth
- OAuth のディスカバリはトンネル経由で実行できるため、MCP サーバー自体は非公開のままにできます。
- トンネルは、ブラウザを使用する OAuth フローに必要な上流の認可サーバーのメタデータを保持します。
- 認可サーバー自体への通信が自動的にトンネル経由になるわけではありません。インターネットからも
tunnel-clientのホストからも認可サーバーにアクセスできない場合は、MCP サーバーにアクセスできても OAuth フローが失敗することがあります。
設定場所
- OpenAI がホストする MCP トンネルエンドポイントは、Platform のトンネル設定で管理します。
- カスタム MCP サーバーの追加を ChatGPT プラグインで行う際に、トンネルを使用できます。
- Codex または API フローでは、対応製品が提供するトンネル経由の MCP 接続先を使用します。
次のステップ
- Platform のトンネル設定でトンネルを作成または管理します。
tunnel-clientのプロファイルをtunnel-client doctor --profile <profile> --explainで検証します。- ChatGPT プラグインまたは利用中の対応する OpenAI 製品からトンネルに接続します。
