メインコンテンツにスキップ

MCPトンネル

これは何ですか?

インバウンドポートを開いたりサービスをインターネットに公開することなく、Claudeをプライベートネットワークで実行されているMCPサーバーに安全に接続します。MCP Tunnelsは現在プライベートベータ版であり、Cloudflareのトンネルサービスに依存しています。

仕組み

MCP Tunnelsは、Claudeと内部MCPサーバー間の接続を作成し、複数のセキュリティレイヤーで転送中に暗号化されます。

Claudeがプライベートネットワーク内のMCPサーバーに到達する必要がある場合、リクエストはセキュアトンネルを通じて移動します。お客様側で2つのコンポーネントをデプロイします:

  • cloudflared(Cloudflareのトンネルエージェント)

  • MCP Gateway(Anthropicが提供)

cloudflaredはCloudflareのエッジへのアウトバウンドのみの接続を開始します。ファイアウォールでインバウンドポートを開く必要はありません。MCP Gatewayは内部TLSレイヤーを終了し、アップストリームIPを検証してSSRFを防止し、サブドメインに基づいて各リクエストを正しいMCPサーバーにルーティングします。

接続は3つの独立したレイヤーで保護されています:AnthropicとCloudflare間の外部mTLS(IP検証付き)、Anthropicのバックエンドからゲートウェイへのペイロードをエンドツーエンドで暗号化する内部TLS(Cloudflareがmcpペイロードにアクセスできないように設計)、および各MCPサーバーのアプリケーションレイヤーでのOAuth認証。

デプロイするもの

cloudflared

Cloudflareのトンネルエージェント。アウトバウンドのみの接続を開始します。インバウンドポートは不要です。

MCP Gateway

内部TLSを終了し、IPを検証し、MCPサーバーへのリクエストをルーティングするAnthropicが提供するコンポーネント。

主要なセキュリティプロパティ

  • インバウンドポートは不要です。 cloudflaredはアウトバウンド接続のみを開始します。ファイアウォールは閉じたままです。

  • エンドツーエンド暗号化。 トラフィックはAnthropicのバックエンドからゲートウェイへの転送中に暗号化されます。MCPペイロードはCloudflareによって読み取られることはできません。

  • 多層防御。 複数の認証レイヤー:mTLS、内部TLS、およびアプリケーションレイヤーでのOAuth。

  • SSRF保護。 ゲートウェイはアップストリームIPを検証して、リクエスト偽造攻撃を防止するのに役立ちます。

このガイドは、Helm(Kubernetes用)およびDocker Composeを介した参照デプロイメントを提供します。組織のセキュリティ要件を満たすようにそれらを適応させる責任はお客様にあります。

共有責任

このシステムを安全に保つことは、Anthropicとお客様の組織の間の共有責任です。

Anthropicの責任:

  • Anthropicのみがトンネルにアクセスできることを確認する

  • ゲートウェイに接続する前にCA証明書を検証する

  • Claudeが組織が所有するトンネルにのみリクエストを送信することを確認する

お客様の責任:

  • このドキュメントおよび後続のガイダンスに従う

  • トンネルトークンとTLS秘密鍵を保護する

  • MCPスペックで説明されているようにOAuth認証を使用するようにMCPサーバーを構成する

  • ゲートウェイホストとMCPサーバーへのアクセスを適切な担当者に制限する

  • システムが侵害されたと疑われる場合はAnthropicに通知する(疑わしい侵害への対応を参照)

⚠️ 認証情報リスク。 攻撃者がトンネルトークンとTLS秘密鍵のいずれかを取得した場合、ゲートウェイになりすまし、OAuth トークンを含むMCPリクエストペイロードを読み取ることができます。ファイルのアクセス許可、保存時の暗号化、シークレット管理など、組織のセキュリティ要件に従ってこれらの認証情報を保護してください。


前提条件

  • デプロイメントターゲット — Kubernetesクラスター(Helm用)またはDockerおよびDocker Composeを備えたVM。

  • Tunnels API用のAnthropicAPIトークン — claude.ai → Organization Settings → Connectors → Tunnels APIから生成します。セットアップはこのトークンを使用してトンネルをプロビジョニングし、CA証明書を登録します。ゲートウェイは実行時にそれを必要としません。セットアップが完了したら、それを取り消します。

  • ネットワークアクセス — 以下の表に従ったアウトバウンド接続。

  • MCPサーバー — ゲートウェイが到達できるプライベートネットワークで実行されている1つ以上のMCPサーバー。

