mcpField
M
mcp-server-terraform

mcp-server-terraform

ローカル
github.com/RajeevSirohiクラウド・インフラ116 週間前に更新

mcp-server-terraform について

mcp-server-terraform は、自然言語で Claude から Terraform インフラを管理できるようにします。プランの確認、ドリフトとコストの分析に加え、apply や destroy の前にサーバー側で確認を必須にします。

主な機能

  1. 01Terraform の初期化、検証、プラン実行
  2. 02出力、ステート、ワークスペースの確認
  3. 03apply と destroy の確認ゲート
  4. 04プランのリスクと概算コストの集計
  5. 05ドリフト検出とツール呼び出しの記録

活用シーン

  1. 01適用前のインフラ変更の確認
  2. 02Terraform 外で変更されたリソースの確認
  3. 03ワークスペースの出力とステートの確認
  4. 04Terraform のプランや適用失敗の診断

MCP 対応

MCP クライアントに Terraform 操作と /tf-diagnose プロンプトを提供する MCP サーバーです。ローカルマシンで Terraform CLI コマンドを実行します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"rajeevsirohi-mcp-server-terraform": {
"command": "npx",
"args": [
"-y",
"@rajsir/mcp-server-terraform"
],
"env": {
"ALLOW_ONLY_READONLY_TOOLS": "<ALLOW_ONLY_READONLY_TOOLS>",
"ALLOW_ONLY_NON_DESTRUCTIVE_TOOLS": "<ALLOW_ONLY_NON_DESTRUCTIVE_TOOLS>",
"AUDIT_LOG_PATH": "<AUDIT_LOG_PATH>"
}
}
}
}
起動コマンドnpx -y @rajsir/mcp-server-terraform
設定が必要な環境変数
ALLOW_ONLY_READONLY_TOOLSSet to 'true' to expose only validate/plan/output/preflight/drift tools
ALLOW_ONLY_NON_DESTRUCTIVE_TOOLSSet to 'true' to block apply/destroy/state-mutation tools
AUDIT_LOG_PATHFile path for JSON-lines audit logging of all tool calls (var values redacted)

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@rajsir/mcp-server-terraform0.2.1

ツール

11

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
workdirstringはい.tf ファイルを含むディレクトリの絶対パスまたは相対パス

詳細

mcp-server-terraform

CI npm License: MIT

Claude が自然言語を通じて Terraform インフラストラクチャを管理できる Model Context Protocol(MCP)サーバーです。

Claude との会話だけで、プランの実行、変更の適用、状態の確認、失敗の診断ができます。

できること

terraform plan を実行するためにターミナルへ切り替える代わりに、Claude に次のように尋ねることができます。

「/infra/staging の変更をプランして、何が変わるのか説明して」

「適用して。ただし、リソースが破棄されない場合に限って」

「prod ワークスペースのすべての出力を表示して」

「最後に適用してから何かが壊れました。原因を診断して」

このサーバーはこれらの指示を、マシン上で実行する実際の terraform CLI コマンドに変換します。また、破壊的な操作を実行する前に、安全性を確認する組み込みフローを備えています。

ツール

ツール説明破壊的
tf_initTerraform の作業ディレクトリを初期化しますいいえ
tf_validate設定構文を検証しますいいえ
tf_planプランを実行し、差分とリスク/コストの概要を返しますいいえ
tf_apply変更を適用します(confirmed: true が必要です)はい
tf_destroyインフラストラクチャを破棄します(confirmed: true が必要です)はい
tf_output状態から出力値を読み取りますいいえ
tf_state状態エントリを一覧表示、表示、移動、削除します一部
tf_workspaceワークスペースを一覧表示、表示、選択、作成しますいいえ
tf_preflight実行前にプロバイダーの CLI 認証を確認しますいいえ
tf_driftTerraform の外部で変更されたリソースを検出しますいいえ
tf_resourceリソースをインポート、taint、untaint、または更新しますはい
プランのリスクとコストの概要

