Terraform MCP Server

आधिकारिक

HashiCorp Terraform के लिए इन्फ्रास्ट्रक्चर ऐज़ कोड वर्कफ़्लो हेतु MCP सर्वर, जिसमें Terraform रजिस्ट्री के माध्यम से प्रदाता और मॉड्यूल खोज शामिल है।

Terraform MCP के साथ आप क्या कर सकते हैं?

  • सार्वजनिक Terraform रजिस्ट्री खोजें — AI से कीवर्ड द्वारा प्रदाता या मॉड्यूल खोजने के लिए search_providers या search_modules का उपयोग करने का अनुरोध करें।
  • प्रदाता और मॉड्यूल विवरण प्राप्त करें — किसी विशिष्ट प्रदाता या मॉड्यूल के लिए दस्तावेज़ीकरण, संस्करण, और इनपुट/आउटपुट get_provider_details और get_module_details के माध्यम से प्राप्त करें।
  • HCP Terraform वर्कस्पेस प्रबंधित करेंlist_workspaces, create_workspace, और संबंधित टूल के साथ वर्कस्पेस को सूचीबद्ध करें, बनाएं, अपडेट करें या हटाएं और उनके वेरिएबल, टैग और रन प्रबंधित करें।
  • संगठन और प्रोजेक्ट सूचीबद्ध करेंlist_organizations और list_projects का उपयोग करके सुलभ HCP Terraform संगठनों और उनके प्रोजेक्ट ब्राउज़ करें।
  • निजी रजिस्ट्री तक पहुंचें — TFE इंस्टेंस से कनेक्ट होने पर निजी Terraform Enterprise रजिस्ट्री से विवरण खोजें और प्राप्त करें।

दस्तावेज़

Terraform MCP सर्वर

Terraform MCP सर्वर एक मॉडल कॉन्टेक्स्ट प्रोटोकॉल (MCP) सर्वर है जो Terraform रजिस्ट्री API के साथ सहज एकीकरण प्रदान करता है, जो इंफ्रास्ट्रक्चर ऐज़ कोड (IaC) विकास के लिए उन्नत स्वचालन और अंतःक्रिया क्षमताओं को सक्षम करता है।

विशेषताएँ

  • दोहरी ट्रांसपोर्ट सपोर्ट: कॉन्फ़िगरेबल एंडपॉइंट के साथ Stdio और StreamableHTTP दोनों ट्रांसपोर्ट
  • Terraform रजिस्ट्री एकीकरण: प्रदाताओं, मॉड्यूल और नीतियों के लिए सार्वजनिक Terraform रजिस्ट्री API के साथ सीधा एकीकरण
  • HCP Terraform और Terraform Enterprise सपोर्ट: पूर्ण कार्यक्षेत्र प्रबंधन, संगठन/प्रोजेक्ट सूचीकरण और निजी रजिस्ट्री पहुँच
  • कार्यक्षेत्र संचालन: चर, टैग और रन प्रबंधन के समर्थन के साथ कार्यक्षेत्र बनाएँ, अपडेट करें, हटाएँ
  • उपकरण उपयोग की निगरानी के लिए OTel मेट्रिक्स: Streamable HTTP मोड में टूल-कॉल वॉल्यूम, विलंबता और विफलताओं को ट्रैक करने के लिए ओपन टेलीमेट्री मीटर के साथ एकीकरण। यह सुविधा सक्षम होने पर डिफ़ॉल्ट HTTP सर्वर मेट्रिक्स भी उजागर करता है

सुरक्षा नोट: क्वेरी के आधार पर, MCP सर्वर कुछ Terraform डेटा को MCP क्लाइंट और LLM के सामने उजागर कर सकता है। अविश्वसनीय MCP क्लाइंट या LLM के साथ MCP सर्वर का उपयोग न करें।

कानूनी नोट: किसी तृतीय-पक्ष MCP क्लाइंट/LLM का आपका उपयोग पूरी तरह से ऐसे MCP/LLM के उपयोग की शर्तों के अधीन है, और IBM ऐसे तृतीय-पक्ष उपकरणों के प्रदर्शन के लिए जिम्मेदार नहीं है। IBM तृतीय-पक्ष MCP क्लाइंट/LLM के लिए किसी भी और सभी वारंटी और दायित्व को स्पष्ट रूप से अस्वीकार करता है, और तृतीय-पक्ष उपकरणों के कारण होने वाली समस्याओं को हल करने के लिए सहायता प्रदान करने में सक्षम नहीं हो सकता है।

