Terry-Form MCP

Ejecuta comandos de Terraform localmente en un entorno seguro y contenerizado. Incluye integración con LSP para el desarrollo inteligente de Terraform.

Documentación

Terry-Form MCP

Ejecución de Terraform impulsada por IA a través del Protocolo de Contexto de Modelos.

Release License: MIT Docker Python

Terry-Form MCP es un servidor del Protocolo de Contexto de Modelos contenerizado que brinda a asistentes de IA como Claude un acceso seguro y estructurado a Terraform. Expone 25 herramientas MCP que abarcan ejecución de Terraform, inteligencia LSP, integración con GitHub y conectividad con Terraform Cloud, todo ejecutándose dentro de Docker con operaciones destructivas bloqueadas por diseño.

Sitio de Documentación


Panel de Control

Terry-Form MCP Dashboard

El panel web integrado proporciona monitoreo de salud del servidor en tiempo real, descripción general de categorías de herramientas y estado de integraciones de un vistazo. El estado en vivo se actualiza automáticamente cada 5 segundos.

Interfaz de Configuración

Server Configuration

Una interfaz de configuración con pestañas permite gestionar ajustes del servidor, integraciones, credenciales de proveedores de nube y límites de velocidad, todo sin tocar archivos de configuración. Construida con el stack HAT (HTMX + Alpine.js + Tailwind CSS).

Integración con GitHubProveedores de NubeLímites de Velocidad
GitHubCloud ProvidersRate Limits

Catálogo de Herramientas

Tool Catalog

El catálogo interactivo de herramientas en /tools lista las 25 herramientas MCP con búsqueda, filtrado por categoría y detalles de parámetros expandibles. También está disponible como un endpoint JSON sin procesar en /api/tools y como un archivo estático tools.json.


Inicio Rápido

Requisitos Previos

  • Docker instalado y en ejecución
  • Python >= 3.10 (para desarrollo local)

1. Construir

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

2. Ejecutar como Servidor MCP

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

3. Verificar la Imagen

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

Variables de Entorno

Toda la configuración se realiza mediante variables de entorno. No se requiere archivo de configuración para uso básico.

Configuración del Servidor

VariableDescripciónPredeterminadoRequerido
MCP_TRANSPORTProtocolo de transporte: stdio, sse o streamable-httpstdioNo
TERRY_HOSTDirección de enlace del servidor (respaldo: HOST)0.0.0.0No
TERRY_PORTPuerto del servidor (respaldo: PORT)8000No
TERRY_FORM_API_KEYClave API para autenticación del frontend; si no se establece, la autenticación está deshabilitadaNingunaNo
TERRY_CSRF_SECRETSecreto del token CSRF; se regenera al reiniciar si no se estableceAleatorioRecomendado
TERRY_WORKSPACE_ROOTDirectorio raíz del espacio de trabajo de Terraform/mnt/workspaceNo
TERRY_CONFIG_PATHRuta del archivo de configuración/app/config/terry-config.jsonNo

Terraform

VariableDescripciónPredeterminadoRequerido
MAX_OPERATION_TIMEOUTTiempo de espera del comando Terraform en segundos (10–3600)300No

LSP

VariableDescripciónPredeterminadoRequerido
TERRY_TERRAFORM_LS_PATHRuta al binario terraform-lsterraform-lsNo
TERRY_LSP_TIMEOUTTiempo de espera de solicitud LSP en segundos30No
TERRY_LSP_MAX_RESPONSE_BYTESTamaño máximo de respuesta LSP en bytes10485760No

Integración con GitHub

VariableDescripciónPredeterminadoRequerido
GITHUB_APP_IDID de la aplicación de GitHubNingunaPara funciones de GitHub
GITHUB_APP_PRIVATE_KEY_PATHRuta al archivo de clave privada de la aplicación de GitHubNingunaPara funciones de GitHub
GITHUB_APP_PRIVATE_KEYClave privada de la aplicación de GitHub (PEM en línea)NingunaAlternativa a la ruta
GITHUB_APP_INSTALLATION_IDID de instalación de la aplicación de GitHubNingunaNo
GITHUB_APP_WEBHOOK_SECRETSecreto de verificación de firma de webhookNingunaNo

Terraform Cloud

VariableDescripciónPredeterminadoRequerido
TF_API_TOKENToken API de Terraform CloudNingunaPara funciones de TF Cloud

Límites de Velocidad

VariableDescripciónPredeterminadoRequerido
TERRY_RATE_LIMIT_TERRAFORMOperaciones de Terraform por minuto20No
TERRY_RATE_LIMIT_GITHUBOperaciones de GitHub por minuto30No
TERRY_RATE_LIMIT_TF_CLOUDOperaciones de Terraform Cloud por minuto30No
TERRY_RATE_LIMIT_DEFAULTLímite de velocidad predeterminado por minuto100No

