hashicorp/terraform-mcp-服务器

hashicorp/terraform-mcp-server
分类Web
作者Community
星标370
定价Free

简介

这是一个由 HashiCorp 官方推出的 MCP 服务器,旨在将 Terraform 的基础设施即代码(IaC)能力直接引入 AI 助手。它不再让 AI 仅凭训练数据猜测语法,而是通过实时接入 Terraform Registry API,让 AI 能精准检索 Provider 资源、分析模块依赖并生成符合最新规范的代码。对于 DevOps 工程师而言,这意味着你可以在对话界面直接完成从资源调研到配置生成的闭环,无需在文档页和 IDE 之间频繁切换,上手门槛极低,是提升 IaC 开发效率的实用插件。

核心亮点

  • 实时对接 Registry API,确保资源定义最新
  • 自动化分析模块依赖,降低 IaC 配置复杂度
  • 将 AI 助手转化为专业的 Terraform 辅助编程工具
  • 消除文档查阅冗余,实现对话式基础设施管理

完整文档

<img src="public/images/Terraform-LogoMark_onDark.svg" width="30" align="left" style="margin-right: 12px;"/> Terraform MCP Server

Terraform MCP Server 是一个 Model Context Protocol (MCP) 服务器,它与 Terraform RegistryHCP Terraform API 无缝集成,为基础设施即代码 (IaC) 开发提供先进的自动化和交互能力。

Table of Contents<table width="100%">

<tr> <th width="33%" align="left">快速入门</th> <th width="34%" align="left">客户端集成</th> <th width="33%" align="left">构建与运行</th> </tr> <tr> <td width="33%" valign="top"> <a href="#features">Features</a><br> <a href="#prerequisites">Prerequisites</a><br> <a href="#command-line-options">Command Line Options</a><br> <a href="#instructions">Instructions</a> </td> <td width="34%" valign="top"> <a href="#installation">Installation</a><br> <a href="#usage-with-visual-studio-code">Visual Studio Code</a><br> <a href="#usage-with-cursor">Cursor</a><br> <a href="#usage-with-claude-desktop--amazon-q-developer--kiro-cli">Claude Desktop, Amazon Q Developer, and Kiro CLI</a><br> <a href="#usage-with-claude-code">Claude Code</a><br> <a href="#usage-with-codex-cli">Codex CLI</a><br> <a href="#usage-with-gemini-extensions">Gemini extensions</a><br> <a href="#usage-with-bob-ide--shell">Bob IDE and Shell</a> </td> <td width="33%" valign="top"> <a href="#install-from-source">从源码安装</a><br> <a href="#building-the-docker-image-locally">本地构建 Docker Image</a><br> <a href="#transport-support">Transport 支持</a><br> <a href="#1-stdio-transport-default">Stdio Transport</a><br> <a href="#2-streamablehttp-transport">StreamableHTTP Transport</a> </td> </tr> </table><table width="100%"> <tr> <th width="33%" align="left">Server 能力</th> <th width="34%" align="left">部署与安全</th> <th width="33%" align="left">帮助与贡献</th> </tr> <tr> <td width="33%" valign="top"> <a href="#available-tools">可用 Tools</a><br> <a href="#available-resources">可用 Resources</a><br> <a href="#available-metrics">可用 Metrics</a><br> <a href="#tool-filtering">Tool 过滤</a> </td> <td width="34%" valign="top"> <a href="#session-modes">Session 模式</a><br> <a href="#token-passthrough-for-centralized-deployments">集中式部署的 Token 透传</a><br> <a href="#client-ip-forwarding">Client IP 转发</a><br> <a href="#trust-model">信任模型</a><br> <a href="#trusted-hops">信任跳数</a><br> <a href="#limitations">限制</a><br> <a href="#migrating-from-earlier-versions">从早期版本迁移</a><br> <a href="#supported-headers">支持的 Headers</a><br> <a href="#security-considerations">安全注意事项</a><br> <a href="#centralized-deployment-example">集中式部署示例</a> </td> <td width="33%" valign="top"> <a href="#troubleshooting">故障排除</a><br> <a href="#corporate-proxy--tls-inspection-zscaler-etc">企业代理与 TLS 检查</a><br> <a href="#development">开发</a><br> <a href="#contributing">贡献</a><br> <a href="#license">许可证</a><br> <a href="#security">安全</a><br> <a href="#support">支持</a> </td> </tr> </table>## 功能特性
  • 双传输协议支持:支持 Stdio 和 StreamableHTTP 传输协议,且端点可配置
  • Terraform Registry 集成:直接集成公共 Terraform Registry API,支持 providers、modules 和 policies
  • HCP Terraform & Terraform Enterprise 支持:完整的 workspace 管理、organization/project 列表以及私有 registry 访问
  • Workspace 操作:支持创建、更新、删除 workspaces,并支持 variables、tags 和 run 管理
  • 用于监控工具使用情况的 OTel 指标:集成 open telemetry meters,用于在 Streamable HTTP 模式下追踪工具调用量、延迟和失败率。启用此功能时,还会公开默认的 http server 指标