सावधानी: MCP सर्वर द्वारा प्रदान किए गए आउटपुट और सिफारिशें गतिशील रूप से उत्पन्न होती हैं और क्वेरी, मॉडल और कनेक्टेड MCP क्लाइंट के आधार पर भिन्न हो सकती हैं। उपयोगकर्ताओं को कार्यान्वयन से पहले यह सुनिश्चित करने के लिए सभी आउटपुट/सिफारिशों की अच्छी तरह से समीक्षा करनी चाहिए कि वे उनके संगठन की सुरक्षा सर्वोत्तम प्रथाओं, लागत-दक्षता लक्ष्यों और अनुपालन आवश्यकताओं के साथ संरेखित हों।

पूर्वापेक्षाएँ

  1. सुनिश्चित करें कि कंटेनरीकृत वातावरण में सर्वर का उपयोग करने के लिए Docker स्थापित और चालू है।
  2. एक AI सहायक स्थापित करें जो मॉडल कॉन्टेक्स्ट प्रोटोकॉल (MCP) का समर्थन करता हो।

कमांड लाइन विकल्प

पर्यावरण चर:

चरविवरणडिफ़ॉल्ट
TFE_ADDRESSAPI कॉल के लिए Terraform Enterprise/HCP Terraform पता सेट करता है। प्रोटोकॉल शामिल होना चाहिए (जैसे, https://app.terraform.io)। स्ट्रीमेबल-http मोड में पता सेट करने का यही एकमात्र तरीका है; इसे क्लाइंट द्वारा हेडर या क्वेरी पैरामीटर के माध्यम से आपूर्ति नहीं किया जा सकता है।वैकल्पिक
TFE_TOKENTerraform Enterprise API टोकन"" (खाली)
TF_MCP_SHARED_SECRETHCP Terraform / TFE के अनुरोधों पर X-Tf-Mcp-Secret हेडर के रूप में भेजा गया साझा रहस्य, जिसका उपयोग होस्टेड MCP परिनियोजन से उत्पन्न अनुरोधों की पहचान करने के लिए किया जाता है। केवल TLS पर उपयोग किया जाना चाहिए।"" (खाली)
TFE_SKIP_TLS_VERIFYHCP Terraform या Terraform Enterprise TLS सत्यापन छोड़ेंfalse
LOG_LEVELलॉगिंग स्तर: trace, debug, info, warn, error, fatal, panic (--log-level फ्लैग को ओवरराइड करता है)info
LOG_FORMATलॉगिंग प्रारूप: text या json (--log-format फ्लैग को ओवरराइड करता है)text
TRANSPORT_MODEHTTP ट्रांसपोर्ट सक्षम करने के लिए streamable-http पर सेट करें (विरासत http मान अभी भी समर्थित है)stdio
TRANSPORT_HOSTHTTP सर्वर को बाइंड करने के लिए होस्ट127.0.0.1
TRANSPORT_PORTHTTP सर्वर पोर्ट8080
MCP_ENDPOINTHTTP सर्वर एंडपॉइंट पथ/mcp
MCP_REDIRECT_ROOT_URL/ पर अनुरोधों को पुनर्निर्देशित करने के लिए URL""
MCP_KEEP_ALIVESSE कनेक्शन के लिए कीप-अलाइव अंतराल (जैसे, 30s, 1m)। अक्षम करने के लिए 00
MCP_SESSION_MODEसत्र मोड: stateful या statelessstateful
MCP_ALLOWED_ORIGINSCORS के लिए अनुमत मूल की अल्पविराम-पृथक सूची"" (खाली)
MCP_CORS_MODECORS मोड: strict, development, या disabledstrict
MCP_TLS_CERT_FILETLS प्रमाणपत्र फ़ाइल का पथ, गैर-लोकलहोस्ट परिनियोजन के लिए आवश्यक (जैसे /path/to/cert.pem)"" (खाली)
MCP_TLS_KEY_FILETLS कुंजी फ़ाइल का पथ, गैर-लोकलहोस्ट परिनियोजन के लिए आवश्यक (जैसे /path/to/key.pem)"" (खाली)
MCP_RATE_LIMIT_GLOBALवैश्विक दर सीमा (प्रारूप: rps:burst)10:20
MCP_RATE_LIMIT_SESSIONप्रति-सत्र दर सीमा (प्रारूप: rps:burst)5:10
MCP_ORGANIZATION_ALLOWLISTHTTP सर्वर तक पहुँचने की अनुमति प्राप्त HCP Terraform संगठन नामों की CSV सूची"" (खाली)
MCP_FORWARD_CLIENT_IPX-Forwarded-For के माध्यम से क्लाइंट IP को HCP Terraform / TFE को अग्रेषित करें। सक्षम करने के लिए true पर सेट करेंfalse
MCP_REMOTE_IP_METHODअग्रेषण सक्षम होने पर क्लाइंट IP कैसे स्रोत किया जाता है: RemoteAddr (केवल सीधा कनेक्शन), X-Real-IP, या X-Forwarded-ForRemoteAddr
MCP_XFF_TRUSTED_HOPSX-Forwarded-For श्रृंखला के दाईं ओर से गिने जाने वाले विश्वसनीय प्रॉक्सी हॉप्स की संख्या। केवल तब उपयोग किया जाता है जब MCP_REMOTE_IP_METHOD=X-Forwarded-For0
ENABLE_TF_OPERATIONSऐसे उपकरण सक्षम करें जिनके लिए स्पष्ट अनुमोदन की आवश्यकता हैfalse
OTEL_METRICS_ENABLEDotel का उपयोग करके उपकरण और सर्वर मेट्रिक्स सक्षम करेंfalse
OTEL_METRICS_SERVICE_VERSIONमेट्रिक्स भेजने वाले terraform-mcp-server का संस्करण, जिसका उपयोग मीट्रिक विशेषताएँ सेट करने के लिए किया जाता है। यह विभिन्न परिनियोजनों में मेट्रिक्स को ट्रैक करने में भी मदद करता हैlatest
OTEL_METRICS_SERVICE_NAMEमेट्रिक्स के स्रोत की पहचान करता है (जैसे, "terraform-mcp-server")terraform-mcp-server
OTEL_METRICS_EXPORT_INTERVALमीट्रिक फ्लश की आवृत्ति को नियंत्रित करता है2
OTEL_METRICS_ENDPOINTआपके OTel कलेक्टर या बैकएंड का URLlocalhost:4318
INSTANA_ENABLEDस्ट्रीमेबल-http सर्वर के लिए Instana इंस्ट्रूमेंटेशन (मेट्रिक्स और HTTP अनुरोध ट्रेसिंग) सक्षम करें। एक Instana एजेंट की आवश्यकता है जो सर्वर द्वारा पहुँच योग्य हो।false
# 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>]

निर्देश

MCP सर्वर के लिए डिफ़ॉल्ट निर्देश cmd/terraform-mcp-server/instructions.md में स्थित हैं, यदि वे आपके संगठन की Terraform प्रथाओं के लिए उपयुक्त नहीं लगते हैं या यदि MCP सर्वर गलत प्रतिक्रियाएँ उत्पन्न कर रहा है, तो कृपया उन्हें अपने स्वयं के निर्देशों से बदलें और कंटेनर या बाइनरी का पुनर्निर्माण करें। ऐसे निर्देश का एक उदाहरण instructions/example-mcp-instructions.md में स्थित है

AGENTS.md अनिवार्य रूप से कोडिंग एजेंटों के लिए README के रूप में व्यवहार करता है: AI कोडिंग एजेंटों को आपके प्रोजेक्ट पर काम करने में मदद करने के लिए संदर्भ और निर्देश प्रदान करने के लिए एक समर्पित, पूर्वानुमेय स्थान। एक AGENTS.md फ़ाइल विभिन्न कोडिंग एजेंटों के साथ काम करती है। ऐसे निर्देश का एक उदाहरण instructions/example-AGENTS.md में स्थित है, इसका उपयोग करने के लिए उस निर्देशिका में AGENTS.md नामक एक फ़ाइल कमिट करें जहाँ आपके Terraform कॉन्फ़िगरेशन रहते हैं।

स्थापना

Visual Studio Code के साथ उपयोग

VS Code में अपनी उपयोगकर्ता सेटिंग्स (JSON) फ़ाइल में निम्नलिखित JSON ब्लॉक जोड़ें। आप Ctrl + Shift + P दबाकर और Preferences: Open User Settings (JSON) टाइप करके ऐसा कर सकते हैं।

VS Code के एजेंट मोड दस्तावेज़ीकरण में MCP सर्वर उपकरणों का उपयोग करने के बारे में अधिक जानकारी।

संस्करण 0.3.0+ या अधिकसंस्करण 0.2.3 या कम
{
  "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.1.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"
        ]
      }
    }
  }
}

