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और संबंधित टूल का उपयोग करके वर्कस्पेस और उनके वेरिएबल्स को सूचीबद्ध करें, बनाएं, अपडेट करें या हटाएं। - नियंत्रित करें कि कौन से टूल उपलब्ध हैं —
--toolsetsया--toolsफ़्लैग का उपयोग करके सर्वर कोregistryयाterraformजैसे विशिष्ट टूलसेट तक, याlist_workspacesजैसे व्यक्तिगत टूल तक सीमित करें। - केंद्रीकृत मल्टी-यूज़र मोड में चलाएं — सर्वर को StreamableHTTP मोड में तैनात करें ताकि प्रत्येक उपयोगकर्ता प्रति-उपयोगकर्ता RBAC के लिए हेडर के माध्यम से अपना स्वयं का
TFE_TOKENपास कर सके।
दस्तावेज़
Terraform MCP सर्वर
Terraform MCP सर्वर एक मॉडल कॉन्टेक्स्ट प्रोटोकॉल (MCP) सर्वर है जो Terraform रजिस्ट्री API के साथ सहज एकीकरण प्रदान करता है, जो इंफ्रास्ट्रक्चर ऐज़ कोड (IaC) विकास के लिए उन्नत स्वचालन और सहभागिता क्षमताओं को सक्षम करता है।
विशेषताएँ
- दोहरा ट्रांसपोर्ट समर्थन: कॉन्फ़िगर करने योग्य एंडपॉइंट के साथ Stdio और StreamableHTTP दोनों ट्रांसपोर्ट
- Terraform रजिस्ट्री एकीकरण: प्रदाताओं, मॉड्यूल और नीतियों के लिए सार्वजनिक Terraform रजिस्ट्री API के साथ सीधा एकीकरण
- HCP Terraform और Terraform Enterprise समर्थन: पूर्ण कार्यक्षेत्र प्रबंधन, संगठन/प्रोजेक्ट सूचीकरण और निजी रजिस्ट्री पहुँच
- कार्यक्षेत्र संचालन: चर, टैग और रन प्रबंधन के समर्थन के साथ कार्यक्षेत्र बनाएँ, अपडेट करें, हटाएँ
- उपकरण उपयोग की निगरानी के लिए OTel मेट्रिक्स: स्ट्रीमेबल HTTP मोड में टूल-कॉल वॉल्यूम, विलंबता और विफलताओं को ट्रैक करने के लिए ओपन टेलीमेट्री मीटर के साथ एकीकरण। यह सुविधा सक्षम होने पर डिफ़ॉल्ट HTTP सर्वर मेट्रिक्स भी उजागर करता है
सुरक्षा नोट: क्वेरी के आधार पर, MCP सर्वर कुछ Terraform डेटा को MCP क्लाइंट और LLM के सामने उजागर कर सकता है। अविश्वसनीय MCP क्लाइंट या LLM के साथ MCP सर्वर का उपयोग न करें।
कानूनी नोट: किसी तृतीय-पक्ष MCP क्लाइंट/LLM का आपका उपयोग पूरी तरह से ऐसे MCP/LLM के उपयोग की शर्तों के अधीन है, और IBM ऐसे तृतीय-पक्ष उपकरणों के प्रदर्शन के लिए जिम्मेदार नहीं है। IBM तृतीय-पक्ष MCP क्लाइंट/LLM के लिए किसी भी और सभी वारंटी और दायित्व को स्पष्ट रूप से अस्वीकार करता है, और तृतीय-पक्ष उपकरणों के कारण होने वाली समस्याओं को हल करने के लिए सहायता प्रदान करने में सक्षम नहीं हो सकता है।
सावधानी: MCP सर्वर द्वारा प्रदान किए गए आउटपुट और सिफारिशें गतिशील रूप से उत्पन्न होती हैं और क्वेरी, मॉडल और कनेक्टेड MCP क्लाइंट के आधार पर भिन्न हो सकती हैं। उपयोगकर्ताओं को कार्यान्वयन से पहले यह सुनिश्चित करने के लिए सभी आउटपुट/सिफारिशों की अच्छी तरह से समीक्षा करनी चाहिए कि वे उनके संगठन की सुरक्षा सर्वोत्तम प्रथाओं, लागत-दक्षता लक्ष्यों और अनुपालन आवश्यकताओं के साथ संरेखित हों।
पूर्वापेक्षाएँ
- सुनिश्चित करें कि कंटेनरीकृत वातावरण में सर्वर का उपयोग करने के लिए Docker स्थापित और चल रहा है।
- एक AI सहायक स्थापित करें जो मॉडल कॉन्टेक्स्ट प्रोटोकॉल (MCP) का समर्थन करता हो।
कमांड लाइन विकल्प
पर्यावरण चर:
| चर | विवरण | डिफ़ॉल्ट |
|---|---|---|
TFE_ADDRESS | API कॉल के लिए Terraform Enterprise/HCP Terraform पता सेट करता है। प्रोटोकॉल शामिल होना चाहिए (जैसे, https://app.terraform.io)। स्ट्रीमेबल-http मोड में पता सेट करने का यही एकमात्र तरीका है; इसे क्लाइंट द्वारा हेडर या क्वेरी पैरामीटर के माध्यम से आपूर्ति नहीं किया जा सकता है। | वैकल्पिक |
TFE_TOKEN | Terraform Enterprise API टोकन | "" (खाली) |
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 | X-Forwarded-For के माध्यम से क्लाइंट IP को 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 |
# 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 या कम |
|---|---|
|
|
वैकल्पिक रूप से, आप अपने कार्यक्षेत्र में .vscode/mcp.json नामक फ़ाइल में एक समान उदाहरण (अर्थात mcp कुंजी के बिना) जोड़ सकते हैं। यह आपको कॉन्फ़िगरेशन को दूसरों के साथ साझा करने की अनुमति देगा।
| संस्करण 0.3.0+ या अधिक | संस्करण 0.2.3 या कम |
|---|---|
|
|
Cursor के साथ उपयोग
इसे अपने Cursor कॉन्फ़िग (~/.cursor/mcp.json) में या सेटिंग्स → Cursor सेटिंग्स → 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
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 या कम |
|---|---|
|
|
स्रोत से स्थापित करें
नवीनतम रिलीज़ संस्करण का उपयोग करें:
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 | यदि यह एक मान्य IP है तो X-Real-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 है। यदि आप सर्वर को प्रॉक्सी के पीछे चलाते हैं और HCP Terraform / TFE को अग्रेषित किए जा रहे X-Forwarded-For पर निर्भर हैं, तो MCP_REMOTE_IP_METHOD=X-Forwarded-For सेट करें और MCP_XFF_TRUSTED_HOPS को आपके द्वारा संचालित प्रॉक्सी की संख्या पर सेट करें।
समर्थित हेडर
| हेडर | विवरण |
|---|---|
TFE_TOKEN | Terraform API टोकन |
Authorization: Bearer <token> | मानक Bearer auth का उपयोग करने वाली वैकल्पिक विधि |
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टोकन को दुर्भावनापूर्ण सर्वर पर पुनर्निर्देशित करने से रोकता है। - क्वेरी पैरामीटर में कभी भी टोकन पास न करें - सर्वर ऐसे अनुरोधों को 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 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.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-build | Docker इमेज बनाएँ |
make run-http | HTTP सर्वर स्थानीय रूप से चलाएँ |
make docker-run-http | Docker में HTTP सर्वर चलाएँ |
make test-http | HTTP हेल्थ एंडपॉइंट का परीक्षण करें |
make clean | बिल्ड आर्टिफैक्ट हटाएँ |
make help | सभी उपलब्ध कमांड दिखाएँ |
योगदान
- रिपॉजिटरी को फोर्क करें
- अपनी सुविधा शाखा बनाएँ
- अपने परिवर्तन करें
- परीक्षण चलाएँ
- एक पुल अनुरोध सबमिट करें
लाइसेंस
यह परियोजना MPL-2.0 ओपन सोर्स लाइसेंस की शर्तों के तहत लाइसेंस प्राप्त है। पूर्ण शर्तों के लिए कृपया LICENSE फ़ाइल देखें।
सुरक्षा
सुरक्षा मुद्दों के लिए, कृपया security@hashicorp.com पर संपर्क करें या हमारी सुरक्षा नीति का पालन करें।
समर्थन
बग रिपोर्ट और सुविधा अनुरोधों के लिए, कृपया GitHub पर एक मुद्दा खोलें।
सामान्य प्रश्नों और चर्चाओं के लिए, GitHub चर्चा खोलें।