> 安全注意事项: 根据查询内容,MCP server 可能会向 MCP client 和 LLM 暴露某些 Terraform 数据。请勿将 MCP server 与不可信的 MCP clients 或 LLMs 配合使用。

> 法律注意事项: 您对第三方 MCP Client/LLM 的使用仅受该 MCP/LLM 使用条款的约束,IBM 对此类第三方工具的性能不承担责任。IBM 明确否认对第三方 MCP Clients/LLMs 的任何及所有保证和责任,并且可能无法提供支持以解决由第三方工具引起的问题。> 注意: MCP server 提供的输出和建议是动态生成的,可能会根据查询、模型以及连接的 MCP client 而有所不同。用户在实施前应仔细审查所有输出/建议,以确保其符合组织的安全性最佳实践、成本效益目标和合规性要求。

Prerequisites

1. 确保已安装并运行 Docker,以便在容器化环境中使用 server。
1. 安装支持 Model Context Protocol (MCP) 的 AI assistant。

Command Line Options

Environment Variables:| Variable | Description | Default |
|----------|-------------|---------|
| TFE_ADDRESS | 设置用于 API 调用的 Terraform Enterprise/HCP Terraform 地址。必须包含协议(例如 https://app.terraform.io)。在 streamable-http 模式下,这是设置地址的唯一方式;客户端无法通过 header 或查询参数提供。 | Optional |
| TFE_TOKEN | Terraform Enterprise API token | "" (empty) |
| TF_MCP_SHARED_SECRET | 发送到 HCP Terraform / TFE 请求中 X-Tf-Mcp-Secret header 的共享密钥,用于识别源自托管 MCP 部署的请求。应仅在 TLS 上使用。 | "" (empty) |
| TFE_SKIP_TLS_VERIFY | 跳过 HCP Terraform 或 Terraform Enterprise 的 TLS 验证 | false |
| LOG_LEVEL | 日志级别:trace, debug, info, warn, error, fatal, panic(覆盖 --log-level 标志) | info |
| LOG_FORMAT | 日志格式:textjson(覆盖 --log-format 标志)| text |
| TRANSPORT_MODE | 设置为 streamable-http 以启用 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 连接的 keep-alive 间隔(例如 30s, 1m)。设置为 0 以禁用 | 0 |
| MCP_SESSION_MODE | 会话模式:statefulstateless | stateful |
| MCP_ALLOWED_ORIGINS | 允许 CORS 的源列表,以逗号分隔 | "" (empty) |
| MCP_CORS_MODE | CORS 模式:strict, development, 或 disabled | strict |
| MCP_TLS_CERT_FILE | TLS 证书文件路径,非 localhost 部署必填(例如 /path/to/cert.pem) | "" (empty) |
| MCP_TLS_KEY_FILE | TLS 密钥文件路径,非 localhost 部署必填(例如 /path/to/key.pem)| "" (empty) |
| MCP_RATE_LIMIT_GLOBAL | 全局速率限制(格式:rps:burst) | 10:20 |
| MCP_RATE_LIMIT_SESSION | 单会话速率限制(格式:rps:burst) | 5:10 |
| MCP_ORGANIZATION_ALLOWLIST | 允许访问 HTTP 服务器的 HCP Terraform 组织名称 CSV 列表 | "" (empty) |
| MCP_FORWARD_CLIENT_IP | 通过 X-Forwarded-For 将客户端 IP 转发给 HCP Terraform / TFE。设置为 true 以启用 | false |
| MCP_REMOTE_IP_METHOD | 启用转发时获取客户端 IP 的方式:RemoteAddr(仅限直接连接)、X-Real-IPX-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 Collector 或后端的 URL | localhost:4318 |
| INSTANA_ENABLED | 为 streamable-http 服务器启用 Instana 仪表化(指标和 HTTP 请求追踪)。需要服务器可访问的 Instana agent。 | false |
| INSTANA_SERVICE_NAME | 如果启用了 Instana 仪表化,则为 MCP 服务器使用的服务名称 | terraform-mcp-server |

bash
# 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 产生的响应不准确,请将其替换为您自己的指令并重新构建容器或二进制文件。相关指令示例位于 instructions/example-mcp-instructions.md

AGENTS.md 实质上充当编码 agent 的 README:一个专门且可预测的位置,用于提供上下文和指令,以帮助 AI 编码 agent 在您的项目上工作。一个 AGENTS.md 文件可适用于不同的编码 agent。相关指令示例位于 instructions/example-AGENTS.md,若要使用它,请将名为 AGENTS.md 的文件提交到您的 Terraform 配置所在的目录。

安装

在 Visual Studio Code 中使用

将以下 JSON 代码块添加到 VS Code 的用户设置 (JSON) 文件中。您可以通过按下 Ctrl + Shift + P 并输入 Preferences: Open User Settings (JSON) 来完成此操作。

关于在 VS Code 的 agent mode 文档 中了解更多关于使用 MCP server 工具的信息。

<table>
<tr><th>Version 0.3.0+ 或更高版本</th><th>Version 0.2.3 或更低版本</th></tr>
<tr valign=top>
<td>

json
{
"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.2.0"
]
}
},
"inputs": [
{
"type": "promptString",
"id": "tfe_token",
"description": "Terraform API Token",
"password": true
},
{
"type": "promptString",
"id": "tfe_address",
"description": "Terraform Address",
"password": false
}
]
}
}
</td>
<td>
json
{
"mcp": {
"servers": {
"terraform": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"hashicorp/terraform-mcp-server:0.2.3"
]
}
}
}
}
</td>
</tr>
</table>

