Презентации лучше смотреть с десктопа
Слайды рассчитаны на широкий экран, клавиатуру и формат 16:9. Откройте эту страницу на ноутбуке или компьютере.
Вернуться на сайтКак дать агенту управлять
кластером вашей инфры?
Эдгар Сипки//Founder EasyP && SIPKI Tech
Кто я и где мы
Эдгар Сипки
Senior golang developer, open-source. Founder EasyP.
Наш контекст
Маленький стартап. Мало денег, нет инфраструктурной команды.
О чём поговорим?
- 01Агент и MCP за пять минут
- 02Стартап против инфраструктуры
- 03Deckhouse и первый MCP-сервер
- 04spec-first и protoc-gen-mcp
- 05Сценарии и живое демо
О чём поговорим?
- 01Агент и MCP за пять минут
- 02Стартап против инфраструктуры
- 03Deckhouse и первый MCP-сервер
- 04spec-first и protoc-gen-mcp
- 05Сценарии и живое демо
АГЕНТ
И MCP
LLM умна, но безрука
- Модель отлично рассуждает
- Но сама по себе ничего не делает в реальном мире
- → чтобы действовать, ей нужны руки
Анатомия агента
LLM
рассуждает и принимает решения
Цикл
план → действие → наблюдение
Инструменты
руки во внешний мир
Контекст
что модель видит сейчас
MCP = USB-C для интеграций
- Один протокол вместо зоопарка кастомных коннекторов
- Агент видит и вызывает внешние действия через один стандарт
- MCP-сервер = руки агента
Три примитива
Tools 🔧
действия
Resources 📄
чтение
Prompts 💬
шаблоны
Как агент вызывает tool
→ description и JSON Schema решают, сможет ли агент вообще вызвать tool
О чём поговорим?
- 01Агент и MCP за пять минут
- 02Стартап против инфраструктуры
- 03Deckhouse и первый MCP-сервер
- 04spec-first и protoc-gen-mcp
- 05Сценарии и живое демо
СТАРТАП ПРОТИВ
ИНФРАСТРУКТУРЫ
Наша задача
- Нужно управлять Kubernetes-кластером
- Инфраструктурной экспертизы нет
- Денег на DevOps-команду — тоже нет
Вилка ресурсов
инвестиций
и то мои личные
Единственная разумная ставка
Не нанимать DevOps, а переложить управление кластером на агента.
Попытка №1: голый k8s-MCP
Agent (LLM)
MCP Server
k8s-mcp
kube-apiserver
Кластер
→ выглядит просто... но только на первый взгляд
Почему не взлетело
- Чтобы управлять k8s-MCP, надо самому знать k8s
CRD,RBAC, манифесты, неймспейсы- → инструмент переложил сложность на нас, а не убрал её ❌
О чём поговорим?
- 01Агент и MCP за пять минут
- 02Стартап против инфраструктуры
- 03Deckhouse и первый MCP-сервер
- 04spec-first и protoc-gen-mcp
- 05Сценарии и живое демо
DECKHOUSE И
ПЕРВЫЙ MCP-СЕРВЕР
Услышали про Deckhouse
- Готовая Kubernetes-платформа
- Берёт много инфраструктурной рутины на себя
- «А почему бы и нет?» — взяли, потестили
Вердикт
Мы
инструмент хороший, но мы для него ещё слишком глупы
Агент
а агент — умный
Новая идея
Deckhouse держит платформу, агент разговаривает с ней за нас.
→ нужен мост: MCP-сервер для Deckhouse
Пишем MCP-сервер с агентом
- Сели писать MCP-сервер для Deckhouse
- Агент помогает кодить
- Иии?
Барьер не там, где ждали
Не инфраструктура, а инженерия: агенту не хватало структуры.
Симптом
регрессии · дрейф · «я тут немного поправил»
Диагноз
- Нужен источник истины, который агент не имеет права трогать
- Код для этого — плохое место
О чём поговорим?
- 01Агент и MCP за пять минут
- 02Стартап против инфраструктуры
- 03Deckhouse и первый MCP-сервер
- 04spec-first и protoc-gen-mcp
- 05Сценарии и живое демо
SPEC-FIRST И
PROTOC-GEN-MCP
Идём за spec-first
Хотим: спека как контракт, который агент не может сломать.
Нашли два варианта
- Полная поддержка примитивов MCP
- Аннотации и валидация
- Типизация
- Сильно ограничены в поддержке спецификации
- Нет части примитивов
- Не покрывают наш кейс
Делаем свой
- Мы проектируем спецификацию (proto-контракт аннотаций)
- Генератор пишет агент
Агент ужасно проектирует,
но неплохо кодит
человек держит спеку и архитектуру · агент пишет реализацию
protoc-gen-mcp
- protobuf — единственный источник истины
- Аннотации в
.protoописывают tools / prompts / resources - Генератор → типизированные MCP-биндинги + JSON Schema
Аннотации в .proto
service DiagnosticsAPI {
option (mcp.options.v1.service) = { namespace: "deckhouse" };
// Агрегированный статус кластера: ноды, модули, релизы.
rpc GetClusterStatus(google.protobuf.Empty)
returns (GetClusterStatusResponse) {
option (mcp.options.v1.method) = {
annotations: { read_only_hint: true }
};
}
}→ read_only_hint, валидация и description — всё в контракте
Почему это лечит «структуру»
- Контракт живёт в
.proto, а не в редактируемом коде - → случайной правкой структуру не разнести
Сгенерированный интерфейс
// Сгенерированный интерфейс — агент его не трогает.
type DiagnosticsAPIToolHandler interface {
GetClusterStatus(ctx context.Context,
req *emptypb.Empty) (*GetClusterStatusResponse, error)
ListNodes(ctx context.Context,
req *ListNodesRequest) (*ListNodesResponse, error)
// ...
}Генерация через easyp
generate:
inputs:
- directory: { path: proto, root: "." }
plugins:
- name: go
out: .
opts: { paths: source_relative }
- command: ["go", "run",
"github.com/easyp-tech/protoc-gen-mcp/cmd/protoc-gen-mcp@latest"]
out: .
opts: { paths: source_relative }→ task generate = easyp mod download + easyp generate
Бизнес-логика — в хендлере
server := mcp.NewServer("deckhouse-mcp", "v1")
deckhousev1.RegisterDiagnosticsAPITools(server, handler)
server.ServeSSE(":8080")О чём поговорим?
- 01Агент и MCP за пять минут
- 02Стартап против инфраструктуры
- 03Deckhouse и первый MCP-сервер
- 04spec-first и protoc-gen-mcp
- 05Сценарии и живое демо
СЦЕНАРИИ
И ДЕМО
Сценарий A — диагностика
Сценарий C — HTTPS Ingress + TLS
АГЕНТ УПРАВЛЯЕТ
КЛАСТЕРОМ
Что важно заметить
- Агент сделал ровно то, что описано
- Нет импровизации в схемах
- Структура в .proto не даёт разнести код
- Регенерация вместо ручных правок
5 тезисов
- Агенту нужны руки
- MCP — это руки
- Готовая платформа (Deckhouse) бьёт самописную интеграцию
- Агент без структуры разносит код
- spec-first (protoc-gen-mcp) = контракт, который агент не сломает
Когда этот путь оправдан
- Маленькая команда без инфры
- Нужно много, ресурса мало
- Зрелый DevOps с экспертизой
- Критичные destructive-операции без человека
ЧТО
ДАЛЬШЕ?
Куда движемся
protoc-gen-mcp
Эдгар Сипки//Founder EasyP