वैकल्पिक रूप से, आप अपने कार्यक्षेत्र में .vscode/mcp.json नामक फ़ाइल में एक समान उदाहरण (यानी mcp कुंजी के बिना) जोड़ सकते हैं। यह आपको दूसरों के साथ कॉन्फ़िगरेशन साझा करने की अनुमति देगा।

संस्करण 0.3.0+ या अधिकसंस्करण 0.2.3 या कम
{
  "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.1.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 के साथ उपयोग

इसे अपने Cursor कॉन्फ़िग (~/.cursor/mcp.json) में या सेटिंग्स → Cursor सेटिंग्स → MCP के माध्यम से जोड़ें:

संस्करण 0.3.0+ या अधिकसंस्करण 0.2.3 या कम
{
  "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.1.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 के साथ उपयोग

Claude Desktop उपयोगकर्ता दस्तावेज़ीकरण में MCP सर्वर उपकरणों का उपयोग करने के बारे में अधिक जानकारी। Amazon Q Developer और Kiro CLI में MCP सर्वर का उपयोग करने के बारे में और पढ़ें।

संस्करण 0.3.0+ या अधिकसंस्करण 0.2.3 या कम
{
  "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.1.0"
      ]
    }
  }
}
{
  "mcpServers": {
    "terraform": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "hashicorp/terraform-mcp-server:0.2.3"
      ]
    }
  }
}

