Terraform MCP Server

resmi

HashiCorp Terraform MCP sunucusu, Terraform Registry üzerinden sağlayıcı ve modül keşfi dahil olmak üzere Altyapı Olarak Kod iş akışları için kullanılır.

Terraform MCP ile neler yapabilirsiniz?

  • Terraform Registry'de gezinin — Asistanınızdan Terraform Registry API'leri aracılığıyla genel sağlayıcıları, modülleri ve politikaları aramasını isteyin.
  • HCP Terraform çalışma alanlarını yönetin — TFE_ADDRESS ve TFE_TOKEN aracılığıyla değişkenler, etiketler ve çalıştırma yönetimiyle çalışma alanları oluşturun, güncelleyin ve silin.
  • Kuruluşları ve projeleri listeleyin — Özel registry erişimi dahil olmak üzere HCP Terraform veya Terraform Enterprise kuruluşlarını ve projelerini sorgulayın.
  • Uzak bir HTTP sunucusu çalıştırın — Paylaşımlı dağıtımlar için TRANSPORT_MODE, TRANSPORT_HOST ve TRANSPORT_PORT ile streamable-http modunda başlatın.
  • Erişimi kuruluşa göre kısıtlayın — MCP_ORGANIZATION_ALLOWLIST kullanarak HTTP erişimini belirli HCP Terraform kuruluşlarıyla sınırlayın.
  • Kullanılabilir araçları filtreleyin — İş akışınıza uyacak şekilde sunulan araçları --toolsets veya --tools ile daraltın.

Dokümantasyon

Terraform MCP Server

Terraform MCP Server, Terraform Registry ve HCP Terraform API'leriyle sorunsuz şekilde entegre olan ve Altyapı Kod Olarak (IaC) geliştirme için gelişmiş otomasyon ve etkileşim yetenekleri sunan bir Model Context Protocol (MCP) sunucusudur.

İçindekiler

Başlarkenİstemci entegrasyonlarıDerleme ve çalıştırma
Özellikler
Ön koşullar
Komut Satırı Seçenekleri
Talimatlar
Kurulum
Visual Studio Code
Cursor
Claude Desktop, Amazon Q Developer ve Kiro CLI
Claude Code
Codex CLI
Gemini uzantıları
Bob IDE ve Shell
OpenCode
Kaynaktan kurulum
Docker İmajını yerel olarak derleme
Taşıma Desteği
Stdio Taşıması
StreamableHTTP Taşıması
Sunucu yetenekleriDağıtım ve güvenlikYardım ve katkıda bulunma
Kullanılabilir Araçlar
Kullanılabilir Kaynaklar
Kullanılabilir Metrikler
Araç Filtreleme
Oturum Modları
Merkezi Dağıtımlar için Token Aktarımı
İstemci IP Yönlendirme
Güven modeli
Güvenilen atlamalar
Sınırlamalar
Önceki sürümlerden geçiş
Desteklenen Başlıklar
Güvenlik Değerlendirmeleri
Merkezi Dağıtım Örneği
Sorun Giderme
Kurumsal Proxy ve TLS Denetimi
Geliştirme
Katkıda Bulunma
Lisans
Güvenlik
Destek

Özellikler

  • Çift Taşıma Desteği: Yapılandırılabilir uç noktalarla hem Stdio hem de StreamableHTTP taşımaları
  • Terraform Registry Entegrasyonu: Sağlayıcılar, modüller ve politikalar için genel Terraform Registry API'leriyle doğrudan entegrasyon
  • HCP Terraform ve Terraform Enterprise Desteği: Tam çalışma alanı yönetimi, organizasyon/proje listeleme ve özel kayıt defteri erişimi
  • Çalışma Alanı İşlemleri: Değişkenler, etiketler ve çalıştırma yönetimi desteğiyle çalışma alanları oluşturma, güncelleme, silme
  • Araç kullanımını izlemek için OTel metrikleri: Streamable HTTP modunda araç çağrısı hacmini, gecikmeyi ve hataları izlemek için açık telemetri ölçerleriyle entegrasyon. Bu özellik etkinleştirildiğinde varsayılan http sunucu metriklerini de sunar

Güvenlik Notu: Sorguya bağlı olarak, MCP sunucusu belirli Terraform verilerini MCP istemcisine ve LLM'e açığa çıkarabilir. MCP sunucusunu güvenilmeyen MCP istemcileri veya LLM'lerle kullanmayın.

