Cloudability API

Um servidor abrangente do Model Context Protocol (MCP) para a API Cloudability, fornecendo gerenciamento avançado de custos, análises de contêineres Kubernetes e capacidades de previsão de orçamento.

Documentação

Servidor MCP Cloudability

License: MIT Python 3.14+ FastMCP

Um servidor abrangente de Model Context Protocol (MCP) para a API Cloudability, fornecendo gerenciamento avançado de custos, análise de contêineres Kubernetes e recursos de previsão de orçamento.

🌟 Por que usar este servidor MCP?

  • 🔥 Foco em contêineres: Alocação e monitoramento abrangentes de custos Kubernetes
  • 📊 Análises avançadas: 15 dimensões, 8 métricas, filtragem e agrupamento flexíveis
  • 💰 Gerenciamento de orçamento: Ciclo de vida completo do orçamento com previsão e alertas
  • 🚀 Pronto para produção: Cobertura completa de testes, segurança de tipos e tratamento de erros
  • 🌍 Multi-região: Suporte para regiões Cloudability dos EUA, UE, APAC e ME
  • 🔐 Autenticação flexível: Tokens Bearer, autenticação Basic legada ou chaves de API Frontdoor para aquisição automática de tokens

🚀 Início rápido

Pré-requisitos

  • Python 3.14+ (necessário para anotações de tipo modernas)
  • uv (gerenciador de pacotes recomendado)
  • Acesso à API Cloudability (token Bearer, chave de API ou chaves de API Frontdoor em .env)

Instalação

# 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

Configuração do cliente MCP

Adicione à configuração do seu 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"
      }
    }
  }
}

Recursos

🚀 Cobertura abrangente da API

  • 🔥 Alocação de custos de contêineres: Alocação e monitoramento completos de custos Kubernetes
  • 🔥 Provisionamento de contêineres: Configuração de cluster e implantação do Metrics Agent
  • 🔥 Análise de contêineres: Padrões de uso, alocação de recursos e análise de eficiência
  • 🔥 Descoberta de contêineres: Rótulos e inventário de recursos via containers_report
  • Relatórios de custos: Análise de custos flexível e poderosa com 15 dimensões e 8 métricas
  • Relatórios assíncronos: Fila de relatórios de longa duração para processamento em segundo plano
  • Orçamentos e previsões: Gerenciamento completo do ciclo de vida do orçamento e previsões de gastos
  • Assinaturas de orçamento: Notificações por e-mail para limites de orçamento
  • Estimativas: Projeções de gastos do mês atual com detalhamentos completos
  • Previsões: Análise preditiva de vários meses com intervalos de confiança
  • Contas de fornecedores: Lista de contas de credenciais de provedores de nuvem (AWS, Azure, GCP, IBM, OCI)

🔐 Autenticação flexível

  • Token Bearer: Autenticação moderna apptio-opentoken
  • Chaves de API Frontdoor: Aquisição automática de apptio-opentoken quando as chaves estão definidas no ambiente
  • Autenticação Basic: Autenticação tradicional com chave de API
  • Suporte multi-região: Endpoints de login da API Cloudability e Frontdoor para EUA, UE, APAC e ME

📊 Análises avançadas

  • Filtragem rica: Filtre por cluster, namespace, tipo de carga de trabalho e muito mais
  • Agrupamento flexível: Agrupe resultados por múltiplas dimensões
  • Ordenação e paginação: Lide com grandes conjuntos de dados com eficiência
  • Múltiplos tipos de widgets: Suporte para tabelas, KPIs, gráficos e séries temporais

🛠️ Experiência do desenvolvedor

  • Framework FastMCP: Implementação moderna de servidor MCP
  • Testes abrangentes: Cobertura completa de testes com simulação
  • Segurança de tipos: Anotações de tipo completas para melhor suporte de IDE
  • Arquitetura limpa: Lógica de negócios separada para manutenibilidade

Instalação

Este projeto usa uv para gerenciamento de dependências. Certifique-se de ter o uv instalado.

# Install dependencies
uv sync

# Install development dependencies (for testing)
uv sync --dev

Configuração

Crie um arquivo .env com base em .env.example:

# Copy the example configuration
cp .env.example .env

