cloud-tools
Análise de custos, inventário e desperdícios em múltiplas nuvens via MCP: AWS, GCP, Cloudflare e OVH.
Documentação
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.
| Ferramenta | AWS | GCP | Cloudflare | OVH |
|---|---|---|---|---|
check_access | reporta configuração para todas as quatro | |||
get_costs | sim | precisa de uma tabela de faturamento | sim | sim |
compare_costs | sim | precisa de uma tabela de faturamento | — | — |
get_inventory | — | sim | sim | sim |
get_waste | sim | sim | — | — |
get_commitments | sim | sim | — | — |
get_recommendations | — | sim | — | — |
get_cross_cloud_summary | toda 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:
| cobertura | significado |
|---|---|
complete | Nada 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:
AWS_ACCESS_KEY_IDeAWS_SECRET_ACCESS_KEY~/.aws/credentials, perfil deAWS_PROFILE, caso contrário[default]- Uma função de tarefa ECS
- 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ável | Finalidade |
|---|---|
CLOUD_TOOLS_GCP_PROJECTS | IDs de projeto separados por vírgula para consultar |
CLOUD_TOOLS_GCP_BILLING_TABLE | Exportaçã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.gzarquivos sob os nomes antigos de assets, e@munhq/cloud-toolsnão está no npm. Os três comandos abaixo começam a funcionar no momento em quev0.2.0for 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, viarmcphttp— 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.