Yasal Not: Üçüncü taraf bir MCP İstemcisi/LLM kullanımınız yalnızca söz konusu MCP/LLM'nin kullanım koşullarına tabidir ve IBM bu tür üçüncü taraf araçların performansından sorumlu değildir. IBM, üçüncü taraf MCP İstemcileri/LLM'leri için açıkça her türlü garanti ve sorumluluğu reddeder ve üçüncü taraf araçlardan kaynaklanan sorunları çözmek için destek sağlayamayabilir.

Dikkat: MCP sunucusu tarafından sağlanan çıktılar ve öneriler dinamik olarak oluşturulur ve sorguya, modele ve bağlı MCP istemcisine göre değişebilir. Kullanıcılar, uygulamadan önce tüm çıktıları/önerileri kuruluşlarının güvenlik en iyi uygulamalarıyla, maliyet verimliliği hedefleriyle ve uyumluluk gereksinimleriyle uyumlu olduğundan emin olmak için kapsamlı şekilde incelemelidir.

Ön koşullar

  1. Sunucuyu konteynerleştirilmiş bir ortamda kullanmak için Docker'ın kurulu ve çalışıyor olduğundan emin olun.
  2. Model Context Protocol (MCP)'ü destekleyen bir yapay zeka asistanı kurun.

Komut Satırı Seçenekleri

Ortam Değişkenleri:

DeğişkenAçıklamaVarsayılan
TFE_ADDRESSAPI çağrıları için Terraform Enterprise/HCP Terraform adresini ayarlar. Protokolü içermelidir (ör. https://app.terraform.io). streamable-http modunda adresi ayarlamanın tek yolu budur; istemciler tarafından başlık veya sorgu parametresi aracılığıyla sağlanamaz.İsteğe bağlı
TFE_TOKENTerraform Enterprise API token'ı"" (boş)
TF_MCP_SHARED_SECRETHCP Terraform / TFE'ye yapılan isteklerde X-Tf-Mcp-Secret başlığı olarak gönderilen paylaşılan gizli anahtar; barındırılan bir MCP dağıtımından kaynaklanan istekleri tanımlamak için kullanılır. Yalnızca TLS üzerinden kullanılmalıdır."" (boş)
TFE_SKIP_TLS_VERIFYHCP Terraform veya Terraform Enterprise TLS doğrulamasını atlafalse
LOG_LEVELGünlük kaydı düzeyi: trace, debug, info, warn, error, fatal, panic (--log-level bayrağını geçersiz kılar)info
LOG_FORMATGünlük kaydı biçimi: text veya json (--log-format bayrağını geçersiz kılar)text
TRANSPORT_MODEHTTP taşımasını etkinleştirmek için streamable-http olarak ayarlayın (eski http değeri hâlâ desteklenmektedir)stdio
TRANSPORT_HOSTHTTP sunucusunun bağlanacağı ana bilgisayar127.0.0.1
TRANSPORT_PORTHTTP sunucusu bağlantı noktası8080
MCP_ENDPOINTHTTP sunucusu uç noktası yolu/mcp
MCP_REDIRECT_ROOT_URL/ isteklerinin yönlendirileceği URL""
MCP_KEEP_ALIVESSE bağlantıları için keep-alive aralığı (ör. 30s, 1m). Devre dışı bırakmak için 00
MCP_SESSION_MODEOturum modu: stateful veya statelessstateful
MCP_ALLOWED_ORIGINSCORS için izin verilen kaynakların virgülle ayrılmış listesi"" (boş)
MCP_CORS_MODECORS modu: strict, development veya disabledstrict
MCP_TLS_CERT_FILETLS sertifika dosyasının yolu, localhost dışı dağıtım için gereklidir (ör. /path/to/cert.pem)"" (boş)
MCP_TLS_KEY_FILETLS anahtar dosyasının yolu, localhost dışı dağıtım için gereklidir (ör. /path/to/key.pem)"" (boş)
MCP_RATE_LIMIT_GLOBALGenel hız sınırı (biçim: rps:burst)10:20
MCP_RATE_LIMIT_SESSIONOturum başına hız sınırı (biçim: rps:burst)5:10
MCP_ORGANIZATION_ALLOWLISTHTTP sunucusuna erişmesine izin verilen HCP Terraform organizasyon adlarının CSV listesi"" (boş)
MCP_FORWARD_CLIENT_IPİstemci IP'sini X-Forwarded-For aracılığıyla HCP Terraform / TFE'ye ilet. Etkinleştirmek için true olarak ayarlayınfalse
MCP_REMOTE_IP_METHODYönlendirme etkinleştirildiğinde istemci IP'sinin nasıl elde edileceği: RemoteAddr (yalnızca doğrudan bağlantı), X-Real-IP veya X-Forwarded-ForRemoteAddr
MCP_XFF_TRUSTED_HOPSX-Forwarded-For zincirinin sağından sayılan güvenilen proxy atlama sayısı. Yalnızca MCP_REMOTE_IP_METHOD=X-Forwarded-For olduğunda kullanılır0
ENABLE_TF_OPERATIONSAçık onay gerektiren araçları etkinleştirfalse
OTEL_METRICS_ENABLEDotel kullanarak araçları ve sunucu metriklerini etkinleştirfalse
OTEL_METRICS_SERVICE_VERSIONMetrik gönderen terraform-mcp-server sürümü; metrik özniteliklerini ayarlamak için kullanılır. Ayrıca farklı dağıtımlar arasında metriklerin izlenmesine yardımcı olurlatest
OTEL_METRICS_SERVICE_NAMEMetriklerin kaynağını tanımlar (ör. "terraform-mcp-server")terraform-mcp-server
OTEL_METRICS_EXPORT_INTERVALMetrik boşaltma sıklığını kontrol eder2
OTEL_METRICS_ENDPOINTOTel Collector veya arka ucunuzun URL'silocalhost:4318
INSTANA_ENABLEDstreamable-http sunucusu için Instana izlemesini (metrikler ve HTTP istek izleme) etkinleştir. Sunucu tarafından erişilebilen bir Instana aracısı gerektirir.false
INSTANA_SERVICE_NAMEInstana izlemesi etkinleştirildiyse, MCP sunucusu için kullanılacak hizmet adı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>]

