tfmcp: Terraform Model Context Protocol Tool について
tfmcp は、MCP を通じてローカルの Terraform ワークフローを実行するコマンドラインツールです。AI アシスタントがプロジェクトを確認し、保存済みプランをレビューして承認済みの変更を適用できます。プランレビューと明示的な権限チェックを重視し、レジストリや HCP Terraform / TFE 向けのツールも備えています。
主な機能
- 01構成の読み取りとエントリポイントの検出
- 02プランの保存と plan_id による適用
- 03適用と破棄に明示的な権限を要求
- 04機密出力のマスクと状態アドレスの検証
- 05stdio と Streamable HTTP のトランスポート対応
活用シーン
- 01AI アシスタントによる Terraform プランのレビューと PR サマリー作成
- 02権限を管理した上での承認済みインフラ変更の適用
- 03変更前の状態の安全性とドリフトリスクの確認
MCP 対応
tfmcp は MCP サーバーとして、プラン、適用、状態、分析などの Terraform 関連ツールを MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
tfmcp: Terraform Model Context Protocol ツール
⚠️ このプロジェクトには本番環境で利用できるセキュリティ機能が含まれていますが、現在も開発が進行中です。セキュリティシステムは強固な保護を提供しますが、本番環境ではすべての操作を慎重に確認してください。⚠️
tfmcp は、Model Context Protocol(MCP)を通じてローカルの Terraform ワークフローを実行します。 AI アシスタントがプロジェクトを調査し、実行を準備し、保存済みのプランを確認して、 同じプランを適用し、結果を確認できるようにします。レジストリおよび HCP/TFE ツールは、 これらのローカルワークフローをサポートします。
🎮 デモ
Claude Desktop での tfmcp の動作をご覧ください。

