4f78606b2c0a406e9d29b53927497a8b5a19e589
LazyBear MCP Server
.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) │
└───...──────────────────────────────────────────────────────┘
Потоки данных:
- Initialize Flow: Клиент → HTTP → Application → Integration Client → API
- Tools Flow: Клиент → RPC → Tools → [Jira/Confluence/K8s/GitLab] → Возврат результата
- Health Check Flow:
/health→ HTTP → Liveness probe → Status
🚀 Быстрый старт
Требования
- .NET 10 SDK
- Kubectl и kubeconfig
- GitLab Personal Access Token (опционально)
- Docker Desktop (опционально)
Запуск
cd LazyBear.MCP
dotnet run
Сервер запустится на http://localhost:5000
Docker
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– Поиск тикетов по JQLaddComment– Добавить комментарийgetIssueStatuses– Получение доступных переходов статусаlistIssueComments– Список комментариев задачи
Пример вызова:
{
"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– Переместить страницу
Пример вызова:
{
"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– Список всех MRget_merge_request– Информация о конкретном MRcreate_merge_request– Создание MRclose_merge_request– Закрытие MRopen_merge_request– Открытие MRlist_merge_request_notes– Замечания к MRcreate_merge_request_note– Добавление замечанияdelete_merge_request_note– Удаление замечания
Issues:
list_issues– Список Issueslist_issues_simple– Быстрый список Issuesget_issue– Информация об Issuecreate_issue– Создание Issueupdate_issue– Обновление Issueclose_issue– Закрытие Issueopen_issue– Открытие Issuelist_issue_notes– Замечания к Issuecreate_issue_note– Добавление замечанияdelete_issue_note– Удаление замечания
Ветки:
list_branches– Список ветокget_branch– Информация о веткеcreate_branch– Создание веткиdelete_branch– Удаление веткиprotect_branch– Защита веткиunprotect_branch– Удаление защиты
Примеры вызова:
{
"method": "gitlabTools/list_projects",
"params": {}
}
{
"method": "gitlabTools/create_merge_request",
"params": {
"sourceBranch": "feature-xyz",
"targetBranch": "main",
"title": "Add new feature",
"description": "Implements new feature xyz"
}
}
{
"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:
{
"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
{
"mcpServers": {
"lazybear": {
"command": "dotnet",
"args": ["run", "--project", "E:\\Codex\\LazyBearWorks\\LazyBear.MCP"]
}
}
}
Continue (VS Code)
Файл: .vscode/continue/config.json
{
"mcpServers": {
"lazybear": {
"command": "dotnet",
"args": ["run", "--project", "${workspaceFolder}/LazyBear.MCP"],
"type": "stdio"
}
}
}
OpenCode (Linux/Mac)
Файл: ~/.opencode/.mcp.json
{
"mcpServers": {
"lazybear": {
"command": "dotnet",
"args": ["run", "--project", "~/LazyBearWorks/LazyBear.MCP"]
}
}
}
MCP Inspector
npm install -g @modelcontextprotocol/inspector
npx @modelcontextprotocol/inspector dotnet run --project LazyBear.MCP
🔧 CLI тестирование
# Прямое тестирование через 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
🛠️ Разработка
Сборка
dotnet build
Запуск
dotnet run
Тестирование
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)
- API Clients: RestSharp (для Jira, Confluence, GitLab), Kubernetes Client (для K8s)
Документация:
- Сгенерированный API:
/swagger— Swagger UI - Метаданные методов: MCP Tools — авт. описание от
Summary/Description
OpenAPI/Swagger
Включите для просмотра API:
<!-- 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));
📚 Ссылки
Встроенная документация по MCP
Description
Languages
C#
83.6%
HTML
15.3%
CSS
0.6%
PowerShell
0.4%