Talimatlar

MCP sunucusu için varsayılan talimatlar cmd/terraform-mcp-server/instructions.md içinde bulunur; bunlar kuruluşunuzun Terraform uygulamaları için uygun görünmüyorsa veya MCP sunucusu hatalı yanıtlar üretiyorsa, lütfen bunları kendi talimatlarınızla değiştirin ve konteyneri veya ikili dosyayı yeniden derleyin. Böyle bir talimat örneği instructions/example-mcp-instructions.md içinde bulunur.

AGENTS.md temel olarak kodlama ajanları için README'ler gibi davranır: yapay zeka kodlama ajanlarının projeniz üzerinde çalışmasına yardımcı olacak bağlam ve talimatları sağlamak için ayrılmış, öngörülebilir bir yer. Tek bir AGENTS.md dosyası farklı kodlama ajanlarıyla çalışır. Böyle bir talimat örneği instructions/example-AGENTS.md içinde bulunur; kullanmak için Terraform yapılandırmalarınızın bulunduğu dizine AGENTS.md adlı bir dosya işleyin.

Kurulum

Visual Studio Code ile Kullanım

Aşağıdaki JSON bloğunu VS Code'daki Kullanıcı Ayarları (JSON) dosyanıza ekleyin. Bunu Ctrl + Shift + P tuşlarına basıp Preferences: Open User Settings (JSON) yazarak yapabilirsiniz.

VS Code'un ajan modu belgelerinde MCP sunucusu araçlarını kullanma hakkında daha fazla bilgi.

YerelUzak
{
  "mcp": {
    "servers": {
      "terraform": {
        "command": "docker",
        "args": [
          "run",
          "-i",
          "--rm",
          "-e", "TFE_TOKEN=${input:tfe_token}",
          "-e", "TFE_ADDRESS=${input:tfe_address}",
          "hashicorp/terraform-mcp-server:1.4.1"
        ]
      }
    },
    "inputs": [
      {
        "type": "promptString",
        "id": "tfe_token",
        "description": "Terraform API Token",
        "password": true
      },
      {
        "type": "promptString",
        "id": "tfe_address",
        "description": "Terraform Address",
        "password": false
      }
    ]
  }
}
{
  "mcp": {
    "servers": {
      "terraform": {
        "type": "http",
        "url": "https://mcp.terraform.io/mcp",
        "headers": {
          "Authorization": "Bearer <<TFE_TOKEN>>"
        }
      }
    }
  }
}

İsteğe bağlı olarak, çalışma alanınızda .vscode/mcp.json adlı bir dosyaya benzer bir örnek (yani mcp anahtarı olmadan) ekleyebilirsiniz. Bu, yapılandırmayı başkalarıyla paylaşmanıza olanak tanır.

