Terraform MCP Server

ทางการ

เซิร์ฟเวอร์ HashiCorp Terraform MCP สำหรับเวิร์กโฟลว์ Infrastructure as Code รวมถึงการค้นหาผู้ให้บริการและโมดูลผ่าน Terraform Registry

คุณทำอะไรได้บ้างด้วย Terraform MCP?

  • Registry และการค้นพบ workspace — ให้ผู้ช่วยของคุณค้นหา Terraform Registry providers, modules และ policies หรือแสดงรายการ HCP Terraform workspaces และ organizations
  • การจัดการ workspace — สร้าง อัปเดต หรือลบ workspaces รวมถึงการจัดการ variables, tags และการเรียกใช้งาน runs ผ่านภาษาธรรมชาติทั้งหมด
  • การปรับใช้แบบ multi-user แบบรวมศูนย์ — กำหนดค่าเซิร์ฟเวอร์ในโหมด streamable-http พร้อมการส่งผ่าน token ต่อผู้ใช้ผ่าน Authorization: Bearer headers เพื่อบังคับใช้ RBAC
  • การควบคุมการปฏิบัติงาน — เปิดหรือปิดใช้งานกลุ่มเครื่องมือเฉพาะ (เช่น registry, terraform) หรือเครื่องมือแต่ละรายการโดยใช้แฟล็ก --toolsets หรือ --tools
  • การเสริมความปลอดภัย — จำกัดการเข้าถึงผ่าน MCP_ORGANIZATION_ALLOWLIST, บังคับใช้ TLS ด้วย MCP_TLS_CERT_FILE/MCP_TLS_KEY_FILE และควบคุม CORS ด้วย MCP_ALLOWED_ORIGINS

เอกสาร

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 Image ในเครื่อง
การรองรับ Transport
Stdio Transport
StreamableHTTP Transport
ความสามารถของเซิร์ฟเวอร์การปรับใช้และความปลอดภัยความช่วยเหลือและการมีส่วนร่วม
เครื่องมือที่มี
ทรัพยากรที่มี
เมตริกที่มี
การกรองเครื่องมือ
โหมดเซสชัน
Token Passthrough สำหรับการปรับใช้แบบรวมศูนย์
การส่งต่อ IP ของไคลเอนต์
โมเดลความน่าเชื่อถือ
hops ที่น่าเชื่อถือ
ข้อจำกัด
การย้ายจากเวอร์ชันก่อนหน้า
ส่วนหัวที่รองรับ
ข้อควรพิจารณาด้านความปลอดภัย
ตัวอย่างการปรับใช้แบบรวมศูนย์
การแก้ไขปัญหา
Corporate Proxy และ TLS Inspection
การพัฒนา
การมีส่วนร่วม
ใบอนุญาต
ความปลอดภัย
การสนับสนุน

คุณสมบัติ

  • รองรับ Transport แบบคู่: รองรับทั้ง Stdio และ StreamableHTTP transports พร้อม endpoint ที่กำหนดค่าได้
  • การผสานรวม Terraform Registry: การผสานรวมโดยตรงกับ Terraform Registry APIs สาธารณะสำหรับ providers, modules และ policies
  • รองรับ HCP Terraform และ Terraform Enterprise: การจัดการ workspace อย่างครบถ้วน การแสดงรายการ organization/project และการเข้าถึง private registry
  • การดำเนินการกับ Workspace: สร้าง อัปเดต ลบ workspaces พร้อมรองรับ variables, tags และการจัดการ run
  • เมตริก OTel สำหรับการตรวจสอบการใช้งานเครื่องมือ: การผสานรวมกับ open telemetry meters เพื่อติดตามปริมาณการเรียกใช้เครื่องมือ ความหน่วง และความล้มเหลวในโหมด Streamable HTTP นอกจากนี้ยังแสดงเมตริกเซิร์ฟเวอร์ HTTP เริ่มต้นเมื่อเปิดใช้คุณสมบัตินี้

หมายเหตุด้านความปลอดภัย: ขึ้นอยู่กับคำค้นหา MCP server อาจเปิดเผยข้อมูล Terraform บางอย่างให้กับ MCP client และ LLM อย่าใช้ MCP server กับ MCP clients หรือ LLMs ที่ไม่น่าเชื่อถือ

