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 и экономию; реальное применение — по явному запросу

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

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

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

Related MCP server: kube-lint-mcp

Запуск

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, которое доказывает одну чёткую идею: агентные операции — это проблема ограничений. Дайте ИИ реальные действия, но сделайте платформу той, кто говорит «нет».

Related MCP Connectors

Related MCP Servers