servidor use_aws MCP
🌟 amazon-q-cli es genial, y es genial porque tiene la herramienta use_aws
MCP para interactuar con la API de AWS.
💡 ¿No sería mejor si este use_aws
fuera portable, y usarlo a través de diferentes herramientas de IA, cualquiera que estés usando actualmente?
⚡ use_aws_mcp
es un servidor independiente del Protocolo de contexto de modelo (MCP) que proporciona la funcionalidad de la CLI de AWS a través de una interfaz estandarizada.
Este servidor replica la funcionalidad de la herramienta use_aws
de la CLI de Amazon Q Developer.
🎬 Demo
Uso con Avante, MCPHub en nvim
Uso con Cursor
✨ Características
- Integración con AWS CLI: Ejecuta comandos CLI de AWS con un manejo adecuado de los parámetros
- Comprobaciones de seguridad: Detección automática de operaciones de solo lectura frente a operaciones de escritura
- Gestión de agentes de usuario: Configuración adecuada del agente de usuario de la CLI de AWS para el seguimiento
- Formato de parámetros: Conversión automática de parámetros a kebab-case para compatibilidad CLI
- Gestión de errores: Gestión integral de errores y formato de salida
- Protocolo MCP: Cumplimiento total del protocolo de contexto de modelo
- Descripciones legibles por el ser humano: Ricas descripciones de comandos utilizando el formato de terminal
📦 Instalación
📋 Requisitos previos
- 🦀 Rust (1.70 o posterior), Cargo
- para macOS y linux, instalar con
curl https://sh.rustup.rs -sSf | sh
- para macOS y linux, instalar con
- ☁️ AWS CLI instalado y configurado
- 🔑 Credenciales de AWS configuradas (a través de la CLI de AWS, variables de entorno o roles de IAM)
🔨 Construcción
cargo build --release
El binario estará disponible en target/release/use_aws
.
🚀 Uso
🔗 Integración con clientes MCP
Para usar este servidor con un cliente MCP, primero instálalo usando Cargo:
cargo install use_aws_mcp
Luego configura tu cliente MCP con:
{ "mcpServers": { "use_aws_mcp": { "name": "use_aws_mcp", "command": "use_aws_mcp", "timeout": 300, "env": {}, "disabled": false } } }
⚠️ Advertencia importante sobre el uso del cliente MCP
Con q cli, los clientes mcp son procesos shell, por lo que las credenciales env como AWS_DEFAULT_PROFILE
se transfieren automáticamente al servidor mcp.
Sin embargo, los clientes mcp no shell como cursor no pueden tomar ventaja de esto, por lo que es mejor aconsejado requerir a los clientes mcp directamente el uso de un perfil aws específico.
📋 Flujo de usuarios:
- Establecer mcp.json arriba
- Establecer clave de API, o iniciar sesión en el perfil específico utilizando
aws sso login
- Pregunte a distancia cliente mcp aws preguntas relacionadas! y asegúrese de que requieren para utilizar el perfil específico.
Ejecutar el servidor MCP localmente
./target/release/use_aws_mcp
El servidor se comunica vía stdin/stdout usando el protocolo JSON-RPC.
Descripciones de comandos
El servidor proporciona descripciones legibles por humanos de los comandos de la CLI de AWS. Puedes ver esto en acción ejecutando el ejemplo:
cargo run --example descripción_demo
Esto mostrará algo como
Ejecución del comando aws cli: Nombre del servicio: s3 Nombre de la operación: list-buckets Parámetros:
- max-items: "10" - query: "Buckets[].Name" Nombre de perfil: development Región: us-west-2 Etiqueta: Listar buckets de S3 con query ✅ Este comando es de sólo lectura (no requiere aceptación)
🛠️ Especificación de la herramienta
El servidor proporciona una única herramienta llamada use_aws
con el siguiente esquema:
{ "name": "use_aws", "description": "Ejecuta comandos CLI de AWS con un manejo de parámetros y comprobaciones de seguridad adecuados", "inputSchema": { "type": "object", "properties": { "service_name": { "type": "string", "description": "Nombre del servicio de AWS (por ejemplo, s3, ec2, lambda)" }, "operation_name": { "type": "string", "description": "Nombre de operación de la CLI de AWS (por ejemplo, list-buckets, describe-instances)" }, "parameters": { "type": "object", "description": "Parámetros opcionales para el comando CLI de AWS", "additionalProperties": true }, "region": { "type": "string", "description": "región de AWS (por ejemplo, us-west-2, eu-west-1)" }, "profile_name": { "type": "string", "description": "Nombre opcional del perfil de AWS" }, "label": { "type": "string", "description": "Etiqueta opcional para la operación" } }, "required": ["service_name", "operation_name", "region"] }
📚 Ejemplos
Listar cubos de S3
{ "name": "use_aws", "arguments": { "service_name": "s3", "nombre_operación": "ls", "region": "us-west-2" } }
Describir instancias EC2
{ "name": "use_aws", "arguments": { "service_name": "ec2", "operation_name": "describe-instances", "region": "us-west-2", "parameters": { "instance-ids": "i-1234567890abcdef0" } }
Lista de funciones lambda con perfil
{ "name": "use_aws", "arguments": { "service_name": "lambda", "operation_name": "list-functions", "region": "us-west-2", "profile_name": "development" }
🛡️ Funciones de seguridad
Detección de operaciones de sólo lectura
El servidor detecta automáticamente las operaciones de sólo lectura basándose en el prefijo del nombre de la operación:
- Prefijos de sólo lectura:
get
,describe
,list
,ls
,search
,batch_get
- Operaciones de escritura: Todas las demás operaciones requieren la aceptación explícita del usuario
Truncamiento de la salida
Las salidas grandes se truncan automáticamente para evitar problemas de memoria, con un tamaño máximo de respuesta de 100 KB.
Desarrollo
Ejecución de pruebas
prueba de carga
🔨 Construcción para el desarrollo
cargo build
Ejecución con logging
RUST_LOG=use_aws=debug cargo run
Ejemplos
# Ejecutar la descripción demo cargo run --example descripción_demo
Arquitectura
El proyecto está estructurado de la siguiente manera:
src/lib.rs
: Biblioteca central con tipos y constantessrc/error.rs
: Tipos para el tratamiento de erroressrc/use_aws.rs
: Funcionalidad principal de la CLI de AWS (replicado del original)src/mcp_server.rs
: Implementación del servidor MCPsrc/main.rs
: Punto de entrada binarioexamples/description_demo.rs
: Ejemplo de demostración de descripciones de comandos
📦 Dependencias
Si no tienes Cargo (el gestor de paquetes de Rust) instalado, puedes conseguirlo instalando Rust usando rustup:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Siga las instrucciones en pantalla para completar la instalación. Tras la instalación, reinicia tu terminal y asegúrate de que Cargo está disponible ejecutando
cargo --version
Debería ver impresa la versión de Cargo instalada.
Este proyecto se distribuye como un crate de Rust. Las siguientes dependencias son gestionadas automáticamente por Cargo:
tokio
serde
serde_json
eyre
bstr
convertir_caso
async-trait
thiserror
rastreo
tracing-subscriber
crossterm
dependencias test/dev:
tokio-test
No es necesario instalar estos manualmente; Cargo se encargará de ellos durante la instalación.
📄 Licencia
MIT, Apache-2.0
🤝 Contribuir
- Abre el repositorio
- Crear una rama de características
- Haz tus cambios
- Añade pruebas
- Envía un pull request
🔒 Seguridad
Este servidor ejecuta comandos CLI de AWS, que pueden tener implicaciones de seguridad:
- Asegurar las credenciales y permisos de AWS adecuados
- Revise todos los comandos antes de su ejecución
- Utilice operaciones de solo lectura siempre que sea posible
- Considere la posibilidad de ejecutar en un entorno restringido
🔧 Solución de problemas
Problemas comunes
- No se encuentra AWS CLI: Asegúrese de que AWS CLI está instalado y en el PATH
- Permiso denegado: Compruebe las credenciales y los permisos de AWS
- Región no válida: Compruebe que el nombre de la región es correcto
- Errores de parámetros: Compruebe los nombres y valores de los parámetros
Modo depuración
Ejecutar con registro de depuración para ver información detallada:
RUST_LOG=use_aws=debug ./target/release/use_aws