feat: implement MCP streamable HTTP server

This commit is contained in:
a.tolmachev
2026-03-25 20:02:23 +03:00
parent a776ae4a73
commit 752288ca70
11 changed files with 1031 additions and 156 deletions
+21 -6
View File
@@ -100,13 +100,27 @@
## 8. MCP lifecycle
MVP-контракт `mcp-server` строится вокруг JSON-RPC методов MCP:
- `initialize`
- `notifications/initialized`
- `ping`
- `tools/list`
- `tools/call`
Сессия создается на `initialize` и идентифицируется через `MCP-Session-Id`.
Согласованная версия протокола возвращается и читается через `MCP-Protocol-Version`.
Пока сессии хранятся in-memory внутри `mcp-server`, чего достаточно для MVP и demo-сценариев.
### Tool listing
При старте и после reload:
После `initialize` и `notifications/initialized`:
1. `mcp-server` читает список published operations.
2. Строит in-memory registry tools.
3. Отдает их через MCP list tools.
1. клиент вызывает `tools/list`;
2. `mcp-server` перечитывает published operations по refresh policy;
3. строит или обновляет in-memory catalog tools;
4. отдает список tools через MCP JSON-RPC result.
### Tool call
@@ -122,8 +136,9 @@
1. `admin-api` фиксирует published version в registry.
2. `registry` обновляет published_operations.
3. `mcp-server` получает reload signal или выполняет controlled refresh.
4. Новый tool contract становится доступен MCP clients.
3. `mcp-server` не требует restart и не опирается на ручной reload signal.
4. `mcp-server` выполняет controlled refresh опубликованного каталога по interval-based policy.
5. Новый tool contract становится доступен MCP clients.
## 10. Именование tools
+5
View File
@@ -61,6 +61,7 @@ var/mcpaas/
- `MCPAAS_STORAGE_ROOT`
- `MCPAAS_ADMIN_BIND`
- `MCPAAS_MCP_BIND`
- `MCPAAS_MCP_REFRESH_MS`
- `MCPAAS_LOG_LEVEL`
- `MCPAAS_SECRET_PROVIDER`
- `MCPAAS_PUBLIC_BASE_URL`
@@ -71,6 +72,10 @@ var/mcpaas/
- `MCPAAS_ADMIN_TOKEN`
- `MCPAAS_MASTER_KEY`
Стартовое значение для refresh published tools:
- `MCPAAS_MCP_REFRESH_MS=5000`
## 6. Логирование и трассировка
Для MVP нужно использовать: