cloud-tools
Análisis de costos, inventario y desperdicio multi-nube a través de MCP: AWS, GCP, Cloudflare y OVH.
Documentación
Análisis de costos, inventario y desperdicio multi-nube en Rust — expuesto como un servidor MCP para que un agente de IA pueda consultar gastos y desperdicios directamente, y como una API HTTP para todo lo demás.
Reporta gastos y desperdicios: instancias inactivas, nodos sobredimensionados, hardware de generación anterior, recursos no asociados y compromisos que no estás utilizando.
Ocho herramientas, una forma
Cada herramienta toma cloud y nada más de lo que no necesita. Las credenciales nunca aparecen en una llamada de herramienta — el servidor las lee de su propio entorno, por lo que el agente nunca maneja un secreto ni necesita que se le indique uno.
{ "cloud": "aws" }
{ "cloud": "gcp" }
Comienza con check_access. No toma argumentos, no contacta ninguna nube y reporta qué nubes puede alcanzar este servidor y qué falta para las que no puede.
| Herramienta | AWS | GCP | Cloudflare | OVH |
|---|---|---|---|---|
check_access | reporta configuración para las cuatro | |||
get_costs | sí | necesita una tabla de facturación | sí | sí |
compare_costs | sí | necesita una tabla de facturación | — | — |
get_inventory | — | sí | sí | sí |
get_waste | sí | sí | — | — |
get_commitments | sí | sí | — | — |
get_recommendations | — | sí | — | — |
get_cross_cloud_summary | cada nube que el servidor pueda alcanzar |
Un guion no es un resultado vacío silencioso. La herramienta responde, por ejemplo, waste analysis is not implemented for ovh; supported: aws, gcp, por lo que un agente no puede interpretar una brecha como un resultado limpio.
Leyendo un cero correctamente
get_waste y get_inventory devuelven un campo coverage y una lista errors. Un total de cero significa una de dos cosas completamente diferentes:
| cobertura | significado |
|---|---|
complete | Nada se desperdicia. |
PARTIAL — N API call(s) failed… | Parte de la cuenta no pudo ser leída. |
Un resultado parcial no es un certificado de salud limpio.
Configurando el servidor
Las credenciales se leen del entorno de la máquina que ejecuta cloud-tools. Nada se almacena y cada llamada es de solo lectura.
AWS
Se resuelve en este orden, ganando la primera coincidencia:
AWS_ACCESS_KEY_IDyAWS_SECRET_ACCESS_KEY~/.aws/credentials, perfil deAWS_PROFILE, de lo contrario[default]- Un rol de tarea ECS
- Un rol de instancia EC2
Un perfil solo-SSO no se lee directamente. Expórtalo primero: aws configure export-credentials --profile <name> --format env.
Para escanear una cuenta diferente, pasa un rol a asumir. Un ARN de rol no es un secreto, por lo que permanece como argumento:
{ "cloud": "aws", "target": { "role_arn": "arn:aws:iam::…:role/ReadOnly" } }
CLOUD_TOOLS_AWS_ROLE_ARN y CLOUD_TOOLS_AWS_EXTERNAL_ID establecen un valor predeterminado para eso, si cada llamada debe asumir el mismo rol.
get_waste lee instancias EC2, volúmenes, instantáneas, AMIs, IPs elásticas, pares de claves e instancias reservadas; RDS; S3; Lambda; DynamoDB; ECS; ElastiCache; balanceadores de carga; puertas de enlace NAT; grupos de registros de CloudWatch sin retención; y Compute Optimizer. Los inactivos y sobredimensionados provienen de series de CPU de CloudWatch, por lo que se miden en lugar de adivinarse.
GCP
Credenciales predeterminadas de la aplicación — gcloud auth application-default login es suficiente — o GOOGLE_APPLICATION_CREDENTIALS apuntando a un archivo de cuenta de servicio.
| Variable | Propósito |
|---|---|
CLOUD_TOOLS_GCP_PROJECTS | IDs de proyectos separados por comas para consultar |
CLOUD_TOOLS_GCP_BILLING_TABLE | Exportación de facturación de BigQuery, project.dataset.table |
Los proyectos también se pueden elegir por llamada con target.project_ids, que es cómo un agente escanea varios.
billing_table importa. Google no publica una API de gastos por servicio, por lo que los costos reales provienen de la exportación de facturación de BigQuery. Sin ella, get_costs recurre a la API de Presupuestos y etiqueta el resultado como "source": "budgets" con una nota que dice que estos son montos de presupuesto, no gastos. compare_costs lo requiere directamente.
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
Instalación
Aún no publicado. La etiqueta más reciente es
v0.1.0, que incluyó.tar.gzarchivos bajo los nombres de activos antiguos, y@munhq/cloud-toolsno está en npm. Los tres comandos a continuación comienzan a funcionar en el momento en que se etiquetev0.2.0. Hasta entonces, compila desde la fuente:cargo build --release.
Como servidor MCP
claude mcp add cloud-tools -- npx -y @munhq/cloud-tools
Cualquier cosa que lea una configuración JSON — Claude Desktop, Cursor, Windsurf, Zed, Cline:
{ "mcpServers": { "cloud-tools": { "command": "npx", "args": ["-y", "@munhq/cloud-tools"] } } }
El paquete npm es un pequeño envoltorio, porque el servidor es un binario compilado y no JavaScript. Al instalarse, resuelve el activo de lanzamiento para tu plataforma, lo verifica contra el SHA256SUMS publicado, lo almacena en caché bajo ~/.cache/cloud-tools/bin/ y lo ejecuta.
Como binario
Binarios precompilados para Linux, macOS y Windows, x86_64 y arm64, están adjuntos a cada lanzamiento. El script a continuación descarga el de tu máquina y lo verifica contra SHA256SUMS:
curl -sSL https://raw.githubusercontent.com/munhq/cloud-tools/main/install.sh | bash
O toma un solo activo directamente:
curl -fsSLO https://github.com/munhq/cloud-tools/releases/latest/download/cloud-tools-x86_64-linux
chmod +x cloud-tools-x86_64-linux
Como contenedor
docker run -i --rm \
-e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_REGION \
munhq/cloud-tools
Ejecutándolo
Construido como una biblioteca (cloud_tools) con un binario opcional. Dos indicadores de características, ambos activados por defecto:
mcp— servidor MCP sobre stdio y HTTP transmisible, víarmcphttp— API HTTP vía axum
cargo build --release
./target/release/cloud-tools # MCP server on stdio
Como servidor MCP se conecta a cualquier agente compatible con MCP. El agente llama directamente a las trece herramientas anteriores y razona sobre los resultados.
Para incrustarlo en su lugar, depende de la biblioteca y desactiva las características del binario:
cloud-tools = { git = "https://github.com/munhq/cloud-tools", default-features = false }
Estado
Funcionando y utilizado contra cuentas reales de AWS, GCP, Cloudflare y OVH. El análisis de desperdicio existe solo para AWS y GCP — Cloudflare y OVH no tienen ninguno, no meramente menos reglas, y get_waste lo dice en lugar de devolver una lista vacía. AWS aún no tiene herramienta de inventario, aunque las llamadas de listado detrás de una ya existen. Se agradecen contribuciones que agreguen cobertura de proveedores.
Política de privacidad
cloud-tools no recopila nada. No hay telemetría, ni análisis, ni llamadas a casa de ningún tipo — verificado por el hecho de que los únicos hosts en el código fuente son las API de los proveedores de nube más github.com, que el envoltorio npm usa para descargar el binario para tu plataforma.
Lo que se recopila. Nada. Sin cuenta, sin registro, sin identificador.
Lo que se procesa, y dónde. Las credenciales que pasas se usan para firmar solicitudes a tu propio proveedor de nube y se mantienen en memoria durante la vida de esa llamada. El servidor se ejecuta en tu máquina, por lo que nada se envía a munhq ni a ningún tercero. Las respuestas regresan al cliente MCP que las solicitó y a ningún otro lugar.
Almacenamiento y retención. Nada se escribe en disco y nada se retiene. La única excepción es el envoltorio npm, que almacena en caché el binario descargado bajo ~/.cache/cloud-tools/bin/ para que no se vuelva a buscar en cada ejecución. Esa caché contiene un programa, nunca tus datos ni tus credenciales.
Registro. Los diagnósticos van a stderr, que tu cliente MCP captura. Las credenciales nunca se registran. Los mensajes de error citan la respuesta del propio proveedor, que puede nombrar un proyecto, un ID de cuenta o un recurso — la misma información que se solicitó a la herramienta que reportara.
Compartición con terceros. Ninguna. Los únicos destinos de red son las API de nube de los proveedores cuyas credenciales suministras: AWS (*.amazonaws.com), Google Cloud (*.googleapis.com), Cloudflare (api.cloudflare.com) y OVH (*.api.ovh.com, api.us.ovhcloud.com).
Permisos. Solo lectura es suficiente para cada herramienta. Las siete declaran readOnlyHint: true, y nada en este servidor crea, modifica o elimina un recurso de nube.
Contacto. hello@munhq.com. La versión canónica de esta política está en https://munhq.com/privacy/cloud-tools.
Licencia
Apache-2.0. Ver LICENCIA.