---
title: MCP 通道
url: https://platform.claude.com/docs/zh-TW/agents-and-tools/mcp-tunnels/overview
description: 安全地將 Claude 連接到在您私有網路中執行的 MCP 伺服器，無需開放入站連接埠或將服務暴露於公共網際網路。
---

MCP 通道（MCP tunnels）讓您將 Claude 連接到在您私有網路內執行的「Model Context Protocol」，即 MCP 伺服器。流量透過僅限出站的連線傳輸，因此您無需開放入站防火牆連接埠、將服務暴露於公共網際網路，或在您的來源端將 Anthropic 的 IP 範圍加入允許清單。

<Note>
  MCP 通道目前處於研究預覽階段。如需試用，請[申請存取權](https://claude.com/form/mcp-tunnels)。MCP 通道依「現狀」提供，不附帶任何正常運作時間、支援或服務延續性的承諾。此外，MCP 通道依賴第三方網路供應商（Cloudflare），而該供應商不對底層傳輸做任何可用性承諾。Anthropic 可能隨時修改或停止提供 MCP 通道。
</Note>

關於零資料保留（Zero Data Retention）與 HIPAA BAA 資格，請參閱 [API 與資料保留](https://platform.claude.com/docs/zh-TW/manage-claude/api-and-data-retention#feature-eligibility)。

## 運作方式

[通道堆疊（tunnel stack）](https://platform.claude.com/docs/zh-TW/agents-and-tools/mcp-tunnels/concepts#components)由在您網路內執行的兩個元件組成：

* **[cloudflared](https://platform.claude.com/docs/zh-TW/agents-and-tools/mcp-tunnels/concepts#components)：** Cloudflare 的開源通道連接器。它向[通道邊緣（tunnel edge）](https://platform.claude.com/docs/zh-TW/agents-and-tools/mcp-tunnels/concepts#components)發起僅限出站的連線，並將加密流量從 Anthropic 傳送到您的代理。
* **[代理（Proxy）](https://platform.claude.com/docs/zh-TW/agents-and-tools/mcp-tunnels/concepts#components)：** Anthropic 的路由元件。它終止[內層 TLS（inner TLS）](https://platform.claude.com/docs/zh-TW/agents-and-tools/mcp-tunnels/concepts#components)、驗證上游 IP 是否落在允許的範圍內，並根據主機名稱將每個請求路由到正確的[上游 MCP 伺服器（upstream MCP server）](https://platform.claude.com/docs/zh-TW/agents-and-tools/mcp-tunnels/concepts#components)。

您公開的每個 MCP 伺服器都會在您的通道網域下取得一個主機名稱（例如 `docs.<your-tunnel-domain>`）。您可以在 Claude Console 中將這些主機名稱附加到 Managed Agent 工作階段，或透過 [MCP 連接器](https://platform.claude.com/docs/zh-TW/agents-and-tools/mcp-connector)將它們傳遞給 Messages API。

## 先決條件

在部署之前，請確保您具備：

* 部署目標：Kubernetes 叢集，或安裝了 Docker 與 Docker Compose 的 VM。

* 一個通道。在 Claude Console 中建立（請參閱[建立通道](https://platform.claude.com/docs/zh-TW/agents-and-tools/mcp-tunnels/console#create-a-tunnel)）或透過 API 建立；Helm chart 的設定掛鉤（setup hook）也可以在安裝期間為您建立一個。

* 讓您的堆疊向 Tunnels API 進行驗證的方式。請擇一：

  * **[程式化存取（Programmatic access）](https://platform.claude.com/docs/zh-TW/agents-and-tools/mcp-tunnels/concepts#credential-provisioning)（建議）。** 在建立通道時設定 [Workload Identity Federation（工作負載身分聯合）](https://platform.claude.com/docs/zh-TW/manage-claude/workload-identity-federation)。您的堆疊會從您的身分提供者鑄造短期 API 權杖、擷取通道權杖，並自動產生與註冊 CA 憑證。需要管理聯合規則的權限、已註冊的 OIDC 簽發者，以及具有 `workspace:manage_tunnels` 範圍的聯合規則。
  * **[手動（Manual）](https://platform.claude.com/docs/zh-TW/agents-and-tools/mcp-tunnels/concepts#credential-provisioning)。** 自行提供靜態憑證：來自 Console 的通道權杖，以及由您在該處註冊的 CA 所簽署的伺服器憑證。請參閱[取得連線詳細資訊](https://platform.claude.com/docs/zh-TW/agents-and-tools/mcp-tunnels/console#get-the-connection-details)與[新增 CA 憑證](https://platform.claude.com/docs/zh-TW/agents-and-tools/mcp-tunnels/console#add-a-ca-certificate)。

* 一個或多個在您私有網路中執行的 MCP 伺服器。範例請參閱[遠端 MCP 伺服器](https://platform.claude.com/docs/zh-TW/agents-and-tools/remote-mcp-servers)。

* [網路需求](https://platform.claude.com/docs/zh-TW/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 伺服器                                | 依設定            | 執行期間    |

## 安全模型

### 安全層

三個獨立的層保護每個請求：

| 層                                   | 防護對象                  |
| ----------------------------------- | --------------------- |
| Anthropic 與傳輸供應商之間的外層 mTLS，搭配 IP 驗證 | 未經授權的用戶端連線到通道         |
| 從 Anthropic 後端到您代理的內層 TLS           | 傳輸供應商或任何網路中介者檢視承載內容   |
| 每個 MCP 伺服器上的 OAuth                  | 已驗證的通道流量未經授權使用 MCP 工具 |

通道傳輸在 Cloudflare 的網路上執行。由於代理使用只有您持有的憑證來終止內層 TLS，Cloudflare 無法讀取請求或回應的承載內容。Anthropic 在 CA 憑證註冊之前不會連線到通道，因此承載內容在穿越 Cloudflare 網路時始終是加密的。Cloudflare 確實會收到連線中繼資料；請參閱[傳輸供應商可觀察到的內容](https://platform.claude.com/docs/zh-TW/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/zh-TW/agents-and-tools/mcp-tunnels/security)。
</Warning>

### 傳輸供應商可觀察到的內容

Cloudflare 提供出站傳輸。它無法讀取 MCP 請求或回應的承載內容，但確實會收到以下連線中繼資料：

* 執行 cloudflared 的主機的出口 IP 位址
* cloudflared 主機指紋
* 連線時間與位元組流量
* 指派給您通道的 `*.tunnel.anthropic.com` 子網域

Anthropic 與 Cloudflare 的協議限制了 Cloudflare 對此遙測資料的使用。Cloudflare 在此研究預覽中擔任次級處理者（subprocessor）。

## 部署通道

如果您是 MCP 通道的新手，請從快速入門開始，先在本機取得一個可運作的通道，再設定正式環境部署。

<CardGroup cols={2}>
  <Card title="快速入門" icon="rocket" href="https://platform.claude.com/docs/zh-TW/agents-and-tools/mcp-tunnels/quickstart">
    取得可運作通道的最短路徑：搭配範例 MCP 伺服器的 Docker Compose。
  </Card>

  <Card title="使用 Helm 部署" icon="stack" href="https://platform.claude.com/docs/zh-TW/agents-and-tools/mcp-tunnels/deploy-helm">
    使用 Anthropic Helm chart 安裝到 Kubernetes 叢集。
  </Card>

  <Card title="使用 Docker Compose 部署" icon="cube" href="https://platform.claude.com/docs/zh-TW/agents-and-tools/mcp-tunnels/deploy-compose">
    使用 Docker Compose 安裝到 VM。
  </Card>
</CardGroup>

如何選擇：

* **部署目標**

  * 部署到 Kubernetes 時使用 **Helm**。
  * 單一主機或本機測試時使用 **Docker Compose**。

* **設定時的驗證方式**

  * 當您擁有 OIDC 身分提供者（例如 Kubernetes 叢集、雲端 IAM 或 SPIFFE）時，使用**程式化存取**（透過 Workload Identity Federation）。
  * 當您沒有，或正在測試時，使用**手動憑證**。

## 使用通道化的 MCP 伺服器

一旦您的通道處於啟用狀態（它具有有效的 CA 憑證且您的通道堆疊已連線），即可從 Claude Managed Agents 與 Messages API 存取上游 MCP 伺服器。

<Note>
  透過 Console 建立的 MCP 通道無法在 claude.ai 中作為連接器使用。
</Note>

在這兩種情況下，通道會將加密流量傳送到您的 MCP 伺服器，但不會向其進行驗證。如果上游 MCP 伺服器需要自己的驗證（OAuth、bearer 權杖），請以與任何其他 MCP 伺服器相同的方式提供；這與通道無關。

### Managed Agents（Console）

1. 在 Claude Console 的 [Sessions](https://platform.claude.com/sessions) 頁面（`platform.claude.com/sessions`）上，建立一個工作階段並選擇 **Create new agent**，以便編輯 MCP 伺服器清單。
2. 點擊 **+ MCP Server** 並開啟下拉選單。工作階段所屬工作區中至少具有一個有效憑證的通道會顯示在清單頂部，位於公共連接器目錄之上。
3. 選擇通道，並提供您的代理路由到特定 MCP 伺服器的 **Subdomain**，以及上游 MCP 伺服器預期的 **Path**。**Resolves to** 行會顯示確切的 URL。

### Messages API

在 `mcp_servers` 陣列中傳遞上游 MCP 伺服器的 URL，方式與任何其他遠端 MCP 伺服器相同。請求主體與 `anthropic-beta` 標頭遵循標準的 [MCP 連接器](https://platform.claude.com/docs/zh-TW/agents-and-tools/mcp-connector)格式；只有 `url` 是通道專屬的。以下範例使用 MCP 連接器的 `mcp-client` beta 標頭，它與 [Tunnels API](https://platform.claude.com/docs/zh-TW/agents-and-tools/mcp-tunnels/reference) 所使用的 `mcp-tunnels` beta 是分開的。請在建立通道的工作區中發出請求，方法是使用該工作區的 API 金鑰，或者如果您的金鑰可存取多個工作區，則將 [`anthropic-workspace-id` 標頭](https://platform.claude.com/docs/zh-TW/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/zh-TW/agents-and-tools/mcp-connector)。

## 後續步驟

<CardGroup cols={2}>
  <Card title="安全性" icon="lock" href="https://platform.claude.com/docs/zh-TW/agents-and-tools/mcp-tunnels/security">
    強化指引、憑證輪替與入侵應對。
  </Card>

  <Card title="疑難排解" icon="wrench" href="https://platform.claude.com/docs/zh-TW/agents-and-tools/mcp-tunnels/troubleshooting">
    診斷連線、TLS 與路由問題。
  </Card>

  <Card title="參考資料" icon="book" href="https://platform.claude.com/docs/zh-TW/agents-and-tools/mcp-tunnels/reference">
    代理設定欄位、Tunnels API、憑證需求與設定元件。
  </Card>

  <Card title="MCP 連接器" icon="link" href="https://platform.claude.com/docs/zh-TW/agents-and-tools/mcp-connector">
    從 Messages API 使用通道化的伺服器。
  </Card>
</CardGroup>