Claude Code के साथ उपयोग

Claude Code उपयोगकर्ता दस्तावेज़ीकरण में MCP सर्वर उपकरणों का उपयोग करने और जोड़ने के बारे में अधिक जानकारी

  • स्थानीय (stdio) ट्रांसपोर्ट
claude mcp add terraform -s user -t stdio -- docker run -i --rm hashicorp/terraform-mcp-server
  • दूरस्थ (streamable-http) ट्रांसपोर्ट
# 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

Gemini एक्सटेंशन के साथ उपयोग

सुरक्षा के लिए, अपने क्रेडेंशियल्स को हार्डकोड करने से बचें, HCP Terraform या Terraform Enterprise क्रेडेंशियल्स को संग्रहीत करने के लिए ~/.gemini/.env (जहाँ ~ आपकी होम या प्रोजेक्ट निर्देशिका है) बनाएँ या अपडेट करें

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

एक्सटेंशन स्थापित करें और Gemini चलाएँ

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

Bob IDE / Shell के साथ उपयोग

Bob IDE या Shell में MCP सर्वर उपकरणों का उपयोग करने और जोड़ने के बारे में अधिक जानकारी Bob में MCP का उपयोग करना

संस्करण 0.3.0+ या अधिकसंस्करण 0.2.3 या कम
{
  "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.1.0"
      ],
      "disabled": false
    }
  }
}
{
  "mcpServers": {
    "terraform": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "hashicorp/terraform-mcp-server:0.2.3"
      ],
      "disabled": false
    }
  }
}

स्रोत से स्थापित करें

नवीनतम रिलीज़ संस्करण का उपयोग करें:

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

मुख्य शाखा का उपयोग करें:

