Terraform MCP Server
resmiHashiCorp 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?
-
Search Terraform Registry — Asistanınızdan, genel kayıt defterindeki
search_providersveget_provider_detailsaraçlarını kullanarak sağlayıcıları veya modülleri bulmasını isteyin. -
HCP Terraform çalışma alanlarını yönetin —
list_workspacesile çalışma alanlarını listeleyin, oluşturun, güncelleyin veya silin; değişkenler, etiketler ve çalıştırma yönetimi dahil. -
Mevcut araçları filtreleyin — Hangi araç setlerinin veya bireysel araçların açığa çıkarılacağını kontrol edin, örn.
--toolsets=registry,terraformveya--tools=search_providers,get_provider_details. -
HTTP modunda çalıştırın —
streamable-httptaşıma protokolüyle dağıtın;/healthüzerinden sağlık kontrolleri ve başlıklar aracılığıyla kullanıcı başına token geçişi ile uzaktan erişimi etkinleştirin. -
Kuruluş erişimini zorunlu kılın — Merkezi dağıtımlar için
MCP_ORGANIZATION_ALLOWLISTkullanarak sunucu erişimini belirli HCP Terraform kuruluşlarıyla sınırlandırın.
Dokümantasyon
Terraform MCP Server
Terraform MCP Server, Model Context Protocol (MCP) ile uyumlu bir sunucudur ve Terraform Registry ile HCP Terraform API'leriyle sorunsuz bir şekilde entegre olarak, Altyapı Olarak Kod (IaC) geliştirme için gelişmiş otomasyon ve etkileşim yetenekleri sağlar.
İçindekiler
Ö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ı hacmini, gecikmeyi ve hataları izlemek için açık telemetri sayaçlarıyla 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'ye 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 bu tür MCP/LLM 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 tüm garanti ve yükümlülükleri açıkça 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şiklik gösterebilir. Kullanıcılar, uygulamadan önce tüm çıktıları/önerileri kuruluşlarının güvenlik en iyi uygulamaları, maliyet verimliliği hedefleri ve uyumluluk gereksinimleriyle uyumlu olduğundan emin olmak için kapsamlı bir şekilde incelemelidir.
Ön koşullar
- Sunucuyu konteynerleştirilmiş bir ortamda kullanmak için Docker kurulu ve çalışır durumda olduğundan emin olun.
- Model Context Protocol'ü (MCP) destekleyen bir AI asistanı kurun.
Komut Satırı Seçenekleri
Ortam Değişkenleri:
| Değişken | Açıklama | Varsayılan |
|---|---|---|
TFE_ADDRESS | API çağrıları için Terraform Enterprise/HCP Terraform adresini ayarlar. Protokolü içermelidir (örn. https://app.terraform.io). Streamable-http modunda adresi ayarlamanın tek yolu budur; istemciler tarafından başlık veya sorgu parametresiyle sağlanamaz. | İsteğe bağlı |
TFE_TOKEN | Terraform Enterprise API belirteci | "" (boş) |
TF_MCP_SHARED_SECRET | HCP 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_VERIFY | HCP Terraform veya Terraform Enterprise TLS doğrulamasını atla | false |
LOG_LEVEL | Günlük düzeyi: trace, debug, info, warn, error, fatal, panic (--log-level bayrağını geçersiz kılar) | info |
LOG_FORMAT | Günlük biçimi: text veya json (--log-format bayrağını geçersiz kılar) | text |
TRANSPORT_MODE | HTTP taşımasını etkinleştirmek için streamable-http olarak ayarlayın (eski http değeri hâlâ desteklenir) | stdio |
TRANSPORT_HOST | HTTP sunucusunu bağlayacağı ana bilgisayar | 127.0.0.1 |
TRANSPORT_PORT | HTTP sunucusu bağlantı noktası | 8080 |
MCP_ENDPOINT | HTTP sunucusu uç nokta yolu | /mcp |
MCP_REDIRECT_ROOT_URL | / adresine yapılan istekleri yönlendireceği URL | "" |
MCP_KEEP_ALIVE | SSE bağlantıları için canlı tutma aralığı (örn. 30s, 1m). Devre dışı bırakmak için 0 | 0 |
MCP_SESSION_MODE | Oturum modu: stateful veya stateless | stateful |
MCP_ALLOWED_ORIGINS | CORS için virgülle ayrılmış izin verilen kaynak listesi | "" (boş) |
MCP_CORS_MODE | CORS modu: strict, development veya disabled | strict |
MCP_TLS_CERT_FILE | TLS sertifika dosyasının yolu, localhost dışı dağıtım için gereklidir (örn. /path/to/cert.pem) | "" (boş) |
MCP_TLS_KEY_FILE | TLS anahtar dosyasının yolu, localhost dışı dağıtım için gereklidir (örn. /path/to/key.pem) | "" (boş) |
MCP_RATE_LIMIT_GLOBAL | Genel hız sınırı (biçim: rps:burst) | 10:20 |
MCP_RATE_LIMIT_SESSION | Oturum başına hız sınırı (biçim: rps:burst) | 5:10 |
MCP_ORGANIZATION_ALLOWLIST | HTTP 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ın | false |
MCP_REMOTE_IP_METHOD | Yönlendirme etkinleştirildiğinde istemci IP'sinin nasıl kaynaklandığı: RemoteAddr (yalnızca doğrudan bağlantı), X-Real-IP veya X-Forwarded-For | RemoteAddr |
MCP_XFF_TRUSTED_HOPS | X-Forwarded-For zincirinin sağından sayılan güvenilir proxy atlama sayısı. Yalnızca MCP_REMOTE_IP_METHOD=X-Forwarded-For olduğunda kullanılır | 0 |
ENABLE_TF_OPERATIONS | Açık onay gerektiren araçları etkinleştir | false |
OTEL_METRICS_ENABLED | Otel kullanarak araçları ve sunucu metriklerini etkinleştir | false |
OTEL_METRICS_SERVICE_VERSION | Metrik gönderen terraform-mcp-server sürümü; metrik özniteliklerini ayarlamak için kullanılır. Ayrıca farklı dağıtımlar arasında metrikleri izlemeye yardımcı olur | latest |
OTEL_METRICS_SERVICE_NAME | Metriklerin kaynağını tanımlar (örn. "terraform-mcp-server") | terraform-mcp-server |
OTEL_METRICS_EXPORT_INTERVAL | Metrik boşaltma sıklığını kontrol eder | 2 |
OTEL_METRICS_ENDPOINT | OTel Toplayıcınızın veya arka uç sisteminizin URL'si | localhost:4318 |
INSTANA_ENABLED | Streamable-http sunucusu için Instana enstrümantasyonunu (metrikler ve HTTP istek izleme) etkinleştir. Sunucu tarafından erişilebilen bir Instana aracısı gerektirir. | false |
INSTANA_SERVICE_NAME | Instana enstrümantasyonu etkinse, 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 konumunda 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. Bu tür bir talimat örneği instructions/example-mcp-instructions.md konumunda bulunur.
AGENTS.md temel olarak kodlama aracıları için README gibi davranır: AI kodlama aracılarının projeniz üzerinde çalışmasına yardımcı olmak için bağlam ve talimatlar sağlamak üzere ayrılmış, öngörülebilir bir yer. Tek bir AGENTS.md dosyası farklı kodlama aracılarıyla çalışır. Bu tür bir talimat örneği instructions/example-AGENTS.md konumunda bulunur; kullanmak için Terraform yapılandırmalarınızın bulunduğu dizine AGENTS.md adında bir dosya işleyin.
Kurulum
Visual Studio Code ile Kullanım
VS Code'da Kullanıcı Ayarları (JSON) dosyanıza aşağıdaki JSON bloğunu ekleyin. Bunu Ctrl + Shift + P tuşuna basarak ve Preferences: Open User Settings (JSON) yazarak yapabilirsiniz.
VS Code'da MCP sunucu araçlarını kullanma hakkında daha fazla bilgi için aracı modu belgelerine bakın.
| Sürüm 0.3.0+ veya üzeri | Sürüm 0.2.3 veya altı |
|---|---|
|
|
İ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.
| Sürüm 0.3.0+ veya üzeri | Sürüm 0.2.3 veya altı |
|---|---|
|
|
Cursor ile Kullanım
Bunu Cursor yapılandırmanıza (~/.cursor/mcp.json) veya Ayarlar → Cursor Ayarları → MCP üzerinden ekleyin:
| Sürüm 0.3.0+ veya üzeri | Sürüm 0.2.3 veya altı |
|---|---|
|
|
Claude Desktop / Amazon Q Developer / Kiro CLI ile Kullanım
MCP sunucu araçlarını Claude Desktop'ta kullanma hakkında daha fazla bilgi için kullanıcı dokümantasyonu. MCP sunucusunu Amazon Q Developer ve Kiro CLI içinde kullanma hakkında daha fazla bilgi edinin.
| Sürüm 0.3.0 veya üzeri | Sürüm 0.2.3 veya altı |
|---|---|
|
|
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ı dokümantasyonu
- Yerel (
stdio) Taşıma
claude mcp add terraform -s user -t stdio -- docker run -i --rm hashicorp/terraform-mcp-server
- Uzak (
streamable-http) Taşıma
# 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
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ı dokümantasyonu.
Not: Kimliği doğrulanmış HCP Terraform veya Terraform Enterprise araçları için Docker komutlarına
TFE_ADDRESSveTFE_TOKENekleyin.
- Yerel (
stdio) Taşıma
codex mcp add terraform -- docker run -i --rm hashicorp/terraform-mcp-server
- Uzak (
streamable-http) Taşıma
# 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
Gemini uzantılarıyla 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 (burada ~ ev veya proje dizininizdir) oluşturun veya güncelleyin
# ~/.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ı.
| Sürüm 0.3.0 veya üzeri | Sürüm 0.2.3 veya altı |
|---|---|
|
|
Kubernetes (Helm)
Sunucuyu Kubernetes üzerinde dağıtmak için bir Helm chart'ı helm/terraform-mcp-server altında mevcuttur.
Kaynaktan Kurulum
En son sürümü 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
| Sürüm 0.3.0 veya üzeri | Sürüm 0.2.3 veya altı |
|---|---|
|
|
Docker İmajını Yerel Olarak Oluşturma
Sunucuyu kullanmadan önce, Docker imajını yerel olarak oluşturmanız gerekir:
- Depoyu klonlayın:
git clone https://github.com/hashicorp/terraform-mcp-server.git
cd terraform-mcp-server
- Docker imajını oluşturun:
make docker-build
- Bu, aşağıdaki yapılandırmada kullanabileceğiniz yerel bir Docker imajı oluşturacaktır.
# 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
Not: Docker içinde çalışırken, konteyner dışından bağlantılara izin vermek için
TRANSPORT_HOST=0.0.0.0ayarlamalısınız.
- (İsteğe bağlı) http modunda bağlantıyı test edin
# Test the connection
curl http://localhost:8080/health
- Bunu yapay zeka asistanınızda şu şekilde 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, HTTP mux'u otelhttp.NewHandler(...) ile sarmalayarak standart HTTP sunucu metrikleri eklenir. Bu şunları yayar:
- http.server.request.body.size
- http.server.response.body.size
- http.server.request.duration
İkinci olarak, MCP sunucusu, MCP kancalarını (BeforeCallTool / AfterCallTool) kullanarak araç yürütme etrafında özel araç metrikleri kaydeder. Bunlar şunları yayar:
- mcp_tool_calls_total
- mcp_tool_errors_total
- mcp_tool_duration_seconds
Araç Filtreleme
--toolsets (gruplar) veya --tools (bireysel) kullanarak hangi araçların kullanılabilir olduğunu kontrol edin:
# 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
Kullanılabilir araç setleri: registry, registry-private, terraform, all, default. Bireysel araç adları için pkg/toolsets/mapping.go bölümüne bakın. Her iki bayrağı birlikte kullanamazsınız.
Taşıma Desteği
Terraform MCP Sunucusu birden fazla taşıma protokolünü destekler:
1. Stdio Taşıma (Varsayılan)
JSON-RPC mesajlarını 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ı Olayları (SSE) akışlarını destekleyen modern HTTP tabanlı taşıma. Uzak/dağıtık kurulumlar için önerilen taşımadır.
Ö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=httpveyaTRANSPORT_PORT=8080ayarlayın - Kuruluş İzin Listesi: İzin verilen HCP Terraform kuruluş adlarının CSV listesi için
MCP_ORGANIZATION_ALLOWLISTveya--organization-allowlistayarlayın
Oturum Modları
Terraform MCP Sunucusu, StreamableHTTP taşımasını kullanırken iki oturum modunu destekler:
- Durumlu Mod (Varsayılan): İstekler arasında oturum durumunu korur, bağlam duyarlı işlemleri etkinleştirir.
- Durumsuz Mod: Her istek, oturum durumunu korumadan 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 modunda) çalıştırırken, her kullanıcı RBAC uygulaması için HTTP başlıkları aracılığıyla kendi Terraform token'ını 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, taşıyıcı token önceliklidir; bu, izin listesi tarafından doğrulanan token'ın Terraform API istekleri için kullanılan token olduğunu garanti eder. Kuruluş adı eşleştirmesi büyük/küçük harf 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 dengeleyicinin 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'e göre kaynaklandırır:
| Yöntem | Davranış |
|---|---|
RemoteAddr (varsayılan) | Yalnızca doğrudan TCP bağlantısının adresini kullanır. X-Forwarded-For ve X-Real-IP'i yok sayar. |
X-Real-IP | Geçerli bir IP ise X-Real-IP başlığını kullanır, aksi takdirde RemoteAddr'e geri döner. |
X-Forwarded-For | X-Forwarded-For zincirini kullanır, sağdan MCP_XFF_TRUSTED_HOPS konumlarındaki girişi seçer. Değer eksik veya geçersizse RemoteAddr'e geri döner. |
Güven modeli
X-Forwarded-For ve X-Real-IP istemciler ve ara proxy'ler tarafından ayarlanır, bu nedenle sunucunun önündeki güvenilir bir proxy bunların üzerine yazmadıkça taklit edilebilirler. Bu nedenle varsayılan, sunucunun doğrudan bağlı olduğu eşe yalnızca güvenen RemoteAddr'dir. X-Real-IP veya X-Forwarded-For'i yalnızca sunucu, bu başlıkları ayarlayan kontrol ettiğiniz bir proxy'nin arkasındayken etkinleştirin.
Güvenilir atlamalar
X-Forwarded-For kullanılırken, MCP_XFF_TRUSTED_HOPS, sunucu ile internet arasında işlettiğiniz proxy sayısıdır. Atlama sayısı zincirin sağından sayılır, çünkü her proxy isteği aldığı adresi ekler ve en sağdaki giriş sunucuya en yakın proxy tarafından ayarlanır. Sunucu, bu kadar güvenilir girişi atlar ve soldaki bir sonrakini alır.
Örneğin, MCP_XFF_TRUSTED_HOPS=1 ve 200.1.2.3, 10.1.1.10 başlığıyla sunucu 200.1.2.3'i seçer. MCP_XFF_TRUSTED_HOPS=2 ve 108.0.0.1, 200.1.2.3, 10.1.1.10, 192.168.0.1 ile 200.1.2.3'i seçer. Atlama sayısı giriş sayısından büyükse veya seçilen giriş geçerli bir IP değilse, sunucu RemoteAddr'e geri döner.
Atlama sayısını çok düşük ayarlamak, istemci tarafından sağlanan bir değere güvenir; çok yüksek ayarlamak, kendi altyapınızın daha derinindeki bir adrese güvenir. İşlettiğiniz proxy sayısının tam değerine ayarlayın.
Sınırlamalar
- Sunucu, bir istekte yalnızca ilk
X-Forwarded-Forbaşlığını okur. Bir isteğin birden fazlaX-Forwarded-Forbaşlığı taşıması geçerlidir, ancak Go'nun standart kitaplığı yalnızca ilkini döndürür ve sunucu bunları birleştirmez. Proxy zinciriniz birden fazla başlık yayıyorsa, tek bir birleşikX-Forwarded-Forbaşlığı yayacak şekilde yapılandırın. - IPv4 ve IPv6 adreslerinin her ikisi de desteklenir. Geçerli IP olmayan değerler reddedilir ve sunucu
RemoteAddr'e 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. Bu güvensizdi, çünkü en soldaki değer en kolay taklit edilebilendir. Varsayılan artık RemoteAddr'tir. Sunucuyu bir proxy'nin arkasında çalıştırıyorsanız ve X-Forwarded-For'nın HCP Terraform / TFE'ye iletilmesine güveniyorsanız, MCP_REMOTE_IP_METHOD=X-Forwarded-For ve MCP_XFF_TRUSTED_HOPS'i işlettiğiniz proxy sayısına ayarlayın.
Desteklenen Başlıklar
| Başlık | Açıklama |
|---|---|
TFE_TOKEN | Terraform API token'ı |
Authorization: Bearer <token> | Standart Bearer kimlik doğrulamasını 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 Hususları
- TFE_ADDRESS istemciler tarafından ayarlanamaz. Streamable-http modunda Terraform adresi yalnızca sunucu tarafındaki
TFE_ADDRESSortam değişkeninden (veya varsayılandan) kaynaklanır. HTTP başlığı veya sorgu parametresi aracılığıylaTFE_ADDRESSayarlamaya çalışan istekler 403 ile reddedilir. Bu, bir istemcinin istekleri veAuthorizationtoken'ını kötü amaçlı bir sunucuya yönlendirmesini önler. - Barındırılan dağıtım kimliği:
TF_MCP_SHARED_SECRETayarlamak, bu değeri her HCP Terraform / TFE isteğindeX-Tf-Mcp-Secretbaşlığı olarak gönderir ve arka uçun bilinen bir barındırılan dağıtımdan gelen istekleri tanımlamasına olanak tanır (ör. IP izin listeleri uygulamak için). Bir başlıkta gönderilen statik bir sırdır, bu nedenle yalnızca TLS üzerinden kullanın ve değere bir kimlik bilgisi gibi davranın. - Token'ları asla sorgu parametrelerinde iletmeyin - sunucu bu tür istekleri 400 hatasıyla reddeder.
- Merkezi olarak dağıtırken token'ları aktarım sırasında 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_ORIGINSyapı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.3.0
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ı sağlar.
Sorun Giderme
Kurumsal Proxy / TLS Denetimi (Zscaler, vb.)
TLS denetimi yapan bir kurumsal proxy'nin arkasındaysanız (Zscaler Internet Access gibi), sertifika hataları görebilirsiniz:
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.3.0
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.3.0"
]
}
}
}
Alternatif: İkili dosyayı doğrudan çalıştırın
Ortamınızda Docker'a izin verilmiyorsa, sunucu ikili dosyasını doğrudan kurabilir ve çalıştırabilirsiniz; bu, sisteminizin sertifika deposunu kullanacaktı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ı
| Komut | Açıklama |
|---|---|
make build | İkili dosyayı derle |
make test | Tüm testleri çalıştır |
make test-e2e | Uçtan uca testleri çalıştır |
make docker-build | Docker imajı oluştur |
make run-http | HTTP sunucusunu yerel olarak çalıştır |
make docker-run-http | HTTP sunucusunu Docker'da çalıştır |
make test-http | HTTP sağlık uç noktasını test et |
make clean | Derleme yapılarını kaldır |
make help | Tüm kullanılabilir komutları göster |
Katkıda Bulunma
- Depoyu çatallayın (fork)
- Özellik dalınızı oluşturun
- Değişikliklerinizi yapın
- Testleri çalıştırın
- Bir çekme isteği gönderin
Lisans
Bu proje, MPL-2.0 açık kaynak lisansı koşulları altında lisanslanmıştır. Tam koşullar için lütfen LISANS 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 raporları ve özellik istekleri için lütfen GitHub üzerinde bir sorun (issue) açın.
Genel sorular ve tartışmalar için bir GitHub Tartışması açın.