# 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