ネットワーク要件

コンポーネント

宛先

目的

セットアップ(1回限り)

api.anthropic.com:443

(ポート443)

トンネルプロビジョニング

cloudflared

Cloudflareエッジ、ポート7844 TCP/UDP(198.41.192.0/19、2606:4700:a0::/44)

トンネル接続

MCP Gateway

MCP サーバー

アップストリーム トラフィック

権限のある IP リストについては、Cloudflare のトンネル ファイアウォール ドキュメントを参照してください。Helm ユーザーは、チャートの networkPolicy 値を有効にすることで、このエグレス制限を適用できます。


デプロイ方法を選択

MCP トンネルは、Helm(Kubernetes)または Docker Compose を使用してデプロイできます。インフラストラクチャに適した方法を選択してください。

⎈ Helm / Kubernetes

ほとんどのお客様に推奨されます。トンネルのプロビジョニングと証明書の更新を自動化します。認証情報をシークレットとして保存します。

🐳 Docker Compose

シングルホストまたは VM デプロイメント用です。


Helm / Kubernetes デプロイメント

1. チャート値を取得

デフォルト値ファイルをダウンロードします。各フィールドを説明するコメントが含まれています。

シェル

helm show values \
oci://us-docker.pkg.dev/anthropic-public-registry/charts/mcp-tunnel \
--version 0.1.0 > values.yaml

2. ルートを構成

values.yaml を編集し、gateway.config.routes の下に少なくとも 1 つのルートを追加します。各ルートは、サブドメイン プレフィックスをアップストリーム MCP サーバー URL にマップします。

3. レンダリングされたマニフェストを確認

プレースホルダー トークンを使用してチャートをレンダリングし、インストール前に Kubernetes リソースを検査します。チャートをレンダリングするには api.token が必要ですが、helm template は API を呼び出しません。

シェル

helm template mcp-tunnel \
oci://us-docker.pkg.dev/anthropic-public-registry/charts/mcp-tunnel \
--version 0.1.0 \
-n mcp-tunnel \
-f values.yaml \
--set api.token=placeholder > rendered.yaml

組織のサードパーティ マニフェスト検証慣行に従って、rendered.yaml を確認してください。

4. チャートをインストール

API トークンを環境変数に保存してからインストールします。分離のため、専用の名前空間をお勧めします。

シェル

# Paste your API token (input is hidden)
read -rs API_TOKEN && export API_TOKEN

helm install mcp-tunnel \
oci://us-docker.pkg.dev/anthropic-public-registry/charts/mcp-tunnel \
--version 0.1.0 \
--namespace mcp-tunnel --create-namespace \
-f values.yaml \
--set api.token="$API_TOKEN"

⚠️ 重要: インストール完了後、API トークンを取り消してください。 --set を使用してトークンを渡すと、値ファイルから除外されますが、Helm はリリース履歴(sh.helm.release.v1.* シークレット)に記録します。Kubernetes シークレットはデフォルトでは保存時に暗号化されないため、トークンを取り消すまで、クラスターから復旧可能な状態のままです。

5. トンネル ドメインを取得

セットアップ ジョブは、トンネル ドメインをシークレットに書き込みます。Claude で MCP サーバーを構成するために必要です。

シェル

kubectl get secret mcp-tunnel -n mcp-tunnel \
-o jsonpath='{.data.tunnel-domain}' | base64 -d

トンネルが起動して実行されたら、Claude に接続します。

オプション: NetworkPolicy を有効化

値ファイルで networkPolicy.enabled: true を設定して、トンネル ポッドのエグレスをネットワーク レベルで制限します。networkPolicy.mcpServers をポッド ラベル セレクターまたはアップストリーム MCP サーバーの CIDR 範囲で構成します。ポリシーには、cloudflared が Cloudflare のエッジに到達するためのエグレス ルールが既に含まれています。クラスターの CNI は NetworkPolicy をサポートする必要があります。値ファイルの例を参照してください。

オプション: ゲートウェイ構成

gateway.config.* の下のフィールドは、ゲートウェイの構成ファイルに渡されます。完全なリストについては、付録: ゲートウェイ構成を参照してください。一般的な調整には、upstream.allowed_ips、log_level、および https:// ルート用の upstream.tls が含まれます。構成が参照する追加ファイル(upstream.tls.ca_file 用の CA バンドルなど)をマウントするには、gateway.extraVolumes と gateway.extraVolumeMounts を使用します。

