Terraform MCP Server

आधिकारिक

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

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

  • Search Terraform Registry — अपने सहायक से search_providers और get_provider_details का उपयोग करके सार्वजनिक रजिस्ट्री से प्रोवाइडर या मॉड्यूल खोजने के लिए कहें।

  • Manage HCP Terraform workspaces — वर्कस्पेस बनाएं, अपडेट करें या हटाएं, और list_workspaces के साथ उन्हें सूचीबद्ध करें, जिसमें वेरिएबल, टैग और रन प्रबंधन शामिल हैं।

  • Filter available tools — नियंत्रित करें कि कौन से टूलसेट या व्यक्तिगत टूल उजागर किए जाएं, जैसे --toolsets=registry,terraform या --tools=search_providers,get_provider_details

  • Run in HTTP modestreamable-http ट्रांसपोर्ट के साथ तैनात करें, जिससे रिमोट एक्सेस, /health पर हेल्थ चेक, और हेडर के माध्यम से प्रति-उपयोगकर्ता टोकन पासथ्रू सक्षम हो।

  • Enforce organization access — केंद्रीकृत तैनाती के लिए MCP_ORGANIZATION_ALLOWLIST का उपयोग करके सर्वर एक्सेस को विशिष्ट HCP Terraform संगठनों तक सीमित करें।

दस्तावेज़

Terraform MCP Server

Terraform MCP Server एक Model Context Protocol (MCP) सर्वर है जो Terraform Registry और HCP Terraform APIs के साथ सहज रूप से एकीकृत होता है, जो Infrastructure as Code (IaC) विकास के लिए उन्नत स्वचालन और इंटरैक्शन क्षमताओं को सक्षम बनाता है।

विषय-सूची

आरंभ करेंक्लाइंट एकीकरणनिर्माण और चलाना
विशेषताएँ
पूर्वापेक्षाएँ
कमांड लाइन विकल्प
निर्देश
स्थापना
Visual Studio Code
Cursor
Claude Desktop, Amazon Q Developer, और Kiro CLI
Claude Code
Codex CLI
Gemini एक्सटेंशन
Bob IDE और Shell
स्रोत से स्थापित करें
Docker इमेज को स्थानीय रूप से बनाना
ट्रांसपोर्ट समर्थन
Stdio ट्रांसपोर्ट
StreamableHTTP ट्रांसपोर्ट
सर्वर क्षमताएँपरिनियोजन और सुरक्षासहायता और योगदान
उपलब्ध उपकरण
उपलब्ध संसाधन
उपलब्ध मेट्रिक्स
उपकरण फ़िल्टरिंग
सत्र मोड
केंद्रीकृत परिनियोजन के लिए टोकन पासथ्रू
क्लाइंट IP अग्रेषण
विश्वास मॉडल
विश्वसनीय हॉप्स
सीमाएँ
पुराने संस्करणों से माइग्रेट करना
समर्थित हेडर
सुरक्षा संबंधी विचार
केंद्रीकृत परिनियोजन उदाहरण
समस्या निवारण
कॉर्पोरेट प्रॉक्सी और TLS निरीक्षण
विकास
योगदान
लाइसेंस
सुरक्षा
समर्थन

विशेषताएँ

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

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

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

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

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

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

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

पर्यावरण चर:

चरविवरणडिफ़ॉल्ट
TFE_ADDRESSAPI कॉल के लिए Terraform Enterprise/HCP Terraform पता सेट करता है। प्रोटोकॉल शामिल होना चाहिए (जैसे, https://app.terraform.io)। streamable-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_IPक्लाइंट IP को X-Forwarded-For के माध्यम से 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_ENABLEDstreamable-http सर्वर के लिए Instana इंस्ट्रूमेंटेशन (मेट्रिक्स और HTTP अनुरोध ट्रेसिंग) सक्षम करें। एक Instana एजेंट की आवश्यकता है जो सर्वर के लिए पहुँच योग्य हो।false
INSTANA_SERVICE_NAMEयदि Instana इंस्ट्रूमेंटेशन सक्षम है, तो MCP सर्वर के लिए उपयोग करने के लिए सेवा नाम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>]

निर्देश

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 में अपनी User Settings (JSON) फ़ाइल में निम्नलिखित JSON ब्लॉक जोड़ें। आप Ctrl + Shift + P दबाकर और Preferences: Open User Settings (JSON) टाइप करके ऐसा कर सकते हैं।

VS Code में MCP सर्वर टूल का उपयोग करने के बारे में अधिक जानकारी agent mode documentation में।

संस्करण 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.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"
        ]
      }
    }
  }
}

वैकल्पिक रूप से, आप अपने वर्कस्पेस में .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.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 के साथ उपयोग

इसे अपने Cursor कॉन्फ़िग (~/.cursor/mcp.json) में या Settings → Cursor Settings → 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.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 के साथ उपयोग

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

Codex CLI के साथ उपयोग

Codex CLI में MCP सर्वर टूल्स का उपयोग और जोड़ने के बारे में अधिक जानकारी उपयोगकर्ता दस्तावेज़ में देखें।

नोट: प्रमाणित HCP Terraform या Terraform Enterprise टूल्स के लिए Docker कमांड में TFE_ADDRESS और TFE_TOKEN जोड़ें।

  • स्थानीय (stdio) ट्रांसपोर्ट
codex mcp add terraform -- docker run -i --rm hashicorp/terraform-mcp-server
  • दूरस्थ (streamable-http) ट्रांसपोर्ट
# 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 एक्सटेंशन के साथ उपयोग

सुरक्षा के लिए, अपनी क्रेडेंशियल्स को हार्डकोड करने से बचें, 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.3.0"
      ],
      "disabled": false
    }
  }
}
{
  "mcpServers": {
    "terraform": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "hashicorp/terraform-mcp-server:0.2.3"
      ],
      "disabled": false
    }
  }
}

Kubernetes (Helm)

Kubernetes पर सर्वर तैनात करने के लिए एक Helm चार्ट helm/terraform-mcp-server के अंतर्गत उपलब्ध है।

स्रोत से इंस्टॉल करें

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

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:

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

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

  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 सेट करें

सत्र मोड

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

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

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

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

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

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

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

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

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.3.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.3.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-httpHTTP सर्वर को Docker में चलाएँ
make test-httpHTTP स्वास्थ्य एंडपॉइंट का परीक्षण करें
make cleanबिल्ड आर्टिफैक्ट हटाएँ
make helpसभी उपलब्ध कमांड दिखाएँ

योगदान

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

लाइसेंस

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

सुरक्षा

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

सहायता

बग रिपोर्ट और फीचर अनुरोधों के लिए, कृपया GitHub पर एक इश्यू खोलें।

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