可选地,您可以将类似的示例(即不含 mcp 密钥)添加到工作区中名为 .vscode/mcp.json 的文件中。这将允许您与他人共享配置。

<table>
<tr><th>Version 0.3.0+ 或更高版本</th><th>Version 0.2.3 或更低版本</th></tr>
<tr valign=top>
<td>

json
{
"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.2.0"
]
}
},
"inputs": [
{
"type": "promptString",
"id": "tfe_token",
"description": "Terraform API Token",
"password": true
},
{
"type": "promptString",
"id": "tfe_address",
"description": "Terraform Address",
"password": false
}
]
}
</td>
<td>
json
{
"servers": {
"terraform": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"hashicorp/terraform-mcp-server:0.2.3"
]
}
}
}
</td>
</tr>
</table>

<img alt="Install in VS Code (docker)" src="https://img.shields.io/badge/VS_Code-VS_Code?style=flat-square&label=Install%20Terraform%20MCP&color=0098FF">
<img alt="Install in VS Code Insiders (docker)" src="https://img.shields.io/badge/VS_Code_Insiders-VS_Code_Insiders?style=flat-square&label=Install%20Terraform%20MCP&color=24bfa5">

在 Cursor 中使用

将以下内容添加到您的 Cursor 配置 (~/.cursor/mcp.json) 或通过 Settings → Cursor Settings → MCP 添加:

<table>
<tr><th>Version 0.3.0+ 或更高版本</th><th>Version 0.2.3 或更低版本</th></tr>
<tr valign=top>
<td>

json
{
"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.2.0"
]
}
}
}
</td>
<td>
json
{
"servers": {
"terraform": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"hashicorp/terraform-mcp-server:0.2.3"
]
}
}
}
</td>
</tr>
</table>

<a href="cursor://anysphere.cursor-deeplink/mcp/install?name=terraform&config=eyJjb21tYW5kIjoiZG9ja2VyIiwiYXJncyI6WyJydW4iLCItaSIsIi0tcm0iLCJoYXNoaWNvcnAvdGVycmFmb3JtLW1jcC1zZXJ2ZXIiXX0%3D">
<img alt="Add terraform MCP server to Cursor" src="https://cursor.com/deeplink/mcp-install-dark.png" height="32" />
</a>

在 Claude Desktop / Amazon Q Developer / Kiro CLI 中的用法

关于在 Claude Desktop 中使用 MCP server 工具的更多信息,请参阅 用户文档。关于在 Amazon Q DeveloperKiro CLI 中使用 MCP server 的更多信息,请阅读相关文档。

<table>
<tr><th>Version 0.3.0+ 或更高版本</th><th>Version 0.2.3 或更低版本</th></tr>
<tr valign=top>
<td>

json
{
"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.2.0"
]
}
}
}
</td>
<td>
json
{
"mcpServers": {
"terraform": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"hashicorp/terraform-mcp-server:0.2.3"
]
}
}
}
</td>
</tr>
</table>

