Terraform MCP Server

公式

HashiCorp TerraformのInfrastructure as Codeワークフロー向けMCPサーバー。Terraform Registryを通じたプロバイダーおよびモジュールの検出機能を含む。

Terraform MCPで何ができますか?

  • Search Terraform Registry — 検索して、search_providersget_provider_details を使用してパブリックレジストリからプロバイダーやモジュールを見つけるよう依頼します。
  • Manage HCP Terraform workspaces — ワークスペース操作を介して、ワークスペースの作成、更新、削除、および変数、タグ、ランを処理します。
  • List organizations and projects — HCP Terraform または Terraform Enterprise から組織とプロジェクトの一覧を取得します。
  • Access private registry contentregistry-private ツールセットを使用して、プライベートレジストリのプロバイダー、モジュール、ポリシーをクエリします。
  • Filter available tools--toolsets--tools フラグ(例: list_workspaces)を使用して、必要な機能のみを有効にします。

ドキュメント

Terraform MCP Server

Terraform MCP Serverは、Model Context Protocol (MCP)サーバーであり、Terraform RegistryおよびHCP TerraformAPIとシームレスに統合し、Infrastructure as Code(IaC)開発における高度な自動化と対話機能を実現します。

目次

はじめにクライアント統合ビルドと実行
機能
前提条件
コマンドラインオプション
手順
インストール
Visual Studio Code
Cursor
Claude Desktop、Amazon Q Developer、Kiro CLI
Claude Code
Codex CLI
Gemini拡張機能
Bob IDEおよびShell
ソースからのインストール
Dockerイメージのローカルビルド
トランスポートサポート
Stdioトランスポート
StreamableHTTPトランスポート
サーバー機能デプロイとセキュリティヘルプと貢献
利用可能なツール
利用可能なリソース
利用可能なメトリクス
ツールフィルタリング
セッションモード
集中デプロイのためのトークンパススルー
クライアントIP転送
信頼モデル
信頼できるホップ
制限事項
以前のバージョンからの移行
サポートされるヘッダー
セキュリティに関する考慮事項
集中デプロイの例
トラブルシューティング
企業プロキシとTLS検査
開発
貢献
ライセンス
セキュリティ
サポート

機能

  • デュアルトランスポートサポート: 設定可能なエンドポイントを持つStdioおよびStreamableHTTPトランスポートの両方
  • Terraform Registry統合: プロバイダー、モジュール、ポリシー向けの公開Terraform Registry APIとの直接統合
  • HCP TerraformおよびTerraform Enterpriseサポート: 完全なワークスペース管理、組織/プロジェクト一覧、プライベートレジストリへのアクセス
  • ワークスペース操作: 変数、タグ、ラン管理をサポートするワークスペースの作成、更新、削除
  • ツール使用状況監視のためのOTelメトリクス: Streamable HTTPモードでツール呼び出し量、レイテンシ、失敗を追跡するためのオープンテレメトリーメーターとの統合。この機能を有効にすると、デフォルトのHTTPサーバーメトリクスも公開されます

セキュリティに関する注意: クエリによっては、MCPサーバーが特定のTerraformデータをMCPクライアントおよびLLMに公開する場合があります。信頼できないMCPクライアントまたはLLMとMCPサーバーを使用しないでください。

法的注意: 第三者のMCPクライアント/LLMの使用は、そのようなMCP/LLMの利用規約にのみ従うものとし、IBMはそのような第三者のツールの性能について責任を負いません。IBMは、第三者のMCPクライアント/LLMに対する一切の保証および責任を明示的に否認し、第三者のツールによって引き起こされた問題を解決するためのサポートを提供できない場合があります。

注意: MCPサーバーによって提供される出力および推奨事項は動的に生成され、クエリ、モデル、接続されたMCPクライアントによって異なる場合があります。ユーザーは、実装前にすべての出力/推奨事項を十分に確認し、組織のセキュリティベストプラクティス、コスト効率の目標、コンプライアンス要件に沿っていることを確認する必要があります。