アップグレード

helm upgrade では常に --version を指定してください。指定しない場合、Helm はレジストリから最新のチャート バージョンをプルします。これは確認したバージョンと異なる可能性があります。

構成の変更(ルート、レプリカ、NetworkPolicy など)の場合、API トークンは不要です。api.token を渡さない限り、セットアップ ジョブはアップグレード時にスキップされます。

シェル

helm upgrade mcp-tunnel \
oci://us-docker.pkg.dev/anthropic-public-registry/charts/mcp-tunnel \
--version 0.1.0 \
-n mcp-tunnel \
-f values.yaml

トンネル トークンのローテーションの場合、値ファイルで tunnel.tokenVersion をインクリメントし、新しい API トークンを生成してアップグレードします。

シェル

# Paste your API token (input is hidden)
read -rs API_TOKEN && export API_TOKEN

helm upgrade mcp-tunnel \
oci://us-docker.pkg.dev/anthropic-public-registry/charts/mcp-tunnel \
--version 0.1.0 \
-n mcp-tunnel \
-f values.yaml \
--set api.token="$API_TOKEN"

アップグレード完了後、API トークンを取り消してください。

--reuse-values に依存するのではなく、完全な値ファイルを保持してください。Helm はマップ フィールドをディープ マージするため、--reuse-values でルートを削除すると、サイレント エラーが発生します。

kubectl または kustomize で helm template を使用

マニフェストをレンダリングして自分で適用する場合(kubectl apply または kustomize オーバーレイ経由)、外部モード(setup.enabled: false)を使用します。トンネルを個別にプロビジョニング(付録: トンネル API を参照)し、external.tunnelTokenSecretName と external.serverCertSecretName で参照される事前作成されたシークレットとして認証情報を提供します。セットアップ バイナリを使用する代わりに独自の証明書を発行する場合は、付録: 証明書要件を参照してください。

Docker Compose デプロイメント

1. デプロイメント ディレクトリを準備

シェル

mkdir -p mcp-gateway/{config,tunnel-data}
cd mcp-gateway
sudo chown 65532:65532 tunnel-data

chown により、コンテナ(UID 65532 として実行)がバインド マウント ディレクトリに書き込むことができます。

2. docker-compose.yaml を作成

YAML

services:
# One-time provisioning. Run with: docker compose run --rm setup
setup:
image: us-docker.pkg.dev/anthropic-public-registry/images/mcp-gateway@sha256:62ddf0897778c80997ca789189a8a0bd63df241659d661ff9d5b0e06b5ee1dcd
entrypoint: ["/setup"]
command:
- init
- --api-url=https://api.anthropic.com
- --output=dir:/data
- --token-version=1
environment:
- API_TOKEN
volumes:
- ./tunnel-data:/data
user: "65532:65532"
read_only: true
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
profiles: ["setup"]

cloudflared:
# Verify digest at https://hub.docker.com/r/cloudflare/cloudflared/tags
image: cloudflare/cloudflared@sha256:6b599ca3e974349ead3286d178da61d291961182ec3fe9c505e1dd02c8ac31b0
command: tunnel --no-autoupdate --config /etc/cloudflared/config.yaml run
environment:
- TUNNEL_TOKEN
volumes:
- ./config/cloudflared-config.yaml:/etc/cloudflared/config.yaml:ro
restart: unless-stopped
user: "65532:65532"
read_only: true
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
stop_grace_period: 30s
logging:
options:
max-size: "10m"
max-file: "3"

mcp-gateway:
image: us-docker.pkg.dev/anthropic-public-registry/images/mcp-gateway@sha256:62ddf0897778c80997ca789189a8a0bd63df241659d661ff9d5b0e06b5ee1dcd
volumes:
- ./config/mcp-gateway.yaml:/etc/mcp-gateway/config.yaml:ro
- ./tunnel-data:/data:ro
restart: unless-stopped
user: "65532:65532"
read_only: true
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
# Should match shutdown_timeout in mcp-gateway config
stop_grace_period: 30s
logging:
options:
max-size: "10m"
max-file: "3"

セキュリティ対策: 非ルート実行(UID 65532)、読み取り専用ファイルシステム、権限昇格なし、すべての Linux 機能を削除、SHA256 ダイジェストによるイメージ ピンニング。