すべてのプラン(およびすべての適用プレビュー)は terraform show -json で分析され、 構造化された概要が付加されます。破棄されるリソースは明示され、 予想外の請求につながりやすい常時稼働リソースには、おおよその月額コストが表示されます。

── Plan Summary ──
+ 3 create, ~ 1 update, - 0 destroy, ± 0 replace

💸 EXPENSIVE — always-on resources being created:
   ⚠ aws_nat_gateway.main (~$32/month + data processing if left running)
   Remember to tf_destroy when you're done experimenting.

コストの警告対象となるリソースタイプには、NAT ゲートウェイ、ロードバランサー、EKS/AKS/GKE コントロールプレーン、RDS/Cloud SQL インスタンス、ElastiCache、Redshift、MSK、Azure Firewall(月額約 900 ドル!)が含まれます。

ドリフト検出

tf_drift は更新のみのプランを実行し、Terraform の外部(たとえばクラウドコンソールでの手動操作)で変更されたリソースを、変更された属性名と修正方法とともに報告します。

監査ログ

AUDIT_LOG_PATH にファイルパスを設定すると、各ツール呼び出しがタイムスタンプ、ツール名、結果、所要時間とともに JSON 行として追記されます。変数の値は常に秘匿され(db_password=<redacted>)、ログに記録されるのは名前だけです。

確認フロー

tf_apply と tf_destroy は、2 段階の安全確認フローを使用します。

  1. 最初の呼び出し(confirmed なし)→ terraform plan を実行して差分を表示し、それ以外の操作は行いません
  2. 2 回目の呼び出し(confirmed: true)→ 実際に適用または破棄します

Claude には、プランを先に提示せずに confirmed: true を渡さないよう指示されています。

プロンプト

このサーバーは、プランまたは適用の失敗を体系的に診断する 5 段階の手順を Claude に案内する /tf-diagnose プロンプトを公開します。

前提条件

インストール

インストールは不要です。npm からそのまま実行できます。

npx @rajsir/mcp-server-terraform

または、開発用にソースから実行します。

git clone https://github.com/RajeevSirohi/mcp-server-terraform.git
cd mcp-server-terraform
npm install
npm run build

Claude Desktop のセットアップ

Claude Desktop の設定ファイルに追加します:

macOS:~/Library/Application Support/Claude/claude_desktop_config.json Windows:%APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "terraform": {
      "command": "npx",
      "args": ["-y", "@rajsir/mcp-server-terraform"]
    }
  }
}

(ソースから実行する場合は、代わりに "command": "node" と "args": ["/absolute/path/to/dist/index.js"] を使用してください。)

Claude Desktop を再起動します。ツールが利用可能であることを示すハンマーアイコンが表示されます。

使い方

接続したら、Terraform のワークスペースについて普段の言葉で Claude に話しかけるだけです。例をいくつか紹介します。

新しいワークスペースで初めて使う場合

「C:\infra\staging の terraform 設定を初期化して、正しいクラウドアカウントにログインしているか確認して」

Claude は tf_init を実行し、続いて tf_preflight を実行します。認証されていない場合は、実行すべきコマンド(az login、aws configure など)を正確に知らせてくれます。

日常的な plan → review → apply の流れ

「C:\infra\staging の変更を計画して、何が変わるか説明して」

計画の差分と概要が表示されます。作成・更新・削除されるリソースの数、破壊的な変更の明示的な指摘、常時稼働する高コストなリソースに関する警告を確認できます。

「よさそう。適用して」

Claude は計画のプレビューをもう一度表示して、確認を求めます。あなたが承認するまで、何も適用されません。この2段階の確認はプロンプトだけでなくサーバー自体に組み込まれているため、Claude が省略することはできません。

インフラストラクチャの確認

「prod ワークスペースで、terraform の外から誰かが何か変更しましたか?」

tf_drift は状態と実際の環境を比較し、コンソールで変更された内容を報告します。変更を受け入れるか、元に戻すかを選択できます。

