Skip to main content
Glama

Terry-Form MCP

AI-powered Terraform execution through the Model Context Protocol.

Release License: MIT Docker Python

Terry-Form MCP is a containerized Model Context Protocol server that gives AI assistants like Claude safe, structured access to Terraform. It exposes 25 MCP tools spanning Terraform execution, LSP intelligence, GitHub integration, and Terraform Cloud connectivity — all running inside Docker with destructive operations blocked by design.

Documentation Site


Dashboard

Terry-Form MCP Dashboard

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.

Configuration UI

Server Configuration

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).

GitHub Integration

Cloud Providers

Rate Limits

GitHub

Cloud Providers

Rate Limits

Tool Catalog

Tool Catalog

The interactive tool catalog at /tools lists all 25 MCP tools with search, category filtering, and expandable parameter details. Also available as a raw JSON endpoint at /api/tools and as a static tools.json file.


Quick Start

Prerequisites

  • Docker installed and running

  • Python >= 3.10 (for local development)

1. Build

scripts/build.sh      # Linux/macOS
scripts\build.bat     # Windows
# or directly:
docker build -t terry-form-mcp .

2. Run as MCP Server

docker run -it --rm \
  -v "$(pwd)":/mnt/workspace \
  terry-form-mcp

3. Verify the Image

scripts/verify.sh   # Runs 8 checks: Docker, image size, Terraform, terraform-ls, Python, files, tools, startup

MCP Client Configuration

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"
      ]
    }
  }
}

Claude Desktop (Windows)

{
  "mcpServers": {
    "terry": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-v", "C:\\Users\\YourUsername\\terraform-projects:/mnt/workspace",
        "terry-form-mcp"
      ]
    }
  }
}

Claude Desktop (macOS)

{
  "mcpServers": {
    "terry": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-v", "/Users/YourUsername/terraform-projects:/mnt/workspace",
        "terry-form-mcp"
      ]
    }
  }
}

VSCode (uses workspace variable)

{
  "mcp.servers": {
    "terry": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-v", "${workspaceFolder}:/mnt/workspace",
        "terry-form-mcp"
      ]
    }
  }
}

Tools (25)

Category

Tools

Count

Core Terraform

terry, terry_version, terry_environment_check, terry_workspace_list

4

LSP Intelligence

terraform_validate_lsp, terraform_hover, terraform_complete, terraform_format_lsp, terraform_lsp_status

5

Diagnostics

terry_lsp_debug, terry_workspace_info, terry_lsp_init, terry_file_check, terry_workspace_setup, terry_analyze

6

Security

terry_security_scan, terry_recommendations

2

GitHub

github_clone_repo, github_list_terraform_files, github_get_terraform_config, github_prepare_workspace

4

Terraform Cloud

tf_cloud_list_workspaces, tf_cloud_get_workspace, tf_cloud_list_runs, tf_cloud_get_state_outputs

4

Core Terraform

# 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"})

Only init, validate, fmt, and plan are permitted. apply and destroy are blocked.

LSP Intelligence

# 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 by terraform-ls v0.38.5 — provides context-aware completions, inline documentation, and diagnostics with precise source locations.

GitHub Integration

# 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")

Security Scanning

# Scan for hardcoded credentials, missing encryption, overly permissive policies
terry_security_scan(path="my-project")

# Get actionable improvement recommendations
terry_recommendations(path="my-project")

Architecture

┌─────────────┐     MCP Protocol     ┌──────────────────────────────────────┐
│ AI Assistant │ ◄──────────────────► │  Terry-Form MCP Server               │
│ (Claude)     │                      │                                      │
└─────────────┘                      │  ┌─────────────┐  ┌──────────────┐  │
                                     │  │ Terraform    │  │ terraform-ls │  │
                                     │  │ CLI 1.12     │  │ LSP 0.38.5   │  │
                                     │  └──────┬───────┘  └──────┬───────┘  │
                                     │         │                 │          │
                                     │         ▼                 ▼          │
                                     │  ┌──────────────────────────────┐   │
                                     │  │   /mnt/workspace (isolated)   │   │
                                     │  └──────────────────────────────┘   │
                                     └──────────────────────────────────────┘
                                              Docker Container

Key Components

File

Purpose

src/server_enhanced_with_lsp.py

Main FastMCP server — registers all 25 tools

src/terry-form-mcp.py

Core Terraform subprocess execution

src/terraform_lsp_client.py

Async LSP client wrapping terraform-ls

src/mcp_request_validator.py

Input sanitization, path traversal prevention, rate limiting

src/github_repo_handler.py

Clone repos and extract Terraform files

src/github_app_auth.py

GitHub App JWT/OAuth authentication

src/frontend/

HAT stack web UI (dashboard + configuration)

Frontend Stack

The built-in web UI uses the HAT 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 with streamable-http or sse transport.


Security Model

Terry-Form implements defense-in-depth with four layers:

Layer

Protection

Container Isolation

All execution in ephemeral Docker containers. No host access.

Operation Allowlist

Only init, validate, fmt, plan. No apply/destroy.

Workspace Isolation

All file operations restricted to /mnt/workspace. Path traversal blocked.

Input Validation

JSON schema enforcement, variable sanitization, rate limiting per category.

Forced environment variables: TF_IN_AUTOMATION=true, TF_INPUT=false, CHECKPOINT_DISABLE=true.


Running with the Web UI

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 open http://localhost:8000 in your browser.

Configuration Tabs

Tab

What it configures

Server

Transport mode, host, port, API key

GitHub

App ID, installation ID, private key path, webhook secret

Terraform Cloud

API token

Cloud Providers

AWS, GCP, and Azure credentials

Rate Limits

Per-category request limits (applied immediately)

Terraform Options

Log level, operation timeout


Container Details

Built on hashicorp/terraform:1.12 (Alpine-based, ~150MB). Includes:

  • Terraform CLI 1.12

  • terraform-ls v0.38.5 for LSP support

  • Python 3.12 with FastMCP 3.0+

  • Runs as non-root user terraform (UID 1001)


Development

# 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

Limitations

  • No state modificationapply and destroy are 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


License

MIT

-
security - not tested
A
license - permissive license
-
quality - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/aj-geddes/terry-form-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server