Terry-Form MCP
About
Execute Terraform commands locally in a secure, containerized environment. Features LSP integration for intelligent Terraform development.
Details
- Author
- aj-geddes
- Categories
- Developer Tools, Infrastructure
Jump to
Setup
Install Terry-Form MCP in your MCP client (Claude Desktop, Cursor, Windsurf, and others).
Repository: https://github.com/aj-geddes/terry-form-mcp
Follow the installation instructions in the repository README, then restart your MCP client.
AI-powered Terraform execution through the Model Context Protocol.
The built-in web dashboard provides real-time server health monitoring, tool category overview, and integration status at a glance. Live status auto-refreshes every 5 seconds.
A tabbed configuration interface lets you manage server settings, integrations, cloud provider credentials, and rate limits — all without touching config files. Built with the HAT stack (HTMX + Alpine.js + Tailwind CSS).
The interactive tool catalog at/toolslists all 25 MCP tools with search, category filtering, and expandable parameter details. Also available as a raw JSON endpoint at/api/toolsand as a statictools.jsonfile.
- Docker installed and running
- Python >= 3.10 (for local development)
scripts/build.sh # Linux/macOS scripts\build.bat # Windows # or directly: docker build -t terry-form-mcp .
docker run -it --rm \ -v "$(pwd)":/mnt/workspace \ terry-form-mcp
scripts/verify.sh # Runs 8 checks: Docker, image size, Terraform, terraform-ls, Python, files, tools, startup
All configuration is through environment variables. No config file is required for basic use.
These variables are forwarded directly to the Terraform subprocess. Set them to authenticate with your cloud provider.
AWS:AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_SESSION_TOKEN,AWS_DEFAULT_REGION,AWS_REGION,AWS_PROFILE
GCP:GOOGLE_CREDENTIALS,GOOGLE_APPLICATION_CREDENTIALS,GOOGLE_PROJECT,GOOGLE_REGION,GOOGLE_ZONE
Azure:ARM_CLIENT_ID,ARM_CLIENT_SECRET,ARM_SUBSCRIPTION_ID,ARM_TENANT_ID
Add Terry-Form to any MCP-compatible client:
{ "mcpServers": { "terry": { "command": "docker", "args": [ "run", "-i", "--rm", "-v", "/path/to/your/workspace:/mnt/workspace", "terry-form-mcp" ] } } }
{ "mcpServers": { "terry": { "command": "docker", "args": [ "run", "-i", "--rm", "-v", "C:\\Users\\YourUsername\\terraform-projects:/mnt/workspace", "terry-form-mcp" ] } } }
{ "mcpServers": { "terry": { "command": "docker", "args": [ "run", "-i", "--rm", "-v", "/Users/YourUsername/terraform-projects:/mnt/workspace", "terry-form-mcp" ] } } }
{ "mcp.servers": { "terry": { "command": "docker", "args": [ "run", "-i", "--rm", "-v", "${workspaceFolder}:/mnt/workspace", "terry-form-mcp" ] } } }
# Initialize and validate a project terry(path="infrastructure/aws", actions=["init", "validate"]) # Plan with variables terry(path="environments/prod", actions=["plan"], vars={"instance_count": "3", "region": "us-east-1"})
Onlyinit,validate,fmt, andplanare permitted.applyanddestroyare blocked.
# Code completions terraform_complete(file_path="main.tf", line=10, character=0) # Hover documentation terraform_hover(file_path="main.tf", line=15, character=12) # Detailed validation with error locations terraform_validate_lsp(file_path="main.tf") # Format a file terraform_format_lsp(file_path="main.tf")
Powered byterraform-lsv0.38.5 — provides context-aware completions, inline documentation, and diagnostics with precise source locations.
# Clone a repo and prepare it for Terraform operations github_clone_repo(owner="myorg", repo="infrastructure") github_prepare_workspace(owner="myorg", repo="infrastructure", config_path="environments/prod")
# Scan for hardcoded credentials, missing encryption, overly permissive policies terry_security_scan(path="my-project") # Get actionable improvement recommendations terry_recommendations(path="my-project")
┌─────────────┐ MCP Protocol ┌──────────────────────────────────────┐ │ AI Assistant │ ◄──────────────────► │ Terry-Form MCP Server │ │ (Claude) │ │ │ └─────────────┘ │ ┌─────────────┐ ┌──────────────┐ │ │ │ Terraform │ │ terraform-ls │ │ │ │ CLI 1.12 │ │ LSP 0.38.5 │ │ │ └──────┬───────┘ └──────┬───────┘ │ │ │ │ │ │ ▼ ▼ │ │ ┌──────────────────────────────┐ │ │ │ /mnt/workspace (isolated) │ │ │ └──────────────────────────────┘ │ └──────────────────────────────────────┘ Docker Container
The built-in web UI uses theHAT stack:
- HTMX 2.0 — partial page updates without full reloads
- Alpine.js 3.14 — lightweight client-side reactivity for tabs and toasts
- Tailwind CSS — dark-mode-first utility styling
Accessible at the server root when running withstreamable-httporssetransport.
Terry-Form implements defense-in-depth with four layers:
Forced environment variables:TF_IN_AUTOMATION=true,TF_INPUT=false,CHECKPOINT_DISABLE=true.
To use the dashboard and configuration UI, run with HTTP transport:
# Local MCP_TRANSPORT=streamable-http HOST=0.0.0.0 PORT=8000 python3 src/server_enhanced_with_lsp.py # Docker docker run -it --rm \ -p 8000:8000 \ -v "$(pwd)":/mnt/workspace \ -e MCP_TRANSPORT=streamable-http \ terry-form-mcp
Then openhttp://localhost:8000in your browser.
Built onhashicorp/terraform:1.12(Alpine-based, ~150MB). Includes:
- Terraform CLI 1.12
- terraform-lsv0.38.5 for LSP support
- Python 3.12 with FastMCP 3.0+
- Runs as non-root userterraform(UID 1001)
# Install dependencies pip install -r requirements.txt # Run locally python3 src/server_enhanced_with_lsp.py # Code quality black . # Format (88-char line limit) flake8 . # Lint mypy src/*.py # Type check
- No state modification—applyanddestroyare intentionally blocked
- String variables only— complex variable types not supported via CLI passthrough
- LSP cold start— first LSP operation takes 1-2 seconds for initialization
- Local execution— designed for development workflows, not production CI/CD
This is a web browser that enables your coding agent, such as Claude Code, to visit websites on your behalf and assist you in identifying bugs or creating UI test cases.
HashiCorp Terraform MCP server for Infrastructure as Code workflows, including provider and module discovery through the Terraform Registry.
A Model Context Protocol (MCP) server for accessing the OpenTofu Registry.
The Railway MCP Server enables natural language interaction with your Railway projects and infrastructure. Ask your IDE or AI assistant to create projects, deploy templates, manage environments, pull variables, redeploy services, and more.
The Shipyard CLI provides an MCP server for agents to manage Shipyard environments directly: by pulling logs, comparing branches, running tests, and stopping/starting environments..
Manage your Bedrock server with natural language commands using the Bedrock Server Manager API.
Create and manage Terraform modules for cloud-native infrastructure using the Facets.cloud FTF CLI.
Verified GPU compute for humans, applications, and agents.
Deploy Python functions as web apps. Type hints become UI, API, and shareable links. 32 MCP tools for deploy, run, storage, secrets, scheduling, versioning, and sharing.
Run and interpret Kubernetes commands interactively with a provided kubeconfig.
Kubernetes desktop IDE with an embedded MCP server for visual oversight of AI-driven cluster operations. Supports FluxCD, ArgoCD, and Helm.
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.





