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

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.

Ela 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_accessreporta configuração para todas as quatro
get_costssimprecisa de uma tabela de faturamentosimsim
compare_costssimprecisa de uma tabela de faturamento
get_inventorysimsimsim
get_wastesimsim
get_commitmentssimsim
get_recommendationssim
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, para que um agente não interprete 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 completamente 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 a primeira correspondência:

  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. Ociosidade e superdimensionamento vêm das séries de CPU do CloudWatch, então são medidos em vez de adivinhados.

GCP

Credenciais padrão do 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 projeto 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 enviou .tar.gz arquivos sob 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 lançamento 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 lançamento. 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 transmití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 treze ferramentas acima diretamente e raciocina sobre os resultados.

Para incorporá-lo em vez disso, 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 contra 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. 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 com servidores externos 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 que não seja baixado novamente a cada execução. Esse cache contém um programa, nunca seus dados ou suas 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 sete 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.