/ 目錄 / 演練場 / tfmcp
● 社群 nwiizo ⚡ 即開即用

tfmcp

作者 nwiizo · nwiizo/tfmcp

讓 Claude 讀取你的 Terraform 配置、執行 dry-run 計畫、以及(選擇性的)套用變更 — 而無需交出雲端金鑰。

tfmcp 將本地 Terraform CLI 包裝成 MCP 伺服器。它讀取 HCL、執行 plan/validate/format、探索狀態,並——只有在你明確啟用 TFMCP_ALLOW_DANGEROUS_OPS 時——才能套用或摧毀。認證保留在你既有的 AWS/GCP/Azure 環境中;tfmcp 永遠看不到它們。

為什麼要用

核心特性

即時演示

實際使用效果

tfmcp.replay ▶ 就緒
0/0

安裝

選擇你的客戶端

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "tfmcp": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/nwiizo/tfmcp"
      ],
      "_inferred": true
    }
  }
}

開啟 Claude Desktop → Settings → Developer → Edit Config。儲存後重啟應用。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "tfmcp": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/nwiizo/tfmcp"
      ],
      "_inferred": true
    }
  }
}

Cursor 使用與 Claude Desktop 相同的 mcpServers 格式。專案級設定優先於全域。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "tfmcp": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/nwiizo/tfmcp"
      ],
      "_inferred": true
    }
  }
}

點擊 Cline 側欄中的 MCP Servers 圖示,然後選 "Edit Configuration"。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "tfmcp": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/nwiizo/tfmcp"
      ],
      "_inferred": true
    }
  }
}

格式與 Claude Desktop 相同。重啟 Windsurf 生效。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "tfmcp",
      "command": "TODO",
      "args": [
        "See README: https://github.com/nwiizo/tfmcp"
      ]
    }
  ]
}

Continue 使用伺服器物件陣列,而非映射。

~/.config/zed/settings.json
{
  "context_servers": {
    "tfmcp": {
      "command": {
        "path": "TODO",
        "args": [
          "See README: https://github.com/nwiizo/tfmcp"
        ]
      }
    }
  }
}

加入 context_servers。Zed 儲存後熱重載。

claude mcp add tfmcp -- TODO 'See README: https://github.com/nwiizo/tfmcp'

一行命令搞定。用 claude mcp list 驗證,claude mcp remove 移除。

使用場景

實戰用法: tfmcp

在合併 PR 前審查 Terraform 計畫

👤 平台工程師、審查基礎設施即程式碼拉取請求的 SRE ⏱ ~10 min intermediate

何時使用: PR 變更了 40 多個資源,你想在核准前進行爆炸半徑的健全檢查。

前置條件
  • 已安裝 Terraform CLI 並配置雲端認證 — 執行 aws configure 或同等步驟;tfmcp 使用你的 shell 已有的任何東西
  • 已透過 cargo 安裝 tfmcp — cargo install tfmcp
步驟
  1. 將 tfmcp 指向 Terraform 目錄
    設定 TERRAFORM_DIR 為 ~/work/infra/prod 並執行 terraform plan。總結正在變更的內容。✓ 已複製
    → 乾淨的計畫摘要,包含新增/變更/刪除計數
  2. 要求風險評分的分解
    對於每個被摧毀或替換的資源,評估風險等級(低/中/高)並說明原因。標記任何有狀態的東西。✓ 已複製
    → 突顯資料庫、佇列或資料資源的風險表格
  3. 取得 PR 就緒的審查註解
    草擬 PR 審查註解:核准、要求變更,或阻止——附帶理由。✓ 已複製
    → 準備好貼上的可行動審查文字

結果: 3 分鐘內完成考量風險的計畫審查,而不需花時間進行套用。

注意事項
  • 計畫在本地成功,但在 CI 中會因提供商版本不同而失敗 — 確保 tfmcp 的 terraform 版本與你的 CI 使用的版本相符——透過 .terraform-version 或 tfenv 進行釘選
  • 狀態是遠端的,tfmcp 在認證時卡住 — 先手動執行一次 terraform init 以快取後端認證,然後再呼叫 tfmcp
搭配使用: github · filesystem

在生產環境中偵測並解釋 Terraform 漂移

👤 稽核 Terraform 外部發生之變更的 SRE ⏱ ~20 min intermediate

何時使用: 每月一次漂移檢查,或當懷疑雲端主控台有所變更時。

步驟
  1. 針對生產環境執行計畫並查看變更
    針對生產環境執行 terraform plan,並告訴我是否存在漂移——實際狀態與 .tf 不同的資源。✓ 已複製
    → 包含差異的漂移資源列表
  2. 分類每個漂移
    對於每個漂移,說明是否安全重新整理(協調 Terraform 與現實)或需要重新套用(協調現實與 Terraform)。✓ 已複製
    → 兩個清單:重新整理候選和重新套用候選

結果: 漂移報告,其中每個資源都有具體的補救計畫。