前提条件

  1. Dockerがインストールされ、実行されていることを確認して、コンテナ化された環境でサーバーを使用します。
  2. Model Context Protocol(MCP)をサポートするAIアシスタントをインストールします。

コマンドラインオプション

環境変数:

変数説明デフォルト
TFE_ADDRESSAPI呼び出し用のTerraform Enterprise/HCP Terraformアドレスを設定します。プロトコルを含める必要があります(例: https://app.terraform.io)。streamable-httpモードでは、これがアドレスを設定する唯一の方法です。クライアントがヘッダーやクエリパラメータで提供することはできません。オプション
TFE_TOKENTerraform Enterprise APIトークン""(空)
TF_MCP_SHARED_SECRETHCP Terraform / TFEへのリクエストでX-Tf-Mcp-Secretヘッダーとして送信される共有シークレット。ホスト型MCPデプロイからのリクエストを識別するために使用されます。TLS経由でのみ使用する必要があります。""(空)
TFE_SKIP_TLS_VERIFYHCP TerraformまたはTerraform EnterpriseのTLS検証をスキップfalse
LOG_LEVELログレベル: tracedebuginfowarnerrorfatalpanic--log-levelフラグを上書き)info
LOG_FORMATログ形式: textまたはjson--log-formatフラグを上書き)text
TRANSPORT_MODEHTTPトランスポートを有効にするにはstreamable-httpに設定(レガシーhttp値もサポート)stdio
TRANSPORT_HOSTHTTPサーバーをバインドするホスト127.0.0.1
TRANSPORT_PORTHTTPサーバーポート8080
MCP_ENDPOINTHTTPサーバーエンドポイントパス/mcp
MCP_REDIRECT_ROOT_URL/へのリクエストをリダイレクトするURL""
MCP_KEEP_ALIVESSE接続のキープアライブ間隔(例: 30s、1m)。無効にする場合は00
MCP_SESSION_MODEセッションモード: statefulまたはstatelessstateful
MCP_ALLOWED_ORIGINSCORS用の許可されたオリジンのカンマ区切りリスト""(空)
MCP_CORS_MODECORSモード: strictdevelopment、またはdisabledstrict
MCP_TLS_CERT_FILETLS証明書ファイルへのパス。非localhostデプロイに必要(例: /path/to/cert.pem""(空)
MCP_TLS_KEY_FILETLSキーファイルへのパス。非localhostデプロイに必要(例: /path/to/key.pem""(空)
MCP_RATE_LIMIT_GLOBALグローバルレート制限(形式: rps:burst10:20
MCP_RATE_LIMIT_SESSIONセッションごとのレート制限(形式: rps:burst5:10
MCP_ORGANIZATION_ALLOWLISTHTTPサーバーへのアクセスを許可されたHCP Terraform組織名のCSVリスト""(空)
MCP_FORWARD_CLIENT_IPX-Forwarded-Forを介してクライアントIPをHCP Terraform / TFEに転送します。有効にするにはtrueに設定false
MCP_REMOTE_IP_METHOD転送が有効な場合のクライアントIPの取得方法: RemoteAddr(直接接続のみ)、X-Real-IP、またはX-Forwarded-ForRemoteAddr
MCP_XFF_TRUSTED_HOPSX-Forwarded-Forチェーンの右から数えた信頼できるプロキシホップ数。MCP_REMOTE_IP_METHOD=X-Forwarded-Forの場合のみ使用0
ENABLE_TF_OPERATIONS明示的な承認が必要なツールを有効にするfalse
OTEL_METRICS_ENABLEDotelを使用したツールおよびサーバーメトリクスを有効にするfalse
OTEL_METRICS_SERVICE_VERSIONメトリクスを送信するterraform-mcp-serverのバージョン。メトリクス属性の設定に使用され、異なるデプロイ間でのメトリクス追跡にも役立ちますlatest
OTEL_METRICS_SERVICE_NAMEメトリクスのソースを識別します(例: "terraform-mcp-server")terraform-mcp-server
OTEL_METRICS_EXPORT_INTERVALメトリクスのフラッシュ頻度を制御します2
OTEL_METRICS_ENDPOINTOTelコレクターまたはバックエンドのURLlocalhost:4318
INSTANA_ENABLEDstreamable-httpサーバーのInstana計装(メトリクスおよびHTTPリクエストトレーシング)を有効にします。サーバーから到達可能なInstanaエージェントが必要です。false
INSTANA_SERVICE_NAMEInstana計装が有効な場合、MCPサーバーに使用するサービス名terraform-mcp-server
# Stdio mode
terraform-mcp-server stdio [--log-file /path/to/log] [--log-level info] [--log-format text] [--toolsets <toolsets>] [--tools <tools>]

# StreamableHTTP mode
terraform-mcp-server streamable-http [--transport-port 8080] [--transport-host 127.0.0.1] [--mcp-endpoint /mcp] [--organization-allowlist <orgs-csv>] [--log-file /path/to/log] [--log-level info] [--log-format text] [--toolsets <toolsets>] [--tools <tools>]

手順

MCPサーバーのデフォルトの手順はcmd/terraform-mcp-server/instructions.mdにあります。これらが組織のTerraformプラクティスに適していない場合、またはMCPサーバーが不正確な応答を生成している場合は、独自の手順に置き換えてコンテナまたはバイナリを再ビルドしてください。そのような手順の例はinstructions/example-mcp-instructions.mdにあります。

AGENTS.mdは基本的にコーディングエージェント向けのREADMEとして機能します。AIコーディングエージェントがプロジェクトで作業するためのコンテキストと手順を提供する、専用の予測可能な場所です。1つのAGENTS.mdファイルがさまざまなコーディングエージェントで動作します。そのような手順の例はinstructions/example-AGENTS.mdにあり、使用するにはAGENTS.mdという名前のファイルをTerraform構成が置かれているディレクトリにコミットします。

インストール

Visual Studio Codeでの使用

VS Codeのユーザー設定(JSON)ファイルに次のJSONブロックを追加します。これを行うには、Ctrl + Shift + Pを押してPreferences: Open User Settings (JSON)と入力します。

VS CodeのエージェントモードドキュメントでのMCPサーバーツールの使用について詳しくは、こちらをご覧ください。

バージョン0.3.0以上バージョン0.2.3以下
{
  "mcp": {
    "servers": {
      "terraform": {
        "command": "docker",
        "args": [
          "run",
          "-i",
          "--rm",
          "-e", "TFE_TOKEN=${input:tfe_token}",
          "-e", "TFE_ADDRESS=${input:tfe_address}",
          "hashicorp/terraform-mcp-server:1.3.0"
        ]
      }
    },
    "inputs": [
      {
        "type": "promptString",
        "id": "tfe_token",
        "description": "Terraform API Token",
        "password": true
      },
      {
        "type": "promptString",
        "id": "tfe_address",
        "description": "Terraform Address",
        "password": false
      }
    ]
  }
}
{
  "mcp": {
    "servers": {
      "terraform": {
        "command": "docker",
        "args": [
          "run",
          "-i",
          "--rm",
          "hashicorp/terraform-mcp-server:0.2.3"
        ]
      }
    }
  }
}

オプションで、ワークスペース内の.vscode/mcp.jsonというファイルに同様の例(つまり、mcpキーなし)を追加できます。これにより、設定を他のユーザーと共有できます。

バージョン0.3.0以上バージョン0.2.3以下
{
  "servers": {
    "terraform": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e", "TFE_TOKEN=${input:tfe_token}",
        "-e", "TFE_ADDRESS=${input:tfe_address}",
        "hashicorp/terraform-mcp-server:1.3.0"
      ]
    }
  },
  "inputs": [
    {
      "type": "promptString",
      "id": "tfe_token",
      "description": "Terraform API Token",
      "password": true
    },
    {
      "type": "promptString",
      "id": "tfe_address",
      "description": "Terraform Address",
      "password": false
    }
  ]
}
{
  "servers": {
    "terraform": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "hashicorp/terraform-mcp-server:0.2.3"
      ]
    }
  }
}