YerelUzak
{
  "servers": {
    "terraform": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e", "TFE_TOKEN=${input:tfe_token}",
        "-e", "TFE_ADDRESS=${input:tfe_address}",
        "hashicorp/terraform-mcp-server:1.4.1"
      ]
    }
  },
  "inputs": [
    {
      "type": "promptString",
      "id": "tfe_token",
      "description": "Terraform API Token",
      "password": true
    },
    {
      "type": "promptString",
      "id": "tfe_address",
      "description": "Terraform Address",
      "password": false
    }
  ]
}
{
  "servers": {
    "terraform": {
      "type": "http",
      "url": "https://mcp.terraform.io/mcp",
      "headers": {
        "Authorization": "Bearer <<TFE_TOKEN>>"
      }
    }
  }
}

Install in VS Code (docker) Install in VS Code Insiders (docker)

Cursor ile Kullanım

Bunu Cursor yapılandırmanıza (~/.cursor/mcp.json) veya Ayarlar → Cursor Ayarları → MCP yoluyla ekleyin:

YerelUzak
{
  "mcpServers": {
    "terraform": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e", "TFE_ADDRESS=<<PASTE_TFE_ADDRESS_HERE>>",
        "-e", "TFE_TOKEN=<<PASTE_TFE_TOKEN_HERE>>",
        "hashicorp/terraform-mcp-server:1.4.1"
      ]
    }
  }
}
```json { "mcpServers": { "terraform": { "url": "https://mcp.terraform.io/mcp", "headers": { "Authorization": "Bearer <>" } } } } ```
Add terraform MCP server to Cursor

Claude Desktop / Amazon Q Developer / Kiro CLI ile Kullanım

Claude Desktop'ta MCP sunucu araçlarını kullanma hakkında daha fazla bilgi için kullanıcı belgelerine bakın. Amazon Q Developer ve Kiro CLI içinde MCP sunucusunu kullanma hakkında daha fazla bilgi edinin.

YerelUzak
{
  "mcpServers": {
    "terraform": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e", "TFE_ADDRESS=<<PASTE_TFE_ADDRESS_HERE>>",
        "-e", "TFE_TOKEN=<<PASTE_TFE_TOKEN_HERE>>",
        "hashicorp/terraform-mcp-server:1.4.1"
      ]
    }
  }
}
{
  "mcpServers": {
    "terraform": {
      "url": "https://mcp.terraform.io/mcp",
      "headers": {
        "Authorization": "Bearer <<TFE_TOKEN>>"
      }
    }
  }
}

NOT: Claude Desktop, uzak MCP sunucularını yapılandırma dosyası aracılığıyla yapılandırmayı desteklemez; bunun yerine Özel Bağlayıcılar kullanın.

Claude Code ile Kullanım

Claude Code'da MCP sunucu araçlarını kullanma ve ekleme hakkında daha fazla bilgi için kullanıcı belgelerine bakın

YerelUzak
claude mcp add terraform -s user -t stdio -- docker run -i --rm hashicorp/terraform-mcp-server
claude mcp add terraform -s user -t http \
  --header "Authorization: Bearer <<TFE_TOKEN>>" \
  https://mcp.terraform.io/mcp

Codex CLI ile Kullanım

Codex CLI'da MCP sunucu araçlarını kullanma ve ekleme hakkında daha fazla bilgi için kullanıcı belgelerine bakın.

Not: Kimliği doğrulanmış HCP Terraform veya Terraform Enterprise araçları için Docker komutlarına TFE_ADDRESS ve TFE_TOKEN ekleyin.

YerelUzak
codex mcp add terraform -- docker run -i --rm hashicorp/terraform-mcp-server

codex mcp add özel başlıklar için bir bayrak sunmaz, bu nedenle sunucuyu ~/.codex/config.toml dosyasına ekleyin:

[mcp_servers.terraform]
url = "https://mcp.terraform.io/mcp"
http_headers = { "Authorization" = "Bearer <<TFE_TOKEN>>" }

Gemini uzantıları ile Kullanım

Güvenlik için kimlik bilgilerinizi sabit kodlamaktan kaçının; HCP Terraform veya Terraform Enterprise kimlik bilgilerini saklamak için ~/.gemini/.env dosyasını oluşturun veya güncelleyin (burada ~, ana dizininiz veya proje dizininizdir)

