HashiCorp Terraform MCP 官方 Codex 走 docker stdio

官方 Codex:mcp add terraform -- docker run -i --rm hashicorp/terraform-mcp-server。查公共 registry 不用 token。HCP / TFE 才 env_vars 转发 TFE_TOKEN / TFE_ADDRESS。不要 mcp login,也不要把密钥写进 env 表。

HashiCorp 给 Codex 有专节。这是本地 stdio,靠本机 Docker 起 hashicorp/terraform-mcp-server,不是远程托管 MCP。查公共 Terraform Registry 不用 token。官方 Codex 主路径:

codex mcp add terraform -- docker run -i --rm hashicorp/terraform-mcp-server
[mcp_servers.terraform]
command = "docker"
args = ["run", "-i", "--rm", "hashicorp/terraform-mcp-server"]
enabled = true

用户层表名官方就是 terraform。这是 stdio,不要 codex mcp login。不要抄 Claude / Cursor / VS Code 的 JSON mcpServers。不要抄 npx mcp-remote。不要发明 codex plugin add terraform@openai-curated。不要抄 Gemini 的 gemini extensions install

要接 HCP Terraform / Terraform Enterprise 时,先在启动 Codex 的进程里 export TFE_TOKENTFE_ADDRESS(地址带 https://,HCP 默认是 https://app.terraform.io)。Docker 用 -e TFE_TOKEN / -e TFE_ADDRESS 把名字传进容器,Codex 再用 env_vars 转发。不要把 token 写进 env 表,也不要 codex mcp add --env TFE_TOKEN=...

[mcp_servers.terraform]
command = "docker"
args = ["run", "-i", "--rm", "-e", "TFE_TOKEN", "-e", "TFE_ADDRESS", "hashicorp/terraform-mcp-server"]
env_vars = ["TFE_TOKEN", "TFE_ADDRESS"]
enabled = true

本机有二进制才改走 codex mcp add terraform -- terraform-mcp-server stdiostdio 是子命令。不在 PATH 时写绝对路径。

另一条是本机 HTTP:先 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,再 codex mcp add terraform --url http://localhost:8080/mcp。URL /mcp 后缀。不要和 stdio 那张表配成一台。不要 mcp login。不要把 --transport http 抄进 mcp add

ENABLE_TF_OPERATIONS 默认关着;没打算让模型改 workspace / run 就不要打开。不要 required = true 挂全局。不要一上来 --yolo。网页 Cloud 不读 ~/.codex/config.toml,也跑不了你这台 Docker。docker 不在 PATH 时改绝对路径。冷启动拉镜像慢就加 startup_timeout_sec。改完用 codex mcp get terraform 看 command 是 docker。

不要做这些:

  • 不要抄 Claude / Cursor / VS Code 的 JSON mcpServers
  • 不要发明 codex plugin add terraform@openai-curated
  • 不要 mcp login,也不要把 TFE_TOKEN 写进 env 表。
  • 不要把 stdio 和 http://localhost:8080/mcp 配成一张表。

来源