Install in VS Code (docker) Install in VS Code Insiders (docker)

Cursorでの使用

これをCursor設定(~/.cursor/mcp.json)または設定 → Cursor設定 → MCPに追加します:

バージョン0.3.0以上バージョン0.2.3以下
{
  "mcpServers": {
    "terraform": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e", "TFE_ADDRESS=<<PASTE_TFE_ADDRESS_HERE>>",
        "-e", "TFE_TOKEN=<<PASTE_TFE_TOKEN_HERE>>",
        "hashicorp/terraform-mcp-server:1.3.0"
      ]
    }
  }
}
{
  "servers": {
    "terraform": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "hashicorp/terraform-mcp-server:0.2.3"
      ]
    }
  }
}
Add terraform MCP server to Cursor

Claude Desktop / Amazon Q Developer / Kiro CLI での使用

Claude Desktop での MCP サーバーツールの使用については、ユーザードキュメント を参照してください。Amazon Q Developer および Kiro CLI での MCP サーバーの使用についても詳しく説明しています。

バージョン 0.3.0 以降バージョン 0.2.3 以下
{
  "mcpServers": {
    "terraform": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e", "TFE_ADDRESS=<<PASTE_TFE_ADDRESS_HERE>>",
        "-e", "TFE_TOKEN=<<PASTE_TFE_TOKEN_HERE>>",
        "hashicorp/terraform-mcp-server:1.3.0"
      ]
    }
  }
}
{
  "mcpServers": {
    "terraform": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "hashicorp/terraform-mcp-server:0.2.3"
      ]
    }
  }
}

