Les tunnels MCP sont en aperçu de recherche. Demandez l'accès pour les essayer.
Ce démarrage rapide vous amène de zéro jusqu'à Claude appelant un serveur MCP privé via un tunnel. Il utilise Docker Compose avec le provisionnement manuel des identifiants, ce qui constitue le chemin le plus court pour des tests en local. Pour les déploiements en production, consultez Déployer avec Helm ou Déployer avec Docker Compose.
Une pile de tunnel à deux conteneurs (le proxy et cloudflared) ainsi qu'un serveur MCP d'exemple s'exécutant à ses côtés. Lorsque tout est en cours d'exécution, le serveur d'exemple est accessible depuis Claude à l'adresse https://echo.<your-tunnel-domain>/mcp même si rien n'écoute sur un port public.
openssl doit être présent dans votre PATH).Créer un tunnel
Dans la barre latérale de la Claude Console, allez dans Manage > MCP tunnels et cliquez sur New tunnel. Donnez-lui un nom. Laissez Set up programmatic access désactivé ; ce démarrage rapide utilise le provisionnement manuel des identifiants.
Une fois créé, ouvrez le tunnel. Copiez deux valeurs depuis la section Connection :
abcd1234.tunnel.anthropic.com)Configurer le répertoire de déploiement
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 1Générer une CA et un certificat serveur
Le proxy termine le TLS interne en utilisant un certificat signé par une CA que vous contrôlez. Générez les deux :
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.keyDe retour dans la Console, sur la page de détail du tunnel, cliquez sur Add certificate et téléversez data/ca.crt (ou collez son contenu). Le statut du tunnel passe à Active.
Écrire le serveur MCP d'exemple
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Écrire la configuration du proxy et le fichier 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:9d4c80593b559fc3ca3814866418744fa94858b02a4d4a4cc52d423e732ccc81
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
EOFDémarrer
docker compose up -d
docker compose logs mcp-proxy | grep "route configured"
docker compose logs cloudflared | grep "Registered tunnel connection"Vous devriez voir une ligne route configured pour echo et quatre lignes Registered tunnel connection. Les conteneurs prennent quelques secondes pour démarrer ; relancez les commandes de journalisation si elles ne renvoient rien.
L'appeler depuis Claude
Dans la Console, allez dans Managed Agents > Sessions et créez une session. Dans le sélecteur d'agent, choisissez Create new agent, donnez un nom à l'agent et conservez le modèle prérempli. Cliquez sur + MCP Server, sélectionnez votre tunnel, définissez Subdomain sur echo et Path sur mcp. Puis demandez :
Use the hello tool to greet tunnel.
Vous devriez voir un appel d'outil suivi de son résultat.
Le tunnel est vérifié de bout en bout. Pour y substituer votre propre serveur MCP, ajoutez-le à docker-compose.yaml (ou exécutez-le sur le même réseau Docker), ajoutez une route pour celui-ci dans config/mcp-proxy.yaml, puis redémarrez le proxy (docker compose restart mcp-proxy).
Pour les déploiements en production :
Déploiement renforcé sur hôte unique, avec ou sans accès programmatique.
Déploiement Kubernetes avec gestion automatique des identifiants.
Was this page helpful?