# ~/.gemini/.env
TFE_ADDRESS=your_tfe_address_here
TFE_TOKEN=your_tfe_token_here

Uzantıyı yükleyin ve Gemini'yi çalıştırın

gemini extensions install https://github.com/hashicorp/terraform-mcp-server
gemini

Bob IDE / Shell ile Kullanım

Bob IDE veya Shell'de MCP sunucu araçlarını kullanma ve ekleme hakkında daha fazla bilgi için Bob'da MCP kullanımı bölümüne bakın.

YerelUzak
{
  "mcpServers": {
    "terraform": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e", "TFE_ADDRESS=<<PASTE_TFE_ADDRESS_HERE>>",
        "-e", "TFE_TOKEN=<<PASTE_TFE_TOKEN_HERE>>",
        "hashicorp/terraform-mcp-server:1.4.1"
      ],
      "disabled": false
    }
  }
}
{
  "mcpServers": {
    "terraform": {
      "url": "https://mcp.terraform.io/mcp",
      "headers": {
        "Authorization": "Bearer <<TFE_TOKEN>>"
      },
      "disabled": false
    }
  }
}

OpenCode ile Kullanım

OpenCode'da MCP sunucularını kullanma ve ekleme hakkında daha fazla bilgi için kullanıcı belgelerine bakın. Sunucuyu projenizin opencode.json dosyasına veya genel ~/.config/opencode/opencode.json dosyasına ekleyin.

YerelUzak
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "servers": {
      "terraform": {
        "type": "local",
        "command": [
          "docker",
          "run",
          "-i",
          "--rm",
          "-e", "TFE_ADDRESS",
          "-e", "TFE_TOKEN",
          "hashicorp/terraform-mcp-server:1.4.1"
        ],
        "environment": {
          "TFE_ADDRESS": "{env:TFE_ADDRESS}",
          "TFE_TOKEN": "{env:TFE_TOKEN}"
        }
      }
    }
  }
}
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "servers": {
      "terraform": {
        "type": "remote",
        "url": "https://mcp.terraform.io/mcp",
        "oauth": false,
        "headers": {
          "Authorization": "Bearer <<TFE_TOKEN>>"
        }
      }
    }
  }
}

Kubernetes (Helm)

Sunucuyu Kubernetes üzerinde dağıtmak için bir Helm chart'ı helm/terraform-mcp-server altında mevcuttur.

Kaynaktan yükleme

En son sürüm sürümünü kullanın:

go install github.com/hashicorp/terraform-mcp-server/cmd/terraform-mcp-server@latest

Ana dalı kullanın:

go install github.com/hashicorp/terraform-mcp-server/cmd/terraform-mcp-server@main
YerelUzak
{
  "mcp": {
    "servers": {
      "terraform": {
        "type": "stdio",
        "command": "/path/to/terraform-mcp-server",
        "env": {
          "TFE_TOKEN": "<<TFE_TOKEN_HERE>>"
        }
      }
    }
  }
}
{
  "mcp": {
    "servers": {
      "terraform": {
        "type": "http",
        "url": "https://mcp.terraform.io/mcp",
        "headers": {
          "Authorization": "Bearer <<TFE_TOKEN>>"
        }
      }
    }
  }
}

Docker İmajını yerel olarak oluşturma

Sunucuyu kullanmadan önce Docker imajını yerel olarak oluşturmanız gerekir:

  1. Depoyu klonlayın:
git clone https://github.com/hashicorp/terraform-mcp-server.git
cd terraform-mcp-server
  1. Docker imajını oluşturun:
make docker-build
  1. Bu, aşağıdaki yapılandırmada kullanabileceğiniz yerel bir Docker imajı oluşturur.
# 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_provider_docs,get_provider_details

Not: Docker içinde çalıştırırken, konteyner dışından bağlantılara izin vermek için TRANSPORT_HOST=0.0.0.0 değerini ayarlamalısınız.

  1. (İsteğe bağlı) http modunda bağlantıyı test edin
# Test the connection
curl http://localhost:8080/health
  1. Yapay zeka asistanınızda aşağıdaki gibi kullanabilirsiniz:
{
  "mcpServers": {
    "terraform": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "terraform-mcp-server:dev"
      ]
    }
  }
}

Kullanılabilir Araçlar

Kullanılabilir araçlara buradan göz atın :link:

Kullanılabilir Kaynaklar

Kullanılabilir kaynaklara buradan göz atın :link:

Kullanılabilir Metrikler