go install github.com/hashicorp/terraform-mcp-server/cmd/terraform-mcp-server@main
संस्करण 0.3.0+ या अधिकसंस्करण 0.2.3 या कम
{
  "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 इमेज बनाना

सर्वर का उपयोग करने से पहले, आपको स्थानीय रूप से Docker इमेज बनानी होगी:

  1. रिपॉजिटरी क्लोन करें:
git clone https://github.com/hashicorp/terraform-mcp-server.git
cd terraform-mcp-server
  1. Docker इमेज बनाएँ:
make docker-build
  1. यह एक स्थानीय Docker इमेज बनाएगा जिसका उपयोग आप निम्नलिखित कॉन्फ़िगरेशन में कर सकते हैं।
# 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

नोट: Docker में चलते समय, आपको कंटेनर के बाहर से कनेक्शन की अनुमति देने के लिए TRANSPORT_HOST=0.0.0.0 सेट करना चाहिए।

  1. (वैकल्पिक) http मोड में कनेक्शन का परीक्षण करें
# Test the connection
curl http://localhost:8080/health
  1. आप इसे अपने AI सहायक पर निम्नानुसार उपयोग कर सकते हैं:
{
  "mcpServers": {
    "terraform": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "terraform-mcp-server:dev"
      ]
    }
  }
}

उपलब्ध उपकरण

यहाँ उपलब्ध उपकरण देखें :link:

उपलब्ध संसाधन

यहाँ उपलब्ध संसाधन देखें :link:

उपलब्ध मेट्रिक्स

दो प्रकार के मेट्रिक्स एकत्र किए जाते हैं। पहला, otelhttp.NewHandler(...) के साथ HTTP mux को रैप करके मानक HTTP सर्वर मेट्रिक्स जोड़े जाते हैं। यह उत्सर्जित करता है:

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

दूसरा, MCP सर्वर MCP हुक (BeforeCallTool / AfterCallTool) का उपयोग करके उपकरण निष्पादन के आसपास कस्टम टूल मेट्रिक्स रिकॉर्ड करता है। ये उत्सर्जित करते हैं:

  1. mcp_tool_calls_total
  2. mcp_tool_errors_total
  3. mcp_tool_duration_seconds

उपकरण फ़िल्टरिंग

--toolsets (समूह) या --tools (व्यक्तिगत) का उपयोग करके नियंत्रित करें कि कौन से उपकरण उपलब्ध हैं:

# 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

उपलब्ध उपकरण सेट: registry, registry-private, terraform, all, default। व्यक्तिगत उपकरण नामों के लिए pkg/toolsets/mapping.go देखें। दोनों फ़्लैग एक साथ उपयोग नहीं कर सकते।

ट्रांसपोर्ट समर्थन

Terraform MCP सर्वर कई ट्रांसपोर्ट प्रोटोकॉल का समर्थन करता है:

1. Stdio ट्रांसपोर्ट (डिफ़ॉल्ट)

JSON-RPC संदेशों का उपयोग करके मानक इनपुट/आउटपुट संचार। स्थानीय विकास और MCP क्लाइंट के साथ सीधे एकीकरण के लिए आदर्श।

2. StreamableHTTP ट्रांसपोर्ट

आधुनिक HTTP-आधारित ट्रांसपोर्ट जो सीधे HTTP अनुरोधों और सर्वर-प्रेषित ईवेंट (SSE) स्ट्रीम दोनों का समर्थन करता है। दूरस्थ/वितरित सेटअप के लिए यह अनुशंसित ट्रांसपोर्ट है।

विशेषताएँ:

  • एंडपॉइंट: http://{hostname}:8080/mcp
  • स्वास्थ्य जाँच: http://{hostname}:8080/health
  • पर्यावरण कॉन्फ़िगरेशन: सक्षम करने के लिए TRANSPORT_MODE=http या TRANSPORT_PORT=8080 सेट करें
  • संगठन अनुमति सूची: अनुमत HCP Terraform संगठन नामों की CSV सूची के लिए MCP_ORGANIZATION_ALLOWLIST या --organization-allowlist सेट करें

सत्र मोड

StreamableHTTP ट्रांसपोर्ट का उपयोग करते समय Terraform MCP सर्वर दो सत्र मोड का समर्थन करता है:

  • स्टेटफुल मोड (डिफ़ॉल्ट): अनुरोधों के बीच सत्र स्थिति बनाए रखता है, संदर्भ-जागरूक संचालन सक्षम करता है।
  • स्टेटलेस मोड: प्रत्येक अनुरोध सत्र स्थिति बनाए रखे बिना स्वतंत्र रूप से संसाधित किया जाता है, जो उच्च-उपलब्धता परिनियोजन या लोड बैलेंसर का उपयोग करते समय उपयोगी हो सकता है।

