serveur use_aws MCP
🌟 amazon-q-cli est génial, et il est génial parce qu'il a l'outil use_aws
MCP pour interagir avec l'API AWS.
💡 Ne serait-il pas préférable que cet outil use_aws
soit portable, et que vous puissiez l'utiliser avec différents outils d'intelligence artificielle, quel que soit celui que vous utilisez actuellement ?
⚡ use_aws_mcp
est un serveur autonome de protocole de contexte de modèle (MCP) qui fournit des fonctionnalités AWS CLI par le biais d'une interface standardisée.
Ce serveur reproduit les fonctionnalités de l'outil use_aws
de la CLI Amazon Q Developer.
🎬 Démonstration
Utilisation avec Avante, MCPHub dans nvim
Utilisation avec Cursor
fonctionnalités
- Intégration AWS CLI: Exécution de commandes AWS CLI avec gestion appropriée des paramètres
- Contrôles de sécurité: Détection automatique des opérations de lecture seule et d'écriture
- Gestion des agents utilisateurs: Configuration correcte de l'agent utilisateur AWS CLI pour le suivi
- Formatage des paramètres: Conversion automatique des paramètres en majuscules pour la compatibilité avec la CLI
- Gestion des erreurs: Gestion complète des erreurs et formatage des résultats
- Protocole MCP: Conformité totale au protocole MCP (Model Context Protocol)
- Descriptions lisibles par l'homme: Descriptions de commandes riches utilisant le formatage des terminaux
📦 Installation
📋 Conditions préalables
- 🦀 Rust (1.70 ou plus récent), Cargo
- pour MacOS et Linux, installer avec
curl https://sh.rustup.rs -sSf | sh
- pour MacOS et Linux, installer avec
- ☁️ AWS CLI installé et configuré
- 🔑 Identifiants AWS configurés (via AWS CLI, variables d'environnement ou rôles IAM)
🔨 Construction
cargo build --release
Le binaire sera disponible dans target/release/use_aws
.
🚀 Utilisation
🔗 Intégration du client MCP
Pour utiliser ce serveur avec un client MCP, il faut d'abord l'installer avec Cargo :
cargo install use_aws_mcp
Configurez ensuite votre client MCP avec :
{ "mcpServers" : {"use_aws_mcp" : {"name" : "use_aws_mcp", "command" : "use_aws_mcp", "timeout" : 300, "env" : {}, "disabled" : false } } }
⚠️ Mise en garde importante concernant l'utilisation du client MCP
Avec q cli, les clients mcp sont des processus shell, donc les credentials env comme AWS_DEFAULT_PROFILE
sont automatiquement transférés au serveur mcp.
Cependant, les clients mcp qui ne sont pas des processus shell, comme le curseur, ne peuvent pas profiter de cela, il est donc préférable d'exiger des clients mcp qu'ils utilisent un profil aws spécifique.
📋 Flux de l'utilisateur :
- Définir le fichier mcp.json ci-dessus
- Définir la clé API, ou se connecter à un profil spécifique en utilisant
aws sso login
- Posez toutes les questions relatives au client mcp aws ! et assurez-vous d'exiger l'utilisation d'un profil spécifique.
Exécuter le serveur MCP localement
./target/release/use_aws_mcp
Le serveur communique via stdin/stdout en utilisant le protocole JSON-RPC.
Descriptions des commandes
Le serveur fournit des descriptions lisibles par l'homme des commandes AWS CLI. Vous pouvez voir cela en action en exécutant l'exemple :
cargo run --example description_demo
Le résultat ressemblera à ce qui suit :
Exécution de la commande aws cli : Nom du service : s3 Nom de l'opération : list-buckets Paramètres :
- max-items : "10" - query : "Buckets[].Name" Nom du profil : development Région : us-west-2 Étiquette : List S3 buckets with query ✅ Cette commande est en lecture seule (pas d'acceptation requise)
🛠️ Spécification de l'outil
Le serveur fournit un seul outil appelé use_aws
avec le schéma suivant :
{"name" : "use_aws", "description" : "Exécuter des commandes AWS CLI avec une gestion appropriée des paramètres et des contrôles de sécurité", "inputSchema" : {"type" : "object", "properties" : { "service_name" : {"type" : "string", "description" : "Nom du service AWS (par exemple, s3, ec2, lambda)" }, "operation_name" : { "type" : "string", "description" : "Nom de l'opération AWS CLI (par exemple, list-buckets, describe-instances)" }, "parameters" : { "type" : "string", "description" : "nom de l'opération AWS CLI" : { "type" : "object", "description" : "Paramètres facultatifs pour la commande AWS CLI", "additionalProperties" : true }, "region" : { "type" : "string", "description" : "Région AWS (par exemple, us-west-2, eu-west-1)" }, "profile_name" : { "type" : "string", "description" : "Nom de profil AWS facultatif" }, "label" : { "type" : "string", "description" : "Étiquette facultative pour l'opération" } }, "required" : ["nom_du_service", "nom_de_l'opération", "région"] } }
📚 Exemples
Répertorier les bacs S3
{"name" : "use_aws", "arguments" : { "service_name" : "s3", "operation_name" : "ls", "region" : "us-west-2" } }
Décrire les instances EC2
{ "name" : "use_aws", "arguments" : { "service_name" : "ec2", "operation_name" : "describe-instances", "region" : "us-west-2", "parameters" : { "instance-ids" : "i-1234567890abcdef0" } } }
Liste des fonctions Lambda avec profil
{ "name" : "use_aws", "arguments" : { "service_name" : "lambda", "operation_name" : "list-functions", "region" : "us-west-2", "profile_name" : "development" } }
🛡️ Caractéristiques de sécurité
Détection des opérations en lecture seule
Le serveur détecte automatiquement les opérations en lecture seule en fonction du préfixe du nom de l'opération :
- Préfixes en lecture seule:
get
,describe
,list
,ls
,search
,batch_get
- Opérations d'écriture: Toutes les autres opérations nécessitent l'accord explicite de l'utilisateur
Troncature des sorties
Les sorties volumineuses sont automatiquement tronquées pour éviter les problèmes de mémoire, avec une taille de réponse maximale de 100 Ko.
Développement
Exécution des tests
test de cargaison
🔨 Construire pour le développement
cargo build
Exécution avec journalisation
RUST_LOG=use_aws=debug cargo run
Exemples
# Exécuter la description démo cargo run --example description_demo
Architecture du projet
Le projet est structuré comme suit :
src/lib.rs
: Bibliothèque de base avec les types et les constantessrc/error.rs
: Types de gestion des erreurssrc/use_aws.rs
: Fonctionnalité de base de la CLI AWS (répliquée de l'original)src/mcp_server.rs
: Implémentation du serveur MCPsrc/main.rs
: Point d'entrée binaireexamples/description_demo.rs
: Exemple de description de commande
📦 Dépendances
Si vous n'avez pas Cargo (le gestionnaire de paquets Rust) installé, vous pouvez l'obtenir en installant Rust à l'aide de rustup:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Suivez les instructions à l'écran pour terminer l'installation. Après l'installation, redémarrez votre terminal et assurez-vous que Cargo est disponible en exécutant :
cargo --version
La version de Cargo installée devrait s'afficher.
Ce projet est distribué en tant que crate Rust. Les dépendances suivantes sont gérées automatiquement par Cargo :
tokio
serde
serde_json
eyre
bstr
convert_case
async-trait
cette erreur
traçage
traçage-abonnement
crossterm
dépendances test/dev :
tokio-test
Vous n'avez pas besoin d'installer ces dépendances manuellement ; Cargo s'en chargera lors de l'installation.
licence
MIT, Apache-2.0
🤝 Contribuer
- Mettre le dépôt en fourche (Fork)
- Créer une branche de fonctionnalités
- Effectuez vos modifications
- Ajouter des tests
- Soumettre une demande d'extraction
🔒 Sécurité
Ce serveur exécute des commandes AWS CLI, qui peuvent avoir des implications en termes de sécurité :
- S'assurer que les informations d'identification et les autorisations AWS sont correctes
- Vérifier toutes les commandes avant de les exécuter
- Utiliser des opérations en lecture seule lorsque c'est possible
- Envisager l'exécution dans un environnement restreint
🔧 Dépannage
Problèmes courants
- AWS CLI introuvable: S'assurer que AWS CLI est installé et qu'il figure dans le PATH
- Permission refusée: Vérifiez les informations d'identification et les autorisations AWS
- Région non valide: Vérifier que le nom de la région est correct
- Erreurs de paramètres: Vérifier les noms et valeurs des paramètres
Mode débogage
Exécuter en mode débogage pour obtenir des informations détaillées :
RUST_LOG=use_aws=debug ./target/release/use_aws