cloud-tools

Análise de custos, inventário e desperdícios em múltiplas nuvens via MCP: AWS, GCP, Cloudflare e OVH.

Documentação

cloud-tools

MCP Registry Smithery Glama

Install in Cursor Install in VS Code

Análise de custo, inventário e desperdício multi-nuvem em Rust — exposta como um servidor MCP para que um agente de IA possa consultar gastos e desperdícios diretamente, e como uma API HTTP para todo o resto.

Ele reporta gastos e desperdícios: instâncias ociosas, nós superdimensionados, hardware de geração anterior, recursos não anexados e compromissos que você não está usando.

Oito ferramentas, um formato

Toda ferramenta recebe cloud e nada mais do que precisa. Credenciais nunca aparecem em uma chamada de ferramenta — o servidor as lê do próprio ambiente, então o agente nunca lida com um segredo e nunca precisa receber um.

{ "cloud": "aws" }
{ "cloud": "gcp" }

Comece com check_access. Ela não recebe argumentos, não contata nenhuma nuvem e informa quais nuvens este servidor consegue alcançar e o que está faltando para as que não consegue.

FerramentaAWSGCPCloudflareOVH
check_accessinforma a configuração para todas as quatro
get_costssimprecisa de uma tabela de faturamentosimsim
compare_costssimprecisa de uma tabela de faturamento——
get_inventory—simsimsim
get_wastesimsim——
get_commitmentssimsim——
get_recommendations—sim——
get_cross_cloud_summarytoda nuvem que o servidor consegue alcançar

Um travessão não é um resultado vazio silencioso. A ferramenta responde, por exemplo, waste analysis is not implemented for ovh; supported: aws, gcp, então um agente não pode interpretar uma lacuna como um atestado de saúde.

Lendo um zero corretamente

get_waste e get_inventory retornam um campo coverage e uma lista errors. Um total zero significa uma de duas coisas totalmente diferentes:

coberturasignificado
completeNada está sendo desperdiçado.
PARTIAL — N API call(s) failed…Parte da conta não pôde ser lida.

Um resultado parcial não é um atestado de saúde.

Configurando o servidor

As credenciais são lidas do ambiente da máquina que executa o cloud-tools. Nada é armazenado, e toda chamada é somente leitura.

AWS

Resolvido nesta ordem, vence o primeiro encontrado:

  1. AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY
  2. ~/.aws/credentials, perfil de AWS_PROFILE, caso contrário [default]
  3. Uma função de tarefa ECS
  4. Uma função de instância EC2

Um perfil somente SSO não é lido diretamente. Exporte-o primeiro: aws configure export-credentials --profile <name> --format env.

Para escanear uma conta diferente, passe uma função para assumir. Um ARN de função não é um segredo, então permanece como argumento:

{ "cloud": "aws", "target": { "role_arn": "arn:aws:iam::…:role/ReadOnly" } }

CLOUD_TOOLS_AWS_ROLE_ARN e CLOUD_TOOLS_AWS_EXTERNAL_ID definem um padrão para isso, se toda chamada deve assumir a mesma função.

get_waste lê instâncias EC2, volumes, snapshots, AMIs, IPs Elásticos, pares de chaves e instâncias reservadas; RDS; S3; Lambda; DynamoDB; ECS; ElastiCache; balanceadores de carga; gateways NAT; grupos de logs do CloudWatch sem retenção; e Compute Optimizer. Instâncias ociosas e superdimensionadas vêm das séries de CPU do CloudWatch, então são medidas em vez de estimadas.

GCP

Credenciais padrão de aplicativo — gcloud auth application-default login é suficiente — ou GOOGLE_APPLICATION_CREDENTIALS apontando para um arquivo de conta de serviço.

VariávelFinalidade
CLOUD_TOOLS_GCP_PROJECTSIDs de projetos separados por vírgula para consultar
CLOUD_TOOLS_GCP_BILLING_TABLEExportação de faturamento do BigQuery, project.dataset.table

Os projetos também podem ser escolhidos por chamada com target.project_ids, que é como um agente escaneia vários.

billing_table importa. O Google não publica uma API de gastos por serviço, então os custos reais vêm da exportação de faturamento do BigQuery. Sem ela, get_costs recorre à API de Orçamentos e rotula o resultado como "source": "budgets" com uma nota dizendo que são valores de orçamento, não gastos. compare_costs exige isso diretamente.

Cloudflare

CLOUDFLARE_API_TOKEN     a token with read access to account resources
CLOUDFLARE_ACCOUNT_ID

OVH

OVH_APPLICATION_KEY
OVH_APPLICATION_SECRET
OVH_CONSUMER_KEY
OVH_ENDPOINT             ovh-eu (default), ovh-us or ovh-ca