स्टेटलेस मोड सक्षम करने के लिए, पर्यावरण चर सेट करें:

export MCP_SESSION_MODE=stateless

केंद्रीकृत परिनियोजन के लिए टोकन पासथ्रू

जब MCP सर्वर को केंद्रीय रूप से (StreamableHTTP मोड) कई उपयोगकर्ताओं के लिए चलाया जाता है, तो प्रत्येक उपयोगकर्ता RBAC प्रवर्तन के लिए HTTP हेडर के माध्यम से अपना स्वयं का Terraform टोकन पास कर सकता है। यह एकल सर्वर इंस्टेंस को विभिन्न अनुमतियों वाले कई उपयोगकर्ताओं की सेवा करने की अनुमति देता है।

जब MCP_ORGANIZATION_ALLOWLIST या --organization-allowlist कॉन्फ़िगर किया जाता है, तो अनुमति सूची HCP Terraform संगठन नामों की CSV सूची होनी चाहिए। सर्वर को Authorization: Bearer <token> की आवश्यकता होती है और अनुरोधों को अस्वीकार करता है जब तक कि वह टोकन CSV अनुमति सूची में कम से कम एक संगठन तक नहीं पहुँच सकता। यदि अनुरोध में TFE_TOKEN हेडर भी शामिल है तो बियरर टोकन को प्राथमिकता दी जाती है, यह सुनिश्चित करते हुए कि अनुमति सूची द्वारा मान्य टोकन Terraform API अनुरोधों के लिए उपयोग किया जाने वाला टोकन है। संगठन नाम मिलान केस-असंवेदनशील है। यदि कॉन्फ़िगर किया गया CSV मान शून्य संगठन नामों में पार्स होता है, तो सर्वर एक विकृत संगठन अनुमति सूची त्रुटि के साथ बाहर निकल जाता है।

क्लाइंट IP अग्रेषण

जब MCP सर्वर को प्रॉक्सी या लोड बैलेंसर के पीछे केंद्रीय रूप से चलाया जाता है, तो आप X-Forwarded-For हेडर के माध्यम से उत्पन्न क्लाइंट के IP को HCP Terraform / TFE पर अग्रेषित कर सकते हैं। यह डिफ़ॉल्ट रूप से बंद है और इसे MCP_FORWARD_CLIENT_IP=true के साथ सक्षम किया जाना चाहिए।

सक्षम होने पर, सर्वर MCP_REMOTE_IP_METHOD के अनुसार क्लाइंट IP प्राप्त करता है:

विधिव्यवहार
RemoteAddr (डिफ़ॉल्ट)केवल सीधे TCP कनेक्शन के पते का उपयोग करता है। X-Forwarded-For और X-Real-IP को अनदेखा करता है।
X-Real-IPX-Real-IP हेडर का उपयोग करता है यदि यह एक मान्य IP है, अन्यथा RemoteAddr पर वापस आ जाता है।
X-Forwarded-ForX-Forwarded-For श्रृंखला का उपयोग करता है, दाईं ओर से MCP_XFF_TRUSTED_HOPS स्थान पर प्रविष्टि का चयन करता है। यदि मान गुम या अमान्य है तो RemoteAddr पर वापस आ जाता है।

विश्वास मॉडल

X-Forwarded-For और X-Real-IP क्लाइंट और मध्यस्थ प्रॉक्सी द्वारा सेट किए जाते हैं, इसलिए उन्हें धोखा दिया जा सकता है जब तक कि सर्वर के सामने कोई विश्वसनीय प्रॉक्सी उन्हें अधिलेखित न करे। इस कारण से डिफ़ॉल्ट RemoteAddr है, जो केवल उस पीयर पर भरोसा करता है जिससे सर्वर सीधे जुड़ा है। केवल X-Real-IP या X-Forwarded-For सक्षम करें जब सर्वर आपके द्वारा नियंत्रित प्रॉक्सी के पीछे बैठता है जो ये हेडर सेट करता है।

विश्वसनीय हॉप्स

