AWS CLI

Interactúa con los servicios de AWS usando la AWS CLI. Requiere que la AWS CLI esté instalada y configurada.

Documentación

Servidor MCP use_aws

🌟 amazon-q-cli es excelente, y es excelente porque tiene use_aws herramienta MCP para interactuar con la API de AWS.

💡 ¿No sería mejor si esta use_aws fuera portátil y pudieras usarla en diferentes herramientas de IA, cualquiera que estés usando actualmente?

use_aws_mcp es un servidor independiente del Model Context Protocol (MCP) que proporciona funcionalidad de AWS CLI a través de una interfaz estandarizada.
Este servidor replica la funcionalidad de la herramienta use_aws del Amazon Q Developer CLI.

🎬 Demo

  • Uso con Avante, MCPHub en nvim
    Demo: Avante

  • Uso con Cursor
    Demo: Cursor

✨ Características

  • Integración con AWS CLI: Ejecuta comandos de AWS CLI con manejo adecuado de parámetros
  • Comprobaciones de seguridad: Detección automática de operaciones de solo lectura vs. operaciones de escritura
  • Gestión de User Agent: Configuración adecuada del user agent de AWS CLI para seguimiento
  • Formato de parámetros: Conversión automática de parámetros a kebab-case para compatibilidad con CLI
  • Manejo de errores: Manejo integral de errores y formato de salida
  • Protocolo MCP: Cumplimiento total del Model Context Protocol
  • Descripciones legibles para humanos: Descripciones ricas de comandos usando 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
  • ☁️ AWS CLI instalado y configurado
  • 🔑 Credenciales de AWS configuradas (mediante AWS CLI, variables de entorno o roles de IAM)

🔨 Compilación

cargo build --release

El binario estará disponible en target/release/use_aws.

🚀 Uso

🔗 Integración con cliente 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 para usar cliente MCP

Con q cli, los clientes mcp son procesos de shell, por lo que las variables de entorno de credenciales como AWS_DEFAULT_PROFILE se transfieren automáticamente al servidor mcp.

Sin embargo, los clientes mcp que no son de shell, como cursor, no pueden aprovechar esto, por lo que se recomienda solicitar directamente a los clientes mcp que usen un perfil de AWS específico.

📋 Flujo de usuario:

  1. Configura mcp.json como se indica arriba
  2. Configura la clave API, o inicia sesión en un perfil específico usando aws sso login
  3. ¡Haz preguntas relacionadas con AWS al cliente mcp! Y asegúrate de solicitarle que use un perfil específico.

Ejecutar el servidor MCP localmente

./target/release/use_aws_mcp

El servidor se comunica mediante stdin/stdout usando el protocolo JSON-RPC.

Descripciones de comandos

El servidor proporciona descripciones legibles para humanos de los comandos de AWS CLI. Puedes ver esto en acción ejecutando el ejemplo:

cargo run --example description_demo

Esto generará algo como:

Running aws cli command:

Service name: s3
Operation name: list-buckets
Parameters: 
- max-items: "10"
- query: "Buckets[].Name"
Profile name: development
Region: us-west-2
Label: List S3 buckets with query

✅ This command is read-only (no acceptance required)

🛠️ Especificación de la herramienta

El servidor proporciona una única herramienta llamada use_aws con el siguiente esquema:

{
  "name": "use_aws",
  "description": "Execute AWS CLI commands with proper parameter handling and safety checks",
  "inputSchema": {
    "type": "object",
    "properties": {
      "service_name": {
        "type": "string",
        "description": "AWS service name (e.g., s3, ec2, lambda)"
      },
      "operation_name": {
        "type": "string",
        "description": "AWS CLI operation name (e.g., list-buckets, describe-instances)"
      },
      "parameters": {
        "type": "object",
        "description": "Optional parameters for the AWS CLI command",
        "additionalProperties": true
      },
      "region": {
        "type": "string",
        "description": "AWS region (e.g., us-west-2, eu-west-1)"
      },
      "profile_name": {
        "type": "string",
        "description": "Optional AWS profile name"
      },
      "label": {
        "type": "string",
        "description": "Optional label for the operation"
      }
    },
    "required": ["service_name", "operation_name", "region"]
  }
}

