Skip to main content
Glama
hanumanthvendra

finops-copilot

ИИ, который подбирает оптимальный размер вашего кластера, — и платформа, которая не даст ему сломать прод

Проблема: «позволить ИИ трогать нашу инфраструктуру» — отличный способ получить от уверенной модели масштабирование прода до одной реплики в 3 часа ночи. Интересная инженерная часть агентных операций — не модель, а ограничения. Решение: дайте ИИ типизированный, ограниченный интерфейс к вашему кластеру через MCP, и разместите логику безопасности на серверной стороне, где модель не сможет её обойти. ИИ решает, что менять; платформа решает, что ей разрешено делать — и отказывает во всём остальном, даже если её прямо просят.

Сервер Model Context Protocol (MCP) предоставляет пять FinOps-инструментов для живого кластера Kubernetes. Claude (или любой MCP-клиент — Claude Desktop и т.д.) использует их, чтобы находить избыточно выделенные рабочие нагрузки и предлагать оптимизацию размера. Каждый изменяющий вызов проверяется политикой до каких-либо действий и по умолчанию является пробным запуском (dry-run); небезопасные изменения — защищённое пространство имён prod, нижняя граница ресурсов, слишком агрессивное сокращение — отклоняются сервером и записываются в журнал аудита.

Работает полностью на ноутбуке: кластер kind, наполненный намеренно расточительными рабочими нагрузками, MCP-сервер размером ~120 строк и драйвер-ассистент, который работает офлайн по умолчанию (детерминированный мок, поэтому работает без API-ключа и в CI) или с настоящим Claude, когда задан ANTHROPIC_API_KEY.


Что это делает

   Claude / MCP client
          │  calls typed tools
          ▼
   ┌─────────────── MCP server (finops-copilot) ───────────────┐
   │  list_namespaces  list_workloads  estimate_cost           │
   │  recommend_rightsizing        get_audit_log               │
   │                                                           │
   │  apply_rightsizing(…, dry_run=True)                       │
   │        │                                                  │
   │        ▼   ┌─────────── policy.py (guardrails) ────────┐  │
   │     every  │ protected namespaces? resource floors?    │  │
   │     apply ─┤ max single-step cut?  → REFUSE + audit    │  │
   │            └───────────────────────────────────────────┘  │
   └────────────────────────┬──────────────────────────────────┘
                            │ kubectl (read specs / patch)
                            ▼
                  kind cluster: staging (waste) · prod (protected)

Компонент

Почему это важно

Как это работает здесь

MCP, а не сырой kubectl

ИИ получает типизированные, проверяемые действия, а не открытую оболочку

Пять инструментов со схемами; только сервер взаимодействует с кластером

Ограничения на стороне сервера

Безопасность, которую модель не может обойти промптами

apply_rightsizing сначала прогоняет каждый запрос через policy.py; отказ — значит отказ

Пробный запуск по умолчанию

Безопасное поведение — это поведение по умолчанию

apply_rightsizing(dry_run=True) показывает diff и экономию; реальное применение — по явному запросу

Всё аудируется

«Что пытался сделать ИИ?» — есть ответ

Каждое применение — разрешённое, отклонённое или пробное — добавляется в журнал аудита, который может прочитать клиент

Запуск

make up            # kind cluster seeded with waste + Python env (MCP deps)
make demo          # the copilot finds & cuts waste — OFFLINE, no API key needed
make demo-claude   # real Claude drives the same MCP tools (needs ANTHROPIC_API_KEY)
make test          # unit-test the guardrail policy (no cluster needed)
make down          # delete the cluster

make demo запускает детерминированный мок-ассистент на настоящем MCP-сервере — те же инструменты, те же ограничения, что и в пути Claude, — поэтому он работает без ключа и в CI. make demo-claude заменяет мок на Claude, который агентно управляет инструментами (официальный Anthropic SDK + его MCP tool-runner).

Что доказывает демо (реальный вывод)

Против пространства имён staging с четырьмя рабочими нагрузками (три — сильно избыточно выделенные, одна — здоровая) и защищённым prod:

  1. Находит расточительство. staging стоит ~$138/мес при текущих запросах; инструмент помечает три нагрузки с использованием CPU на уровне 1–4 % и предлагает сокращение CPU и реплик — ~$102/мес (73 %) прогнозируемой экономии.

  2. Сначала пробный запуск. Каждое изменение — это пробный запуск с показом точного diff и его месячной экономии. Ничто не применяется без явного вызова с отключённым пробным режимом.

  3. Платформа отказывает для prod. При попытке урезать и prod сервер отказываетnamespace 'prod' is protected. ИИ попросил; ограничение сказало нет. Никаких изменений, даже пробного запуска.

  4. Платформа отказывает в слишком агрессивном сокращении. При запросе урезать запрос CPU до 10m сервер отказывает — ниже нижней границы и более чем 90 % за один шаг.

  5. Каждое действие логируется. Журнал аудита показывает все пять попыток — три пробных запуска, два отказа — с причинами.

ИИ нашёл расточительство и предложил сокращения. Платформа решила, что ему разрешено делать. Именно в этом разделении труда и заключается суть.

Использование из Claude Desktop (настоящий MCP)

Это настоящий MCP-сервер — подключайте к нему любой MCP-клиент. Для Claude Desktop добавьте в claude_desktop_config.json:

{
  "mcpServers": {
    "finops": {
      "command": "/path/to/mcp-finops-copilot/.venv/bin/python",
      "args": ["-m", "finops.server"],
      "env": { "FINOPS_CTX": "kind-mcp-finops" }
    }
  }
}

Затем спросите Claude: «Сколько стоит моё пространство имён staging и что я могу безопасно оптимизировать?»

Соответствие продакшену

Демо

Продакшн

kind, рабочие нагрузки pause

EKS / AKS / GKE с вашими реальными Deployment

использование из заранее заданной аннотации

Prometheus / metrics-server (меняется только чтение в kube.py)

нижние границы в policy.py + защищённые пространства имён

ограничения вашей организации — область действия RBAC, PodDisruptionBudgets, окна изменений

журнал аудита в памяти

ваш приёмник аудита (stdout → Loki, таблица событий и т.д.)

иллюстративные тарифы

реальные цены вашего провайдера за vCPU / ГБ

Структура проекта

finops/policy.py     the guardrail layer — pure, unit-tested (make test)
finops/cost.py       cost model + right-sizing heuristic
finops/kube.py       kubectl read/patch helpers
finops/server.py     the MCP server: 5 tools, dry-run-by-default, audited
copilot/mock_agent.py   deterministic offline copilot (CI-safe)
copilot/llm_agent.py    real Claude via the Anthropic SDK's MCP tool-runner
copilot/driver.py       picks mock vs Claude by ANTHROPIC_API_KEY
k8s/                 staging (seeded waste) + prod (protected)

Распространяется по лицензии MIT. Небольшое демо, запускаемое на ноутбуке и безопасное с точки зрения NDA, которое доказывает одну чёткую идею: агентные операции — это проблема ограничений. Дайте ИИ реальные действия, но сделайте платформу той, кто говорит «нет».

-
license - not tested
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Hosted MCP server for LLM cost estimation, model comparison, and budget-aware routing.

  • MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.

  • Hosted MCP server for agent governance: MCP config audits, injection scans, scope-policy checks.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/hanumanthvendra/mcp-finops-copilot'

If you have feedback or need assistance with the MCP directory API, please join our Discord server