หมายเหตุทางกฎหมาย: การใช้ MCP Client/LLM ของบุคคลที่สามของคุณอยู่ภายใต้ข้อกำหนดการใช้งานของ MCP/LLM นั้นเท่านั้น และ IBM ไม่รับผิดชอบต่อประสิทธิภาพของเครื่องมือบุคคลที่สามดังกล่าว IBM ขอปฏิเสธการรับประกันและความรับผิดใดๆ ทั้งสิ้นสำหรับ MCP Clients/LLMs ของบุคคลที่สาม และอาจไม่สามารถให้การสนับสนุนเพื่อแก้ไขปัญหาที่เกิดจากเครื่องมือบุคคลที่สามได้

ข้อควรระวัง: ผลลัพธ์และคำแนะนำที่ให้โดย MCP server ถูกสร้างขึ้นแบบไดนามิกและอาจแตกต่างกันไปตามคำค้นหา โมเดล และ MCP client ที่เชื่อมต่อ ผู้ใช้ควรตรวจสอบผลลัพธ์/คำแนะนำทั้งหมดอย่างละเอียดเพื่อให้แน่ใจว่าสอดคล้องกับแนวปฏิบัติด้านความปลอดภัย เป้าหมายด้านความคุ้มค่า และข้อกำหนดการปฏิบัติตามข้อกำหนดขององค์กรก่อนนำไปใช้งาน

ข้อกำหนดเบื้องต้น

  1. ตรวจสอบให้แน่ใจว่าได้ติดตั้งและรัน Docker เพื่อใช้เซิร์ฟเวอร์ในสภาพแวดล้อมแบบ containerized
  2. ติดตั้งผู้ช่วย AI ที่รองรับ Model Context Protocol (MCP)

ตัวเลือกบรรทัดคำสั่ง

ตัวแปรสภาพแวดล้อม:

