Terraform Cloud - MCP Server sécurisé par ALMC Security 2025

Terraform Cloud

Voir sur GitHub

MseeP.ai Security Assessment Badge

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.

VersionPythonType CheckingCode Quality


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 paquetsuv (recommandé) ou pip
  • 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

  1. Le chemin d'accès au serveur ou la commande de démarrage du serveur.
  2. Des variables d'environnement pour le jeton Terraform Cloud API(TFC_TOKEN).
  3. Variable d'environnement facultative pour activer les opérations de suppression(ENABLE_DELETE_TOOLS=true pour les opérations destructives).
  4. 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=true
  • list_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=true
  • assign_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 domaine
    • docs/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éel
    • docs/API_REFERENCES.md: Liens vers la documentation de l'API de Terraform Cloud avec l'état de la mise en œuvre
    • docs/CONTRIBUTING.md: Directives pour contribuer au projet
    • docs/models/: Documentation de référence pour tous les types de modèles
    • docs/tools/: Documentation de référence détaillée pour chaque outil
    • docs/conversations/: Exemples de flux de conversation avec l'API

Résolution des problèmes

  1. Vérifiez les journaux du serveur (la journalisation de débogage est activée par défaut)
  2. Utilisez l'inspecteur MCP(http://localhost:5173) pour le débogage
  3. 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.

Liés dans Service en nuage - MCP Servers sécurisés

ServeurRésuméActions
mcp-k8s-goMCP 💬 prompt 🗂️ resource 🤖 toolVoir
AniListVoir
Mémoire partagée MCPCet exemple vous permet de déployer un serveur MCP distant qui ne nécessite pas d'authentification s...Voir
Serveur MCP InfactoryUn serveur MCP (Model Context Protocol) pour interagir avec les API d'Infactory à l'aide de Claude e...Voir
Serveur MCP AlpacaVoir
Salesforce Einstein par CDataServeur Model Context Protocol (MCP) de CData pour Salesforce EinsteinVoir