mcp-server-terraform について
mcp-server-terraform は、自然言語で Claude から Terraform インフラを管理できるようにします。プランの確認、ドリフトとコストの分析に加え、apply や destroy の前にサーバー側で確認を必須にします。
主な機能
- 01Terraform の初期化、検証、プラン実行
- 02出力、ステート、ワークスペースの確認
- 03apply と destroy の確認ゲート
- 04プランのリスクと概算コストの集計
- 05ドリフト検出とツール呼び出しの記録
活用シーン
- 01適用前のインフラ変更の確認
- 02Terraform 外で変更されたリソースの確認
- 03ワークスペースの出力とステートの確認
- 04Terraform のプランや適用失敗の診断
MCP 対応
MCP クライアントに Terraform 操作と /tf-diagnose プロンプトを提供する MCP サーバーです。ローカルマシンで Terraform CLI コマンドを実行します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @rajsir/mcp-server-terraformALLOW_ONLY_READONLY_TOOLSSet to 'true' to expose only validate/plan/output/preflight/drift toolsALLOW_ONLY_NON_DESTRUCTIVE_TOOLSSet to 'true' to block apply/destroy/state-mutation toolsAUDIT_LOG_PATHFile path for JSON-lines audit logging of all tool calls (var values redacted)ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
11掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| workdir | string | はい | .tf ファイルを含むディレクトリの絶対パスまたは相対パス |
詳細
mcp-server-terraform
Claude が自然言語を通じて Terraform インフラストラクチャを管理できる Model Context Protocol(MCP)サーバーです。
Claude との会話だけで、プランの実行、変更の適用、状態の確認、失敗の診断ができます。
できること
terraform plan を実行するためにターミナルへ切り替える代わりに、Claude に次のように尋ねることができます。
「
/infra/stagingの変更をプランして、何が変わるのか説明して」
「適用して。ただし、リソースが破棄されない場合に限って」
「prod ワークスペースのすべての出力を表示して」
「最後に適用してから何かが壊れました。原因を診断して」
このサーバーはこれらの指示を、マシン上で実行する実際の terraform CLI コマンドに変換します。また、破壊的な操作を実行する前に、安全性を確認する組み込みフローを備えています。
ツール
| ツール | 説明 | 破壊的 |
|---|---|---|
tf_init | Terraform の作業ディレクトリを初期化します | いいえ |
tf_validate | 設定構文を検証します | いいえ |
tf_plan | プランを実行し、差分とリスク/コストの概要を返します | いいえ |
tf_apply | 変更を適用します(confirmed: true が必要です) | はい |
tf_destroy | インフラストラクチャを破棄します(confirmed: true が必要です) | はい |
tf_output | 状態から出力値を読み取ります | いいえ |
tf_state | 状態エントリを一覧表示、表示、移動、削除します | 一部 |
tf_workspace | ワークスペースを一覧表示、表示、選択、作成します | いいえ |
tf_preflight | 実行前にプロバイダーの CLI 認証を確認します | いいえ |
tf_drift | Terraform の外部で変更されたリソースを検出します | いいえ |
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 段階の安全確認フローを使用します。
- 最初の呼び出し(
confirmedなし)→terraform planを実行して差分を表示し、それ以外の操作は行いません - 2 回目の呼び出し(
confirmed: true)→ 実際に適用または破棄します
Claude には、プランを先に提示せずに confirmed: true を渡さないよう指示されています。
プロンプト
このサーバーは、プランまたは適用の失敗を体系的に診断する 5 段階の手順を Claude に案内する /tf-diagnose プロンプトを公開します。
前提条件
- Node.js 18 以降
- PATH 上で利用できる Terraform CLI
- Claude Desktop(または MCP 対応のクライアント)
インストール
インストールは不要です。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=true | tf_validate、tf_plan、tf_output のみ |
ALLOW_ONLY_NON_DESTRUCTIVE_TOOLS=true | tf_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
新しいツールの追加
src/tools/tf-yourcommand.tsを作成します —*Schema定数と非同期ハンドラー関数をエクスポートします- 両方を
src/index.tsにインポートします - スキーマを
readonlyToolsまたはdestructiveTools配列に追加します 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 を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。