Servidor MCP de Terraform Cloud
Un servidor de Protocolo de Contexto de Modelos (MCP) que integra asistentes de IA con la API de Terraform Cloud, permitiéndole gestionar su infraestructura a través de una conversación natural. Construido con modelos Pydantic y estructurado alrededor de módulos específicos de dominio, este servidor es compatible con cualquier plataforma que soporte MCP, incluyendo Claude, Claude Code CLI, Claude Desktop, Cursor, Copilot Studio y otros.
Características
- Gestión de cuentas: Obtenga detalles de cuentas para usuarios autenticados o cuentas de servicio.
- Gestión de espacios de trabajo: Crear, leer, actualizar, bloquear/desbloquear espacios de trabajo y, opcionalmente, eliminar espacios de trabajo (con controles de seguridad).
- Gestión de proyectos: Cree, enumere, actualice y, opcionalmente, elimine proyectos; gestione los enlaces de etiquetas de proyectos y mueva espacios de trabajo entre proyectos.
- Gestión deejecuciones: Crear ejecuciones, listar ejecuciones, obtener detalles de ejecuciones, aplicar/descartar/cancelar ejecuciones.
- Gestión deplanes: Recupere los detalles del plan y la salida de ejecución JSON con gestión avanzada de redireccionamiento HTTP.
- Gestión deaplicaciones: Obtenga detalles de aplicación y recupérese de cargas de estado fallidas.
- Gestión deorganizaciones: Enumere, cree y actualice organizaciones, vea los derechos de las organizaciones y, opcionalmente, elimine organizaciones (con controles de seguridad).
- Estimación de costes: Obtenga estimaciones de costes detalladas para los cambios de infraestructura, incluidos los costes mensuales propuestos, los costes anteriores, los recuentos de recursos y las proyecciones de uso.
- Resultados de la evaluación: Recupere los detalles de la evaluación de estado, la salida JSON, los archivos de esquema y los registros de las evaluaciones de estado de Terraform Cloud.
- Gestión de versiones de estado: Enumere, recupere, cree y descargue versiones de estado; obtenga el estado actual de los espacios de trabajo.
- Salidas de versiones de estado: Enumere y recupere salidas específicas de versiones de estado, incluidos valores e información de sensibilidad.
- Gestión de variables: Gestión completa de variables y conjuntos de variables del espacio de trabajo, incluidas la creación, actualización, asignación y, opcionalmente, eliminación (con controles de seguridad).
Características de rendimiento
- Filtrado de respuestas seguro para auditorías: Optimización conservadora de tokens (reducción del 5-15%) con una conformidad de auditoría del 100%: conserva todos los datos de responsabilidad del usuario, configuración de seguridad y seguimiento de cambios para escenarios de conformidad exhaustivos.
Funciones de seguridad
- Controles de operaciones destructivas: Las operaciones de borrado están deshabilitadas por defecto y requieren una habilitación explícita a través de una variable de entorno
- Sugerencias destructivas: Los clientes MCP reciben advertencias de operaciones destructivas adecuadas para herramientas potencialmente peligrosas
- Seguridad basada en el entorno: Los entornos de producción y desarrollo pueden tener diferentes configuraciones de seguridad
Inicio rápido
Requisitos previos
- Python 3.12+
- MCP (incluye FastMCP y herramientas de desarrollo)
- gestor de paquetes
uv
(recomendado) opip
- Token de la API de Terraform Cloud
Instalación
# Clonar el repositorio git clone https://github.com/severity1/terraform-cloud-mcp.git cd terraform-cloud-mcp # Crear entorno virtual y activarlo uv venv source .venv/bin/activate # Instalar paquete uv pip install
Añadir a Entornos Claude
Añadir a Claude Code CLI
# Añadir a Claude Code con su token de Terraform Cloud claude mcp add -e TFC_TOKEN=YOUR_TF_TOKEN -e ENABLE_DELETE_TOOLS=false -s user terraform-cloud-mcp -- "terraform-cloud-mcp" # Para habilitar las operaciones de borrado (usar con precaución):
# claude mcp add -e TFC_TOKEN=YOUR_TF_TOKEN -e ENABLE_DELETE_TOOLS=true -s user terraform-cloud-mcp -- "terraform-cloud-mcp"
Añadir a Claude Desktop
Cree un archivo de configuración claude_desktop_config.json
:
- mac: ~/Library/Application Support/Claude/claude_desktop_config.json
- win: %APPDATA%\Claude\claude_desktop_config.json
{"mcpServers": { "terraform-cloud-mcp": { "command": "/path/to/uv", # Obtén esto ejecutando: `which uv` "args": [ "--directory", "/path/to/your/terraform-cloud-mcp", # Ruta completa a este proyecto "run", "terraform-cloud-mcp" ], "env": { "TFC_TOKEN": "mi token...", # reemplazar con token real "ENABLE_DELETE_TOOLS": "false" # poner a "true" para habilitar operaciones destructivas } } }
Sustituye your_terraform_cloud_token
por tu token real de la API de Terraform Cloud.
Otras plataformas compatibles con MCP
Para otras plataformas (como Cursor, Copilot Studio o Glama), sigue las instrucciones específicas de cada plataforma para añadir un servidor MCP. La mayoría de las plataformas requieren:
- La ruta del servidor o el comando para iniciar el servidor.
- Variables de entorno para el token de la API de Terraform Cloud
(TFC_TOKEN
). - Variable de entorno opcional para habilitar las operaciones de borrado
(ENABLE_DELETE_TOOLS=true
para operaciones destructivas). - Configuración para auto-iniciar el servidor cuando sea necesario.
Herramientas disponibles
Herramientas de cuenta
get_account_details()
: Obtiene información de la cuenta del usuario autenticado o de la cuenta de servicio.
Herramientas de gestión del espacio de trabajo
Lista y búsqueda
list_workspaces(organización, número_página, tamaño_página, búsqueda)
: Lista y filtra espacios de trabajo.get_workspace_details(espacio_de_trabajo_id, organización, espacio_de_trabajo_nombre)
: Obtener información detallada sobre un espacio de trabajo específico.
Creación y actualización
create_workspace(organización, nombre, parámetros)
: Crea un nuevo espacio de trabajo con parámetros opcionales.update_workspace(organización, nombre_espacio_de_trabajo, parámetros)
: Actualiza la configuración de un espacio de trabajo existente.
Eliminar (Requiere ENABLE_DELETE_TOOLS=true)
delete_workspace(organización, nombre_espacio_de_trabajo)
: Elimina un espacio de trabajo y todo su contenido.safe_delete_workspace(organización, nombre_espacio_de_trabajo)
: Elimina sólo si el espacio de trabajo no gestiona ningún recurso.
Nota: las operaciones de eliminación están desactivadas por defecto por motivos de seguridad. Establezca ENABLE_DELETE_TOOLS=true
para activar estas operaciones destructivas.
Bloqueo y desbloqueo
lock_workspace(workspace_id, reason)
: Bloquea un espacio de trabajo para evitar ejecuciones.unlock_workspace(workspace_id)
: Desbloquea un espacio de trabajo para permitir ejecuciones.force_unlock_workspace(workspace_id)
: Forzar el desbloqueo de un espacio de trabajo bloqueado por otro usuario.
Herramientas de gestión de ejecuciones
create_run(workspace_id, params)
: Crea y pone en cola una ejecución de Terraform en un espacio de trabajo utilizando su ID.list_runs_in_workspace(workspace_id, ...)
: Lista y filtra ejecuciones en un espacio de trabajo específico utilizando su ID.list_runs_in_organization(organization, ...)
: Lista y filtra las ejecuciones en toda una organización.get_run_details(run_id)
: Obtener información detallada sobre una ejecución específica.apply_run(run_id, comment)
: Aplicar una ejecución en espera de confirmación.discard_run(run_id, comment)
: Descarta una ejecución pendiente de confirmación.cancelar_ejecución(id_ejecución, comentario)
: Cancelar una ejecución que se está planificando o aplicando.force_cancel_run(run_id, comment)
: Cancelar forzosamente una ejecución de forma inmediata.force_execute_run(run_id)
: Forzar la ejecución de una ejecución pendiente cancelando las ejecuciones anteriores.
Herramientas de gestión de planes
get_plan_details(plan_id)
: Obtener información detallada sobre un plan específico.get_plan_json_output(plan_id)
: Recupera el plan de ejecución JSON de un plan específico con la gestión de redireccionamiento adecuada.get_run_plan_json_output(run_id)
: Recupera el plan de ejecución JSON de una ejecución con el manejo adecuado de redirecciones.get_plan_logs(plan_id)
: Recupera los registros de una operación de plan.
Aplicar herramientas de gestión
get_apply_details(apply_id)
: Obtiene información detallada sobre una aplicación específica.get_errored_state(apply_id)
: Recupera el estado de error de una solicitud fallida para su recuperación.get_apply_logs(apply_id)
: Recupera los registros de una operación de aplicación.
Herramientas de gestión de proyectos
create_project(organización, nombre, parámetros)
: Crea un nuevo proyecto con parámetros opcionales.update_project(project_id, params)
: Actualiza la configuración de un proyecto existente.list_projects(organización, ...)
: Lista y filtra los proyectos de una organización.get_project_details(project_id)
: Obtener información detallada sobre un proyecto específico.delete_project(project_id)
: Elimina un proyecto (falla si contiene espacios de trabajo). Requiere ENABLE_DELETE_TOOLS=truelist_project_tag_bindings(project_id)
: Lista las etiquetas vinculadas a un proyecto.add_update_project_tag_bindings(project_id, tag_bindings)
: Añade o actualiza etiquetas en un proyecto.move_workspaces_to_project(project_id, workspace_ids)
: Mueve espacios de trabajo a un proyecto.
Herramientas de gestión de organizaciones
get_organization_details(organización)
: Obtener información detallada sobre una organización específica.get_organization_entitlements(organización)
: Muestra el conjunto de derechos de las características de la organización.list_organizations(page_number, page_size, query, query_email, query_name)
: Listar y filtrar organizaciones.create_organization(name, email, params)
: Crea una nueva organización con parámetros opcionales.actualizar_organización(organización, parámetros)
: Actualiza la configuración de una organización existente.delete_organization(organización)
: Elimina una organización y todo su contenido. Requiere ENABLE_DELETE_TOOLS=true
Herramientas de estimación de costes
get_cost_estimate_details(cost_estimate_id)
: Obtenga información detallada sobre una estimación de costes específica, incluidos los recuentos de recursos (coincidentes y no coincidentes), el coste mensual anterior, el coste mensual propuesto y las estimaciones delta del coste mensual. Utilice las relaciones de ejecución para encontrar los ID de cálculo del coste para ejecuciones específicas.
Herramientas de resultados de evaluación
get_assessment_result_details(assessment_result_id)
: Obtenga información detallada sobre el resultado de una evaluación sanitaria específica.get_assessment_json_output(assessment_result_id)
: Recupera el plan de ejecución JSON de un resultado de evaluación.get_assessment_json_schema(assessment_result_id)
: Recupera el archivo de esquema JSON de un resultado de evaluación.get_assessment_log_output(assessment_result_id)
: Recupera los registros de una operación de resultado de evaluación.
Herramientas de gestión de versiones de estado
list_state_versions(organization, workspace_name, page_number, page_size, filter_status)
: Enumera y filtra las versiones de estado de un espacio de trabajo.get_current_state_version(workspace_id)
: Obtiene la versión de estado actual de un espacio de trabajo.get_state_version(state_version_id)
: Obtener detalles de una versión de estado específica.create_state_version(workspace_id, serial, md5, params)
: Crea una nueva versión de estado en un espacio de trabajo.download_state_file(state_version_id, json_format)
: Descarga el archivo de estado sin formato o con formato JSON.
Herramientas de salida de versiones de estado
list_state_version_outputs(state_version_id, page_number, page_size)
: Lista las salidas para una versión de estado específica.get_state_version_output(state_version_output_id)
: Obtiene detalles de la salida de una versión de estado específica.
Herramientas de gestión de variables
Variables del espacio de trabajo
list_workspace_variables(workspace_id)
: Lista todas las variables (Terraform y entorno) de un espacio de trabajo.create_workspace_variable(workspace_id, key, category, params)
: Crea una nueva variable en un espacio de trabajo.update_workspace_variable(workspace_id, variable_id, params)
: Actualiza una variable existente en un espacio de trabajo.delete_workspace_variable(workspace_id, variable_id)
: Elimina una variable del espacio de trabajo. Requiere ENABLE_DELETE_TOOLS=true
Conjuntos de variables
list_variable_sets(organización, número_página, tamaño_página)
: Lista los conjuntos de variables de una organización.get_variable_set(varset_id)
: Obtener detalles de un conjunto de variables específico.create_variable_set(organization, name, params)
: Crea un nuevo conjunto de variables.update_variable_set(varset_id, params)
: Actualiza un conjunto de variables existente.delete_variable_set(varset_id)
: Elimina un conjunto de variables y todas sus variables. Requiere ENABLE_DELETE_TOOLS=trueassign_variable_set_to_workspaces(varset_id, workspace_ids)
: Asigna un conjunto de variables a espacios de trabajo.unassign_variable_set_from_workspaces(varset_id, workspace_ids)
: Elimina un conjunto de variables de los espacios de trabajo.assign_variable_set_to_projects(varset_id, project_ids)
: Asigna un conjunto de variables a proyectos.unassign_variable_set_from_projects(varset_id, project_ids)
: Elimina un conjunto de variables de los proyectos.
Variables del conjunto de variables
list_variables_in_variable_set(varset_id)
: Lista todas las variables de un conjunto de variables.create_variable_in_variable_set(varset_id, key, category, params)
: Crea una variable en un conjunto de variables.update_variable_in_variable_set(varset_id, var_id, params)
: Actualiza una variable en un conjunto de variables.delete_variable_from_variable_set(varset_id, var_id)
: Elimina una variable de un conjunto de variables. Requiere ENABLE_DELETE_TOOLS=true
Nota: La gestión de variables incluye tanto las variables de entrada de Terraform como las variables de entorno. Las variables sensibles tienen sus valores ocultos por seguridad. Las operaciones de borrado están desactivadas por defecto y requieren ENABLE_DELETE_TOOLS=true
.
Guía de desarrollo
Para una guía de desarrollo detallada, incluyendo estándares de código, patrones Pydantic y flujos de trabajo de contribución, consulte nuestra Documentación de Desarrollo.
Configuración rápida de desarrollo
# Clonar el repositorio git clone https://github.com/severity1/terraform-cloud-mcp.git cd terraform-cloud-mcp # Crear entorno virtual y activarlo uv venv source .venv/bin/activate # En Windows: .venv\Scripts\activate # Instalar en modo desarrollo con dependencias de desarrollo uv pip install -e . uv pip install black mypy pydantic ruff
Comandos básicos de desarrollo
# Ejecutar el servidor en modo desarrollo mcp dev terraform_cloud_mcp/server.py # Ejecutar pruebas y comprobaciones de calidad uv run -m mypy . uv run -m ruff check . uv run -m black
Para obtener información detallada sobre la organización del código, la arquitectura, los flujos de trabajo de desarrollo y las directrices de calidad del código, consulte docs/DEVELOPMENT.md.
Documentación
El código base incluye una completa documentación:
- Comentarios del código: Centrada en explicar el "por qué" de las decisiones de implementación
- Docstrings: Todas las funciones y clases públicas incluyen documentación detallada
- Referencias de implementación: La documentación de desarrollo ahora hace referencia a ejemplos de código reales en lugar de utilizar fragmentos de código
- Archivos de ejemplo: El directorio
docs/
contiene ejemplos detallados para cada dominiodocs/FILTERING_SYSTEM.md
: Guía completa del sistema de filtrado de respuestas a prueba de auditorías (reducción de tokens del 5-15%, cumplimiento de auditorías del 100%)docs/DEVELOPMENT.md
: Normas de desarrollo y directrices de codificación con referencias a código realdocs/API_REFERENCES.md
: Enlaces a la documentación de la API de Terraform Cloud con el estado de implementacióndocs/CONTRIBUTING.md
: Directrices para contribuir al proyectodocs/models/
: Documentación de referencia para todos los tipos de modelosdocs/tools/
: Documentación de referencia detallada para cada herramientadocs/conversations/
: Ejemplos de flujos de conversación con la API
Solución de problemas
- Compruebe los registros del servidor (el registro de depuración está activado por defecto)
- Utilice el Inspector de MCP(http://localhost:5173) para depurar
- El registro de depuración ya está habilitado en
server.py
:import logging logging.basicConfig(level=logging.DEBUG)
Contribuyendo
¡Las contribuciones son bienvenidas! Por favor, abre una incidencia o pull request si quieres contribuir a este proyecto.
Consulte nuestra Guía de Contribución para obtener instrucciones detalladas sobre cómo empezar, los estándares de calidad del código y el proceso de solicitud de colaboración.
Descargo de responsabilidad
Este proyecto no está afiliado, asociado o respaldado por HashiCorp o Terraform.
"Terraform" y "Terraform Cloud" son marcas registradas de HashiCorp.
Este proyecto simplemente interactúa con la API pública de Terraform Cloud bajo uso justo.