terraform-cwd-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OAM_BIN | No | Path to the oam binary to use. Otherwise the launcher checks `OAM_INSTALL_DIR`, the installed locations (`~/.oam/bin`, and `%LOCALAPPDATA%\oam\bin` on Windows) and `PATH`, and takes the newest. Default: (unset). | |
| TERRAFORM_CWD_MCP_DIR | No | Root module used when a tool call passes no `dir`. Default: the server's working directory. | |
| TERRAFORM_CWD_MCP_CACHE | No | Where schema dumps are cached (`<key>.json`). Safe to delete at any time. Default: `~/.cache/terraform-cwd-mcp`. | |
| TERRAFORM_CWD_MCP_BINARY | No | Binary to run, e.g. a full path, or `tofu` for OpenTofu (same `providers schema -json` output). Default: `terraform`. | |
| TERRAFORM_CWD_MCP_RUNTIME | No | `auto`: the newest oam at 0.19.0 or newer, else Node. `oam`: oam or exit with an error. `node`: always Node -- the escape hatch when a problem only shows up under oam. Default: `auto`. | |
| TERRAFORM_CWD_MCP_TIMEOUT_MS | No | Kill any terraform command (schema dump, state read, target init, validate) after this long. Default: `300000`. | |
| TERRAFORM_CWD_MCP_PLUGIN_CACHE | No | Where `tf_upgrade_impact` keeps downloaded provider packages. Default: `TF_PLUGIN_CACHE_DIR`, else `<cache>/plugins`. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| tf_list_providersA | List providers and their PINNED versions for a Terraform root module (default: cwd). Call this first so code targets the versions actually locked in .terraform.lock.hcl, not the latest release. Lists only the providers locked in THIS directory; it does not search the registry. For registry search, provider docs or the latest version, use the official terraform MCP server (search_provider_docs / get_latest_provider_version). |
| tf_search_typesA | Find resource / data source / ephemeral resource type names containing |
| tf_get_schemaA | Exact arguments and nested blocks for one type at the PINNED provider version. Use BEFORE writing or editing any resource/data/ephemeral block; only arguments listed here exist. 'computed (read-only)' attributes cannot be set. kind: resource | data | ephemeral. |
| tf_check_argumentsA | Validate argument / nested-block paths against the PINNED schema before writing them, e.g. ["bucket", "region", "versioning.enabled"]. Flags unknown, read-only and deprecated paths. |
| tf_summarize_planA | Summarize a saved Terraform plan: deletes and replaces first (with the attribute that forces each replace), updates with changed paths, creates, imports, moves, forgets, drift and output changes, plus a destroy warning that names renames needing a moved block. Pass plan_file (binary from |
| tf_module_interfaceA | Variables (exact type expression, required/optional, default, sensitive/nullable/ephemeral, validation count), outputs and module calls of a module in THIS working directory: the root, a local module directory, or an installed module by address (module.network, resolved through .terraform/modules/modules.json, so downloaded registry/git modules work). Module calls are checked against what is installed. For public registry modules you have not installed, use the official terraform MCP server. |
| tf_state_addressesA | List resource instance addresses in the current Terraform state (terraform state list), optionally filtered. Read-only: never locks, never refreshes. With a remote backend this reads S3/GCS/HCP using the server's credentials; a non-default workspace that does not exist is refused (reading it would create it). |
| tf_show_resourceA | Show one resource instance's attribute values from the current Terraform state (terraform show -json). Read-only: never locks, never refreshes. Sensitive values are redacted: Terraform's own markers, plus values equal to a marked one, secret-like names and secret-shaped strings; a footer says what was hidden and why. |
| tf_upgrade_impactA | What breaks if a pinned provider is upgraded (or downgraded) to an exact version: compares the pinned schema with the target's for the arguments, nested blocks and attribute reads this configuration uses (root and installed modules), checks version constraints, and confirms with terraform validate on a temp copy. Downloads the target provider from the registry into a cache (temp dirs only; never touches dir). For the latest version number or upgrade guides, use the official terraform MCP server. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 9 tools
Each tool targets a distinct action on a clearly bounded resource: listing state addresses vs. showing a resource's attributes, listing pinned providers vs. searching type names vs. fetching a schema vs. validating argument paths, plus plan summary, module interface, and upgrade impact. Descriptions make the boundaries explicit, so an agent should not misselect.
All names share the tf_ prefix and snake_case, giving a predictable namespace. Most follow verb_noun (tf_list_providers, tf_get_schema), but a few use noun-oriented phrasing (tf_state_addresses, tf_module_interface, tf_upgrade_impact), a minor deviation rather than a real inconsistency.
Nine tools is well-scoped for a read-only, cwd-focused Terraform analysis server. Every tool has a clear niche, with no redundant wrappers or filler.
Coverage is strong for a read-only analysis surface: state inspection, pinned provider/type schema, argument validation, plan summarization, module interfaces, and upgrade impact. Minor gaps exist (e.g. no standalone workspace listing or outputs-only view), but the design intentionally defers mutation/execution and registry lookups to the official terraform MCP server.