docs(gns-2): MCP stdio transport setup instructions
This commit is contained in:
134
MCP-STDIO-SETUP.md
Normal file
134
MCP-STDIO-SETUP.md
Normal file
@@ -0,0 +1,134 @@
|
||||
# MCP Stdio Transport Setup — GNS-2 Integration
|
||||
|
||||
Этот документ описывает, как запускать и использовать MCP (Model Context Protocol) stdio transport для интеграции с Gitea в рамках GNS-2 (Gitea-Nervous-System v2).
|
||||
|
||||
## Архитектура
|
||||
|
||||
```
|
||||
┌──────────────────┐ JSON-RPC (stdin/stdout) ┌──────────────┐
|
||||
│ Kilo Code Agent │ ◄──────────────────────────────► │forgejo-mcp │
|
||||
│ (Task tool) │ bunx @ric_/forgejo-mcp │(stdio server)│
|
||||
└──────────────────┘ └──────┬───────┘
|
||||
│
|
||||
│ HTTP Bearer
|
||||
│
|
||||
▼
|
||||
┌────────────────┐
|
||||
│ git.softuniq.eu│
|
||||
│ (Gitea API) │
|
||||
└────────────────┘
|
||||
```
|
||||
|
||||
## Два варианта MCP сервера
|
||||
|
||||
### Вариант 1: Удалённый HTTP MCP (Docker)
|
||||
|
||||
Запускается как Docker-контейнер и слушает HTTP на `localhost:3001`.
|
||||
|
||||
```bash
|
||||
# Запуск
|
||||
docker compose -f docker/mcp-gitea/docker-compose.yml up -d
|
||||
|
||||
# Проверка
|
||||
curl http://localhost:3001/health
|
||||
curl -H "Authorization: Bearer changeme" http://localhost:3001/mcp
|
||||
```
|
||||
|
||||
**Проблема:** Kilo Code не поддерживает HTTP SSE transport напрямую. Поэтому этот режим используется только как fallback.
|
||||
|
||||
### Вариант 2: Локальный stdio MCP (Рекомендуется)
|
||||
|
||||
Запускается как дочерний процесс через `bunx @ric_/forgejo-mcp`. Общается через stdin/stdout по JSON-RPC.
|
||||
|
||||
```bash
|
||||
# Установка (выполняется автоматически при первом bunx)
|
||||
bunx @ric_/forgejo-mcp --help
|
||||
|
||||
# Запуск stdio сервера
|
||||
export FORGEJO_URL=https://git.softuniq.eu
|
||||
export FORGEJO_TOKEN=your-token-here
|
||||
echo '{"jsonrpc":"2.0","method":"initialize","params":{},"id":1}' | bunx @ric_/forgejo-mcp
|
||||
```
|
||||
|
||||
## Как перезапустить
|
||||
|
||||
1. **Перезапуск Docker контейнера (если нужен HTTP endpoint):**
|
||||
```bash
|
||||
docker compose -f docker/mcp-gitea/docker-compose.yml restart
|
||||
```
|
||||
|
||||
2. **Перезапуск stdio bridge:**
|
||||
Stdio bridge не нуждается в перезапуске — он запускается как дочерний процесс для каждого вызова. Если нужно перезапустить среду:
|
||||
```bash
|
||||
# Очистить кеш bunx
|
||||
bunx --clear-cache @ric_/forgejo-mcp
|
||||
# Перезапустить
|
||||
bun scripts/mcp-gitea-stdio.cjs
|
||||
```
|
||||
|
||||
3. **Полный рестарт (после обновления кода):**
|
||||
```bash
|
||||
docker compose -f docker/mcp-gitea/docker-compose.yml down
|
||||
docker compose -f docker/mcp-gitea/docker-compose.yml up -d
|
||||
```
|
||||
|
||||
## Файлы проекта
|
||||
|
||||
| Файл | Назначение |
|
||||
|------|------------|
|
||||
| `src/kilocode/agent-manager/mcp-gitea-client.ts` | `MCPGiteaStdioClient`, `MCPGiteaHttpClient`, `HybridGiteaClient` |
|
||||
| `scripts/mcp-gitea-stdio.cjs` | Обёртка для запуска `@ric_/forgejo-mcp` через stdin/stdout |
|
||||
| `scripts/e2e-mcp-stdio-test-v3.py` | E2E тест: initialize → tools/list → get_issue |
|
||||
| `docker/mcp-gitea/docker-compose.yml` | Docker-контейнер с HTTP MCP сервером |
|
||||
|
||||
## Переменные окружения
|
||||
|
||||
| Переменная | Значение по умолчанию | Описание |
|
||||
|------------|----------------------|----------|
|
||||
| `FORGEJO_URL` | `https://git.softuniq.eu` | URL Gitea/Forgejo инстанса |
|
||||
| `FORGEJO_TOKEN` | — | Bearer токен или пароль для Basic Auth |
|
||||
| `MCP_STDIO_COMMAND` | `bun scripts/mcp-gitea-stdio.cjs` | Команда для запуска stdio bridge |
|
||||
| `MCP_GITEA_URL` | `http://localhost:3001` | URL HTTP MCP fallback |
|
||||
|
||||
## Использование в коде
|
||||
|
||||
```typescript
|
||||
import { MCPGiteaStdioClient } from "./mcp-gitea-client"
|
||||
|
||||
const client = new MCPGiteaStdioClient()
|
||||
await client.connect()
|
||||
|
||||
// Получить issue
|
||||
const issue = await client.callTool("get_issue", {
|
||||
owner: "UniqueSoft",
|
||||
repo: "APAW",
|
||||
index: 110
|
||||
})
|
||||
|
||||
// Создать комментарий
|
||||
await client.callTool("create_issue_comment", {
|
||||
owner: "UniqueSoft",
|
||||
repo: "APAW",
|
||||
index: 110,
|
||||
body: "## ✅ MCP Stdio Test\nAll tests passed."
|
||||
})
|
||||
```
|
||||
|
||||
## Проверка работоспособности
|
||||
|
||||
```bash
|
||||
cd /home/swp/Projects/APAW
|
||||
python3 scripts/e2e-mcp-stdio-test-v3.py
|
||||
```
|
||||
|
||||
Ожидаемый результат: `✅ ALL E2E MCP STDIO TESTS PASSED`
|
||||
|
||||
## Отличие от плагина Kilo Code
|
||||
|
||||
**MCP сервер НЕ встроен в плагин Kilo Code.** Вместо этого:
|
||||
|
||||
1. **Kilo Code запускает** `@ric_/forgejo-mcp` как внешний stdio процесс через Node.js `child_process.spawn`.
|
||||
2. **Плагин Kilo Code** использует `MCPGiteaStdioClient` который порождает этот процесс и общается с ним по JSON-RPC через stdin/stdout.
|
||||
3. **forgejo-mcp** сам делает HTTP вызовы к Gitea API с Bearer токеном.
|
||||
|
||||
Это соответствует спецификации MCP 2024-11-05 transport: stdio для локальных процессов, HTTP SSE для удалённых серверов.
|
||||
Reference in New Issue
Block a user