Dieser Schnellstart führt dich von null bis zu dem Punkt, an dem Claude einen privaten MCP-Server über einen Tunnel aufruft. Er verwendet Docker Compose mit manueller Bereitstellung von Anmeldedaten, was der kürzeste Weg für lokale Tests ist. Für Produktions-Deployments siehe Deployment mit Helm oder Deployment mit Docker Compose.
Einen Tunnel-Stack aus zwei Containern (dem Proxy und cloudflared) sowie einen Beispiel-MCP-Server, der daneben läuft. Wenn alles läuft, ist der Beispielserver von Claude aus unter https://echo.<your-tunnel-domain>/mcp erreichbar, obwohl nichts auf einem öffentlichen Port lauscht.
openssl-Binary muss sich in deinem PATH befinden).Einen Tunnel erstellen
Gehe in der Seitenleiste der Claude Console zu Manage > MCP tunnels und klicke auf New tunnel. Gib ihm einen Namen. Lass Set up programmatic access deaktiviert; dieser Schnellstart verwendet die manuelle Bereitstellung von Anmeldedaten.
Öffne den Tunnel, nachdem er erstellt wurde. Kopiere zwei Werte aus dem Abschnitt Connection:
abcd1234.tunnel.anthropic.com)Das Deployment-Verzeichnis einrichten
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 1Eine CA und ein Serverzertifikat generieren
Der Proxy terminiert inneres TLS mit einem Zertifikat, das von einer CA signiert ist, die du kontrollierst. Generiere beides:
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.keyKlicke zurück in der Console auf der Tunnel-Detailseite auf Add certificate und lade data/ca.crt hoch (oder füge den Inhalt ein). Der Tunnel-Status wechselt zu Active.
Den Beispiel-MCP-Server schreiben
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")
EOFDie Proxy-Konfiguration und Compose-Datei schreiben
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
EOFStarten
docker compose up -d
docker compose logs mcp-proxy | grep "route configured"
docker compose logs cloudflared | grep "Registered tunnel connection"Du solltest eine route configured-Zeile für echo und vier Registered tunnel connection-Zeilen sehen. Die Container brauchen ein paar Sekunden zum Starten; führe die Log-Befehle erneut aus, wenn sie leer zurückkommen.
Von Claude aus aufrufen
Gehe in der Console zu Managed Agents > Sessions und erstelle eine Session. Wähle in der Agent-Auswahl Create new agent, gib dem Agent einen Namen und behalte das vorausgefüllte Modell bei. Klicke auf + MCP Server, wähle deinen Tunnel aus, setze Subdomain auf echo und Path auf mcp. Dann frage:
Use the hello tool to greet tunnel.
Du solltest einen Tool-Aufruf gefolgt von seinem Ergebnis sehen.
Der Tunnel ist Ende-zu-Ende verifiziert. Um deinen eigenen MCP-Server einzubinden, füge ihn zu docker-compose.yaml hinzu (oder führe ihn im selben Docker-Netzwerk aus), füge eine Route dafür in config/mcp-proxy.yaml hinzu und starte dann den Proxy neu (docker compose restart mcp-proxy).
Für Produktions-Deployments:
Gehärtetes Single-Host-Deployment, mit oder ohne programmatischen Zugriff.
Kubernetes-Deployment mit automatischer Verwaltung von Anmeldedaten.
Was this page helpful?