# LazyBear MCP Server ![LazyBear Logo](logo.png) **.NET 10 сервер Model Context Protocol (MCP) для интеграции с Jira, Confluence, Kubernetes и GitLab.** --- ## ✨ Возможности | Модуль | Описание | Статус | |--------|----------|--------| | 📋 **Jira** | Работа с задачами, JQL, комментариями | ✅ Доступно | | 📄 **Confluence** | Работа со страницами и пространствами | ✅ Доступно | | ☸️ **Kubernetes** | Управление деплоями, подами, сетями | ✅ Доступно | | 🌳 **GitLab** | Работа с репозиториями, MR, Issue, ветками, тегами | ✅ Доступно | | 🖥️ **TUI** | Интерактивная консольная панель | ✅ Доступно | | 🌐 **Localization** | Многоязычный интерфейс (RU/EN) | ✅ Доступно | --- ## 🏗️ Архитектура ``` ┌───────────────────────────────────────────────────────────┐ │ HTTP Transport Layer (ASP.NET Core) │ │ └── ModelContextProtocol 1.2.0 HTTP транспорт │ └───────────────────────────────────────────────────────────┘ ↓ ┌───────────────────────────────────────────────────────────┐ │ Application Layer (Razor Pages UI) │ │ └── Web-страницы для мониторинга K8s │ └───────────────────────────────────────────────────────────┘ ↓ ┌───────────────────────────────────────────────────────────┐ │ Integration Layers │ │ ├── Jira API (REST) │ │ ├── Confluence API (REST) │ │ ├── Kubernetes API (REST) │ │ └── GitLab API (REST) │ └───────────────────────────────────────────────────────────┘ ``` **Потоки данных:** 1. **Initialize Flow**: Клиент → HTTP → Application → Integration Client → API 2. **Tools Flow**: Клиент → RPC → Tools → [Jira/Confluence/K8s/GitLab] → Возврат результата 3. **Health Check Flow**: `/health` → HTTP → Liveness probe → Status --- ## 🚀 Быстрый старт ### Требования - .NET 10 SDK - Kubectl и kubeconfig - GitLab Personal Access Token (опционально) - 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: Клонируйте репозиторий. --- ### ☸️ 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" } } ``` --- ### 🌳 GitLab Работа с GitLab API для управления репозиториями, MR, Issue, ветками и тегами. **Методы:** **Репозитории:** - `list_projects` – Список всех репозиториев - `get_project` – Информация о репозитории по ID/path **Теги (Версии):** - `list_versions` – Список тегов репозитория - `create_version` – Создание нового тега - `delete_version` – Удаление тега **Merge Requests:** - `list_merge_requests` – Список всех MR - `get_merge_request` – Информация о конкретном MR - `create_merge_request` – Создание MR - `close_merge_request` – Закрытие MR - `open_merge_request` – Открытие MR - `list_merge_request_notes` – Замечания к MR - `create_merge_request_note` – Добавление замечания - `delete_merge_request_note` – Удаление замечания **Issues:** - `list_issues` – Список Issues - `list_issues_simple` – Быстрый список Issues - `get_issue` – Информация об Issue - `create_issue` – Создание Issue - `update_issue` – Обновление Issue - `close_issue` – Закрытие Issue - `open_issue` – Открытие Issue - `list_issue_notes` – Замечания к Issue - `create_issue_note` – Добавление замечания - `delete_issue_note` – Удаление замечания **Ветки:** - `list_branches` – Список веток - `get_branch` – Информация о ветке - `create_branch` – Создание ветки - `delete_branch` – Удаление ветки - `protect_branch` – Защита ветки - `unprotect_branch` – Удаление защиты **Примеры вызова:** ```json { "method": "gitlabTools/list_projects", "params": {} } ``` ```json { "method": "gitlabTools/create_merge_request", "params": { "sourceBranch": "feature-xyz", "targetBranch": "main", "title": "Add new feature", "description": "Implements new feature xyz" } } ``` ```json { "method": "gitlabTools/create_issue", "params": { "title": "Fix production bug", "description": "Critical bug in production environment", "assigneeId": 123, "labels": ["bug", "critical"] } } ``` --- ## 📁 Структура проекта ``` 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 для клиентов │ └── GitLab/ │ ├── GitLabToolModule.cs # Регистрация инструментов │ ├── GitLabToolsBase.cs # Базовый класс с common-методами │ ├── GitLabApiClient.cs # REST клиент (RestSharp) │ ├── GitLabClientProvider.cs # Provider │ ├── GitLabClientFactory.cs # Factory │ ├── GitLabRepositoryTools.cs # Репозитории │ ├── GitLabVersionTools.cs # Теги │ ├── GitLabMergeRequestTools.cs # MR │ ├── GitLabIssueTools.cs # Issues │ └── GitLabBranchTools.cs # Ветки ├── appsettings.json # Конфиг └── global.json # Пин SDK ``` --- ## 🖥️ Интерактивная панель ``` ┌───────────────────────────────────────────┐ │ Dashboard: Обзор состояния кластера │ ├───────────────────────────────────────────┤ │ Logs & Events: Журналы событий │ │ Containers & Images: Контейнеры │ │ Workloads & Nodes: Распределение │ └───────────────────────────────────────────┘ ``` **Настройка в appsettings.json:** ```json { "Kubernetes": { "KubeconfigPath": "~/.kube/config", "DefaultNamespace": "default" }, "Jira": { "Url": "https://jira.example.com", "Token": "your_jira_token", "Project": "" }, "Confluence": { "Url": "https://confluence.example.com", "Token": "your_confluence_token" }, "GitLab": { "Url": "https://gitlab.com", "Token": "your_gitlab_pat", "Project": "" }, "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 - **Protocol:** Model Context Protocol (MCP) - **API Clients:** RestSharp (для Jira, Confluence, GitLab), Kubernetes Client (для K8s) **Документация:** - **Сгенерированный API**: `/swagger` — Swagger UI - **Метаданные методов**: MCP Tools — авт. описание от `Summary/Description` ### OpenAPI/Swagger **Включите для просмотра API:** ```xml using Microsoft.AspNetCore.Mvc.Infrastructure; using Microsoft.AspNetCore.Mvc; using Microsoft.OpenApi.Models; var config = new OpenApiInfo { Title = "LazyBear MCP Server", Version = "1.0.0" }; builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(c => c.SwaggerDoc("v1", config)); ``` --- ## 📚 Ссылки - [GitLab API Documentation](https://docs.gitlab.com/ee/api/) - [MCP Specification](https://modelcontextprotocol.io) --- *Встроенная документация по MCP*