Files
LazyBearWorks/README.md

302 lines
8.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# LazyBear MCP Server
.NET 10 сервер Model Context Protocol (MCP) для интеграции Kubernetes инструментов.
## Трехслойная архитектура
```
┌─────────────────────────────────────────────────────────────┐
│ 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 │
└─────────────────────────────────────────────────────────────┘
```
**Потоки данных:**
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
## Архитектура
```
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)
```
## Быстрый старт
### Требования
- .NET 10 SDK
- Kubectl и kubeconfig
- Docker Desktop (опционально)
```bash
cd LazyBear.MCP
dotnet run
```
### Запуск через Docker
```bash
docker build -t lazybear-mcp .
docker run -p 5000:5000 -v $HOME/.kube:/root/.kube:ro lazybear-mcp
```
Сервер запустится на `http://localhost:5000`
## Примеры интеграции
### 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"]
}
}
}
```
### Использование через 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` Создать новый тикет
- `updateIssue` Обновить существующий тикет
- `getIssueDetails` Получить детали тикета
- `searchIssues` Поиск тикетов по JQL
- `addComment` Добавить комментарий
- `getIssueStatuses` Получение доступных переходов статуса
- `listIssueComments` Список комментариев задачи
**Пример:**
```json
{
"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"
}
}
```
#### **K8sConfigTools** — Управление конфигурациями K8s
**Методы:**
- `readConfig` Чтение конфигурации кластера
- `writeConfig` Обновление конфигурации
- `deleteConfig` Удаление конфигурации
**Пример:**
```json
{
"method": "k8sConfigTools/readConfig",
"params": {"namespace": "default"}
}
```
#### **K8sDeploymentTools** — Управление деплоями
**Методы:**
- `createDeployment` Создать деплой
- `updateDeployment` Обновить деплой
- `deleteDeployment` Удалить деплой
- `scaleDeployment` Масштабировать деплой
**Пример:**
```json
{
"method": "k8sDeploymentTools/createDeployment",
"params": {
"name": "nginx",
"replicas": 3,
"image": "nginx:latest"
}
}
```
#### **K8sNetworkTools** — Управление сетями
**Методы:**
- `createService` Создать сервис
- `updateService` Обновить сервис
- `deleteService` Удалить сервис
- `createIngress` Создать ingress
- `deleteIngress` Удалить ingress
**Пример:**
```json
{
"method": "k8sNetworkTools/createService",
"params": {
"name": "nginx-svc",
"type": "ClusterIP",
"port": 80
}
}
```
#### **K8sPodsTools** — Управление подами
**Методы:**
- `getPodStatus` Получить статус пода
- `restartPod` Перезапустить под
- `execIntoPod` Выполнить команду в поде
- `deletePod` Удалить под
**Пример:**
```json
{
"method": "k8sPodsTools/getPodStatus",
"params": {"name": "nginx-pod-abc123"}
}
```
### Интерактивная панель (Pages/)
```
┌────────────────────────────────────────────┐
│ Dashboard: Обзор состояния кластера │
├────────────────────────────────────────────┤
│ Logs & Events: Журналы событий │
│ Containers & Images: Контейнеры │
│ Workloads & Nodes: Распределение │
└────────────────────────────────────────────┘
```
**Настройка:**
```json
// appsettings.json
{
"Kubernetes": {
"KubeconfigPath": "~/.kube/config",
"DefaultNamespace": "default"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"ModelContextProtocol": "Debug"
}
}
}
```
## Разработка
### Сборка
```bash
dotnet build
```
### Запуск
```bash
dotnet run
```
### Тестирование с MCP Inspector
```bash
npx @modelcontextprotocol/inspector dotnet run --project LazyBear.MCP
```
## Stack
- .NET 10
- ASP.NET Core 9
## License
MIT