cloud-tools

Análisis de costos, inventario y desperdicio multi-nube a través de MCP: AWS, GCP, Cloudflare y OVH.

Documentación

cloud-tools

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.

HerramientaAWSGCPCloudflareOVH
check_accessreporta configuración para las cuatro
get_costsnecesita una tabla de facturación
compare_costsnecesita una tabla de facturación
get_inventory
get_waste
get_commitments
get_recommendations
get_cross_cloud_summarycada 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:

coberturasignificado
completeNada 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:

  1. AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY
  2. ~/.aws/credentials, perfil de AWS_PROFILE, de lo contrario [default]
  3. Un rol de tarea ECS
  4. 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.

VariablePropósito
CLOUD_TOOLS_GCP_PROJECTSIDs de proyectos separados por comas para consultar
CLOUD_TOOLS_GCP_BILLING_TABLEExportació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.gz archivos bajo los nombres de activos antiguos, y @munhq/cloud-tools no está en npm. Los tres comandos a continuación comienzan a funcionar en el momento en que se etiquete v0.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ía rmcp
  • http — 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.