diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index c1a78749..8f869960 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -613,6 +613,34 @@ services: DEFAULT_FROM_EMAIL: ${GLITCHTIP_FROM_EMAIL:-errors@gendsgn.ru} ENABLE_USER_REGISTRATION: "true" ENABLE_ORGANIZATION_CREATION: "false" + # Встроенный MCP-сервер GlitchTip (появился в 6.1, у нас образ 6.1.6). + # settings.py:291 — `GLITCHTIP_ENABLE_MCP = env.bool(..., False)`, то есть по + # умолчанию ВЫКЛЮЧЕН, и https://errors.gendsgn.ru/mcp сейчас отдаёт 404 + # (проверено curl'ом 29.08). Флаг читается в двух местах: asgi.py:181 + # оборачивает ASGI-приложение в MCPDjangoDispatcher, api/api.py:189 цепляет + # роуты. Отсюда — переменная нужна ТОЛЬКО web-контейнеру: worker крутит + # celery и HTTP не отдаёт вовсе. + # + # ЗАЧЕМ. Заменяет неофициальный npm-пакет mcp-glitchtip (coffebar, 0.1.2 от + # 25.08.2025, всего 2 инструмента) на вендорский с 17 инструментами, среди + # которых detect_n_plus_one и get_transaction_trend. Четыре span-инструмента + # требуют DuckDB и без него просто не отработают — остальные 13 не зависят. + # + # АУТЕНТИФИКАЦИЯ. Клиент может ходить статическим APIToken в заголовке + # `Authorization: Bearer`, полный OAuth-флоу не обязателен: провайдер имеет + # фолбэк (apps/oauth/provider.py:281-291 — «check regular API tokens ... for + # MCP clients using Bearer auth instead of the full OAuth flow»), который + # валидирует токен через apps/mcp/auth.py. Проверено чтением ИМЕННО образа + # 6.1.6: апстрим-issue #473 про 401 на Bearer описывает более раннее + # состояние кода и здесь уже неактуален. Минимальные scope токена — + # org:read + project:read + event:read (apps/mcp/server.py, _check_scopes). + # + # BLAST RADIUS. Пересоздаётся только glitchtip-web (env — свойство создания + # контейнера): единицы секунд без приёма событий, клиентские SDK буферизуют. + # Схема БД и миграции не затрагиваются — это чистый флаг роутинга. + # ОТКАТ: убрать строку, передеплоить; /mcp снова станет 404, а старый + # npm-клиент продолжит работать через /api/0/ — он этим флагом не задет. + GLITCHTIP_ENABLE_MCP: "true" restart: always mem_limit: 512m # Образ glitchtip:6.1.6 НЕ содержит wget/curl (только python3) → старый