feat: добавить поддержку GitLab (api, clients, tools) и обновить документацию
This commit is contained in:
166
README.md
166
README.md
@@ -2,7 +2,7 @@
|
||||
|
||||

|
||||
|
||||
**.NET 10 сервер Model Context Protocol (MCP) для интеграции с Jira, Confluence и Kubernetes.**
|
||||
**.NET 10 сервер Model Context Protocol (MCP) для интеграции с Jira, Confluence, Kubernetes и GitLab.**
|
||||
|
||||
---
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
| 📋 **Jira** | Работа с задачами, JQL, комментариями | ✅ Доступно |
|
||||
| 📄 **Confluence** | Работа со страницами и пространствами | ✅ Доступно |
|
||||
| ☸️ **Kubernetes** | Управление деплоями, подами, сетями | ✅ Доступно |
|
||||
| 🌳 **GitLab** | Работа с репозиториями, MR, Issue, ветками, тегами | ✅ Доступно |
|
||||
| 🖥️ **TUI** | Интерактивная консольная панель | ✅ Доступно |
|
||||
| 🌐 **Localization** | Многоязычный интерфейс (RU/EN) | ✅ Доступно |
|
||||
|
||||
@@ -21,26 +22,29 @@
|
||||
## 🏗️ Архитектура
|
||||
|
||||
```
|
||||
┌───────────────────────────────────────────────────────────┐
|
||||
┌───...──────────────────────────────────────────────────────┐
|
||||
│ 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 │
|
||||
└───────────────────────────────────────────────────────────┘
|
||||
┌───...──────────────────────────────────────────────────────┐
|
||||
│ Integration Layers │
|
||||
│ ├── Jira API (REST) │
|
||||
│ ├── Confluence API (REST) │
|
||||
│ ├── Kubernetes API (REST) │
|
||||
│ └── GitLab API (REST) │
|
||||
└───...──────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**Потоки данных:**
|
||||
|
||||
1. **Initialize Flow**: Клиент → HTTP → Application → K8s Client → K8s API
|
||||
2. **Tools Flow**: Клиент → RPC → Tools → [Jira/Confluence/K8s] → Возврат результата
|
||||
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
|
||||
|
||||
---
|
||||
@@ -51,6 +55,7 @@
|
||||
|
||||
- .NET 10 SDK
|
||||
- Kubectl и kubeconfig
|
||||
- GitLab Personal Access Token (опционально)
|
||||
- Docker Desktop (опционально)
|
||||
|
||||
### Запуск
|
||||
@@ -125,11 +130,7 @@ docker run -p 5000:5000 -v $HOME/.kube:/root/.kube:ro lazybear-mcp
|
||||
"params": {
|
||||
"spaceKey": "LAZYBEAR",
|
||||
"title": "Инструкция по развёртыванию",
|
||||
"body": "# Инструкция по развёртыванию\n\nШаг 1: Клонируйте репозиторий...",
|
||||
"parentPageId": null
|
||||
}
|
||||
}
|
||||
```
|
||||
"body": "# Инструкция по развёртыванию\n\nШаг 1: Клонируйте репозиторий.
|
||||
|
||||
---
|
||||
|
||||
@@ -176,21 +177,83 @@ docker run -p 5000:5000 -v $HOME/.kube:/root/.kube:ro lazybear-mcp
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 🌳 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": "k8sNetworkTools/createService",
|
||||
"method": "gitlabTools/list_projects",
|
||||
"params": {}
|
||||
}
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"method": "gitlabTools/create_merge_request",
|
||||
"params": {
|
||||
"name": "nginx-svc",
|
||||
"type": "ClusterIP",
|
||||
"port": 80
|
||||
"sourceBranch": "feature-xyz",
|
||||
"targetBranch": "main",
|
||||
"title": "Add new feature",
|
||||
"description": "Implements new feature xyz"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"method": "k8sPodsTools/getPodStatus",
|
||||
"params": { "name": "nginx-pod-abc123" }
|
||||
"method": "gitlabTools/create_issue",
|
||||
"params": {
|
||||
"title": "Fix production bug",
|
||||
"description": "Critical bug in production environment",
|
||||
"assigneeId": 123,
|
||||
"labels": ["bug", "critical"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
@@ -209,13 +272,24 @@ LazyBear.MCP/
|
||||
│ │ └── JiraIssueTools.cs # Инструменты для Jira
|
||||
│ ├── Confluence/
|
||||
│ │ └── ConfluencePagesTools.cs # Инструменты для Confluence
|
||||
│ └── Kubernetes/
|
||||
│ ├── K8sConfigTools.cs # Инструменты конфигурации
|
||||
│ ├── K8sDeploymentTools.cs # Инструменты деплоя
|
||||
│ ├── K8sNetworkTools.cs # Инструменты сети
|
||||
│ ├── K8sPodsTools.cs # Инструменты подов
|
||||
│ ├── K8sClientFactory.cs # Factory для клиентов
|
||||
│ └── K8sClientProvider.cs # Provider для клиентов
|
||||
│ ├── 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
|
||||
```
|
||||
@@ -225,13 +299,13 @@ LazyBear.MCP/
|
||||
## 🖥️ Интерактивная панель
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────┐
|
||||
┌─...──────────────────────────────────────────────┐
|
||||
│ Dashboard: Обзор состояния кластера │
|
||||
├─────────────────────────────────────────┤
|
||||
├─...──────────────────────────────────────────────┤
|
||||
│ Logs & Events: Журналы событий │
|
||||
│ Containers & Images: Контейнеры │
|
||||
│ Workloads & Nodes: Распределение │
|
||||
└─────────────────────────────────────────┘
|
||||
└─...──────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**Настройка в appsettings.json:**
|
||||
@@ -242,6 +316,20 @@ LazyBear.MCP/
|
||||
"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",
|
||||
@@ -349,6 +437,7 @@ npx @modelcontextprotocol/inspector dotnet run --project LazyBear.MCP
|
||||
- **UI:** Razor Pages
|
||||
- **DB:** SQLite/SQL Server
|
||||
- **Protocol:** Model Context Protocol (MCP)
|
||||
- **API Clients:** RestSharp (для Jira, Confluence, GitLab), Kubernetes Client (для K8s)
|
||||
|
||||
**Документация:**
|
||||
- **Сгенерированный API**: `/swagger` — Swagger UI
|
||||
@@ -367,4 +456,15 @@ 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*
|
||||
Reference in New Issue
Block a user