3. トンネルのプロビジョニング

Shell

# Paste your API token (input is hidden)
read -rs API_TOKEN && export API_TOKEN

docker compose run --rm setup

セットアップコマンドは、Tunnels APIを介してトンネルを作成し、CAとサーバー証明書を生成し、CAをAnthropicに登録し、すべての出力を./tunnel-data/に書き込みます。

次のステップのためにトンネルドメインを取得します:

Shell

sudo cat tunnel-data/tunnel-domain

⚠️ 重要: 続行する前にAPIトークンを取り消してください。

4. ゲートウェイの設定

config/mcp-gateway.yamlを作成します:

YAML

listen_addr: ":8080"
log_level: info
shutdown_timeout: 30s

# Your tunnel domain from Step 3
tunnel_domain: abcd1234.tunnel.anthropic.com

tls:
cert_file: /data/tls.crt
key_file: /data/tls.key

routes:
# Replace with your actual MCP servers.
# With tunnel_domain set, keys are subdomain prefixes.
docs: http://docs-mcp.internal:8080
search: http://search-mcp.internal:8080

upstream:
allowed_ips:
- 10.0.0.0/8

利用可能なすべてのフィールドについては、付録: ゲートウェイ設定を参照してください。

config/cloudflared-config.yamlを作成します:

YAML

ingress:
- service: http://mcp-gateway:8080

5. デプロイ

Shell

export TUNNEL_TOKEN=$(sudo cat tunnel-data/tunnel-token)
docker compose up -d
docker compose logs -f

ディレクトリ構造:

mcp-gateway/
├── docker-compose.yaml
├── config/
│ ├── cloudflared-config.yaml
│ └── mcp-gateway.yaml
└── tunnel-data/
├── tunnel-id
├── tunnel-domain
├── tunnel-token
├── token-version
├── ca.crt
├── ca.key
├── tls.crt
└── tls.key

CA秘密鍵とトンネルトークンをセキュアストレージに移動することを検討してください。

マルチVM デプロイメントの場合: mcp-gateway/ディレクトリを各ホストにコピーします。同じトンネルトークンと証明書がすべてのレプリカで機能します。

トンネルが起動して実行されたら、Claudeに接続します。

証明書の更新 (Compose)

サーバー証明書の有効期限は90日です。有効期限切れ前に更新してください:

Shell

docker compose run --rm setup renew-cert --output=dir:/data

ゲートウェイは30秒ごとに証明書ファイルをポーリングし、変更時に自動的に再ロードします。スケジュールで安全に実行できるフラグについては、付録: セットアップCLIリファレンスを参照してください。

トンネルトークンのローテーション (Compose)

docker-compose.yamlを編集して--token-versionをインクリメントし、新しいAPIトークンでセットアップを再実行します:

# Paste your API token (input is hidden)
read -rs API_TOKEN && export API_TOKEN

docker compose run --rm setup

export TUNNEL_TOKEN=$(sudo cat tunnel-data/tunnel-token)
docker compose up -d cloudflared

ローテーション完了後、APIトークンを取り消します。


Claudeに接続

トンネルが実行されたら、MCPサーバーをClaudeに登録して、ユーザーが利用できるようにします。

1. MCPサーバーを追加

組織管理者がclaude.aiでOrganization Settings → Connectors → Add → Custom → Webに移動します。

各MCPサーバーをトンネルホスト名を使用して入力します。例えば、docs.abcd1234.tunnel.anthropic.com。サブドメインプレフィックスはゲートウェイ設定のルートキーと一致します。

2. ユーザーが接続

個別ユーザーがSettings → Connectorsに移動し、使用したい各MCPサーバーのConnectをクリックします。

後でサーバーを追加しますか? 設定に新しいルートを追加し、変更を適用し(helm upgrade、またはdocker compose restart mcp-gateway)、新しいホスト名をClaudeに登録します。証明書またはcloudflaredの変更は不要です。ワイルドカード証明書がすべてのサブドメインをカバーします。

