Terraform MCP Server
offiziellHashiCorp Terraform MCP-Server für Infrastructure-as-Code-Workflows, einschließlich Provider- und Modulerkennung über die Terraform Registry.
Was kann man mit Terraform MCP machen?
- Terraform-Registry durchsuchen — Fragen Sie nach Providern oder Modulen mithilfe von
search_providersundget_provider_detailsaus der öffentlichen Registry. - HCP-Terraform-Workspaces verwalten — Erstellen, aktualisieren oder löschen Sie Workspaces und verwalten Sie Variablen, Tags und Runs über Workspace-Operationen.
- Organisationen und Projekte auflisten — Rufen Sie Organisations- und Projektlisten von HCP Terraform oder Terraform Enterprise ab.
- Auf private Registry-Inhalte zugreifen — Fragen Sie private Registry-Provider, -Module und -Richtlinien mit dem
registry-private-Toolset ab. - Verfügbare Tools filtern — Aktivieren Sie nur benötigte Funktionen mithilfe der Flags
--toolsetsoder--toolswielist_workspaces.
Dokumentation
Terraform MCP Server
Der Terraform MCP Server ist ein Model Context Protocol (MCP) Server, der nahtlos mit den Terraform Registry- und HCP Terraform-APIs integriert und erweiterte Automatisierungs- und Interaktionsmöglichkeiten für die Entwicklung von Infrastructure as Code (IaC) bietet.
Inhaltsverzeichnis
Funktionen
- Unterstützung für zwei Transporte: Sowohl Stdio- als auch StreamableHTTP-Transporte mit konfigurierbaren Endpunkten
- Terraform Registry-Integration: Direkte Integration mit öffentlichen Terraform Registry-APIs für Provider, Module und Richtlinien
- HCP Terraform & Terraform Enterprise-Unterstützung: Vollständige Workspace-Verwaltung, Auflistung von Organisationen/Projekten und Zugriff auf private Registries
- Workspace-Operationen: Erstellen, Aktualisieren, Löschen von Workspaces mit Unterstützung für Variablen, Tags und Run-Verwaltung
- OTel-Metriken zur Überwachung der Tool-Nutzung: Integration mit Open-Telemetry-Messgeräten zur Verfolgung von Tool-Aufrufvolumen, Latenz und Fehlern im Streamable-HTTP-Modus. Zeigt außerdem Standard-HTTP-Servermetriken an, wenn diese Funktion aktiviert ist
Sicherheitshinweis: Abhängig von der Abfrage kann der MCP-Server bestimmte Terraform-Daten an den MCP-Client und die LLM weitergeben. Verwenden Sie den MCP-Server nicht mit nicht vertrauenswürdigen MCP-Clients oder LLMs.
Rechtlicher Hinweis: Ihre Nutzung eines Drittanbieter-MCP-Clients/LLM unterliegt ausschließlich den Nutzungsbedingungen dieses MCP/LLM, und IBM ist nicht verantwortlich für die Leistung solcher Drittanbieter-Tools. IBM lehnt ausdrücklich alle Gewährleistungen und Haftung für Drittanbieter-MCP-Clients/LLMs ab und kann möglicherweise keinen Support zur Behebung von Problemen bieten, die durch die Drittanbieter-Tools verursacht werden.
Vorsicht: Die Ausgaben und Empfehlungen des MCP-Servers werden dynamisch generiert und können je nach Abfrage, Modell und verbundenem MCP-Client variieren. Benutzer sollten alle Ausgaben/Empfehlungen gründlich prüfen, um sicherzustellen, dass sie vor der Implementierung mit den Sicherheits-Best-Practices, Kosteneffizienzzielen und Compliance-Anforderungen ihrer Organisation übereinstimmen.
Voraussetzungen
- Stellen Sie sicher, dass Docker installiert ist und ausgeführt wird, um den Server in einer containerisierten Umgebung zu verwenden.
- Installieren Sie einen KI-Assistenten, der das Model Context Protocol (MCP) unterstützt.
Kommandozeilenoptionen
Umgebungsvariablen:
| Variable | Beschreibung | Standard |
|---|---|---|
TFE_ADDRESS | Legt die Terraform Enterprise/HCP Terraform-Adresse für API-Aufrufe fest. Muss das Protokoll enthalten (z. B. https://app.terraform.io). Im Streamable-HTTP-Modus ist dies die einzige Möglichkeit, die Adresse festzulegen; sie kann nicht von Clients über Header oder Abfrageparameter bereitgestellt werden. | Optional |
TFE_TOKEN | Terraform Enterprise-API-Token | "" (leer) |
TF_MCP_SHARED_SECRET | Gemeinsames Geheimnis, das als X-Tf-Mcp-Secret-Header bei Anfragen an HCP Terraform / TFE gesendet wird, um Anfragen aus einer gehosteten MCP-Bereitstellung zu identifizieren. Sollte nur über TLS verwendet werden. | "" (leer) |
TFE_SKIP_TLS_VERIFY | TLS-Überprüfung für HCP Terraform oder Terraform Enterprise überspringen | false |
LOG_LEVEL | Protokollierungsebene: trace, debug, info, warn, error, fatal, panic (überschreibt --log-level-Flag) | info |
LOG_FORMAT | Protokollierungsformat: text oder json (überschreibt --log-format-Flag) | text |
TRANSPORT_MODE | Auf streamable-http setzen, um den HTTP-Transport zu aktivieren (der veraltete http-Wert wird weiterhin unterstützt) | stdio |
TRANSPORT_HOST | Host, an den der HTTP-Server gebunden wird | 127.0.0.1 |
TRANSPORT_PORT | HTTP-Serverport | 8080 |
MCP_ENDPOINT | Endpunktpfad des HTTP-Servers | /mcp |
MCP_REDIRECT_ROOT_URL | URL, an die Anfragen an / weitergeleitet werden | "" |
MCP_KEEP_ALIVE | Keep-Alive-Intervall für SSE-Verbindungen (z. B. 30s, 1m). 0 zum Deaktivieren | 0 |
MCP_SESSION_MODE | Sitzungsmodus: stateful oder stateless | stateful |
MCP_ALLOWED_ORIGINS | Kommagetrennte Liste zulässiger Ursprünge für CORS | "" (leer) |
MCP_CORS_MODE | CORS-Modus: strict, development oder disabled | strict |
MCP_TLS_CERT_FILE | Pfad zur TLS-Zertifikatsdatei, erforderlich für Nicht-Localhost-Bereitstellungen (z. B. /path/to/cert.pem) | "" (leer) |
MCP_TLS_KEY_FILE | Pfad zur TLS-Schlüsseldatei, erforderlich für Nicht-Localhost-Bereitstellungen (z. B. /path/to/key.pem) | "" (leer) |
MCP_RATE_LIMIT_GLOBAL | Globales Ratenlimit (Format: rps:burst) | 10:20 |
MCP_RATE_LIMIT_SESSION | Ratenlimit pro Sitzung (Format: rps:burst) | 5:10 |
MCP_ORGANIZATION_ALLOWLIST | CSV-Liste der HCP Terraform-Organisationsnamen, die auf den HTTP-Server zugreifen dürfen | "" (leer) |
MCP_FORWARD_CLIENT_IP | Client-IP an HCP Terraform / TFE über X-Forwarded-For weiterleiten. Auf true setzen, um zu aktivieren | false |
MCP_REMOTE_IP_METHOD | Wie die Client-IP bei aktivierter Weiterleitung ermittelt wird: RemoteAddr (nur direkte Verbindung), X-Real-IP oder X-Forwarded-For | RemoteAddr |
MCP_XFF_TRUSTED_HOPS | Anzahl vertrauenswürdiger Proxy-Hops, gezählt von rechts der X-Forwarded-For-Kette. Wird nur verwendet, wenn MCP_REMOTE_IP_METHOD=X-Forwarded-For | 0 |
ENABLE_TF_OPERATIONS | Tools aktivieren, die explizite Genehmigung erfordern | false |
OTEL_METRICS_ENABLED | Tools und Servermetriken mit otel aktivieren | false |
OTEL_METRICS_SERVICE_VERSION | Version des terraform-mcp-server, der Metriken sendet, die zum Festlegen von Metrikattributen verwendet wird. Hilft auch bei der Verfolgung von Metriken über verschiedene Bereitstellungen hinweg | latest |
OTEL_METRICS_SERVICE_NAME | Identifiziert die Quelle der Metriken (z. B. "terraform-mcp-server") | terraform-mcp-server |
OTEL_METRICS_EXPORT_INTERVAL | Steuert die Häufigkeit der Metrik-Ausgaben | 2 |
OTEL_METRICS_ENDPOINT | URL Ihres OTel Collectors oder Backends | localhost:4318 |
INSTANA_ENABLED | Instana-Instrumentierung (Metriken und HTTP-Anfragetracing) für den Streamable-HTTP-Server aktivieren. Erfordert einen Instana-Agenten, der vom Server erreichbar ist. | false |
INSTANA_SERVICE_NAME | Wenn die Instana-Instrumentierung aktiviert ist, der Dienstname, der für den MCP-Server verwendet werden soll | terraform-mcp-server |
# Stdio mode
terraform-mcp-server stdio [--log-file /path/to/log] [--log-level info] [--log-format text] [--toolsets <toolsets>] [--tools <tools>]
# StreamableHTTP mode
terraform-mcp-server streamable-http [--transport-port 8080] [--transport-host 127.0.0.1] [--mcp-endpoint /mcp] [--organization-allowlist <orgs-csv>] [--log-file /path/to/log] [--log-level info] [--log-format text] [--toolsets <toolsets>] [--tools <tools>]
Anweisungen
Standardanweisungen für den MCP-Server befinden sich in cmd/terraform-mcp-server/instructions.md. Wenn diese für die Terraform-Praktiken Ihrer Organisation nicht geeignet erscheinen oder der MCP-Server ungenaue Antworten erzeugt, ersetzen Sie sie bitte durch Ihre eigenen Anweisungen und erstellen Sie den Container oder die Binärdatei neu. Ein Beispiel für solche Anweisungen befindet sich in instructions/example-mcp-instructions.md
AGENTS.md verhält sich im Wesentlichen wie READMEs für Codierungsagenten: ein dedizierter, vorhersehbarer Ort, um Kontext und Anweisungen bereitzustellen, die KI-Codierungsagenten bei der Arbeit an Ihrem Projekt unterstützen. Eine AGENTS.md-Datei funktioniert mit verschiedenen Codierungsagenten. Ein Beispiel für solche Anweisungen befindet sich in instructions/example-AGENTS.md. Um es zu verwenden, committen Sie eine Datei mit dem Namen AGENTS.md in das Verzeichnis, in dem sich Ihre Terraform-Konfigurationen befinden.
Installation
Verwendung mit Visual Studio Code
Fügen Sie den folgenden JSON-Block zu Ihrer Benutzereinstellungsdatei (JSON) in VS Code hinzu. Sie können dies tun, indem Sie Ctrl + Shift + P drücken und Preferences: Open User Settings (JSON) eingeben.
Weitere Informationen zur Verwendung von MCP-Server-Tools finden Sie in der Agentenmodus-Dokumentation von VS Code.
| Version 0.3.0+ oder höher | Version 0.2.3 oder niedriger |
|---|---|
|
|
Optional können Sie ein ähnliches Beispiel (d. h. ohne den mcp-Schlüssel) zu einer Datei namens .vscode/mcp.json in Ihrem Arbeitsbereich hinzufügen. Dadurch können Sie die Konfiguration mit anderen teilen.
| Version 0.3.0+ oder höher | Version 0.2.3 oder niedriger |
|---|---|
|
|
Verwendung mit Cursor
Fügen Sie dies zu Ihrer Cursor-Konfiguration (~/.cursor/mcp.json) hinzu oder über Einstellungen → Cursor-Einstellungen → MCP:
| Version 0.3.0+ oder höher | Version 0.2.3 oder niedriger |
|---|---|
|
|
Verwendung mit Claude Desktop / Amazon Q Developer / Kiro CLI
Weitere Informationen zur Verwendung von MCP-Server-Tools in Claude Desktop finden Sie in der Benutzerdokumentation. Lesen Sie mehr über die Verwendung des MCP-Servers in Amazon Q Developer und Kiro CLI.
| Version 0.3.0+ oder höher | Version 0.2.3 oder niedriger |
|---|---|
|
|
Verwendung mit Claude Code
Weitere Informationen zur Verwendung und zum Hinzufügen von MCP-Server-Tools in Claude Code finden Sie in der Benutzerdokumentation
- Lokaler (
stdio) Transport
claude mcp add terraform -s user -t stdio -- docker run -i --rm hashicorp/terraform-mcp-server
- Remote (
streamable-http) Transport
# Run server (example)
docker run -p 8080:8080 --rm -e TRANSPORT_MODE=streamable-http -e TRANSPORT_HOST=0.0.0.0 hashicorp/terraform-mcp-server
# Add to Claude Code
claude mcp add --transport http terraform http://localhost:8080/mcp
Verwendung mit Codex CLI
Weitere Informationen zur Verwendung und zum Hinzufügen von MCP-Server-Tools in Codex CLI finden Sie in der Benutzerdokumentation.
Hinweis: Fügen Sie
TFE_ADDRESSundTFE_TOKENzu den Docker-Befehlen für authentifizierte HCP Terraform- oder Terraform Enterprise-Tools hinzu.
- Lokaler (
stdio) Transport
codex mcp add terraform -- docker run -i --rm hashicorp/terraform-mcp-server
- Remote (
streamable-http) Transport
# Run server (example)
docker run --rm -p 127.0.0.1:8080:8080 -e TRANSPORT_MODE=streamable-http -e TRANSPORT_HOST=0.0.0.0 hashicorp/terraform-mcp-server
# Add to Codex
codex mcp add terraform --url http://localhost:8080/mcp
Verwendung mit Gemini-Erweiterungen
Aus Sicherheitsgründen sollten Sie Ihre Anmeldeinformationen nicht fest codieren. Erstellen oder aktualisieren Sie ~/.gemini/.env (wobei ~ Ihr Home- oder Projektverzeichnis ist), um HCP Terraform- oder Terraform Enterprise-Anmeldeinformationen zu speichern.
# ~/.gemini/.env
TFE_ADDRESS=your_tfe_address_here
TFE_TOKEN=your_tfe_token_here
Installieren Sie die Erweiterung und führen Sie Gemini aus
gemini extensions install https://github.com/hashicorp/terraform-mcp-server
gemini
Verwendung mit Bob IDE / Shell
Weitere Informationen zur Verwendung und zum Hinzufügen von MCP-Server-Tools in Bob IDE oder Shell finden Sie unter Using MCP in Bob.
| Version 0.3.0+ oder höher | Version 0.2.3 oder niedriger |
|---|---|
|
|
Installation aus dem Quellcode
Verwenden Sie die neueste Release-Version:
go install github.com/hashicorp/terraform-mcp-server/cmd/terraform-mcp-server@latest
Verwenden Sie den Hauptzweig:
go install github.com/hashicorp/terraform-mcp-server/cmd/terraform-mcp-server@main
| Version 0.3.0+ oder höher | Version 0.2.3 oder niedriger |
|---|---|
|
|
Erstellen des Docker-Images lokal
Bevor Sie den Server verwenden, müssen Sie das Docker-Image lokal erstellen:
- Klonen Sie das Repository:
git clone https://github.com/hashicorp/terraform-mcp-server.git
cd terraform-mcp-server
- Erstellen Sie das Docker-Image:
make docker-build
- Dadurch wird ein lokales Docker-Image erstellt, das Sie in der folgenden Konfiguration verwenden können.
# Run in stdio mode
docker run -i --rm terraform-mcp-server:dev
# Run in streamable-http mode
docker run -p 8080:8080 --rm -e TRANSPORT_MODE=streamable-http -e TRANSPORT_HOST=0.0.0.0 terraform-mcp-server:dev
# Filter tools (optional)
docker run -i --rm terraform-mcp-server:dev --toolsets=registry,terraform
docker run -i --rm terraform-mcp-server:dev --tools=search_providers,get_provider_details
Hinweis: Wenn Sie Docker verwenden, sollten Sie
TRANSPORT_HOST=0.0.0.0setzen, um Verbindungen von außerhalb des Containers zu ermöglichen.
- (Optional) Testen Sie die Verbindung im HTTP-Modus
# Test the connection
curl http://localhost:8080/health
- Sie können es wie folgt in Ihrem KI-Assistenten verwenden:
{
"mcpServers": {
"terraform": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"terraform-mcp-server:dev"
]
}
}
}
Verfügbare Tools
Sehen Sie sich die verfügbaren Tools hier an :link:
Verfügbare Ressourcen
Sehen Sie sich die verfügbaren Ressourcen hier an :link:
Verfügbare Metriken
Es werden zwei Arten von Metriken erfasst. Zunächst werden standardmäßige HTTP-Servermetriken hinzugefügt, indem der HTTP-Mux mit otelhttp.NewHandler(...) umschlossen wird. Dies erzeugt:
- http.server.request.body.size
- http.server.response.body.size
- http.server.request.duration
Zweitens zeichnet der MCP-Server benutzerdefinierte Tool-Metriken rund um die Tool-Ausführung mithilfe von MCP-Hooks (BeforeCallTool / AfterCallTool) auf. Diese erzeugen:
- mcp_tool_calls_total
- mcp_tool_errors_total
- mcp_tool_duration_seconds
Tool-Filterung
Steuern Sie, welche Tools verfügbar sind, mithilfe von --toolsets (Gruppen) oder --tools (einzeln):
# Enable tool groups (default: registry)
terraform-mcp-server --toolsets=registry,terraform
# Enable specific tools only
terraform-mcp-server --tools=search_providers,get_provider_details,list_workspaces
Verfügbare Toolsets: registry, registry-private, terraform, all, default. Siehe pkg/toolsets/mapping.go für einzelne Toolnamen. Beide Flags können nicht gleichzeitig verwendet werden.
Transportunterstützung
Der Terraform MCP Server unterstützt mehrere Transportprotokolle:
1. Stdio-Transport (Standard)
Standard-Eingabe-/Ausgabekommunikation unter Verwendung von JSON-RPC-Nachrichten. Ideal für die lokale Entwicklung und die direkte Integration mit MCP-Clients.
2. StreamableHTTP-Transport
Moderner HTTP-basierter Transport, der sowohl direkte HTTP-Anfragen als auch Server-Sent-Events (SSE)-Streams unterstützt. Dies ist der empfohlene Transport für Remote-/verteilte Einrichtungen.
Funktionen:
- Endpunkt:
http://{hostname}:8080/mcp - Health Check:
http://{hostname}:8080/health - Umgebungskonfiguration: Setzen Sie
TRANSPORT_MODE=httpoderTRANSPORT_PORT=8080, um zu aktivieren - Organisations-Allowlist: Setzen Sie
MCP_ORGANIZATION_ALLOWLISToder--organization-allowlistauf eine CSV-Liste zulässiger HCP Terraform-Organisationsnamen
Sitzungsmodi
Der Terraform MCP Server unterstützt zwei Sitzungsmodi bei Verwendung des StreamableHTTP-Transports:
- Zustandsbehafteter Modus (Standard): Behält den Sitzungszustand zwischen Anfragen bei und ermöglicht kontextbewusste Operationen.
- Zustandsloser Modus: Jede Anfrage wird unabhängig verarbeitet, ohne den Sitzungszustand beizubehalten. Dies kann für Hochverfügbarkeitsbereitstellungen oder bei Verwendung von Lastausgleichsgeräten nützlich sein.
Um den zustandslosen Modus zu aktivieren, setzen Sie die Umgebungsvariable:
export MCP_SESSION_MODE=stateless
Token-Durchreichung für zentralisierte Bereitstellungen
Wenn Sie den MCP-Server zentral (StreamableHTTP-Modus) für mehrere Benutzer ausführen, kann jeder Benutzer sein eigenes Terraform-Token über HTTP-Header für die RBAC-Durchsetzung übergeben. Dadurch kann eine einzelne Serverinstanz mehrere Benutzer mit unterschiedlichen Berechtigungen bedienen.
Wenn MCP_ORGANIZATION_ALLOWLIST oder --organization-allowlist konfiguriert ist, muss die Allowlist eine CSV-Liste von HCP Terraform-Organisationsnamen sein. Der Server erfordert Authorization: Bearer <token> und lehnt Anfragen ab, es sei denn, dieses Token kann auf mindestens eine Organisation in der CSV-Allowlist zugreifen. Das Bearer-Token hat Vorrang, wenn die Anfrage auch einen TFE_TOKEN-Header enthält, wodurch sichergestellt wird, dass das von der Allowlist validierte Token das Token ist, das für Terraform-API-Anfragen verwendet wird. Der Abgleich von Organisationsnamen erfolgt ohne Berücksichtigung der Groß-/Kleinschreibung. Wenn der konfigurierte CSV-Wert auf null Organisationsnamen analysiert wird, beendet sich der Server mit einem Fehler wegen fehlerhafter Organisations-Allowlist.
Client-IP-Weiterleitung
Wenn Sie den MCP-Server zentral hinter einem Proxy oder Lastausgleichsgerät ausführen, können Sie die IP des ursprünglichen Clients über den X-Forwarded-For-Header an HCP Terraform / TFE weiterleiten. Dies ist standardmäßig deaktiviert und muss mit MCP_FORWARD_CLIENT_IP=true aktiviert werden.
Wenn aktiviert, bezieht der Server die Client-IP gemäß MCP_REMOTE_IP_METHOD:
| Methode | Verhalten |
|---|---|
RemoteAddr (Standard) | Verwendet nur die Adresse der direkten TCP-Verbindung. Ignoriert X-Forwarded-For und X-Real-IP. |
X-Real-IP | Verwendet den X-Real-IP-Header, wenn es sich um eine gültige IP handelt, andernfalls fällt es auf RemoteAddr zurück. |
X-Forwarded-For | Verwendet die X-Forwarded-For-Kette und wählt den Eintrag MCP_XFF_TRUSTED_HOPS Positionen von rechts aus. Fällt auf RemoteAddr zurück, wenn der Wert fehlt oder ungültig ist. |
Vertrauensmodell
X-Forwarded-For und X-Real-IP werden von Clients und zwischengeschalteten Proxys gesetzt, sodass sie gespooft werden können, es sei denn, ein vertrauenswürdiger Proxy vor dem Server überschreibt sie. Aus diesem Grund ist der Standardwert RemoteAddr, der nur dem Peer vertraut, mit dem der Server direkt verbunden ist. Aktivieren Sie X-Real-IP oder X-Forwarded-For nur, wenn der Server hinter einem von Ihnen kontrollierten Proxy sitzt, der diese Header setzt.
Vertrauenswürdige Hops
Bei Verwendung von X-Forwarded-For ist MCP_XFF_TRUSTED_HOPS die Anzahl der Proxys, die Sie zwischen dem Server und dem Internet betreiben. Hops werden von rechts in der Kette gezählt, da jeder Proxy die Adresse anhängt, von der er die Anfrage erhalten hat, und der rechteste Eintrag vom Proxy gesetzt wird, der dem Server am nächsten ist. Der Server überspringt diese Anzahl vertrauenswürdiger Einträge und nimmt den nächsten nach links.
Zum Beispiel wählt der Server mit MCP_XFF_TRUSTED_HOPS=1 und einem Header von 200.1.2.3, 10.1.1.10 200.1.2.3 aus. Mit MCP_XFF_TRUSTED_HOPS=2 und 108.0.0.1, 200.1.2.3, 10.1.1.10, 192.168.0.1 wählt er 200.1.2.3. Wenn die Hop-Anzahl größer als die Anzahl der Einträge ist oder der ausgewählte Eintrag keine gültige IP ist, fällt der Server auf RemoteAddr zurück.
Wenn Sie die Hop-Anzahl zu niedrig einstellen, wird ein vom Client bereitgestellter Wert vertraut; wenn Sie sie zu hoch einstellen, wird eine Adresse weiter in Ihrer eigenen Infrastruktur vertraut. Stellen Sie sie auf die genaue Anzahl der Proxys ein, die Sie betreiben.
Einschränkungen
- Der Server liest nur den ersten
X-Forwarded-For-Header einer Anfrage. Es ist gültig, dass eine Anfrage mehrereX-Forwarded-For-Header trägt, aber die Standardbibliothek von Go gibt nur den ersten zurück, und der Server führt sie nicht zusammen. Wenn Ihre Proxy-Kette mehrere Header ausgibt, konfigurieren Sie sie so, dass sie einen einzelnen kombiniertenX-Forwarded-For-Header ausgibt. - IPv4- und IPv6-Adressen werden beide unterstützt. Werte, die keine gültigen IPs sind, werden abgelehnt und der Server fällt auf
RemoteAddrzurück.
Migration von früheren Versionen
Frühere Versionen verwendeten den linkesten X-Forwarded-For-Wert, wenn der Header vorhanden war, ohne Konfiguration. Dies war unsicher, da der linkeste Wert am einfachsten zu spoofen ist. Der Standardwert ist jetzt RemoteAddr. Wenn Sie den Server hinter einem Proxy betreiben und sich darauf verlassen, dass X-Forwarded-For an HCP Terraform / TFE weitergeleitet wird, setzen Sie MCP_REMOTE_IP_METHOD=X-Forwarded-For und MCP_XFF_TRUSTED_HOPS auf die Anzahl der Proxys, die Sie betreiben.
Unterstützte Header
| Header | Beschreibung |
|---|---|
TFE_TOKEN | Terraform-API-Token |
Authorization: Bearer <token> | Alternative Methode mit standardmäßiger Bearer-Authentifizierung |
TFE_SKIP_TLS_VERIFY | TLS-Überprüfung für die Anfrage überspringen |
Beispiel: curl
# Using TFE_TOKEN header
curl -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-H "TFE_TOKEN: your-user-token" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize",...}'
# Using Authorization Bearer header
curl -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-user-token" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize",...}'
Sicherheitsüberlegungen
- TFE_ADDRESS kann nicht von Clients festgelegt werden. Im Streamable-HTTP-Modus wird die Terraform-Adresse nur aus der serverseitigen
TFE_ADDRESS-Umgebungsvariable (oder dem Standardwert) bezogen. Anfragen, die versuchen,TFE_ADDRESSüber HTTP-Header oder Abfrageparameter festzulegen, werden mit 403 abgelehnt. Dies verhindert, dass ein Client Anfragen und dasAuthorization-Token an einen böswilligen Server umleitet. - Identifizierung gehosteter Bereitstellungen: Das Festlegen von
TF_MCP_SHARED_SECRETsendet diesen Wert alsX-Tf-Mcp-Secret-Header bei jeder HCP Terraform / TFE-Anfrage, sodass das Backend Anfragen von einer bekannten gehosteten Bereitstellung identifizieren kann (z. B. um IP-Allowlists anzuwenden). Es ist ein statisches Geheimnis, das in einem Header gesendet wird. Verwenden Sie es daher nur über TLS und behandeln Sie den Wert als Anmeldeinformation. - Übergeben Sie Token niemals in Abfrageparametern – der Server lehnt solche Anfragen mit einem 400-Fehler ab.
- Verwenden Sie bei zentraler Bereitstellung immer TLS (
MCP_TLS_CERT_FILE/MCP_TLS_KEY_FILE), um Token während der Übertragung zu schützen. - Konfigurieren Sie
MCP_ALLOWED_ORIGINS, um einzuschränken, welche Clients eine Verbindung herstellen können.
Beispiel für eine zentralisierte Bereitstellung
# Start server centrally (no token set server-side)
docker run -p 8080:8080 \
-e TRANSPORT_MODE=streamable-http \
-e TRANSPORT_HOST=0.0.0.0 \
-e TFE_ADDRESS=https://tfe.company.com \
-e MCP_TLS_CERT_FILE=/certs/server.pem \
-e MCP_TLS_KEY_FILE=/certs/server-key.pem \
-e MCP_ALLOWED_ORIGINS=https://ide.company.com \
-e MCP_ORGANIZATION_ALLOWLIST=team-alpha,team-beta \
-v /path/to/certs:/certs \
hashicorp/terraform-mcp-server:1.3.0
Benutzer verbinden sich dann mit ihren individuellen Token, die über Header übergeben werden, wodurch eine benutzerspezifische RBAC-Durchsetzung ermöglicht wird.
Fehlerbehebung
Unternehmensproxy / TLS-Inspektion (Zscaler usw.)
Wenn Sie hinter einem Unternehmensproxy stehen, der TLS-Inspektion durchführt (wie Zscaler Internet Access), können Zertifikatsfehler auftreten:
tls: failed to verify certificate: x509: certificate signed by unknown authority
Lösung: Montieren Sie Ihr Unternehmens-CA-Zertifikat in den Container:
docker run -i --rm \
-v /path/to/corporate-ca.pem:/etc/ssl/certs/corporate-ca.pem \
-e SSL_CERT_FILE=/etc/ssl/certs/corporate-ca.pem \
hashicorp/terraform-mcp-server:1.3.0
Für MCP-Client-Konfigurationen:
{
"mcpServers": {
"terraform": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v", "/path/to/corporate-ca.pem:/etc/ssl/certs/corporate-ca.pem",
"-e", "SSL_CERT_FILE=/etc/ssl/certs/corporate-ca.pem",
"-e", "TFE_TOKEN=<>",
"hashicorp/terraform-mcp-server:1.3.0"
]
}
}
}
Alternative: Führen Sie die Binärdatei direkt aus
Wenn Docker in Ihrer Umgebung nicht zulässig ist, können Sie die Server-Binärdatei direkt installieren und ausführen, die den Zertifikatsspeicher Ihres Systems verwendet:
go install github.com/hashicorp/terraform-mcp-server/cmd/terraform-mcp-server@latest
terraform-mcp-server stdio
Entwicklung
Voraussetzungen
- Go (siehe go.mod-Datei für die spezifische Version)
- Docker (optional, für Container-Builds)
Verfügbare Make-Befehle
| Befehl | Beschreibung |
|---|---|
make build | Die Binärdatei erstellen |
make test | Alle Tests ausführen |
make test-e2e | End-to-End-Tests ausführen |
make docker-build | Docker-Image erstellen |
make run-http | HTTP-Server lokal ausführen |
make docker-run-http | HTTP-Server in Docker ausführen |
make test-http | HTTP-Health-Endpunkt testen |
make clean | Build-Artefakte entfernen |
make help | Alle verfügbaren Befehle anzeigen |
Mitwirken
- Repository forken
- Feature-Branch erstellen
- Änderungen vornehmen
- Tests ausführen
- Pull-Request einreichen
Lizenz
Dieses Projekt ist unter den Bedingungen der Open-Source-Lizenz MPL-2.0 lizenziert. Bitte beachten Sie die Datei LICENSE für die vollständigen Bedingungen.
Sicherheit
Bei Sicherheitsproblemen kontaktieren Sie bitte security@hashicorp.com oder folgen Sie unserer Sicherheitsrichtlinie.
Support
Für Fehlerberichte und Funktionsanfragen öffnen Sie bitte ein Issue auf GitHub.
Für allgemeine Fragen und Diskussionen öffnen Sie eine GitHub-Diskussion.