Skip to main content
Glama
README.md‱15.1 kB
# Serveur MCP GCP Infrastructure ## đŸŽ„ DĂ©monstration vidĂ©o <div align="center"> ![DĂ©monstration du serveur MCP GCP](media/demo_short.gif) **👉 [Voir la vidĂ©o complĂšte (898 Ko)](media/1114.mp4)** *DĂ©couvrez comment dĂ©ployer votre infrastructure GCP en langage naturel avec Claude* > **Note** : Le GIF animĂ© ci-dessus se lance automatiquement. Pour la vidĂ©o complĂšte avec son, [tĂ©lĂ©chargez le fichier MP4](media/1114.mp4). </div> --- Serveur MCP (Model Context Protocol) pour gĂ©rer l'infrastructure GCP (Google Cloud Platform) en langage naturel via Claude. Ce serveur permet de dĂ©ployer et gĂ©rer des machines virtuelles, de gĂ©rer des clĂ©s SSH, et de dĂ©ployer de l'infrastructure avec Terraform. > **⚠ AVERTISSEMENT IMPORTANT - SÉCURITÉ** > > Ce projet est **uniquement Ă  but de prĂ©sentation des travaux sur l'intelligence artificielle** et ne doit **PAS ĂȘtre utilisĂ© en production** sans modifications de sĂ©curitĂ© majeures. > > **🔮 Aucune authentification OAuth n'est implĂ©mentĂ©e** : Le serveur MCP est accessible publiquement sans authentification. Toute personne ayant accĂšs Ă  l'URL du serveur peut l'utiliser et potentiellement accĂ©der Ă  vos ressources GCP. > > **⚠ Utilisez uniquement dans un environnement de dĂ©veloppement isolĂ© ou avec des mesures de sĂ©curitĂ© appropriĂ©es (pare-feu, authentification, etc.).** > **📋 Note sur l'utilisation avec Claude** > > Pour que Claude puisse s'authentifier facilement avec votre serveur MCP, il est **fortement recommandĂ©** d'utiliser un **nom de domaine avec HTTPS** plutĂŽt qu'une adresse IP ou HTTP. Claude nĂ©cessite une connexion sĂ©curisĂ©e (HTTPS) pour fonctionner correctement avec les serveurs MCP externes. ## FonctionnalitĂ©s ### 🔑 Gestion des clĂ©s SSH - **GĂ©nĂ©rer des clĂ©s SSH** : CrĂ©er automatiquement une paire de clĂ©s SSH (privĂ©e/publique) - **Stocker les clĂ©s** : Stockage sĂ©curisĂ© des clĂ©s SSH (en mĂ©moire et sur disque dans `~/.ssh_mcp`) - **Lister les clĂ©s** : Voir toutes les clĂ©s SSH disponibles - **Ajouter des clĂ©s existantes** : Importer vos propres clĂ©s SSH ### ☁ Gestion des VMs GCP (Compute Engine) - **Lister les instances** : Voir toutes les VMs dans votre projet GCP - **CrĂ©er une instance** : DĂ©ployer une nouvelle VM avec configuration personnalisĂ©e - **DĂ©marrer/ArrĂȘter une instance** : ContrĂŽler l'Ă©tat des VMs - **Supprimer une instance** : Nettoyer les ressources - **Obtenir les dĂ©tails** : Voir les informations dĂ©taillĂ©es d'une VM (IPs, disques, etc.) ### 🔐 ExĂ©cution SSH distante - **ExĂ©cuter des commandes** : Lancer des commandes sur les VMs via SSH - **Upload de fichiers** : TransfĂ©rer des fichiers vers les VMs via SFTP ### đŸ—ïž Infrastructure as Code avec Terraform - **Initialiser Terraform** : PrĂ©parer un projet Terraform - **Planifier** : Voir les changements avant de les appliquer - **Appliquer** : DĂ©ployer l'infrastructure - **DĂ©truire** : Nettoyer les ressources Terraform ### 💬 Langage naturel - InterprĂ©tation des requĂȘtes en français pour faciliter l'utilisation ## Installation ### PrĂ©requis - Python 3.8+ - Compte GCP avec un projet configurĂ© - Fichier de clĂ© de service GCP (service-account-key.json) - **Nom de domaine avec certificat SSL/TLS** (recommandĂ© pour l'utilisation avec Claude) - **Reverse proxy (Nginx/Apache) avec HTTPS** configurĂ© (recommandĂ©) ### Étapes d'installation 1. Cloner le dĂ©pĂŽt : ```bash git clone <votre-repo> cd <votre-repo> ``` 2. Installer les dĂ©pendances : ```bash pip3 install -r requirements.txt ``` 3. Configurer les credentials GCP : - Placer votre fichier `service-account-key.json` dans le rĂ©pertoire du projet - Assurez-vous que le service account a les permissions nĂ©cessaires : - Compute Engine Admin - Service Account User 4. (Optionnel) Installer Terraform si vous voulez utiliser les fonctionnalitĂ©s Terraform : ```bash # Ubuntu/Debian wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list sudo apt update && sudo apt install terraform ``` ## Utilisation ### Configuration HTTPS avec nom de domaine (RecommandĂ©) Pour que Claude puisse s'authentifier facilement, configurez votre serveur avec HTTPS et un nom de domaine : 1. **Obtenir un certificat SSL** (Let's Encrypt recommandĂ©) : ```bash sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d votre-domaine.com ``` 2. **Configurer Nginx comme reverse proxy** : ```nginx server { listen 443 ssl; server_name votre-domaine.com; ssl_certificate /etc/letsencrypt/live/votre-domaine.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/votre-domaine.com/privkey.pem; location / { proxy_pass http://localhost:5001; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` 3. **RedĂ©marrer Nginx** : ```bash sudo systemctl restart nginx ``` ### DĂ©marrage du serveur ```bash python3 mcp_server.py ``` Le serveur dĂ©marrera sur `http://0.0.0.0:5001` (utilisez HTTPS via le reverse proxy pour la production) ### Configuration dans Claude Desktop Pour utiliser le serveur MCP avec Claude via HTTPS, configurez l'URL de votre serveur : ```json { "mcpServers": { "gcp-infrastructure": { "url": "https://votre-domaine.com", "headers": { "Content-Type": "application/json" } } } } ``` **Note** : Utilisez votre nom de domaine avec HTTPS (ex: `https://mcp.votre-domaine.com`) pour que Claude puisse s'authentifier correctement. Pour une utilisation locale uniquement, vous pouvez aussi utiliser la commande directe : ```json { "mcpServers": { "gcp-infrastructure": { "command": "python3", "args": ["/opt/git/mcp_server.py"], "env": { "GOOGLE_APPLICATION_CREDENTIALS": "/opt/git/service-account-key.json" } } } } ``` ## Outils disponibles ### Gestion des clĂ©s SSH #### `ssh_generate_key` GĂ©nĂšre une nouvelle paire de clĂ©s SSH. **ParamĂštres :** - `key_name` (requis) : Nom de la clĂ© - `description` (optionnel) : Description de la clĂ© **Exemple :** ```json { "key_name": "ma-cle-vm", "description": "ClĂ© pour mes VMs GCP" } ``` #### `ssh_list_keys` Liste toutes les clĂ©s SSH disponibles. #### `ssh_add_key` Ajoute une clĂ© SSH existante. **ParamĂštres :** - `key_name` (requis) : Nom de la clĂ© - `private_key` (requis) : ClĂ© privĂ©e au format PEM - `public_key` (requis) : ClĂ© publique - `description` (optionnel) : Description ### Gestion des VMs GCP #### `gcp_list_instances` Liste toutes les instances VM. **ParamĂštres :** - `zone` (optionnel) : Zone GCP (dĂ©faut: us-central1-a) #### `gcp_create_instance` CrĂ©e une nouvelle instance VM. **ParamĂštres :** - `instance_name` (requis) : Nom de l'instance - `machine_type` (optionnel) : Type de machine (dĂ©faut: e2-medium) - `disk_size_gb` (optionnel) : Taille du disque en GB (dĂ©faut: 10) - `image_family` (optionnel) : Famille d'image (dĂ©faut: debian-11) - `ssh_key_name` (optionnel) : Nom de la clĂ© SSH Ă  utiliser **Exemple :** ```json { "instance_name": "mon-serveur-web", "machine_type": "e2-medium", "disk_size_gb": 20, "image_family": "debian-11", "ssh_key_name": "ma-cle-vm" } ``` #### `gcp_start_instance` DĂ©marre une instance VM. **ParamĂštres :** - `instance_name` (requis) : Nom de l'instance - `zone` (optionnel) : Zone GCP #### `gcp_stop_instance` ArrĂȘte une instance VM. **ParamĂštres :** - `instance_name` (requis) : Nom de l'instance - `zone` (optionnel) : Zone GCP #### `gcp_delete_instance` Supprime une instance VM. **ParamĂštres :** - `instance_name` (requis) : Nom de l'instance - `zone` (optionnel) : Zone GCP #### `gcp_get_instance` Obtient les dĂ©tails d'une instance. **ParamĂštres :** - `instance_name` (requis) : Nom de l'instance - `zone` (optionnel) : Zone GCP ### ExĂ©cution SSH #### `ssh_execute` ExĂ©cute une commande SSH sur une machine distante. **ParamĂštres :** - `host` (requis) : Adresse IP ou hostname - `username` (requis) : Nom d'utilisateur SSH - `command` (requis) : Commande Ă  exĂ©cuter - `ssh_key_name` (requis) : Nom de la clĂ© SSH Ă  utiliser **Exemple :** ```json { "host": "35.123.45.67", "username": "debian", "command": "sudo apt update && sudo apt install -y nginx", "ssh_key_name": "ma-cle-vm" } ``` #### `ssh_upload_file` Upload un fichier via SSH. **ParamĂštres :** - `host` (requis) : Adresse IP ou hostname - `username` (requis) : Nom d'utilisateur SSH - `local_path` (requis) : Chemin local du fichier - `remote_path` (requis) : Chemin distant du fichier - `ssh_key_name` (requis) : Nom de la clĂ© SSH Ă  utiliser ### Terraform #### `terraform_init` Initialise Terraform dans un rĂ©pertoire. **ParamĂštres :** - `working_dir` (requis) : RĂ©pertoire de travail Terraform #### `terraform_plan` Planifie un dĂ©ploiement Terraform. **ParamĂštres :** - `working_dir` (requis) : RĂ©pertoire de travail Terraform - `var_file` (optionnel) : Fichier de variables #### `terraform_apply` Applique un dĂ©ploiement Terraform. **ParamĂštres :** - `working_dir` (requis) : RĂ©pertoire de travail Terraform - `var_file` (optionnel) : Fichier de variables - `auto_approve` (optionnel) : Auto-approuver (dĂ©faut: true) #### `terraform_destroy` DĂ©truit l'infrastructure Terraform. **ParamĂštres :** - `working_dir` (requis) : RĂ©pertoire de travail Terraform - `auto_approve` (optionnel) : Auto-approuver (dĂ©faut: true) ### Langage naturel #### `gcp_natural_query` InterprĂšte une requĂȘte en langage naturel. **ParamĂštres :** - `query` (requis) : RequĂȘte en français **Exemple :** ```json { "query": "CrĂ©e une nouvelle VM pour mon serveur web" } ``` ## Exemples d'utilisation avec Claude ### Exemple 1 : CrĂ©er une VM avec clĂ© SSH ``` Utilisateur : Je veux crĂ©er une VM sur GCP pour hĂ©berger un site web Claude : Je vais vous aider Ă  crĂ©er une VM. D'abord, gĂ©nĂ©rons une clĂ© SSH : [utilise ssh_generate_key] Maintenant, crĂ©ons la VM avec cette clĂ© : [utilise gcp_create_instance avec la clĂ© SSH] Votre VM est en cours de crĂ©ation ! Une fois dĂ©marrĂ©e, vous pourrez vous y connecter. ``` ### Exemple 2 : Installer un logiciel sur une VM ``` Utilisateur : Installe nginx sur ma VM "mon-serveur-web" Claude : Je vais d'abord obtenir l'adresse IP de votre VM : [utilise gcp_get_instance] Maintenant j'installe nginx via SSH : [utilise ssh_execute avec la commande d'installation] Nginx est maintenant installĂ© sur votre VM ! ``` ### Exemple 3 : DĂ©ployer avec Terraform ``` Utilisateur : DĂ©ploie l'infrastructure dĂ©finie dans /opt/terraform/infrastructure Claude : Je vais initialiser Terraform : [utilise terraform_init] Voyons ce qui va ĂȘtre créé : [utilise terraform_plan] Tout semble correct. J'applique maintenant : [utilise terraform_apply] Infrastructure dĂ©ployĂ©e avec succĂšs ! ``` ## Architecture ### Stockage des clĂ©s SSH Les clĂ©s SSH sont stockĂ©es de maniĂšre sĂ©curisĂ©e : - **En mĂ©moire** : Pour un accĂšs rapide pendant l'exĂ©cution - **Sur disque** : Dans `~/.ssh_mcp/` avec permissions restrictives (600 pour les clĂ©s privĂ©es, 644 pour les publiques) ### Configuration GCP - **Projet** : level-surfer-473817-p5 - **Zone par dĂ©faut** : us-central1-a - **Credentials** : service-account-key.json ## SĂ©curitĂ© ### ⚠ AVERTISSEMENTS CRITIQUES **Ce serveur MCP n'implĂ©mente AUCUNE authentification OAuth ou autre mĂ©canisme de sĂ©curitĂ©.** **Risques de sĂ©curitĂ© :** - 🔮 **AccĂšs public non authentifiĂ©** : Toute personne ayant l'URL peut utiliser votre serveur - 🔮 **Exposition des ressources GCP** : AccĂšs potentiel Ă  vos VMs, clĂ©s SSH, et infrastructure - 🔮 **Pas de rate limiting** : VulnĂ©rable aux attaques par dĂ©ni de service - 🔮 **Pas de logging d'audit** : Impossible de tracer qui a utilisĂ© le serveur **Recommandations pour la production :** 1. ✅ **ImplĂ©menter OAuth 2.0** ou un autre mĂ©canisme d'authentification 2. ✅ **Utiliser HTTPS obligatoire** (certificat SSL valide) 3. ✅ **Configurer un pare-feu** pour limiter l'accĂšs par IP 4. ✅ **Ajouter un rate limiting** pour prĂ©venir les abus 5. ✅ **Activer les logs d'audit** pour tracer toutes les actions 6. ✅ **Utiliser un reverse proxy** (Nginx/Traefik) avec authentification 7. ✅ **Restreindre les permissions GCP** au strict minimum nĂ©cessaire ### Bonnes pratiques 1. **ClĂ©s SSH** : StockĂ©es avec permissions restrictives (600) 2. **Service Account** : Utilise les credentials GCP avec permissions minimales nĂ©cessaires 3. **ClĂ©s privĂ©es** : Jamais exposĂ©es dans les rĂ©ponses de l'API (seules les clĂ©s publiques sont retournĂ©es) 4. **HTTPS obligatoire** : Utilisez toujours HTTPS en production, jamais HTTP 5. **Nom de domaine** : Utilisez un nom de domaine valide avec certificat SSL pour Claude ### Permissions GCP requises Le service account doit avoir au minimum : - `roles/compute.instanceAdmin.v1` - `roles/iam.serviceAccountUser` ## DĂ©pannage ### Le serveur ne dĂ©marre pas - VĂ©rifiez que toutes les dĂ©pendances sont installĂ©es : `pip3 install -r requirements.txt` - VĂ©rifiez que le fichier `service-account-key.json` existe et est valide ### Erreur de connexion GCP - VĂ©rifiez que le service account a les bonnes permissions - VĂ©rifiez que le projet GCP est correct dans le code (`GCP_PROJECT_ID`) ### Erreur SSH - VĂ©rifiez que la clĂ© SSH existe : utilisez `ssh_list_keys` - VĂ©rifiez que la VM a bien la clĂ© publique dans ses mĂ©tadonnĂ©es - VĂ©rifiez que le pare-feu GCP autorise le port SSH (22) ### Erreur Terraform - VĂ©rifiez que Terraform est installĂ© : `terraform --version` - VĂ©rifiez que le rĂ©pertoire de travail contient des fichiers Terraform valides ## API Reference ### Endpoints REST #### GET / Informations sur le serveur #### GET /health Health check du serveur #### POST /mcp Endpoint principal MCP (JSON-RPC 2.0) ## À propos de ce projet **Ce dĂ©pĂŽt GitHub est uniquement Ă  but de prĂ©sentation des travaux sur l'intelligence artificielle.** Ce projet dĂ©montre l'intĂ©gration d'un serveur MCP (Model Context Protocol) avec Google Cloud Platform pour permettre Ă  Claude (et autres assistants IA) de gĂ©rer l'infrastructure cloud en langage naturel. **Objectifs pĂ©dagogiques :** - DĂ©monstration de l'utilisation du protocole MCP - IntĂ©gration avec les APIs GCP - Gestion d'infrastructure via IA conversationnelle - Exemples de code pour la communautĂ© **⚠ Ne pas utiliser en production sans modifications de sĂ©curitĂ© majeures.** ## Contribuer Les contributions sont les bienvenues ! N'hĂ©sitez pas Ă  ouvrir une issue ou une pull request. ## Licence MIT License ## Support Pour toute question ou problĂšme, ouvrez une issue sur GitHub.

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/vog01r/MCP_GCP_DevOps'

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