An MCP server for managing infrastructure as code with Terraform
Terraform Assistant MCP has basic tool definitions but significant quality gaps. All 8 tools have names starting with action verbs (terraform_*) and descriptions present. However, descriptions are minimal (10-30 chars), parameter descriptions are generic or missing, and output schemas are completely undocumented. Error handling returns raw stderr without guidance. No input validation, no enums for constrained values, no pagination support. Tools like terraform_apply and terraform_destroy are high-risk (IRREVERSIBLE/DESTRUCTIVE) but lack confirmation patterns or dry-run support. Parameter schemas exist but lack detail (e.g., 'backend_config' and 'var' are bare objects with no field documentation). This server would require substantial rework before production use.
Apply the changes required to reach the desired state of the configuration.
Destroy the infrastructure managed by Terraform.
Initialize a Terraform working directory.
Generate and show an execution plan for Terraform.
Show the current state or a saved plan.
Validate the syntax and internal consistency of Terraform files.
List Terraform workspaces.
Destructive operations (terraform_apply, terraform_destroy) lack confirmation or dry-run patterns. No mechanism to prevent accidental infrastructure destruction.
Output schemas completely undocumented. All tools return raw subprocess stdout/stderr as unstructured strings. LLMs cannot parse results or chain tool calls.
Parameter descriptions are trivial (10-30 chars). 'backend_config' and 'var' are bare objects with no field documentation. LLMs cannot infer valid structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | 2026-07-28+ | v2 |
Select a Terraform workspace.
Error handling returns raw stderr without recovery guidance. 'Error: {e.stderr}' gives LLM no actionable next step. No error classification (retryable vs fatal).
No input validation. 'working_dir' parameter accepts any string; no path traversal checks. Subprocess calls are vulnerable to command injection if var values are not sanitized.