Claude Code での使用

Claude Code での MCP サーバーツールの使用と追加については、ユーザードキュメント を参照してください。

  • ローカル (stdio) トランスポート
claude mcp add terraform -s user -t stdio -- docker run -i --rm hashicorp/terraform-mcp-server
  • リモート (streamable-http) トランスポート
# Run server (example)
docker run -p 8080:8080 --rm -e TRANSPORT_MODE=streamable-http -e TRANSPORT_HOST=0.0.0.0 hashicorp/terraform-mcp-server

# Add to Claude Code
claude mcp add --transport http terraform http://localhost:8080/mcp

Codex CLI での使用

Codex CLI での MCP サーバーツールの使用と追加については、ユーザードキュメント を参照してください。

注: 認証済みの HCP Terraform または Terraform Enterprise ツールを使用するには、Docker コマンドに TFE_ADDRESSTFE_TOKEN を追加してください。

  • ローカル (stdio) トランスポート
codex mcp add terraform -- docker run -i --rm hashicorp/terraform-mcp-server
  • リモート (streamable-http) トランスポート
# Run server (example)
docker run --rm -p 127.0.0.1:8080:8080 -e TRANSPORT_MODE=streamable-http -e TRANSPORT_HOST=0.0.0.0 hashicorp/terraform-mcp-server

# Add to Codex
codex mcp add terraform --url http://localhost:8080/mcp

Gemini 拡張機能での使用

セキュリティ上の理由から、認証情報をハードコーディングすることは避け、HCP Terraform または Terraform Enterprise の認証情報を保存するために ~/.gemini/.env を作成または更新してください(~ はホームディレクトリまたはプロジェクトディレクトリです)。

# ~/.gemini/.env
TFE_ADDRESS=your_tfe_address_here
TFE_TOKEN=your_tfe_token_here

拡張機能をインストールして Gemini を実行します。

gemini extensions install https://github.com/hashicorp/terraform-mcp-server
gemini

Bob IDE / Shell での使用

Bob IDE または Shell での MCP サーバーツールの使用と追加については、Bob での MCP の使用 を参照してください。

