@hed-hog/core 0.0.382 → 0.0.384

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"auth.guard.d.ts","sourceRoot":"","sources":["../../../src/auth/guards/auth.guard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,WAAW,EACX,gBAAgB,EAIjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,qBACa,SAAU,YAAW,WAAW;IAIzC,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IANlB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;gBAG3C,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,eAAe;IAG7B,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;YAsEhD,YAAY;IAwB1B,OAAO,CAAC,sBAAsB;CAK/B"}
1
+ {"version":3,"file":"auth.guard.d.ts","sourceRoot":"","sources":["../../../src/auth/guards/auth.guard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,WAAW,EACX,gBAAgB,EAIjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,qBACa,SAAU,YAAW,WAAW;IAIzC,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IANlB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;gBAG3C,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,eAAe;IAG7B,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;YAoFhD,YAAY;IAwB1B,OAAO,CAAC,sBAAsB;CAK/B"}
@@ -16,6 +16,7 @@ const api_locale_1 = require("@hed-hog/api-locale");
16
16
  const api_prisma_1 = require("@hed-hog/api-prisma");
17
17
  const common_1 = require("@nestjs/common");
18
18
  const core_1 = require("@nestjs/core");
19
+ const allow_mcp_token_decorator_1 = require("../../mcp/decorators/allow-mcp-token.decorator");
19
20
  const security_service_1 = require("../../security/security.service");
20
21
  const token_service_1 = require("../../token/token.service");
21
22
  let AuthGuard = AuthGuard_1 = class AuthGuard {
@@ -40,12 +41,25 @@ let AuthGuard = AuthGuard_1 = class AuthGuard {
40
41
  context.getHandler(),
41
42
  context.getClass(),
42
43
  ]);
44
+ const allowMcpToken = this.reflector.getAllAndOverride(allow_mcp_token_decorator_1.ALLOW_MCP_TOKEN, [
45
+ context.getHandler(),
46
+ context.getClass(),
47
+ ]);
43
48
  const request = context.switchToHttp().getRequest();
44
49
  const token = this.extractTokenFromHeader(request);
45
50
  const locale = request.headers['locale'] || request.headers['accept-language'] || 'en';
46
51
  if (token === null || token === void 0 ? void 0 : token.startsWith('hedhog_api_')) {
47
52
  return this.verifyApiKey(request, token, isPublic);
48
53
  }
54
+ if (token === null || token === void 0 ? void 0 : token.startsWith('hedhog_mcp_')) {
55
+ if (allowMcpToken) {
56
+ // Real validation (mcp_api_key lookup) happens in McpAuthGuard on /mcp.
57
+ return true;
58
+ }
59
+ if (isPublic)
60
+ return true;
61
+ throw new common_1.UnauthorizedException('Invalid API key');
62
+ }
49
63
  // If endpoint requires role/authentication and no token provided
50
64
  if (!token) {
51
65
  if (isPublic) {
@@ -1 +1 @@
1
- {"version":3,"file":"auth.guard.js","sourceRoot":"","sources":["../../../src/auth/guards/auth.guard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.guard.js","sourceRoot":"","sources":["../../../src/auth/guards/auth.guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const ALLOW_MCP_TOKEN = "allowMcpToken";
2
+ export declare function AllowMcpToken(): import("@nestjs/common").CustomDecorator<string>;
3
+ //# sourceMappingURL=allow-mcp-token.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"allow-mcp-token.decorator.d.ts","sourceRoot":"","sources":["../../../src/mcp/decorators/allow-mcp-token.decorator.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,kBAAkB,CAAC;AAE/C,wBAAgB,aAAa,qDAE5B"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ALLOW_MCP_TOKEN = void 0;
4
+ exports.AllowMcpToken = AllowMcpToken;
5
+ const common_1 = require("@nestjs/common");
6
+ exports.ALLOW_MCP_TOKEN = 'allowMcpToken';
7
+ function AllowMcpToken() {
8
+ return (0, common_1.SetMetadata)(exports.ALLOW_MCP_TOKEN, true);
9
+ }
10
+ //# sourceMappingURL=allow-mcp-token.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"allow-mcp-token.decorator.js","sourceRoot":"","sources":["../../../src/mcp/decorators/allow-mcp-token.decorator.ts"],"names":[],"mappings":";;;AAIA,sCAEC;AAND,2CAA6C;AAEhC,QAAA,eAAe,GAAG,eAAe,CAAC;AAE/C,SAAgB,aAAa;IAC3B,OAAO,IAAA,oBAAW,EAAC,uBAAe,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.controller.d.ts","sourceRoot":"","sources":["../../src/mcp/mcp.controller.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAG5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,qBAGa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,SAAS,EAAE,gBAAgB,EAC3B,OAAO,EAAE,cAAc;IAIpC,MAAM,CAAQ,GAAG,EAAE,OAAO,EAAS,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAqBvE"}
1
+ {"version":3,"file":"mcp.controller.d.ts","sourceRoot":"","sources":["../../src/mcp/mcp.controller.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAI5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,qBAIa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,SAAS,EAAE,gBAAgB,EAC3B,OAAO,EAAE,cAAc;IAIpC,MAAM,CAAQ,GAAG,EAAE,OAAO,EAAS,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAqBvE"}
@@ -16,6 +16,7 @@ exports.McpController = void 0;
16
16
  const api_1 = require("@hed-hog/api");
17
17
  const common_1 = require("@nestjs/common");
18
18
  const setting_service_1 = require("../setting/setting.service");
19
+ const allow_mcp_token_decorator_1 = require("./decorators/allow-mcp-token.decorator");
19
20
  const mcp_auth_guard_1 = require("./guards/mcp-auth.guard");
20
21
  const mcp_permission_guard_1 = require("./guards/mcp-permission.guard");
21
22
  const mcp_server_service_1 = require("./mcp-server.service");
@@ -54,6 +55,7 @@ __decorate([
54
55
  ], McpController.prototype, "handle", null);
55
56
  exports.McpController = McpController = __decorate([
56
57
  (0, api_1.NoRole)(),
58
+ (0, allow_mcp_token_decorator_1.AllowMcpToken)(),
57
59
  (0, common_1.UseGuards)(mcp_auth_guard_1.McpAuthGuard, mcp_permission_guard_1.McpPermissionGuard),
58
60
  (0, common_1.Controller)('mcp'),
59
61
  __metadata("design:paramtypes", [mcp_server_service_1.McpServerService,
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.controller.js","sourceRoot":"","sources":["../../src/mcp/mcp.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,sCAAsC;AACtC,2CAAsE;AAEtE,gEAA4D;AAC5D,4DAAuD;AACvD,wEAAmE;AACnE,6DAAwD;AAKjD,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB,YACmB,SAA2B,EAC3B,OAAuB;QADvB,cAAS,GAAT,SAAS,CAAkB;QAC3B,YAAO,GAAP,OAAO,CAAgB;IACvC,CAAC;IAGE,AAAN,KAAK,CAAC,MAAM,CAAQ,GAAY,EAAS,GAAa;;QACpD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;QACtE,IAAI,QAAQ,CAAC,aAAa,CAAC,KAAK,KAAK,EAAE,CAAC;YACtC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAI,GAAW,CAAC,IAAI,CAAC;QAC/B,MAAM,MAAM,GACV,MAAA,MAAA,MAAA,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,0CAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,0CAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,mCAAI,IAAI,CAAC;QACvE,MAAM,IAAI,GAAG,GAAG,CAAC,IAAW,CAAC;QAC7B,MAAM,QAAQ,GACZ,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,MAAK,YAAY,CAAC,CAAC,CAAC,CAAC,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,0CAAE,IAAI,mCAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAElE,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE;YAC3C,MAAM,EAAE,IAAI,CAAC,GAAG;YAChB,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;YACjC,MAAM;YACN,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AA5BY,sCAAa;AAOlB;IADL,IAAA,YAAG,GAAE;IACQ,WAAA,IAAA,YAAG,GAAE,CAAA;IAAgB,WAAA,IAAA,YAAG,GAAE,CAAA;;;;2CAoBvC;wBA3BU,aAAa;IAHzB,IAAA,YAAM,GAAE;IACR,IAAA,kBAAS,EAAC,6BAAY,EAAE,yCAAkB,CAAC;IAC3C,IAAA,mBAAU,EAAC,KAAK,CAAC;qCAGc,qCAAgB;QAClB,gCAAc;GAH/B,aAAa,CA4BzB"}
1
+ {"version":3,"file":"mcp.controller.js","sourceRoot":"","sources":["../../src/mcp/mcp.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,sCAAsC;AACtC,2CAAsE;AAEtE,gEAA4D;AAC5D,sFAAuE;AACvE,4DAAuD;AACvD,wEAAmE;AACnE,6DAAwD;AAMjD,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB,YACmB,SAA2B,EAC3B,OAAuB;QADvB,cAAS,GAAT,SAAS,CAAkB;QAC3B,YAAO,GAAP,OAAO,CAAgB;IACvC,CAAC;IAGE,AAAN,KAAK,CAAC,MAAM,CAAQ,GAAY,EAAS,GAAa;;QACpD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;QACtE,IAAI,QAAQ,CAAC,aAAa,CAAC,KAAK,KAAK,EAAE,CAAC;YACtC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAI,GAAW,CAAC,IAAI,CAAC;QAC/B,MAAM,MAAM,GACV,MAAA,MAAA,MAAA,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,0CAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,0CAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,mCAAI,IAAI,CAAC;QACvE,MAAM,IAAI,GAAG,GAAG,CAAC,IAAW,CAAC;QAC7B,MAAM,QAAQ,GACZ,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,MAAK,YAAY,CAAC,CAAC,CAAC,CAAC,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,0CAAE,IAAI,mCAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAElE,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE;YAC3C,MAAM,EAAE,IAAI,CAAC,GAAG;YAChB,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;YACjC,MAAM;YACN,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AA5BY,sCAAa;AAOlB;IADL,IAAA,YAAG,GAAE;IACQ,WAAA,IAAA,YAAG,GAAE,CAAA;IAAgB,WAAA,IAAA,YAAG,GAAE,CAAA;;;;2CAoBvC;wBA3BU,aAAa;IAJzB,IAAA,YAAM,GAAE;IACR,IAAA,yCAAa,GAAE;IACf,IAAA,kBAAS,EAAC,6BAAY,EAAE,yCAAkB,CAAC;IAC3C,IAAA,mBAAU,EAAC,KAAK,CAAC;qCAGc,qCAAgB;QAClB,gCAAc;GAH/B,aAAa,CA4BzB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hed-hog/core",
3
- "version": "0.0.382",
3
+ "version": "0.0.384",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -43,10 +43,10 @@
43
43
  "uuid": "^11.1.0",
44
44
  "@hed-hog/api-prisma": "0.0.6",
45
45
  "@hed-hog/api-mail": "0.0.9",
46
+ "@hed-hog/api-locale": "0.0.14",
46
47
  "@hed-hog/api": "0.0.8",
47
48
  "@hed-hog/api-types": "0.0.1",
48
- "@hed-hog/api-pagination": "0.0.7",
49
- "@hed-hog/api-locale": "0.0.14"
49
+ "@hed-hog/api-pagination": "0.0.7"
50
50
  },
51
51
  "exports": {
52
52
  ".": {
@@ -1,6 +1,7 @@
1
1
  import { describe, it, expect, beforeEach, afterEach, jest } from '@jest/globals';
2
2
  import { UnauthorizedException } from '@nestjs/common';
3
3
  import { IS_PUBLIC_KEY, WITH_NO_ROLE, WITH_ROLE } from '@hed-hog/api';
4
+ import { ALLOW_MCP_TOKEN } from '../../mcp/decorators/allow-mcp-token.decorator';
4
5
  import { AuthGuard } from './auth.guard';
5
6
 
6
7
  const makeContext = (request: any) => ({
@@ -29,12 +30,18 @@ const makeService = (deps = makeDeps()) => ({
29
30
 
30
31
  const setMeta = (
31
32
  reflector: any,
32
- meta: { public?: boolean; withRole?: boolean; withNoRole?: boolean },
33
+ meta: {
34
+ public?: boolean;
35
+ withRole?: boolean;
36
+ withNoRole?: boolean;
37
+ allowMcpToken?: boolean;
38
+ },
33
39
  ) => {
34
40
  reflector.getAllAndOverride.mockImplementation((key: any) => {
35
41
  if (key === IS_PUBLIC_KEY) return meta.public;
36
42
  if (key === WITH_ROLE) return meta.withRole;
37
43
  if (key === WITH_NO_ROLE) return meta.withNoRole;
44
+ if (key === ALLOW_MCP_TOKEN) return meta.allowMcpToken;
38
45
  return undefined;
39
46
  });
40
47
  };
@@ -174,4 +181,45 @@ describe('AuthGuard', () => {
174
181
  );
175
182
  });
176
183
  });
184
+
185
+ describe('mcp token (hedhog_mcp_)', () => {
186
+ it('defere para o McpAuthGuard quando a rota permite (allowMcpToken)', async () => {
187
+ const { guard, deps } = makeService();
188
+ setMeta(deps.reflector, { allowMcpToken: true });
189
+ const request: any = {
190
+ headers: { authorization: 'Bearer hedhog_mcp_x' },
191
+ };
192
+ await expect(guard.canActivate(makeContext(request) as any)).resolves.toBe(
193
+ true,
194
+ );
195
+ expect(deps.token.verify).not.toHaveBeenCalled();
196
+ expect(deps.prisma.mcp_api_key.findFirst).not.toHaveBeenCalled();
197
+ expect(request.auth).toBeUndefined();
198
+ });
199
+
200
+ it('nega em rota sem allowMcpToken, sem tentar validar como JWT', async () => {
201
+ const { guard, deps } = makeService();
202
+ setMeta(deps.reflector, {});
203
+ const request: any = {
204
+ headers: { authorization: 'Bearer hedhog_mcp_x' },
205
+ method: 'GET',
206
+ url: '/profile',
207
+ };
208
+ await expect(guard.canActivate(makeContext(request) as any)).rejects.toThrow(
209
+ UnauthorizedException,
210
+ );
211
+ expect(deps.token.verify).not.toHaveBeenCalled();
212
+ });
213
+
214
+ it('permite em rota pública sem allowMcpToken', async () => {
215
+ const { guard, deps } = makeService();
216
+ setMeta(deps.reflector, { public: true });
217
+ const request: any = {
218
+ headers: { authorization: 'Bearer hedhog_mcp_x' },
219
+ };
220
+ await expect(guard.canActivate(makeContext(request) as any)).resolves.toBe(
221
+ true,
222
+ );
223
+ });
224
+ });
177
225
  });
@@ -10,6 +10,7 @@ import {
10
10
  } from '@nestjs/common';
11
11
  import { Reflector } from '@nestjs/core';
12
12
  import { Request } from 'express';
13
+ import { ALLOW_MCP_TOKEN } from '../../mcp/decorators/allow-mcp-token.decorator';
13
14
  import { SecurityService } from '../../security/security.service';
14
15
  import { TokenService } from '../../token/token.service';
15
16
 
@@ -40,6 +41,11 @@ export class AuthGuard implements CanActivate {
40
41
  context.getClass(),
41
42
  ]);
42
43
 
44
+ const allowMcpToken = this.reflector.getAllAndOverride<boolean>(ALLOW_MCP_TOKEN, [
45
+ context.getHandler(),
46
+ context.getClass(),
47
+ ]);
48
+
43
49
  const request = context.switchToHttp().getRequest();
44
50
  const token = this.extractTokenFromHeader(request);
45
51
  const locale = request.headers['locale'] || request.headers['accept-language'] || 'en';
@@ -48,6 +54,15 @@ export class AuthGuard implements CanActivate {
48
54
  return this.verifyApiKey(request, token, isPublic);
49
55
  }
50
56
 
57
+ if (token?.startsWith('hedhog_mcp_')) {
58
+ if (allowMcpToken) {
59
+ // Real validation (mcp_api_key lookup) happens in McpAuthGuard on /mcp.
60
+ return true;
61
+ }
62
+ if (isPublic) return true;
63
+ throw new UnauthorizedException('Invalid API key');
64
+ }
65
+
51
66
  // If endpoint requires role/authentication and no token provided
52
67
  if (!token) {
53
68
  if (isPublic) {
@@ -0,0 +1,7 @@
1
+ import { SetMetadata } from '@nestjs/common';
2
+
3
+ export const ALLOW_MCP_TOKEN = 'allowMcpToken';
4
+
5
+ export function AllowMcpToken() {
6
+ return SetMetadata(ALLOW_MCP_TOKEN, true);
7
+ }
@@ -2,11 +2,13 @@ import { NoRole } from '@hed-hog/api';
2
2
  import { All, Controller, Req, Res, UseGuards } from '@nestjs/common';
3
3
  import { Request, Response } from 'express';
4
4
  import { SettingService } from '../setting/setting.service';
5
+ import { AllowMcpToken } from './decorators/allow-mcp-token.decorator';
5
6
  import { McpAuthGuard } from './guards/mcp-auth.guard';
6
7
  import { McpPermissionGuard } from './guards/mcp-permission.guard';
7
8
  import { McpServerService } from './mcp-server.service';
8
9
 
9
10
  @NoRole()
11
+ @AllowMcpToken()
10
12
  @UseGuards(McpAuthGuard, McpPermissionGuard)
11
13
  @Controller('mcp')
12
14
  export class McpController {