Les tunnels MCP sont en aperçu de recherche. Demandez l'accès pour les essayer.
Ce guide déploie la pile de tunnels sous forme de conteneurs renforcés sur un seul hôte. La même configuration peut être répliquée sur plusieurs hôtes pour assurer la disponibilité.
Vous avez besoin de :
tnl_...).fdrl_...) et l'ID de votre organisation.openssl (version 1.1.1 ou ultérieure).api.anthropic.com (443 TCP) et le tunnel edge (7844 TCP et UDP). Consultez l'ensemble des exigences réseau.routes. Si vous n'en avez pas encore, utilisez le serveur d'exemple.Si vous n'avez pas de serveur MCP disponible pour les tests, utilisez ce serveur minimal :
mkdir -p mcp-tunnel
cat > mcp-tunnel/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")
EOFLes étapes d'installation suivantes effectuent un cd dans mcp-tunnel/ et indiquent où ajouter le service et la route correspondants.
Ce guide propose une approche de référence utilisant Docker Compose. Il vous incombe de l'adapter pour répondre aux exigences de sécurité de votre organisation.
Le fichier compose lit TUNNEL_TOKEN depuis l'environnement de l'hôte sans valeur par défaut, donc l'export doit être répété dans chaque nouveau shell et après un redémarrage.
Pour un déploiement multi-VM, copiez le répertoire mcp-tunnel/ sur chaque hôte, définissez TUNNEL_TOKEN et exécutez docker compose up -d. Dans le flux programmatique, TUNNEL_TOKEN est $(sudo cat data/tunnel-token) ; dans le flux manuel, c'est la valeur que vous avez copiée depuis la Console. Le même jeton de tunnel et les mêmes certificats fonctionnent sur toutes les répliques.
Vérifiez de bout en bout en appelant un serveur MCP en amont depuis le côté Anthropic : consultez Utiliser les serveurs MCP tunnelisés. Avec le serveur MCP d'exemple, l'URL routée est https://echo.<your-tunnel-domain>/mcp. Si la vérification échoue, consultez Dépannage.
Exécutez les commandes de cette section depuis l'intérieur du répertoire de déploiement mcp-tunnel/.
Avec l'accès programmatique, incrémentez --token-version dans la commande du service setup, définissez les identifiants Workload Identity Federation, générez un nouveau JWT OIDC et réexécutez le composant de configuration :
# Modifiez docker-compose.yaml : incrémentez l'entier dans l'argument
# --token-version du service setup (par exemple, --token-version=1 devient
# --token-version=2). Le binaire setup refuse d'effectuer la rotation si la
# valeur n'a pas changé.
export TUNNEL_ID=tnl_...
export ANTHROPIC_FEDERATION_RULE_ID=fdrl_...
export ANTHROPIC_ORGANIZATION_ID=00000000-0000-0000-0000-000000000000
# export ANTHROPIC_WORKSPACE_ID=wrkspc_... # si votre règle est limitée à un espace de travail
# Régénérez ANTHROPIC_IDENTITY_TOKEN selon le guide du fournisseur WIF pour votre
# environnement (il aura expiré depuis l'installation).
export ANTHROPIC_IDENTITY_TOKEN=...
docker compose run --rm setup
export TUNNEL_TOKEN=$(sudo cat data/tunnel-token)
docker compose up -d cloudflaredL'argument --token-version est modifié dans docker-compose.yaml plutôt que passé en ligne de commande afin que la nouvelle valeur persiste pour les exécutions futures du composant de configuration. Le composant de configuration s'authentifie avec Workload Identity Federation ; il n'y a aucun jeton d'API à révoquer.
Sans accès programmatique, cliquez sur Rotate token sur la page de détails du tunnel dans la Console, puis mettez à jour la variable d'environnement TUNNEL_TOKEN sur chaque hôte et redémarrez cloudflared (docker compose up -d cloudflared).
Cliquer sur Rotate token invalide immédiatement le jeton actuel. Entre ce moment et la mise à jour de TUNNEL_TOKEN sur chaque hôte suivie du redémarrage de cloudflared, tout hôte dont cloudflared redémarre (plantage, redémarrage de l'hôte) ne peut pas se reconnecter. Mettez à jour chaque hôte rapidement après la rotation.
Il vous incombe de surveiller l'expiration et de renouveler le certificat serveur avant qu'il n'expire.
Avec l'accès programmatique :
docker compose run --rm setup renew-cert --output=dir:/dataLes arguments CLI remplacent la command du service setup (les arguments init) mais conservent son entrypoint, donc cela exécute /setup renew-cert --output=dir:/data.
Passez --renew-before=720h pour que la commande n'ait aucun effet lorsqu'il reste plus de 30 jours de validité. Cela permet de l'exécuter en toute sécurité selon un calendrier fixe.
Sans accès programmatique, signez un nouveau certificat serveur avec votre CA existante (la CA enregistrée dans la Console ne change pas) et remplacez data/tls.crt. Définissez d'abord TUNNEL_DOMAIN si vous exécutez ceci depuis un nouveau shell.
export TUNNEL_DOMAIN=YOUR_TUNNEL_DOMAIN_HERE
openssl req -new -key 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.extDans les deux flux, le proxy interroge tls.cert_file et le recharge automatiquement, donc aucun redémarrage n'est nécessaire.
Attachez un serveur MCP en amont à un Managed Agent ou à l'API Messages.
Conseils de renforcement, rotation des identifiants et réponse aux violations.
Diagnostiquez les problèmes de connectivité, de TLS et de routage.
Was this page helpful?