# 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
<!-- LazyBear.MCP/Program.cs -->
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*