mcp-auth: MCP_TOKEN перенесён с Authorization: Bearer на заголовок X-MCP-Token — молча ломает существующие /mcp-клиенты (breaking) #84

Closed
opened 2026-06-21 02:33:12 +03:00 by Ghost · 0 comments

Найдено в multi-aspect code review всех изменений с коммита 053a9c0d (ветка develop).

Грань: regression · Severity: warning
Где: apps/server/src/integrations/mcp/mcp.service.ts:335-342

Проблема
В базовом коде общий MCP_TOKEN проверялся через authHeader !== \Bearer ${token}`. После изменения общий guard читается ТОЛЬКО из нового заголовка x-mcp-token, а Authorization интерпретируется как per-user Basic/Bearer. Внешний MCP-клиент (например настроенный Claude Desktop), всё ещё шлющий Authorization: Bearer <MCP_TOKEN>`, получит 401 (нет x-mcp-token), а его Authorization уйдёт в verifyMcpBearer и будет отклонён как невалидный access JWT. Back-compat приёма старого варианта нет — каждая существующая MCP_TOKEN-интеграция ломается на апгрейде без автоматической миграции. Сплит намеренный (комментарий объясняет коллизию Authorization), .env.example обновлён, но это жёсткий контрактный слом для внешних потребителей.

Предлагаемый фикс
Оформить как документированный breaking change: CHANGELOG/release notes под Breaking + обновить AGENTS.md (токен теперь в X-MCP-Token, старые Authorization: Bearer <MCP_TOKEN> конфиги переконфигурировать). Опционально — one-time warning в лог, когда MCP_TOKEN задан и приходит Authorization: Bearer <тот самый токен> без x-mcp-token.

Найдено в multi-aspect code review всех изменений с коммита `053a9c0d` (ветка develop). **Грань:** regression · **Severity:** warning **Где:** `apps/server/src/integrations/mcp/mcp.service.ts:335-342` **Проблема** В базовом коде общий MCP_TOKEN проверялся через `authHeader !== \`Bearer ${token}\``. После изменения общий guard читается ТОЛЬКО из нового заголовка x-mcp-token, а Authorization интерпретируется как per-user Basic/Bearer. Внешний MCP-клиент (например настроенный Claude Desktop), всё ещё шлющий `Authorization: Bearer <MCP_TOKEN>`, получит 401 (нет x-mcp-token), а его Authorization уйдёт в verifyMcpBearer и будет отклонён как невалидный access JWT. Back-compat приёма старого варианта нет — каждая существующая MCP_TOKEN-интеграция ломается на апгрейде без автоматической миграции. Сплит намеренный (комментарий объясняет коллизию Authorization), .env.example обновлён, но это жёсткий контрактный слом для внешних потребителей. **Предлагаемый фикс** Оформить как документированный breaking change: CHANGELOG/release notes под Breaking + обновить AGENTS.md (токен теперь в X-MCP-Token, старые `Authorization: Bearer <MCP_TOKEN>` конфиги переконфигурировать). Опционально — one-time warning в лог, когда MCP_TOKEN задан и приходит `Authorization: Bearer <тот самый токен>` без x-mcp-token.
Ghost closed this issue 2026-06-21 14:10:32 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: vvzvlad/gitmost#84