# LazyBear MCP Server ![LazyBear Logo](logo.png) **.NET 10 сервер Model Context Protocol (MCP) для интеграции с Jira, Confluence и Kubernetes.** --- ## ✨ Возможности | Модуль | Описание | Статус | |--------|----------|--------| | 📋 **Jira** | Работа с задачами, JQL, комментариями | ✅ Доступно | | 📄 **Confluence** | Работа со страницами и пространствами | ✅ Доступно | | ☸️ **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 → [Jira/Confluence/K8s] → Возврат результата 3. **Health Check Flow**: `/health` → HTTP → Liveness probe → Status --- ## 🚀 Быстрый старт ### Требования - .NET 10 SDK - Kubectl и kubeconfig - Docker Desktop (опционально) ### Запуск ```bash cd LazyBear.MCP dotnet run ``` Сервер запустится на `http://localhost:5000` ### Docker ```bash docker build -t lazybear-mcp . docker run -p 5000:5000 -v $HOME/.kube:/root/.kube:ro lazybear-mcp ``` --- ## 📦 Основные модули MCP ### 📋 Jira Работа с Jira Issues и JQL запросами. **Методы:** - `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" } } ``` --- ### 📄 Confluence Работа с Confluence страницами и пространствами. **Методы:** - `createPage` – Создать новую страницу - `updatePage` – Обновить существующую страницу - `deletePage` – Удалить страницу - `getPageContent` – Получить содержимое страницы - `searchPages` – Поиск страниц по ключевым словам - `getSpace` – Получить информацию о пространстве - `movePage` – Переместить страницу **Пример вызова:** ```json { "method": "confluenceTools/createPage", "params": { "spaceKey": "LAZYBEAR", "title": "Инструкция по развёртыванию", "body": "# Инструкция по развёртыванию\n\nШаг 1: Клонируйте репозиторий...", "parentPageId": null } } ``` --- ### ☸️ Kubernetes Управление K8s кластером. **Методы:** **Конфигурация:** - `readConfig` – Чтение конфигурации кластера - `writeConfig` – Обновление конфигурации - `deleteConfig` – Удаление конфигурации **Деплои:** - `createDeployment` – Создать деплой - `updateDeployment` – Обновить деплой - `deleteDeployment` – Удалить деплой - `scaleDeployment` – Масштабировать деплой **Сети:** - `createService` – Создать сервис - `updateService` – Обновить сервис - `deleteService` – Удалить сервис - `createIngress` – Создать ingress - `deleteIngress` – Удалить ingress **Поды:** - `getPodStatus` – Получить статус пода - `restartPod` – Перезапустить под - `execIntoPod` – Выполнить команду в поде - `deletePod` – Удалить под **Примеры вызова:** ```json { "method": "k8sDeploymentTools/createDeployment", "params": { "name": "nginx", "replicas": 3, "image": "nginx:latest" } } ``` ```json { "method": "k8sNetworkTools/createService", "params": { "name": "nginx-svc", "type": "ClusterIP", "port": 80 } } ``` ```json { "method": "k8sPodsTools/getPodStatus", "params": { "name": "nginx-pod-abc123" } } ``` --- ## 📁 Структура проекта ``` LazyBear.MCP/ ├── Program.cs # HTTP transport MCP сервер ├── Pages/ # Razor Pages UI │ ├── Index.cshtml # Главная страница │ └── Shared/ # Общие компоненты ├── Services/ │ ├── Jira/ │ │ └── JiraIssueTools.cs # Инструменты для Jira │ ├── Confluence/ │ │ └── ConfluencePagesTools.cs # Инструменты для Confluence │ └── Kubernetes/ │ ├── K8sConfigTools.cs # Инструменты конфигурации │ ├── K8sDeploymentTools.cs # Инструменты деплоя │ ├── K8sNetworkTools.cs # Инструменты сети │ ├── K8sPodsTools.cs # Инструменты подов │ ├── K8sClientFactory.cs # Factory для клиентов │ └── K8sClientProvider.cs # Provider для клиентов ├── appsettings.json # Конфиг └── global.json # Пин SDK ``` --- ## 🖥️ Интерактивная панель ``` ┌─────────────────────────────────────────┐ │ Dashboard: Обзор состояния кластера │ ├─────────────────────────────────────────┤ │ Logs & Events: Журналы событий │ │ Containers & Images: Контейнеры │ │ Workloads & Nodes: Распределение │ └─────────────────────────────────────────┘ ``` **Настройка в appsettings.json:** ```json { "Kubernetes": { "KubeconfigPath": "~/.kube/config", "DefaultNamespace": "default" }, "Logging": { "LogLevel": { "Default": "Information", "ModelContextProtocol": "Debug" } } } ``` --- ## 🔌 Интеграция ### 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"] } } } ``` ### MCP Inspector ```bash npm install -g @modelcontextprotocol/inspector npx @modelcontextprotocol/inspector dotnet run --project LazyBear.MCP ``` --- ## 🔧 CLI тестирование ```bash # Прямое тестирование через stdin 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 ``` --- ## 🛠️ Разработка ### Сборка ```bash dotnet build ``` ### Запуск ```bash dotnet run ``` ### Тестирование ```bash npx @modelcontextprotocol/inspector dotnet run --project LazyBear.MCP ``` --- ## 📦 Stack - **Язык:** C# - **Framework:** .NET 10 - **Framework Web:** ASP.NET Core 9 - **UI:** Razor Pages - **DB:** SQLite/SQL Server - **Protocol:** Model Context Protocol (MCP)