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
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ável | Obrigatória | Descrição |
|---|---|---|
CLOUDABILITY_API_URL | Não (padrão: EUA) | URL base da API Cloudability para sua região |
CLOUDABILITY_ENVIRONMENT_ID | Sim (para autenticação Bearer) | ID do ambiente da Administração de Acesso |
CLOUDABILITY_KEY_ACCESS | Não | Chave pública da API Frontdoor para aquisição automática de tokens |
CLOUDABILITY_KEY_SECRET | Não | Chave privada da API Frontdoor (par com CLOUDABILITY_KEY_ACCESS) |
CLOUDABILITY_FRONTDOOR_URL | Não (padrão: EUA) | Endpoint de login da chave de API Frontdoor para sua região |
CLOUDABILITY_DEFAULT_VIEW_ID | Sim (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ão | URL |
|---|---|
| EUA | 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 |
Login Frontdoor (CLOUDABILITY_FRONTDOOR_URL)
| Região | URL |
|---|---|
| EUA | 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 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_IDno 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):
| URI | Descrição |
|---|---|
cloudability://config | Configuração do servidor (URL da API, ID de visualização padrão, modo de autenticação — sem segredos) |
cloudability://measures | Catálogo de dimensões e métricas de relatórios de custos |
cloudability://measures/allocated | Medidas suportadas com alocações de custos |
cloudability://filter-operators | Referência de operadores de filtro (==, =@, []=, …) |
cloudability://saved-reports | Definiçõ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.datalinhas 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 modelagemmonths_forward(1-24): Horizonte de previsãouse_current_estimate: Incluir mês atual no modeloremove_credits: Excluir créditos da análiseremove_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çamentonotify_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 relativasview_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
- Faça um fork do repositório
- Crie um branch de recurso:
git checkout -b feature/amazing-feature - Faça suas alterações com testes
- Execute verificações de qualidade:
uv run black . && uv run pytest - 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
- Guia de Desenvolvimento: Documentação abrangente de desenvolvimento
- Guia de Contribuição: Como contribuir para o projeto
- Documentação da API: Definições completas de esquema de ferramentas
- Documentação da API Cloudability: Documentação oficial da API
🐛 Problemas e Suporte
- Relatórios de Bugs: Problemas do GitHub
- Solicitações de Recursos: Problemas do GitHub
- Discussões: Discussões do GitHub
📄 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
- Servidores MCP: Implementações oficiais de servidor MCP
- Claude Desktop: Cliente MCP popular
- Outras Ferramentas MCP: Implementações MCP da comunidade
Feito com ❤️ para as comunidades FinOps e Kubernetes