バージョン 0.3.0 以降バージョン 0.2.3 以下
{
  "mcpServers": {
    "terraform": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e", "TFE_ADDRESS=<<PASTE_TFE_ADDRESS_HERE>>",
        "-e", "TFE_TOKEN=<<PASTE_TFE_TOKEN_HERE>>",
        "hashicorp/terraform-mcp-server:1.3.0"
      ],
      "disabled": false
    }
  }
}
{
  "mcpServers": {
    "terraform": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "hashicorp/terraform-mcp-server:0.2.3"
      ],
      "disabled": false
    }
  }
}

ソースからのインストール

最新のリリースバージョンを使用する場合:

go install github.com/hashicorp/terraform-mcp-server/cmd/terraform-mcp-server@latest

main ブランチを使用する場合:

go install github.com/hashicorp/terraform-mcp-server/cmd/terraform-mcp-server@main
バージョン 0.3.0 以降バージョン 0.2.3 以下
{
  "mcp": {
    "servers": {
      "terraform": {
        "type": "stdio",
        "command": "/path/to/terraform-mcp-server",
        "env": {
          "TFE_TOKEN": "<<TFE_TOKEN_HERE>>"
        },
      }
    }
  }
}
{
  "mcp": {
    "servers": {
      "terraform": {
        "type": "stdio",
        "command": "/path/to/terraform-mcp-server"
      }
    }
  }
}

Docker イメージのローカルビルド

サーバーを使用する前に、Docker イメージをローカルでビルドする必要があります:

  1. リポジトリをクローンします:
git clone https://github.com/hashicorp/terraform-mcp-server.git
cd terraform-mcp-server
  1. Docker イメージをビルドします:
make docker-build
  1. これにより、以下の設定で使用できるローカル Docker イメージが作成されます。
# Run in stdio mode
docker run -i --rm terraform-mcp-server:dev

# Run in streamable-http mode
docker run -p 8080:8080 --rm -e TRANSPORT_MODE=streamable-http -e TRANSPORT_HOST=0.0.0.0 terraform-mcp-server:dev

# Filter tools (optional)
docker run -i --rm terraform-mcp-server:dev --toolsets=registry,terraform
docker run -i --rm terraform-mcp-server:dev --tools=search_providers,get_provider_details

注: Docker で実行する場合、コンテナ外部からの接続を許可するために TRANSPORT_HOST=0.0.0.0 を設定する必要があります。

  1. (任意)http モードで接続をテストします。
# Test the connection
curl http://localhost:8080/health
  1. AI アシスタントで次のように使用できます:
{
  "mcpServers": {
    "terraform": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "terraform-mcp-server:dev"
      ]
    }
  }
}

利用可能なツール

利用可能なツールはこちらをご覧ください :link:

利用可能なリソース

利用可能なリソースはこちらをご覧ください :link:

利用可能なメトリクス

2 種類のメトリクスが収集されます。 まず、HTTP mux を otelhttp.NewHandler(...) でラップすることで、標準の HTTP サーバーメトリクスが追加されます。これにより、以下が出力されます:

  1. http.server.request.body.size
  2. http.server.response.body.size
  3. http.server.request.duration

次に、MCP サーバーは MCP フック(BeforeCallTool / AfterCallTool)を使用して、ツール実行時のカスタムツールメトリクスを記録します。これにより、以下が出力されます:

  1. mcp_tool_calls_total
  2. mcp_tool_errors_total
  3. mcp_tool_duration_seconds

ツールフィルタリング

--toolsets(グループ)または --tools(個別)を使用して、利用可能なツールを制御します:

# Enable tool groups (default: registry)
terraform-mcp-server --toolsets=registry,terraform

# Enable specific tools only
terraform-mcp-server --tools=search_providers,get_provider_details,list_workspaces

利用可能なツールセット: registryregistry-privateterraformalldefault。個別のツール名については pkg/toolsets/mapping.go を参照してください。両方のフラグを同時に使用することはできません。