İki tür metrik toplanır. İlk olarak, standart HTTP sunucu metrikleri, HTTP mux'u otelhttp.NewHandler(...) ile sarmalayarak eklenir. Bu şunları yayar:

  1. http.server.request.body.size
  2. http.server.response.body.size
  3. http.server.request.duration

İkinci olarak, MCP sunucusu, MCP kancalarını (BeforeCallTool / AfterCallTool) kullanarak araç yürütmesi etrafında özel araç metrikleri kaydeder. Bunlar şunları yayar:

  1. mcp_tool_calls_total
  2. mcp_tool_errors_total
  3. mcp_tool_duration_seconds

Araç Filtreleme

Hangi araçların kullanılabilir olduğunu --toolsets (gruplar) veya --tools (tek tek) kullanarak kontrol edin:

# Enable tool groups (default: registry)
terraform-mcp-server --toolsets=registry,terraform

# Enable specific tools only
terraform-mcp-server --tools=search_provider_docs,get_provider_details,list_workspaces

Kullanılabilir araç setleri: registry, registry-private, terraform, all, default. Tek tek araç adları için pkg/toolsets/mapping.go dosyasına bakın. İki bayrak birlikte kullanılamaz.

Taşıma Desteği

Terraform MCP Server birden fazla taşıma protokolünü destekler:

1. Stdio Taşıma (Varsayılan)

JSON-RPC mesajları kullanan standart giriş/çıkış iletişimi. Yerel geliştirme ve MCP istemcileriyle doğrudan entegrasyon için idealdir.

2. StreamableHTTP Taşıma

Hem doğrudan HTTP isteklerini hem de Sunucu Tarafından Gönderilen Olaylar (SSE) akışlarını destekleyen modern HTTP tabanlı taşıma. Uzak/dağıtık kurulumlar için önerilen taşıma budur.

Özellikler:

  • Uç Nokta: http://{hostname}:8080/mcp
  • Sağlık Kontrolü: http://{hostname}:8080/health
  • Ortam Yapılandırması: Etkinleştirmek için TRANSPORT_MODE=http veya TRANSPORT_PORT=8080 ayarlayın
  • Kuruluş İzin Listesi: İzin verilen HCP Terraform kuruluş adlarının CSV listesi olarak MCP_ORGANIZATION_ALLOWLIST veya --organization-allowlist ayarlayın

Oturum Modları

Terraform MCP Server, StreamableHTTP taşımasını kullanırken iki oturum modunu destekler:

  • Durumlu Mod (Varsayılan): İstekler arasında oturum durumunu korur ve bağlam farkındalığına sahip işlemleri etkinleştirir.
  • Durumsuz Mod: Her istek, oturum durumu korunmadan bağımsız olarak işlenir; bu, yüksek kullanılabilirlik dağıtımları veya yük dengeleyiciler kullanılırken yararlı olabilir.

Durumsuz modu etkinleştirmek için ortam değişkenini ayarlayın:

export MCP_SESSION_MODE=stateless

Merkezi Dağıtımlar için Token Aktarımı

MCP sunucusunu birden fazla kullanıcı için merkezi olarak (StreamableHTTP modu) çalıştırırken, her kullanıcı RBAC uygulaması için kendi Terraform token'ını HTTP başlıkları aracılığıyla iletebilir. Bu, tek bir sunucu örneğinin farklı izinlere sahip birden fazla kullanıcıya hizmet vermesini sağlar.

MCP_ORGANIZATION_ALLOWLIST veya --organization-allowlist yapılandırıldığında, izin listesi HCP Terraform kuruluş adlarının CSV listesi olmalıdır. Sunucu Authorization: Bearer <token> gerektirir ve bu token CSV izin listesindeki en az bir kuruluşa erişemediği sürece istekleri reddeder. İstek ayrıca bir TFE_TOKEN başlığı içeriyorsa bearer token önceliklidir; bu, izin listesi tarafından doğrulanan token'ın Terraform API istekleri için kullanılan token olduğundan emin olunmasını sağlar. Kuruluş adı eşleştirmesi büyük/küçük harfe duyarsızdır. Yapılandırılan CSV değeri sıfır kuruluş adına ayrıştırılırsa, sunucu hatalı biçimlendirilmiş kuruluş izin listesi hatasıyla çıkar.

İstemci IP Yönlendirme