ตัวแปรคำอธิบายค่าเริ่มต้น
TFE_ADDRESSกำหนดที่อยู่ Terraform Enterprise/HCP Terraform สำหรับการเรียก API ต้องรวมโปรโตคอล (เช่น https://app.terraform.io) ในโหมด streamable-http นี่เป็นวิธีเดียวในการตั้งค่าที่อยู่ ไม่สามารถระบุโดยไคลเอนต์ผ่าน header หรือ query parameter ได้ไม่บังคับ
TFE_TOKENโทเค็น API ของ Terraform Enterprise"" (ว่างเปล่า)
TF_MCP_SHARED_SECRETความลับที่ใช้ร่วมกันซึ่งส่งเป็น header X-Tf-Mcp-Secret ในการร้องขอไปยัง HCP Terraform / TFE ใช้เพื่อระบุคำขอที่มาจากการปรับใช้ MCP ที่โฮสต์ ควรใช้ผ่าน TLS เท่านั้น"" (ว่างเปล่า)
TFE_SKIP_TLS_VERIFYข้ามการตรวจสอบ TLS ของ HCP Terraform หรือ Terraform Enterprisefalse
LOG_LEVELระดับการบันทึก: trace, debug, info, warn, error, fatal, panic (แทนที่แฟล็ก --log-level)info
LOG_FORMATรูปแบบการบันทึก: text หรือ json (แทนที่แฟล็ก --log-format)text
TRANSPORT_MODEตั้งเป็น streamable-http เพื่อเปิดใช้งาน HTTP transport (ค่ายุคเก่า http ยังรองรับ)stdio
TRANSPORT_HOSTโฮสต์สำหรับผูก HTTP server127.0.0.1
TRANSPORT_PORTพอร์ตของ HTTP server8080
MCP_ENDPOINTเส้นทาง endpoint ของ HTTP server/mcp
MCP_REDIRECT_ROOT_URLURL สำหรับเปลี่ยนเส้นทางคำขอไปยัง /""
MCP_KEEP_ALIVEช่วงเวลา keep-alive สำหรับการเชื่อมต่อ SSE (เช่น 30s, 1m) ตั้งเป็น 0 เพื่อปิดใช้งาน0
MCP_SESSION_MODEโหมดเซสชัน: stateful หรือ statelessstateful
MCP_ALLOWED_ORIGINSรายการ origins ที่อนุญาตสำหรับ CORS คั่นด้วยเครื่องหมายจุลภาค"" (ว่างเปล่า)
MCP_CORS_MODEโหมด CORS: strict, development หรือ disabledstrict
MCP_TLS_CERT_FILEเส้นทางไปยังไฟล์ใบรับรอง TLS จำเป็นสำหรับการปรับใช้นอก localhost (เช่น /path/to/cert.pem)"" (ว่างเปล่า)
MCP_TLS_KEY_FILEเส้นทางไปยังไฟล์คีย์ TLS จำเป็นสำหรับการปรับใช้นอก localhost (เช่น /path/to/key.pem)"" (ว่างเปล่า)
MCP_RATE_LIMIT_GLOBALอัตราจำกัดทั่วโลก (รูปแบบ: rps:burst)10:20
MCP_RATE_LIMIT_SESSIONอัตราจำกัดต่อเซสชัน (รูปแบบ: rps:burst)5:10
MCP_ORGANIZATION_ALLOWLISTรายการ CSV ของชื่อองค์กร HCP Terraform ที่อนุญาตให้เข้าถึง HTTP server"" (ว่างเปล่า)
MCP_FORWARD_CLIENT_IPส่งต่อ IP ของไคลเอนต์ไปยัง HCP Terraform / TFE ผ่าน X-Forwarded-For ตั้งเป็น true เพื่อเปิดใช้งานfalse
MCP_REMOTE_IP_METHODวิธีที่ IP ของไคลเอนต์ถูกดึงมาเมื่อเปิดใช้งานการส่งต่อ: RemoteAddr (การเชื่อมต่อโดยตรงเท่านั้น), X-Real-IP หรือ X-Forwarded-ForRemoteAddr
MCP_XFF_TRUSTED_HOPSจำนวน hops ของพร็อกซีที่น่าเชื่อถือที่นับจากด้านขวาของ chain X-Forwarded-For ใช้เฉพาะเมื่อ MCP_REMOTE_IP_METHOD=X-Forwarded-For0
ENABLE_TF_OPERATIONSเปิดใช้งานเครื่องมือที่ต้องได้รับการอนุมัติอย่างชัดเจนfalse
OTEL_METRICS_ENABLEDเปิดใช้งานเครื่องมือและเมตริกเซิร์ฟเวอร์โดยใช้ otelfalse
OTEL_METRICS_SERVICE_VERSIONเวอร์ชันของ terraform-mcp-server ที่ส่งเมตริก ซึ่งใช้ในการตั้งค่าแอตทริบิวต์เมตริก นอกจากนี้ยังช่วยติดตามเมตริกข้ามการปรับใช้ต่างๆlatest
OTEL_METRICS_SERVICE_NAMEระบุแหล่งที่มาของเมตริก (เช่น "terraform-mcp-server")terraform-mcp-server
OTEL_METRICS_EXPORT_INTERVALควบคุมความถี่ของการ flush เมตริก2
OTEL_METRICS_ENDPOINTURL ของ OTel Collector หรือ backend ของคุณlocalhost:4318
INSTANA_ENABLEDเปิดใช้งานการตรวจวัด Instana (เมตริกและการติดตามคำขอ HTTP) สำหรับ streamable-http server ต้องมี Instana agent ที่เซิร์ฟเวอร์สามารถเข้าถึงได้false
INSTANA_SERVICE_NAMEหากเปิดใช้งานการตรวจวัด Instana ชื่อบริการที่จะใช้สำหรับ MCP serverterraform-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 server อยู่ใน cmd/terraform-mcp-server/instructions.md หากไม่เหมาะสมกับแนวปฏิบัติ Terraform ขององค์กรของคุณ หรือหาก MCP server สร้างการตอบสนองที่ไม่ถูกต้อง โปรดแทนที่ด้วยคำแนะนำของคุณเองและสร้าง container หรือ binary ใหม่ ตัวอย่างของคำแนะนำดังกล่าวอยู่ใน instructions/example-mcp-instructions.md

AGENTS.md โดยพื้นฐานแล้วทำหน้าที่เหมือน README สำหรับ coding agents: เป็นสถานที่เฉพาะและคาดเดาได้สำหรับให้บริบทและคำแนะนำเพื่อช่วยให้ AI coding agents ทำงานในโปรเจกต์ของคุณ ไฟล์ AGENTS.md หนึ่งไฟล์ทำงานร่วมกับ coding agents ต่างๆ ได้ ตัวอย่างของคำแนะนำดังกล่าวอยู่ใน instructions/example-AGENTS.md เพื่อใช้งาน ให้ commit ไฟล์ชื่อ AGENTS.md ไปยังไดเรกทอรีที่เก็บการกำหนดค่า Terraform ของคุณ

การติดตั้ง

การใช้งานกับ Visual Studio Code

เพิ่มบล็อก JSON ต่อไปนี้ลงในไฟล์ User Settings (JSON) ของคุณใน VS Code คุณสามารถทำได้โดยกด Ctrl + Shift + P และพิมพ์ Preferences: Open User Settings (JSON)

ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้เครื่องมือ MCP server ใน เอกสารโหมด agent ของ VS Code

เวอร์ชัน 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"
        ]
      }
    }
  }
}

