Serveur MCP de Terraform Cloud
Un serveur Model Context Protocol (MCP) qui intègre des assistants IA à l'API Terraform Cloud, vous permettant de gérer votre infrastructure par le biais d'une conversation naturelle. Construit avec les modèles Pydantic et structuré autour de modules spécifiques à un domaine, ce serveur est compatible avec n'importe quelle plateforme supportant le MCP, y compris Claude, Claude Code CLI, Claude Desktop, Cursor, Copilot Studio, et d'autres.
Caractéristiques
- Gestion des comptes: Obtenir les détails des comptes pour les utilisateurs authentifiés ou les comptes de service.
- Gestion de l'espace de travail: Créer, lire, mettre à jour, verrouiller/déverrouiller des espaces de travail, et éventuellement supprimer des espaces de travail (avec des contrôles de sécurité).
- Gestion des projets: Créer, lister, mettre à jour et éventuellement supprimer des projets ; gérer les balises de projet et déplacer les espaces de travail entre les projets.
- Gestion des exécutions: Créer des exécutions, les répertorier, obtenir des détails sur les exécutions, appliquer/abandonner/annuler des exécutions.
- Gestion des plans: Récupération des détails du plan et de la sortie d'exécution JSON avec gestion avancée des redirections HTTP.
- Gestion des applications: Obtenir les détails de l'application et récupérer les téléchargements d'état qui ont échoué.
- Gestion des organisations: Liste, création, mise à jour des organisations, visualisation des droits des organisations et, éventuellement, suppression des organisations (avec des contrôles de sécurité).
- Estimation des coûts: Récupérer des estimations de coûts détaillées pour les changements d'infrastructure, y compris les coûts mensuels proposés, les coûts antérieurs, le nombre de ressources et les projections d'utilisation.
- Résultats de l'évaluation: Récupérer les détails de l'évaluation de la santé, la sortie JSON, les fichiers de schéma et les journaux des évaluations de la santé de Terraform Cloud.
- Gestion des versions d'état: Listez, récupérez, créez et téléchargez des versions d'état ; obtenez l'état actuel des espaces de travail.
- Sorties de la version d'état: Liste et récupération des sorties spécifiques des versions d'état, y compris les valeurs et les informations de sensibilité.
- Gestion des variables: Gestion complète des variables et des ensembles de variables de l'espace de travail, y compris la création, les mises à jour, les affectations et, éventuellement, la suppression (avec des contrôles de sécurité).
Caractéristiques de performance
- Filtrage des réponses sans risque d'audit: Optimisation conservatrice des jetons (réduction de 5 à 15 %) avec une conformité à 100 % en matière d'audit - préservation de toutes les données relatives à la responsabilité des utilisateurs, à la configuration de la sécurité et au suivi des modifications pour des scénarios de conformité complets.
Fonctionnalités de sécurité
- Contrôle des opérations destructives: Les opérations de suppression sont désactivées par défaut et nécessitent une activation explicite via une variable d'environnement
- Indices de destruction: Les clients MCP reçoivent des avertissements d'opérations destructives appropriées pour les outils potentiellement dangereux
- Sécurité basée sur l'environnement: Les environnements de production et de développement peuvent avoir des configurations de sécurité différentes
Démarrage rapide
Conditions préalables
- Python 3.12+
- MCP (comprend FastMCP et les outils de développement)
- gestionnaire de paquets
uv
(recommandé) oupip
- Jeton API Terraform Cloud
Installation
# Cloner le dépôt git clone https://github.com/severity1/terraform-cloud-mcp.git cd terraform-cloud-mcp # Créer un environnement virtuel et l'activer uv venv source .venv/bin/activate # Installer le paquetage uv pip install
Ajouter à l'environnement Claude
Ajouter à la CLI de Claude Code
# Ajouter à Claude Code avec votre jeton Terraform Cloud claude mcp add -e TFC_TOKEN=Votre_TF_TOKEN -e ENABLE_DELETE_TOOLS=false -s user terraform-cloud-mcp -- "terraform-cloud-mcp" # Pour activer les opérations de suppression (à utiliser avec précaution) :
# claude mcp add -e TFC_TOKEN=Votre_TF_TOKEN -e ENABLE_DELETE_TOOLS=true -s user terraform-cloud-mcp -- "terraform-cloud-mcp"
Ajout au bureau de Claude
Créer un fichier de configuration claude_desktop_config.json :
- mac : ~/Bibliothèque/Application Support/Claude/claude_desktop_config.json
- win : %APPDATA%\Claudeclaude_desktop_config.json
{ "mcpServers" : { "terraform-cloud-mcp" : { "command" : "/path/to/uv", # Obtenez ceci en exécutant : `which uv` "args" : [ "--directory", "/path/to/your/terraform-cloud-mcp", # Chemin complet vers ce projet "run", "terraform-cloud-mcp" ], "env" : { "TFC_TOKEN" : "my token...", # remplacer par le token actuel "ENABLE_DELETE_TOOLS" : "false" # mettre à "true" pour activer les opérations destructives } } } }
Remplacez your_terraform_cloud_token
par votre jeton d'API Terraform Cloud.
Autres plateformes compatibles MCP
Pour les autres plateformes (comme Cursor, Copilot Studio ou Glama), suivez les instructions spécifiques à leur plateforme pour ajouter un serveur MCP. La plupart des plateformes requièrent
- Le chemin d'accès au serveur ou la commande de démarrage du serveur.
- Des variables d'environnement pour le jeton Terraform Cloud API
(TFC_TOKEN
). - Variable d'environnement facultative pour activer les opérations de suppression
(ENABLE_DELETE_TOOLS=true
pour les opérations destructives). - Configuration pour le démarrage automatique du serveur en cas de besoin.
Outils disponibles
Outils de compte
get_account_details()
: Permet d'obtenir des informations sur le compte de l'utilisateur authentifié ou le compte de service.
Outils de gestion de l'espace de travail
Liste et recherche
list_workspaces(organization, page_number, page_size, search)
: Liste et filtre les espaces de travail.get_workspace_details(workspace_id, organization, workspace_name)
: Obtenir des informations détaillées sur un espace de travail spécifique.
Créer et mettre à jour
create_workspace(organization, name, params)
: Créer un nouvel espace de travail avec des paramètres optionnels.update_workspace(organisation, nom de l'espace de travail, paramètres)
: Met à jour la configuration d'un espace de travail existant.
Supprimer (nécessite ENABLE_DELETE_TOOLS=true)
delete_workspace(organisation, workspace_name)
: Supprime un espace de travail et tout son contenu.safe_delete_workspace(organisation, workspace_name)
: Supprime uniquement si l'espace de travail ne gère aucune ressource.
Note: Les opérations de suppression sont désactivées par défaut pour des raisons de sécurité. Définissez ENABLE_DELETE_TOOLS=true
pour activer ces opérations destructrices.
Verrouiller et déverrouiller
lock_workspace(workspace_id, reason)
: Verrouille un espace de travail pour empêcher les exécutions.unlock_workspace(workspace_id)
: Déverrouille un espace de travail pour autoriser les exécutions.force_unlock_workspace(workspace_id)
: Force le déverrouillage d'un espace de travail verrouillé par un autre utilisateur.
Outils de gestion des exécutions
create_run(workspace_id, params)
: Crée et met en file d'attente une exécution Terraform dans un espace de travail en utilisant son ID.list_runs_in_workspace(workspace_id, ...)
: Liste et filtre les exécutions dans un espace de travail spécifique en utilisant son ID.list_runs_in_organization(organization, ...)
: Liste et filtre les exécutions dans l'ensemble d'une organisation.get_run_details(run_id)
: Permet d'obtenir des informations détaillées sur une exécution spécifique.apply_run(run_id, comment)
: Appliquer une exécution en attente de confirmation.discard_run(run_id, commentaire)
: Annule une exécution en attente de confirmation.cancel_run(run_id, commentaire)
: Annule une exécution en cours de planification ou d'application.force_cancel_run(run_id, commentaire)
: Annule de force une exécution immédiatement.force_execute_run(run_id)
: Exécute de force une exécution en attente en annulant les exécutions précédentes.
Outils de gestion des plans
get_plan_details(plan_id)
: Obtenir des informations détaillées sur un plan spécifique.get_plan_json_output(plan_id)
: Récupère le plan d'exécution JSON d'un plan spécifique en gérant correctement les redirections.get_run_plan_json_output(run_id)
: Récupère le plan d'exécution JSON d'un run en gérant correctement les redirections.get_plan_logs(plan_id)
: Récupère les journaux d'une opération de plan.
Appliquer les outils de gestion
get_apply_details(apply_id)
: Permet d'obtenir des informations détaillées sur une application spécifique.get_errored_state(apply_id)
: Récupère l'état erroné d'une application qui a échoué pour la récupération.get_apply_logs(apply_id)
: Récupère les journaux d'une opération d'application.
Outils de gestion de projet
create_project(organization, name, params)
: Créer un nouveau projet avec des paramètres facultatifs.update_project(project_id, params)
: Met à jour la configuration d'un projet existant.list_projects(organisation, ...)
: Liste et filtre les projets d'une organisation.get_project_details(project_id)
: Obtenir des informations détaillées sur un projet spécifique.delete_project(project_id)
: Supprime un projet (échoue s'il contient des espaces de travail). Nécessite ENABLE_DELETE_TOOLS=truelist_project_tag_bindings(project_id)
: Liste les balises liées à un projet.add_update_project_tag_bindings(project_id, tag_bindings)
: Ajoute ou met à jour les balises liées à un projet.move_workspaces_to_project(project_id, workspace_ids)
: Déplacer des espaces de travail dans un projet.
Outils de gestion des organisations
get_organization_details(organization)
: Obtenir des informations détaillées sur une organisation spécifique.get_organization_entitlements(organisation)
: Affiche le jeu de droits pour les fonctionnalités de l'organisation.list_organizations(page_number, page_size, query, query_email, query_name)
: Liste et filtre les organisations.create_organization(name, email, params)
: Crée une nouvelle organisation avec des paramètres optionnels.update_organization(organisation, paramètres)
: Met à jour les paramètres d'une organisation existante.delete_organization(organisation)
: Supprime une organisation et tout son contenu. Nécessite ENABLE_DELETE_TOOLS=true
Outils d'estimation des coûts
get_cost_estimate_details(cost_estimate_id)
: Permet d'obtenir des informations détaillées sur un calcul du coût de revient spécifique, notamment le nombre de ressources (appariées et non appariées), le coût mensuel antérieur, le coût mensuel proposé et les estimations de coût mensuel delta. Utilisez les relations d'exécution pour trouver les identifiants de devis pour des exécutions spécifiques.
Outils de résultats d'évaluation
get_assessment_result_details(assessment_result_id)
: Obtenir des informations détaillées sur un résultat d'évaluation de santé spécifique.get_assessment_json_output(assessment_result_id)
: Récupère le plan d'exécution JSON d'un résultat d'évaluation.get_assessment_json_schema(assessment_result_id)
: Récupère le fichier de schéma JSON d'un résultat d'évaluation.get_assessment_log_output(assessment_result_id)
: Récupère les journaux d'une opération de résultat d'évaluation.
Outils de gestion des versions de l'État
list_state_versions(organization, workspace_name, page_number, page_size, filter_status)
: Liste et filtre les versions d'état dans un espace de travail.get_current_state_version(workspace_id)
: Obtenir la version d'état actuelle d'un espace de travail.get_state_version(state_version_id)
: Obtenir les détails d'une version d'état spécifique.create_state_version(workspace_id, serial, md5, params)
: Crée une nouvelle version d'état dans un espace de travail.download_state_file(state_version_id, json_format)
: Télécharger le fichier d'état brut ou au format JSON.
Outils de sortie des versions d'état
list_state_version_outputs(state_version_id, page_number, page_size)
: Liste les sorties pour une version d'état spécifique.get_state_version_output(state_version_output_id)
: Permet d'obtenir les détails d'une sortie pour une version d'état spécifique.
Outils de gestion des variables
Variables de l'espace de travail
list_workspace_variables(workspace_id)
: Liste toutes les variables (Terraform et environnement) d'un espace de travail.create_workspace_variable(workspace_id, key, category, params)
: Crée une nouvelle variable dans un espace de travail.update_workspace_variable(workspace_id, variable_id, params)
: Met à jour une variable existante de l'espace de travail.delete_workspace_variable(workspace_id, variable_id)
: Supprime une variable de l'espace de travail. Nécessite ENABLE_DELETE_TOOLS=true
Ensembles de variables
list_variable_sets(organization, page_number, page_size)
: Liste les ensembles de variables d'une organisation.get_variable_set(varset_id)
: Obtenir les détails d'un ensemble de variables spécifique.create_variable_set(organization, name, params)
: Crée un nouvel ensemble de variables.update_variable_set(varset_id, params)
: Met à jour un ensemble de variables existant.delete_variable_set(varset_id)
: Supprime un ensemble de variables et toutes ses variables. Nécessite ENABLE_DELETE_TOOLS=trueassign_variable_set_to_workspaces(varset_id, workspace_ids)
: Affecte un ensemble de variables à des espaces de travail.unassign_variable_set_from_workspaces(varset_id, workspace_ids)
: Supprime un ensemble de variables des espaces de travail.assign_variable_set_to_projects(varset_id, project_ids)
: Affecte un ensemble de variables à des projets.unassign_variable_set_from_projects(varset_id, project_ids)
: Supprime un ensemble de variables des projets.
Variables d'un ensemble de variables
list_variables_in_variable_set(varset_id)
: Liste toutes les variables d'un ensemble de variables.create_variable_in_variable_set(varset_id, key, category, params)
: Crée une variable dans un ensemble de variables.update_variable_in_variable_set(varset_id, var_id, params)
: Met à jour une variable dans un ensemble de variables.delete_variable_from_variable_set(varset_id, var_id)
: Supprime une variable d'un ensemble de variables. Nécessite ENABLE_DELETE_TOOLS=true
Remarque: la gestion des variables comprend à la fois les variables d'entrée de Terraform et les variables d'environnement. Les valeurs des variables sensibles sont cachées pour des raisons de sécurité. Les opérations de suppression sont désactivées par défaut et nécessitent ENABLE_DELETE_TOOLS=true
.
Guide de développement
Pour des conseils de développement détaillés, y compris les normes de code, les modèles Pydantic, et les flux de contribution, voir notre documentation de développement.
Installation rapide du développement
# Cloner le dépôt git clone https://github.com/severity1/terraform-cloud-mcp.git cd terraform-cloud-mcp # Créer un environnement virtuel et l'activer uv venv source .venv/bin/activate # Sous Windows : .venv\Scripts\activate # Installer en mode développement avec les dépendances de développement uv pip install -e . uv pip install black mypy pydantic ruff
Commandes de développement de base
# Exécuter le serveur en mode développement mcp dev terraform_cloud_mcp/server.py # Exécuter les tests et les contrôles de qualité uv run -m mypy . uv run -m ruff check . uv run -m black
Pour des informations détaillées sur l'organisation du code, l'architecture, les flux de développement et les directives de qualité du code, consultez docs/DEVELOPMENT.md.
Documentation
La base de code comprend une documentation complète :
- Commentaires sur le code: Explication du "pourquoi" des décisions d'implémentation
- Docstrings: Toutes les fonctions et classes publiques sont accompagnées d'une documentation détaillée
- Références de mise en œuvre: La documentation de développement fait désormais référence à des exemples de code réels plutôt qu'à des extraits de code
- Fichiers d'exemples: Le répertoire
docs/
contient des exemples détaillés pour chaque domainedocs/FILTERING_SYSTEM.md
: Guide complet du système de filtrage des réponses sans risque d'audit (réduction de 5 à 15 % des jetons, conformité à 100 % des audits)docs/DEVELOPMENT.md
: Normes de développement et directives de codage avec des références au code réeldocs/API_REFERENCES.md
: Liens vers la documentation de l'API de Terraform Cloud avec l'état de la mise en œuvredocs/CONTRIBUTING.md
: Directives pour contribuer au projetdocs/models/
: Documentation de référence pour tous les types de modèlesdocs/tools/
: Documentation de référence détaillée pour chaque outildocs/conversations/
: Exemples de flux de conversation avec l'API
Résolution des problèmes
- Vérifiez les journaux du serveur (la journalisation de débogage est activée par défaut)
- Utilisez l'inspecteur MCP(http://localhost:5173) pour le débogage
- La journalisation de débogage est déjà activée dans
server.py
:import logging logging.basicConfig(level=logging.DEBUG)
Contribuer
Les contributions sont les bienvenues ! Veuillez ouvrir un problème ou une demande d'extraction si vous souhaitez contribuer à ce projet.
Consultez notre guide de contribution pour obtenir des instructions détaillées sur la façon de commencer, les normes de qualité du code et le processus de demande d'extraction.
Avis de non-responsabilité
Ce projet n'est pas affilié, associé ou approuvé par HashiCorp ou Terraform.
"Terraform" et "Terraform Cloud" sont des marques déposées de HashiCorp.
Ce projet interagit simplement avec l'API publique de Terraform Cloud dans le cadre d'une utilisation équitable.