MCP 通道快速入門
使用本機 Docker Compose 部署,將 Claude 連接至私有 MCP 伺服器。
本快速入門將帶您從零開始,直到 Claude 能透過「tunnel」(通道)呼叫私有 MCP 伺服器。它使用 Docker Compose 搭配手動憑證佈建(credential provisioning),這是進行本機測試的最短路徑。若要進行正式環境部署,請參閱使用 Helm 部署或使用 Docker Compose 部署。
您將建構的內容
一個由兩個容器組成的通道堆疊(proxy(代理)與 cloudflared),外加一個與其並行運作的範例 MCP 伺服器。當一切都啟動後,即使沒有任何服務在公開連接埠上監聽,Claude 仍可透過 https://echo.<your-tunnel-domain>/mcp 存取該範例伺服器。
您需要準備的項目
- 在一台具備對外網際網路存取能力的機器上安裝 Docker 與 Docker Compose。
- 在 Claude Console 中擁有可管理 MCP 通道的角色。請參閱 Console 指南的先決條件。
- OpenSSL 1.1.1 或更新版本。macOS 與大多數 Linux 發行版已預先安裝;在 Windows 上需另行安裝(
openssl執行檔必須位於您的PATH中)。
建立通道
在 Claude Console 側邊欄中,前往 Manage > MCP tunnels 並點擊 New tunnel。為其命名。將 Set up programmatic access 保持關閉;本快速入門使用手動憑證佈建。
建立完成後,開啟該通道。從 Connection 區段複製兩個值:
- Domain(格式類似
abcd1234.tunnel.anthropic.com) - Token(點擊眼睛圖示,然後複製)
- Domain(格式類似
設定部署目錄
mkdir -p mcp-tunnel/{config,data} cd mcp-tunnel export TUNNEL_DOMAIN=YOUR_TUNNEL_DOMAIN_HERE # from step 1 export TUNNEL_TOKEN='eyJ...' # from step 1產生 CA 與伺服器憑證
proxy 會使用由您所控制的 CA 簽署的憑證來終止 inner TLS(內層 TLS)。請產生這兩者:
openssl req -x509 -newkey rsa:2048 -nodes \ -keyout data/ca.key -out data/ca.crt \ -days 3650 -subj "/CN=mcp-tunnel-ca" \ -addext "basicConstraints=critical,CA:TRUE" \ -addext "keyUsage=critical,keyCertSign,cRLSign" \ -addext "subjectKeyIdentifier=hash" cat > data/tls.ext <<EOF subjectAltName = DNS:${TUNNEL_DOMAIN},DNS:*.${TUNNEL_DOMAIN} authorityKeyIdentifier = keyid,issuer extendedKeyUsage = serverAuth EOF openssl req -newkey rsa:2048 -nodes \ -keyout data/tls.key -out /tmp/server.csr \ -subj "/CN=${TUNNEL_DOMAIN}" openssl x509 -req -in /tmp/server.csr \ -CA data/ca.crt -CAkey data/ca.key -CAcreateserial \ -out data/tls.crt -days 90 -extfile data/tls.ext chmod 644 data/tls.key回到 Console,在通道詳細資訊頁面上,點擊 Add certificate 並上傳
data/ca.crt(或貼上其內容)。通道狀態會切換為 Active。撰寫範例 MCP 伺服器
cat > hello_server.py <<'EOF' from mcp.server.fastmcp import FastMCP mcp = FastMCP("hello-server", host="0.0.0.0", port=9000) @mcp.tool() def hello(name: str = "world") -> str: """Say hello to someone.""" return f"Hello, {name}!" if __name__ == "__main__": mcp.run(transport="streamable-http") EOF撰寫 proxy 設定檔與 compose 檔案
cat > config/mcp-proxy.yaml <<EOF listen_addr: ":8080" tunnel_domain: ${TUNNEL_DOMAIN} tls: cert_file: /data/tls.crt key_file: /data/tls.key routes: echo: http://hello-mcp:9000 EOF cat > docker-compose.yaml <<'EOF' services: mcp-proxy: image: us-docker.pkg.dev/anthropic-public-registry/images/mcp-proxy@sha256:efb27b299d627e4134815663cb8896641eeaee025d734c0f695582b4df38f013 volumes: - ./config/mcp-proxy.yaml:/etc/mcp-gateway/config.yaml:ro - ./data:/data:ro restart: unless-stopped cloudflared: image: cloudflare/cloudflared@sha256:6b599ca3e974349ead3286d178da61d291961182ec3fe9c505e1dd02c8ac31b0 command: tunnel --no-autoupdate run --url http://localhost:8080 environment: - TUNNEL_TOKEN network_mode: "service:mcp-proxy" restart: unless-stopped hello-mcp: image: python:3.13-slim working_dir: /app volumes: - ./hello_server.py:/app/hello_server.py:ro command: sh -c "pip install --quiet mcp && python hello_server.py" restart: unless-stopped EOF啟動
docker compose up -d docker compose logs mcp-proxy | grep "route configured" docker compose logs cloudflared | grep "Registered tunnel connection"您應該會看到一行針對
echo的route configured,以及四行Registered tunnel connection。容器需要幾秒鐘才能啟動;如果日誌指令回傳空白,請重新執行。從 Claude 呼叫
在 Console 中,前往 Managed Agents > Sessions 並建立一個工作階段。在代理程式選擇器中選擇 Create new agent,為代理程式命名,並保留預先填入的模型。點擊 + MCP Server,選取您的通道,將 Subdomain 設為
echo,並將 Path 設為mcp。接著詢問:Use the hello tool to greet tunnel.
您應該會看到一次工具呼叫,隨後是其結果。
後續步驟
通道已完成端對端驗證。若要換成您自己的 MCP 伺服器,請將其加入 docker-compose.yaml(或在同一個 Docker 網路上執行),在 config/mcp-proxy.yaml 中為其新增一條路由,然後重新啟動 proxy(docker compose restart mcp-proxy)。
若要進行正式環境部署:
經強化的單一主機部署,可選擇是否啟用程式化存取。
具備自動憑證管理的 Kubernetes 部署。
Was this page helpful?