mcp-auth: MCP_TOKEN перенесён с Authorization: Bearer на заголовок X-MCP-Token — молча ломает существующие /mcp-клиенты (breaking) #84
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Найдено в 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.