AWS CLI

Interaja com os serviços da AWS usando a AWS CLI. Requer que a AWS CLI esteja instalada e configurada.

Documentação

Servidor MCP use_aws

🌟 amazon-q-cli é ótimo, e é ótimo porque tem use_aws ferramenta MCP para interagir com a API da AWS.

💡 Não seria ainda melhor se esta use_aws fosse portátil e pudesse ser usada em diferentes ferramentas de IA, independentemente de qual você está usando atualmente?

use_aws_mcp é um servidor Model Context Protocol (MCP) autônomo que fornece funcionalidade da AWS CLI através de uma interface padronizada.
Este servidor replica a funcionalidade da ferramenta use_aws do Amazon Q Developer CLI.

🎬 Demonstração

  • Uso com Avante, MCPHub no nvim
    Demo: Avante

  • Uso com Cursor
    Demo: Cursor

✨ Recursos

  • Integração com AWS CLI: Execute comandos da AWS CLI com tratamento adequado de parâmetros
  • Verificações de Segurança: Detecção automática de operações somente leitura vs. operações de escrita
  • Gerenciamento de User Agent: Configuração adequada do user agent da AWS CLI para rastreamento
  • Formatação de Parâmetros: Conversão automática de parâmetros para kebab-case para compatibilidade com a CLI
  • Tratamento de Erros: Tratamento abrangente de erros e formatação de saída
  • Protocolo MCP: Conformidade total com o Model Context Protocol
  • Descrições Legíveis por Humanos: Descrições ricas de comandos usando formatação de terminal

📦 Instalação

📋 Pré-requisitos

  • 🦀 Rust (1.70 ou posterior), Cargo
    • para MacOS e Linux, instale com curl https://sh.rustup.rs -sSf | sh
  • ☁️ AWS CLI instalada e configurada
  • 🔑 Credenciais AWS configuradas (via AWS CLI, variáveis de ambiente ou papéis IAM)

🔨 Compilação

cargo build --release

O binário estará disponível em target/release/use_aws.

🚀 Uso

🔗 Integração com Cliente MCP

Para usar este servidor com um cliente MCP, primeiro instale-o usando Cargo:

cargo install use_aws_mcp

Em seguida, configure seu cliente MCP com:

{
  "mcpServers": {
    "use_aws_mcp": {
      "name": "use_aws_mcp",
      "command": "use_aws_mcp",
      "timeout": 300,
      "env": {},
      "disabled": false
    }
  }
}

⚠️ Observação Importante sobre o Uso do Cliente MCP

Com o q cli, os clientes MCP são processos de shell, então variáveis de ambiente de credenciais como AWS_DEFAULT_PROFILE são transferidas automaticamente para o servidor MCP.

No entanto, clientes MCP que não são shell, como o cursor, não podem aproveitar isso, então é recomendável solicitar que os clientes MCP usem diretamente um perfil AWS específico.

📋 Fluxo do Usuário:

  1. Configure o mcp.json acima
  2. Defina a chave de API ou faça login em um perfil específico usando aws sso login
  3. Faça perguntas relacionadas à AWS ao cliente MCP! E certifique-se de solicitar que ele use o perfil específico.

Executando o Servidor MCP Localmente

./target/release/use_aws_mcp

O servidor se comunica via stdin/stdout usando o protocolo JSON-RPC.

Descrições de Comandos

O servidor fornece descrições legíveis por humanos dos comandos da AWS CLI. Você pode ver isso em ação executando o exemplo:

cargo run --example description_demo

Isso produzirá 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)

🛠️ Especificação da Ferramenta

O servidor fornece uma única ferramenta chamada use_aws com o seguinte 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"]
  }
}

📚 Exemplos

Listar Buckets S3

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

Descrever Instâncias EC2

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

Listar Funções Lambda com Perfil

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

🛡️ Recursos de Segurança

Detecção de Operações Somente Leitura

O servidor detecta automaticamente operações somente leitura com base no prefixo do nome da operação:

  • Prefixos somente leitura: get, describe, list, ls, search, batch_get
  • Operações de escrita: Todas as outras operações exigem aceitação explícita do usuário

Truncamento de Saída

Saídas grandes são truncadas automaticamente para evitar problemas de memória, com um tamanho máximo de resposta de 100KB.

Desenvolvimento

Executando Testes

cargo test

🔨 Compilação para Desenvolvimento

cargo build

Executando com Logging

RUST_LOG=use_aws=debug cargo run

Exemplos

# Run the description demo
cargo run --example description_demo

Arquitetura

O projeto está estruturado da seguinte forma:

  • src/lib.rs: Biblioteca principal com tipos e constantes
  • src/error.rs: Tipos de tratamento de erros
  • src/use_aws.rs: Funcionalidade principal da AWS CLI (replicada do original)
  • src/mcp_server.rs: Implementação do servidor MCP
  • src/main.rs: Ponto de entrada do binário
  • examples/description_demo.rs: Exemplo demonstrando descrições de comandos

📦 Dependências

Se você não tiver o Cargo (o gerenciador de pacotes do Rust) instalado, pode obtê-lo instalando o Rust usando rustup:

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

Siga as instruções na tela para concluir a instalação. Após a instalação, reinicie seu terminal e certifique-se de que o Cargo esteja disponível executando:

cargo --version

Você deverá ver a versão instalada do Cargo impressa.

Este projeto é distribuído como uma crate Rust. As seguintes dependências são gerenciadas automaticamente pelo Cargo:

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

dependências de teste/desenvolvimento:

  • tokio-test

Você não precisa instalá-las manualmente; o Cargo cuidará delas durante a instalação.

📄 Licença

MIT, Apache-2.0

🤝 Contribuindo

  1. Faça um fork do repositório
  2. Crie um branch de funcionalidade
  3. Faça suas alterações
  4. Adicione testes
  5. Envie um pull request

🔒 Segurança

Este servidor executa comandos da AWS CLI, o que pode ter implicações de segurança:

  • Garanta credenciais e permissões AWS adequadas
  • Revise todos os comandos antes da execução
  • Use operações somente leitura quando possível
  • Considere executar em um ambiente restrito

🔧 Solução de Problemas

Problemas Comuns

  1. AWS CLI não encontrada: Certifique-se de que a AWS CLI esteja instalada e no PATH
  2. Permissão negada: Verifique as credenciais e permissões AWS
  3. Região inválida: Verifique se o nome da região está correto
  4. Erros de parâmetros: Verifique nomes e valores dos parâmetros

Modo de Depuração

Execute com logging de depuração para ver informações detalhadas:

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

Referências