{
  "slug": "terraform",
  "name": "Terraform",
  "author": "hashicorp (GitHub)",
  "category": "Observability and infra",
  "tier": "checkable",
  "kind": "stdio",
  "packageSpec": "oci:docker.io/hashicorp/terraform-mcp-server:1.4.1",
  "sourceUrl": "https://registry.modelcontextprotocol.io/v0/servers/io.github.hashicorp%2Fterraform-mcp-server/versions/latest",
  "repoUrl": "https://github.com/hashicorp/terraform-mcp-server",
  "enrichment": {},
  "current": {
    "verdict": "alive",
    "reason": "all_passed",
    "failedChecks": [],
    "untestedTools": 4,
    "checkedAt": "2026-10-29T06:45:51.677Z",
    "methodologyVersion": "1.0.0",
    "serverVersion": "1.4.1",
    "checks": [
      {
        "id": "L0.reachable",
        "detail": "http undefined",
        "status": "pass",
        "durationMs": 3709
      },
      {
        "id": "L0.tls",
        "status": "skipped"
      },
      {
        "id": "L0.initialize",
        "status": "pass",
        "evidence": {
          "raw": "{\"jsonrpc\":\"2.0\",\"id\":1,\"result\":{\"protocolVersion\":\"2025-11-25\",\"capabilities\":{\"resources\":{\"subscribe\":true,\"listChanged\":true},\"tools\":{\"listChanged\":true},\"elicitation\":{}},\"serverInfo\":{\"name\":\"terraform-mcp-server\",\"version\":\"1.4.1\"},\"instructions\":\"# Terraform MCP Server Tool Hints\\n\\nThe Terraform MCP server provides tools for generating better Terraform code through registry integration and automating workflows via HCP Terraform/Enterprise APIs.\\n\\n## Tool Usage Guidelines\\n\\n**BEFORE generating any Terraform code**: Query registries for latest provider/module versions and styling guidelines. When enterprise tools are enabled AND a Terraform token is provided, search private registries first, then fall back to public.\\n\\n**Provider Consistency**: All modules in a project must use compatible provider versions. Verify with get_provider_details before generating code.\\n\\n**Validation Flow**: Run terraform validate immediately after generation, then terraform plan only if validation passes. Use terraform fmt to format code as needed.\\n\\n**User Confirmation Required**: ALWAYS get explicit yes/no confirmation before: `create_run`, `apply_run`, `discard_run`, `cancel_run`.\\n\\n## Always Available Tools\\n\\n### Registry Tools (Always Available)\\n\\n- **Provider Discovery**: `get_latest_provider_version` (if unavailable in code) → `get_provider_capabilities` → `get_provider_details`\\n  - `get_provider_capabilities` shows what types of resources, data sources, functions, and guides are available\\n  \\n- **Module Discovery**: `get_latest_module_version` (if unavailable in code) → `search_modules` → `get_module_details`\\n\\n- **Policy Discovery**: `search_policies` → `get_policy_details`\\n\\n- Use these to ensure generated code uses current versions and follows best practices\\n\\n## HCP Terraform/TFE Tools (When enterprise tools are enabled AND a Terraform token is provided)\\n\\n### Private Registry Tools\\n- `search_private_providers` → `get_private_provider_details`\\n- `search_private_modules` → `get_private_module_details`\\n- Priority: Check private registries first when token present, public as fallback\\n\\n### Workspace Management\\n- **Discovery**: `search_workspaces` (empty query returns all) → `get_workspace_details`\\n- **Operations**: `create_workspace`, `update_workspace`, `delete_workspace_safely`, `force_unlock_workspace`\\n- `delete_workspace_safely` only works if workspace has no managed resources\\n\\n### Run Execution\\n- **Discovery**: `search_run` (empty query returns all) → `get_run_details` (supports json output)\\n- **Operations**: `create_run` → `apply_run` OR `discard_run` OR `cancel_run`\\n- **Monitoring**: `get_plan_details`/`get_plan_logs` for plans, `get_apply_details`/`get_apply_logs` for applies\\n- Always check run status before attempting operations\\n\\n### Variable Management\\n**Workspace Variables**:\\n- `search_workspace_variables` (empty query returns all)\\n- `create_workspace_variable`, `update_workspace_variable`, `delete_workspace_variable`\\n\\n**Variable Sets** (for sharing across workspaces/projects):\\n- `search_variable_sets` → `get_variable_set_details`\\n- `create_variable_set`, `update_variable_set`, `delete_variable_set`\\n- `create_variable_in_variable_set`, `update_variable_in_variable_set`, `delete_variable_from_variable_set`\\n- `attach/detach_variable_set_to_workspaces`, `attach/detach_variable_set_to_projects`\\n\\n## Workflow Patterns\\n\\n**Code Generation**:\\n1. `search_modules`/`search_provider_docs` for available resources\\n2. `get_latest_provider_version` if no version available in existing code\\n3. `get_module_details` for module requirements\\n4. Generate code with discovered constraints\\n\\n**Run Management**:\\n1. `search_workspaces` → select target\\n2. `create_run` → get_run_details to monitor\\n3. `get_plan_details/logs` to review changes\\n4. User confirmation → `apply_run` OR `discard_run`\\n\\n**Variable Configuration**:\\n1. `search_workspace_variables` to check existing\\n2. `create/update_workspac…[truncated]"
        },
        "durationMs": 3709
      },
      {
        "id": "L0.protocol_version",
        "detail": "server reported \"2025-11-25\"; published versions: 2024-11-05, 2025-03-26, 2025-06-18, 2025-11-25",
        "status": "pass"
      },
      {
        "id": "L0.capabilities",
        "detail": "resources, tools, elicitation",
        "status": "pass"
      },
      {
        "id": "L1.server_info",
        "detail": "terraform-mcp-server 1.4.1",
        "status": "pass"
      },
      {
        "id": "L1.tools_list",
        "detail": "9 tools",
        "status": "pass"
      },
      {
        "id": "L1.tool_schemas",
        "detail": "9 schemas valid",
        "status": "pass"
      },
      {
        "id": "L1.resources_list",
        "detail": "2 entries",
        "status": "pass"
      },
      {
        "id": "L1.prompts_list",
        "detail": "prompts capability not declared",
        "status": "skipped"
      },
      {
        "id": "L1.unknown_method",
        "status": "pass",
        "evidence": {
          "raw": "{\"jsonrpc\":\"2.0\",\"id\":4,\"error\":{\"code\":-32601,\"message\":\"Method knot/verified-probe-unknown-method not found\"}}"
        },
        "durationMs": 5
      },
      {
        "id": "L1.envelope",
        "detail": "4 replies valid",
        "status": "pass"
      },
      {
        "id": "L2.call_ok",
        "tool": "get_latest_module_version",
        "status": "pass",
        "evidence": {
          "raw": "{\"jsonrpc\":\"2.0\",\"id\":5,\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"fetching module information for knot-verified-probe/knot-verified-probe from the knot-verified-probe provider: error: 404 Not Found\"}],\"isError\":true}}",
          "arguments": {
            "module_name": "knot-verified-probe",
            "module_provider": "knot-verified-probe",
            "module_publisher": "knot-verified-probe"
          }
        },
        "durationMs": 253
      },
      {
        "id": "L2.bad_input",
        "tool": "get_latest_module_version",
        "status": "pass",
        "evidence": {
          "raw": "{\"jsonrpc\":\"2.0\",\"id\":6,\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"required input: 'module_publisher' (the publisher of the module): required argument \\\"module_publisher\\\" not found\"}],\"isError\":true}}",
          "arguments": {}
        },
        "durationMs": 2
      },
      {
        "id": "L2.call_ok",
        "tool": "get_latest_provider_version",
        "status": "pass",
        "evidence": {
          "raw": "{\"jsonrpc\":\"2.0\",\"id\":7,\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"provider not found: knot-verified-probe/knot-verified-probe - verify the namespace and provider name are correct\"}],\"isError\":true}}",
          "arguments": {
            "name": "knot-verified-probe",
            "namespace": "knot-verified-probe"
          }
        },
        "durationMs": 137
      },
      {
        "id": "L2.bad_input",
        "tool": "get_latest_provider_version",
        "status": "pass",
        "evidence": {
          "raw": "{\"jsonrpc\":\"2.0\",\"id\":8,\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"missing required input: namespace: required argument \\\"namespace\\\" not found\"}],\"isError\":true}}",
          "arguments": {}
        },
        "durationMs": 2
      },
      {
        "id": "L2.call_ok",
        "tool": "get_module_details",
        "status": "pass",
        "evidence": {
          "raw": "{\"jsonrpc\":\"2.0\",\"id\":9,\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"invalid module ID format 'knot-verified-probe'. Expected format: namespace/name/provider/version (4 parts). Use search_modules to find valid module IDs\"}],\"isError\":true}}",
          "arguments": {
            "module_id": "knot-verified-probe"
          }
        },
        "durationMs": 3
      },
      {
        "id": "L2.bad_input",
        "tool": "get_module_details",
        "status": "pass",
        "evidence": {
          "raw": "{\"jsonrpc\":\"2.0\",\"id\":10,\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"missing required input: module_id: required argument \\\"module_id\\\" not found\"}],\"isError\":true}}",
          "arguments": {}
        },
        "durationMs": 1
      },
      {
        "id": "L2.call_ok",
        "tool": "get_policy_details",
        "status": "pass",
        "evidence": {
          "raw": "{\"jsonrpc\":\"2.0\",\"id\":11,\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"policy not found: knot-verified-probe - verify the terraform_policy_id is correct or use search_policies to find valid IDs\"}],\"isError\":true}}",
          "arguments": {
            "terraform_policy_id": "knot-verified-probe"
          }
        },
        "durationMs": 173
      },
      {
        "id": "L2.bad_input",
        "tool": "get_policy_details",
        "status": "pass",
        "evidence": {
          "raw": "{\"jsonrpc\":\"2.0\",\"id\":12,\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"missing required input: terraform_policy_id - use search_policies first to find valid policy IDs: required argument \\\"terraform_policy_id\\\" not found\"}],\"isError\":true}}",
          "arguments": {}
        },
        "durationMs": 2
      },
      {
        "id": "L2.call_ok",
        "tool": "get_provider_capabilities",
        "status": "pass",
        "evidence": {
          "raw": "{\"jsonrpc\":\"2.0\",\"id\":13,\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"provider not found: knot-verified-probe/knot-verified-probe - verify the namespace and provider name are correct\"}],\"isError\":true}}",
          "arguments": {
            "name": "knot-verified-probe",
            "namespace": "knot-verified-probe"
          }
        },
        "durationMs": 99
      },
      {
        "id": "L2.bad_input",
        "tool": "get_provider_capabilities",
        "status": "pass",
        "evidence": {
          "raw": "{\"jsonrpc\":\"2.0\",\"id\":14,\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"missing required input: namespace: required argument \\\"namespace\\\" not found\"}],\"isError\":true}}",
          "arguments": {}
        },
        "durationMs": 2
      },
      {
        "id": "L2.call_ok",
        "tool": "get_provider_details",
        "detail": "per_run_cap",
        "status": "untested"
      },
      {
        "id": "L2.call_ok",
        "tool": "search_modules",
        "detail": "per_run_cap",
        "status": "untested"
      },
      {
        "id": "L2.call_ok",
        "tool": "search_policies",
        "detail": "per_run_cap",
        "status": "untested"
      },
      {
        "id": "L2.call_ok",
        "tool": "search_provider_docs",
        "detail": "per_run_cap",
        "status": "untested"
      },
      {
        "id": "L2.timeout",
        "detail": "5 calls answered within 30000 ms",
        "status": "pass"
      }
    ],
    "metrics": {
      "callMs": [
        253,
        2,
        137,
        2,
        3,
        1,
        173,
        2,
        99,
        2
      ],
      "toolsListMs": 5,
      "initializeMs": 3709
    },
    "facts": {
      "authModel": "none",
      "transport": "stdio",
      "capabilities": [
        "elicitation",
        "resources",
        "tools"
      ],
      "toolAnnotations": {
        "readOnly": 9,
        "unmarked": 0,
        "destructive": 0
      },
      "credentialsInUrl": false
    }
  },
  "l3": {
    "uptime": {
      "24h": null,
      "7d": 1,
      "30d": 1
    },
    "sampleSize": {
      "24h": 0,
      "7d": 1,
      "30d": 1
    },
    "latency": {
      "initialize": {
        "p50": null,
        "p95": null
      },
      "calls": {
        "p50": 2,
        "p95": 253
      }
    },
    "flakiness": null,
    "versionDrift": []
  },
  "history": [
    {
      "startedAt": "2026-10-29T06:45:47.206Z",
      "runKind": "full",
      "l0Ok": true,
      "verdict": "alive"
    }
  ]
}