MCP sunucusunu bir proxy veya yük dengeleyici arkasında merkezi olarak çalıştırırken, kaynak istemcinin IP'sini X-Forwarded-For başlığı aracılığıyla HCP Terraform / TFE'ye iletebilirsiniz. Bu varsayılan olarak kapalıdır ve MCP_FORWARD_CLIENT_IP=true ile etkinleştirilmelidir.

Etkinleştirildiğinde, sunucu istemci IP'sini MCP_REMOTE_IP_METHOD değerine göre belirler:

YöntemDavranış
RemoteAddr (varsayılan)Yalnızca doğrudan TCP bağlantısının adresini kullanır. X-Forwarded-For ve X-Real-IP yok sayılır.
X-Real-IPGeçerli bir IP ise X-Real-IP başlığını kullanır, aksi takdirde RemoteAddr değerine geri döner.
X-Forwarded-ForX-Forwarded-For başlığını kullanır ve sağdan MCP_XFF_TRUSTED_HOPS konumdaki girdiyi seçer. Değer eksik veya geçersizse RemoteAddr değerine geri döner.

Güven modeli

X-Forwarded-For ve X-Real-IP istemciler ve aracı proxy'ler tarafından ayarlanır, bu nedenle sunucunun önündeki güvenilir bir proxy bunları üzerine yazmadıkça sahte olarak değiştirilebilirler. Bu nedenle varsayılan, yalnızca sunucunun doğrudan bağlı olduğu eşe güvenen RemoteAddr değeridir. X-Real-IP veya X-Forwarded-For yalnızca sunucu, bu başlıkları ayarlayan kontrolünüzdeki bir proxy arkasındaysa etkinleştirin. AWS Application Load Balancer'lar dahil bazı yük dengeleyiciler X-Real-IP başlığını ayarlamaz, bu nedenle bunlarla başlık doğrudan istemciden gelir ve kullanılmamalıdır.

Güvenilen atlamalar

X-Forwarded-For kullanırken, MCP_XFF_TRUSTED_HOPS değerini sunucunun önünde işlettiğiniz proxy sayısına ayarlayın. Her proxy, isteği aldığı adresi ekler, kendi adresini değil; bu nedenle istemci IP'si sağdan o kadar konumdaki girdidir. Bunun solundaki her şey istemci tarafından gönderilmiştir ve sahte olarak değiştirilebilir.

Örneğin, AWS ALB gibi tek bir yük dengeleyici arkasında MCP_XFF_TRUSTED_HOPS=1 ayarlayın. 198.51.100.7 şeklindeki bir başlık 198.51.100.7 olarak çözümlenir ve istemcinin 1.2.3.4 değerini kendisinin gönderdiği 1.2.3.4, 198.51.100.7 şeklindeki bir başlık da 198.51.100.7 olarak çözümlenir. MCP_XFF_TRUSTED_HOPS=2 ve 1.2.3.4, 198.51.100.7, 10.0.0.5 ile sunucu 198.51.100.7 seçer. Atlama sayısı girdi sayısından büyükse veya seçilen girdi geçerli bir IP değilse, sunucu RemoteAddr değerine geri döner.

Atlama sayısını çok yüksek ayarlamak istemci tarafından sağlanan bir değere güvenmenize neden olur; çok düşük ayarlamak kendi altyapınızdan bir adres seçer. Bunu çalıştırdığınız proxy'lerin tam sayısına ayarlayın.

Sınırlamalar

  • Bir istek birden fazla X-Forwarded-For başlığı taşıyorsa, sunucu bir girdi seçmeden önce bunları sırayla birleştirir. X-Forwarded-For başlığı.
  • Hem IPv4 hem de IPv6 adresleri desteklenir. Geçerli IP olmayan değerler reddedilir ve sunucu RemoteAddr değerine geri döner.

Önceki sürümlerden geçiş

Önceki sürümler, başlık mevcut olduğunda yapılandırma olmadan en soldaki X-Forwarded-For değerini kullanıyordu. En soldaki değer en kolay sahte olarak değiştirilebildiğinden bu güvensizdi. Varsayılan artık RemoteAddr değeridir. Sunucuyu bir proxy arkasında çalıştırıyorsanız ve X-Forwarded-For değerinin HCP Terraform / TFE'ye iletilmesine güveniyorsanız, MCP_REMOTE_IP_METHOD=X-Forwarded-For ve MCP_XFF_TRUSTED_HOPS değerlerini işlettiğiniz proxy sayısına ayarlayın.

Desteklenen Başlıklar

