Claude Platform Docs
MessagesTunnel MCP

Panduan memulai cepat MCP tunnels

Hubungkan Claude ke server MCP privat menggunakan deployment Docker Compose lokal.

Panduan memulai cepat ini membawa Anda dari nol hingga Claude memanggil server MCP privat melalui sebuah tunnel. Panduan ini menggunakan Docker Compose dengan penyediaan kredensial manual, yang merupakan jalur terpendek untuk pengujian lokal. Untuk deployment produksi, lihat Deploy dengan Helm atau Deploy dengan Docker Compose.

Apa yang akan Anda bangun

Sebuah tunnel stack (tumpukan tunnel) dua kontainer (proxy dan cloudflared) ditambah sebuah server MCP contoh yang berjalan di sampingnya. Ketika semuanya berjalan, server contoh tersebut dapat dijangkau dari Claude di https://echo.<your-tunnel-domain>/mcp meskipun tidak ada yang mendengarkan pada port publik.

Apa yang Anda butuhkan

  1. Buat tunnel

    Di sidebar Claude Console, buka Manage > MCP tunnels dan klik New tunnel. Beri nama. Biarkan Set up programmatic access nonaktif; panduan memulai cepat ini menggunakan penyediaan kredensial manual.

    Setelah dibuat, buka tunnel tersebut. Salin dua nilai dari bagian Connection:

    • Domain (terlihat seperti abcd1234.tunnel.anthropic.com)
    • Token (klik ikon mata, lalu salin)
  2. Siapkan direktori deployment

    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
  3. Buat CA dan sertifikat server

    Proxy mengakhiri inner TLS (TLS bagian dalam) menggunakan sertifikat yang ditandatangani oleh CA yang Anda kendalikan. Buat keduanya:

    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

    Kembali ke Console, pada halaman detail tunnel, klik Add certificate dan unggah data/ca.crt (atau tempel isinya). Status tunnel berubah menjadi Active.

  4. Tulis server MCP contoh

    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
  5. Tulis konfigurasi proxy dan file 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
  6. Jalankan

    docker compose up -d
    docker compose logs mcp-proxy | grep "route configured"
    docker compose logs cloudflared | grep "Registered tunnel connection"

    Anda seharusnya melihat satu baris route configured untuk echo dan empat baris Registered tunnel connection. Kontainer membutuhkan beberapa detik untuk mulai; jalankan ulang perintah log jika hasilnya kosong.

  7. Panggil dari Claude

    Di Console, buka Managed Agents > Sessions dan buat sebuah sesi. Di pemilih agen, pilih Create new agent, beri nama agen, dan pertahankan model yang sudah terisi. Klik + MCP Server, pilih tunnel Anda, atur Subdomain ke echo dan Path ke mcp. Lalu tanyakan:

    Use the hello tool to greet tunnel.

    Anda seharusnya melihat sebuah pemanggilan alat diikuti oleh hasilnya.

Langkah selanjutnya

Tunnel telah terverifikasi dari ujung ke ujung. Untuk menggantinya dengan server MCP Anda sendiri, tambahkan server tersebut ke docker-compose.yaml (atau jalankan di jaringan Docker yang sama), tambahkan rute untuknya di config/mcp-proxy.yaml, lalu mulai ulang proxy (docker compose restart mcp-proxy).

Untuk deployment produksi:

Deployment host tunggal yang diperkuat, dengan atau tanpa akses programatik.

Deployment Kubernetes dengan manajemen kredensial otomatis.

Was this page helpful?