Variáveis de ambiente

Copie .env.example para .env e configure as variáveis abaixo.

VariávelObrigatóriaDescrição
CLOUDABILITY_API_URLNão (padrão: EUA)URL base da API Cloudability para sua região
CLOUDABILITY_ENVIRONMENT_IDSim (para autenticação Bearer)ID do ambiente da Administração de Acesso
CLOUDABILITY_KEY_ACCESSNãoChave pública da API Frontdoor para aquisição automática de tokens
CLOUDABILITY_KEY_SECRETNãoChave privada da API Frontdoor (par com CLOUDABILITY_KEY_ACCESS)
CLOUDABILITY_FRONTDOOR_URLNão (padrão: EUA)Endpoint de login da chave de API Frontdoor para sua região
CLOUDABILITY_DEFAULT_VIEW_IDSim (para ferramentas de contêineres)ID de visualização padrão para chamadas de containers/report e 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

Endpoints regionais

API Cloudability (CLOUDABILITY_API_URL)

RegiãoURL
EUAhttps://api.cloudability.com/v3
UEhttps://api-eu.cloudability.com/v3
APAChttps://api-au.cloudability.com/v3
MEhttps://api-me.cloudability.com/v3

Login Frontdoor (CLOUDABILITY_FRONTDOOR_URL)

RegiãoURL
EUAhttps://frontdoor.apptio.com/service/apikeylogin
UEhttps://frontdoor-eu.apptio.com/service/apikeylogin
AUhttps://frontdoor-au.apptio.com/service/apikeylogin

Métodos de autenticação

1. Chaves de API Frontdoor (opcional, no lado do servidor)

Quando CLOUDABILITY_KEY_ACCESS e CLOUDABILITY_KEY_SECRET estão definidos, o servidor os troca por um apptio-opentoken via CLOUDABILITY_FRONTDOOR_URL. As chamadas de ferramentas podem omitir o parâmetro authorization. Defina também CLOUDABILITY_ENVIRONMENT_ID — a autenticação Bearer ainda o exige.

2. Token Bearer

Para ambientes Cloudability modernos que usam apptio-opentoken:

  • Defina CLOUDABILITY_ENVIRONMENT_ID no seu ambiente
  • Passe authorization: "Bearer your-apptio-opentoken" para chamadas de ferramentas (a menos que as chaves Frontdoor cuidem da autenticação por você)

3. Autenticação Basic (legada)

Para autenticação tradicional com chave de API:

  • Passe authorization: "Basic your-api-key:" para chamadas de ferramentas
  • Nenhum ID de ambiente é necessário

Uso

Executando o servidor

uv run python main.py

Recursos de referência MCP

Dados de referência somente leitura para criar relatórios de custos (em cache, TTL padrão de 15 minutos via CLOUDABILITY_RESOURCE_CACHE_TTL_SECONDS):

URIDescrição
cloudability://configConfiguração do servidor (URL da API, ID de visualização padrão, modo de autenticação — sem segredos)
cloudability://measuresCatálogo de dimensões e métricas de relatórios de custos
cloudability://measures/allocatedMedidas suportadas com alocações de custos
cloudability://filter-operatorsReferência de operadores de filtro (==, =@, []=, …)
cloudability://saved-reportsDefinições de relatórios de custos salvos

Use resources/read no seu cliente MCP, ou chame as ferramentas correspondentes (get_available_measures, etc.) para os mesmos dados.

Ferramentas disponíveis

🔥 Ferramentas de alocação de custos de contêineres

provision_kubernetes_cluster

Configure novos clusters para monitoramento Cloudability com implantação automatizada do Metrics Agent.

get_cluster_deployment_yaml

Obtenha a configuração de implantação para instalar o Metrics Agent Cloudability no seu cluster.

containers_report

Ferramenta principal de alocação de custos de contêineres — substitui as APIs aposentadas /containers/allocations e /containers/counts por POST /v3/containers/report.

Principais recursos:

  • Alocação de recursos compartilhados: Métricas de custo fairshare e alocado por namespace, carga de trabalho, cluster e rótulos
  • Agrupamento flexível: namespace, workload_type, workload_name, pod, rótulos, etc.
  • Filtragem: UUID do cluster, namespace, tipo de carga de trabalho e muito mais