📚 Ejemplos

Listar buckets de S3

{
  "name": "use_aws",
  "arguments": {
    "service_name": "s3",
    "operation_name": "ls",
    "region": "us-west-2"
  }
}

Describir instancias de EC2

{
  "name": "use_aws",
  "arguments": {
    "service_name": "ec2",
    "operation_name": "describe-instances",
    "region": "us-west-2",
    "parameters": {
      "instance-ids": "i-1234567890abcdef0"
    }
  }
}

Listar funciones de Lambda con perfil

{
  "name": "use_aws",
  "arguments": {
    "service_name": "lambda",
    "operation_name": "list-functions",
    "region": "us-west-2",
    "profile_name": "development"
  }
}

🛡️ Características de seguridad

Detección de operaciones de solo lectura

El servidor detecta automáticamente operaciones de solo lectura basándose en el prefijo del nombre de la operación:

  • Prefijos de solo lectura: get, describe, list, ls, search, batch_get
  • Operaciones de escritura: Todas las demás operaciones requieren aceptación explícita del usuario

Truncamiento de salida

Las salidas grandes se truncan automáticamente para evitar problemas de memoria, con un tamaño máximo de respuesta de 100KB.

Desarrollo

Ejecutar pruebas

cargo test

🔨 Compilación para desarrollo

cargo build

Ejecutar con registro

RUST_LOG=use_aws=debug cargo run

Ejemplos

# Run the description demo
cargo run --example description_demo

Arquitectura

El proyecto está estructurado de la siguiente manera:

  • src/lib.rs: Biblioteca principal con tipos y constantes
  • src/error.rs: Tipos de manejo de errores
  • src/use_aws.rs: Funcionalidad principal de AWS CLI (replicada del original)
  • src/mcp_server.rs: Implementación del servidor MCP
  • src/main.rs: Punto de entrada del binario
  • examples/description_demo.rs: Ejemplo que demuestra las descripciones de comandos

📦 Dependencias

Si no tienes Cargo (el gestor de paquetes de Rust) instalado, puedes obtenerlo instalando Rust usando rustup:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Sigue las instrucciones en pantalla para completar la instalación. Después de la instalación, reinicia tu terminal y asegúrate de que Cargo esté disponible ejecutando:

cargo --version

Deberías ver la versión instalada de Cargo impresa.

Este proyecto se distribuye como un crate de Rust. Las siguientes dependencias son gestionadas automáticamente por Cargo:

  • tokio
  • serde
  • serde_json
  • eyre
  • bstr
  • convert_case
  • async-trait
  • thiserror
  • tracing
  • tracing-subscriber
  • crossterm

dependencias de prueba/desarrollo:

  • tokio-test

No necesitas instalarlas manualmente; Cargo se encargará de ellas durante la instalación.

📄 Licencia

MIT, Apache-2.0

🤝 Contribuciones

  1. Haz un fork del repositorio
  2. Crea una rama de características
  3. Realiza tus cambios
  4. Añade pruebas
  5. Envía una solicitud de extracción (pull request)

🔒 Seguridad

Este servidor ejecuta comandos de AWS CLI, lo que puede tener implicaciones de seguridad:

  • Asegura credenciales y permisos adecuados de AWS
  • Revisa todos los comandos antes de ejecutarlos
  • Usa operaciones de solo lectura cuando sea posible
  • Considera ejecutar en un entorno restringido

🔧 Solución de problemas

Problemas comunes

  1. AWS CLI no encontrado: Asegúrate de que AWS CLI esté instalado y en PATH
  2. Permiso denegado: Verifica las credenciales y permisos de AWS
  3. Región no válida: Verifica que el nombre de la región sea correcto
  4. Errores de parámetros: Verifica los nombres y valores de los parámetros

Modo de depuración

Ejecuta con registro de depuración para ver información detallada:

RUST_LOG=use_aws=debug ./target/release/use_aws

Referencias