คุณสามารถเพิ่มตัวอย่างที่คล้ายกัน (เช่น ไม่มีคีย์ mcp) ลงในไฟล์ชื่อ .vscode/mcp.json ใน workspace ของคุณได้ ซึ่งจะช่วยให้คุณแชร์การกำหนดค่ากับผู้อื่นได้

เวอร์ชัน 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

อ่านเพิ่มเติมเกี่ยวกับการใช้เครื่องมือ MCP server ใน Claude Desktop ได้ที่ เอกสารผู้ใช้ อ่านเพิ่มเติมเกี่ยวกับการใช้ MCP server ใน Amazon Q Developer และ Kiro CLI

เวอร์ชัน 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

อ่านเพิ่มเติมเกี่ยวกับการใช้และเพิ่มเครื่องมือ MCP server ใน Claude Code ได้ที่ เอกสารผู้ใช้

  • Local (stdio) Transport
claude mcp add terraform -s user -t stdio -- docker run -i --rm hashicorp/terraform-mcp-server
  • Remote (streamable-http) Transport
# 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

อ่านเพิ่มเติมเกี่ยวกับการใช้และเพิ่มเครื่องมือ MCP server ใน Codex CLI ได้ที่ เอกสารผู้ใช้

หมายเหตุ: เพิ่ม TFE_ADDRESS และ TFE_TOKEN ในคำสั่ง Docker สำหรับเครื่องมือ HCP Terraform หรือ Terraform Enterprise ที่ผ่านการรับรองความถูกต้อง

  • Local (stdio) Transport
codex mcp add terraform -- docker run -i --rm hashicorp/terraform-mcp-server
  • Remote (streamable-http) Transport
# 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

เพื่อความปลอดภัย หลีกเลี่ยงการเขียนข้อมูลประจำตัวแบบตายตัว ให้สร้างหรืออัปเดต ~/.gemini/.env (โดยที่ ~ คือไดเรกทอรีบ้านหรือโปรเจกต์ของคุณ) สำหรับจัดเก็บข้อมูลประจำตัวของ HCP Terraform หรือ Terraform Enterprise

# ~/.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

อ่านเพิ่มเติมเกี่ยวกับการใช้และเพิ่มเครื่องมือ MCP servers ใน Bob IDE หรือ Shell ได้ที่ การใช้ MCP ใน Bob

เวอร์ชัน 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)

มี Helm chart สำหรับปรับใช้เซิร์ฟเวอร์บน Kubernetes ภายใต้ helm/terraform-mcp-server

ติดตั้งจากซอร์สโค้ด

ใช้เวอร์ชันรีลีสล่าสุด:

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

ใช้ branch หลัก:

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 Image ในเครื่อง

ก่อนใช้เซิร์ฟเวอร์ คุณต้องสร้าง Docker image ในเครื่องก่อน:

  1. โคลน repository:
git clone https://github.com/hashicorp/terraform-mcp-server.git
cd terraform-mcp-server
  1. สร้าง Docker image:
make docker-build
  1. ขั้นตอนนี้จะสร้าง Docker image ในเครื่องที่คุณสามารถใช้ในการกำหนดค่าต่อไปนี้
# 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_provider_docs,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 server ถูกเพิ่มโดยการครอบ HTTP mux ด้วย otelhttp.NewHandler(...) ซึ่งจะส่งออก:

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