トランスポートサポート

Terraform MCP Server は複数のトランスポートプロトコルをサポートしています:

1. Stdio トランスポート(デフォルト)

JSON-RPC メッセージを使用した標準入出力通信。ローカル開発や MCP クライアントとの直接統合に最適です。

2. StreamableHTTP トランスポート

直接 HTTP リクエストと Server-Sent Events (SSE) ストリームの両方をサポートする最新の HTTP ベースのトランスポート。リモート/分散セットアップに推奨されるトランスポートです。

特徴:

  • エンドポイント: http://{hostname}:8080/mcp
  • ヘルスチェック: http://{hostname}:8080/health
  • 環境設定: 有効にするには TRANSPORT_MODE=http または TRANSPORT_PORT=8080 を設定します
  • 組織の許可リスト: 許可された HCP Terraform 組織名の CSV リストに MCP_ORGANIZATION_ALLOWLIST または --organization-allowlist を設定します

セッションモード

Terraform MCP Server は、StreamableHTTP トランスポート使用時に 2 つのセッションモードをサポートしています:

  • ステートフルモード(デフォルト): リクエスト間でセッション状態を維持し、コンテキストを考慮した操作を可能にします。
  • ステートレスモード: 各リクエストはセッション状態を維持せずに独立して処理されます。高可用性デプロイメントやロードバランサーを使用する場合に役立ちます。

ステートレスモードを有効にするには、環境変数を設定します:

export MCP_SESSION_MODE=stateless

集中型デプロイメントのためのトークンパススルー

複数ユーザー向けに MCP サーバーを集中管理(StreamableHTTP モード)で実行する場合、各ユーザーは RBAC 適用のために HTTP ヘッダーを介して自分の Terraform トークンを渡すことができます。これにより、単一のサーバーインスタンスで異なる権限を持つ複数のユーザーにサービスを提供できます。

MCP_ORGANIZATION_ALLOWLIST または --organization-allowlist が設定されている場合、許可リストは HCP Terraform 組織名の CSV リストである必要があります。サーバーは Authorization: Bearer <token> を要求し、そのトークンが CSV 許可リスト内の少なくとも 1 つの組織にアクセスできない限り、リクエストを拒否します。リクエストに TFE_TOKEN ヘッダーも含まれている場合、ベアラートークンが優先され、許可リストによって検証されたトークンが Terraform API リクエストに使用されるトークンであることが保証されます。組織名の一致は大文字と小文字を区別しません。設定された CSV 値がゼロ個の組織名に解析される場合、サーバーは不正な組織許可リストエラーで終了します。

クライアント IP 転送

プロキシまたはロードバランサーの背後で MCP サーバーを集中管理して実行する場合、X-Forwarded-For ヘッダーを介して発信元クライアントの IP を HCP Terraform / TFE に転送できます。これはデフォルトでオフになっており、MCP_FORWARD_CLIENT_IP=true で有効にする必要があります。

有効にすると、サーバーは MCP_REMOTE_IP_METHOD に従ってクライアント IP を取得します:

メソッド動作
RemoteAddr(デフォルト)直接 TCP 接続のアドレスのみを使用します。X-Forwarded-ForX-Real-IP は無視されます。
X-Real-IP有効な IP の場合は X-Real-IP ヘッダーを使用し、それ以外の場合は RemoteAddr にフォールバックします。
X-Forwarded-ForX-Forwarded-For チェーンを使用し、右から MCP_XFF_TRUSTED_HOPS 番目のエントリを選択します。値が欠落しているか無効な場合は RemoteAddr にフォールバックします。

信頼モデル

X-Forwarded-ForX-Real-IP はクライアントと中間プロキシによって設定されるため、サーバーの前にある信頼できるプロキシがそれらを上書きしない限り、スプーフィングされる可能性があります。このため、デフォルトは RemoteAddr であり、サーバーが直接接続されているピアのみを信頼します。サーバーがこれらのヘッダーを設定する制御下にあるプロキシの背後にある場合にのみ、X-Real-IP または X-Forwarded-For を有効にしてください。

