From b3713144baac625869eb0d0d815e827f7432e962 Mon Sep 17 00:00:00 2001 From: lekss361 Date: Sat, 29 Aug 2026 13:41:58 +0300 Subject: [PATCH] =?UTF-8?q?feat(glitchtip):=20=D0=B2=D0=BA=D0=BB=D1=8E?= =?UTF-8?q?=D1=87=D0=B8=D1=82=D1=8C=20=D0=B2=D1=81=D1=82=D1=80=D0=BE=D0=B5?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D0=B9=20MCP-=D1=81=D0=B5=D1=80=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B7=D0=B0=206.1.6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GLITCHTIP_ENABLE_MCP по умолчанию False (settings.py:291), поэтому https://errors.gendsgn.ru/mcp сегодня отдаёт 404. Флаг читается в asgi.py:181 (обёртка MCPDjangoDispatcher) и api/api.py:189 — нужен только web-контейнеру, worker HTTP не отдаёт. Заменяет неофициальный mcp-glitchtip (coffebar 0.1.2, 2 инструмента) на вендорский с 17, включая detect_n_plus_one. Аутентификация — статический APIToken в Authorization: Bearer, полный OAuth не нужен: фолбэк в apps/oauth/provider.py:281-291 проверен чтением образа 6.1.6 (апстрим-issue #473 описывает более раннее состояние кода). Blast radius: пересоздание только glitchtip-web, единицы секунд без приёма событий. Схема БД и миграции не затрагиваются. Откат: убрать строку и передеплоить. --- docker-compose.prod.yml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) 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) → старый -- 2.45.3