X-Forwarded-For का उपयोग करते समय, MCP_XFF_TRUSTED_HOPS आपके द्वारा सर्वर और इंटरनेट के बीच संचालित प्रॉक्सी की संख्या है। हॉप्स को श्रृंखला के दाईं ओर से गिना जाता है, क्योंकि प्रत्येक प्रॉक्सी उस पते को जोड़ता है जिससे उसने अनुरोध प्राप्त किया और सबसे दाहिनी प्रविष्टि सर्वर के सबसे निकटतम प्रॉक्सी द्वारा सेट की जाती है। सर्वर उतनी विश्वसनीय प्रविष्टियों को छोड़ता है और बाईं ओर अगली प्रविष्टि लेता है।

उदाहरण के लिए, MCP_XFF_TRUSTED_HOPS=1 और 200.1.2.3, 10.1.1.10 के हेडर के साथ, सर्वर 200.1.2.3 का चयन करता है। MCP_XFF_TRUSTED_HOPS=2 और 108.0.0.1, 200.1.2.3, 10.1.1.10, 192.168.0.1 के साथ, यह 200.1.2.3 का चयन करता है। यदि हॉप गणना प्रविष्टियों की संख्या से अधिक है, या चयनित प्रविष्टि मान्य IP नहीं है, तो सर्वर RemoteAddr पर वापस आ जाता है।

हॉप गणना बहुत कम सेट करने पर क्लाइंट-आपूर्ति मूल्य पर भरोसा होगा; बहुत अधिक सेट करने पर आपके अपने बुनियादी ढांचे में आगे के पते पर भरोसा होगा। इसे आपके द्वारा चलाए जाने वाले प्रॉक्सी की सटीक संख्या पर सेट करें।

सीमाएँ

  • सर्वर किसी अनुरोध पर केवल पहला X-Forwarded-For हेडर पढ़ता है। अनुरोध के लिए कई X-Forwarded-For हेडर ले जाना मान्य है, लेकिन Go की मानक लाइब्रेरी केवल पहला लौटाती है, और सर्वर उन्हें जोड़ता नहीं है। यदि आपकी प्रॉक्सी श्रृंखला कई हेडर उत्सर्जित करती है, तो इसे एकल संयुक्त X-Forwarded-For हेडर उत्सर्जित करने के लिए कॉन्फ़िगर करें।
  • IPv4 और IPv6 दोनों पते समर्थित हैं। जो मान मान्य IP नहीं हैं उन्हें अस्वीकार कर दिया जाता है और सर्वर RemoteAddr पर वापस आ जाता है।

पुराने संस्करणों से माइग्रेट करना

पुराने संस्करण हेडर मौजूद होने पर सबसे बाएँ X-Forwarded-For मान का उपयोग करते थे, बिना किसी कॉन्फ़िगरेशन के। यह असुरक्षित था, क्योंकि सबसे बायाँ मान सबसे आसानी से धोखा दिया जा सकता है। डिफ़ॉल्ट अब RemoteAddr है। यदि आप प्रॉक्सी के पीछे सर्वर चलाते हैं और X-Forwarded-For को HCP Terraform / TFE पर अग्रेषित किए जाने पर निर्भर करते हैं, तो MCP_REMOTE_IP_METHOD=X-Forwarded-For सेट करें और MCP_XFF_TRUSTED_HOPS को आपके द्वारा संचालित प्रॉक्सी की संख्या पर सेट करें।

समर्थित हेडर

हेडरविवरण
TFE_TOKENTerraform API टोकन
Authorization: Bearer <token>मानक Bearer प्रमाणीकरण का उपयोग करके वैकल्पिक विधि
TFE_SKIP_TLS_VERIFYअनुरोध के लिए TLS सत्यापन छोड़ें

उदाहरण: 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",...}'

