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?
- 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_ADDRESSveTFE_TOKENaracı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_HOSTveTRANSPORT_PORTilestreamable-httpmodunda başlatın. - Erişimi kuruluşa göre kısıtlayın —
MCP_ORGANIZATION_ALLOWLISTkullanarak 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ı
--toolsetsveya--toolsile 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
Ö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
- Sunucuyu konteynerleştirilmiş bir ortamda kullanmak için Docker'ın kurulu ve çalışıyor olduğundan emin olun.
- Model Context Protocol (MCP)'ü destekleyen bir yapay zeka 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 (ö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_TOKEN | Terraform Enterprise API token'ı | "" (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 kaydı düzeyi: trace, debug, info, warn, error, fatal, panic (--log-level bayrağını geçersiz kılar) | info |
LOG_FORMAT | Günlük kaydı 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â desteklenmektedir) | stdio |
TRANSPORT_HOST | HTTP sunucusunun bağlanacağı ana bilgisayar | 127.0.0.1 |
TRANSPORT_PORT | HTTP sunucusu bağlantı noktası | 8080 |
MCP_ENDPOINT | HTTP sunucusu uç noktası yolu | /mcp |
MCP_REDIRECT_ROOT_URL | / isteklerinin yönlendirileceği URL | "" |
MCP_KEEP_ALIVE | SSE bağlantıları için keep-alive aralığı (ör. 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 izin verilen kaynakların virgülle ayrılmış 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 (ör. /path/to/cert.pem) | "" (boş) |
MCP_TLS_KEY_FILE | TLS anahtar dosyasının yolu, localhost dışı dağıtım için gereklidir (ör. /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 elde edileceği: 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üvenilen 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 metriklerin izlenmesine yardımcı olur | latest |
OTEL_METRICS_SERVICE_NAME | Metriklerin kaynağını tanımlar (ör. "terraform-mcp-server") | terraform-mcp-server |
OTEL_METRICS_EXPORT_INTERVAL | Metrik boşaltma sıklığını kontrol eder | 2 |
OTEL_METRICS_ENDPOINT | OTel Collector veya arka ucunuzun URL'si | localhost:4318 |
INSTANA_ENABLED | streamable-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_NAME | Instana 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.
| Yerel | Uzak |
|---|---|
|
|
İ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.
| Yerel | Uzak |
|---|---|
|
|
Cursor ile Kullanım
Bunu Cursor yapılandırmanıza (~/.cursor/mcp.json) veya Ayarlar → Cursor Ayarları → MCP yoluyla ekleyin:
| Yerel | Uzak |
|---|---|
| ```json { "mcpServers": { "terraform": { "url": "https://mcp.terraform.io/mcp", "headers": { "Authorization": "Bearer <>" } } } } ``` |
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.
| Yerel | Uzak |
|---|---|
|
|
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
| Yerel | Uzak |
|---|---|
|
|
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_ADDRESSveTFE_TOKENekleyin.
| Yerel | Uzak |
|---|---|
|
|
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.
| Yerel | Uzak |
|---|---|
|
|
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.
| Yerel | Uzak |
|---|---|
|
|
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
| Yerel | Uzak |
|---|---|
|
|
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ş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.0değerini ayarlamalısınız.
- (İsteğe bağlı) http modunda bağlantıyı test edin
# Test the connection
curl http://localhost:8080/health
- 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:
- 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ütmesi etrafında özel araç metrikleri kaydeder. Bunlar şunları yayar:
- mcp_tool_calls_total
- mcp_tool_errors_total
- 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=httpveyaTRANSPORT_PORT=8080ayarlayın - Kuruluş İzin Listesi: İzin verilen HCP Terraform kuruluş adlarının CSV listesi olarak
MCP_ORGANIZATION_ALLOWLISTveya--organization-allowlistayarlayı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ö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 yok sayılır. |
X-Real-IP | Geçerli bir IP ise X-Real-IP başlığını kullanır, aksi takdirde RemoteAddr değerine geri döner. |
X-Forwarded-For | X-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-Forbaşlığı taşıyorsa, sunucu bir girdi seçmeden önce bunları sırayla birleştirir.X-Forwarded-Forbaşlığı. - Hem IPv4 hem de IPv6 adresleri desteklenir. Geçerli IP olmayan değerler reddedilir ve sunucu
RemoteAddrdeğ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ık | Açıklama |
|---|---|
TFE_TOKEN | Terraform 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_ADDRESSortam değişkeninden (veya varsayılandan) alınır.TFE_ADDRESSdeğerini HTTP başlığı veya sorgu parametresi aracılığıyla ayarlamaya çalışan istekler 403 ile reddedilir. Bu, bir istemcinin istekleri veAuthorizationtoken'ını kötü niyetli bir sunucuya yönlendirmesini önler. - Barındırılan dağıtım tanımlama:
TF_MCP_SHARED_SECRETayarlamak, bu değeri her HCP Terraform / TFE isteğindeX-Tf-Mcp-Secretbaş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_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.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ı
| 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ı derle |
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 çıktılarını kaldır |
make help | Tüm kullanılabilir komutları göster |
Katkıda Bulunma
- Depoyu çatallayın
- Ö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ı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.