Обновление README: унификация структуры, добавление логотипа

This commit is contained in:
2026-04-13 16:09:42 +03:00
parent 8ac5ad2bac
commit e008115ced

352
README.md
View File

@@ -1,52 +1,49 @@
# LazyBear MCP Server # LazyBear MCP Server
.NET 10 сервер Model Context Protocol (MCP) для интеграции Kubernetes инструментов. ![LazyBear Logo](logo.png)
## Трехслойная архитектура **.NET 10 сервер Model Context Protocol (MCP) для интеграции с Jira, Confluence и Kubernetes.**
---
## ✨ Возможности
| Модуль | Описание | Статус |
|--------|----------|--------|
| 📋 **Jira** | Работа с задачами, JQL, комментариями | ✅ Доступно |
| 📄 **Confluence** | Работа со страницами и пространствами | ✅ Доступно |
| ☸️ **Kubernetes** | Управление деплоями, подами, сетями | ✅ Доступно |
---
## 🏗️ Архитектура
``` ```
┌───────────────────────────────────────────────────────────── ┌───────────────────────────────────────────────────────────┐
│ HTTP Transport Layer (ASP.NET Core) │ │ HTTP Transport Layer (ASP.NET Core) │
│ └── ModelContextProtocol 1.2.0 HTTP транспорт │ │ └── ModelContextProtocol 1.2.0 HTTP транспорт │
└───────────────────────────────────────────────────────────── └───────────────────────────────────────────────────────────┘
┌───────────────────────────────────────────────────────────── ┌───────────────────────────────────────────────────────────┐
│ Application Layer (Razor Pages UI) │ │ Application Layer (Razor Pages UI) │
│ └── Web-страницы для мониторинга K8s │ │ └── Web-страницы для мониторинга K8s │
└───────────────────────────────────────────────────────────── └───────────────────────────────────────────────────────────┘
┌───────────────────────────────────────────────────────────── ┌───────────────────────────────────────────────────────────┐
│ Kubernetes Layer (Kubernetes Client) │ │ Kubernetes Layer (Kubernetes Client) │
│ └── Подключение к K8s API сервер через kubeconfig │ │ └── Подключение к K8s API сервер через kubeconfig │
└───────────────────────────────────────────────────────────── └───────────────────────────────────────────────────────────┘
``` ```
**Потоки данных:** **Потоки данных:**
1. **Initialize Flow**: Клиент → HTTP → Application → K8s Client → K8s API 1. **Initialize Flow**: Клиент → HTTP → Application → K8s Client → K8s API
2. **Tools Flow**: Клиент → RPC → Tools → Kubernetes → Возврат результата 2. **Tools Flow**: Клиент → RPC → Tools → [Jira/Confluence/K8s] → Возврат результата
3. **Health Check Flow**: /health → HTTP → Liveness probe → K8s status 3. **Health Check Flow**: `/health` → HTTP → Liveness probe → Status
---
## Архитектура ## 🚀 Быстрый старт
```
LazyBear.MCP/
├── Program.cs # HTTP transport MCP сервер
├── Pages/ # Razor Pages UI
│ ├── Index.cshtml # Главная страница
│ └── Shared/ # Общие компоненты
├── Services/
│ └── Kubernetes/
│ ├── K8sConfigTools.cs # Инструменты конфигурации
│ ├── K8sDeploymentTools.cs # Инструменты деплоя
│ ├── K8sNetworkTools.cs # Инструменты сети
│ ├── K8sPodsTools.cs # Инструменты подов
│ ├── K8sClientFactory.cs # Factory для клиентов
│ └── K8sClientProvider.cs # Provider для клиентов
└── appsettings.json # Конфиг (логинг, K8s, allowed hosts)
```
## Быстрый старт
### Требования ### Требования
@@ -54,93 +51,29 @@ LazyBear.MCP/
- Kubectl и kubeconfig - Kubectl и kubeconfig
- Docker Desktop (опционально) - Docker Desktop (опционально)
### Запуск
```bash ```bash
cd LazyBear.MCP cd LazyBear.MCP
dotnet run dotnet run
``` ```
### Запуск через Docker Сервер запустится на `http://localhost:5000`
### Docker
```bash ```bash
docker build -t lazybear-mcp . docker build -t lazybear-mcp .
docker run -p 5000:5000 -v $HOME/.kube:/root/.kube:ro lazybear-mcp docker run -p 5000:5000 -v $HOME/.kube:/root/.kube:ro lazybear-mcp
``` ```
Сервер запустится на `http://localhost:5000` ---
## Примеры интеграции ## 📦 Основные модули MCP
### Codex (Windows конфигурация) ### 📋 Jira
Файл: `.mcp.json` Работа с Jira Issues и JQL запросами.
```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"]
}
}
}
```
### Использование через CLI
Тестирование через MCP inspector:
```bash
npm install -g @modelcontextprotocol/inspector
npx @modelcontextprotocol/inspector dotnet run --project LazyBear.MCP
```
Прямое тестирование через stdin:
```bash
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
```
## Доступные инструменты
### Kubernetes (Services/Kubernetes/)
#### **JiraTools** — Работа с Jira Issues
**Методы:** **Методы:**
- `createIssue` Создать новый тикет - `createIssue` Создать новый тикет
@@ -151,7 +84,7 @@ echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":
- `getIssueStatuses` Получение доступных переходов статуса - `getIssueStatuses` Получение доступных переходов статуса
- `listIssueComments` Список комментариев задачи - `listIssueComments` Список комментариев задачи
**Пример:** **Пример вызова:**
```json ```json
{ {
@@ -167,31 +100,68 @@ echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":
} }
``` ```
#### **K8sConfigTools** — Управление конфигурациями K8s ---
### 📄 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` Чтение конфигурации кластера - `readConfig` Чтение конфигурации кластера
- `writeConfig` Обновление конфигурации - `writeConfig` Обновление конфигурации
- `deleteConfig` Удаление конфигурации - `deleteConfig` Удаление конфигурации
**Пример:** **Деплои:**
```json
{
"method": "k8sConfigTools/readConfig",
"params": {"namespace": "default"}
}
```
#### **K8sDeploymentTools** — Управление деплоями
**Методы:**
- `createDeployment` Создать деплой - `createDeployment` Создать деплой
- `updateDeployment` Обновить деплой - `updateDeployment` Обновить деплой
- `deleteDeployment` Удалить деплой - `deleteDeployment` Удалить деплой
- `scaleDeployment` Масштабировать деплой - `scaleDeployment` Масштабировать деплой
**Пример:** **Сети:**
- `createService` Создать сервис
- `updateService` Обновить сервис
- `deleteService` Удалить сервис
- `createIngress` Создать ingress
- `deleteIngress` Удалить ingress
**Поды:**
- `getPodStatus` Получить статус пода
- `restartPod` Перезапустить под
- `execIntoPod` Выполнить команду в поде
- `deletePod` Удалить под
**Примеры вызова:**
```json ```json
{ {
@@ -204,17 +174,6 @@ echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":
} }
``` ```
#### **K8sNetworkTools** — Управление сетями
**Методы:**
- `createService` Создать сервис
- `updateService` Обновить сервис
- `deleteService` Удалить сервис
- `createIngress` Создать ingress
- `deleteIngress` Удалить ingress
**Пример:**
```json ```json
{ {
"method": "k8sNetworkTools/createService", "method": "k8sNetworkTools/createService",
@@ -226,16 +185,6 @@ echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":
} }
``` ```
#### **K8sPodsTools** — Управление подами
**Методы:**
- `getPodStatus` Получить статус пода
- `restartPod` Перезапустить под
- `execIntoPod` Выполнить команду в поде
- `deletePod` Удалить под
**Пример:**
```json ```json
{ {
"method": "k8sPodsTools/getPodStatus", "method": "k8sPodsTools/getPodStatus",
@@ -243,22 +192,49 @@ echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":
} }
``` ```
### Интерактивная панель (Pages/) ---
## 📁 Структура проекта
``` ```
┌────────────────────────────────────────────┐ 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: Обзор состояния кластера │ │ Dashboard: Обзор состояния кластера │
├──────────────────────────────────────────── ├─────────────────────────────────────────┤
│ Logs & Events: Журналы событий │ │ Logs & Events: Журналы событий │
│ Containers & Images: Контейнеры │ │ Containers & Images: Контейнеры │
│ Workloads & Nodes: Распределение │ │ Workloads & Nodes: Распределение │
└──────────────────────────────────────────── └─────────────────────────────────────────┘
``` ```
**Настройка:** **Настройка в appsettings.json:**
```json ```json
// appsettings.json
{ {
"Kubernetes": { "Kubernetes": {
"KubeconfigPath": "~/.kube/config", "KubeconfigPath": "~/.kube/config",
@@ -273,29 +249,101 @@ echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":
} }
``` ```
---
## Разработка ## 🔌 Интеграция
### 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 ```bash
dotnet build dotnet build
``` ```
### Запуск ### Запуск
```bash ```bash
dotnet run dotnet run
``` ```
### Тестирование с MCP Inspector ### Тестирование
```bash ```bash
npx @modelcontextprotocol/inspector dotnet run --project LazyBear.MCP npx @modelcontextprotocol/inspector dotnet run --project LazyBear.MCP
``` ```
## Stack ---
- .NET 10 ## 📦 Stack
- ASP.NET Core 9
## License - **Язык:** C#
- **Framework:** .NET 10
MIT - **Framework Web:** ASP.NET Core 9
- **UI:** Razor Pages
- **DB:** SQLite/SQL Server
- **Protocol:** Model Context Protocol (MCP)