Cloudability API
Un servidor completo del Protocolo de Contexto del Modelo (MCP) para la API de Cloudability, que ofrece gestión avanzada de costos, análisis de contenedores de Kubernetes y capacidades de previsión presupuestaria.
Documentación
Servidor MCP de Cloudability
Un servidor integral del Model Context Protocol (MCP) para la API de Cloudability, que ofrece capacidades avanzadas de gestión de costos, análisis de contenedores Kubernetes y previsión de presupuestos.
🌟 ¿Por qué usar este servidor MCP?
- 🔥 Prioridad a contenedores: Asignación y monitoreo integral de costos de Kubernetes
- 📊 Analítica avanzada: 15 dimensiones, 8 métricas, filtrado y agrupación flexibles
- 💰 Gestión de presupuestos: Ciclo de vida completo de presupuestos con previsión y alertas
- 🚀 Listo para producción: Cobertura total de pruebas, seguridad de tipos y manejo de errores
- 🌍 Multirregión: Soporte para las regiones de Cloudability en EE. UU., UE, APAC y ME
- 🔐 Autenticación flexible: Tokens Bearer, autenticación Basic heredada o claves API de Frontdoor para adquisición automática de tokens
🚀 Inicio rápido
Requisitos previos
- Python 3.14+ (necesario para anotaciones de tipos modernas)
- uv (administrador de paquetes recomendado)
- Acceso a la API de Cloudability (token Bearer, clave API o claves API de Frontdoor en
.env)
Instalación
# Clone the repository
git clone https://github.com/eelzinaty/cloudability-mcp-server.git
cd cloudability-mcp-server
# Install uv if you haven't already
curl -LsSf https://astral.sh/uv/install.sh | sh
# Install dependencies
uv sync
# Set up configuration
cp .env.example .env
# Edit .env with your Cloudability credentials
# Run the server
uv run python main.py
Configuración del cliente MCP
Agregue a la configuración de su cliente MCP:
{
"mcpServers": {
"cloudability": {
"command": "uv",
"args": ["run", "python", "main.py"],
"cwd": "/path/to/cloudability-mcp-server",
"env": {
"CLOUDABILITY_API_URL": "https://api.cloudability.com/v3",
"CLOUDABILITY_ENVIRONMENT_ID": "your-environment-id",
"CLOUDABILITY_DEFAULT_VIEW_ID": "12345",
"CLOUDABILITY_KEY_ACCESS": "your-public-key",
"CLOUDABILITY_KEY_SECRET": "your-private-key",
"CLOUDABILITY_FRONTDOOR_URL": "https://frontdoor.apptio.com/service/apikeylogin"
}
}
}
}
Características
🚀 Cobertura integral de la API
- 🔥 Asignación de costos de contenedores: Asignación y monitoreo integral de costos de Kubernetes
- 🔥 Aprovisionamiento de contenedores: Configuración de clústeres e implementación del agente de métricas
- 🔥 Analítica de contenedores: Patrones de uso, asignación de recursos y análisis de eficiencia
- 🔥 Descubrimiento de contenedores: Etiquetas e inventario de recursos mediante containers_report
- Informes de costos: Análisis de costos flexible y potente con 15 dimensiones y 8 métricas
- Informes asincrónicos: Ponga en cola informes de larga duración para procesamiento en segundo plano
- Presupuestos y previsión: Gestión del ciclo de vida completo de presupuestos y predicciones de gastos
- Suscripciones a presupuestos: Notificaciones por correo electrónico para umbrales de presupuesto
- Estimaciones: Proyecciones de gastos del mes actual con desgloses detallados
- Previsiones: Analítica predictiva de varios meses con intervalos de confianza
- Cuentas de proveedores: Liste las cuentas de credenciales de proveedores de nube (AWS, Azure, GCP, IBM, OCI)
🔐 Autenticación flexible
- Token Bearer: Autenticación moderna apptio-opentoken
- Claves API de Frontdoor: Adquisición automática de apptio-opentoken cuando las claves están configuradas en el entorno
- Autenticación Basic: Autenticación tradicional con clave API
- Soporte multirregión: Puntos de conexión de API y de inicio de sesión de Frontdoor de Cloudability en EE. UU., UE, APAC y ME
📊 Analítica avanzada
- Filtrado enriquecido: Filtre por clúster, espacio de nombres, tipo de carga de trabajo y más
- Agrupación flexible: Agrupe resultados por múltiples dimensiones
- Ordenación y paginación: Maneje conjuntos de datos grandes de manera eficiente
- Múltiples tipos de widgets: Soporte para tablas, KPI, gráficos y series temporales
🛠️ Experiencia del desarrollador
- Marco FastMCP: Implementación moderna del servidor MCP
- Pruebas integrales: Cobertura total de pruebas con simulación
- Seguridad de tipos: Anotaciones de tipos completas para mejor soporte del IDE
- Arquitectura limpia: Lógica de negocio separada para mantenibilidad
Instalación
Este proyecto utiliza uv para la gestión de dependencias. Asegúrese de tener uv instalado.
# Install dependencies
uv sync
# Install development dependencies (for testing)
uv sync --dev
Configuración
Cree un archivo .env basado en .env.example:
# Copy the example configuration
cp .env.example .env
Variables de entorno
Copie .env.example a .env y configure las variables a continuación.
| Variable | Obligatoria | Descripción |
|---|---|---|
CLOUDABILITY_API_URL | No (el valor predeterminado es EE. UU.) | URL base de la API de Cloudability para su región |
CLOUDABILITY_ENVIRONMENT_ID | Sí (para autenticación Bearer) | ID de entorno de Access Administration |
CLOUDABILITY_KEY_ACCESS | No | Clave API pública de Frontdoor para adquisición automática de tokens |
CLOUDABILITY_KEY_SECRET | No | Clave API privada de Frontdoor (par con CLOUDABILITY_KEY_ACCESS) |
CLOUDABILITY_FRONTDOOR_URL | No (el valor predeterminado es EE. UU.) | Punto de conexión de inicio de sesión de la clave API de Frontdoor para su región |
CLOUDABILITY_DEFAULT_VIEW_ID | Sí (para herramientas de contenedores) | ID de vista predeterminado para llamadas de containers/report y clusters |
# Cloudability API Base URL (choose based on your region)
# US: https://api.cloudability.com/v3
# EU: https://api-eu.cloudability.com/v3
# APAC: https://api-au.cloudability.com/v3
# ME: https://api-me.cloudability.com/v3
CLOUDABILITY_API_URL=https://api.cloudability.com/v3
# Required for Bearer token authentication (apptio-opentoken)
# Get this from your Access Administration environment
CLOUDABILITY_ENVIRONMENT_ID=your-environment-id-here
# Optional: Frontdoor API keys for automatic apptio-opentoken acquisition
# When set, tools can omit the authorization parameter
# CLOUDABILITY_KEY_ACCESS=your-public-key-here
# CLOUDABILITY_KEY_SECRET=your-private-key-here
# Optional: Frontdoor login URL (defaults to US region)
# US: https://frontdoor.apptio.com/service/apikeylogin
# EU: https://frontdoor-eu.apptio.com/service/apikeylogin
# AU: https://frontdoor-au.apptio.com/service/apikeylogin
# CLOUDABILITY_FRONTDOOR_URL=https://frontdoor.apptio.com/service/apikeylogin
# Default view ID for containers API calls (required for containers/report and clusters)
CLOUDABILITY_DEFAULT_VIEW_ID=12345
Puntos de conexión regionales
API de Cloudability (CLOUDABILITY_API_URL)
| Región | URL |
|---|---|
| EE. UU. | https://api.cloudability.com/v3 |
| UE | https://api-eu.cloudability.com/v3 |
| APAC | https://api-au.cloudability.com/v3 |
| ME | https://api-me.cloudability.com/v3 |
Inicio de sesión de Frontdoor (CLOUDABILITY_FRONTDOOR_URL)
| Región | URL |
|---|---|
| EE. UU. | https://frontdoor.apptio.com/service/apikeylogin |
| UE | https://frontdoor-eu.apptio.com/service/apikeylogin |
| AU | https://frontdoor-au.apptio.com/service/apikeylogin |
Métodos de autenticación
1. Claves API de Frontdoor (opcional, en el servidor)
Cuando CLOUDABILITY_KEY_ACCESS y CLOUDABILITY_KEY_SECRET están configuradas, el servidor las intercambia por un apptio-opentoken mediante CLOUDABILITY_FRONTDOOR_URL. Las llamadas a herramientas pueden omitir el parámetro authorization. Configure también CLOUDABILITY_ENVIRONMENT_ID: la autenticación Bearer aún lo requiere.
2. Token Bearer
Para entornos modernos de Cloudability que usan apptio-opentoken:
- Configure
CLOUDABILITY_ENVIRONMENT_IDen su entorno - Pase
authorization: "Bearer your-apptio-opentoken"a las llamadas a herramientas (a menos que las claves de Frontdoor gestionen la autenticación por usted)
3. Autenticación Basic (heredada)
Para autenticación tradicional con clave API:
- Pase
authorization: "Basic your-api-key:"a las llamadas a herramientas - No se requiere ID de entorno
Uso
Ejecución del servidor
uv run python main.py
Recursos de referencia de MCP
Datos de referencia de solo lectura para crear informes de costos (almacenados en caché, TTL predeterminado de 15 minutos mediante CLOUDABILITY_RESOURCE_CACHE_TTL_SECONDS):
| URI | Descripción |
|---|---|
cloudability://config | Configuración del servidor (URL de API, ID de vista predeterminado, modo de autenticación: sin secretos) |
cloudability://measures | Catálogo de dimensiones y métricas de informes de costos |
cloudability://measures/allocated | Medidas compatibles con asignaciones de costos |
cloudability://filter-operators | Referencia de operadores de filtro (==, =@, []=, …) |
cloudability://saved-reports | Definiciones de informes de costos guardados |
Use resources/read en su cliente MCP, o llame a las herramientas correspondientes (get_available_measures, etc.) para obtener los mismos datos.
Herramientas disponibles
🔥 Herramientas de asignación de costos de contenedores
provision_kubernetes_cluster
Configure nuevos clústeres para el monitoreo de Cloudability con implementación automatizada del agente de métricas.
get_cluster_deployment_yaml
Obtenga la configuración de implementación para instalar el agente de métricas de Cloudability en su clúster.
containers_report
Herramienta principal de asignación de costos de contenedores: reemplaza las API retiradas /containers/allocations y /containers/counts con POST /v3/containers/report.
Características clave:
- Asignación de recursos compartidos: Métricas de costo de reparto equitativo y asignado por espacio de nombres, carga de trabajo, clúster y etiquetas
- Agrupación flexible: espacio de nombres, tipo de carga de trabajo, nombre de carga de trabajo, pod, etiquetas, etc.
- Filtrado: UUID de clúster, espacio de nombres, tipo de carga de trabajo y más
Parámetros:
group: Dimensiones de agrupación (p. ej., ["namespace"], ["cldy:labels:team"])metrics: Métricas del informe (p. ej., ["total_cost", "total_cost_efficiency"])filters: Alcance del análisis (p. ej., ["cluster==uuid", "namespace==production"])cost_type: "adjusted" o "total_adjusted_amortized"
Devuelve:
result.datafilas con dimensiones y métricas agrupadas- Paginación mediante
result.pagination.nextToken
get_container_resource_usage
Tendencias de uso diarias para planificación de capacidad y análisis de ajuste de tamaño.
discover_container_labels
Encuentre etiquetas de Kubernetes disponibles para agrupaciones personalizadas de asignación de costos.
get_detailed_cluster_info
Metadatos integrales del clúster con detalles de nodos y estado de recopilación de datos.
🚀 Herramientas principales
list_clusters
Obtenga todos los clústeres de Kubernetes con sus UUID y metadatos.
list_budgets
Obtenga todas las configuraciones de presupuestos con estado actual y umbrales.
get_budget
Obtenga información detallada del presupuesto, incluido el seguimiento de gastos y alertas.
list_aws_accounts
Obtenga las cuentas de credenciales de proveedor de AWS configuradas en Cloudability (GET /v3/vendors/AWS/accounts?viewId=0).
list_azure_accounts
Obtenga las cuentas de credenciales de proveedor de Azure configuradas en Cloudability (GET /v3/vendors/azure/accounts?viewId=0).
list_gcp_accounts
Obtenga las cuentas de credenciales de proveedor de GCP configuradas en Cloudability (GET /v3/vendors/gcp/accounts?viewId=0).
list_ibm_accounts
Obtenga las cuentas de credenciales de proveedor de IBM Cloud configuradas en Cloudability (GET /v3/vendors/ibm/accounts?viewId=0).
list_oci_accounts
Obtenga las cuentas de credenciales de proveedor de OCI configuradas en Cloudability (GET /v3/vendors/oci/accounts?viewId=0).
📊 Herramientas de presupuestos y previsión
get_spending_estimate
Proyecciones de gastos del mes actual con desgloses detallados por servicio y progresión diaria.
Características clave:
- Estimaciones de gastos en tiempo real basadas en el uso del mes hasta la fecha
- Factores de gasto a nivel de servicio (AWS EC2, RDS, etc.)
- Progresión diaria acumulada de gastos
- Comparación con los montos reales del mes anterior
- Límite de frecuencia: 10 solicitudes/usuario/minuto, 20/org/minuto
Formato de respuesta: Sobre estándar de Cloudability v3. Todos los campos están bajo result (no en el nivel superior):
{
"result": {
"estimatedSpend": 35615446.36,
"previousMonthSpend": 33819722.57,
"previousMonthFinalized": true,
"currentDate": "2026-05-24",
"cumulativeMtdSpend": [{"date": "2026-05-01", "spend": 1615288.82}],
"details": [
{
"serviceName": "Azure Compute",
"estimatedSpend": 5568954.48,
"mtdSpend": 4128094.29,
"previousMonthSpend": 5409219.11,
"usageFamily": "Instance Usage"
}
]
}
}
Use result["details"] para desgloses por proveedor o servicio (por ejemplo, filas de filtro donde serviceName comienza con Azure). Omita view_id o configúrelo desde el recurso cloudability://config default_view_id cuando use la vista predeterminada configurada del servidor (0 significa todos los datos de costos de la organización).
get_spending_forecast
Analítica predictiva de varios meses con intervalos de confianza y comparación histórica.
Parámetros:
months_back(3-24): Datos históricos para el modeladomonths_forward(1-24): Horizonte de previsiónuse_current_estimate: Incluir el mes actual en el modeloremove_credits: Excluir créditos del análisisremove_one_time_charges: Filtrar costos únicos
Devuelve: Sobre de Cloudability v3 con datos de previsión bajo result (por ejemplo, result.forecast, result.forecastDetail, result.actual, result.parameters).
create_new_budget
Cree presupuestos con umbrales mensuales y configuración de base de costos.
modify_budget
Actualice presupuestos existentes con nuevos umbrales o cambios de configuración.
remove_budget
Elimine presupuestos permanentemente del sistema.
create_budget_alert
Configure notificaciones por correo electrónico para infracciones de umbrales de presupuesto.
Tipos de notificación:
notify_exceeded: Alertas cuando el gasto real supera el presupuestonotify_expected: Alertas cuando el gasto proyectado supera el presupuesto
list_budget_alerts
Liste las suscripciones a presupuestos y las preferencias de notificación.
modify_budget_alert / remove_budget_alert
Actualice o elimine suscripciones de notificación de presupuestos.
📊 Herramientas de informes de costos
execute_cost_report
Herramienta principal de informes de costos con analítica avanzada y configuración flexible.
Características clave:
- Hasta 15 dimensiones: proveedor, región, nombre de servicio, identificador de recurso, etc.
- Hasta 8 métricas: costo total, costo amortizado, horas de uso, etc.
- Filtrado avanzado: 12 operadores (==, !=, >, <, =@, []=, etc.)
- Ordenación flexible: Múltiples columnas con ASC/DESC
- Paginación automática: Maneja conjuntos de datos de más de 10 000 filas
- Fechas relativas: "principio del mes pasado", "fin de este trimestre"
- Formato de gráficos: Soporte de visualización basado en fechas
- Integración de vistas: Aplique vistas y asignaciones guardadas
Parámetros:
dimensions: Lista de dimensiones de agrupación (máx. 15)metrics: Lista de métricas de costos/uso (máx. 8)filters: Expresiones de filtro (p. ej., ["transaction_type==usage"])sort: Expresiones de ordenación (p. ej., ["total_costDESC"])start_date/end_date: Rango de fechas o fechas relativasview_id: Aplique vista guardada (0 para sin restricciones)apply_allocations: Incluya costos posteriores a la asignación
queue_cost_report
Informes asincrónicos para informes de larga duración o complejos.
Beneficios:
- Procesamiento en segundo plano: Sin limitaciones de tiempo de espera
- Conjuntos de datos grandes: Paginación a 30 000 filas frente a 10 000
- Seguimiento de estado: Supervise el progreso con
check_report_status - Límite de frecuencia: Protección de 20 solicitudes por usuario
list_saved_cost_reports
Descubra informes disponibles con configuraciones completas e información de uso compartido.
get_available_measures
Explora dimensiones y métricas con metadatos detallados y agrupación.
get_filter_operators
Guía de referencia para todos los operadores de comparación de filtros compatibles.
check_report_status / get_queued_report_results
Gestiona informes asíncronos desde la cola hasta su finalización.
Pruebas
Ejecuta el conjunto de pruebas:
# Run unit tests (mocked HTTP; integration tests are skipped by default)
uv run pytest tests/ -v
# Run tests with coverage
uv run pytest tests/ -v --cov=main --cov-report=term-missing
# Run live MCP + Cloudability API integration tests (requires .env credentials)
cp .env.example .env # set CLOUDABILITY_KEY_ACCESS, CLOUDABILITY_KEY_SECRET, CLOUDABILITY_ENVIRONMENT_ID
uv run pytest tests/test_mcp_integration.py -v -m integration
Las pruebas de integración cubren 10 herramientas MCP de solo lectura principales (presupuestos, informes de costos, contenedores), 3 herramientas opcionales que se omiten cuando tu tenant no tiene acceso, además de una prueba encadenada de get_budget.
Ejemplos
Asignación de Costos de Contenedores (¡La Más Importante!)
# Provision a new cluster for monitoring
cluster = provision_kubernetes_cluster(
cluster_name="production-k8s",
kubernetes_version="1.28",
authorization="Bearer your-token"
)
# Get deployment YAML for Metrics Agent
deployment = get_cluster_deployment_yaml(
cluster_id=cluster["result"]["id"],
authorization="Bearer your-token"
)
# Save deployment["deployment_yaml"] and apply: kubectl apply -f deployment.yaml
# Analyze cost allocation by namespace (primary use case)
allocation = containers_report(
start_date="2024-01-01",
end_date="2024-01-31",
group=["namespace"],
metrics=["total_cost", "total_cost_efficiency"],
authorization="Bearer your-token"
)
# Team-based cost allocation using labels
team_costs = containers_report(
start_date="2024-01-01",
end_date="2024-01-31",
group=["cldy:labels:team", "namespace"],
metrics=["total_cost", "total_cost_allocated"],
filters=["cluster==your-cluster-uuid"],
cost_type="total_adjusted_amortized",
authorization="Bearer your-token"
)
# Workload-level cost breakdown for a namespace
service_costs = containers_report(
start_date="2024-01-01",
end_date="2024-01-31",
group=["workload_name", "workload_type"],
metrics=["total_cost"],
filters=["namespace==production", "cluster==your-cluster-uuid"],
authorization="Bearer your-token"
)
Análisis de Recursos de Contenedores
# Daily usage trends for capacity planning
usage_trends = get_container_resource_usage(
start_date="2024-01-01",
end_date="2024-01-31",
metrics=["cpu/reserved", "memory/reserved_rss", "filesystem/usage"],
filters=["cluster==your-cluster-uuid"],
authorization="Bearer your-token"
)
# Discover available labels for cost allocation
labels = discover_container_labels(
start_date="2024-01-01",
end_date="2024-01-31",
filters=["cluster==your-cluster-uuid"],
authorization="Bearer your-token"
)
# Get detailed cluster information
cluster_info = get_detailed_cluster_info(
start_date="2024-01-01",
end_date="2024-01-31",
authorization="Bearer your-token"
)
Análisis Básico de Costos
# Get cost breakdown by namespace for the last month
result = containers_report(
start_date="2024-01-01",
end_date="2024-01-31",
metrics=["total_cost", "total_cost_efficiency"],
group=["namespace"],
authorization="Bearer your-token"
)
Filtrado Avanzado
# Get cost data for specific cluster and production workloads
result = containers_report(
start_date="2024-01-01",
end_date="2024-01-31",
filters=[
"cluster==your-cluster-uuid",
"namespace==production",
"workload_type[]=deployment,statefulset"
],
group=["workload_name"],
sort=[{"sortMetric": "total_cost", "sortOrder": "desc"}],
limit=10,
authorization="Bearer your-token"
)
Monitoreo de Presupuestos
# Check all budgets and their current status
budgets = list_budgets(authorization="Basic your-api-key:")
# Get detailed information for a specific budget
budget_details = get_budget(
budget_id="budget-123",
authorization="Basic your-api-key:"
)
Estimaciones y Pronósticos de Gastos
# Get current month spending estimate (fields are under result)
estimate = get_spending_estimate(
view_id="0",
basis="cash",
authorization="Bearer your-token"
)
summary = estimate["result"]
print(summary["estimatedSpend"], summary["currentDate"])
# Azure month-end estimate from service breakdown
azure_estimate = sum(
row["estimatedSpend"]
for row in summary["details"]
if row["serviceName"].startswith("Azure")
)
# Generate 12-month forecast based on 6 months of history
forecast = get_spending_forecast(
view_id="0",
basis="cash",
months_back=6,
months_forward=12,
use_current_estimate=True,
remove_one_time_charges=True,
authorization="Bearer your-token"
)
forecast_rows = forecast["result"]["forecast"]
Gestión de Presupuestos
# Create a quarterly budget
budget = create_new_budget(
name="Q1 2024 Budget",
basis="adjusted",
view_id="0",
months=[
{"month": "2024-01", "threshold": 50000},
{"month": "2024-02", "threshold": 55000},
{"month": "2024-03", "threshold": 60000}
],
authorization="Bearer your-token"
)
# Set up budget alerts
alert = create_budget_alert(
budget_id=budget["result"]["id"],
notify_exceeded=True,
notify_expected=True,
authorization="Bearer your-token"
)
# Update budget thresholds
updated_budget = modify_budget(
budget_id=budget["result"]["id"],
months=[
{"month": "2024-01", "threshold": 45000},
{"month": "2024-02", "threshold": 50000}
],
authorization="Bearer your-token"
)
Informes Avanzados de Costos
# Basic cost breakdown by vendor and region
basic_report = execute_cost_report(
start_date="2024-01-01",
end_date="2024-01-31",
dimensions=["vendor", "region"],
metrics=["total_amortized_cost", "usage_hours"],
authorization="Bearer your-token"
)
# Advanced filtering and sorting
filtered_report = execute_cost_report(
start_date="beginning of last month",
end_date="end of last month",
dimensions=["vendor", "service_name", "resource_identifier"],
metrics=["total_amortized_cost", "total_cost_efficiency"],
filters=[
"transaction_type==usage",
"total_amortized_cost>100",
"region=@us-east"
],
sort=["total_amortized_costDESC", "vendorASC"],
limit=1000,
authorization="Bearer your-token"
)
# Asynchronous reporting for large datasets
report_id = queue_cost_report(
start_date="2024-01-01",
end_date="2024-03-31",
dimensions=["resource_identifier", "service_name", "region"],
metrics=["total_amortized_cost", "usage_hours"],
filters=["vendor==Amazon"],
authorization="Bearer your-token"
)
# Check status and retrieve results
status = check_report_status(
report_id=report_id["id"],
authorization="Bearer your-token"
)
if status["status"] == "finished":
results = get_queued_report_results(
report_id=report_id["id"],
authorization="Bearer your-token"
)
# Discover available dimensions and metrics
measures = get_available_measures(authorization="Bearer your-token")
operators = get_filter_operators(authorization="Bearer your-token")
Desarrollo
Estructura del Proyecto
cloudability-mcp-server/
├── main.py # Main MCP server with tool definitions
├── cloudability_tools.py # Core API implementation
├── tests/
│ └── test_cloudability_tools.py # Comprehensive API tests
├── .env.example # Environment configuration template
├── pyproject.toml # Project configuration
└── README.md # This documentation
Arquitectura
- main.py: Definiciones limpias de herramientas MCP usando decoradores FastMCP
- cloudability_tools.py: Lógica de negocio separada con cobertura integral de la API
- Autenticación Flexible: Soporte tanto para tokens Bearer como para autenticación Basic
- Pruebas Integrales: Cobertura completa de pruebas con simulación HTTP
- Seguridad de Tipos: Anotaciones de tipos completas para una mejor experiencia de desarrollo
🤝 Contribuciones
¡Agradecemos las contribuciones! Consulta nuestra Guía de Contribución para más detalles.
Pasos Rápidos para Contribuir
- Haz un fork del repositorio
- Crea una rama de funcionalidad:
git checkout -b feature/amazing-feature - Realiza tus cambios con pruebas
- Ejecuta las verificaciones de calidad:
uv run black . && uv run pytest - Envía una solicitud de extracción (pull request)
Configuración de Desarrollo
# Clone your fork
git clone https://github.com/eelzinaty/cloudability-mcp-server.git
cd cloudability-mcp-server
# Install development dependencies
uv sync --group dev
# Run tests
uv run pytest tests/ -v
# Format code
uv run black . && uv run isort .
📚 Documentación
- Guía de Desarrollo: Documentación integral de desarrollo
- Guía de Contribución: Cómo contribuir al proyecto
- Documentación de la API: Definiciones completas del esquema de herramientas
- Documentos de la API de Cloudability: Documentación oficial de la API
🐛 Problemas y Soporte
- Informes de Errores: Problemas de GitHub
- Solicitudes de Funcionalidades: Problemas de GitHub
- Discusiones: Discusiones de GitHub
📄 Licencia
Este proyecto está licenciado bajo la Licencia MIT; consulta el archivo LICENCIA para más detalles.
🙏 Agradecimientos
- FastMCP: Marco moderno de servidores MCP
- Model Context Protocol: La especificación del protocolo
- Cloudability: Por proporcionar APIs integrales de gestión de costos en la nube
🔗 Proyectos Relacionados
- Servidores MCP: Implementaciones oficiales de servidores MCP
- Claude Desktop: Cliente MCP popular
- Otras Herramientas MCP: Implementaciones MCP de la comunidad
Hecho con ❤️ para las comunidades de FinOps y Kubernetes