在 Claude Code 中使用

关于在 Claude Code 中使用和添加 MCP server 工具的更多信息,请参阅 user documentation

  • 本地 (stdio) Transport
    sh
    claude mcp add terraform -s user -t stdio -- docker run -i --rm hashicorp/terraform-mcp-server
    - 远程 (streamable-http) 传输层
    sh
    # 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 server 工具的更多信息,请参阅 user documentation

> 注意: 对于需要身份验证的 HCP Terraform 或 Terraform Enterprise 工具,请在 Docker 命令中添加 TFE_ADDRESSTFE_TOKEN

  • 本地 (stdio) 传输
    sh
    codex mcp add terraform -- docker run -i --rm hashicorp/terraform-mcp-server
    - 远程 (streamable-http) 传输层
    sh
    # 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 凭据

code
# ~/.gemini/.env
TFE_ADDRESS=your_tfe_address_here
TFE_TOKEN=your_tfe_token_here
安装扩展并运行 Gemini
code
gemini extensions install https://github.com/hashicorp/terraform-mcp-server
gemini
### 在 Bob IDE / Shell 中使用

关于在 Bob IDE 或 Shell 中使用和添加 MCP servers 工具的更多信息,请参阅 Using MCP in Bob

<table>
<tr><th>Version 0.3.0+ 或更高版本</th><th>Version 0.2.3 或更低版本</th></tr>
<tr valign=top>
<td>

json
{
"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.2.0"
],
"disabled": false
}
}
}
</td>
<td>
json
{
"mcpServers": {
"terraform": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"hashicorp/terraform-mcp-server:0.2.3"
],
"disabled": false
}
}
}
</td>
</tr>
</table>

从源码安装

使用最新的 release 版本:

console
go install github.com/hashicorp/terraform-mcp-server/cmd/terraform-mcp-server@latest
使用 main 分支:
console
go install github.com/hashicorp/terraform-mcp-server/cmd/terraform-mcp-server@main
<table>
<tr><th>Version 0.3.0+ 或更高版本</th><th>Version 0.2.3 或更低版本</th></tr>
<tr valign=top>
<td>
json
{
"mcp": {
"servers": {
"terraform": {
"type": "stdio",
"command": "/path/to/terraform-mcp-server",
"env": {
"TFE_TOKEN": "<<TFE_TOKEN_HERE>>"
},
}
}
}
}
</td>
<td>
json
{
"mcp": {
"servers": {
"terraform": {
"type": "stdio",
"command": "/path/to/terraform-mcp-server"
}
}
}
}
</td>
</tr>
</table>

在本地构建 Docker 镜像

在运行服务器之前,您需要先在本地构建 Docker 镜像:

1. Clone 仓库:

bash
git clone https://github.com/hashicorp/terraform-mcp-server.git
cd terraform-mcp-server
2. 构建 Docker 镜像:
bash
make docker-build
3. 这将创建一个本地 Docker 镜像,您可以在接下来的配置中使用它。
bash
# 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 以允许来自容器外部的连接。

4. (可选) 在 http 模式下测试连接

bash
# Test the connection
curl http://localhost:8080/health
5. 您可以按照以下方式在 AI assistant 上使用它:
json
{
"mcpServers": {
"terraform": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"terraform-mcp-server:dev"
]
}
}
}
## 可用工具

在此查看可用工具 :link:

可用资源

在此查看可用资源 :link:

可用指标

共收集两类指标。
首先,通过使用 otelhttp.NewHandler(...) 包装 HTTP mux 来添加标准 HTTP server 指标。这些指标包括:

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(单个)来控制可用工具:

bash
# 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
可用 toolsets:registryregistry-privateterraformalldefault。具体工具名称请参阅 pkg/toolsets/mapping.go。这两个 flag 不能同时使用。

Transport 支持

Terraform MCP Server 支持多种传输协议:

1. Stdio Transport (默认)

使用 JSON-RPC 消息的标准输入/输出通信。适用于本地开发和与 MCP 客户端的直接集成。

2. StreamableHTTP Transport

基于现代 HTTP 的传输方式,同时支持直接 HTTP 请求和 Server-Sent Events (SSE) 流。这是远程/分布式部署的推荐传输方式。

特性:




Session 模式

在使用 StreamableHTTP transport 时,Terraform MCP Server 支持两种 session 模式:

要启用 stateless mode,请设置环境变量:

bash
export MCP_SESSION_MODE=stateless
## 集中式部署的 Token 透传

