diff --git a/README.md b/README.md index bf17b73..38ee473 100644 --- a/README.md +++ b/README.md @@ -1,52 +1,49 @@ # 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) │ -│ └── ModelContextProtocol 1.2.0 HTTP транспорт │ -└─────────────────────────────────────────────────────────────┘ +┌───────────────────────────────────────────────────────────┐ +│ HTTP Transport Layer (ASP.NET Core) │ +│ └── ModelContextProtocol 1.2.0 HTTP транспорт │ +└───────────────────────────────────────────────────────────┘ ↓ -┌─────────────────────────────────────────────────────────────┐ -│ Application Layer (Razor Pages UI) │ -│ └── Web-страницы для мониторинга K8s │ -└─────────────────────────────────────────────────────────────┘ +┌───────────────────────────────────────────────────────────┐ +│ Application Layer (Razor Pages UI) │ +│ └── Web-страницы для мониторинга K8s │ +└───────────────────────────────────────────────────────────┘ ↓ -┌─────────────────────────────────────────────────────────────┐ -│ Kubernetes Layer (Kubernetes Client) │ -│ └── Подключение к K8s API сервер через kubeconfig │ -└─────────────────────────────────────────────────────────────┘ +┌───────────────────────────────────────────────────────────┐ +│ Kubernetes Layer (Kubernetes Client) │ +│ └── Подключение к K8s API сервер через kubeconfig │ +└───────────────────────────────────────────────────────────┘ ``` **Потоки данных:** 1. **Initialize Flow**: Клиент → HTTP → Application → K8s Client → K8s API -2. **Tools Flow**: Клиент → RPC → Tools → Kubernetes → Возврат результата -3. **Health Check Flow**: /health → HTTP → Liveness probe → K8s status +2. **Tools Flow**: Клиент → RPC → Tools → [Jira/Confluence/K8s] → Возврат результата +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 - Docker Desktop (опционально) +### Запуск + ```bash cd LazyBear.MCP dotnet run ``` -### Запуск через Docker +Сервер запустится на `http://localhost:5000` + +### Docker ```bash docker build -t lazybear-mcp . docker run -p 5000:5000 -v $HOME/.kube:/root/.kube:ro lazybear-mcp ``` -Сервер запустится на `http://localhost:5000` +--- -## Примеры интеграции +## 📦 Основные модули MCP -### Codex (Windows конфигурация) +### 📋 Jira -Файл: `.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"] - } - } -} -``` - -### Использование через 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 +Работа с Jira Issues и JQL запросами. **Методы:** - `createIssue` – Создать новый тикет @@ -151,7 +84,7 @@ echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion": - `getIssueStatuses` – Получение доступных переходов статуса - `listIssueComments` – Список комментариев задачи -**Пример:** +**Пример вызова:** ```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` – Чтение конфигурации кластера - `writeConfig` – Обновление конфигурации - `deleteConfig` – Удаление конфигурации -**Пример:** - -```json -{ - "method": "k8sConfigTools/readConfig", - "params": {"namespace": "default"} -} -``` - -#### **K8sDeploymentTools** — Управление деплоями - -**Методы:** +**Деплои:** - `createDeployment` – Создать деплой - `updateDeployment` – Обновить деплой - `deleteDeployment` – Удалить деплой - `scaleDeployment` – Масштабировать деплой -**Пример:** +**Сети:** +- `createService` – Создать сервис +- `updateService` – Обновить сервис +- `deleteService` – Удалить сервис +- `createIngress` – Создать ingress +- `deleteIngress` – Удалить ingress + +**Поды:** +- `getPodStatus` – Получить статус пода +- `restartPod` – Перезапустить под +- `execIntoPod` – Выполнить команду в поде +- `deletePod` – Удалить под + +**Примеры вызова:** ```json { @@ -204,17 +174,6 @@ echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion": } ``` -#### **K8sNetworkTools** — Управление сетями - -**Методы:** -- `createService` – Создать сервис -- `updateService` – Обновить сервис -- `deleteService` – Удалить сервис -- `createIngress` – Создать ingress -- `deleteIngress` – Удалить ingress - -**Пример:** - ```json { "method": "k8sNetworkTools/createService", @@ -226,39 +185,56 @@ echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion": } ``` -#### **K8sPodsTools** — Управление подами - -**Методы:** -- `getPodStatus` – Получить статус пода -- `restartPod` – Перезапустить под -- `execIntoPod` – Выполнить команду в поде -- `deletePod` – Удалить под - -**Пример:** - ```json { "method": "k8sPodsTools/getPodStatus", - "params": {"name": "nginx-pod-abc123"} + "params": { "name": "nginx-pod-abc123" } } ``` -### Интерактивная панель (Pages/) +--- + +## 📁 Структура проекта ``` -┌────────────────────────────────────────────┐ -│ Dashboard: Обзор состояния кластера │ -├────────────────────────────────────────────┤ -│ Logs & Events: Журналы событий │ -│ Containers & Images: Контейнеры │ -│ Workloads & Nodes: Распределение │ -└────────────────────────────────────────────┘ +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: Обзор состояния кластера │ +├─────────────────────────────────────────┤ +│ Logs & Events: Журналы событий │ +│ Containers & Images: Контейнеры │ +│ Workloads & Nodes: Распределение │ +└─────────────────────────────────────────┘ +``` + +**Настройка в appsettings.json:** ```json -// appsettings.json { "Kubernetes": { "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 dotnet build ``` ### Запуск + ```bash dotnet run ``` -### Тестирование с MCP Inspector +### Тестирование + ```bash npx @modelcontextprotocol/inspector dotnet run --project LazyBear.MCP ``` -## Stack +--- -- .NET 10 -- ASP.NET Core 9 +## 📦 Stack -## License - -MIT +- **Язык:** C# +- **Framework:** .NET 10 +- **Framework Web:** ASP.NET Core 9 +- **UI:** Razor Pages +- **DB:** SQLite/SQL Server +- **Protocol:** Model Context Protocol (MCP) \ No newline at end of file