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?

  • Search Terraform Registry — Asistanınızdan, genel kayıt defterindeki search_providers ve get_provider_details araçlarını kullanarak sağlayıcıları veya modülleri bulmasını isteyin.

  • HCP Terraform çalışma alanlarını yönetinlist_workspaces ile ç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,terraform veya --tools=search_providers,get_provider_details.

  • HTTP modunda çalıştırınstreamable-http taşı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_ALLOWLIST kullanarak 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

Başlangıçİ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
Kaynaktan kurulum
Docker Image'ı 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
Mevcut Araçlar
Mevcut Kaynaklar
Mevcut Metrikler
Araç Filtreleme
Oturum Modları
Merkezi Dağıtımlar için Token Aktarımı
İstemci IP Yönlendirme
Güven modeli
Güvenilir 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ı 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

  1. Sunucuyu konteynerleştirilmiş bir ortamda kullanmak için Docker kurulu ve çalışır durumda olduğundan emin olun.
  2. Model Context Protocol'ü (MCP) destekleyen bir AI 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 (ö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_TOKENTerraform Enterprise API belirteci"" (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 düzeyi: trace, debug, info, warn, error, fatal, panic (--log-level bayrağını geçersiz kılar)info
LOG_FORMATGünlük 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â desteklenir)stdio
TRANSPORT_HOSTHTTP sunucusunu bağlayacağı ana bilgisayar127.0.0.1
TRANSPORT_PORTHTTP sunucusu bağlantı noktası8080
MCP_ENDPOINTHTTP sunucusu uç nokta yolu/mcp
MCP_REDIRECT_ROOT_URL/ adresine yapılan istekleri yönlendireceği URL""
MCP_KEEP_ALIVESSE bağlantıları için canlı tutma aralığı (örn. 30s, 1m). Devre dışı bırakmak için 00
MCP_SESSION_MODEOturum modu: stateful veya statelessstateful
MCP_ALLOWED_ORIGINSCORS için virgülle ayrılmış izin verilen kaynak 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 (örn. /path/to/cert.pem)"" (boş)
MCP_TLS_KEY_FILETLS anahtar dosyasının yolu, localhost dışı dağıtım için gereklidir (örn. /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 kaynaklandığı: 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üvenilir 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 metrikleri izlemeye yardımcı olurlatest
OTEL_METRICS_SERVICE_NAMEMetriklerin kaynağını tanımlar (örn. "terraform-mcp-server")terraform-mcp-server
OTEL_METRICS_EXPORT_INTERVALMetrik boşaltma sıklığını kontrol eder2
OTEL_METRICS_ENDPOINTOTel Toplayıcınızın veya arka uç sisteminizin URL'silocalhost:4318
INSTANA_ENABLEDStreamable-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_NAMEInstana 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 üzeriSürüm 0.2.3 veya altı
{
  "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.3.0"
        ]
      }
    },
    "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": {
        "command": "docker",
        "args": [
          "run",
          "-i",
          "--rm",
          "hashicorp/terraform-mcp-server:0.2.3"
        ]
      }
    }
  }
}

İ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 üzeriSürüm 0.2.3 veya altı
{
  "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.3.0"
      ]
    }
  },
  "inputs": [
    {
      "type": "promptString",
      "id": "tfe_token",
      "description": "Terraform API Token",
      "password": true
    },
    {
      "type": "promptString",
      "id": "tfe_address",
      "description": "Terraform Address",
      "password": false
    }
  ]
}
{
  "servers": {
    "terraform": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "hashicorp/terraform-mcp-server:0.2.3"
      ]
    }
  }
}

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 üzerinden ekleyin:

Sürüm 0.3.0+ veya üzeriSürüm 0.2.3 veya altı
{
  "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.3.0"
      ]
    }
  }
}
{
  "servers": {
    "terraform": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "hashicorp/terraform-mcp-server:0.2.3"
      ]
    }
  }
}
Add terraform MCP server to Cursor

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 üzeriSürüm 0.2.3 veya altı
{
  "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.3.0"
      ]
    }
  }
}
{
  "mcpServers": {
    "terraform": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "hashicorp/terraform-mcp-server:0.2.3"
      ]
    }
  }
}

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_ADDRESS ve TFE_TOKEN ekleyin.

  • 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 üzeriSürüm 0.2.3 veya altı
{
  "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.3.0"
      ],
      "disabled": false
    }
  }
}
{
  "mcpServers": {
    "terraform": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "hashicorp/terraform-mcp-server:0.2.3"
      ],
      "disabled": false
    }
  }
}

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 üzeriSürüm 0.2.3 veya altı
{
  "mcp": {
    "servers": {
      "terraform": {
        "type": "stdio",
        "command": "/path/to/terraform-mcp-server",
        "env": {
          "TFE_TOKEN": "<<TFE_TOKEN_HERE>>"
        },
      }
    }
  }
}
{
  "mcp": {
    "servers": {
      "terraform": {
        "type": "stdio",
        "command": "/path/to/terraform-mcp-server"
      }
    }
  }
}

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ş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.0 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. 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:

  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ütme 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

--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=http veya TRANSPORT_PORT=8080 ayarlayın
  • Kuruluş İzin Listesi: İzin verilen HCP Terraform kuruluş adlarının CSV listesi için MCP_ORGANIZATION_ALLOWLIST veya --organization-allowlist ayarlayı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öntemDavranış
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-IPGeçerli bir IP ise X-Real-IP başlığını kullanır, aksi takdirde RemoteAddr'e geri döner.
X-Forwarded-ForX-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-For başlığını okur. Bir isteğin birden fazla X-Forwarded-For baş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şik X-Forwarded-For baş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ıkAçıklama
TFE_TOKENTerraform 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_ADDRESS ortam değişkeninden (veya varsayılandan) kaynaklanır. HTTP başlığı veya sorgu parametresi aracılığıyla TFE_ADDRESS ayarlamaya çalışan istekler 403 ile reddedilir. Bu, bir istemcinin istekleri ve Authorization token'ını kötü amaçlı bir sunucuya yönlendirmesini önler.
  • Barındırılan dağıtım kimliği: 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 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_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.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ı

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ı oluştur
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 yapılarını kaldır
make helpTüm kullanılabilir komutları göster

Katkıda Bulunma

  1. Depoyu çatallayın (fork)
  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ı 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.