当为多个用户以集中方式(StreamableHTTP 模式)运行 MCP server 时,每个用户可以通过 HTTP header 传递自己的 Terraform token 以执行 RBAC 强制执行。这使得单个 server 实例能够为具有不同权限的多个用户提供服务。

当配置了 MCP_ORGANIZATION_ALLOWLIST--organization-allowlist 时,该白名单必须是 HCP Terraform organization 名称的 CSV 列表。server 要求提供 Authorization: Bearer <token>,除非该 token 能够访问 CSV 白名单中的至少一个 organization,否则将拒绝请求。如果请求中同时包含 TFE_TOKEN header,则 bearer token 具有优先权,以确保由白名单验证的 token 也是用于 Terraform API 请求的 token。Organization 名称的匹配不区分大小写。如果配置的 CSV 值解析出的 organization 名称数量为零,server 将以 malformed organization allowlist 错误退出。

客户端 IP 转发

当 MCP server 在代理或负载均衡器之后集中运行时,您可以通过 X-Forwarded-For header 将原始客户端 IP 转发给 HCP Terraform / TFE。此功能默认关闭,必须通过 MCP_FORWARD_CLIENT_IP=true 启用。

启用后,server 将根据 MCP_REMOTE_IP_METHOD 获取客户端 IP:| Method | Behavior |
|--------|----------|
| RemoteAddr (默认) | 仅使用直接 TCP 连接的地址。忽略 X-Forwarded-ForX-Real-IP。 |
| X-Real-IP | 如果 X-Real-IP 头部是有效的 IP 则使用它,否则回退到 RemoteAddr。 |
| X-Forwarded-For | 使用 X-Forwarded-For 链,从右侧选择距离 MCP_XFF_TRUSTED_HOPS 位置的条目。如果值缺失或无效,则回退到 RemoteAddr。 |

Trust model

X-Forwarded-ForX-Real-IP 由客户端和中间代理设置,因此除非服务器前有可信代理对其进行覆盖,否则它们可能会被伪造。因此,默认值为 RemoteAddr,它仅信任与服务器直接连接的对端。仅当服务器位于由你控制且会设置这些头部的代理之后时,才启用 X-Real-IPX-Forwarded-For

Trusted hops

使用 X-Forwarded-For 时,MCP_XFF_TRUSTED_HOPS 是指在服务器和互联网之间你所运行的代理数量。跳数(Hops)从链的右侧开始计算,因为每个代理都会附加它接收请求的地址,且最右侧的条目由最靠近服务器的代理设置。服务器会跳过相应数量的可信条目,并取其左侧的下一个条目。例如,当 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 count)大于条目数,或者选中的条目不是有效的 IP,服务器将回退到 RemoteAddr

跳数设置过低会信任客户端提供的值;设置过高则会信任您自身基础设施中更深层的地址。请将其设置为您运行的代理的确切数量。

Limitations

Migrating from earlier versions在没有配置的情况下,早期版本在 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 token |
| Authorization: Bearer <token> | 使用标准 Bearer 认证的替代方法 |
| TFE_SKIP_TLS_VERIFY | 跳过请求的 TLS 验证 |

示例:curl
bash
# 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",...}'
### 安全注意事项

集中部署示例
bash
# 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.2.0用户随后通过 header 传递个人 token 进行连接,从而实现针对每个用户的 RBAC 强制执行。

故障排查

企业代理 / TLS 检查 (Zscaler 等)

如果您处于执行 TLS 检查的企业代理(如 Zscaler Internet Access)之后,可能会看到证书错误:

code
tls: failed to verify certificate: x509: certificate signed by unknown authority
解决方案:将公司 CA 证书挂载到容器中:
bash
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.2.0
对于 MCP 客户端配置:
json
{
"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.2.0"
]
}
}
}
替代方案:直接运行二进制文件

如果你的环境不允许使用 Docker,你可以直接安装并运行 server 二进制文件,它将使用系统的证书存储:

bash
go install github.com/hashicorp/terraform-mcp-server/cmd/terraform-mcp-server@latest
terraform-mcp-server stdio
## 开发

前置条件

可用 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 | 显示所有可用命令 |

贡献

1. Fork 本仓库
2. 创建你的特性分支
3. 进行修改
4. 运行测试
5. 提交 pull request

许可证

本项目基于 MPL-2.0 开源许可证。完整条款请参阅 LICENSE 文件。

安全性

如遇安全问题,请联系 [email protected] 或遵循我们的 security policy

支持

如需报告 Bug 或提出功能请求,请在 GitHub 上提交 issue。

一般性问题和讨论请发起 GitHub Discussion。

查看官方来源