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 mode —
streamable-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) विकास के लिए उन्नत स्वचालन और इंटरैक्शन क्षमताओं को सक्षम बनाता है।
विषय-सूची
विशेषताएँ
- दोहरा ट्रांसपोर्ट समर्थन: कॉन्फ़िगर करने योग्य एंडपॉइंट्स के साथ 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 क्लाइंट के आधार पर भिन्न हो सकती हैं। उपयोगकर्ताओं को कार्यान्वयन से पहले सभी आउटपुट/अनुशंसाओं की गहन समीक्षा करनी चाहिए ताकि यह सुनिश्चित हो सके कि वे अपने संगठन की सुरक्षा सर्वोत्तम प्रथाओं, लागत-दक्षता लक्ष्यों और अनुपालन आवश्यकताओं के अनुरूप हैं।
पूर्वापेक्षाएँ
- सुनिश्चित करें कि Docker स्थापित और चल रहा है ताकि सर्वर को कंटेनरीकृत वातावरण में उपयोग किया जा सके।
- एक AI सहायक स्थापित करें जो Model Context Protocol (MCP) का समर्थन करता हो।
कमांड लाइन विकल्प
पर्यावरण चर:
| चर | विवरण | डिफ़ॉल्ट |
|---|---|---|
TFE_ADDRESS | API कॉल के लिए Terraform Enterprise/HCP Terraform पता सेट करता है। प्रोटोकॉल शामिल होना चाहिए (जैसे, https://app.terraform.io)। streamable-http मोड में यह पता सेट करने का एकमात्र तरीका है; इसे क्लाइंट द्वारा हेडर या क्वेरी पैरामीटर के माध्यम से आपूर्ति नहीं किया जा सकता है। | वैकल्पिक |
TFE_TOKEN | Terraform Enterprise API टोकन | "" (खाली) |
TF_MCP_SHARED_SECRET | HCP Terraform / TFE को अनुरोधों पर X-Tf-Mcp-Secret हेडर के रूप में भेजा गया साझा रहस्य, होस्ट किए गए MCP परिनियोजन से उत्पन्न अनुरोधों की पहचान करने के लिए उपयोग किया जाता है। केवल TLS पर उपयोग किया जाना चाहिए। | "" (खाली) |
TFE_SKIP_TLS_VERIFY | HCP 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_MODE | HTTP ट्रांसपोर्ट सक्षम करने के लिए streamable-http पर सेट करें (पुराना http मान अभी भी समर्थित है) | stdio |
TRANSPORT_HOST | HTTP सर्वर को बाइंड करने के लिए होस्ट | 127.0.0.1 |
TRANSPORT_PORT | HTTP सर्वर पोर्ट | 8080 |
MCP_ENDPOINT | HTTP सर्वर एंडपॉइंट पथ | /mcp |
MCP_REDIRECT_ROOT_URL | / पर अनुरोधों को पुनर्निर्देशित करने के लिए URL | "" |
MCP_KEEP_ALIVE | SSE कनेक्शन के लिए कीप-अलाइव अंतराल (जैसे, 30s, 1m)। अक्षम करने के लिए 0 | 0 |
MCP_SESSION_MODE | सत्र मोड: stateful या stateless | stateful |
MCP_ALLOWED_ORIGINS | CORS के लिए अनुमत ओरिजिन की अल्पविराम-पृथक सूची | "" (खाली) |
MCP_CORS_MODE | CORS मोड: strict, development, या disabled | strict |
MCP_TLS_CERT_FILE | TLS प्रमाणपत्र फ़ाइल का पथ, गैर-लोकलहोस्ट परिनियोजन के लिए आवश्यक (जैसे /path/to/cert.pem) | "" (खाली) |
MCP_TLS_KEY_FILE | TLS कुंजी फ़ाइल का पथ, गैर-लोकलहोस्ट परिनियोजन के लिए आवश्यक (जैसे /path/to/key.pem) | "" (खाली) |
MCP_RATE_LIMIT_GLOBAL | वैश्विक दर सीमा (प्रारूप: rps:burst) | 10:20 |
MCP_RATE_LIMIT_SESSION | प्रति-सत्र दर सीमा (प्रारूप: rps:burst) | 5:10 |
MCP_ORGANIZATION_ALLOWLIST | HTTP सर्वर तक पहुँचने के लिए अनुमत 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-For | RemoteAddr |
MCP_XFF_TRUSTED_HOPS | X-Forwarded-For श्रृंखला के दाईं ओर से गिने जाने वाले विश्वसनीय प्रॉक्सी हॉप्स की संख्या। केवल तब उपयोग किया जाता है जब MCP_REMOTE_IP_METHOD=X-Forwarded-For | 0 |
ENABLE_TF_OPERATIONS | स्पष्ट अनुमोदन की आवश्यकता वाले उपकरण सक्षम करें | false |
OTEL_METRICS_ENABLED | otel का उपयोग करके उपकरण और सर्वर मेट्रिक्स सक्षम करें | 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 कलेक्टर या बैकएंड का URL | localhost:4318 |
INSTANA_ENABLED | streamable-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 या निचला |
|---|---|
|
|
वैकल्पिक रूप से, आप अपने वर्कस्पेस में .vscode/mcp.json नामक फ़ाइल में एक समान उदाहरण (यानी mcp कुंजी के बिना) जोड़ सकते हैं। यह आपको कॉन्फ़िगरेशन को दूसरों के साथ साझा करने की अनुमति देगा।
| संस्करण 0.3.0+ या उच्चतर | संस्करण 0.2.3 या निचला |
|---|---|
|
|
Cursor के साथ उपयोग
इसे अपने Cursor कॉन्फ़िग (~/.cursor/mcp.json) में या Settings → Cursor Settings → MCP के माध्यम से जोड़ें:
| संस्करण 0.3.0+ या उच्चतर | संस्करण 0.2.3 या निचला |
|---|---|
|
|
Claude Desktop / Amazon Q Developer / Kiro CLI के साथ उपयोग
Claude Desktop में MCP सर्वर टूल्स का उपयोग करने के बारे में अधिक जानकारी उपयोगकर्ता दस्तावेज़ में देखें। Amazon Q Developer और Kiro CLI में MCP सर्वर का उपयोग करने के बारे में अधिक पढ़ें।
| संस्करण 0.3.0+ या उससे अधिक | संस्करण 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 या उससे कम |
|---|---|
|
|
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 या उससे कम |
|---|---|
|
|
Docker इमेज को स्थानीय रूप से बनाना
सर्वर का उपयोग करने से पहले, आपको Docker इमेज को स्थानीय रूप से बनाना होगा:
- रिपॉजिटरी को क्लोन करें:
git clone https://github.com/hashicorp/terraform-mcp-server.git
cd terraform-mcp-server
- Docker इमेज बनाएं:
make docker-build
- यह एक स्थानीय 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सेट करना चाहिए।
- (वैकल्पिक) http मोड में कनेक्शन का परीक्षण करें
# Test the connection
curl http://localhost:8080/health
- आप इसे अपने AI सहायक में निम्नानुसार उपयोग कर सकते हैं:
{
"mcpServers": {
"terraform": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"terraform-mcp-server:dev"
]
}
}
}
उपलब्ध टूल्स
उपलब्ध टूल्स यहाँ देखें :link:
उपलब्ध संसाधन
उपलब्ध संसाधन यहाँ देखें :link:
उपलब्ध मेट्रिक्स
दो प्रकार के मेट्रिक्स एकत्र किए जाते हैं। पहले, मानक HTTP सर्वर मेट्रिक्स को HTTP mux को otelhttp.NewHandler(...) के साथ लपेटकर जोड़ा जाता है। यह निम्न उत्सर्जित करता है:
- http.server.request.body.size
- http.server.response.body.size
- http.server.request.duration
दूसरे, MCP सर्वर MCP हुक्स (BeforeCallTool / AfterCallTool) का उपयोग करके टूल निष्पादन के आसपास कस्टम टूल मेट्रिक्स रिकॉर्ड करता है। ये निम्न उत्सर्जित करते हैं:
- mcp_tool_calls_total
- mcp_tool_errors_total
- 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-IP | X-Real-IP हेडर का उपयोग करता है यदि यह एक मान्य IP है, अन्यथा RemoteAddr पर वापस आ जाता है। |
X-Forwarded-For | X-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_TOKEN | Terraform 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-build | Docker इमेज बनाएँ |
make run-http | HTTP सर्वर को स्थानीय रूप से चलाएँ |
make docker-run-http | HTTP सर्वर को Docker में चलाएँ |
make test-http | HTTP स्वास्थ्य एंडपॉइंट का परीक्षण करें |
make clean | बिल्ड आर्टिफैक्ट हटाएँ |
make help | सभी उपलब्ध कमांड दिखाएँ |
योगदान
- रिपॉजिटरी को फोर्क करें
- अपनी फीचर शाखा बनाएँ
- अपने बदलाव करें
- परीक्षण चलाएँ
- पुल रिक्वेस्ट सबमिट करें
लाइसेंस
यह प्रोजेक्ट MPL-2.0 ओपन सोर्स लाइसेंस की शर्तों के तहत लाइसेंस प्राप्त है। पूर्ण शर्तों के लिए कृपया LICENSE फ़ाइल देखें।
सुरक्षा
सुरक्षा मुद्दों के लिए, कृपया security@hashicorp.com से संपर्क करें या हमारी सुरक्षा नीति का पालन करें।
सहायता
बग रिपोर्ट और फीचर अनुरोधों के लिए, कृपया GitHub पर एक इश्यू खोलें।
सामान्य प्रश्नों और चर्चाओं के लिए, GitHub डिस्कशन खोलें।