BaşlıkAçıklama
TFE_TOKENTerraform API token'ı
Authorization: Bearer <token>Standart Bearer kimlik doğrulaması kullanan alternatif yöntem
TFE_SKIP_TLS_VERIFYİstek için TLS doğrulamasını atla

Örnek: 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",...}'

Güvenlik Değerlendirmeleri

  • TFE_ADDRESS istemciler tarafından ayarlanamaz. streamable-http modunda Terraform adresi yalnızca sunucu tarafındaki TFE_ADDRESS ortam değişkeninden (veya varsayılandan) alınır. TFE_ADDRESS değerini HTTP başlığı veya sorgu parametresi aracılığıyla ayarlamaya çalışan istekler 403 ile reddedilir. Bu, bir istemcinin istekleri ve Authorization token'ını kötü niyetli bir sunucuya yönlendirmesini önler.
  • Barındırılan dağıtım tanımlama: TF_MCP_SHARED_SECRET ayarlamak, bu değeri her HCP Terraform / TFE isteğinde X-Tf-Mcp-Secret başlığı olarak gönderir ve arka ucun bilinen bir barındırılan dağıtımdan gelen istekleri tanımlamasını sağlar (ör. IP izin listelerini uygulamak için). Bu, bir başlıkta gönderilen statik bir sırdır, bu nedenle yalnızca TLS üzerinden kullanın ve değeri bir kimlik bilgisi olarak değerlendirin.
  • Token'ları asla sorgu parametrelerinde iletmeyin - sunucu bu tür istekleri 400 hatasıyla reddeder.
  • Merkezi olarak dağıtırken, aktarım sırasında token'ları korumak için her zaman TLS (MCP_TLS_CERT_FILE/MCP_TLS_KEY_FILE) kullanın.
  • Hangi istemcilerin bağlanabileceğini kısıtlamak için MCP_ALLOWED_ORIGINS yapılandırın.

Merkezi Dağıtım Örneği

# 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.4.1

Kullanıcılar daha sonra başlıklar aracılığıyla iletilen bireysel token'larıyla bağlanır ve kullanıcı başına RBAC uygulaması etkinleştirilir.

Sorun Giderme

Kurumsal Proxy / TLS Denetimi (Zscaler vb.)

TLS denetimi yapan bir kurumsal proxy'nin arkasındaysanız (Zscaler Internet Access gibi), sertifika hatalarıyla karşılaşabilirsiniz:

tls: failed to verify certificate: x509: certificate signed by unknown authority

Çözüm: Kurumsal CA sertifikanızı konteynere bağlayın:

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.4.1

MCP istemci yapılandırmaları için:

{
  "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.4.1"
      ]
    }
  }
}

Alternatif: İkili dosyayı doğrudan çalıştırın

Ortamınızda Docker'a izin verilmiyorsa, sunucu ikili dosyasını doğrudan yükleyip çalıştırabilirsiniz; bu, sisteminizin sertifika deposunu kullanır:

go install github.com/hashicorp/terraform-mcp-server/cmd/terraform-mcp-server@latest
terraform-mcp-server stdio

Geliştirme

Ön Koşullar

  • Go (belirli sürüm için go.mod dosyasına bakın)
  • Docker (isteğe bağlı, konteyner derlemeleri için)

Kullanılabilir Make Komutları

KomutAçıklama
make buildİkili dosyayı derle
make testTüm testleri çalıştır
make test-e2eUçtan uca testleri çalıştır
make docker-buildDocker imajı derle
make run-httpHTTP sunucusunu yerel olarak çalıştır
make docker-run-httpHTTP sunucusunu Docker'da çalıştır
make test-httpHTTP sağlık uç noktasını test et
make cleanDerleme çıktılarını kaldır
make helpTüm kullanılabilir komutları göster

Katkıda Bulunma

  1. Depoyu çatallayın
  2. Özellik dalınızı oluşturun
  3. Değişikliklerinizi yapın
  4. Testleri çalıştırın
  5. Bir çekme isteği gönderin

Lisans

Bu proje MPL-2.0 açık kaynak lisansının koşulları altında lisanslanmıştır. Tam koşullar için lütfen LICENSE dosyasına bakın.

Güvenlik

Güvenlik sorunları için lütfen security@hashicorp.com adresiyle iletişime geçin veya güvenlik politikamızı takip edin.

Destek

Hata bildirimleri ve özellik istekleri için lütfen GitHub'da bir sorun açın.

Genel sorular ve tartışmalar için bir GitHub Tartışması açın.