302 lines
8.7 KiB
Markdown
302 lines
8.7 KiB
Markdown
# 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
|