| name | Terraform Infrastructure as Code |
| description | Automate Terraform Cloud/Enterprise operations: create workspaces, trigger runs, manage variables, and search registries for infrastructure-as-code projects. |
Terraform Infrastructure as Code
Automate HashiCorp Cloud Platform (HCP) Terraform infrastructure management through type-safe TypeScript wrappers for Terraform Cloud and Terraform Enterprise.
When to Use This Skill
Invoke this skill when you need to:
- Create, configure, or update Terraform Cloud/Enterprise workspaces
- Trigger and monitor Terraform runs programmatically
- Manage workspace variables and variable sets
- Search for public Terraform modules, providers, or policies
- Access private registry modules and providers
- List organizations and projects in your Terraform Cloud/Enterprise account
This skill is ideal for infrastructure-as-code automation and programmatic HCP Terraform management workflows.
Prerequisites
Required:
- Terraform Cloud/Enterprise account
TFE_TOKEN environment variable with a valid Terraform API token
- Docker (for running the MCP server)
MCP Server Command:
docker run -i --rm -e TFE_TOKEN=your_token hashicorp/terraform-mcp-server
Security Best Practices
⚠️ Important Security Guidelines:
- Never hardcode credentials: Always use environment variables for
TFE_TOKEN
- Token security: Store tokens in secure credential managers or environment configuration
- Least privilege: Use workspace-specific or organization-specific tokens when possible
- Review before execution: Examine all generated code before running in production environments
- No secrets in code: Never commit tokens to version control
Example of secure token handling:
const token = process.env.TFE_TOKEN;
const token = "abc123...";
Available Tools
This skill provides 34 type-safe tools organized into 6 categories:
-
Workspaces (7 tools) - scripts/workspaces/
- Create, configure, update workspaces
- Manage workspace tags
- Create No Code module workspaces
-
Runs (3 tools) - scripts/runs/
- Create and trigger runs
- Get run details and status
- List runs with filtering
-
Variables (9 tools) - scripts/variables/
- Create/update/delete workspace variables
- Manage variable sets
- Attach/detach variable sets to workspaces
-
Public Registry (9 tools) - scripts/public-registry/
- Search modules, providers, and policies
- Get module/provider details and documentation
- Get provider capabilities
-
Private Registry (4 tools) - scripts/private-registry/
- Search private modules and providers
- Get private module/provider details
-
Organization (2 tools) - scripts/organization/
- List Terraform organizations
- List projects in an organization
For detailed parameters and types, see the TypeScript files in each category directory. All functions include full type definitions and JSDoc comments for IDE autocomplete.
Quick Start
import { initializeMCPClient, closeMCPClient } from "./scripts/client.js";
import { CreateWorkspace } from "./scripts/workspaces/index.js";
import { CreateRun } from "./scripts/runs/index.js";
await initializeMCPClient({
command: "docker",
args: [
"run", "-i", "--rm",
"-e", `TFE_TOKEN=${process.env.TFE_TOKEN}`,
"hashicorp/terraform-mcp-server"
]
});
try {
const workspace = await CreateWorkspace({
workspace_name: "my-infrastructure",
terraform_org_name: "my-org",
auto_apply: "false"
});
const run = await CreateRun({
workspace_name: "my-infrastructure",
terraform_org_name: "my-org",
message: "Initial deployment"
});
} finally {
await closeMCPClient();
}
Common Workflows
Workflow 1: Create Infrastructure Workspace
import { CreateWorkspace } from "./scripts/workspaces/index.js";
const workspace = await CreateWorkspace({
workspace_name: "production-api",
terraform_org_name: "acme-corp",
description: "Production API infrastructure",
auto_apply: "false",
execution_mode: "remote",
terraform_version: "1.6.0",
tags: "production,api,critical"
});
Workflow 2: Find and Use Registry Module
import { SearchModules, GetModuleDetails } from "./scripts/public-registry/index.js";
const modules = await SearchModules({
module_query: "vpc aws terraform-aws-modules"
});
const moduleDetails = await GetModuleDetails({
module_id: "terraform-aws-modules/vpc/aws/5.1.2"
});
console.log(moduleDetails.content[0].text);
Workflow 3: Configure Workspace Variables
import { CreateVariableSet, CreateVariableInVariableSet, AttachVariableSetToWorkspaces } from "./scripts/variables/index.js";
const varSet = await CreateVariableSet({
terraform_org_name: "acme-corp",
name: "aws-production-credentials",
description: "AWS credentials for production workspaces",
global: false
});
await CreateVariableInVariableSet({
variable_set_id: varSet.id,
key: "AWS_REGION",
value: "us-east-1",
category: "env",
sensitive: false
});
await AttachVariableSetToWorkspaces({
variable_set_id: varSet.id,
workspace_ids: "ws-123,ws-456,ws-789"
});
Workflow 4: Trigger and Monitor Runs
import { CreateRun, GetRunDetails } from "./scripts/runs/index.js";
const run = await CreateRun({
workspace_name: "production-api",
terraform_org_name: "acme-corp",
message: "Deploy v2.1.0 API changes",
run_type: "plan-and-apply"
});
const runDetails = await GetRunDetails({
run_id: run.id
});
console.log(`Run status: ${runDetails.status}`);
console.log(`Plan output: ${runDetails.content[0].text}`);
Using the TypeScript Wrappers
Import from category indexes or individual files:
import { CreateWorkspace, UpdateWorkspace, ListWorkspaces } from "./scripts/workspaces/index.js";
import { CreateWorkspace, CreateWorkspaceInput, CreateWorkspaceOutput } from "./scripts/workspaces/createWorkspace.js";
All wrapper functions are fully typed with Input/Output interfaces. Use your IDE's autocomplete to discover parameters and see JSDoc documentation.
Error Handling
try {
const result = await CreateWorkspace({
workspace_name: "my-workspace",
terraform_org_name: "my-org"
});
if (result.isError) {
console.error("Workspace creation failed:", result.content);
} else {
console.log("Workspace created successfully");
}
} catch (error) {
console.error("MCP call failed:", error);
}
Testing This Skill
Before Using:
- Verify
TFE_TOKEN is set: echo $TFE_TOKEN
- Confirm Docker is running:
docker --version
- Test MCP server connectivity:
docker run -i --rm -e TFE_TOKEN=$TFE_TOKEN hashicorp/terraform-mcp-server
Troubleshooting:
- Connection errors: Verify Docker is running and token is valid
- Authentication failures: Check
TFE_TOKEN has correct permissions for the operation
- Type errors: Ensure you're using the correct Input interface for each function
Architecture
scripts/client.ts - MCP connection manager (initializeMCPClient, callMCPTool, closeMCPClient)
scripts/{category}/ - Type-safe wrapper functions organized by category
- Each tool has its own
.ts file with Input/Output interfaces
index.ts provides barrel exports for convenient importing
- Full type safety - All interfaces generated from JSON Schema definitions
Limitations
This skill is NOT suitable for:
- Direct Terraform CLI operations (use Terraform CLI directly instead)
- Local Terraform state management (this is for Cloud/Enterprise only)
- Terraform configuration generation (use Terraform language skills instead)
- Non-Terraform infrastructure management
This skill was auto-generated by mcp-to-claude-skill