Transferencia de Proveedores de Nube

Estas variables se reenvían directamente al subproceso de Terraform. Configúrelas para autenticarse con su proveedor de nube.

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


Configuración del Cliente MCP

Agregue Terry-Form a cualquier cliente compatible con MCP:

{
  "mcpServers": {
    "terry": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-v", "/path/to/your/workspace:/mnt/workspace",
        "terry-form-mcp"
      ]
    }
  }
}
Ejemplos específicos por plataforma

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 (usa variable de espacio de trabajo)

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

Herramientas (25)

CategoríaHerramientasCantidad
Terraform Principalterry, terry_version, terry_environment_check, terry_workspace_list4
Inteligencia LSPterraform_validate_lsp, terraform_hover, terraform_complete, terraform_format_lsp, terraform_lsp_status5
Diagnósticosterry_lsp_debug, terry_workspace_info, terry_lsp_init, terry_file_check, terry_workspace_setup, terry_analyze6
Seguridadterry_security_scan, terry_recommendations2
GitHubgithub_clone_repo, github_list_terraform_files, github_get_terraform_config, github_prepare_workspace4
Terraform Cloudtf_cloud_list_workspaces, tf_cloud_get_workspace, tf_cloud_list_runs, tf_cloud_get_state_outputs4

Terraform Principal

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

Solo se permiten init, validate, fmt y plan. apply y destroy están bloqueados.

Inteligencia LSP

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

Impulsado por terraform-ls v0.38.5: proporciona autocompletado contextual, documentación en línea y diagnósticos con ubicaciones precisas de origen.

Integración con GitHub

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

Escaneo de Seguridad

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

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

Arquitectura

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

Componentes Clave

ArchivoPropósito
src/server_enhanced_with_lsp.pyServidor FastMCP principal: registra las 25 herramientas
src/terry-form-mcp.pyEjecución principal del subproceso de Terraform
src/terraform_lsp_client.pyCliente LSP asíncrono que envuelve terraform-ls
src/mcp_request_validator.pySaneamiento de entrada, prevención de recorrido de rutas, límites de velocidad
src/github_repo_handler.pyClonar repositorios y extraer archivos de Terraform
src/github_app_auth.pyAutenticación JWT/OAuth de la aplicación de GitHub
src/frontend/Interfaz web del stack HAT (panel + configuración)

Stack del Frontend

La interfaz web integrada usa el stack HAT:

  • HTMX 2.0: actualizaciones parciales de página sin recargas completas
  • Alpine.js 3.14: reactividad ligera del lado del cliente para pestañas y notificaciones
  • Tailwind CSS: estilos utilitarios con modo oscuro por defecto

Accesible en la raíz del servidor cuando se ejecuta con transporte streamable-http o sse.


Modelo de Seguridad

Terry-Form implementa defensa en profundidad con cuatro capas:

CapaProtección
Aislamiento de ContenedoresToda la ejecución en contenedores Docker efímeros. Sin acceso al host.
Lista de Operaciones PermitidasSolo init, validate, fmt, plan. Sin apply/destroy.
Aislamiento del Espacio de TrabajoTodas las operaciones de archivos restringidas a /mnt/workspace. Recorrido de rutas bloqueado.
Validación de EntradaCumplimiento de esquema JSON, saneamiento de variables, límites de velocidad por categoría.

Variables de entorno forzadas: TF_IN_AUTOMATION=true, TF_INPUT=false, CHECKPOINT_DISABLE=true.


Ejecución con la Interfaz Web

Para usar el panel y la interfaz de configuración, ejecute con transporte HTTP:

# 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

Luego abra http://localhost:8000 en su navegador.

Pestañas de Configuración

PestañaQué configura
ServidorModo de transporte, host, puerto, clave API
GitHubID de aplicación, ID de instalación, ruta de clave privada, secreto de webhook
Terraform CloudToken API
Proveedores de NubeCredenciales de AWS, GCP y Azure
Límites de VelocidadLímites de solicitudes por categoría (aplicados de inmediato)
Opciones de TerraformNivel de registro, tiempo de espera de operación

Detalles del Contenedor

Construido sobre hashicorp/terraform:1.12 (basado en Alpine, ~150MB). Incluye:

  • CLI de Terraform 1.12
  • terraform-ls v0.38.5 para soporte LSP
  • Python 3.12 con FastMCP 3.0+
  • Se ejecuta como usuario no root terraform (UID 1001)

Desarrollo

# 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

Limitaciones

  • Sin modificación de estado — apply y destroy están bloqueados intencionalmente
  • Solo variables de cadena — los tipos de variables complejos no son compatibles mediante transferencia CLI
  • Arranque en frío de LSP — la primera operación LSP tarda 1-2 segundos en inicializarse
  • Ejecución local — diseñado para flujos de trabajo de desarrollo, no para CI/CD de producción

Licencia

MIT