Parâmetros:

  • group: Dimensões de agrupamento (ex.: ["namespace"], ["cldy:labels:team"])
  • metrics: Métricas do relatório (ex.: ["total_cost", "total_cost_efficiency"])
  • filters: Escopo da análise (ex.: ["cluster==uuid", "namespace==production"])
  • cost_type: "adjusted" ou "total_adjusted_amortized"

Retornos:

  • result.data linhas com dimensões e métricas agrupadas
  • Paginação via result.pagination.nextToken
get_container_resource_usage

Tendências de uso diário para planejamento de capacidade e análise de redimensionamento.

discover_container_labels

Encontre rótulos Kubernetes disponíveis para agrupamentos personalizados de alocação de custos.

get_detailed_cluster_info

Metadados abrangentes do cluster com detalhes de nós e status de coleta de dados.

🚀 Ferramentas principais

list_clusters

Obtenha todos os clusters Kubernetes com seus UUIDs e metadados.

list_budgets

Obtenha todas as configurações de orçamento com status atual e limites.

get_budget

Obtenha informações detalhadas do orçamento incluindo rastreamento de gastos e alertas.

list_aws_accounts

Obtenha contas de credenciais de fornecedor AWS configuradas no Cloudability (GET /v3/vendors/AWS/accounts?viewId=0).

list_azure_accounts

Obtenha contas de credenciais de fornecedor Azure configuradas no Cloudability (GET /v3/vendors/azure/accounts?viewId=0).

list_gcp_accounts

Obtenha contas de credenciais de fornecedor GCP configuradas no Cloudability (GET /v3/vendors/gcp/accounts?viewId=0).

list_ibm_accounts

Obtenha contas de credenciais de fornecedor IBM Cloud configuradas no Cloudability (GET /v3/vendors/ibm/accounts?viewId=0).

list_oci_accounts

Obtenha contas de credenciais de fornecedor OCI configuradas no Cloudability (GET /v3/vendors/oci/accounts?viewId=0).

📊 Ferramentas de orçamento e previsão

get_spending_estimate

Projeções de gastos do mês atual com detalhamentos detalhados por serviço e progressão diária.

Principais recursos:

  • Estimativas de gastos em tempo real com base no uso do mês até a data
  • Direcionadores de gastos por serviço (AWS EC2, RDS, etc.)
  • Progressão diária de gastos acumulados
  • Comparação com valores reais do mês anterior
  • Limitação de taxa: 10 solicitações/usuário/minuto, 20/org/minuto