注意事項
  • 某些自動縮放或提供商管理的欄位中漂移是正常的 — 新增漂移忽略清單(透過 ignore_changes 生命週期區塊),針對已知雜訊欄位,例如 last_modified 時間戳記

理解一個陌生的 Terraform 模組

👤 被丟進 500 個檔案的 terraform 倉庫的新團隊成員 ⏱ ~15 min beginner

何時使用: 你繼承了基礎設施倉庫,在接觸任何東西前需要一份東西清單的地圖。

步驟
  1. 掃描目錄
    列出 ~/work/infra 中的每個模組。對於每一個,告訴我它管理什麼資源以及它期望什麼輸入。✓ 已複製
    → 模組清單,包含每個模組的用途和輸入
  2. 生成依賴性圖表
    執行 terraform graph 並描述模組依賴樹——哪些模組依賴於哪些模組。✓ 已複製
    → 清晰的 ASCII 樹或編號清單

結果: 對倉庫的心智地圖,無需手動閱讀每個 .tf 檔案。

注意事項
  • 某些模組是未使用的死程式碼 — 要求 tfmcp 標記在根模組或任何其他模組中沒有被參考的模組
搭配使用: filesystem

組合

與其他 MCP 搭配,撬動十倍槓桿

tfmcp + github

端到端審查 Terraform PR:從 GitHub 提取差異、透過 tfmcp 在本地進行計畫、發佈審查註解

從 acme/infra 提取 PR #42、檢出該分支、執行 tfmcp terraform plan,以及草擬審查註解。✓ 已複製
tfmcp + filesystem

批次重構 HCL 檔案並驗證計畫不改變輸出

在 ~/infra 的所有 .tf 檔案中將變數 aws_region 重新命名為 region,然後確認計畫顯示沒有資源變更。✓ 已複製

工具

此 MCP 暴露的能力

工具輸入參數何時呼叫成本
terraform_plan dir?: str, var_file?: str 安全——在套用前始終執行 1 次 terraform plan 執行
terraform_apply dir?: str, auto_approve?: bool 僅在設定 TFMCP_ALLOW_DANGEROUS_OPS=true 且使用者明確意圖時 真實的雲端變更
terraform_validate dir?: str 在提交前——便宜的語法/型別檢查 免費
terraform_state_list dir?: str 清點 Terraform 知道的內容 免費(讀取狀態)
terraform_show dir?: str, resource?: str 檢查特定資源的儲存狀態 免費
terraform_graph dir?: str 理解模組/資源依賴性 免費

成本與限制

運行它的成本

API 配額
沒有 tfmcp 層級的配額;受你的雲端提供商 API 速率限制的限制
每次呼叫 Token 數
大型倉庫的計畫輸出可能達到 20k+ 令牌——使用目標
費用
免費且 MIT 授權;實際成本是套用在你雲端中觸及的任何東西
提示
預設情況下保留套用關閉。使用 terraform plan -target=module.x 限制有雜訊的計畫範圍,節省上下文令牌。

安全

權限、密鑰、影響範圍

最小權限: 本地 terraform 二進制檔 + 用於計畫/驗證的雲端提供商讀取認證
憑證儲存: Terraform 已使用的任何東西——AWS 環境變數、~/.aws/credentials、工作負載身份等
資料出站: 直接從你的機器呼叫你的雲端提供商 API;tfmcp 不會回撥到家裡
切勿授予: 在共用工作階段中設定 TFMCP_ALLOW_DANGEROUS_OPS=true 當唯讀就足夠時使用管理員雲端認證

故障排查

常見錯誤與修復

terraform 二進制檔未找到

安裝 Terraform 並確保它在 PATH 上。tfmcp 會外殼化執行 terraform;它不捆綁它。

驗證: terraform version
錯誤:沒有有效的認證來源

你的 shell 雲端認證沒有被匯出。先執行 aws sts get-caller-identity(或同等步驟)。

驗證: aws sts get-caller-identity
計畫說「套用被拒絕:未設定 TFMCP_ALLOW_DANGEROUS_OPS」

設計上是這樣。如果你真的想套用,只為該工作階段匯出 TFMCP_ALLOW_DANGEROUS_OPS=true。

驗證: echo $TFMCP_ALLOW_DANGEROUS_OPS
需要後端初始化

在呼叫 tfmcp 工具前,先在目標目錄中手動執行一次 terraform init

驗證: terraform init

替代方案

tfmcp 對比其他方案

替代方案何時用它替代權衡
terraform-mcp-server (Hashicorp 官方)你想要一個供應商支援的 MCP,具有註冊表支援較少 CLI 奇偶性;較少狀態/漂移工具
原始 shell MCP + terraform你想要完全的靈活性沒有防護欄——容易不小心執行 terraform destroy

更多

資源

📖 閱讀 GitHub 上的官方 README

🐙 查看未解決的 issue

🔍 瀏覽全部 400+ MCP 伺服器和 Skills