ประการที่สอง MCP server บันทึกเมตริกเครื่องมือที่กำหนดเองรอบการทำงานของเครื่องมือโดยใช้ MCP hooks (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_provider_docs,get_provider_details,list_workspaces

ชุดเครื่องมือที่มีให้ใช้งาน: registry, registry-private, terraform, all, default ดู pkg/toolsets/mapping.go สำหรับชื่อเครื่องมือแต่ละรายการ ไม่สามารถใช้ทั้งสอง flag พร้อมกันได้

การรองรับ Transport

Terraform MCP Server รองรับโปรโตคอล transport หลายแบบ:

1. Stdio Transport (ค่าเริ่มต้น)

การสื่อสารผ่าน standard input/output โดยใช้ข้อความ JSON-RPC เหมาะสำหรับการพัฒนาท้องถิ่นและการรวมเข้ากับ MCP clients โดยตรง

2. StreamableHTTP Transport

Transport ที่ใช้ HTTP สมัยใหม่รองรับทั้งคำขอ HTTP โดยตรงและสตรีม Server-Sent Events (SSE) นี่คือ transport ที่แนะนำสำหรับการตั้งค่าระยะไกล/แบบกระจาย

คุณสมบัติ:

  • Endpoint: http://{hostname}:8080/mcp
  • Health Check: http://{hostname}:8080/health
  • การกำหนดค่าสภาพแวดล้อม: ตั้งค่า TRANSPORT_MODE=http หรือ TRANSPORT_PORT=8080 เพื่อเปิดใช้งาน
  • รายการอนุญาตองค์กร: ตั้งค่า MCP_ORGANIZATION_ALLOWLIST หรือ --organization-allowlist เป็นรายการ CSV ของชื่อองค์กร HCP Terraform ที่อนุญาต

โหมดเซสชัน

Terraform MCP Server รองรับสองโหมดเซสชันเมื่อใช้ StreamableHTTP transport:

  • Stateful Mode (ค่าเริ่มต้น): รักษาสถานะเซสชันระหว่างคำขอ ทำให้สามารถดำเนินการที่คำนึงถึงบริบทได้
  • Stateless Mode: แต่ละคำขอจะถูกประมวลผลอย่างอิสระโดยไม่รักษาสถานะเซสชัน ซึ่งมีประโยชน์สำหรับการปรับใช้ที่มีความพร้อมใช้งานสูงหรือเมื่อใช้ load balancers

เพื่อเปิดใช้งาน stateless mode ให้ตั้งค่าตัวแปรสภาพแวดล้อม:

export MCP_SESSION_MODE=stateless

Token Passthrough สำหรับการปรับใช้แบบรวมศูนย์

เมื่อรัน MCP server แบบรวมศูนย์ (โหมด StreamableHTTP) สำหรับผู้ใช้หลายคน ผู้ใช้แต่ละคนสามารถส่ง token Terraform ของตนเองผ่าน HTTP headers สำหรับการบังคับใช้ RBAC ซึ่งช่วยให้อินสแตนซ์เซิร์ฟเวอร์เดียวสามารถให้บริการผู้ใช้หลายคนที่มีสิทธิ์ต่างกันได้

เมื่อกำหนดค่า MCP_ORGANIZATION_ALLOWLIST หรือ --organization-allowlist รายการอนุญาตต้องเป็นรายการ CSV ของชื่อองค์กร HCP Terraform เซิร์ฟเวอร์ต้องการ Authorization: Bearer <token> และปฏิเสธคำขอเว้นแต่ token นั้นจะสามารถเข้าถึงอย่างน้อยหนึ่งองค์กรในรายการอนุญาต CSV bearer token จะมีความสำคัญก่อนหากคำขอยังรวม TFE_TOKEN header ด้วย เพื่อให้แน่ใจว่า token ที่ตรวจสอบโดยรายการอนุญาตคือ token ที่ใช้สำหรับคำขอ Terraform API การจับคู่ชื่อองค์กรไม่คำนึงถึงตัวพิมพ์เล็กใหญ่ หากค่าที่กำหนดค่า CSV แยกวิเคราะห์เป็นชื่อองค์กรศูนย์ชื่อ เซิร์ฟเวอร์จะออกพร้อมกับข้อผิดพลาดรายการอนุญาตองค์กรที่ผิดรูปแบบ

การส่งต่อ IP ของไคลเอ็นต์

เมื่อรัน MCP server แบบรวมศูนย์ด้านหลัง proxy หรือ load balancer คุณสามารถส่งต่อ IP ของไคลเอ็นต์ต้นทางไปยัง HCP Terraform / TFE ผ่าน X-Forwarded-For header ซึ่งปิดโดยค่าเริ่มต้นและต้องเปิดใช้งานด้วย MCP_FORWARD_CLIENT_IP=true

เมื่อเปิดใช้งาน เซิร์ฟเวอร์จะใช้แหล่งที่มาของ IP ไคลเอ็นต์ตาม MCP_REMOTE_IP_METHOD:

วิธีการพฤติกรรม
RemoteAddr (ค่าเริ่มต้น)ใช้เฉพาะที่อยู่ของการเชื่อมต่อ TCP โดยตรง ไม่สนใจ X-Forwarded-For และ X-Real-IP
X-Real-IPใช้ X-Real-IP header หากเป็น IP ที่ถูกต้อง มิฉะนั้นจะถอยกลับไปใช้ RemoteAddr
X-Forwarded-Forใช้ X-Forwarded-For chain โดยเลือก MCP_XFF_TRUSTED_HOPS ตำแหน่งจากด้านขวา ถอยกลับไปใช้ RemoteAddr หากค่าไม่พร้อมใช้งานหรือไม่ถูกต้อง

โมเดลความน่าเชื่อถือ

X-Forwarded-For และ X-Real-IP ถูกตั้งค่าโดยไคลเอ็นต์และ proxy ตัวกลาง ดังนั้นจึงสามารถปลอมแปลงได้เว้นแต่ proxy ที่เชื่อถือได้ด้านหน้าเซิร์ฟเวอร์จะเขียนทับค่าเหล่านั้น ด้วยเหตุนี้ค่าเริ่มต้นคือ RemoteAddr ซึ่งเชื่อถือเฉพาะ peer ที่เซิร์ฟเวอร์เชื่อมต่อโดยตรงเท่านั้น เปิดใช้งาน X-Real-IP หรือ X-Forwarded-For เฉพาะเมื่อเซิร์ฟเวอร์อยู่ด้านหลัง proxy ที่คุณควบคุมซึ่งตั้งค่า headers เหล่านี้

จำนวน hop ที่เชื่อถือได้

เมื่อใช้ X-Forwarded-For MCP_XFF_TRUSTED_HOPS คือจำนวน proxies ที่คุณดำเนินการระหว่างเซิร์ฟเวอร์และอินเทอร์เน็ต นับ hop จากด้านขวาของ chain เนื่องจากแต่ละ proxy จะเพิ่มที่อยู่ที่ได้รับคำขอ และรายการขวาสุดถูกตั้งค่าโดย proxy ที่ใกล้กับเซิร์ฟเวอร์ที่สุด เซิร์ฟเวอร์จะข้ามรายการที่เชื่อถือได้จำนวนนั้นและใช้รายการถัดไปทางซ้าย

ตัวอย่างเช่น ด้วย MCP_XFF_TRUSTED_HOPS=1 และ header ของ 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 หากจำนวน hop มากกว่าจำนวนรายการ หรือรายการที่เลือกไม่ใช่ IP ที่ถูกต้อง เซิร์ฟเวอร์จะถอยกลับไปใช้ RemoteAddr

การตั้งค่าจำนวน hop ต่ำเกินไปจะเชื่อถือค่าที่ไคลเอ็นต์ระบุ การตั้งค่าสูงเกินไปจะเชื่อถือที่อยู่ที่ลึกเข้าไปในโครงสร้างพื้นฐานของคุณเอง ตั้งค่าเป็นจำนวน proxies ที่คุณรันอย่างแน่นอน

ข้อจำกัด

  • เซิร์ฟเวอร์อ่านเฉพาะ X-Forwarded-For header แรกบนคำขอ เป็นการถูกต้องที่คำขอจะพก X-Forwarded-For headers หลายรายการ แต่ไลบรารีมาตรฐานของ Go จะส่งคืนเฉพาะรายการแรก และเซิร์ฟเวอร์ไม่ได้รวมเข้าด้วยกัน หาก proxy chain ของคุณส่งออกหลาย headers ให้กำหนดค่าให้ส่งออก X-Forwarded-For header เดียวที่รวมกัน
  • รองรับทั้งที่อยู่ IPv4 และ IPv6 ค่าที่ไม่ใช่ IP ที่ถูกต้องจะถูกปฏิเสธและเซิร์ฟเวอร์จะถอยกลับไปใช้ RemoteAddr

การย้ายจากเวอร์ชันก่อนหน้า

เวอร์ชันก่อนหน้าใช้ X-Forwarded-For ค่าซ้ายสุดเมื่อมี header โดยไม่มีการกำหนดค่า ซึ่งไม่ปลอดภัย เนื่องจากค่าซ้ายสุดถูกปลอมแปลงได้ง่ายที่สุด ค่าเริ่มต้นตอนนี้คือ RemoteAddr หากคุณรันเซิร์ฟเวอร์ด้านหลัง proxy และพึ่งพา X-Forwarded-For ที่ถูกส่งต่อไปยัง HCP Terraform / TFE ให้ตั้งค่า MCP_REMOTE_IP_METHOD=X-Forwarded-For และ MCP_XFF_TRUSTED_HOPS เป็นจำนวน proxies ที่คุณดำเนินการ

Headers ที่รองรับ

Headerคำอธิบาย
TFE_TOKENTerraform API token
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 ไม่สามารถตั้งค่าโดยไคลเอ็นต์ได้ ในโหมด streamable-http ที่อยู่ Terraform จะถูกนำมาจาก TFE_ADDRESS ตัวแปรสภาพแวดล้อมฝั่งเซิร์ฟเวอร์เท่านั้น (หรือค่าเริ่มต้น) คำขอที่พยายามตั้งค่า TFE_ADDRESS ผ่าน HTTP header หรือ query parameter จะถูกปฏิเสธด้วย 403 ซึ่งป้องกันไม่ให้ไคลเอ็นต์เปลี่ยนเส้นทางคำขอและ Authorization token ไปยังเซิร์ฟเวอร์ที่เป็นอันตราย
  • การระบุการปรับใช้แบบโฮสต์: การตั้งค่า TF_MCP_SHARED_SECRET จะส่งค่านั้นเป็น X-Tf-Mcp-Secret header ในทุกคำขอ HCP Terraform / TFE ทำให้แบ็กเอนด์สามารถระบุคำขอจากการปรับใช้แบบโฮสต์ที่รู้จัก (เช่น เพื่อใช้ IP allowlists) เป็นความลับแบบคงที่ที่ส่งใน header ดังนั้นใช้ผ่าน TLS เท่านั้นและถือว่าค่าเป็นข้อมูลประจำตัว
  • ห้ามส่ง tokens ใน query parameters - เซิร์ฟเวอร์จะปฏิเสธคำขอดังกล่าวด้วยข้อผิดพลาด 400
  • ใช้ TLS เสมอ (MCP_TLS_CERT_FILE/MCP_TLS_KEY_FILE) เมื่อปรับใช้แบบรวมศูนย์เพื่อปกป้อง tokens ระหว่างการส่ง
  • กำหนดค่า 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

ผู้ใช้เชื่อมต่อด้วย token ส่วนบุคคลที่ส่งผ่าน headers ทำให้สามารถบังคับใช้ RBAC ต่อผู้ใช้ได้

การแก้ไขปัญหา

Corporate Proxy / TLS Inspection (Zscaler ฯลฯ)

หากคุณอยู่ด้านหลัง corporate proxy ที่ทำการตรวจสอบ 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 client:

{
  "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รันการทดสอบแบบ end-to-end
make docker-buildสร้าง Docker image
make run-httpรัน HTTP server ในเครื่อง
make docker-run-httpรัน HTTP server ใน Docker
make test-httpทดสอบ HTTP health endpoint
make cleanลบ build artifacts
make helpแสดงคำสั่งทั้งหมดที่พร้อมใช้งาน

การมีส่วนร่วม

  1. Fork repository
  2. สร้าง feature branch ของคุณ
  3. ทำการเปลี่ยนแปลงของคุณ
  4. รันการทดสอบ
  5. ส่ง pull request

สัญญาอนุญาต

โปรเจกต์นี้อยู่ภายใต้สัญญาอนุญาตโอเพนซอร์ส MPL-2.0 โปรดดูไฟล์ LICENSE สำหรับข้อกำหนดฉบับเต็ม

ความปลอดภัย

สำหรับปัญหาด้านความปลอดภัย โปรดติดต่อ security@hashicorp.com หรือปฏิบัติตาม นโยบายความปลอดภัย ของเรา

การสนับสนุน

สำหรับรายงานข้อบกพร่องและคำขอฟีเจอร์ โปรดเปิด issue บน GitHub

สำหรับคำถามทั่วไปและการอภิปราย โปรดเปิด GitHub Discussion