セキュリティのベストプラクティス

  1. MCPサーバーでOAuthを要求してください。 トンネルとTLSレイヤーは転送を保護しますが、これらが侵害された場合、アプリケーションレイヤーのOAuthは不正なツール呼び出しを防ぎます。MCPスペックで説明されているように、各MCPサーバーがOAuth認証を要求するように設定してください。

  2. claude.ai組織でSSOを有効にしてください。 トンネルトークンはclaude.aiコンソールから生成されます。SSOが強制されると、アイデンティティプロバイダーのセッションコントロールが管理者セッションを管理します。

  3. allowed_ipsを制限してください。 MCPサーバーをカバーする最小のCIDR範囲を使用してください。

  4. ログを監視してください。 警告、エラー、および異常なパターンのアラートを設定してください。

  5. 認証情報をローテーションしてください。 定期的に証明書をローテーションするか、侵害が疑われる場合は直ちにローテーションしてください。

  6. イメージを更新してください。 ゲートウェイの更新をすぐに適用してください。SHA256ダイジェストでイメージをピンしてください。

  7. ネットワークアクセスを制限してください。 ゲートウェイとcloudflaredは必要なネットワークアクセスのみを持つべきです。

  8. MCPサーバーのスコープを制限してください。 MCPサーバーは必要な機能のみを公開すべきです。

  9. 保存時の認証情報を保護してください。 tunnel-data/ディレクトリ(Compose)またはCredentials Secret(Helm)に適切なファイルパーミッション、保存時の暗号化、およびシークレット管理を適用してください。

疑わしい侵害への対応

トンネル認証情報、TLSキー、またはシステムの他の側面が侵害されたと疑われる場合:

  1. デプロイメントを直ちに停止してください(helm uninstallまたはdocker compose down --timeout 0)

  2. ClaudeからMCPサーバーを削除してください(Organization Settings → Connectors)

  3. APIを介してトンネルをアーカイブしてください(「Teardown」のステップ3を参照)

  4. Anthropicに連絡してください調査できるように

  5. 認証情報をローテーションしてください — 新しいトンネルを再プロビジョニングし、MCPサーバーのOAuthトークンをローテーションしてください

  6. サービスを復元する前にログを確認してください


トラブルシューティング

IP検証エラー

ゲートウェイログの"IP validation failed"は、アップストリームがallowed_ipsの外のIPに解決されたことを意味します。解決されたIPを確認してください:

シェル

dig +short docs-mcp.internal

IPが正当な場合は、ゲートウェイ設定のallowed_ipsを更新して、正しいCIDR範囲を含めてください。

トンネルが接続されていない

cloudflaredログでエラーを確認してください。一般的な原因:

  • 無効なトンネルトークン

  • ファイアウォールがCloudflareエッジへのアウトバウンドポート7844 TCP/UDPをブロックしている

Cloudflareのip範囲へのアウトバウンド接続を確認してください:198.41.192.0/19および2606:4700:a0::/44。

UDPバッファサイズ警告

cloudflaredはfailed to sufficiently increase receive buffer sizeをログに記録する場合があります。これはQUICトランスポートチューニングの問題です。quic-go UDPバッファドキュメントを参照して調整してください。

証明書エラー

TLSハンドシェイクが失敗した場合は、以下を確認してください:

  • サーバー証明書の有効期限が切れていない(90日間の有効性)

  • 証明書のSANが*.<tunnel-domain>と一致している

  • CA証明書がAPIを介してAnthropicに登録されている

  • Composeの場合、証明書ファイルはUID 65532で読み取り可能です

トンネルを通じたOAuthのルーティング(IPホワイトリストの背後にある認証サーバー)

問題:認証サーバーがソースIPホワイトリストの背後にあります。Claudeのバックエンドは、OAuth検出、クライアント登録、トークン交換のためにそれに到達する必要がありますが、Anthropicのエグレスip範囲をホワイトリストに登録したくありません。

解決策:スプリットエンドポイント設定。バックエンドからバックエンドへのOAuth呼び出しをトンネルを通じてルーティングします。ブラウザ向けの/authorizeエンドポイントは、既存のホワイトリストに登録されたホスト名に保つ。これが機能するのは、Claudeが検出メタデータからauthorization_endpointを読み取り、ユーザーのブラウザをそこにリダイレクトするためです。それ自体がそのURLに到達する必要はありません。

ステップ1:認証サーバーのゲートウェイルートを追加する

YAML — mcp-gateway.yaml

routes:
mcp: http://your-mcp-server:8080
auth: http://your-auth-server:8080

ステップ2:スプリットエンドポイント検出メタデータを提供する

認証サーバーの/.well-known/oauth-authorization-serverは以下を返す必要があります:

JSON