信頼できるホップ

X-Forwarded-For を使用する場合、MCP_XFF_TRUSTED_HOPS はサーバーとインターネットの間で運用するプロキシの数です。各プロキシはリクエストを受け取ったアドレスを追加し、右端のエントリはサーバーに最も近いプロキシによって設定されるため、ホップはチェーンの右から数えられます。サーバーはその数の信頼できるエントリをスキップし、左側の次のエントリを取得します。

たとえば、MCP_XFF_TRUSTED_HOPS=1 とヘッダー 200.1.2.3, 10.1.1.10 の場合、サーバーは 200.1.2.3 を選択します。MCP_XFF_TRUSTED_HOPS=2108.0.0.1, 200.1.2.3, 10.1.1.10, 192.168.0.1 の場合、200.1.2.3 を選択します。ホップ数がエントリ数より多い場合、または選択されたエントリが有効な IP でない場合、サーバーは RemoteAddr にフォールバックします。

ホップ数を低く設定しすぎるとクライアント指定の値が信頼され、高く設定しすぎると自社インフラストラクチャのさらに奥のアドレスが信頼されます。運用するプロキシの正確な数に設定してください。

制限事項

  • サーバーはリクエストの最初の X-Forwarded-For ヘッダーのみを読み取ります。リクエストが複数の X-Forwarded-For ヘッダーを運ぶことは有効ですが、Go の標準ライブラリは最初のもののみを返し、サーバーはそれらを結合しません。プロキシチェーンが複数のヘッダーを出力する場合は、単一の結合された X-Forwarded-For ヘッダーを出力するように設定してください。
  • IPv4 と IPv6 の両方のアドレスがサポートされています。有効な IP ではない値は拒否され、サーバーは RemoteAddr にフォールバックします。

以前のバージョンからの移行

以前のバージョンでは、ヘッダーが存在する場合、設定なしで左端の X-Forwarded-For 値を使用していました。左端の値は最もスプーフィングされやすいため、これは安全ではありませんでした。デフォルトは現在 RemoteAddr です。プロキシの背後でサーバーを実行し、X-Forwarded-For が HCP Terraform / TFE に転送されることに依存している場合は、MCP_REMOTE_IP_METHOD=X-Forwarded-ForMCP_XFF_TRUSTED_HOPS を運用するプロキシの数に設定してください。

サポートされているヘッダー

ヘッダー説明
TFE_TOKENTerraform API トークン
Authorization: Bearer <token>標準の Bearer 認証を使用する代替方法
TFE_SKIP_TLS_VERIFYリクエストの TLS 検証をスキップします

例: curl

# Using TFE_TOKEN header
curl -X POST http://localhost:8080/mcp \
  -H "Content-Type: application/json" \
  -H "TFE_TOKEN: your-user-token" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize",...}'

# Using Authorization Bearer header
curl -X POST http://localhost:8080/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-user-token" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize",...}'

セキュリティに関する考慮事項

  • TFE_ADDRESS はクライアントが設定できません。 streamable-http モードでは、Terraform アドレスはサーバー側の TFE_ADDRESS 環境変数(またはデフォルト)からのみ取得されます。HTTP ヘッダーまたはクエリパラメータを介して TFE_ADDRESS を設定しようとするリクエストは、403 で拒否されます。これにより、クライアントがリクエストと Authorization トークンを悪意のあるサーバーにリダイレクトすることを防ぎます。
  • ホステッドデプロイメントの識別: TF_MCP_SHARED_SECRET を設定すると、その値がすべての HCP Terraform / TFE リクエストで X-Tf-Mcp-Secret ヘッダーとして送信され、バックエンドが既知のホステッドデプロイメントからのリクエストを識別できるようになります(例: IP 許可リストの適用)。これはヘッダーで送信される静的シークレットであるため、TLS 経由でのみ使用し、値を認証情報として扱ってください。
  • クエリパラメータでトークンを渡さないでください - サーバーはそのようなリクエストを 400 エラーで拒否します。
  • 集中管理でデプロイする場合は、常に TLS(MCP_TLS_CERT_FILE/MCP_TLS_KEY_FILE)を使用して、転送中のトークンを保護してください。
  • MCP_ALLOWED_ORIGINS を設定して、接続できるクライアントを制限してください。