Instalação

Ainda não lançado. A tag mais recente é v0.1.0, que publicou .tar.gz arquivos com os nomes antigos de assets, e @munhq/cloud-tools não está no npm. Os três comandos abaixo começam a funcionar no momento em que v0.2.0 for marcado. Até lá, compile a partir do código-fonte: cargo build --release.

Como servidor MCP

claude mcp add cloud-tools -- npx -y @munhq/cloud-tools

Qualquer coisa que leia um JSON de configuração — Claude Desktop, Cursor, Windsurf, Zed, Cline:

{ "mcpServers": { "cloud-tools": { "command": "npx", "args": ["-y", "@munhq/cloud-tools"] } } }

O pacote npm é um pequeno wrapper, porque o servidor é um binário compilado e não JavaScript. Na instalação, ele resolve o asset de release para sua plataforma, verifica-o contra o SHA256SUMS publicado, armazena-o em cache sob ~/.cache/cloud-tools/bin/ e o executa.

Como binário

Binários pré-compilados para Linux, macOS e Windows, x86_64 e arm64, estão anexados a cada release. O script abaixo baixa o da sua máquina e o verifica contra SHA256SUMS:

curl -sSL https://raw.githubusercontent.com/munhq/cloud-tools/main/install.sh | bash

Ou pegue um único asset diretamente:

curl -fsSLO https://github.com/munhq/cloud-tools/releases/latest/download/cloud-tools-x86_64-linux
chmod +x cloud-tools-x86_64-linux

Como contêiner

docker run -i --rm \
  -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_REGION \
  munhq/cloud-tools

Executando

Construído como uma biblioteca (cloud_tools) com um binário opcional. Duas flags de recurso, ambas ativadas por padrão:

  • mcp — servidor MCP via stdio e HTTP transmissível, via rmcp
  • http — API HTTP via axum
cargo build --release
./target/release/cloud-tools            # MCP server on stdio

Como servidor MCP, ele se conecta a qualquer agente compatível com MCP. O agente chama as ferramentas acima diretamente e raciocina sobre os resultados.

Para incorporá-lo, dependa da biblioteca e desative os recursos do binário:

cloud-tools = { git = "https://github.com/munhq/cloud-tools", default-features = false }

Status

Funcionando e usado em contas reais de AWS, GCP, Cloudflare e OVH. A análise de desperdício existe apenas para AWS e GCP — Cloudflare e OVH não têm nenhuma, não apenas menos regras, e get_waste diz isso em vez de retornar uma lista vazia. A AWS ainda não tem ferramenta de inventário, embora as chamadas de listagem por trás dela já existam. Contribuições adicionando cobertura de provedores são bem-vindas.

Política de Privacidade

O cloud-tools não coleta nada. Não há telemetria, nem análise, nem comunicação de qualquer tipo — verificado pelo fato de que os únicos hosts no código-fonte são as APIs dos provedores de nuvem mais github.com, que o wrapper npm usa para baixar o binário para sua plataforma.

O que é coletado. Nada. Sem conta, sem cadastro, sem identificador.

O que é processado, e onde. As credenciais que você passa são usadas para assinar solicitações ao seu próprio provedor de nuvem e são mantidas em memória durante a vida dessa chamada. O servidor roda na sua máquina, então nada é enviado à munhq ou a terceiros. As respostas voltam ao cliente MCP que as solicitou e a nenhum outro lugar.

Armazenamento e retenção. Nada é gravado em disco e nada é retido. A única exceção é o wrapper npm, que armazena em cache o binário baixado sob ~/.cache/cloud-tools/bin/ para não ser rebaixado a cada execução. Esse cache contém um programa, nunca seus dados ou credenciais.

Registro de logs. Os diagnósticos vão para o stderr, que seu cliente MCP captura. Credenciais nunca são registradas. Mensagens de erro citam a resposta do próprio provedor, que pode nomear um projeto, um ID de conta ou um recurso — as mesmas informações que a ferramenta foi solicitada a reportar.

Compartilhamento com terceiros. Nenhum. Os únicos destinos de rede são as APIs de nuvem dos provedores cujas credenciais você fornece: AWS (*.amazonaws.com), Google Cloud (*.googleapis.com), Cloudflare (api.cloudflare.com) e OVH (*.api.ovh.com, api.us.ovhcloud.com).

Permissões. Somente leitura é suficiente para toda ferramenta. Todas as oito declaram readOnlyHint: true, e nada neste servidor cria, modifica ou exclui um recurso de nuvem.

Contato. hello@munhq.com. A versão canônica desta política está em https://munhq.com/privacy/cloud-tools.

Licença

Apache-2.0. Veja LICENSE.