Formato da resposta: Envelope padrão Cloudability v3. Todos os campos estão sob result (não no nível 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 detalhamentos por fornecedor ou serviço (por exemplo, filtre linhas onde serviceName começa com Azure). Omita view_id ou defina-o a partir do recurso cloudability://config default_view_id ao usar a visualização padrão configurada do servidor (0 significa todos os dados de custo da organização).

get_spending_forecast

Análise preditiva de vários meses com intervalos de confiança e comparação histórica.

Parâmetros:

  • months_back (3-24): Dados históricos para modelagem
  • months_forward (1-24): Horizonte de previsão
  • use_current_estimate: Incluir mês atual no modelo
  • remove_credits: Excluir créditos da análise
  • remove_one_time_charges: Filtrar custos únicos

Retornos: Envelope Cloudability v3 com dados de previsão sob result (por exemplo, result.forecast, result.forecastDetail, result.actual, result.parameters).

create_new_budget

Crie orçamentos com limites mensais e configuração de base de custos.

modify_budget

Atualize orçamentos existentes com novos limites ou alterações de configuração.

remove_budget

Exclua orçamentos permanentemente do sistema.

create_budget_alert

Configure notificações por e-mail para violações de limites de orçamento.

Tipos de notificação:

  • notify_exceeded: Alertas quando os gastos reais excedem o orçamento
  • notify_expected: Alertas quando os gastos projetados excedem o orçamento
list_budget_alerts

Liste assinaturas de orçamento e preferências de notificação.

modify_budget_alert / remove_budget_alert

Atualize ou exclua assinaturas de notificação de orçamento.

📊 Ferramentas de relatórios de custos

execute_cost_report

Ferramenta principal de relatórios de custos com análises avançadas e configuração flexível.

Principais recursos:

  • Até 15 dimensões: vendor, region, service_name, resource_identifier, etc.
  • Até 8 métricas: total_cost, amortized_cost, usage_hours, etc.
  • Filtragem avançada: 12 operadores (==, !=, >, <, =@, []= etc.)
  • Ordenação flexível: Multi-coluna com ASC/DESC
  • Paginação automática: Lida com conjuntos de dados de 10.000+ linhas
  • Datas relativas: "início do mês passado", "fim deste trimestre"
  • Formatação de gráficos: Suporte a visualização baseada em datas
  • Integração de visualizações: Aplique visualizações e alocações salvas

Parâmetros:

  • dimensions: Lista de dimensões de agrupamento (máx. 15)
  • metrics: Lista de métricas de custo/uso (máx. 8)
  • filters: Expressões de filtro (ex.: ["transaction_type==usage"])
  • sort: Expressões de ordenação (ex.: ["total_costDESC"])
  • start_date/end_date: Intervalo de datas ou datas relativas
  • view_id: Aplicar visualização salva (0 para irrestrito)
  • apply_allocations: Incluir custos pós-alocados
queue_cost_report

Relatórios assíncronos para relatórios de longa duração ou complexos.

Benefícios:

  • Processamento em segundo plano: Sem limitações de tempo limite
  • Grandes conjuntos de dados: Paginação em 30.000 linhas vs. 10.000
  • Rastreamento de status: Monitore o progresso com check_report_status
  • Limitação de taxa: Proteção de 20 solicitações por usuário
list_saved_cost_reports

Descubra relatórios disponíveis com configurações completas e informações de compartilhamento.

get_available_measures

Explore dimensões e métricas com metadados detalhados e agrupamento.

get_filter_operators

Guia de referência para todos os operadores de comparação de filtro suportados.

check_report_status / get_queued_report_results

Gerenciar relatórios assíncronos da fila até a conclusão.

Testes

Execute a suíte de testes:

# 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

Os testes de integração cobrem 10 ferramentas MCP somente leitura principais (orçamentos, relatórios de custos, contêineres), 3 ferramentas opcionais que são ignoradas quando seu locatário não tem acesso, além de um teste encadeado get_budget.

Exemplos

Alocação de Custos de Contêiner (Mais 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álise de Recursos de Contêiner

# 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álise Básica de Custos

# 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"
)

Filtragem Avançada

# 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"
)

Monitoramento de Orçamento

# 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:"
)

Estimativas e Previsões 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"]

Gerenciamento de Orçamento

# 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"
)

Relatórios Avançados de Custos

# 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")

Desenvolvimento

Estrutura do Projeto

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

Arquitetura

  • main.py: Definições limpas de ferramentas MCP usando decoradores FastMCP
  • cloudability_tools.py: Lógica de negócios separada com cobertura abrangente de API
  • Autenticação Flexível: Suporte para tokens Bearer e autenticação Basic
  • Testes Abrangentes: Cobertura completa de testes com simulação de HTTP
  • Segurança de Tipos: Anotações de tipo completas para melhor experiência de desenvolvimento

🤝 Contribuindo

Aceitamos contribuições! Consulte nosso Guia de Contribuição para obter detalhes.

Passos Rápidos para Contribuição

  1. Faça um fork do repositório
  2. Crie um branch de recurso: git checkout -b feature/amazing-feature
  3. Faça suas alterações com testes
  4. Execute verificações de qualidade: uv run black . && uv run pytest
  5. Envie um pull request

Configuração de Desenvolvimento

# 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 .

📚 Documentação

🐛 Problemas e Suporte

📄 Licença

Este projeto é licenciado sob a Licença MIT - consulte o arquivo LICENSE para obter detalhes.

🙏 Agradecimentos

  • FastMCP: Framework moderno de servidor MCP
  • Model Context Protocol: A especificação do protocolo
  • Cloudability: Por fornecer APIs abrangentes de gerenciamento de custos em nuvem

🔗 Projetos Relacionados


Feito com ❤️ para as comunidades FinOps e Kubernetes