MCP-Tunnel befinden sich in der Research Preview. Zugang anfordern, um sie auszuprobieren.
Der Proxy liest seine Konfiguration aus /etc/mcp-gateway/config.yaml (Compose) oder der gerenderten ConfigMap (Helm, befüllt aus gateway.config.*).
| Feld | Beschreibung | Standard |
|---|---|---|
listen_addr | Adresse und Port, auf denen gelauscht wird. | Erforderlich |
log_level | Logging-Ausführlichkeit: debug, info, warn oder error. | info |
shutdown_timeout | Wie lange beim Graceful Shutdown auf laufende Anfragen gewartet wird. | 30s |
tunnel_domain | Basis-Domain, die dem Tunnel zugewiesen ist. Wenn gesetzt, entfernt die Routen-Suche dieses Suffix von eingehenden Hostnamen, sodass routes-Schlüssel reine Subdomains sein können (wiki). Wenn leer, müssen routes-Schlüssel exakte vollständige Hostnamen sein. | Erforderlich, wenn routes-Schlüssel reine Subdomains sind |
tls.cert_file | Pfad zum Server-TLS-Zertifikat. | Erforderlich |
tls.key_file | Pfad zum privaten Server-TLS-Schlüssel. | Erforderlich |
routes | Map von Subdomain oder vollständigem Hostnamen zu Upstream-URL. Siehe Routen-Matching. | Erforderlich |
upstream.allowed_ips | IPv4-CIDR-Bereiche oder einzelne Adressen, zu denen der Proxy Verbindungen aufbauen darf. Schließt sich gegenseitig mit disable_ip_validation aus. | RFC1918-Private-Bereiche |
upstream.disable_ip_validation | Upstream-IP-Validierung vollständig deaktivieren. Schließt sich gegenseitig mit allowed_ips aus. | false |
upstream.tls.ca_file | CA-Bundle zur Validierung von Upstream-TLS. | Keine |
upstream.tls.include_system_cas | Zusätzlich dem System-CA-Bundle für Upstream-TLS vertrauen. | false |
Für https://-Upstream-Routen setze mindestens eines von upstream.tls.ca_file oder upstream.tls.include_system_cas; andernfalls hat der Proxy keinen Vertrauensanker für das Upstream-Zertifikat.
routes ist eine flache String-Map (map[string]string), keine Liste. Der Proxy sucht den eingehenden Hostnamen zuerst per exakter Übereinstimmung, dann durch Entfernen des tunnel_domain-Suffixes und Abgleich der verbleibenden Subdomain. Der Abgleich berücksichtigt nur den Hostnamen; der Request-Pfad und der Query-String werden unverändert an den Upstream-MCP-Server weitergeleitet.
Jeder Upstream-Wert muss exakt scheme://host:port sein. Der Port ist obligatorisch. Das Einfügen eines Pfads wird beim Laden der Konfiguration mit invalid upstream (must be scheme://host:port) abgelehnt.
Siehe die MCP-Tunnels-Admin-API-Referenz für alle Endpunkte, Request- und Response-Schemas sowie Beispiele pro Sprache.
Alle MCP-Tunnels-Endpunkte erfordern ein Bearer-Token mit dem Scope org:manage_tunnels, das über Workload Identity Federation bezogen wurde. Admin-API-Keys werden nicht akzeptiert.
Erforderliche Header bei jeder Anfrage:
| Header | Wert |
|---|---|
Authorization | Bearer <token> (das per WIF ausgetauschte Token) |
anthropic-version | 2023-06-01 |
anthropic-beta | mcp-tunnels-2026-05-19 |
Die Setup-Komponente generiert automatisch konforme Zertifikate. Diese Anforderungen gelten nur, wenn du Zertifikate über deine eigene PKI ausstellst.
Hochladen mit POST /v1/organizations/tunnels/{tunnel_id}/certificates. Ein Tunnel kann bis zu zwei aktive CA-Zertifikate gleichzeitig halten, was eine Rotation ohne Ausfallzeit ermöglicht.
BasicConstraints-Extension vorhanden mit CA:TRUE, als kritisch markiert.SubjectKeyIdentifier-Extension vorhanden.KeyUsage enthält keyCertSign.Wird vom Proxy während des inneren TLS präsentiert.
AuthorityKeyIdentifier-Extension vorhanden und übereinstimmend mit dem SubjectKeyIdentifier der CA.<route>.<tunnel-domain> entspricht. Ein Wildcard *.<tunnel-domain> deckt alle Routen ab.ExtendedKeyUsage-Extension vorhanden ist, enthält sie serverAuth.Die Setup-Komponente generiert eine ECDSA-P-256-CA mit fünfjähriger Gültigkeit und ein RSA-4096-Bit-Server-Zertifikat mit einem Wildcard-SAN und 90-tägiger Gültigkeit.
Die Setup-Komponente wird innerhalb des mcp-proxy-Images als setup-Binary ausgeliefert. Führe sie mit docker compose run --rm setup <subcommand> aus (Compose) oder verlasse dich auf die Hooks und CronJobs des Charts (Helm).
setup initVerbindet sich mit dem Tunnel, den du in der Console erstellt hast, generiert eine CA und ein Server-Zertifikat, registriert die CA, ruft das Tunnel-Token ab und schreibt alle Ausgaben an das Ziel.
| Flag | Beschreibung | Standard |
|---|---|---|
--api-url | Claude-API-Basis-URL. Wird auch aus API_URL gelesen. | Erforderlich |
--tunnel-id | Tunnel-ID, mit der verbunden werden soll (tnl_...). Wird auch aus TUNNEL_ID gelesen. | Erforderlich |
--output | Ausgabeziel: dir:/path oder k8s-secret:NAME. Das Helm-Chart übergibt k8s-secret:<release>. | k8s-secret:mcp-tunnel (automatisch erkannt, wenn in einem Kubernetes-Pod ausgeführt; andernfalls erforderlich) |
--cert-duration | Gültigkeitszeitraum des Server-Zertifikats. | 2160h (90 Tage) |
--token-version | String zur Änderungserkennung. Ein neuer Wert löst bei erneuter Ausführung eine Token-Rotation aus. Das Helm-Chart und das Compose-Beispiel übergeben beide 1 als Anfangswert. | Keine |
Der Befehl authentifiziert sich über Workload Identity Federation. Er liest ANTHROPIC_FEDERATION_RULE_ID, ANTHROPIC_ORGANIZATION_ID, ANTHROPIC_WORKSPACE_ID (optional) und genau eines von ANTHROPIC_IDENTITY_TOKEN_FILE oder ANTHROPIC_IDENTITY_TOKEN. Siehe die WIF-Referenz für die aktuelle Semantik dieser Variablen; die Setup-Komponente leitet den Service-Account aus der Federation-Regel ab, daher benötigt sie ANTHROPIC_SERVICE_ACCOUNT_ID nicht separat.
setup renew-certStellt ein neues Server-Zertifikat aus, das von der gespeicherten CA signiert ist. Führt keine API-Aufrufe durch.
| Flag | Beschreibung | Standard |
|---|---|---|
--output | Ausgabeziel: dir:/path oder k8s-secret:NAME. Das Helm-Chart übergibt k8s-secret:<release>. | k8s-secret:mcp-tunnel (automatisch erkannt, wenn in einem Kubernetes-Pod ausgeführt; andernfalls erforderlich) |
--cert-duration | Gültigkeitszeitraum des neuen Zertifikats. | 2160h (90 Tage) |
--renew-before | Erneuerung überspringen, wenn das bestehende Zertifikat noch mehr als diese Dauer gültig ist. | 0 (immer erneuern) |
Das Setzen von --renew-before=720h macht den Befehl zu einem No-Op, wenn noch mehr als 30 Tage Gültigkeit verbleiben, sodass er sicher nach einem festen Zeitplan ausgeführt werden kann.
Was this page helpful?