Terraform MCP服务器
Terraform MCP服务器是一个 模型上下文协议(MCP) 服务器,提供与Terraform注册表API的无缝集成,实现高级 基础设施即代码(IaC)开发的自动化和交互能力。
特性
- 双重运输支持:具有可配置端点的Stdio和StreamableHTTP传输
- 地形注册表集成:与提供者、模块和策略的公共Terraform注册表API直接集成
- HCP平台和平台企业支持:完整的工作区管理、组织/项目列表和私有注册表访问
- 工作区操作:创建、更新、删除支持变量、标记和运行管理的工作区
安全说明: 在此阶段,MCP服务器仅供本地使用。如果使用StreamableHTTP传输,请始终配置MCP_ALLOWED_ORIGINS环境变量,以限制仅访问受信任的源。这有助于防止DNS重新绑定攻击和其他跨源漏洞。
安全说明: 根据查询,MCP服务器可能会向MCP客户端和LLM公开某些Terraform数据。不要将MCP服务器与不受信任的MCP客户端或LLM一起使用。
法律说明: 您对第三方MCP Client/LLM的使用仅受此类MCP/LLM使用条款的约束,IBM不对此类第三方工具的性能负责。IBM明确声明对第三方MCP客户/LLM不承担任何和所有保证和责任,并且可能无法提供支持来解决由第三方工具引起的问题。
注意: MCP服务器提供的输出和建议是动态生成的,可能因查询、模型和连接的MCP客户端而异。用户应在实施之前彻底审查所有输出/建议,以确保它们与组织的安全最佳实践、成本效益目标和合规要求保持一致。
先决条件
- 确保 码头工人 已安装并正在运行,以便在容器化环境中使用服务器。
- 安装一个支持模型上下文协议(MCP)的AI助手。
命令行选项
环境变量:
| 变量 | 描述 | 默认值 |
|---|---|---|
TFE_ADDRESS | HCP地形或TFE地址 | "https://app.terraform.io" |
TFE_TOKEN | Terraform Enterprise API令牌 | "" (空) |
TFE_SKIP_TLS_VERIFY | 跳过HCP Terraform或Terraform Enterprise TLS验证 | false |
TRANSPORT_MODE | 设置为 streamable-http 启用HTTP传输(传统 http 值仍受支持) | stdio |
TRANSPORT_HOST | 主机绑定HTTP服务器 | 127.0.0.1 |
TRANSPORT_PORT | HTTP服务器端口 | 8080 |
MCP_ENDPOINT | HTTP服务器端点路径 | /mcp |
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 |
ENABLE_TF_OPERATIONS | 启用需要明确批准的工具 | false |
# Stdio mode
terraform-mcp-server stdio [--log-file /path/to/log]
# StreamableHTTP mode
terraform-mcp-server streamable-http [--transport-port 8080] [--transport-host 127.0.0.1] [--mcp-endpoint /mcp] [--log-file /path/to/log]说明
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代码一起使用
将以下JSON块添加到VS Code中的用户设置(JSON)文件中。您可以按 Ctrl + Shift + P 和打字 Preferences: Open User Settings (JSON).
更多关于在VS Code中使用MCP服务器工具的信息 代理模式文档.
Version 0.3.0+ or greaterVersion 0.2.3 or lower
{
"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:0.3.2"
]
}
},
"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 在您的工作空间中。这将允许您与他人共享配置。
Version 0.3.0+ or greaterVersion 0.2.3 or lower
{
"servers": {
"terraform": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e", "TFE_TOKEN=${input:tfe_token}",
"-e", "TFE_ADDRESS=${input:tfe_address}",
"hashicorp/terraform-mcp-server:0.3.2"
]
}
},
"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"
]
}
}
}使用游标
将此添加到您的Cursor配置中(~/.cursor/mcp.json)或通过设置→ 光标设置→ MCP:
Version 0.3.0+ or greaterVersion 0.2.3 or lower
{
"mcpServers": {
"terraform": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e", "TFE_ADDRESS=",
"-e", "TFE_TOKEN=",
"hashicorp/terraform-mcp-server:0.3.2"
]
}
}
}{
"servers": {
"terraform": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"hashicorp/terraform-mcp-server:0.2.3"
]
}
}
}与Claude Desktop/Amazon Q Developer/Amazon Q CLI一起使用
更多关于在Claude Desktop中使用MCP服务器工具的信息 用户文档.从以下网址阅读更多关于在Amazon Q中使用MCP服务器的信息 文档.
Version 0.3.0+ or greaterVersion 0.2.3 or lower
{
"mcpServers": {
"terraform": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e", "TFE_ADDRESS=",
"-e", "TFE_TOKEN=",
"hashicorp/terraform-mcp-server:0.3.2"
]
}
}
}{
"mcpServers": {
"terraform": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"hashicorp/terraform-mcp-server:0.2.3"
]
}
}
}使用Claude代码
更多关于在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扩展一起使用
为了安全起见,避免硬编码您的凭据,创建或更新 ~/.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从源代码安装
使用最新版本:
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@mainVersion 0.3.0+ or greaterVersion 0.2.3 or lower
{
"mcp": {
"servers": {
"terraform": {
"type": "stdio",
"command": "/path/to/terraform-mcp-server",
"env": {
"TFE_TOKEN": ">"
},
}
}
}
}{
"mcp": {
"servers": {
"terraform": {
"type": "stdio",
"command": "/path/to/terraform-mcp-server"
}
}
}
}在本地构建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注: 在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"
]
}
}
}可用工具
可用资源
运输支持
Terraform MCP服务器支持多种传输协议:
1.标准运输(默认)
使用JSON-RPC消息的标准输入/输出通信。非常适合本地开发和与MCP客户直接集成。
2.可流式HTTP传输
现代基于HTTP的传输支持直接HTTP请求和服务器发送事件(SSE)流。这是远程/分布式设置的推荐传输方式。
特征:
- 端点:
http://{hostname}:8080/mcp - 健康检查:
http://{hostname}:8080/health - 环境配置:设置
TRANSPORT_MODE=http或TRANSPORT_PORT=8080启用
会话模式
使用StreamableHTTP传输时,Terraform MCP服务器支持两种会话模式:
- 状态模式(默认):维护请求之间的会话状态,启用上下文感知操作。
- 无状态模式:每个请求都是独立处理的,无需维护会话状态,这对于高可用性部署或使用负载均衡器时非常有用。
要启用无状态模式,请设置环境变量:
export MCP_SESSION_MODE=stateless发展
先决条件
- 去(检查 go.mod 特定版本的文件)
- Docker(可选,用于容器构建)
可用的生成命令
| 命令 | 描述 |
|---|---|
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开源许可证的条款获得许可。请参考 许可证 提交完整条款的文件。
安全
有关安全问题,请联系security@hashicorp.com或跟随我们 安全策略.
支持
有关错误报告和功能请求,请在GitHub上打开问题。
有关一般问题和讨论,请打开GitHub讨论。
