nwiizo/tfmcp
简介
核心亮点
- 自然语言驱动 Terraform 配置读取与分析
- 支持 AI 直接执行 Plan 和 Apply 操作
- 实时管理和查询 Terraform State 状态
- 消除手动敲命令,提升 IaC 运维效率
完整文档
tfmcp: Terraform Model Context Protocol 工具

*⚠️ 本项目包含生产级安全特性,但仍处于积极开发中。虽然安全系统提供了强大的保护,但在生产环境中请仔细审查所有操作。 ⚠️*
tfmcp 是一个命令行工具,旨在帮助您通过 Model Context Protocol (MCP) 与 Terraform 进行交互。它允许 LLM 管理和操作您的 Terraform 环境,包括:
🎮 Demo
查看 tfmcp 在 Claude Desktop 中的实际运行效果:
!tfmcp Demo with Claude Desktop
- 读取 Terraform 配置文件
- 分析 Terraform plan 输出
- 应用 Terraform 配置
- 管理 Terraform state
- 创建和修改 Terraform 配置
🎉 当前版本
tfmcp v0.2.2 是当前发布版本:
cargo install tfmcp --version 0.2.2- 支持 RMCP 3.0.1 和 MCP 2026-07-28 discovery
- 支持带有向后兼容文本内容的结构化 JSON tool 结果
- 为 tool 和 resource discovery 提供五分钟公共 cache hints
- 为 MCP 2026-07-28 客户端提供 Sessionless Streamable HTTP 行为
- Capability 元数据与 tfmcp 实现的方法保持一致
功能特性
| 领域 | 能力 |
| --- | --- |
| Local Terraform | Validate, format, plan/apply 工作流, import 指导, outputs, providers, 依赖图, refresh-only 流程以及受保护的 state 操作 |
| 仓库智能 | Entrypoint/项目检测, 配置分析, 质量检查, 安全检查, 模块健康度, plan 审查以及 drift/state-safety 检查 |
| Registry | 支持具有 HashiCorp 兼容别名的公共/私有 provider, module 和 policy 查询 |
| HCP Terraform / TFE | Organizations, projects, workspaces, runs, plans, applies, variables, policy sets, variable sets, tags, stacks 以及 gated 操作 |
| MCP 部署 | stdio 和 Streamable HTTP, MCP 2026-07-28 discovery, 结构化 tool 结果, cache hints, toolsets, resources, health/metrics, sessions, Host/Origin 验证, rate limits, TLS 配置以及 audit logging |
| 打包 | Cargo, Docker/OCI 元数据, MCP Registry 元数据, Rust Edition 2024 |
安装
从源码安装bash# Clone the repository
git clone https://github.com/nwiizo/tfmcp
cd tfmcp
Build and install
cargo install --path .
### 来自 Crates.iobashcargo install tfmcp
### 使用 Dockerbash# Clone the repository
git clone https://github.com/nwiizo/tfmcp
cd tfmcp
Build the Docker image
docker build -t tfmcp .
Run the container
docker run -it tfmcp
## 要求
- Rust 1.88.0+ (Rust Edition 2024)
- 已安装 Terraform CLI 1.15.8 且已添加到
PATH
- Claude Desktop (用于 AI assistant 集成)
- Docker (可选,用于容器化部署)
使用方法bash$ tfmcp --help
✨ A CLI tool to manage Terraform configurations and operate Terraform through the Model Context Protocol (MCP).
Usage: tfmcp [OPTIONS] [COMMAND]
Commands:
mcp Launch tfmcp as an MCP server
analyze Analyze Terraform configurations
help Print this message or the help of the given subcommand(s)
Options:
-c, --config <PATH> Path to the configuration file
-d, --dir <PATH> Terraform project directory
-V, --version Print version
-h, --help Print help
### 使用 Docker
# Clone the repository
git clone https://github.com/nwiizo/tfmcp
cd tfmcp
Build and install
cargo install --path .cargo install tfmcp# Clone the repository
git clone https://github.com/nwiizo/tfmcp
cd tfmcp
Build the Docker image
docker build -t tfmcp .
Run the container
docker run -it tfmcpPATH$ tfmcp --help
✨ A CLI tool to manage Terraform configurations and operate Terraform through the Model Context Protocol (MCP).
Usage: tfmcp [OPTIONS] [COMMAND]
Commands:
mcp Launch tfmcp as an MCP server
analyze Analyze Terraform configurations
help Print this message or the help of the given subcommand(s)
Options:
-c, --config <PATH> Path to the configuration file
-d, --dir <PATH> Terraform project directory
-V, --version Print version
-h, --help Print help
当使用 Docker 时,你可以这样运行 tfmcp 命令:
# Run as MCP server (default)
docker run -it tfmcp
Run with specific command and options
docker run -it tfmcp analyze --dir /app/example
Mount your Terraform project directory
docker run -it -v /path/to/your/terraform:/app/terraform tfmcp --dir /app/terraform
Set environment variables
docker run -it -e TFMCP_LOG_LEVEL=debug tfmcp要在 Claude Desktop 中使用 tfmcp:
1. 如果尚未安装,请安装 tfmcp:
cargo install tfmcpdocker build -t tfmcp .tfmcp 可执行文件的路径:which tfmcp~/Library/Application\ Support/Claude/claude_desktop_config.json:{
"mcpServers": {
"tfmcp": {
"command": "/path/to/your/tfmcp", // Replace with the actual path from step 2
"args": ["mcp"],
"env": {
"HOME": "/Users/yourusername", // Replace with your username
"PATH": "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin",
"TERRAFORM_DIR": "/path/to/your/terraform/project" // Optional: specify your Terraform project
}
}
}
}{
"mcpServers": {
"tfmcp": {
"command": "docker",
"args": ["run", "--rm", "-v", "/path/to/your/terraform:/app/terraform", "tfmcp", "mcp"],
"env": {
"TERRAFORM_DIR": "/app/terraform"
}
}
}
}tfmcp 工具。
5. 如果 ~/terraform 中不存在项目,tfmcp 将自动创建一个示例 Terraform 项目,以确保 Claude 能立即开始使用 Terraform。该示例项目基于本仓库 example/demo 目录中的示例。
MCP Tools
tfmcp 为 AI 助手提供了 82 个 MCP 工具:### 核心 Terraform 操作
| 工具 | 描述 |
|------|-------------|
| init_terraform | 初始化 Terraform 工作目录 |
| get_terraform_plan | 生成并显示执行计划 |
| analyze_plan | NEW 通过风险评分和建议分析计划 |
| apply_terraform | 应用 Terraform 配置 |
| destroy_terraform | 销毁 Terraform 管理的基础设施 |
| validate_terraform | 验证配置语法 |
| validate_terraform_detailed | 结合指南进行详细验证 |
| get_terraform_state | 显示当前状态 |
| analyze_state | NEW 通过漂移检测分析状态 |
| review_terraform_plan | 审查计划风险、阻碍因素、破坏性变更及建议 |
| summarize_plan_for_pr | 为 PR 评论生成 Markdown 格式的计划摘要 |
| run_terraform_quality_checks | 运行适用于 CI 的验证、模块健康度、指南及 lockfile 检查 |
| inspect_state_safety | 检查状态可读性、漂移风险、lockfile 状态及阻碍因素 |
| detect_drift_candidates | 在不修改基础设施的情况下,从可读状态中检测漂移候选对象 |
| prepare_terraform_change | 生成阻碍因素、警告及建议的变更顺序 |
| list_terraform_resources | 列出所有管理资源 |
| set_terraform_directory | 更改当前项目目录 |### Workspace & State (v0.1.9)
| Tool | Description |
|------|-------------|
| terraform_workspace | NEW 管理 workspaces (list, show, new, select, delete) |
| terraform_import | NEW 导入现有资源 |
| terraform_taint | NEW 标记/取消标记资源为 taint |
| terraform_refresh | NEW 刷新 state |
Code & Output (v0.1.9)
| Tool | Description | |------|-------------| |terraform_fmt | NEW 格式化代码 |
| terraform_graph | NEW 生成依赖图 |
| terraform_output | NEW 获取 output 值 |
| terraform_providers | NEW 通过 lock file 获取 provider 信息 |
| check_provider_lockfile | 检查 .terraform.lock.hcl 以确保 provider 选择的可复现性 |
Analysis & Security
| Tool | Description | |------|-------------| |analyze_terraform | 分析配置 |
| inspect_terraform_project | 检查本地 Terraform 目录、modules 及可能的入口点 |
| detect_terraform_entrypoints | 检测可能的根 module 入口点 |
| analyze_module_health | 通过内聚度/耦合度指标分析 module 健康状况 |
| get_resource_dependency_graph | 资源依赖关系可视化 |
| suggest_module_refactoring | 提供重构建议 |
| get_security_status | 进行包含密钥检测的安全扫描 |### Registry
| Tool | Description |
|------|-------------|
| search_providers | 搜索 provider(HashiCorp 兼容别名) |
| search_terraform_providers | 搜索 provider |
| get_provider_details | Provider 详情(HashiCorp 兼容别名) |
| get_provider_info | Provider 详情 |
| get_provider_docs | Provider 文档 |
| get_provider_capabilities | Provider 资源、数据源、函数和指南 |
| search_modules | 搜索 module(HashiCorp 兼容别名) |
| search_terraform_modules | 搜索 module |
| get_module_details | Module 详情 |
| get_latest_module_version | 最新 module 版本 |
| get_latest_provider_version | 最新 provider 版本 |
| search_policies | 搜索 Sentinel/OPA 策略库 |
| get_policy_details | 策略库详情 |### HCP Terraform / Terraform Enterprise (只读)
| 工具 | 描述 |
|------|-------------|
| get_token_permissions | 在不暴露 token 的情况下检查配置的 token 账户详情 |
| list_terraform_orgs | 列出可见的 organization |
| list_terraform_projects | 列出 organization 中的 project |
| list_workspaces | 列出 organization 中的 workspace |
| get_workspace_details | 通过 ID 或 organization/name 获取 workspace 详情 |
| list_runs | 列出 workspace 的 run |
| get_run_details | 获取 run 详情 |
| get_plan_details | 获取 plan 详情 |
| get_plan_logs | 获取 plan 日志 |
| get_plan_json_output | 获取 Terraform JSON plan 输出 |
| get_apply_details | 获取 apply 详情 |
| get_apply_logs | 获取 apply 日志 |
| get_workspace_policy_sets | 获取绑定到 workspace 的 policy set |
| list_workspace_variables | 列出 workspace 变量 |
| list_variable_sets | 列出 organization 变量集 |
| read_workspace_tags | 读取 workspace 标签 |
| list_stacks | 列出 Terraform stack |
| get_stack_details | 获取 Terraform stack 详情 |
| search_private_modules | 搜索私有 registry 模块 |
| get_private_module_details | 获取私有 registry 模块详情 |
| search_private_providers | 搜索私有 registry provider |
| get_private_provider_details | 获取私有 registry provider 详情 |### HCP Terraform / Terraform Enterprise (Gated Operations)
| Tool | Description |
|------|-------------|
| create_workspace | 当 ENABLE_TF_OPERATIONS=true 时创建 workspace |
| update_workspace | 当 ENABLE_TF_OPERATIONS=true 时更新 workspace 设置 |
| delete_workspace_safely | 当 ENABLE_TF_OPERATIONS=true 时使用安全删除 workspace 操作 |
| create_run | 当 ENABLE_TF_OPERATIONS=true 时将 run 加入队列 |
| action_run | 当 ENABLE_TF_OPERATIONS=true 时对 run 执行 Apply、discard、cancel、force-cancel 或 force-execute |
| create_workspace_variable | 当 ENABLE_TF_OPERATIONS=true 时创建 workspace 变量 |
| update_workspace_variable | 当 ENABLE_TF_OPERATIONS=true 时更新 workspace 变量 |
| attach_policy_set_to_workspace | 当 ENABLE_TF_OPERATIONS=true 时将 policy set 绑定到 workspace |
| create_variable_set | 当 ENABLE_TF_OPERATIONS=true 时创建 variable set |
| create_variable_in_variable_set | 当 ENABLE_TF_OPERATIONS=true 时在 variable set 中创建变量 |
| delete_variable_in_variable_set | 当 ENABLE_TF_OPERATIONS=true 时从 variable set 中删除变量 |
| attach_variable_set_to_workspaces | 当 ENABLE_TF_OPERATIONS=true 时将 variable set 绑定到 workspaces |
| detach_variable_set_from_workspaces | 当 ENABLE_TF_OPERATIONS=true 时将 variable set 从 workspaces 解绑 |
| create_workspace_tags | 当 ENABLE_TF_OPERATIONS=true 时创建或绑定 workspace 标签 |### MCP Resources
| URI | Description |
|-----|-------------|
| terraform://style-guide / /terraform/style-guide | Terraform 风格指南 |
| terraform://module-development / /terraform/module-development | Terraform 模块开发指南 |
| terraform://best-practices | tfmcp 安全与运维最佳实践 |
| /terraform/providers/{namespace}/name/{name}/version/{version} | HashiCorp 兼容的 provider 文档模板 |
Logs and Troubleshooting
tfmcp server 日志位于:
~/Library/Logs/Claude/mcp-server-tfmcp.log- Claude 无法连接到服务器:请确保配置中的
tfmcp可执行文件路径正确
- Terraform 项目问题:如果未找到项目,
tfmcp会自动创建一个示例 Terraform 项目
- Method not found 错误:
tfmcp声明并实现了tools/list、resources/list、resources/templates/list和resources/read
- Docker 问题:如果使用 Docker,请确保容器具有正确的卷挂载(volume mounts)和权限
环境变量
核心配置
TERRAFORM_DIR:设置为此项以指定自定义 Terraform 项目目录。如果未设置,tfmcp将使用命令行参数、配置文件提供的目录,或回退到~/terraform。你也可以在运行时使用set_terraform_directory工具更改项目目录。
TFMCP_LOG_LEVEL:设置为debug、info、warn或error以控制日志详细程度。
TFMCP_DEMO_MODE:设置为true以启用具有额外安全特性的 demo 模式。### 安全配置
ENABLE_TF_OPERATIONS: 设置为true以启用受控的 HCP Terraform / Terraform Enterprise 写入工具(默认值:false)
TFMCP_ALLOW_DANGEROUS_OPS: 设置为true以启用 apply/destroy 操作(默认值:false)
TFMCP_ALLOW_AUTO_APPROVE: 设置为true以启用危险操作的自动批准(默认值:false)
TFMCP_MAX_RESOURCES: 设置可管理资源的最大数量(默认值:50)
TFMCP_AUDIT_ENABLED: 设置为false以禁用审计日志(默认值:true)
TFMCP_AUDIT_LOG_FILE: 审计日志文件的自定义路径(默认值:~/.tfmcp/audit.log)
TFMCP_AUDIT_LOG_SENSITIVE: 设置为true以在审计日志中包含敏感信息(默认值:false)
HCP Terraform / Terraform Enterprise
TFE_ADDRESS: HCP Terraform 或 Terraform Enterprise 基础 URL(默认值:https://app.terraform.io)
TFE_TOKEN: HCP Terraform / Terraform Enterprise 工具的 API token
TFE_SKIP_TLS_VERIFY: 仅针对使用自定义 TLS 的受信任私有 TFE 安装设置为true
TFE_MAX_RESPONSE_BYTES: 在截断前返回给 MCP 客户端的最大 HCP/TFE 响应字节数(默认值:65536)
HCP/TFE 写入工具默认禁用,除非设置 ENABLE_TF_OPERATIONS=true,否则将处于关闭状态。default 工具集会隐藏写入工具;请使用 --toolsets operations 或 --toolsets all 来公开这些工具。### MCP Transport
TRANSPORT_MODE: MCP 传输模式。本地桌面客户端使用stdio(默认),远程/CI 客户端使用streamable-http。
TRANSPORT_HOST:streamable-http模式的 HTTP 绑定主机(默认:127.0.0.1)。
TRANSPORT_PORT:streamable-http模式的 HTTP 绑定端口(默认:8080)。
MCP_ENDPOINT:streamable-httpMCP 端点路径(默认:/mcp)。
MCP_HEALTH_ENDPOINT: 健康检查端点路径(默认:/health)。
MCP_METRICS_ENDPOINT: 兼容 OTel 的 JSON 指标快照端点路径(默认:/metrics)。
MCP_SESSION_MODE: 普通 MCP 客户端使用stateful,CI 风格的 JSON 响应使用stateless(默认:stateful)。仅适用于协商协议版本在2026-07-28之前的客户端;该版本规范移除了 session,因此此类请求始终以无状态方式处理。
MCP_HEARTBEAT_INTERVAL:streamable-httpSSE 保持连接的时间间隔(秒)。设置为0以禁用(默认:15)。
MCP_CORS_MODE: 响应 CORS 策略:strict、development或disabled(默认:strict)。所有模式下 MCP 请求的 Origin 验证均保持启用。
MCP_ALLOWED_ORIGINS: 以逗号分隔的允许浏览器 Origin 列表。默认使用回环 Origin。
MCP_ALLOWED_HOSTS:streamable-http接受的以逗号分隔的 HTTPHost/ authority 值。未设置时,适用 rmcp 的仅回环默认值。
MCP_ORGANIZATION_ALLOWLIST: 远程请求可访问的以逗号分隔的 HCP/TFE 组织名称。
MCP_RATE_LIMIT_GLOBAL: 服务器整体每分钟最大 HTTP 请求数(0或未设置则禁用)。
MCP_RATE_LIMIT_SESSION: 每个Mcp-Session-Id每分钟最大 HTTP 请求数(0或未设置则禁用)。协商2026-07-28版本的客户端不发送 session 标头,因此仅受MCP_RATE_LIMIT_GLOBAL限制。
MCP_TLS_CERT_FILE: HTTPSstreamable-http的 PEM 证书文件。
MCP_TLS_KEY_FILE: HTTPSstreamable-http的 PEM 私钥文件。HCP/TFE 的凭据和地址属于服务器配置。tfmcp故意不接受请求范围内的TFE_TOKEN、Authorization或TFE_ADDRESS覆盖以进行下游透传。当组织白名单激活时,账户级和仅 ID 的 HCP/TFE 请求将采取“故障关闭(fail closed)”策略,因为其所属组织无法在本地验证。
可流式传输的 HTTP 启动示例:
TRANSPORT_MODE=streamable-http \
TRANSPORT_HOST=127.0.0.1 \
TRANSPORT_PORT=8080 \
tfmcp mcp --toolsets defaulthttp://127.0.0.1:8080/mcp,health endpoint 为 http://127.0.0.1:8080/health,metrics endpoint 为 http://127.0.0.1:8080/metrics。
Security Considerations
tfmcp 包含专为生产环境设计的全面安全特性:
🔒 Built-in Security Features
- Access Controls:自动拦截生产/敏感文件模式
- Operation Restrictions:危险操作(apply/destroy)默认禁用
- Resource Limits:可配置的最大资源数量保护
- Audit Logging:包含时间戳和用户标识的完整操作追踪
- Directory Validation:项目目录的安全策略强制执行
🛡️ Security Best Practices
- Default Safety:Apply/destroy 操作默认禁用 —— 仅在需要时显式启用
- Review Plans:在执行 apply 之前务必审查 Terraform plans,尤其是 AI 生成的计划
- IAM Boundaries:在云环境中使用适当的 IAM 权限和 role boundaries
- Audit Monitoring:定期审查
~/.tfmcp/audit.log中的审计日志
- File Patterns:内置针对
prod*、production*和secret*模式的访问保护
- Docker Security:使用容器时,仔细考虑 volume mounts 和暴露的数据
⚙️ Production Configurationbash# Recommended production settings
export TFMCP_ALLOW_DANGEROUS_OPS=false # Keep disabled for safety
export TFMCP_ALLOW_AUTO_APPROVE=false # Require manual approval
export TFMCP_MAX_RESOURCES=10 # Limit resource scope
export TFMCP_AUDIT_ENABLED=true # Enable audit logging
export TFMCP_AUDIT_LOG_SENSITIVE=false # Don't log sensitive data
## Contributing
# Recommended production settings
export TFMCP_ALLOW_DANGEROUS_OPS=false # Keep disabled for safety
export TFMCP_ALLOW_AUTO_APPROVE=false # Require manual approval
export TFMCP_MAX_RESOURCES=10 # Limit resource scope
export TFMCP_AUDIT_ENABLED=true # Enable audit logging
export TFMCP_AUDIT_LOG_SENSITIVE=false # Don't log sensitive data欢迎贡献!请随时提交 Pull Request。
1. Fork 本仓库
2. 创建你的特性分支 (git checkout -b feature/amazing-feature)
3. 每次 clone 后启用一次由仓库管理的 fast pre-commit 检查:
git config core.hooksPath .githookscargo fmt --all -- --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test --locked --all-targets --all-featuresgit commit -m 'Add some amazing feature')6. 推送到分支 (
git push origin feature/amazing-feature)7. 开启 Pull Request
pre-commit hook 始终会检查暂存区的空白字符,并有条件地对受影响的文件运行 cargo fmt、actionlint、Registry 元数据验证、模块耦合度以及重复代码检查。可选的架构工具在 Release.sh 中仍是强制性的;建议安装 cargo-coupling 和 similarity-rs 以在开发期间获得相同的快速反馈。
Release Process
在通过本地发布门禁后,手动执行 Release:
1. 确认 Cargo.toml、Cargo.lock、server.json、Dockerfile、README 和 CHANGELOG.md 使用的目标版本正确。
2. 运行本地发布门禁:./Release.sh v0.2.2。
3. 审查 CHANGELOG.md 和生成的安装包。
4. 提交并推送 main 分支,然后确认该特定 commit 的 CI 已通过。
5. 基于该干净的 commit,使用 ./Release.sh v0.2.2 --publish 进行发布。
Roadmap
以下是 tfmcp 计划的改进和未来功能:
关于 v0.2.1 的合并范围和后续工作,请参阅 docs/releases/v0.2-roadmap.md。发布变更记录在 CHANGELOG.md 中。
Completed
- [x] Basic Terraform Integration
- [x] MCP Server Implementation
- [x] Claude Desktop 集成
- [x] 核心 MCP 方法
tools/list、resources/list、resources/templates/list 和 resources/read。
- [x] 错误处理优化
- [x] 动态项目目录切换
- [x] Crates.io 发布
- [x] Docker 支持
- [x] 安全性增强
- [x] 模块健康度分析 (v0.1.6)
- [x] 资源依赖图 (v0.1.6)
- [x] Module Registry 集成 (v0.1.6)
- [x] RMCP SDK 迁移 (v0.1.8)
- [x] Future Architect 指南 (v0.1.8)
进行中
- [ ] 多环境支持
计划中
- [ ] 扩展 MCP 协议支持
- [ ] 性能优化
- [ ] 成本估算
- [ ] 交互式 TUI
- [ ] 与其他 AI 平台集成
- [ ] 插件系统
License
本项目采用 MIT License 许可 - 详情请参阅 LICENSE 文件。