{
"issuer": "https://auth.<tunnel-id>.tunnel.anthropic.com",
"authorization_endpoint": "https://<your-allowlisted-host>/authorize",
"token_endpoint": "https://auth.<tunnel-id>.tunnel.anthropic.com/token",
"registration_endpoint": "https://auth.<tunnel-id>.tunnel.anthropic.com/register",
"code_challenge_methods_supported": ["S256"]
}

authorization_endpointのみが既存のホスト名を指します。その他すべてはトンネルURLを使用します。

ステップ3:MCPサーバーをトンネルissuerに指す

MCPサーバーの/.well-known/oauth-protected-resource:

JSON

{
"resource": "https://mcp.<tunnel-id>.tunnel.anthropic.com",
"authorization_servers": [
"https://auth.<tunnel-id>.tunnel.anthropic.com"
]
}


廃止

不要になったトンネルを廃止する方法。

1. トンネルIDを取得する

Helm

TUNNEL_ID=$(kubectl get secret mcp-tunnel -n mcp-tunnel \
-o jsonpath='{.data.tunnel-id}' | base64 -d)

Compose

TUNNEL_ID=$(sudo cat tunnel-data/tunnel-id)

2. デプロイメントを停止する

Helm:helm uninstall mcp-tunnel -n mcp-tunnel(注:認証情報Secretはセットアップジョブによって作成されたもので、Helmではなく、アンインストール後も残ります)
​Compose:docker compose down

3. トンネルをアーカイブする

新しいAPIトークンを生成し、完了したら取り消してください。

シェル

read -rs API_TOKEN && export API_TOKEN

curl -X POST "https://api.anthropic.com/v1/tunnels/${TUNNEL_ID}/archive" \
-H "Authorization: Bearer $API_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: mcp-tunnels-2026-02-24"

4. 保存された認証情報を削除する

Helm:kubectl delete secret mcp-tunnel -n mcp-tunnel
​Compose:sudo rm -rf tunnel-data

ヘルプを取得する

サポートについてはAnthropicアカウントチームにお問い合わせください。


付録:ゲートウェイ設定

ゲートウェイはYAMLファイルから設定を読み取ります。Docker Composeでは、このファイルをconfig/mcp-gateway.yamlとして直接作成します。Helmでは、値ファイルのgateway.config.*の下にこれらのフィールドを設定します。チャートはlisten_addr、tls、およびtunnel_domainを管理します。

フィールド

説明

デフォルト

listen_addr

リッスンするアドレスとポート

必須

log_level

ログの詳細度: debug、info、warn、error

info

shutdown_timeout

グレースフルシャットダウン中の処理中リクエストの待機時間

30s

tunnel_domain

プレフィックスルート解決用のベースドメイン

なし

tls.cert_file

TLS証明書へのパス

必須

tls.key_file

TLS秘密鍵へのパス

必須

routes

ホスト名(またはプレフィックス)からアップストリームURLへのマッピング

必須

upstream.allowed_ips

ゲートウェイが接続可能なCIDR範囲

RFC 1918プライベート範囲

upstream.disable_ip_validation

IP検証を完全に無効化

false

upstream.tls.ca_file

アップストリームTLS検証用のCAバンドル

なし

upstream.tls.include_system_cas

アップストリームTLSのシステムCAバンドルを信頼

false

https://ルートの場合、upstream.tls.ca_fileまたはupstream.tls.include_system_casの少なくとも1つを設定してください。


付録: トンネルAPI

カスタムプロビジョニングワークフローの場合、トンネルAPIを直接呼び出すことができます。すべてのリクエストにはこれらのヘッダーが必要です:

Shell

-H "Authorization: Bearer $API_TOKEN"
-H "anthropic-version: 2023-06-01"
-H "anthropic-beta: mcp-tunnels-2026-02-24"

トンネルを作成:

curl -X POST https://api.anthropic.com/v1/tunnels \
-H "Authorization: Bearer $API_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: mcp-tunnels-2026-02-24" \
-H "Content-Type: application/json" \
-d '{}'

トンネルをリスト:

curl https://api.anthropic.com/v1/tunnels \
-H "Authorization: Bearer $API_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: mcp-tunnels-2026-02-24"

CA証明書を登録:

curl -X POST "https://api.anthropic.com/v1/tunnels/${TUNNEL_ID}/certificates" \
-H "Authorization: Bearer $API_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: mcp-tunnels-2026-02-24" \
-H "Content-Type: application/json" \
-d "{\"ca_certificate_pem\": $(jq -Rs . < ca.crt)}"

