# LazyBear MCP Server .NET 10 сервер Model Context Protocol (MCP) для интеграции Kubernetes инструментов. ## Трехслойная архитектура ``` ┌─────────────────────────────────────────────────────────────┐ │ HTTP Transport Layer (ASP.NET Core) │ │ └── ModelContextProtocol 1.2.0 HTTP транспорт │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ Application Layer (Razor Pages UI) │ │ └── Web-страницы для мониторинга K8s │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ Kubernetes Layer (Kubernetes Client) │ │ └── Подключение к K8s API сервер через kubeconfig │ └─────────────────────────────────────────────────────────────┘ ``` **Потоки данных:** 1. **Initialize Flow**: Клиент → HTTP → Application → K8s Client → K8s API 2. **Tools Flow**: Клиент → RPC → Tools → Kubernetes → Возврат результата 3. **Health Check Flow**: /health → HTTP → Liveness probe → K8s status ## Архитектура ``` LazyBear.MCP/ ├── Program.cs # HTTP transport MCP сервер ├── Pages/ # Razor Pages UI │ ├── Index.cshtml # Главная страница │ └── Shared/ # Общие компоненты ├── Services/ │ └── Kubernetes/ │ ├── K8sConfigTools.cs # Инструменты конфигурации │ ├── K8sDeploymentTools.cs # Инструменты деплоя │ ├── K8sNetworkTools.cs # Инструменты сети │ ├── K8sPodsTools.cs # Инструменты подов │ ├── K8sClientFactory.cs # Factory для клиентов │ └── K8sClientProvider.cs # Provider для клиентов └── appsettings.json # Конфиг (логинг, K8s, allowed hosts) ``` ## Быстрый старт ### Требования - .NET 10 SDK - Kubectl и kubeconfig - Docker Desktop (опционально) ```bash cd LazyBear.MCP dotnet run ``` ### Запуск через Docker ```bash docker build -t lazybear-mcp . docker run -p 5000:5000 -v $HOME/.kube:/root/.kube:ro lazybear-mcp ``` Сервер запустится на `http://localhost:5000` ## Примеры интеграции ### Codex (Windows конфигурация) Файл: `.mcp.json` ```json { "mcpServers": { "lazybear": { "command": "dotnet", "args": ["run", "--project", "E:\\Codex\\LazyBearWorks\\LazyBear.MCP"] } } } ``` ### Continue (расширение VS Code) Файл: `.vscode/continue/config.json` ```json { "mcpServers": { "lazybear": { "command": "dotnet", "args": [ "run", "--project", "${workspaceFolder}/LazyBear.MCP" ], "type": "stdio" } } } ``` ### OpenCode (Linux/Mac конфигурация) Файл: `~/.opencode/.mcp.json` ```json { "mcpServers": { "lazybear": { "command": "dotnet", "args": ["run", "--project", "~/LazyBearWorks/LazyBear.MCP"] } } } ``` ### Использование через CLI Тестирование через MCP inspector: ```bash npm install -g @modelcontextprotocol/inspector npx @modelcontextprotocol/inspector dotnet run --project LazyBear.MCP ``` Прямое тестирование через stdin: ```bash echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test-client","version":"1.0"}}}' | dotnet run --project LazyBear.MCP ``` ## Доступные инструменты ### Kubernetes (Services/Kubernetes/) #### **JiraTools** — Работа с Jira Issues **Методы:** - `createIssue` – Создать новый тикет - `updateIssue` – Обновить существующий тикет - `getIssueDetails` – Получить детали тикета - `searchIssues` – Поиск тикетов по JQL - `addComment` – Добавить комментарий - `getIssueStatuses` – Получение доступных переходов статуса - `listIssueComments` – Список комментариев задачи **Пример:** ```json { "method": "jiraTools/createIssue", "params": { "projectKey": "LAZYBEAR", "summary": "Fix memory leak in K8s deployment", "description": "Memory leak detected in pod nginx-pod-abc123", "type": "BUG", "priority": "High", "assignee": "dev@example.com" } } ``` #### **K8sConfigTools** — Управление конфигурациями K8s **Методы:** - `readConfig` – Чтение конфигурации кластера - `writeConfig` – Обновление конфигурации - `deleteConfig` – Удаление конфигурации **Пример:** ```json { "method": "k8sConfigTools/readConfig", "params": {"namespace": "default"} } ``` #### **K8sDeploymentTools** — Управление деплоями **Методы:** - `createDeployment` – Создать деплой - `updateDeployment` – Обновить деплой - `deleteDeployment` – Удалить деплой - `scaleDeployment` – Масштабировать деплой **Пример:** ```json { "method": "k8sDeploymentTools/createDeployment", "params": { "name": "nginx", "replicas": 3, "image": "nginx:latest" } } ``` #### **K8sNetworkTools** — Управление сетями **Методы:** - `createService` – Создать сервис - `updateService` – Обновить сервис - `deleteService` – Удалить сервис - `createIngress` – Создать ingress - `deleteIngress` – Удалить ingress **Пример:** ```json { "method": "k8sNetworkTools/createService", "params": { "name": "nginx-svc", "type": "ClusterIP", "port": 80 } } ``` #### **K8sPodsTools** — Управление подами **Методы:** - `getPodStatus` – Получить статус пода - `restartPod` – Перезапустить под - `execIntoPod` – Выполнить команду в поде - `deletePod` – Удалить под **Пример:** ```json { "method": "k8sPodsTools/getPodStatus", "params": {"name": "nginx-pod-abc123"} } ``` ### Интерактивная панель (Pages/) ``` ┌────────────────────────────────────────────┐ │ Dashboard: Обзор состояния кластера │ ├────────────────────────────────────────────┤ │ Logs & Events: Журналы событий │ │ Containers & Images: Контейнеры │ │ Workloads & Nodes: Распределение │ └────────────────────────────────────────────┘ ``` **Настройка:** ```json // appsettings.json { "Kubernetes": { "KubeconfigPath": "~/.kube/config", "DefaultNamespace": "default" }, "Logging": { "LogLevel": { "Default": "Information", "ModelContextProtocol": "Debug" } } } ``` ## Разработка ### Сборка ```bash dotnet build ``` ### Запуск ```bash dotnet run ``` ### Тестирование с MCP Inspector ```bash npx @modelcontextprotocol/inspector dotnet run --project LazyBear.MCP ``` ## Stack - .NET 10 - ASP.NET Core 9 ## License MIT