Обновление README: унификация структуры, добавление логотипа
This commit is contained in:
374
README.md
374
README.md
@@ -1,52 +1,49 @@
|
|||||||
# LazyBear MCP Server
|
# LazyBear MCP Server
|
||||||
|
|
||||||
.NET 10 сервер Model Context Protocol (MCP) для интеграции Kubernetes инструментов.
|

|
||||||
|
|
||||||
## Трехслойная архитектура
|
**.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,39 +185,56 @@ echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### **K8sPodsTools** — Управление подами
|
|
||||||
|
|
||||||
**Методы:**
|
|
||||||
- `getPodStatus` – Получить статус пода
|
|
||||||
- `restartPod` – Перезапустить под
|
|
||||||
- `execIntoPod` – Выполнить команду в поде
|
|
||||||
- `deletePod` – Удалить под
|
|
||||||
|
|
||||||
**Пример:**
|
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"method": "k8sPodsTools/getPodStatus",
|
"method": "k8sPodsTools/getPodStatus",
|
||||||
"params": {"name": "nginx-pod-abc123"}
|
"params": { "name": "nginx-pod-abc123" }
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Интерактивная панель (Pages/)
|
---
|
||||||
|
|
||||||
|
## 📁 Структура проекта
|
||||||
|
|
||||||
```
|
```
|
||||||
┌────────────────────────────────────────────┐
|
LazyBear.MCP/
|
||||||
│ Dashboard: Обзор состояния кластера │
|
├── Program.cs # HTTP transport MCP сервер
|
||||||
├────────────────────────────────────────────┤
|
├── Pages/ # Razor Pages UI
|
||||||
│ Logs & Events: Журналы событий │
|
│ ├── Index.cshtml # Главная страница
|
||||||
│ Containers & Images: Контейнеры │
|
│ └── Shared/ # Общие компоненты
|
||||||
│ Workloads & Nodes: Распределение │
|
├── 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: Обзор состояния кластера │
|
||||||
|
├─────────────────────────────────────────┤
|
||||||
|
│ Logs & Events: Журналы событий │
|
||||||
|
│ Containers & Images: Контейнеры │
|
||||||
|
│ 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)
|
||||||
Reference in New Issue
Block a user