Render MCP Server
OFFICIAL SERVERCreate, deploy and troubleshoot Render services, Postgres and Key Value from an AI client
Terraform Registry lookups and workspace, run and variable tools for HCP Terraform and Terraform Enterprise
Official · HashiCorp Go Remote (hosted) · Streamable HTTPLocal · stdio DevOps and monitoringCloud platformsDeveloper tools
86 popularity score ★ 1.6k ⇣ 1.7M pulls
Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
{
"servers": {
"terraform": {
"type": "http",
"url": "https://mcp.terraform.io/mcp",
"headers": {
"Authorization": "Bearer ${input:hcp-terraform-token}"
}
}
},
"inputs": [
{
"type": "promptString",
"id": "hcp-terraform-token",
"description": "HCP Terraform API token",
"password": true
}
]
}{
"mcpServers": {
"terraform": {
"url": "https://mcp.terraform.io/mcp",
"headers": {
"Authorization": "Bearer <YOUR_HCP_TERRAFORM_TOKEN>"
}
}
}
}claude mcp add terraform -s user -t http \
--header "Authorization: Bearer <TFE_TOKEN>" \
https://mcp.terraform.io/mcp[mcp_servers.terraform]
url = "https://mcp.terraform.io/mcp"
http_headers = { "Authorization" = "Bearer <TFE_TOKEN>" }{
"mcpServers": {
"terraform": {
"url": "https://mcp.terraform.io/mcp",
"headers": {
"Authorization": "Bearer <YOUR_HCP_TERRAFORM_TOKEN>"
}
}
}
}{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"terraform": {
"type": "remote",
"url": "https://mcp.terraform.io/mcp",
"enabled": true,
"headers": {
"Authorization": "Bearer <YOUR_HCP_TERRAFORM_TOKEN>"
}
}
}
}{
"mcpServers": {
"terraform": {
"url": "https://mcp.terraform.io/mcp",
"headers": {
"Authorization": "Bearer <YOUR_HCP_TERRAFORM_TOKEN>"
}
}
}
}Opens the app, which asks before it adds the server.
claude mcp add terraform -- docker run -i --rm hashicorp/terraform-mcp-server:1.4.1{
"mcpServers": {
"terraform": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"hashicorp/terraform-mcp-server:1.4.1"
]
}
}
}{
"mcpServers": {
"terraform": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"hashicorp/terraform-mcp-server:1.4.1"
]
}
}
}{
"servers": {
"terraform": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"hashicorp/terraform-mcp-server:1.4.1"
]
}
}
}[mcp_servers.terraform]
command = "docker"
args = ["run", "-i", "--rm", "hashicorp/terraform-mcp-server:1.4.1"]gemini mcp add --scope user terraform docker -- run -i --rm hashicorp/terraform-mcp-server:1.4.1Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
go install github.com/hashicorp/terraform-mcp-server/cmd/terraform-mcp-server@v1.4.1claude mcp add terraform -- '<ABSOLUTE_PATH_TO_GOPATH>/bin/terraform-mcp-server' stdio{
"mcpServers": {
"terraform": {
"command": "<ABSOLUTE_PATH_TO_GOPATH>/bin/terraform-mcp-server",
"args": [
"stdio"
]
}
}
}{
"mcpServers": {
"terraform": {
"command": "<ABSOLUTE_PATH_TO_GOPATH>/bin/terraform-mcp-server",
"args": [
"stdio"
]
}
}
}{
"servers": {
"terraform": {
"type": "stdio",
"command": "<ABSOLUTE_PATH_TO_GOPATH>/bin/terraform-mcp-server",
"args": [
"stdio"
]
}
}
}[mcp_servers.terraform]
command = "<ABSOLUTE_PATH_TO_GOPATH>/bin/terraform-mcp-server"
args = ["stdio"]gemini mcp add --scope user terraform '<ABSOLUTE_PATH_TO_GOPATH>/bin/terraform-mcp-server' -- stdio| Set together: hcp-terraform | |
|---|---|
TFE_TOKEN secret |
Optional: HCP Terraform or Terraform Enterprise API token; without it only the public registry tools are available. |
TFE_ADDRESS |
Optional: Address of the HCP Terraform or Terraform Enterprise instance, with protocol. |
TFE_SKIP_TLS_VERIFY |
Optional: Skip TLS verification against HCP Terraform or Terraform Enterprise. |
ENABLE_TF_OPERATIONS |
Optional: Set to true to register the delete, force-unlock and run-action tools and allow auto-approve or destroy runs. |
LOG_LEVEL |
Optional: Logging level, from trace to panic. |
OTEL_METRICS_ENABLED |
Optional: Set to true to emit OpenTelemetry tool and HTTP metrics to your own collector in HTTP mode. |
| Set together: http | |
TRANSPORT_MODE |
Optional: Set to streamable-http to serve over HTTP instead of stdio. |
TRANSPORT_PORT |
Optional: HTTP port; setting it also switches the server to HTTP mode. |
TRANSPORT_HOST |
Optional: Address the HTTP server binds to; a non-localhost address needs MCP_TLS_CERT_FILE and MCP_TLS_KEY_FILE. |
MCP_ORGANIZATION_ALLOWLIST |
Optional: Comma-separated HCP Terraform organizations whose tokens may use an HTTP deployment. |
MCP_REQUIRE_TOKEN |
Optional: Set to true to reject HTTP requests without a valid Authorization bearer token. |
MCP_ALLOWED_ORIGINS |
Optional: Comma-separated origins allowed by CORS in HTTP mode. |
In a container, a setting goes in with -e NAME=value after docker run.
HashiCorp's own MCP server for Terraform does two separate jobs. The first is looking things up in the public Terraform Registry: searching provider documentation, modules and Sentinel/OPA policies, fetching the docs for a given resource or data source, and finding the newest version of a provider or module. Run locally, this part needs no account.
The second job is working on an HCP Terraform or Terraform Enterprise organization. With an API token it can list organizations and projects, create and update workspaces, set workspace variables and variable sets, tag workspaces, attach policy sets, manage teams, start runs, and read plan and apply logs, structured plan JSON, state versions and Stacks. It can also search an organization's private registry. The tools that delete projects, teams or workspaces, force-unlock a workspace or act on runs are not registered at all unless ENABLE_TF_OPERATIONS is true (pkg/tools/dynamic_tool.go), and create_run only offers auto-approve and destroy runs then.
Version 1.4.1 registers 61 tools (pkg/toolsets/registry.go). Tools are grouped into the toolsets registry, registry-private and terraform. The README says only registry is on by default, but in the 1.4.1 code the --toolsets flag defaults to all (pkg/cli/commands.go). The token-based tools are simply not registered until a session has a working HCP Terraform client. --tools narrows it to single tools. It also serves read-only resources such as the Terraform style guide. It runs over stdio for one user or as a Streamable HTTP service that several users share, each sending their own token.
HashiCorp also runs it for you at mcp.terraform.io, currently in beta. That copy talks to HCP Terraform only, so Terraform Enterprise users still need to run their own. It asks for a token even for plain registry lookups. You can't change its settings, and the five destructive tools are left out, which also means create_run can't do auto-approve or destroy runs there.
| To run it yourself | Docker |
|---|---|
| Runs on | macOS, Windows, Linux |
| HCP Terraform or Terraform Enterprise | Free tierOnly for the private registry and terraform toolsets; registry lookups need no account |
Docker for the published image, or a Go toolchain to build it with go install. Registry lookups need nothing else. The HCP Terraform and private registry tools need an API token in TFE_TOKEN, plus TFE_ADDRESS when the instance is not app.terraform.io.
The README says only the registry toolset is on by default, yet in the released code every toolset is enabled when --toolsets is not passed. The private registry and HCP Terraform tools still appear only once a valid token is set. Deleting projects, teams and workspaces, force-unlocking workspaces, acting on runs, and auto-approve or destroy runs are refused unless ENABLE_TF_OPERATIONS=true. In HTTP mode TFE_ADDRESS can only be set on the server, and tokens in query strings are rejected.
Suits anyone writing Terraform who wants provider and module details looked up from the registry, and teams on HCP Terraform or Terraform Enterprise who want an assistant to inspect workspaces and runs or set up workspaces and variables. HCP Terraform users who would rather not run Docker can point a client at the hosted beta endpoint with a token. Terraform Enterprise users, and anyone who needs the delete or run-action tools, have to run it themselves. Platform teams can self-host one shared HTTP instance with per-user tokens and an organization allowlist. To keep an assistant from changing your organization, pass --toolsets=registry or leave ENABLE_TF_OPERATIONS false.
38 only read, 17 change things, 5 can delete or overwrite.
search_provider_docsget_provider_detailsget_latest_provider_versionget_provider_capabilitiessearch_modulesget_module_detailsget_latest_module_versionsearch_policiesget_policy_detailssearch_private_modulesget_private_module_detailssearch_private_providersget_private_provider_detailswhoamiget_token_permissionslist_terraform_orgslist_terraform_projectscreate_project changesget_projectdelete_project deleteslist_teamsget_teamcreate_team changesadd_team_member changesgrant_team_access changesdelete_team deleteslist_workspacesget_workspace_detailscreate_workspace changescreate_no_code_workspace changesupdate_workspace changesdelete_workspace_safely deletesforce_unlock_workspace changeslist_runsget_run_detailsget_run_commentscreate_run changesaction_run deletesget_plan_detailsget_plan_logsget_plan_json_outputget_apply_detailsget_apply_logslist_workspace_variablescreate_workspace_variable changesupdate_workspace_variable changeslist_variable_setscreate_variable_set changescreate_variable_in_variable_set changesdelete_variable_in_variable_set deletesattach_variable_set_to_workspaces changesdetach_variable_set_from_workspaces changescreate_workspace_tags changesread_workspace_tagsattach_policy_set_to_workspaces changeslist_workspace_policy_setslist_stacksget_stack_detailslist_state_versionsget_state_version/terraform/style-guide/terraform/module-development/terraform/providers/{namespace}/name/{name}/version/{version}