---
title: MCPトンネル
url: https://platform.claude.com/docs/ja/agents-and-tools/mcp-tunnels/overview
description: インバウンドポートを開放したり、サービスをパブリックインターネットに公開したりすることなく、プライベートネットワーク内で稼働するMCPサーバーにClaudeを安全に接続します。
---

MCPトンネルを使用すると、プライベートネットワーク内で稼働する「Model Context Protocol」、すなわちMCPのサーバーにClaudeを接続できます。トラフィックはアウトバウンド専用の接続を経由して流れるため、インバウンドのファイアウォールポートを開放したり、サービスをパブリックインターネットに公開したり、オリジン側でAnthropicのIP範囲を許可リストに登録したりする必要はありません。

<Note>
  MCPトンネルはリサーチプレビュー段階です。試用するには[アクセスをリクエスト](https://claude.com/form/mcp-tunnels)してください。MCPトンネルは、稼働時間、サポート、または継続性に関する一切の保証なしに「現状のまま」提供され、基盤となるトランスポートの可用性について何の保証も行わないサードパーティのネットワークプロバイダー（Cloudflare）に依存しています。Anthropicは、いつでもMCPトンネルを変更または提供終了する場合があります。
</Note>

ゼロデータ保持およびHIPAA BAAの適格性については、[APIとデータ保持](https://platform.claude.com/docs/ja/manage-claude/api-and-data-retention#feature-eligibility)を参照してください。

## 仕組み

[トンネルスタック](https://platform.claude.com/docs/ja/agents-and-tools/mcp-tunnels/concepts#components)は、ネットワーク内で稼働する2つのコンポーネントで構成されます。

* **[cloudflared](https://platform.claude.com/docs/ja/agents-and-tools/mcp-tunnels/concepts#components):** Cloudflareのオープンソースのトンネルコネクタです。[トンネルエッジ](https://platform.claude.com/docs/ja/agents-and-tools/mcp-tunnels/concepts#components)へのアウトバウンド専用接続を開始し、Anthropicからプロキシへ暗号化されたトラフィックを運びます。
* **[プロキシ](https://platform.claude.com/docs/ja/agents-and-tools/mcp-tunnels/concepts#components):** Anthropicのルーティングコンポーネントです。[内側のTLS](https://platform.claude.com/docs/ja/agents-and-tools/mcp-tunnels/concepts#components)を終端し、アップストリームのIPが許可された範囲内にあることを検証し、ホスト名に基づいて各リクエストを正しい[アップストリームMCPサーバー](https://platform.claude.com/docs/ja/agents-and-tools/mcp-tunnels/concepts#components)にルーティングします。

公開する各MCPサーバーには、トンネルドメイン配下のホスト名（例：`docs.<your-tunnel-domain>`）が割り当てられます。これらのホスト名は、Claude ConsoleでManaged Agentセッションにアタッチするか、[MCPコネクタ](https://platform.claude.com/docs/ja/agents-and-tools/mcp-connector)を通じてMessages APIに渡します。

## 前提条件

デプロイする前に、以下が揃っていることを確認してください。

* デプロイ先：Kubernetesクラスター、またはDockerとDocker Composeを備えたVM。

* トンネル。Claude Consoleで作成するか（[トンネルを作成する](https://platform.claude.com/docs/ja/agents-and-tools/mcp-tunnels/console#create-a-tunnel)を参照）、APIを通じて作成します。Helmチャートのセットアップフックでも、インストール時にトンネルを作成できます。

* スタックがTunnels APIに対して認証する手段。次のいずれかを選択します。

  * **[プログラムによるアクセス](https://platform.claude.com/docs/ja/agents-and-tools/mcp-tunnels/concepts#credential-provisioning)（推奨）。** トンネル作成時に[Workload Identity Federation](https://platform.claude.com/docs/ja/manage-claude/workload-identity-federation)を設定します。スタックはIDプロバイダーから短期間有効なAPIトークンを発行し、トンネルトークンを取得し、CA証明書を自動的に生成して登録します。フェデレーションルールを管理する権限、登録済みのOIDC発行者、および`workspace:manage_tunnels`スコープを持つフェデレーションルールが必要です。
  * **[手動](https://platform.claude.com/docs/ja/agents-and-tools/mcp-tunnels/concepts#credential-provisioning)。** 静的な認証情報を自分で用意します。Consoleから取得したトンネルトークンと、Consoleに登録したCAによって署名されたサーバー証明書です。[接続の詳細を取得する](https://platform.claude.com/docs/ja/agents-and-tools/mcp-tunnels/console#get-the-connection-details)および[CA証明書を追加する](https://platform.claude.com/docs/ja/agents-and-tools/mcp-tunnels/console#add-a-ca-certificate)を参照してください。

* プライベートネットワーク内で稼働する1つ以上のMCPサーバー。例については[リモートMCPサーバー](https://platform.claude.com/docs/ja/agents-and-tools/remote-mcp-servers)を参照してください。

* [ネットワーク要件](https://platform.claude.com/docs/ja/agents-and-tools/mcp-tunnels/overview#network-requirements)に記載されているアウトバウンド接続。

### ネットワーク要件

| コンポーネント       | 宛先                                             | ポート / プロトコル    | 使用タイミング                |
| ------------- | ---------------------------------------------- | -------------- | ---------------------- |
| セットアップコンポーネント | `api.anthropic.com`                            | 443 TCP        | プロビジョニングおよびトークンローテーション |
| cloudflared   | トンネルエッジ（`198.41.192.0/19`、`2606:4700:a0::/44`） | 7844 TCPおよびUDP | 実行時                    |
| プロキシ          | アップストリームMCPサーバー                                | 設定に応じて         | 実行時                    |

## セキュリティモデル

### セキュリティレイヤー

3つの独立したレイヤーがすべてのリクエストを保護します。

| レイヤー                                     | 防御対象                               |
| ---------------------------------------- | ---------------------------------- |
| Anthropicとトランスポートプロバイダー間の外側のmTLS（IP検証付き） | 認可されていないクライアントによるトンネルへの到達          |
| Anthropicのバックエンドからプロキシへの内側のTLS           | トランスポートプロバイダーやネットワーク中継者によるペイロードの検査 |
| 各MCPサーバーでのOAuth                          | 認証済みトンネルトラフィックによるMCPツールの不正使用       |

トンネルのトランスポートはCloudflareのネットワーク上で動作します。プロキシは、お客様だけが保持する証明書を使用して内側のTLSを終端するため、Cloudflareはリクエストやレスポンスのペイロードを読み取ることができません。AnthropicはCA証明書が登録されるまでトンネルに接続しないため、ペイロードはCloudflareのネットワークを通過する際に常に暗号化されています。ただし、Cloudflareは接続メタデータを受け取ります。[トランスポートプロバイダーが観測できる情報](https://platform.claude.com/docs/ja/agents-and-tools/mcp-tunnels/overview#what-the-transport-provider-can-observe)を参照してください。

### 責任共有モデル

| Anthropicの担当範囲                           | お客様の組織の担当範囲                                                         |
| ---------------------------------------- | ------------------------------------------------------------------- |
| トンネルのアクセス制御                              | トンネルを通過するすべてのコンテンツとトラフィック、および適用されるサードパーティの利用規約（Cloudflareのものを含む）の遵守 |
| プロキシに接続する前のCA証明書の検証                      | これらのページに記載されたデプロイガイダンスの遵守                                           |
| Claudeがお客様の組織が所有するトンネルにのみリクエストを送信することの保証 | トンネルトークンとTLS秘密鍵の保護                                                  |
|                                          | サーバー証明書の管理と有効期限前の更新                                                 |
|                                          | 各MCPサーバーでのOAuthの設定                                                  |
|                                          | プロキシおよびMCPサーバーへのネットワークアクセスの制限                                       |
|                                          | 侵害が疑われる場合のAnthropicへの通知                                             |

<Warning>
  攻撃者がトンネルトークン**および**TLS秘密鍵のいずれかを入手した場合、プロキシになりすましてMCPリクエストのペイロードを読み取る可能性があります。両方を高価値のシークレットとして扱ってください。強化ガイダンスについては[MCPトンネルのセキュリティ](https://platform.claude.com/docs/ja/agents-and-tools/mcp-tunnels/security)を参照してください。
</Warning>

### トランスポートプロバイダーが観測できる情報

Cloudflareはアウトバウンドのトランスポートを提供します。CloudflareはMCPのリクエストやレスポンスのペイロードを読み取ることはできませんが、以下の接続メタデータを受け取ります。

* cloudflaredを実行しているホストのイグレスIPアドレス
* cloudflaredホストのフィンガープリント
* 接続のタイミングとバイト量
* トンネルに割り当てられた`*.tunnel.anthropic.com`サブドメイン

AnthropicとCloudflareの契約により、Cloudflareによるこのテレメトリの使用は制限されています。Cloudflareは、このリサーチプレビューにおいてサブプロセッサーとして機能します。

## トンネルをデプロイする

MCPトンネルを初めて使用する場合は、本番デプロイを設定する前に、クイックスタートから始めてローカルで動作するトンネルを用意してください。

<CardGroup cols={2}>
  <Card title="クイックスタート" icon="rocket" href="https://platform.claude.com/docs/ja/agents-and-tools/mcp-tunnels/quickstart">
    動作するトンネルへの最短経路：サンプルMCPサーバーを使用したDocker Compose。
  </Card>

  <Card title="Helmでデプロイする" icon="stack" href="https://platform.claude.com/docs/ja/agents-and-tools/mcp-tunnels/deploy-helm">
    AnthropicのHelmチャートを使用してKubernetesクラスターにインストールします。
  </Card>

  <Card title="Docker Composeでデプロイする" icon="cube" href="https://platform.claude.com/docs/ja/agents-and-tools/mcp-tunnels/deploy-compose">
    Docker Composeを使用してVMにインストールします。
  </Card>
</CardGroup>

選択の基準：

* **デプロイ先**

  * Kubernetesにデプロイする場合は**Helm**。
  * 単一ホストまたはローカルテストの場合は**Docker Compose**。

* **セットアップ時の認証**

  * Kubernetesクラスター、クラウドIAM、SPIFFEなどのOIDC IDプロバイダーがある場合は**プログラムによるアクセス**（Workload Identity Federation経由）。
  * それがない場合、またはテスト中の場合は**手動の認証情報**。

## トンネル経由のMCPサーバーを使用する

トンネルがアクティブになると（アクティブなCA証明書があり、トンネルスタックが接続されている状態）、アップストリームMCPサーバーはClaude Managed AgentsおよびMessages APIから到達可能になります。

<Note>
  Consoleを通じて作成されたMCPトンネルは、claude.aiのコネクタとしては利用できません。
</Note>

どちらの場合も、トンネルは暗号化されたトラフィックをMCPサーバーまで運びますが、MCPサーバーに対する認証は行いません。アップストリームMCPサーバーが独自の認証（OAuth、ベアラートークン）を必要とする場合は、他のMCPサーバーと同じ方法で指定してください。これはトンネルとは独立しています。

### Managed Agents（Console）

1. **Managed Agents > Sessions**でセッションを作成し、MCPサーバーリストを編集できるように**Create new agent**を選択します。
2. **+ MCP Server**をクリックしてドロップダウンを開きます。セッションのワークスペース内にあり、少なくとも1つのアクティブな証明書を持つトンネルが、パブリックコネクタカタログの上、リストの先頭に表示されます。
3. トンネルを選択し、プロキシが特定のMCPサーバーにルーティングする**Subdomain**と、アップストリームMCPサーバーが期待する**Path**を指定します。**Resolves to**の行に正確なURLが表示されます。

### Messages API

他のリモートMCPサーバーと同じように、アップストリームMCPサーバーのURLを`mcp_servers`配列で渡します。リクエストボディと`anthropic-beta`ヘッダーは標準の[MCPコネクタ](https://platform.claude.com/docs/ja/agents-and-tools/mcp-connector)の形式に従い、トンネル固有なのは`url`のみです。次の例では、MCPコネクタの`mcp-client`ベータヘッダーを使用しています。これは、[Tunnels API](https://platform.claude.com/docs/ja/agents-and-tools/mcp-tunnels/reference)で使用される`mcp-tunnels`ベータとは別のものです。リクエストは、トンネルを作成したワークスペースで行ってください。そのためには、そのワークスペース用のAPIキーを使用します。キーが複数のワークスペースにアクセスできる場合は、[`anthropic-workspace-id`ヘッダー](https://platform.claude.com/docs/ja/manage-claude/authentication#select-a-workspace)にそのワークスペースを設定します。

URLのホストは`<subdomain>.<your-tunnel-domain>`です。パスはトンネルではなく、アップストリームMCPサーバーによって決まります。FastMCPの`streamable-http`トランスポートは`/mcp`で提供されますが、他のサーバーでは`/`やカスタムパスが使用される場合があります（サーバーのドキュメントを確認してください）。プロキシはパスを変更せずにそのまま転送します。

<CodeGroup>
  ```bash cURL
  curl https://api.anthropic.com/v1/messages \
    -H "Content-Type: application/json" \
    -H "X-API-Key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: mcp-client-2025-11-20" \
    -d '{
      "model": "claude-opus-5-5",
      "max_tokens": 1000,
      "messages": [{"role": "user", "content": "Use the hello tool to greet tunnel."}],
      "mcp_servers": [
        {
          "type": "url",
          "url": "https://echo.YOUR_TUNNEL_DOMAIN_HERE/mcp",
          "name": "echo"
        }
      ],
      "tools": [{"type": "mcp_toolset", "mcp_server_name": "echo"}]
    }'
  ```

  ```bash CLI
  ant beta:messages create --beta mcp-client-2025-11-20 <<'YAML'
  model: claude-opus-5-5
  max_tokens: 1000
  messages:
    - role: user
      content: Use the hello tool to greet tunnel.
  mcp_servers:
    - type: url
      url: https://echo.YOUR_TUNNEL_DOMAIN_HERE/mcp
      name: echo
  tools:
    - type: mcp_toolset
      mcp_server_name: echo
  YAML
  ```

  ```python Python
  client = anthropic.Anthropic()

  response = client.beta.messages.create(
      model="claude-opus-5-5",
      max_tokens=1000,
      messages=[{"role": "user", "content": "Use the hello tool to greet tunnel."}],
      mcp_servers=[
          {
              "type": "url",
              "url": "https://echo.YOUR_TUNNEL_DOMAIN_HERE/mcp",
              "name": "echo",
          }
      ],
      tools=[{"type": "mcp_toolset", "mcp_server_name": "echo"}],
      betas=["mcp-client-2025-11-20"],
  )

  print(response)
  ```

  ```typescript TypeScript
  const anthropic = new Anthropic();

  const response = await anthropic.beta.messages.create({
    model: "claude-opus-5-5",
    max_tokens: 1000,
    messages: [
      {
        role: "user",
        content: "Use the hello tool to greet tunnel."
      }
    ],
    mcp_servers: [
      {
        type: "url",
        url: "https://echo.YOUR_TUNNEL_DOMAIN_HERE/mcp",
        name: "echo"
      }
    ],
    tools: [
      {
        type: "mcp_toolset",
        mcp_server_name: "echo"
      }
    ],
    betas: ["mcp-client-2025-11-20"]
  });

  console.log(response);
  ```

  ```csharp C#
  AnthropicClient client = new();

  var parameters = new MessageCreateParams
  {
      Model = Messages::Model.ClaudeOpus5_5,
      MaxTokens = 1000,
      Messages = new List<BetaMessageParam>
      {
          new() { Role = Role.User, Content = "Use the hello tool to greet tunnel." }
      },
      McpServers = new List<BetaRequestMcpServerUrlDefinition>
      {
          new()
          {
              Url = "https://echo.YOUR_TUNNEL_DOMAIN_HERE/mcp",
              Name = "echo"
          }
      },
      Tools = new List<BetaToolUnion>
      {
          new BetaMcpToolset("echo")
      },
      Betas = ["mcp-client-2025-11-20"]
  };

  var message = await client.Beta.Messages.Create(parameters);
  Console.WriteLine(message);
  ```

  ```go Go
  client := anthropic.NewClient()

  response, err := client.Beta.Messages.New(context.TODO(), anthropic.BetaMessageNewParams{
  	Model:     anthropic.ModelClaudeOpus5_5,
  	MaxTokens: 1000,
  	Messages: []anthropic.BetaMessageParam{
  		anthropic.NewBetaUserMessage(anthropic.NewBetaTextBlock("Use the hello tool to greet tunnel.")),
  	},
  	MCPServers: []anthropic.BetaRequestMCPServerURLDefinitionParam{
  		{
  			URL:  "https://echo.YOUR_TUNNEL_DOMAIN_HERE/mcp",
  			Name: "echo",
  		},
  	},
  	Tools: []anthropic.BetaToolUnionParam{
  		{OfMCPToolset: &anthropic.BetaMCPToolsetParam{
  			MCPServerName: "echo",
  		}},
  	},
  	Betas: []anthropic.AnthropicBeta{
  		anthropic.AnthropicBetaMCPClient2025_11_20,
  	},
  })
  if err != nil {
  	log.Fatal(err)
  }
  fmt.Println(response)
  ```

  ```java Java
  import com.anthropic.models.beta.messages.BetaMcpToolset;
  // ...
  import com.anthropic.models.beta.messages.BetaRequestMcpServerUrlDefinition;
  // ...

  void main() {
      AnthropicClient client = AnthropicOkHttpClient.fromEnv();

      MessageCreateParams params = MessageCreateParams.builder()
          .model(Model.CLAUDE_OPUS_5_5)
          .maxTokens(1000L)
          .addUserMessage("Use the hello tool to greet tunnel.")
          .addMcpServer(BetaRequestMcpServerUrlDefinition.builder()
              .url("https://echo.YOUR_TUNNEL_DOMAIN_HERE/mcp")
              .name("echo")
              .build())
          .addTool(BetaMcpToolset.builder()
              .mcpServerName("echo")
              .build())
          .addBeta("mcp-client-2025-11-20")
          .build();

      BetaMessage response = client.beta().messages().create(params);
      IO.println(response);
  }
  ```

  ```php PHP
  $client = new Client();

  $message = $client->beta->messages->create(
      maxTokens: 1000,
      messages: [
          ['role' => 'user', 'content' => 'Use the hello tool to greet tunnel.']
      ],
      model: 'claude-opus-5-5',
      mcpServers: [
          [
              'type' => 'url',
              'url' => 'https://echo.YOUR_TUNNEL_DOMAIN_HERE/mcp',
              'name' => 'echo',
          ],
      ],
      tools: [
          [
              'type' => 'mcp_toolset',
              'mcpServerName' => 'echo',
          ],
      ],
      betas: ['mcp-client-2025-11-20'],
  );

  echo $message;
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  response = client.beta.messages.create(
    model: "claude-opus-5-5",
    max_tokens: 1000,
    messages: [
      { role: "user", content: "Use the hello tool to greet tunnel." }
    ],
    mcp_servers: [
      {
        type: "url",
        url: "https://echo.YOUR_TUNNEL_DOMAIN_HERE/mcp",
        name: "echo"
      }
    ],
    tools: [
      {
        type: "mcp_toolset",
        mcp_server_name: "echo"
      }
    ],
    betas: ["mcp-client-2025-11-20"]
  )

  puts response
  ```
</CodeGroup>

アップストリームMCPサーバーへの認証（`authorization_token`）やその他の`mcp_servers`オプションについては、[MCPコネクタ](https://platform.claude.com/docs/ja/agents-and-tools/mcp-connector)を参照してください。

## 次のステップ

<CardGroup cols={2}>
  <Card title="セキュリティ" icon="lock" href="https://platform.claude.com/docs/ja/agents-and-tools/mcp-tunnels/security">
    強化ガイダンス、認証情報のローテーション、侵害への対応。
  </Card>

  <Card title="トラブルシューティング" icon="wrench" href="https://platform.claude.com/docs/ja/agents-and-tools/mcp-tunnels/troubleshooting">
    接続、TLS、ルーティングの問題を診断します。
  </Card>

  <Card title="リファレンス" icon="book" href="https://platform.claude.com/docs/ja/agents-and-tools/mcp-tunnels/reference">
    プロキシ設定フィールド、Tunnels API、証明書の要件、セットアップコンポーネント。
  </Card>

  <Card title="MCPコネクタ" icon="link" href="https://platform.claude.com/docs/ja/agents-and-tools/mcp-connector">
    Messages APIからトンネル経由のサーバーを使用します。
  </Card>
</CardGroup>
