diff --git a/README.md b/README.md index f8997ef..c5f9a2f 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ A custom Nix overlay and flake providing additional packages not found in upstre | `goose-cli` | CLI for Goose - a local, extensible, open source AI agent that automates engineering tasks | AI Coding Agents | | `mcp-gateway` | Universal Model Context Protocol gateway that sits between AI client and MCP tools/servers | MCP Servers | | `skillsmcp` | MCP server that exposes Agent Skills to AI agents via the Model Context Protocol | MCP Servers | +| `kubernetes-mcp-server` | Model Context Protocol (MCP) server for Kubernetes and OpenShift | MCP Servers | ## Usage diff --git a/packages/kubernetes-mcp-server/default.nix b/packages/kubernetes-mcp-server/default.nix new file mode 100644 index 0000000..0ee9128 --- /dev/null +++ b/packages/kubernetes-mcp-server/default.nix @@ -0,0 +1 @@ +{ pkgs, ... }: pkgs.callPackage ./package.nix { } diff --git a/packages/kubernetes-mcp-server/package.nix b/packages/kubernetes-mcp-server/package.nix new file mode 100644 index 0000000..c3dd277 --- /dev/null +++ b/packages/kubernetes-mcp-server/package.nix @@ -0,0 +1,50 @@ +{ + lib, + buildGoModule, + fetchFromGitHub, +}: + +buildGoModule rec { + pname = "kubernetes-mcp-server"; + version = "0.0.62"; + + src = fetchFromGitHub { + owner = "containers"; + repo = "kubernetes-mcp-server"; + rev = "v${version}"; + hash = "sha256-m4oM8KMcDmXwIGaFw+VdnW22kLjt2SaD7qZV4kgTiu8="; + }; + + vendorHash = "sha256-JNeYn/IfzQ2VLDbHgrkserh3wrXYOWXBczBn2DUO6NM="; + + env.CGO_ENABLED = 0; + + subPackages = [ "cmd/kubernetes-mcp-server" ]; + + # Tests require access to a live Kubernetes cluster + doCheck = false; + + ldflags = [ + "-s" + "-w" + ]; + + passthru = { + category = "MCP Servers"; + updateScript = [ + "nix-update" + "--flake" + ".#kubernetes-mcp-server" + ]; + }; + + meta = with lib; { + description = "Model Context Protocol (MCP) server for Kubernetes and OpenShift"; + homepage = "https://github.com/containers/kubernetes-mcp-server"; + changelog = "https://github.com/containers/kubernetes-mcp-server/releases/tag/v${version}"; + license = licenses.asl20; + sourceProvenance = with sourceTypes; [ fromSource ]; + mainProgram = "kubernetes-mcp-server"; + platforms = platforms.all; + }; +} diff --git a/tasks/kubernetes-mcp-server.md b/tasks/kubernetes-mcp-server.md new file mode 100644 index 0000000..938c49f --- /dev/null +++ b/tasks/kubernetes-mcp-server.md @@ -0,0 +1,182 @@ +# Требования для добавления пакета `kubernetes-mcp-server` + +## Общая информация + +| Параметр | Значение | +|----------|----------| +| **Название пакета** | `kubernetes-mcp-server` | +| **Репозиторий** | https://github.com/containers/kubernetes-mcp-server | +| **Язык** | Go (91.6%) | +| **Модуль** | `github.com/containers/kubernetes-mcp-server` | +| **Бинарный файл** | `kubernetes-mcp-server` | +| **Точка входа** | `./cmd/kubernetes-mcp-server` | +| **Версия** | `v0.0.62` (latest) | +| **Лицензия** | Apache-2.0 | +| **Категория** | MCP Servers | + +## Описание + +Model Context Protocol (MCP) сервер для Kubernetes и OpenShift. Это нативная Go-реализация, которая напрямую взаимодействует с Kubernetes API **без** необходимости в `kubectl` или `helm`. Позволяет AI-агентам управлять ресурсами Kubernetes (поды, деплойменты, неймспейсы, события, Helm-чарты, Tekton-пайплайны и др.) через стандартизированный протокол MCP. + +## Шаги по добавлению + +### 1. Создать структуру директорий + +```bash +mkdir -p packages/kubernetes-mcp-server +``` + +### 2. Создать `packages/kubernetes-mcp-server/package.nix` + +Шаблон основан на `buildGoModule` (аналогично пакету `container-use`): + +- **`buildGoModule`** — стандартный билдер для Go-пакетов в nixpkgs +- **`vendorHash`** — хеш зависимостей Go (будет уточнён при первой сборке) +- **`CGO_ENABLED = 0`** — проект собирается без CGo (статическая линковка, кроссплатформенность) +- **`subPackages = [ "cmd/kubernetes-mcp-server" ]`** — указывает точку входа +- **`doCheck = false`** — тесты требуют доступ к реальному Kubernetes-кластеру, что невозможно в sandbox Nix +- **`ldflags`** — передача версии в бинарник (`-s -w` для уменьшения размера) +- **`passthru.updateScript`** — поддержка `nix-update` для автоматического обновления версии +- **`meta.mainProgram`** — `kubernetes-mcp-server` + +Примерный код `package.nix`: + +```nix +{ + lib, + buildGoModule, + fetchFromGitHub, +}: + +buildGoModule rec { + pname = "kubernetes-mcp-server"; + version = "0.0.62"; + + src = fetchFromGitHub { + owner = "containers"; + repo = "kubernetes-mcp-server"; + rev = "v${version}"; + hash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; # Будет уточнён при сборке + }; + + vendorHash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; # Будет уточнён при сборке + + env.CGO_ENABLED = 0; + + subPackages = [ "cmd/kubernetes-mcp-server" ]; + + # Тесты требуют доступ к Kubernetes-кластеру + doCheck = false; + + ldflags = [ + "-s" + "-w" + ]; + + passthru = { + category = "MCP Servers"; + updateScript = [ + "nix-update" + "--flake" + ".#kubernetes-mcp-server" + ]; + }; + + meta = with lib; { + description = "Model Context Protocol (MCP) server for Kubernetes and OpenShift"; + homepage = "https://github.com/containers/kubernetes-mcp-server"; + changelog = "https://github.com/containers/kubernetes-mcp-server/releases/tag/v${version}"; + license = licenses.asl20; + sourceProvenance = with sourceTypes; [ fromSource ]; + mainProgram = "kubernetes-mcp-server"; + platforms = platforms.all; + }; +} +``` + +### 3. Создать `packages/kubernetes-mcp-server/default.nix` + +Стандартная обёртка для blueprint: + +```nix +{ pkgs, ... }: +pkgs.callPackage ./package.nix { } +``` + +### 4. Первая сборка и получение хешей + +```bash +# Первая попытка сборки (ожидаемо упадёт с неверным хешем) +nix build .#kubernetes-mcp-server 2>&1 | grep -E "(hash|Hash)" + +# Подставить правильные значения hash и vendorHash в package.nix +``` + +Альтернативно, использовать `nix-update`: + +```bash +nix-update kubernetes-mcp-server --version=0.0.62 +``` + +### 5. Проверка + +```bash +# Сборка +nix build .#kubernetes-mcp-server + +# Запуск (проверка справки) +nix run .#kubernetes-mcp-server -- --help + +# Проверка всех пакетов +nix flake check +``` + +### 6. Обновить README.md + +Добавить строку в таблицу «Available Packages»: + +```markdown +| `kubernetes-mcp-server` | Model Context Protocol (MCP) server for Kubernetes and OpenShift | MCP Servers | +``` + +### 7. Коммит + +Использовать `conventional-commit` skill для создания коммита с сообщением типа: + +``` +feat: add kubernetes-mcp-server package +``` + +Или более детально: + +``` +feat(packages): add kubernetes-mcp-server v0.0.62 + +Model Context Protocol (MCP) server for Kubernetes and OpenShift. +Native Go implementation that interacts directly with the Kubernetes +API server without external dependencies like kubectl or helm. +``` + +## Особенности пакета + +| Особенность | Детали | +|-------------|--------| +| **Тип сборки** | Go module (`buildGoModule`) | +| **CGo** | Отключено (`CGO_ENABLED = 0`) | +| **Тесты** | Отключены (нужен Kubernetes-кластер) | +| **Платформы** | Все (`platforms.all`) | +| **Версионирование** | Стандартные теги `v0.0.X` | +| **Обновление** | `nix-update kubernetes-mcp-server` | + +## Зависимости (уже в nixpkgs) + +Пакет использует только стандартные Go-зависимости, указанные в `go.mod` и `go.sum`. Никаких дополнительных системных зависимостей не требуется благодаря `CGO_ENABLED = 0`. + +## Критерии приёмки + +- [ ] Пакет собирается: `nix build .#kubernetes-mcp-server` +- [ ] Бинарник запускается и выводит справку: `nix run .#kubernetes-mcp-server -- --help` +- [ ] `nix flake check` проходит без ошибок +- [ ] Пакет виден в списке: пакет появляется в выводе `nix flake show` +- [ ] README.md обновлён +- [ ] Коммит создан с использованием conventional commits