CA証明書とサーバー証明書に含める必要があるものについては、付録: 証明書要件を参照してください。

CA証明書をリスト:

curl "https://api.anthropic.com/v1/tunnels/${TUNNEL_ID}/certificates" \
-H "Authorization: Bearer $API_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: mcp-tunnels-2026-02-24"

CA証明書を失効:

curl -X POST "https://api.anthropic.com/v1/tunnels/${TUNNEL_ID}/certificates/${CERT_ID}/revoke" \
-H "Authorization: Bearer $API_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: mcp-tunnels-2026-02-24"

トンネルトークンを表示:

curl -X POST "https://api.anthropic.com/v1/tunnels/${TUNNEL_ID}/reveal_token" \
-H "Authorization: Bearer $API_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: mcp-tunnels-2026-02-24"

トンネルトークンをローテーション:

curl -X POST "https://api.anthropic.com/v1/tunnels/${TUNNEL_ID}/rotate_token" \
-H "Authorization: Bearer $API_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: mcp-tunnels-2026-02-24"

トンネルをアーカイブ:

curl -X POST "https://api.anthropic.com/v1/tunnels/${TUNNEL_ID}/archive" \
-H "Authorization: Bearer $API_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: mcp-tunnels-2026-02-24"


付録: 証明書要件

セットアップバイナリ(setup init / setup renew-cert)を使用する場合、準拠した証明書が自動的に生成されるため、このセクションをスキップできます。これらの要件は、独自のPKIを通じて証明書を発行する場合に適用されます。

CA証明書 — POST /v1/tunnels/{id}/certificates経由でアップロード。トンネルは最大2つのアクティブなCA証明書を同時に保持でき、ダウンタイムなしでローテーションが可能です。

  • PEM形式、単一証明書、最大8 KB

  • BasicConstraints拡張機能(CA:TRUE付き)、重大としてマーク

  • SubjectKeyIdentifier拡張機能が存在

  • KeyUsageにkeyCertSignを含む

  • 有効期間内

  • RSA 2048ビット以上、またはECDSA P-256以上。SHA-256以上の署名

サーバー証明書—内部TLSハンドシェイク中にゲートウェイによって提示されます。Anthropicにアップロードされません。

  • トンネルに登録されているCAによって直接署名

  • AuthorityKeyIdentifier拡張機能が存在し、CAのSubjectKeyIdentifierと一致

  • SANに<route>.<tunnel-domain>と一致するDNS名を含む(ワイルドカード*.<tunnel-domain>はすべてのルートをカバー)

  • ExtendedKeyUsage拡張機能が存在する場合、serverAuthを含む

  • 有効期間内

  • RSA 2048ビット以上、またはECDSA P-256以上。SHA-256以上の署名

参考:セットアップバイナリはECDSA P-256 CA(5年有効)とワイルドカードSAN付きRSA 4096ビットサーバー証明書(90日有効)を生成します。


付録:セットアップCLIリファレンス

setupバイナリはdocker compose run --rm setup <subcommand>(Compose)またはHelmフックおよびCronJob(Kubernetes)としてゲートウェイコンテナ内で実行されます。

setup init—Tunnels APIを介してトンネルを作成し、CAとサーバー証明書を生成し、CAを登録し、すべての出力を書き込みます。

フラグ

説明

デフォルト

--api-url

Anthropic APIベースURL。API_URLからも読み込まれます。

必須

--api-token

トンネルスコープ付きAPIトークン。API_TOKENからも読み込まれます。

必須

--output

出力先:dir:/pathまたはk8s-secret:NAME

k8s-secret:mcp-gateway

--cert-duration

サーバー証明書の有効期間

2160h(90日)

--token-version

変更検出文字列。新しい値はトンネルトークンのローテーションをトリガーします

なし

setup renew-cert—保存されたCAによって署名された新しいサーバー証明書を発行します。APIコールは不要です。

フラグ

説明

デフォルト

--output

出力先:dir:/pathまたはk8s-secret:NAME

k8s-secret:mcp-gateway

--cert-duration

新しい証明書の有効期間

2160h(90日)

--renew-before

既存の証明書の有効期限までの時間がこれより長い場合はスキップ

0(常に更新)

--renew-before=720hを設定すると、30日以上残っている場合、このコマンドは何もしません。スケジュール実行に適しています。

こちらの回答で解決しましたか?