- Terraform 設定ファイルの読み込み
- Terraform プランの出力の分析
- Terraform 設定の適用
- Terraform の状態の管理
- Terraform 設定の作成と変更
🎉 現在のリリース
tfmcp v0.2.4 が現在のリリースです。
cargo install tfmcp --version 0.2.4
v0.2.4 の新機能
- apply と同じ保存済みプランおよび権限チェックを使用した、レビュー済みの destroy プラン
- 64 プランの上限を再び利用できるようにする、保存済みプランの一覧表示と破棄
- apply 結果、失敗/不明な結果、および復旧ガイダンスの保持
- 全出力クエリと名前指定の出力クエリの両方に対する、機密出力の秘匿
- RMCP 3.5.0、依存関係とイメージの更新、Rust 1.88 の MSRV を維持
機能
| 分野 | 機能 |
|---|---|
| ローカル Terraform | 検証、フォーマット、plan/apply ワークフロー、インポートのガイダンス、出力、プロバイダー、依存関係グラフ、refresh-only フロー、およびガード付きの状態操作 |
| リポジトリ分析 | エントリーポイント/プロジェクトの検出、設定分析、品質チェック、セキュリティチェック、モジュールの健全性、プランレビュー、ドリフト/状態の安全性の調査 |
| レジストリ | HashiCorp 互換のエイリアスを利用した、パブリック/プライベートのプロバイダー、モジュール、ポリシーの検索 |
| HCP Terraform / TFE | 組織、プロジェクト、ワークスペース、実行、プラン、apply、変数、ポリシーセット、変数セット、タグ、スタック、およびゲート付き操作 |
| MCP のデプロイ | stdio と Streamable HTTP、MCP 2026-07-28 のディスカバリー、構造化されたツール結果、キャッシュヒント、ツールセット、リソース、ヘルス/メトリクス、セッション、Host/Origin 検証、レート制限、TLS の設定、監査ログ |
| パッケージング | Cargo、Docker/OCI メタデータ、MCP Registry メタデータ、Rust Edition 2024 |
インストール
ソースから
# Clone the repository
git clone https://github.com/nwiizo/tfmcp
cd tfmcp
# Build and install
cargo install --path .
Crates.io から
cargo install tfmcp
Docker を使用
# 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から利用できること - MCP 互換の AI クライアント(例:Claude Desktop または Codex)
- Docker(任意。コンテナでデプロイする場合)
使用方法
$ 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 を使用
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 との統合
Claude Desktop で tfmcp を使用するには、次の手順に従います。
-
まだインストールしていない場合は、tfmcp をインストールします。
cargo install tfmcp代わりに、Docker を使用することもできます。
docker 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
}
}
}
}
Claude Desktop で Docker を使用する場合は、次のように設定できます。
{
"mcpServers": {
"tfmcp": {
"command": "docker",
"args": ["run", "--rm", "-v", "/path/to/your/terraform:/app/terraform", "tfmcp", "mcp"],
"env": {
"TERRAFORM_DIR": "/app/terraform"
}
}
}
}
-
Claude Desktop を再起動し、tfmcp ツールを有効にします。
-
~/terraformが存在しない場合、tfmcp はサンプルの Terraform プロジェクトを自動的に作成します。これにより、Claude はすぐに Terraform で作業を開始できます。このサンプルプロジェクトは、このリポジトリのexample/demoディレクトリに含まれる例を基にしています。
ローカルの plan/apply ワークフロー
tfmcp --dir /path/to/project mcp --toolsets terraform から始めます。
デフォルトのツールセットは準備とプランレビューをサポートします。terraform
ツールセットでは、初期化とゲート付きのローカル書き込みも利用できます。
prepare_terraform_changeを呼び出して、選択したディレクトリ、Terraform のバージョン、ワークスペース、バックエンド、構成の有効性、状態の読み取り可否を確認します。readyは、確認した前提条件を満たしていることを意味します。入力変数とプロバイダーの認証情報は、実際のプランで確認されます。必要に応じてinit_terraformで初期化し、その後、準備状況を再度確認します。{}または、たとえば{"var_files":["environment.tfvars"]}を指定してget_terraform_planを呼び出します。結果には、plan_id、target、created_at、has_changes、および秘匿化された Terraform JSON のplan文字列が含まれます。 リソースの置換アドレスにはreplaceを、状態を変更せずにドリフトをプレビューするにはrefresh_only:trueを使用します。- 返された
plan_idをanalyze_plan、review_terraform_plan、summarize_plan_for_prに渡します。これらの呼び出しでは保存済みの結果を再利用します。ID を省略すると、新しいプランが作成されます。レビュー結果は参考情報であり、適用を許可するものではありません。 - 変更をレビューして承認した後、
{"plan_id":"<returned ID>","auto_approve":true}を指定してapply_terraformを呼び出します。サーバーでTFMCP_ALLOW_DANGEROUS_OPS=trueとTFMCP_ALLOW_AUTO_APPROVE=trueの両方が事前に設定されている必要があります。構成ファイルがその後編集されていても、適用される変更は保存済みのプランによって決まります。 - 適用結果の
success、status、exit_code、diagnostics、state_verified、recovery.next_stepsを確認します。get_terraform_plan({"plan_id":"<returned ID>"})で、プランの最終ステータスと保持されているapply_resultを取得します。失敗またはタイムアウトした場合は、状態を確認して新しいプランを作成してください。試行済みの ID は再度適用できません。
v0.2.2 からの移行: apply_terraform には plan_id が必要です。auto_approve のみを指定した呼び出しは、説明付きのエラーを返すようになりました。Terraform は対話型入力を受け取らないため、呼び出し前にクライアント側で承認を行います。
レビュー済みの破棄を行う場合は、get_terraform_plan({"destroy":true}) でプランを作成し、その plan_id をレビューしてから、その ID と auto_approve:true を指定して destroy_terraform を呼び出します。適用に関する両方の権限に加え、サーバーで TFMCP_DELETE_ENABLED=true も設定されている必要があります。破棄プランを apply_terraform に渡した場合も、同じ権限が適用されます。destroy は refresh_only または replace と併用できません。v0.2.3 からの移行: destroy_terraform には保存済みの破棄プランが必要になりました。未レビューのプランを作成したり、プロンプトを待ったりすることはありません。
list_terraform_plans を使用すると、保持されている ID とそのターゲットやステータスを確認できます。不要なプランの一時ファイルを削除して容量を解放するには、discard_terraform_plan({"plan_id":"<ID>"}) を使用します。破棄してもインフラストラクチャの変更、操作のキャンセル、適用のロールバックは行われません。失敗または不明な結果の記録を削除する前に、必ず確認してください。これらのツールは、デフォルトと Terraform の両方のツールセットで利用できます。
保存済みプランはプライベートな一時ディレクトリに保存され、プロジェクト、ワークスペース、初期化済みバックエンドのメタデータ、Terraform のバージョン、プロバイダーのロックファイルに関連付けられます。プラン ID が有効なのは現在のサーバープロセスの実行中のみで、保持できるプランは最大 64 件です。通常のサーバー終了時には一時ファイルが削除されます。failed は Terraform がゼロ以外の終了コードを返したことを意味し、一部の変更が適用されている可能性があります。outcome_unknown は、タイムアウトやキャンセルを含め、確定的な終了結果を取得できなかったことを意味します。どちらの場合も同じプランを再適用できず、復旧手順が示されます。操作が停止したことを確認し、記録されたターゲットと実際のリソースを調べ、原因を解決してから、新しいプランを生成してレビューしてください。ロールバックも自動再試行も行われません。結果を保持する前にリクエストがキャンセルされた場合、apply_result は null になります。状態の検証ではリソースアドレスを確認しますが、すべての属性値や出力値は確認しません。
ステータスの取得では、進行中の操作が終了するまで待機します。このリリースでは、リアルタイムの進捗確認と再起動後の復旧には対応していません。
MCP ツール
tfmcp は AI アシスタント向けに、以下の MCP ツールを提供します。
Terraform の主要な操作
| ツール | 説明 |
|---|---|
init_terraform | Terraform の作業ディレクトリを初期化します |
get_terraform_plan | 保存済みのプランを生成するか、プラン ID を指定してマスキング済みの結果とステータスを取得します |
list_terraform_plans | 保存済みのプラン ID、対象、ステータス、削除フラグを一覧表示します |
discard_terraform_plan | 不要な保存済みプランを削除し、保持容量を解放します |
analyze_plan | 新機能 リスクスコアと推奨事項を使ってプランを分析します |
apply_terraform | レビュー済みの保存済みプラン ID を適用し、状態のリソースアドレスを検証します |
destroy_terraform | 削除の明示的な許可を伴って、レビュー済みの保存済み削除プランを適用します |
validate_terraform | 設定構文を検証します |
validate_terraform_detailed | ガイドラインに沿った詳細な検証を行います |
get_terraform_state | 現在の状態を表示します |
analyze_state | 新機能 ドリフト検出を使って状態を分析します |
review_terraform_plan | プランのリスク、ブロッカー、破壊的変更、推奨事項をレビューします |
summarize_plan_for_pr | PR コメント用のプラン概要を Markdown 形式で生成します |
run_terraform_quality_checks | CI に適した検証、モジュールの健全性、ガイドライン、ロックファイルのチェックを実行します |
inspect_state_safety | 状態の読み取り可否、ドリフトのリスク、ロックファイルのステータス、ブロッカーを調査します |
detect_drift_candidates | インフラストラクチャを変更せずに、読み取り可能な状態からドリフト候補を検出します |
prepare_terraform_change | ブロッカー、警告、推奨される変更手順を生成します |
list_terraform_resources | 管理対象のすべてのリソースを一覧表示します |
set_terraform_directory | アクティブなプロジェクトディレクトリを変更します |
ワークスペースと状態(v0.1.9)
| ツール | 説明 |
|---|---|
terraform_workspace | 新機能 ワークスペースを管理します(一覧表示、表示、新規作成、選択、削除) |
terraform_import | 新機能 既存のリソースをインポートします |
terraform_taint | 新機能 リソースに taint を設定/解除します |
terraform_refresh | 新機能 状態を更新します |
コードと出力(v0.1.9)
| ツール | 説明 |
|---|---|
terraform_fmt | 新機能 コードをフォーマットします |
terraform_graph | 新機能 依存関係グラフを生成します |
terraform_output | 名前付きクエリを含め、機密値をマスキングした出力値を取得します |
terraform_providers | 新機能 ロックファイルを使ってプロバイダー情報を取得します |
check_provider_lockfile | 再現可能なプロバイダー選択のために .terraform.lock.hcl をチェックします |
分析とセキュリティ
| ツール | 説明 |
|---|---|
analyze_terraform | 設定を分析します |
inspect_terraform_project | ローカルの Terraform ディレクトリ、モジュール、エントリーポイントと思われる箇所を調査します |
detect_terraform_entrypoints | ルートモジュールのエントリーポイントと思われる箇所を検出します |
analyze_module_health | 凝集度/結合度の指標を使ってモジュールの健全性を分析します |
get_resource_dependency_graph | リソースの依存関係を可視化します |
suggest_module_refactoring | リファクタリングを提案します |
get_security_status | シークレット検出を含むセキュリティスキャンを実行します |
レジストリ
| ツール | 説明 |
|---|---|
search_providers | プロバイダーを検索します(HashiCorp 互換のエイリアス) |
search_terraform_providers | プロバイダーを検索します |
get_provider_details | プロバイダーの詳細を取得します(HashiCorp 互換のエイリアス) |
get_provider_info | プロバイダーの詳細を取得します |
get_provider_docs | プロバイダーのドキュメントを取得します |
get_provider_capabilities | プロバイダーのリソース、データソース、関数、ガイドを取得します |
search_modules | モジュールを検索します(HashiCorp 互換のエイリアス) |
search_terraform_modules | モジュールを検索します |
get_module_details | モジュールの詳細を取得します |
get_latest_module_version | モジュールの最新バージョンを取得します |
get_latest_provider_version | プロバイダーの最新バージョンを取得します |
search_policies | Sentinel/OPA ポリシーライブラリを検索します |
get_policy_details | ポリシーライブラリの詳細を取得します |
HCP Terraform / Terraform Enterprise(読み取り専用)
| ツール | 説明 |
|---|---|
get_token_permissions | トークンを公開せずに、設定済みのトークンアカウントの詳細を確認します |
list_terraform_orgs | 表示可能な組織の一覧を取得します |
list_terraform_projects | 組織内のプロジェクト一覧を取得します |
list_workspaces | 組織内のワークスペース一覧を取得します |
get_workspace_details | ID または組織名/名前でワークスペースの詳細を取得します |
list_runs | ワークスペースの実行一覧を取得します |
get_run_details | 実行の詳細を取得します |
get_plan_details | プランの詳細を取得します |
get_plan_logs | プランのログを取得します |
get_plan_json_output | Terraform の JSON プラン出力を取得します |
get_apply_details | 適用の詳細を取得します |
get_apply_logs | 適用のログを取得します |
get_workspace_policy_sets | ワークスペースに関連付けられたポリシーセットを取得します |
list_workspace_variables | ワークスペース変数の一覧を取得します |
list_variable_sets | 組織の変数セット一覧を取得します |
read_workspace_tags | ワークスペースのタグを読み取ります |
list_stacks | Terraform スタックの一覧を取得します |
get_stack_details | Terraform スタックの詳細を取得します |
search_private_modules | プライベートレジストリのモジュールを検索します |
get_private_module_details | プライベートレジストリのモジュールの詳細を取得します |
search_private_providers | プライベートレジストリのプロバイダーを検索します |
get_private_provider_details | プライベートレジストリのプロバイダーの詳細を取得します |
HCP Terraform / Terraform Enterprise(制限付き操作)
| ツール | 説明 |
|---|---|
create_workspace | ENABLE_TF_OPERATIONS=true の場合にワークスペースを作成します |
update_workspace | ENABLE_TF_OPERATIONS=true の場合にワークスペースの設定を更新します |
delete_workspace_safely | ENABLE_TF_OPERATIONS=true の場合にワークスペースの安全な削除アクションを使用します |
create_run | ENABLE_TF_OPERATIONS=true の場合に実行をキューに追加します |
action_run | ENABLE_TF_OPERATIONS=true の場合に実行を適用、破棄、キャンセル、強制キャンセル、または強制実行します |
create_workspace_variable | ENABLE_TF_OPERATIONS=true の場合にワークスペース変数を作成します |
update_workspace_variable | ENABLE_TF_OPERATIONS=true の場合にワークスペース変数を更新します |
attach_policy_set_to_workspace | ENABLE_TF_OPERATIONS=true の場合にポリシーセットをワークスペースに関連付けます |
create_variable_set | ENABLE_TF_OPERATIONS=true の場合に変数セットを作成します |
create_variable_in_variable_set | ENABLE_TF_OPERATIONS=true の場合に変数セット内に変数を作成します |
delete_variable_in_variable_set | ENABLE_TF_OPERATIONS=true の場合に変数セットから変数を削除します |
attach_variable_set_to_workspaces | ENABLE_TF_OPERATIONS=true の場合に変数セットをワークスペースに関連付けます |
detach_variable_set_from_workspaces | ENABLE_TF_OPERATIONS=true の場合に変数セットとワークスペースの関連付けを解除します |
create_workspace_tags | ENABLE_TF_OPERATIONS=true の場合にワークスペースタグを作成または関連付けます |
MCP リソース
| URI | 説明 |
|---|---|
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 互換のプロバイダードキュメントテンプレート |
ログとトラブルシューティング
tfmcp サーバーのログは次の場所で確認できます。
~/Library/Logs/Claude/mcp-server-tfmcp.log
よくある問題と解決策:
- Claude がサーバーに接続できない:設定で tfmcp 実行ファイルへのパスが正しいことを確認してください
- Terraform プロジェクトの問題:tfmcp は、Terraform プロジェクトが見つからない場合にサンプルプロジェクトを自動的に作成します
- メソッドが見つからないエラー:tfmcp は tools/list、resources/list、resources/templates/list、resources/read をアドバタイズし、実装しています
- Docker の問題:Docker を使用している場合は、コンテナーに適切なボリュームマウントと権限が設定されていることを確認してください
環境変数
コア設定
TERRAFORM_DIR:カスタムの Terraform プロジェクトディレクトリを指定するには、この値を設定します。設定されていない場合、tfmcp はコマンドライン引数または設定ファイルで指定されたディレクトリを使用し、それらがない場合は~/terraformを使用します。set_terraform_directoryツールを使って、実行時にプロジェクトディレクトリを変更することもできます。TFMCP_LOG_LEVEL:ログの詳細度を制御するには、debug、info、warn、errorのいずれかを設定します。TFMCP_DEMO_MODE:追加の安全機能を備えたデモモードを有効にするには、trueを設定します。TFMCP_COMMAND_TIMEOUT_SECONDS:init、plan、保存済みプランの apply、検証、実行準備のタイムアウトを秒単位で正の値に設定します(デフォルト:900)。タイムアウトした書き込みは一部完了している場合があります。再試行する前に状態を確認してください。
セキュリティ設定
ENABLE_TF_OPERATIONS:ゲート付きの HCP Terraform / Terraform Enterprise 書き込みツールを有効にするには、trueを設定します(デフォルト:false)TFMCP_ALLOW_DANGEROUS_OPS:apply/destroy 操作を有効にするには、trueを設定します(デフォルト:false)TFMCP_DELETE_ENABLED:保存済みの destroy プランを適用するには、trueを設定します。apply の権限も両方必要です(デフォルト: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 トークン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_MODE:MCP トランスポートモードです。ローカルのデスクトップクライアントではstdio(デフォルト)、リモートまたは CI のクライアントではstreamable-httpを使用します。TRANSPORT_HOST:streamable HTTP モードの HTTP バインドホストです(デフォルト:127.0.0.1)。TRANSPORT_PORT:streamable HTTP モードの HTTP バインドポートです(デフォルト:8080)。MCP_ENDPOINT:Streamable HTTP MCP エンドポイントのパスです(デフォルト:/mcp)。MCP_HEALTH_ENDPOINT:ヘルスエンドポイントのパスです(デフォルト:/health)。MCP_METRICS_ENDPOINT:OTel 互換の JSON メトリクススナップショットエンドポイントのパスです(デフォルト:/metrics)。MCP_SESSION_MODE:通常の MCP クライアントではstateful、CI 形式の JSON 応答ではstatelessを指定します(デフォルト:stateful)。プロトコルバージョンとして2026-07-28より前のバージョンをネゴシエートするクライアントにのみ適用されます。この仕様ではセッションが削除されたため、それらのリクエストは常にステートレスで処理されます。MCP_HEARTBEAT_INTERVAL:Streamable HTTP SSE のキープアライブ間隔を秒単位で指定します。0に設定すると無効になります(デフォルト:15)。MCP_CORS_MODE:レスポンスの CORS ポリシーです。strict、development、disabledのいずれかを指定します(デフォルト:strict)。すべてのモードで MCP リクエストの Origin 検証は有効です。MCP_ALLOWED_ORIGINS:許可するブラウザーオリジンをカンマ区切りで指定します。デフォルトではループバックオリジンが使用されます。MCP_ALLOWED_HOSTS:Streamable HTTP で許可する HTTPHost/authority の値をカンマ区切りで指定します。未設定の場合、rmcp のループバックのみを許可するデフォルトが適用されます。MCP_ORGANIZATION_ALLOWLIST:リモートリクエストがアクセスできる HCP/TFE 組織名をカンマ区切りで指定します。MCP_RATE_LIMIT_GLOBAL:サーバー全体での 1 分あたりの HTTP リクエスト最大数です(0または未設定で無効)。MCP_RATE_LIMIT_SESSION:Mcp-Session-Idごとの 1 分あたりの HTTP リクエスト最大数です(0または未設定で無効)。2026-07-28をネゴシエートするクライアントはセッションヘッダーを送信しないため、それらのクライアントにはMCP_RATE_LIMIT_GLOBALのみが適用されます。MCP_TLS_CERT_FILE:HTTPS Streamable HTTP 用の PEM 証明書ファイルです。MCP_TLS_KEY_FILE:HTTPS Streamable HTTP 用の PEM 秘密鍵ファイルです。
HCP/TFE の認証情報とアドレスはサーバー設定です。tfmcp は、下流へのパススルー用にリクエスト単位の TFE_TOKEN、Authorization、または TFE_ADDRESS の上書きを意図的に受け付けません。組織の許可リストが有効な場合、所有する組織をローカルで検証できないため、アカウント全体を対象とするリクエストと ID のみを指定した HCP/TFE リクエストは安全側に倒して拒否されます。
streamable HTTP の起動例:
TRANSPORT_MODE=streamable-http \
TRANSPORT_HOST=127.0.0.1 \
TRANSPORT_PORT=8080 \
tfmcp mcp --toolsets default
MCP エンドポイントは http://127.0.0.1:8080/mcp、ヘルスエンドポイントは
http://127.0.0.1:8080/health、メトリクスエンドポイントは
http://127.0.0.1:8080/metrics です。
セキュリティに関する考慮事項
tfmcp には、本番環境での使用を想定した包括的なセキュリティ機能が備わっています。
🔒 組み込みのセキュリティ機能
- アクセス制御:本番環境や機密情報に関するファイルパターンを自動的にブロックします
- 操作制限:危険な操作(apply/destroy)はデフォルトで無効です
- リソース制限:リソース数の設定可能な上限によって保護します
- 監査ログ:タイムスタンプとユーザー識別情報を含む、すべての操作の記録です
- ディレクトリ検証:プロジェクトディレクトリにセキュリティポリシーを適用します
🛡️ セキュリティのベストプラクティス
- デフォルトの安全性:apply/destroy 操作はデフォルトで無効です。必要な場合にのみ明示的に有効にしてください
- プランの確認:適用前に Terraform のプランを必ず確認してください。特に AI が生成したプランは注意が必要です
- IAM の境界:クラウド環境では適切な IAM 権限とロール境界を使用してください
- 監査の監視:
~/.tfmcp/audit.logの監査ログを定期的に確認してください - ファイルパターン:
prod*、production*、secret*パターンへのアクセスを組み込みで保護します - Docker のセキュリティ:コンテナーを使用する場合は、ボリュームマウントと公開データを慎重に検討してください
⚙️ 本番環境の設定
# 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
貢献
貢献を歓迎します!お気軽にプルリクエストを送信してください。
- リポジトリをフォークします
- 機能ブランチを作成します(
git checkout -b feature/amazing-feature) - クローンごとに一度、リポジトリ管理の高速なコミット前チェックを有効にします:
git config core.hooksPath .githooks - プッシュする前に、すべての正確性チェックを実行します:
cargo fmt --all -- --check cargo clippy --all-targets --all-features -- -D warnings cargo test --locked --all-targets --all-features - 変更をコミットします(
git commit -m 'Add some amazing feature') - ブランチにプッシュします(
git push origin feature/amazing-feature) - プルリクエストを作成します
コミット前フックは、ステージされたファイルの空白文字を常にチェックし、影響を受けるファイルに対して条件に応じて
cargo fmt、actionlint、レジストリのメタデータ検証、モジュール結合、重複コードのチェックを実行します。
オプションのアーキテクチャツールは引き続き Release.sh で必須です。開発中にも同様の高速なフィードバックを得るには、
cargo-coupling と similarity-rs をインストールしてください。
リリースプロセス
リリースは、ローカルのリリースゲートに合格した後、手動で行います。
Cargo.toml、Cargo.lock、server.json、Dockerfile、README、CHANGELOG.mdが対象のバージョンを使用していることを確認します。- ローカルのリリースゲートを実行します:
./Release.sh v0.2.4。 CHANGELOG.mdと生成されたパッケージを確認します。mainをコミットしてプッシュし、そのコミットに対して CI が成功したことを確認します。- クリーンなコミットから、
./Release.sh v0.2.4 --publishを実行して公開します。
ロードマップ
tfmcp で予定されている改善と今後の機能を紹介します:
統合された v0.2.1 の対象範囲と今後の作業については、 docs/releases/v0.2-roadmap.md を参照してください。リリースの変更内容は CHANGELOG.md に記録されています。
ローカル開発の要件では、現在の実装を Terraform のドキュメントおよびローカルの Terraform in Depth / Terraform at Scale の資料と比較し、優先順位付けされた作業項目と今後の作業に向けた受け入れ基準を示しています。
実際にローカルの Web アプリで手動検証を行う場合は、 ローカルアプリケーションの例を参照してください。この例では、保存済みプランのデプロイ、HTTP レスポンス、実際の Terraform 引数、監査記録、ティアダウンを検証し、レポートとログを保持します。
完了
-
Terraform の基本的な統合 Terraform CLI と連携し、操作を分析および実行するための基本機能です。
-
MCP サーバーの実装 AI アシスタント向けの Model Context Protocol サーバーの初期実装です。
-
プロジェクトの自動作成 必要に応じて Terraform のサンプルプロジェクトを自動作成する機能を追加しました。
-
Claude Desktop との統合 Claude Desktop とシームレスに統合するためのサポートです。
-
MCP のコアメソッド tools/list、resources/list、resources/templates/list、resources/read など、必須の MCP メソッドを実装しました。
-
エラー処理の改善 安定した動作を実現するため、エラー処理と復旧メカニズムを改善しました。
-
プロジェクトディレクトリの動的切り替え サービスを再起動せずに、アクティブな Terraform プロジェクトディレクトリを変更できる機能を追加しました。
-
Crates.io への公開 Cargo で簡単にインストールできるよう、パッケージを Crates.io に公開しました。
-
Docker のサポート デプロイを容易にし、クロスプラットフォームの互換性を高めるため、コンテナ化のサポートを追加しました。
-
セキュリティの強化 設定可能なポリシー、監査ログ、アクセス制御、本番環境に対応した安全機能を備えた包括的なセキュリティシステムです。
-
モジュールの健全性分析(v0.1.6) 凝集度・結合度の指標、健全性スコア、リファクタリングの提案を備えた、IaC のホワイトボックスアプローチです。
-
リソース依存関係グラフ(v0.1.6) 明示的および暗黙的な依存関係を含む、リソース間の関係を可視化します。
-
モジュールレジストリとの統合(v0.1.6) レジストリから Terraform モジュールを検索して探索できます。
-
包括的なテストフレームワーク 実際の Terraform 設定を使用した統合テストを含む、85 件以上のテストです。
-
RMCP SDK への移行(v0.1.8) MCP への準拠を高めるため、適切なツール注釈を備えた公式 RMCP SDK に移行しました。
-
Future Architect ガイドライン(v0.1.8) シークレットの検出や変数品質の検証を含む、Terraform コーディング標準への準拠チェックです。
進行中
- マルチ環境のサポート 複数の Terraform 環境、ワークスペース、モジュールを管理するためのサポートを追加します。
計画中
-
MCP プロトコルのサポート拡大 AI アシスタントとの統合をさらに強化するため、MCP のメソッドと機能を追加で実装します。
-
パフォーマンスの最適化 大規模な Terraform プロジェクトでのリソース使用量と応答時間を最適化します。
-
コストの見積もり クラウドプロバイダーの料金 API と統合し、Terraform のプランのコストを見積もります。
-
インタラクティブな TUI ローカルでの利用とデバッグを容易にする、ターミナルベースのユーザーインターフェースを開発します。
-
その他の AI プラットフォームとの統合 Claude 以外の AI アシスタントやプラットフォームにも対応できるよう拡張します。
-
プラグインシステム コア機能を拡張できるプラグインアーキテクチャを開発します。
ライセンス
このプロジェクトは MIT ライセンスの下で公開されています。詳細については、LICENSE ファイルをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。