सुरक्षा विचार

  • TFE_ADDRESS क्लाइंट द्वारा सेट नहीं किया जा सकता। स्ट्रीमेबल-http मोड में Terraform पता केवल सर्वर-साइड TFE_ADDRESS पर्यावरण चर (या डिफ़ॉल्ट) से प्राप्त किया जाता है। HTTP हेडर या क्वेरी पैरामीटर के माध्यम से TFE_ADDRESS सेट करने का प्रयास करने वाले अनुरोधों को 403 के साथ अस्वीकार कर दिया जाता है। यह क्लाइंट को अनुरोधों और Authorization टोकन को दुर्भावनापूर्ण सर्वर पर पुनर्निर्देशित करने से रोकता है।
  • होस्टेड परिनियोजन पहचान: TF_MCP_SHARED_SECRET सेट करने से प्रत्येक HCP Terraform / TFE अनुरोध पर उस मान को X-Tf-Mcp-Secret हेडर के रूप में भेजा जाता है, जिससे बैकएंड किसी ज्ञात होस्टेड परिनियोजन से अनुरोधों की पहचान कर सकता है (जैसे IP अनुमति सूची लागू करने के लिए)। यह एक हेडर में भेजा गया स्थैतिक रहस्य है, इसलिए इसे केवल TLS पर उपयोग करें और मान को एक क्रेडेंशियल के रूप में मानें।
  • क्वेरी पैरामीटर में कभी भी टोकन पास न करें - सर्वर ऐसे अनुरोधों को 400 त्रुटि के साथ अस्वीकार कर देगा।
  • पारगमन में टोकन की सुरक्षा के लिए केंद्रीय रूप से परिनियोजित करते समय हमेशा TLS (MCP_TLS_CERT_FILE/MCP_TLS_KEY_FILE) का उपयोग करें।
  • कौन से क्लाइंट कनेक्ट कर सकते हैं इसे प्रतिबंधित करने के लिए MCP_ALLOWED_ORIGINS कॉन्फ़िगर करें।

केंद्रीकृत परिनियोजन उदाहरण

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

उपयोगकर्ता फिर हेडर के माध्यम से पारित अपने व्यक्तिगत टोकन के साथ जुड़ते हैं, प्रति-उपयोगकर्ता RBAC प्रवर्तन सक्षम करते हैं।

समस्या निवारण

कॉर्पोरेट प्रॉक्सी / TLS निरीक्षण (Zscaler, आदि)

यदि आप कॉर्पोरेट प्रॉक्सी के पीछे हैं जो TLS निरीक्षण करता है (जैसे Zscaler इंटरनेट एक्सेस), तो आपको प्रमाणपत्र त्रुटियाँ दिख सकती हैं:

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

समाधान: अपने कॉर्पोरेट CA प्रमाणपत्र को कंटेनर में माउंट करें:

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

MCP क्लाइंट कॉन्फ़िगरेशन के लिए:

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

वैकल्पिक: बाइनरी सीधे चलाएँ

यदि आपके वातावरण में Docker की अनुमति नहीं है, तो आप सर्वर बाइनरी को सीधे इंस्टॉल और चला सकते हैं, जो आपके सिस्टम के प्रमाणपत्र स्टोर का उपयोग करेगा:

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

विकास

पूर्वापेक्षाएँ

  • Go (विशिष्ट संस्करण के लिए go.mod फ़ाइल देखें)
  • Docker (वैकल्पिक, कंटेनर बिल्ड के लिए)

उपलब्ध Make कमांड

कमांडविवरण
make buildबाइनरी बनाएँ
make testसभी परीक्षण चलाएँ
make test-e2eएंड-टू-एंड परीक्षण चलाएँ
make docker-buildDocker इमेज बनाएँ
make run-httpHTTP सर्वर स्थानीय रूप से चलाएँ
make docker-run-httpDocker में HTTP सर्वर चलाएँ
make test-httpHTTP स्वास्थ्य एंडपॉइंट का परीक्षण करें
make cleanबिल्ड आर्टिफैक्ट हटाएँ
make helpसभी उपलब्ध कमांड दिखाएँ

योगदान

  1. रिपॉजिटरी को फोर्क करें
  2. अपनी सुविधा शाखा बनाएँ
  3. अपने परिवर्तन करें
  4. परीक्षण चलाएँ
  5. पुल अनुरोध सबमिट करें

लाइसेंस

यह परियोजना MPL-2.0 ओपन सोर्स लाइसेंस की शर्तों के तहत लाइसेंस प्राप्त है। पूर्ण शर्तों के लिए कृपया LICENSE फ़ाइल देखें।

सुरक्षा

सुरक्षा मुद्दों के लिए, कृपया security@hashicorp.com पर संपर्क करें या हमारी सुरक्षा नीति का पालन करें।

समर्थन

बग रिपोर्ट और सुविधा अनुरोधों के लिए, कृपया GitHub पर एक मुद्दा खोलें।

सामान्य प्रश्नों और चर्चाओं के लिए, GitHub चर्चा खोलें।