feat: MCP-сервер встроенным FastMCP (/mcp) + архив вместо удаления
MCP (docs/07-mcp.md):
- embedded FastMCP streamable-http на /mcp того же контейнера api;
  гейт — чистый ASGI McpTokenGuard по Bearer MCP_TOKEN из .env (пусто —
  /mcp выключен). Route, не Mount: Mount('/mcp') не матчит точный /mcp.
- 31 тул в app/mcp/tools.py: выдача ключей клиенту (key_issue — plaintext
  один раз), полный CRUD источников/типов/целей/правил, поток (events/
  deliveries), push-подписки, настройки, send_test_event.
- тула переиспользуют функции admin-routes напрямую (синхронные def без
  срабатывания Depends); HTTPException/ValidationError — как данные.

Архив вместо удаления (миграция 0007 b7d3e8f04a92):
- deleted_at на sources/notification_types/channel_targets/routing_rules +
  частичные live-индексы; DELETE = 204 → архив, POST .../restore → 200.
- созд поверх архива → 409 с подсказкой id; ключ архивного источника →
  401; тройка архивного типа → 422; целевые правки → 422; архивная цель в
  правиле — Delivery skipped с аудитом; история имена архива показывает.
- push-подписки — исключение: жёсткое удаление.
- fix list_settings: оверрайды DB-only ключей (push/smtp, без .env-дефолта)
  снова возвращаются в value.

Проверено: mcparch ALL OK (41), mcpcheck ALL OK (28, MCP SDK-клиент),
mecheck/retcheck ALL OK, UI-регрессия (SPA, источники+delete 204) ALL OK.

Co-Authored-By: Claude Code <noreply@anthropic.com>
1 parent 8f3680c commit 38f97edec84e4e47be917e2b4b0f1669f02e4309
@Eugene Sukhodolskiy Eugene Sukhodolskiy authored 4 hours ago
Showing 18 changed files
View
.env.example
View
CLAUDE.md
View
README.md
View
alembic/versions/20261003_0007_soft_delete.py 0 → 100644
View
app/api/admin_routes.py
View
app/api/admin_schemas.py
View
app/api/events_routes.py
View
app/auth/apikeys.py
View
app/config.py
View
app/main.py
View
app/mcp/__init__.py 0 → 100644
View
app/mcp/server.py 0 → 100644
View
app/mcp/tools.py 0 → 100644
View
app/models/dicts.py
View
app/models/rules.py
View
app/worker/tasks.py
View
docs/07-mcp.md 0 → 100644
View
requirements.txt