集中型デプロイメントの例

# Start server centrally (no token set server-side)
docker run -p 8080:8080 \
  -e TRANSPORT_MODE=streamable-http \
  -e TRANSPORT_HOST=0.0.0.0 \
  -e TFE_ADDRESS=https://tfe.company.com \
  -e MCP_TLS_CERT_FILE=/certs/server.pem \
  -e MCP_TLS_KEY_FILE=/certs/server-key.pem \
  -e MCP_ALLOWED_ORIGINS=https://ide.company.com \
  -e MCP_ORGANIZATION_ALLOWLIST=team-alpha,team-beta \
  -v /path/to/certs:/certs \
  hashicorp/terraform-mcp-server:1.3.0

ユーザーはその後、ヘッダーを介して渡された個々のトークンで接続し、ユーザーごとの RBAC 適用が可能になります。

トラブルシューティング

コーポレートプロキシ / TLS 検査(Zscaler など)

コーポレートプロキシが TLS 検査(Zscaler Internet Access など)を実行している場合、証明書エラーが発生する可能性があります:

tls: failed to verify certificate: x509: certificate signed by unknown authority

解決策: コーポレート CA 証明書をコンテナにマウントします:

docker run -i --rm \
  -v /path/to/corporate-ca.pem:/etc/ssl/certs/corporate-ca.pem \
  -e SSL_CERT_FILE=/etc/ssl/certs/corporate-ca.pem \
  hashicorp/terraform-mcp-server:1.3.0

MCP クライアント設定の場合:

{
  "mcpServers": {
    "terraform": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-v", "/path/to/corporate-ca.pem:/etc/ssl/certs/corporate-ca.pem",
        "-e", "SSL_CERT_FILE=/etc/ssl/certs/corporate-ca.pem",
        "-e", "TFE_TOKEN=<>",
        "hashicorp/terraform-mcp-server:1.3.0"
      ]
    }
  }
}

代替: バイナリを直接実行する

環境で Docker が許可されていない場合は、サーバーバイナリを直接インストールして実行できます。これにより、システムの証明書ストアが使用されます:

go install github.com/hashicorp/terraform-mcp-server/cmd/terraform-mcp-server@latest
terraform-mcp-server stdio

開発

前提条件

  • Go(特定のバージョンについては go.mod ファイルを確認してください)
  • Docker(任意、コンテナビルド用)

利用可能な Make コマンド

コマンド説明
make buildバイナリをビルドする
make testすべてのテストを実行する
make test-e2eエンドツーエンドテストを実行する
make docker-buildDockerイメージをビルドする
make run-httpHTTPサーバーをローカルで実行する
make docker-run-httpHTTPサーバーをDockerで実行する
make test-httpHTTPヘルスエンドポイントをテストする
make cleanビルド成果物を削除する
make help利用可能なすべてのコマンドを表示する

コントリビューション

  1. リポジトリをフォークする
  2. フィーチャーブランチを作成する
  3. 変更を加える
  4. テストを実行する
  5. プルリクエストを送信する

ライセンス

このプロジェクトはMPL-2.0オープンソースライセンスの条件に基づいてライセンスされています。完全な条件については、LICENSEファイルを参照してください。

セキュリティ

セキュリティの問題については、security@hashicorp.comまでご連絡いただくか、セキュリティポリシーに従ってください。

サポート

バグ報告や機能リクエストについては、GitHubでイシューを開いてください。

一般的な質問や議論については、GitHubディスカッションを開いてください。