「すべての出力を表示して」 · 「state 内のすべてを一覧表示して」 · 「どのワークスペースがありますか?」

学習/実験(例:認定試験の準備)

「C:\labs\vpc の VPC ラボを適用して、『完了』と言ったらすべて破棄して」

ここではコストフラグが役立ちます。ラボで NAT ゲートウェイや EKS クラスターが作成される場合、忘れたままにしたときの月額費用が計画の概要で警告されます:

💸 EXPENSIVE — always-on resources being created:
   ⚠ aws_nat_gateway.main (~$32/month + data processing if left running)
   Remember to tf_destroy when you're done experimenting.
問題の修正

「C:\infra\staging で terraform plan が失敗しています。原因を診断して」

/tf-diagnose プロンプトは、validate → providers → plan → state → outputs の順に、Claude が体系的に確認できるようにします。また、プロバイダーごとの認証設定を段階的に進める /tf-login もあります。

「S3 バケット my-legacy-bucket を aws_s3_bucket.legacy として state にインポートして」

「次の apply で再作成されるように、Web サーバーを taint して」

共有環境や慎重な運用環境に推奨される設定

ALLOW_ONLY_NON_DESTRUCTIVE_TOOLS=true(以下の「安全モード」を参照)を設定して実行すると、apply/destroy を完全に利用できなくなります。また、すべての操作を記録するために AUDIT_LOG_PATH を設定します。

安全モード

環境変数を使って、利用可能なツールを制御できます:

変数効果
ALLOW_ONLY_READONLY_TOOLS=truetf_validate、tf_plan、tf_output のみ
ALLOW_ONLY_NON_DESTRUCTIVE_TOOLS=truetf_apply、tf_destroy、tf_state mv/rm をブロック
ALLOWED_TOOLS=tf_plan,tf_outputカンマ区切りで許可リストを明示

例 — 読み取り専用モード:

{
  "mcpServers": {
    "terraform": {
      "command": "node",
      "args": ["/path/to/dist/index.js"],
      "env": {
        "ALLOW_ONLY_NON_DESTRUCTIVE_TOOLS": "true"
      }
    }
  }
}

開発

npm run dev       # watch mode (recompiles on save)
npm test          # run tests
npm run build     # production build
プロジェクト構成
src/
  index.ts                  # MCP server entry point, tool registration
  config/                   # (reserved for future config/telemetry)
  models/
    common-parameters.ts    # Shared Zod schemas
  security/
    tf-flags.ts             # Dangerous flag blocking
  tools/
    tf-init.ts
    tf-validate.ts
    tf-plan.ts
    tf-apply.ts             # Two-step confirmation flow
    tf-destroy.ts           # Two-step confirmation flow
    tf-output.ts
    tf-state.ts
    tf-workspace.ts
  utils/
    terraform-runner.ts     # Core exec wrapper, workspace switching
  prompts/
    index.ts                # /tf-diagnose prompt
tests/
  tf-flags.test.ts
  tf-apply.test.ts
新しいツールの追加
  1. src/tools/tf-yourcommand.ts を作成します — *Schema 定数と非同期ハンドラー関数をエクスポートします
  2. 両方を src/index.ts にインポートします
  3. スキーマを readonlyTools または destructiveTools 配列に追加します
  4. CallToolRequestSchema ハンドラーの switch に case を追加します

ロードマップ

  • Terraform Cloud / Enterprise API のサポート(フェーズ2)
  • OpenTelemetry トレース
  • リモートデプロイ向けの SSE / ストリーム可能な HTTP トランスポート
  • GitHub Container Registry の Docker イメージ
  • 計画のリスクとコストの分析
  • ドリフト検出
  • インポート/taint/untaint/refresh
  • 監査ログ
  • CI(ビルド、テストマトリックス、実際の terraform を使った E2E)

コントリビューション

CONTRIBUTING.md を参照してください。

ライセンス

MIT — LICENSE を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。