@rekog/mcp-nest 1.6.0-beta.2 → 1.6.1

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.
Files changed (54) hide show
  1. package/dist/mcp.module.d.ts +1 -0
  2. package/dist/mcp.module.d.ts.map +1 -1
  3. package/dist/mcp.module.js +11 -2
  4. package/dist/mcp.module.js.map +1 -1
  5. package/dist/services/handlers/mcp-prompts.handler.d.ts +2 -1
  6. package/dist/services/handlers/mcp-prompts.handler.d.ts.map +1 -1
  7. package/dist/services/handlers/mcp-prompts.handler.js +13 -5
  8. package/dist/services/handlers/mcp-prompts.handler.js.map +1 -1
  9. package/dist/services/handlers/mcp-resources.handler.d.ts +2 -1
  10. package/dist/services/handlers/mcp-resources.handler.d.ts.map +1 -1
  11. package/dist/services/handlers/mcp-resources.handler.js +11 -5
  12. package/dist/services/handlers/mcp-resources.handler.js.map +1 -1
  13. package/dist/services/handlers/mcp-tools.handler.d.ts +2 -1
  14. package/dist/services/handlers/mcp-tools.handler.d.ts.map +1 -1
  15. package/dist/services/handlers/mcp-tools.handler.js +11 -5
  16. package/dist/services/handlers/mcp-tools.handler.js.map +1 -1
  17. package/dist/services/mcp-executor.service.d.ts +1 -1
  18. package/dist/services/mcp-executor.service.d.ts.map +1 -1
  19. package/dist/services/mcp-executor.service.js +10 -5
  20. package/dist/services/mcp-executor.service.js.map +1 -1
  21. package/dist/services/mcp-registry.service.d.ts +13 -10
  22. package/dist/services/mcp-registry.service.d.ts.map +1 -1
  23. package/dist/services/mcp-registry.service.js +72 -32
  24. package/dist/services/mcp-registry.service.js.map +1 -1
  25. package/dist/services/mcp-registry.service.spec.js +164 -6
  26. package/dist/services/mcp-registry.service.spec.js.map +1 -1
  27. package/dist/transport/sse.controller.factory.d.ts +2 -1
  28. package/dist/transport/sse.controller.factory.d.ts.map +1 -1
  29. package/dist/transport/sse.controller.factory.js +6 -4
  30. package/dist/transport/sse.controller.factory.js.map +1 -1
  31. package/dist/transport/stdio.service.d.ts +2 -1
  32. package/dist/transport/stdio.service.d.ts.map +1 -1
  33. package/dist/transport/stdio.service.js +5 -3
  34. package/dist/transport/stdio.service.js.map +1 -1
  35. package/dist/transport/streamable-http.controller.factory.d.ts +2 -1
  36. package/dist/transport/streamable-http.controller.factory.d.ts.map +1 -1
  37. package/dist/transport/streamable-http.controller.factory.js +8 -6
  38. package/dist/transport/streamable-http.controller.factory.js.map +1 -1
  39. package/dist/utils/capabilities-builder.d.ts +1 -1
  40. package/dist/utils/capabilities-builder.d.ts.map +1 -1
  41. package/dist/utils/capabilities-builder.js +4 -4
  42. package/dist/utils/capabilities-builder.js.map +1 -1
  43. package/package.json +1 -1
  44. package/src/mcp.module.ts +18 -2
  45. package/src/services/handlers/mcp-prompts.handler.ts +23 -17
  46. package/src/services/handlers/mcp-resources.handler.ts +12 -5
  47. package/src/services/handlers/mcp-tools.handler.ts +12 -5
  48. package/src/services/mcp-executor.service.ts +17 -5
  49. package/src/services/mcp-registry.service.spec.ts +207 -6
  50. package/src/services/mcp-registry.service.ts +120 -25
  51. package/src/transport/sse.controller.factory.ts +2 -0
  52. package/src/transport/stdio.service.ts +6 -1
  53. package/src/transport/streamable-http.controller.factory.ts +5 -2
  54. package/src/utils/capabilities-builder.ts +4 -3
@@ -1,6 +1,7 @@
1
1
  import { DynamicModule } from '@nestjs/common';
2
2
  import { McpOptions } from './interfaces';
3
3
  export declare class McpModule {
4
+ readonly __isMcpModule = true;
4
5
  static forRoot(options: McpOptions): DynamicModule;
5
6
  private static createControllersFromOptions;
6
7
  private static createProvidersFromOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.module.d.ts","sourceRoot":"","sources":["../src/mcp.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA0B,MAAM,gBAAgB,CAAC;AAEvE,OAAO,EAAE,UAAU,EAAoB,MAAM,cAAc,CAAC;AAS5D,qBAIa,SAAS;IACpB,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,aAAa;IAuClD,OAAO,CAAC,MAAM,CAAC,4BAA4B;IAuC3C,OAAO,CAAC,MAAM,CAAC,0BAA0B;CAwB1C"}
1
+ {"version":3,"file":"mcp.module.d.ts","sourceRoot":"","sources":["../src/mcp.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA0B,MAAM,gBAAgB,CAAC;AAEvE,OAAO,EAAE,UAAU,EAAoB,MAAM,cAAc,CAAC;AAW5D,qBAIa,SAAS;IAIpB,QAAQ,CAAC,aAAa,QAAQ;IAE9B,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,aAAa;IAyClD,OAAO,CAAC,MAAM,CAAC,4BAA4B;IAuC3C,OAAO,CAAC,MAAM,CAAC,0BAA0B;CA+B1C"}
@@ -18,7 +18,11 @@ const sse_controller_factory_1 = require("./transport/sse.controller.factory");
18
18
  const stdio_service_1 = require("./transport/stdio.service");
19
19
  const streamable_http_controller_factory_1 = require("./transport/streamable-http.controller.factory");
20
20
  const normalize_endpoint_1 = require("./utils/normalize-endpoint");
21
+ let instanceIdCounter = 0;
21
22
  let McpModule = McpModule_1 = class McpModule {
23
+ constructor() {
24
+ this.__isMcpModule = true;
25
+ }
22
26
  static forRoot(options) {
23
27
  const defaultOptions = {
24
28
  transport: [
@@ -45,7 +49,8 @@ let McpModule = McpModule_1 = class McpModule {
45
49
  mergedOptions.sseEndpoint = (0, normalize_endpoint_1.normalizeEndpoint)(mergedOptions.sseEndpoint);
46
50
  mergedOptions.messagesEndpoint = (0, normalize_endpoint_1.normalizeEndpoint)(mergedOptions.messagesEndpoint);
47
51
  mergedOptions.mcpEndpoint = (0, normalize_endpoint_1.normalizeEndpoint)(mergedOptions.mcpEndpoint);
48
- const providers = this.createProvidersFromOptions(mergedOptions);
52
+ const moduleId = `mcp-module-${instanceIdCounter++}`;
53
+ const providers = this.createProvidersFromOptions(mergedOptions, moduleId);
49
54
  const controllers = this.createControllersFromOptions(mergedOptions);
50
55
  return {
51
56
  module: McpModule_1,
@@ -76,12 +81,16 @@ let McpModule = McpModule_1 = class McpModule {
76
81
  }
77
82
  return controllers;
78
83
  }
79
- static createProvidersFromOptions(options) {
84
+ static createProvidersFromOptions(options, moduleId) {
80
85
  const providers = [
81
86
  {
82
87
  provide: 'MCP_OPTIONS',
83
88
  useValue: options,
84
89
  },
90
+ {
91
+ provide: 'MCP_MODULE_ID',
92
+ useValue: moduleId,
93
+ },
85
94
  mcp_registry_service_1.McpRegistryService,
86
95
  mcp_executor_service_1.McpExecutorService,
87
96
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.module.js","sourceRoot":"","sources":["../src/mcp.module.ts"],"names":[],"mappings":"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","sourcesContent":["import { DynamicModule, Module, Provider, Type } from '@nestjs/common';\nimport { DiscoveryModule } from '@nestjs/core';\nimport { McpOptions, McpTransportType } from './interfaces';\nimport { McpExecutorService } from './services/mcp-executor.service';\nimport { McpRegistryService } from './services/mcp-registry.service';\nimport { SsePingService } from './services/sse-ping.service';\nimport { createSseController } from './transport/sse.controller.factory';\nimport { StdioService } from './transport/stdio.service';\nimport { createStreamableHttpController } from './transport/streamable-http.controller.factory';\nimport { normalizeEndpoint } from './utils/normalize-endpoint';\n\n@Module({\n imports: [DiscoveryModule],\n providers: [McpRegistryService, McpExecutorService],\n})\nexport class McpModule {\n static forRoot(options: McpOptions): DynamicModule {\n const defaultOptions: Partial<McpOptions> = {\n transport: [\n McpTransportType.SSE,\n McpTransportType.STREAMABLE_HTTP,\n McpTransportType.STDIO,\n ],\n sseEndpoint: 'sse',\n messagesEndpoint: 'messages',\n mcpEndpoint: 'mcp',\n guards: [],\n decorators: [],\n streamableHttp: {\n enableJsonResponse: true,\n sessionIdGenerator: undefined,\n statelessMode: true,\n },\n sse: {\n pingEnabled: true,\n pingIntervalMs: 30000,\n },\n };\n const mergedOptions = { ...defaultOptions, ...options } as McpOptions;\n mergedOptions.sseEndpoint = normalizeEndpoint(mergedOptions.sseEndpoint);\n mergedOptions.messagesEndpoint = normalizeEndpoint(\n mergedOptions.messagesEndpoint,\n );\n mergedOptions.mcpEndpoint = normalizeEndpoint(mergedOptions.mcpEndpoint);\n const providers = this.createProvidersFromOptions(mergedOptions);\n const controllers = this.createControllersFromOptions(mergedOptions);\n\n return {\n module: McpModule,\n controllers,\n providers,\n exports: [McpRegistryService],\n };\n }\n\n private static createControllersFromOptions(\n options: McpOptions,\n ): Type<any>[] {\n const sseEndpoint = options.sseEndpoint ?? 'sse';\n const messagesEndpoint = options.messagesEndpoint ?? 'messages';\n const mcpEndpoint = options.mcpEndpoint ?? 'mcp';\n const guards = options.guards ?? [];\n const transports = Array.isArray(options.transport)\n ? options.transport\n : [options.transport ?? McpTransportType.SSE];\n const controllers: Type<any>[] = [];\n const decorators = options.decorators ?? [];\n\n if (transports.includes(McpTransportType.SSE)) {\n const sseController = createSseController(\n sseEndpoint,\n messagesEndpoint,\n guards,\n decorators,\n );\n controllers.push(sseController);\n }\n\n if (transports.includes(McpTransportType.STREAMABLE_HTTP)) {\n const streamableHttpController = createStreamableHttpController(\n mcpEndpoint,\n guards,\n decorators,\n );\n controllers.push(streamableHttpController);\n }\n\n if (transports.includes(McpTransportType.STDIO)) {\n // STDIO transport is handled by injectable StdioService, no controller\n }\n\n return controllers;\n }\n\n private static createProvidersFromOptions(options: McpOptions): Provider[] {\n const providers: Provider[] = [\n {\n provide: 'MCP_OPTIONS',\n useValue: options,\n },\n McpRegistryService,\n McpExecutorService,\n ];\n\n const transports = Array.isArray(options.transport)\n ? options.transport\n : [options.transport ?? McpTransportType.SSE];\n\n if (transports.includes(McpTransportType.SSE)) {\n providers.push(SsePingService);\n }\n\n if (transports.includes(McpTransportType.STDIO)) {\n providers.push(StdioService);\n }\n\n return providers;\n }\n}\n"]}
1
+ {"version":3,"file":"mcp.module.js","sourceRoot":"","sources":["../src/mcp.module.ts"],"names":[],"mappings":"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","sourcesContent":["import { DynamicModule, Module, Provider, Type } from '@nestjs/common';\nimport { DiscoveryModule } from '@nestjs/core';\nimport { McpOptions, McpTransportType } from './interfaces';\nimport { McpExecutorService } from './services/mcp-executor.service';\nimport { McpRegistryService } from './services/mcp-registry.service';\nimport { SsePingService } from './services/sse-ping.service';\nimport { createSseController } from './transport/sse.controller.factory';\nimport { StdioService } from './transport/stdio.service';\nimport { createStreamableHttpController } from './transport/streamable-http.controller.factory';\nimport { normalizeEndpoint } from './utils/normalize-endpoint';\n\nlet instanceIdCounter = 0;\n\n@Module({\n imports: [DiscoveryModule],\n providers: [McpRegistryService, McpExecutorService],\n})\nexport class McpModule {\n /**\n * To avoid import circular dependency issues, we use a marker property.\n */\n readonly __isMcpModule = true;\n\n static forRoot(options: McpOptions): DynamicModule {\n const defaultOptions: Partial<McpOptions> = {\n transport: [\n McpTransportType.SSE,\n McpTransportType.STREAMABLE_HTTP,\n McpTransportType.STDIO,\n ],\n sseEndpoint: 'sse',\n messagesEndpoint: 'messages',\n mcpEndpoint: 'mcp',\n guards: [],\n decorators: [],\n streamableHttp: {\n enableJsonResponse: true,\n sessionIdGenerator: undefined,\n statelessMode: true,\n },\n sse: {\n pingEnabled: true,\n pingIntervalMs: 30000,\n },\n };\n const mergedOptions = { ...defaultOptions, ...options } as McpOptions;\n mergedOptions.sseEndpoint = normalizeEndpoint(mergedOptions.sseEndpoint);\n mergedOptions.messagesEndpoint = normalizeEndpoint(\n mergedOptions.messagesEndpoint,\n );\n mergedOptions.mcpEndpoint = normalizeEndpoint(mergedOptions.mcpEndpoint);\n\n const moduleId = `mcp-module-${instanceIdCounter++}`;\n const providers = this.createProvidersFromOptions(mergedOptions, moduleId);\n const controllers = this.createControllersFromOptions(mergedOptions);\n\n return {\n module: McpModule,\n controllers,\n providers,\n exports: [McpRegistryService],\n };\n }\n\n private static createControllersFromOptions(\n options: McpOptions,\n ): Type<any>[] {\n const sseEndpoint = options.sseEndpoint ?? 'sse';\n const messagesEndpoint = options.messagesEndpoint ?? 'messages';\n const mcpEndpoint = options.mcpEndpoint ?? 'mcp';\n const guards = options.guards ?? [];\n const transports = Array.isArray(options.transport)\n ? options.transport\n : [options.transport ?? McpTransportType.SSE];\n const controllers: Type<any>[] = [];\n const decorators = options.decorators ?? [];\n\n if (transports.includes(McpTransportType.SSE)) {\n const sseController = createSseController(\n sseEndpoint,\n messagesEndpoint,\n guards,\n decorators,\n );\n controllers.push(sseController);\n }\n\n if (transports.includes(McpTransportType.STREAMABLE_HTTP)) {\n const streamableHttpController = createStreamableHttpController(\n mcpEndpoint,\n guards,\n decorators,\n );\n controllers.push(streamableHttpController);\n }\n\n if (transports.includes(McpTransportType.STDIO)) {\n // STDIO transport is handled by injectable StdioService, no controller\n }\n\n return controllers;\n }\n\n private static createProvidersFromOptions(\n options: McpOptions,\n moduleId: string,\n ): Provider[] {\n const providers: Provider[] = [\n {\n provide: 'MCP_OPTIONS',\n useValue: options,\n },\n {\n provide: 'MCP_MODULE_ID',\n useValue: moduleId,\n },\n McpRegistryService,\n McpExecutorService,\n ];\n\n const transports = Array.isArray(options.transport)\n ? options.transport\n : [options.transport ?? McpTransportType.SSE];\n\n if (transports.includes(McpTransportType.SSE)) {\n providers.push(SsePingService);\n }\n\n if (transports.includes(McpTransportType.STDIO)) {\n providers.push(StdioService);\n }\n\n return providers;\n }\n}\n"]}
@@ -4,7 +4,8 @@ import { Request } from 'express';
4
4
  import { McpRegistryService } from '../mcp-registry.service';
5
5
  import { McpHandlerBase } from './mcp-handler.base';
6
6
  export declare class McpPromptsHandler extends McpHandlerBase {
7
- constructor(moduleRef: ModuleRef, registry: McpRegistryService);
7
+ private readonly mcpModuleId;
8
+ constructor(moduleRef: ModuleRef, registry: McpRegistryService, mcpModuleId: string);
8
9
  registerHandlers(mcpServer: McpServer, httpRequest: Request): void;
9
10
  }
10
11
  //# sourceMappingURL=mcp-prompts.handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-prompts.handler.d.ts","sourceRoot":"","sources":["../../../src/services/handlers/mcp-prompts.handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQpE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,qBACa,iBAAkB,SAAQ,cAAc;gBACvC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,kBAAkB;IAI9D,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO;CAmF5D"}
1
+ {"version":3,"file":"mcp-prompts.handler.d.ts","sourceRoot":"","sources":["../../../src/services/handlers/mcp-prompts.handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQpE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,qBACa,iBAAkB,SAAQ,cAAc;IAIxB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAFrD,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,kBAAkB,EACc,WAAW,EAAE,MAAM;IAK/D,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO;CAqF5D"}
@@ -8,6 +8,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
11
14
  var McpPromptsHandler_1;
12
15
  Object.defineProperty(exports, "__esModule", { value: true });
13
16
  exports.McpPromptsHandler = void 0;
@@ -17,17 +20,20 @@ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
17
20
  const mcp_registry_service_1 = require("../mcp-registry.service");
18
21
  const mcp_handler_base_1 = require("./mcp-handler.base");
19
22
  let McpPromptsHandler = McpPromptsHandler_1 = class McpPromptsHandler extends mcp_handler_base_1.McpHandlerBase {
20
- constructor(moduleRef, registry) {
23
+ constructor(moduleRef, registry, mcpModuleId) {
21
24
  super(moduleRef, registry, McpPromptsHandler_1.name);
25
+ this.mcpModuleId = mcpModuleId;
22
26
  }
23
27
  registerHandlers(mcpServer, httpRequest) {
24
- if (this.registry.getPrompts().length === 0) {
28
+ if (this.registry.getPrompts(this.mcpModuleId).length === 0) {
25
29
  this.logger.debug('No prompts registered, skipping prompt handlers');
26
30
  return;
27
31
  }
28
32
  mcpServer.server.setRequestHandler(types_js_1.ListPromptsRequestSchema, () => {
29
33
  this.logger.debug('ListPromptsRequestSchema is being called');
30
- const prompts = this.registry.getPrompts().map((prompt) => ({
34
+ const prompts = this.registry
35
+ .getPrompts(this.mcpModuleId)
36
+ .map((prompt) => ({
31
37
  name: prompt.metadata.name,
32
38
  description: prompt.metadata.description,
33
39
  arguments: prompt.metadata.parameters
@@ -46,7 +52,7 @@ let McpPromptsHandler = McpPromptsHandler_1 = class McpPromptsHandler extends mc
46
52
  this.logger.debug('GetPromptRequestSchema is being called');
47
53
  try {
48
54
  const name = request.params.name;
49
- const promptInfo = this.registry.findPrompt(name);
55
+ const promptInfo = this.registry.findPrompt(this.mcpModuleId, name);
50
56
  if (!promptInfo) {
51
57
  throw new types_js_1.McpError(types_js_1.ErrorCode.MethodNotFound, `Unknown prompt: ${name}`);
52
58
  }
@@ -75,6 +81,8 @@ let McpPromptsHandler = McpPromptsHandler_1 = class McpPromptsHandler extends mc
75
81
  exports.McpPromptsHandler = McpPromptsHandler;
76
82
  exports.McpPromptsHandler = McpPromptsHandler = McpPromptsHandler_1 = __decorate([
77
83
  (0, common_1.Injectable)({ scope: common_1.Scope.REQUEST }),
78
- __metadata("design:paramtypes", [core_1.ModuleRef, mcp_registry_service_1.McpRegistryService])
84
+ __param(2, (0, common_1.Inject)('MCP_MODULE_ID')),
85
+ __metadata("design:paramtypes", [core_1.ModuleRef,
86
+ mcp_registry_service_1.McpRegistryService, String])
79
87
  ], McpPromptsHandler);
80
88
  //# sourceMappingURL=mcp-prompts.handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-prompts.handler.js","sourceRoot":"","sources":["../../../src/services/handlers/mcp-prompts.handler.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Scope } from '@nestjs/common';\nimport { ContextIdFactory, ModuleRef } from '@nestjs/core';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport {\n ErrorCode,\n GetPromptRequestSchema,\n ListPromptsRequestSchema,\n McpError,\n PromptArgument,\n} from '@modelcontextprotocol/sdk/types.js';\nimport { Request } from 'express';\nimport { McpRegistryService } from '../mcp-registry.service';\nimport { McpHandlerBase } from './mcp-handler.base';\n\n@Injectable({ scope: Scope.REQUEST })\nexport class McpPromptsHandler extends McpHandlerBase {\n constructor(moduleRef: ModuleRef, registry: McpRegistryService) {\n super(moduleRef, registry, McpPromptsHandler.name);\n }\n\n registerHandlers(mcpServer: McpServer, httpRequest: Request) {\n if (this.registry.getPrompts().length === 0) {\n this.logger.debug('No prompts registered, skipping prompt handlers');\n return;\n }\n mcpServer.server.setRequestHandler(ListPromptsRequestSchema, () => {\n this.logger.debug('ListPromptsRequestSchema is being called');\n\n const prompts = this.registry.getPrompts().map((prompt) => ({\n name: prompt.metadata.name,\n description: prompt.metadata.description,\n arguments: prompt.metadata.parameters\n ? Object.entries(prompt.metadata.parameters.shape).map(\n ([name, field]): PromptArgument => ({\n name,\n description: field.description,\n required: !field.isOptional(),\n }),\n )\n : [],\n }));\n\n return {\n prompts,\n };\n });\n\n mcpServer.server.setRequestHandler(\n GetPromptRequestSchema,\n async (request) => {\n this.logger.debug('GetPromptRequestSchema is being called');\n\n try {\n const name = request.params.name;\n const promptInfo = this.registry.findPrompt(name);\n\n if (!promptInfo) {\n throw new McpError(\n ErrorCode.MethodNotFound,\n `Unknown prompt: ${name}`,\n );\n }\n\n const contextId = ContextIdFactory.getByRequest(httpRequest);\n this.moduleRef.registerRequestByContextId(httpRequest, contextId);\n\n const promptInstance = await this.moduleRef.resolve(\n promptInfo.providerClass,\n contextId,\n { strict: false },\n );\n\n if (!promptInstance) {\n throw new McpError(\n ErrorCode.MethodNotFound,\n `Unknown prompt: ${name}`,\n );\n }\n\n const context = this.createContext(mcpServer, request);\n const methodName = promptInfo.methodName;\n\n const result = await promptInstance[methodName].call(\n promptInstance,\n request.params.arguments,\n context,\n httpRequest,\n );\n\n this.logger.debug(result, 'GetPromptRequestSchema result');\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return result;\n } catch (error) {\n this.logger.error(error);\n return {\n contents: [{ mimeType: 'text/plain', text: error.message }],\n isError: true,\n };\n }\n },\n );\n }\n}\n"]}
1
+ {"version":3,"file":"mcp-prompts.handler.js","sourceRoot":"","sources":["../../../src/services/handlers/mcp-prompts.handler.ts"],"names":[],"mappings":"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","sourcesContent":["import { Inject, Injectable, Scope } from '@nestjs/common';\nimport { ContextIdFactory, ModuleRef } from '@nestjs/core';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport {\n ErrorCode,\n GetPromptRequestSchema,\n ListPromptsRequestSchema,\n McpError,\n PromptArgument,\n} from '@modelcontextprotocol/sdk/types.js';\nimport { Request } from 'express';\nimport { McpRegistryService } from '../mcp-registry.service';\nimport { McpHandlerBase } from './mcp-handler.base';\n\n@Injectable({ scope: Scope.REQUEST })\nexport class McpPromptsHandler extends McpHandlerBase {\n constructor(\n moduleRef: ModuleRef,\n registry: McpRegistryService,\n @Inject('MCP_MODULE_ID') private readonly mcpModuleId: string,\n ) {\n super(moduleRef, registry, McpPromptsHandler.name);\n }\n\n registerHandlers(mcpServer: McpServer, httpRequest: Request) {\n if (this.registry.getPrompts(this.mcpModuleId).length === 0) {\n this.logger.debug('No prompts registered, skipping prompt handlers');\n return;\n }\n mcpServer.server.setRequestHandler(ListPromptsRequestSchema, () => {\n this.logger.debug('ListPromptsRequestSchema is being called');\n\n const prompts = this.registry\n .getPrompts(this.mcpModuleId)\n .map((prompt) => ({\n name: prompt.metadata.name,\n description: prompt.metadata.description,\n arguments: prompt.metadata.parameters\n ? Object.entries(prompt.metadata.parameters.shape).map(\n ([name, field]): PromptArgument => ({\n name,\n description: field.description,\n required: !field.isOptional(),\n }),\n )\n : [],\n }));\n\n return {\n prompts,\n };\n });\n\n mcpServer.server.setRequestHandler(\n GetPromptRequestSchema,\n async (request) => {\n this.logger.debug('GetPromptRequestSchema is being called');\n\n try {\n const name = request.params.name;\n const promptInfo = this.registry.findPrompt(this.mcpModuleId, name);\n\n if (!promptInfo) {\n throw new McpError(\n ErrorCode.MethodNotFound,\n `Unknown prompt: ${name}`,\n );\n }\n\n const contextId = ContextIdFactory.getByRequest(httpRequest);\n this.moduleRef.registerRequestByContextId(httpRequest, contextId);\n\n const promptInstance = await this.moduleRef.resolve(\n promptInfo.providerClass,\n contextId,\n { strict: false },\n );\n\n if (!promptInstance) {\n throw new McpError(\n ErrorCode.MethodNotFound,\n `Unknown prompt: ${name}`,\n );\n }\n\n const context = this.createContext(mcpServer, request);\n const methodName = promptInfo.methodName;\n\n const result = await promptInstance[methodName].call(\n promptInstance,\n request.params.arguments,\n context,\n httpRequest,\n );\n\n this.logger.debug(result, 'GetPromptRequestSchema result');\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return result;\n } catch (error) {\n this.logger.error(error);\n return {\n contents: [{ mimeType: 'text/plain', text: error.message }],\n isError: true,\n };\n }\n },\n );\n }\n}\n"]}
@@ -4,7 +4,8 @@ import { Request } from 'express';
4
4
  import { McpRegistryService } from '../mcp-registry.service';
5
5
  import { McpHandlerBase } from './mcp-handler.base';
6
6
  export declare class McpResourcesHandler extends McpHandlerBase {
7
- constructor(moduleRef: ModuleRef, registry: McpRegistryService);
7
+ private readonly mcpModuleId;
8
+ constructor(moduleRef: ModuleRef, registry: McpRegistryService, mcpModuleId: string);
8
9
  registerHandlers(mcpServer: McpServer, httpRequest: Request): void;
9
10
  }
10
11
  //# sourceMappingURL=mcp-resources.handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-resources.handler.d.ts","sourceRoot":"","sources":["../../../src/services/handlers/mcp-resources.handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,qBACa,mBAAoB,SAAQ,cAAc;gBACzC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,kBAAkB;IAI9D,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO;CA6E5D"}
1
+ {"version":3,"file":"mcp-resources.handler.d.ts","sourceRoot":"","sources":["../../../src/services/handlers/mcp-resources.handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,qBACa,mBAAoB,SAAQ,cAAc;IAI1B,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAFrD,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,kBAAkB,EACc,WAAW,EAAE,MAAM;IAK/D,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO;CAgF5D"}
@@ -8,6 +8,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
11
14
  var McpResourcesHandler_1;
12
15
  Object.defineProperty(exports, "__esModule", { value: true });
13
16
  exports.McpResourcesHandler = void 0;
@@ -17,11 +20,12 @@ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
17
20
  const mcp_registry_service_1 = require("../mcp-registry.service");
18
21
  const mcp_handler_base_1 = require("./mcp-handler.base");
19
22
  let McpResourcesHandler = McpResourcesHandler_1 = class McpResourcesHandler extends mcp_handler_base_1.McpHandlerBase {
20
- constructor(moduleRef, registry) {
23
+ constructor(moduleRef, registry, mcpModuleId) {
21
24
  super(moduleRef, registry, McpResourcesHandler_1.name);
25
+ this.mcpModuleId = mcpModuleId;
22
26
  }
23
27
  registerHandlers(mcpServer, httpRequest) {
24
- if (this.registry.getResources().length === 0) {
28
+ if (this.registry.getResources(this.mcpModuleId).length === 0) {
25
29
  this.logger.debug('No resources registered, skipping resource handlers');
26
30
  return;
27
31
  }
@@ -29,14 +33,14 @@ let McpResourcesHandler = McpResourcesHandler_1 = class McpResourcesHandler exte
29
33
  this.logger.debug('ListResourcesRequestSchema is being called');
30
34
  return {
31
35
  resources: this.registry
32
- .getResources()
36
+ .getResources(this.mcpModuleId)
33
37
  .map((resources) => resources.metadata),
34
38
  };
35
39
  });
36
40
  mcpServer.server.setRequestHandler(types_js_1.ReadResourceRequestSchema, async (request) => {
37
41
  this.logger.debug('ReadResourceRequestSchema is being called');
38
42
  const uri = request.params.uri;
39
- const resourceInfo = this.registry.findResourceByUri(uri);
43
+ const resourceInfo = this.registry.findResourceByUri(this.mcpModuleId, uri);
40
44
  if (!resourceInfo) {
41
45
  throw new types_js_1.McpError(types_js_1.ErrorCode.MethodNotFound, `Unknown resource: ${uri}`);
42
46
  }
@@ -70,6 +74,8 @@ let McpResourcesHandler = McpResourcesHandler_1 = class McpResourcesHandler exte
70
74
  exports.McpResourcesHandler = McpResourcesHandler;
71
75
  exports.McpResourcesHandler = McpResourcesHandler = McpResourcesHandler_1 = __decorate([
72
76
  (0, common_1.Injectable)({ scope: common_1.Scope.REQUEST }),
73
- __metadata("design:paramtypes", [core_1.ModuleRef, mcp_registry_service_1.McpRegistryService])
77
+ __param(2, (0, common_1.Inject)('MCP_MODULE_ID')),
78
+ __metadata("design:paramtypes", [core_1.ModuleRef,
79
+ mcp_registry_service_1.McpRegistryService, String])
74
80
  ], McpResourcesHandler);
75
81
  //# sourceMappingURL=mcp-resources.handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-resources.handler.js","sourceRoot":"","sources":["../../../src/services/handlers/mcp-resources.handler.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Scope } from '@nestjs/common';\nimport { ContextIdFactory, ModuleRef } from '@nestjs/core';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport {\n ErrorCode,\n ListResourcesRequestSchema,\n McpError,\n ReadResourceRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\nimport { Request } from 'express';\nimport { McpRegistryService } from '../mcp-registry.service';\nimport { McpHandlerBase } from './mcp-handler.base';\n\n@Injectable({ scope: Scope.REQUEST })\nexport class McpResourcesHandler extends McpHandlerBase {\n constructor(moduleRef: ModuleRef, registry: McpRegistryService) {\n super(moduleRef, registry, McpResourcesHandler.name);\n }\n\n registerHandlers(mcpServer: McpServer, httpRequest: Request) {\n if (this.registry.getResources().length === 0) {\n this.logger.debug('No resources registered, skipping resource handlers');\n return;\n }\n\n mcpServer.server.setRequestHandler(ListResourcesRequestSchema, () => {\n this.logger.debug('ListResourcesRequestSchema is being called');\n return {\n resources: this.registry\n .getResources()\n .map((resources) => resources.metadata),\n };\n });\n\n mcpServer.server.setRequestHandler(\n ReadResourceRequestSchema,\n async (request) => {\n this.logger.debug('ReadResourceRequestSchema is being called');\n\n const uri = request.params.uri;\n const resourceInfo = this.registry.findResourceByUri(uri);\n\n if (!resourceInfo) {\n throw new McpError(\n ErrorCode.MethodNotFound,\n `Unknown resource: ${uri}`,\n );\n }\n\n try {\n const contextId = ContextIdFactory.getByRequest(httpRequest);\n this.moduleRef.registerRequestByContextId(httpRequest, contextId);\n\n const resourceInstance = await this.moduleRef.resolve(\n resourceInfo.resource.providerClass,\n contextId,\n { strict: false },\n );\n\n if (!resourceInstance) {\n throw new McpError(\n ErrorCode.MethodNotFound,\n `Unknown resource: ${uri}`,\n );\n }\n\n const context = this.createContext(mcpServer, request);\n\n const requestParams = {\n ...resourceInfo.params,\n ...request.params,\n };\n\n const methodName = resourceInfo.resource.methodName;\n\n const result = await resourceInstance[methodName].call(\n resourceInstance,\n requestParams,\n context,\n httpRequest,\n );\n\n this.logger.debug(result, 'ReadResourceRequestSchema result');\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return result;\n } catch (error) {\n this.logger.error(error);\n return {\n contents: [{ uri, mimeType: 'text/plain', text: error.message }],\n isError: true,\n };\n }\n },\n );\n }\n}\n"]}
1
+ {"version":3,"file":"mcp-resources.handler.js","sourceRoot":"","sources":["../../../src/services/handlers/mcp-resources.handler.ts"],"names":[],"mappings":"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","sourcesContent":["import { Inject, Injectable, Scope } from '@nestjs/common';\nimport { ContextIdFactory, ModuleRef } from '@nestjs/core';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport {\n ErrorCode,\n ListResourcesRequestSchema,\n McpError,\n ReadResourceRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\nimport { Request } from 'express';\nimport { McpRegistryService } from '../mcp-registry.service';\nimport { McpHandlerBase } from './mcp-handler.base';\n\n@Injectable({ scope: Scope.REQUEST })\nexport class McpResourcesHandler extends McpHandlerBase {\n constructor(\n moduleRef: ModuleRef,\n registry: McpRegistryService,\n @Inject('MCP_MODULE_ID') private readonly mcpModuleId: string,\n ) {\n super(moduleRef, registry, McpResourcesHandler.name);\n }\n\n registerHandlers(mcpServer: McpServer, httpRequest: Request) {\n if (this.registry.getResources(this.mcpModuleId).length === 0) {\n this.logger.debug('No resources registered, skipping resource handlers');\n return;\n }\n\n mcpServer.server.setRequestHandler(ListResourcesRequestSchema, () => {\n this.logger.debug('ListResourcesRequestSchema is being called');\n return {\n resources: this.registry\n .getResources(this.mcpModuleId)\n .map((resources) => resources.metadata),\n };\n });\n\n mcpServer.server.setRequestHandler(\n ReadResourceRequestSchema,\n async (request) => {\n this.logger.debug('ReadResourceRequestSchema is being called');\n\n const uri = request.params.uri;\n const resourceInfo = this.registry.findResourceByUri(\n this.mcpModuleId,\n uri,\n );\n\n if (!resourceInfo) {\n throw new McpError(\n ErrorCode.MethodNotFound,\n `Unknown resource: ${uri}`,\n );\n }\n\n try {\n const contextId = ContextIdFactory.getByRequest(httpRequest);\n this.moduleRef.registerRequestByContextId(httpRequest, contextId);\n\n const resourceInstance = await this.moduleRef.resolve(\n resourceInfo.resource.providerClass,\n contextId,\n { strict: false },\n );\n\n if (!resourceInstance) {\n throw new McpError(\n ErrorCode.MethodNotFound,\n `Unknown resource: ${uri}`,\n );\n }\n\n const context = this.createContext(mcpServer, request);\n\n const requestParams = {\n ...resourceInfo.params,\n ...request.params,\n };\n\n const methodName = resourceInfo.resource.methodName;\n\n const result = await resourceInstance[methodName].call(\n resourceInstance,\n requestParams,\n context,\n httpRequest,\n );\n\n this.logger.debug(result, 'ReadResourceRequestSchema result');\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return result;\n } catch (error) {\n this.logger.error(error);\n return {\n contents: [{ uri, mimeType: 'text/plain', text: error.message }],\n isError: true,\n };\n }\n },\n );\n }\n}\n"]}
@@ -4,7 +4,8 @@ import { Request } from 'express';
4
4
  import { McpRegistryService } from '../mcp-registry.service';
5
5
  import { McpHandlerBase } from './mcp-handler.base';
6
6
  export declare class McpToolsHandler extends McpHandlerBase {
7
- constructor(moduleRef: ModuleRef, registry: McpRegistryService);
7
+ private readonly mcpModuleId;
8
+ constructor(moduleRef: ModuleRef, registry: McpRegistryService, mcpModuleId: string);
8
9
  registerHandlers(mcpServer: McpServer, httpRequest: Request): void;
9
10
  }
10
11
  //# sourceMappingURL=mcp-tools.handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-tools.handler.d.ts","sourceRoot":"","sources":["../../../src/services/handlers/mcp-tools.handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQpE,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,qBACa,eAAgB,SAAQ,cAAc;gBACrC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,kBAAkB;IAI9D,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO;CA+F5D"}
1
+ {"version":3,"file":"mcp-tools.handler.d.ts","sourceRoot":"","sources":["../../../src/services/handlers/mcp-tools.handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQpE,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,qBACa,eAAgB,SAAQ,cAAc;IAItB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAFrD,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,kBAAkB,EACc,WAAW,EAAE,MAAM;IAK/D,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO;CAkG5D"}
@@ -8,6 +8,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
11
14
  var McpToolsHandler_1;
12
15
  Object.defineProperty(exports, "__esModule", { value: true });
13
16
  exports.McpToolsHandler = void 0;
@@ -18,16 +21,17 @@ const zod_to_json_schema_1 = require("zod-to-json-schema");
18
21
  const mcp_registry_service_1 = require("../mcp-registry.service");
19
22
  const mcp_handler_base_1 = require("./mcp-handler.base");
20
23
  let McpToolsHandler = McpToolsHandler_1 = class McpToolsHandler extends mcp_handler_base_1.McpHandlerBase {
21
- constructor(moduleRef, registry) {
24
+ constructor(moduleRef, registry, mcpModuleId) {
22
25
  super(moduleRef, registry, McpToolsHandler_1.name);
26
+ this.mcpModuleId = mcpModuleId;
23
27
  }
24
28
  registerHandlers(mcpServer, httpRequest) {
25
- if (this.registry.getTools().length === 0) {
29
+ if (this.registry.getTools(this.mcpModuleId).length === 0) {
26
30
  this.logger.debug('No tools registered, skipping tool handlers');
27
31
  return;
28
32
  }
29
33
  mcpServer.server.setRequestHandler(types_js_1.ListToolsRequestSchema, () => {
30
- const tools = this.registry.getTools().map((tool) => {
34
+ const tools = this.registry.getTools(this.mcpModuleId).map((tool) => {
31
35
  const toolSchema = {
32
36
  name: tool.metadata.name,
33
37
  description: tool.metadata.description,
@@ -52,7 +56,7 @@ let McpToolsHandler = McpToolsHandler_1 = class McpToolsHandler extends mcp_hand
52
56
  });
53
57
  mcpServer.server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
54
58
  this.logger.debug('CallToolRequestSchema is being called');
55
- const toolInfo = this.registry.findTool(request.params.name);
59
+ const toolInfo = this.registry.findTool(this.mcpModuleId, request.params.name);
56
60
  if (!toolInfo) {
57
61
  throw new types_js_1.McpError(types_js_1.ErrorCode.MethodNotFound, `Unknown tool: ${request.params.name}`);
58
62
  }
@@ -81,6 +85,8 @@ let McpToolsHandler = McpToolsHandler_1 = class McpToolsHandler extends mcp_hand
81
85
  exports.McpToolsHandler = McpToolsHandler;
82
86
  exports.McpToolsHandler = McpToolsHandler = McpToolsHandler_1 = __decorate([
83
87
  (0, common_1.Injectable)({ scope: common_1.Scope.REQUEST }),
84
- __metadata("design:paramtypes", [core_1.ModuleRef, mcp_registry_service_1.McpRegistryService])
88
+ __param(2, (0, common_1.Inject)('MCP_MODULE_ID')),
89
+ __metadata("design:paramtypes", [core_1.ModuleRef,
90
+ mcp_registry_service_1.McpRegistryService, String])
85
91
  ], McpToolsHandler);
86
92
  //# sourceMappingURL=mcp-tools.handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-tools.handler.js","sourceRoot":"","sources":["../../../src/services/handlers/mcp-tools.handler.ts"],"names":[],"mappings":"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","sourcesContent":["import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport {\n CallToolRequestSchema,\n ErrorCode,\n ListToolsRequestSchema,\n McpError,\n} from '@modelcontextprotocol/sdk/types.js';\nimport { Injectable, Scope } from '@nestjs/common';\nimport { ContextIdFactory, ModuleRef } from '@nestjs/core';\nimport { Request } from 'express';\nimport { zodToJsonSchema } from 'zod-to-json-schema';\nimport { McpRegistryService } from '../mcp-registry.service';\nimport { McpHandlerBase } from './mcp-handler.base';\n\n@Injectable({ scope: Scope.REQUEST })\nexport class McpToolsHandler extends McpHandlerBase {\n constructor(moduleRef: ModuleRef, registry: McpRegistryService) {\n super(moduleRef, registry, McpToolsHandler.name);\n }\n\n registerHandlers(mcpServer: McpServer, httpRequest: Request) {\n if (this.registry.getTools().length === 0) {\n this.logger.debug('No tools registered, skipping tool handlers');\n return;\n }\n\n mcpServer.server.setRequestHandler(ListToolsRequestSchema, () => {\n const tools = this.registry.getTools().map((tool) => {\n // Create base schema\n const toolSchema = {\n name: tool.metadata.name,\n description: tool.metadata.description,\n annotations: tool.metadata.annotations,\n };\n\n // Add input schema if defined\n if (tool.metadata.parameters) {\n toolSchema['inputSchema'] = zodToJsonSchema(tool.metadata.parameters);\n }\n\n // Add output schema if defined, ensuring it has type: 'object'\n if (tool.metadata.outputSchema) {\n const outputSchema = zodToJsonSchema(tool.metadata.outputSchema);\n\n // Create a new object that explicitly includes type: 'object'\n const jsonSchema = {\n ...outputSchema,\n type: 'object',\n };\n\n toolSchema['outputSchema'] = jsonSchema;\n }\n\n return toolSchema;\n });\n\n return {\n tools,\n };\n });\n\n mcpServer.server.setRequestHandler(\n CallToolRequestSchema,\n async (request) => {\n this.logger.debug('CallToolRequestSchema is being called');\n\n const toolInfo = this.registry.findTool(request.params.name);\n\n if (!toolInfo) {\n throw new McpError(\n ErrorCode.MethodNotFound,\n `Unknown tool: ${request.params.name}`,\n );\n }\n\n try {\n const contextId = ContextIdFactory.getByRequest(httpRequest);\n this.moduleRef.registerRequestByContextId(httpRequest, contextId);\n\n const toolInstance = await this.moduleRef.resolve(\n toolInfo.providerClass,\n contextId,\n { strict: false },\n );\n\n const context = this.createContext(mcpServer, request);\n\n if (!toolInstance) {\n throw new McpError(\n ErrorCode.MethodNotFound,\n `Unknown tool: ${request.params.name}`,\n );\n }\n\n const result = await toolInstance[toolInfo.methodName].call(\n toolInstance,\n request.params.arguments,\n context,\n httpRequest,\n );\n\n this.logger.debug(result, 'CallToolRequestSchema result');\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return result;\n } catch (error) {\n this.logger.error(error);\n return {\n content: [{ type: 'text', text: error.message }],\n isError: true,\n };\n }\n },\n );\n }\n}\n"]}
1
+ {"version":3,"file":"mcp-tools.handler.js","sourceRoot":"","sources":["../../../src/services/handlers/mcp-tools.handler.ts"],"names":[],"mappings":"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","sourcesContent":["import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport {\n CallToolRequestSchema,\n ErrorCode,\n ListToolsRequestSchema,\n McpError,\n} from '@modelcontextprotocol/sdk/types.js';\nimport { Inject, Injectable, Scope } from '@nestjs/common';\nimport { ContextIdFactory, ModuleRef } from '@nestjs/core';\nimport { Request } from 'express';\nimport { zodToJsonSchema } from 'zod-to-json-schema';\nimport { McpRegistryService } from '../mcp-registry.service';\nimport { McpHandlerBase } from './mcp-handler.base';\n\n@Injectable({ scope: Scope.REQUEST })\nexport class McpToolsHandler extends McpHandlerBase {\n constructor(\n moduleRef: ModuleRef,\n registry: McpRegistryService,\n @Inject('MCP_MODULE_ID') private readonly mcpModuleId: string,\n ) {\n super(moduleRef, registry, McpToolsHandler.name);\n }\n\n registerHandlers(mcpServer: McpServer, httpRequest: Request) {\n if (this.registry.getTools(this.mcpModuleId).length === 0) {\n this.logger.debug('No tools registered, skipping tool handlers');\n return;\n }\n\n mcpServer.server.setRequestHandler(ListToolsRequestSchema, () => {\n const tools = this.registry.getTools(this.mcpModuleId).map((tool) => {\n // Create base schema\n const toolSchema = {\n name: tool.metadata.name,\n description: tool.metadata.description,\n annotations: tool.metadata.annotations,\n };\n\n // Add input schema if defined\n if (tool.metadata.parameters) {\n toolSchema['inputSchema'] = zodToJsonSchema(tool.metadata.parameters);\n }\n\n // Add output schema if defined, ensuring it has type: 'object'\n if (tool.metadata.outputSchema) {\n const outputSchema = zodToJsonSchema(tool.metadata.outputSchema);\n\n // Create a new object that explicitly includes type: 'object'\n const jsonSchema = {\n ...outputSchema,\n type: 'object',\n };\n\n toolSchema['outputSchema'] = jsonSchema;\n }\n\n return toolSchema;\n });\n\n return {\n tools,\n };\n });\n\n mcpServer.server.setRequestHandler(\n CallToolRequestSchema,\n async (request) => {\n this.logger.debug('CallToolRequestSchema is being called');\n\n const toolInfo = this.registry.findTool(\n this.mcpModuleId,\n request.params.name,\n );\n\n if (!toolInfo) {\n throw new McpError(\n ErrorCode.MethodNotFound,\n `Unknown tool: ${request.params.name}`,\n );\n }\n\n try {\n const contextId = ContextIdFactory.getByRequest(httpRequest);\n this.moduleRef.registerRequestByContextId(httpRequest, contextId);\n\n const toolInstance = await this.moduleRef.resolve(\n toolInfo.providerClass,\n contextId,\n { strict: false },\n );\n\n const context = this.createContext(mcpServer, request);\n\n if (!toolInstance) {\n throw new McpError(\n ErrorCode.MethodNotFound,\n `Unknown tool: ${request.params.name}`,\n );\n }\n\n const result = await toolInstance[toolInfo.methodName].call(\n toolInstance,\n request.params.arguments,\n context,\n httpRequest,\n );\n\n this.logger.debug(result, 'CallToolRequestSchema result');\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return result;\n } catch (error) {\n this.logger.error(error);\n return {\n content: [{ type: 'text', text: error.message }],\n isError: true,\n };\n }\n },\n );\n }\n}\n"]}
@@ -7,7 +7,7 @@ export declare class McpExecutorService {
7
7
  private toolsHandler;
8
8
  private resourcesHandler;
9
9
  private promptsHandler;
10
- constructor(moduleRef: ModuleRef, registry: McpRegistryService);
10
+ constructor(moduleRef: ModuleRef, registry: McpRegistryService, mcpModuleId: string);
11
11
  registerRequestHandlers(mcpServer: McpServer, httpRequest: Request): void;
12
12
  }
13
13
  //# sourceMappingURL=mcp-executor.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-executor.service.d.ts","sourceRoot":"","sources":["../../src/services/mcp-executor.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAQ5D,qBACa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,gBAAgB,CAAsB;IAC9C,OAAO,CAAC,cAAc,CAAoB;gBAE9B,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,kBAAkB;IAW9D,uBAAuB,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO;CAKnE"}
1
+ {"version":3,"file":"mcp-executor.service.d.ts","sourceRoot":"","sources":["../../src/services/mcp-executor.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAQ5D,qBACa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,gBAAgB,CAAsB;IAC9C,OAAO,CAAC,cAAc,CAAoB;gBAGxC,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,kBAAkB,EACH,WAAW,EAAE,MAAM;IAoB9C,uBAAuB,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO;CAKnE"}
@@ -8,6 +8,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
11
14
  var McpExecutorService_1;
12
15
  Object.defineProperty(exports, "__esModule", { value: true });
13
16
  exports.McpExecutorService = void 0;
@@ -18,11 +21,11 @@ const mcp_tools_handler_1 = require("./handlers/mcp-tools.handler");
18
21
  const mcp_resources_handler_1 = require("./handlers/mcp-resources.handler");
19
22
  const mcp_prompts_handler_1 = require("./handlers/mcp-prompts.handler");
20
23
  let McpExecutorService = McpExecutorService_1 = class McpExecutorService {
21
- constructor(moduleRef, registry) {
24
+ constructor(moduleRef, registry, mcpModuleId) {
22
25
  this.logger = new common_1.Logger(McpExecutorService_1.name);
23
- this.toolsHandler = new mcp_tools_handler_1.McpToolsHandler(moduleRef, registry);
24
- this.resourcesHandler = new mcp_resources_handler_1.McpResourcesHandler(moduleRef, registry);
25
- this.promptsHandler = new mcp_prompts_handler_1.McpPromptsHandler(moduleRef, registry);
26
+ this.toolsHandler = new mcp_tools_handler_1.McpToolsHandler(moduleRef, registry, mcpModuleId);
27
+ this.resourcesHandler = new mcp_resources_handler_1.McpResourcesHandler(moduleRef, registry, mcpModuleId);
28
+ this.promptsHandler = new mcp_prompts_handler_1.McpPromptsHandler(moduleRef, registry, mcpModuleId);
26
29
  }
27
30
  registerRequestHandlers(mcpServer, httpRequest) {
28
31
  this.toolsHandler.registerHandlers(mcpServer, httpRequest);
@@ -33,6 +36,8 @@ let McpExecutorService = McpExecutorService_1 = class McpExecutorService {
33
36
  exports.McpExecutorService = McpExecutorService;
34
37
  exports.McpExecutorService = McpExecutorService = McpExecutorService_1 = __decorate([
35
38
  (0, common_1.Injectable)({ scope: common_1.Scope.REQUEST }),
36
- __metadata("design:paramtypes", [core_1.ModuleRef, mcp_registry_service_1.McpRegistryService])
39
+ __param(2, (0, common_1.Inject)('MCP_MODULE_ID')),
40
+ __metadata("design:paramtypes", [core_1.ModuleRef,
41
+ mcp_registry_service_1.McpRegistryService, String])
37
42
  ], McpExecutorService);
38
43
  //# sourceMappingURL=mcp-executor.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-executor.service.js","sourceRoot":"","sources":["../../src/services/mcp-executor.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AACA,2CAA2D;AAC3D,uCAAyC;AAEzC,iEAA4D;AAC5D,oEAA+D;AAC/D,4EAAuE;AACvE,wEAAmE;AAM5D,IAAM,kBAAkB,0BAAxB,MAAM,kBAAkB;IAM7B,YAAY,SAAoB,EAAE,QAA4B;QALtD,WAAM,GAAG,IAAI,eAAM,CAAC,oBAAkB,CAAC,IAAI,CAAC,CAAC;QAMnD,IAAI,CAAC,YAAY,GAAG,IAAI,mCAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC7D,IAAI,CAAC,gBAAgB,GAAG,IAAI,2CAAmB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACrE,IAAI,CAAC,cAAc,GAAG,IAAI,uCAAiB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnE,CAAC;IAOD,uBAAuB,CAAC,SAAoB,EAAE,WAAoB;QAChE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC3D,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC/D,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC/D,CAAC;CACF,CAAA;AAtBY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAU,EAAC,EAAE,KAAK,EAAE,cAAK,CAAC,OAAO,EAAE,CAAC;qCAOZ,gBAAS,EAAY,yCAAkB;GANnD,kBAAkB,CAsB9B","sourcesContent":["import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { Injectable, Logger, Scope } from '@nestjs/common';\nimport { ModuleRef } from '@nestjs/core';\nimport { Request } from 'express';\nimport { McpRegistryService } from './mcp-registry.service';\nimport { McpToolsHandler } from './handlers/mcp-tools.handler';\nimport { McpResourcesHandler } from './handlers/mcp-resources.handler';\nimport { McpPromptsHandler } from './handlers/mcp-prompts.handler';\n\n/**\n * Request-scoped service for executing MCP tools\n */\n@Injectable({ scope: Scope.REQUEST })\nexport class McpExecutorService {\n private logger = new Logger(McpExecutorService.name);\n private toolsHandler: McpToolsHandler;\n private resourcesHandler: McpResourcesHandler;\n private promptsHandler: McpPromptsHandler;\n\n constructor(moduleRef: ModuleRef, registry: McpRegistryService) {\n this.toolsHandler = new McpToolsHandler(moduleRef, registry);\n this.resourcesHandler = new McpResourcesHandler(moduleRef, registry);\n this.promptsHandler = new McpPromptsHandler(moduleRef, registry);\n }\n\n /**\n * Register tool-related request handlers with the MCP server\n * @param mcpServer - The MCP server instance\n * @param request - The current HTTP request object\n */\n registerRequestHandlers(mcpServer: McpServer, httpRequest: Request) {\n this.toolsHandler.registerHandlers(mcpServer, httpRequest);\n this.resourcesHandler.registerHandlers(mcpServer, httpRequest);\n this.promptsHandler.registerHandlers(mcpServer, httpRequest);\n }\n}\n"]}
1
+ {"version":3,"file":"mcp-executor.service.js","sourceRoot":"","sources":["../../src/services/mcp-executor.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,2CAAmE;AACnE,uCAAyC;AAEzC,iEAA4D;AAC5D,oEAA+D;AAC/D,4EAAuE;AACvE,wEAAmE;AAM5D,IAAM,kBAAkB,0BAAxB,MAAM,kBAAkB;IAM7B,YACE,SAAoB,EACpB,QAA4B,EACH,WAAmB;QARtC,WAAM,GAAG,IAAI,eAAM,CAAC,oBAAkB,CAAC,IAAI,CAAC,CAAC;QAUnD,IAAI,CAAC,YAAY,GAAG,IAAI,mCAAe,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC1E,IAAI,CAAC,gBAAgB,GAAG,IAAI,2CAAmB,CAC7C,SAAS,EACT,QAAQ,EACR,WAAW,CACZ,CAAC;QACF,IAAI,CAAC,cAAc,GAAG,IAAI,uCAAiB,CACzC,SAAS,EACT,QAAQ,EACR,WAAW,CACZ,CAAC;IACJ,CAAC;IAOD,uBAAuB,CAAC,SAAoB,EAAE,WAAoB;QAChE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC3D,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC/D,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC/D,CAAC;CACF,CAAA;AAlCY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAU,EAAC,EAAE,KAAK,EAAE,cAAK,CAAC,OAAO,EAAE,CAAC;IAUhC,WAAA,IAAA,eAAM,EAAC,eAAe,CAAC,CAAA;qCAFb,gBAAS;QACV,yCAAkB;GARnB,kBAAkB,CAkC9B","sourcesContent":["import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { Inject, Injectable, Logger, Scope } from '@nestjs/common';\nimport { ModuleRef } from '@nestjs/core';\nimport { Request } from 'express';\nimport { McpRegistryService } from './mcp-registry.service';\nimport { McpToolsHandler } from './handlers/mcp-tools.handler';\nimport { McpResourcesHandler } from './handlers/mcp-resources.handler';\nimport { McpPromptsHandler } from './handlers/mcp-prompts.handler';\n\n/**\n * Request-scoped service for executing MCP tools\n */\n@Injectable({ scope: Scope.REQUEST })\nexport class McpExecutorService {\n private logger = new Logger(McpExecutorService.name);\n private toolsHandler: McpToolsHandler;\n private resourcesHandler: McpResourcesHandler;\n private promptsHandler: McpPromptsHandler;\n\n constructor(\n moduleRef: ModuleRef,\n registry: McpRegistryService,\n @Inject('MCP_MODULE_ID') mcpModuleId: string,\n ) {\n this.toolsHandler = new McpToolsHandler(moduleRef, registry, mcpModuleId);\n this.resourcesHandler = new McpResourcesHandler(\n moduleRef,\n registry,\n mcpModuleId,\n );\n this.promptsHandler = new McpPromptsHandler(\n moduleRef,\n registry,\n mcpModuleId,\n );\n }\n\n /**\n * Register tool-related request handlers with the MCP server\n * @param mcpServer - The MCP server instance\n * @param request - The current HTTP request object\n */\n registerRequestHandlers(mcpServer: McpServer, httpRequest: Request) {\n this.toolsHandler.registerHandlers(mcpServer, httpRequest);\n this.resourcesHandler.registerHandlers(mcpServer, httpRequest);\n this.promptsHandler.registerHandlers(mcpServer, httpRequest);\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { InjectionToken, OnApplicationBootstrap } from '@nestjs/common';
2
- import { DiscoveryService, MetadataScanner } from '@nestjs/core';
2
+ import { DiscoveryService, MetadataScanner, ModulesContainer } from '@nestjs/core';
3
3
  import { ToolMetadata } from '../decorators';
4
4
  import { ResourceMetadata } from '../decorators/resource.decorator';
5
5
  import { PromptMetadata } from '../decorators/prompt.decorator';
@@ -12,24 +12,27 @@ export type DiscoveredTool<T extends object> = {
12
12
  export declare class McpRegistryService implements OnApplicationBootstrap {
13
13
  private readonly discovery;
14
14
  private readonly metadataScanner;
15
+ private readonly modulesContainer;
15
16
  private readonly logger;
16
- private discoveredTools;
17
- constructor(discovery: DiscoveryService, metadataScanner: MetadataScanner);
17
+ private discoveredToolsByMcpModuleId;
18
+ constructor(discovery: DiscoveryService, metadataScanner: MetadataScanner, modulesContainer: ModulesContainer);
18
19
  onApplicationBootstrap(): void;
19
20
  private discoverTools;
21
+ private collectSubtreeModules;
22
+ private discoverToolsForModuleSubtree;
20
23
  private addDiscovery;
21
24
  private addDiscoveryPrompt;
22
25
  private addDiscoveryTool;
23
26
  private addDiscoveryResource;
24
- getTools(): DiscoveredTool<ToolMetadata>[];
25
- findTool(name: string): DiscoveredTool<ToolMetadata> | undefined;
26
- getResources(): DiscoveredTool<ResourceMetadata>[];
27
- findResource(name: string): DiscoveredTool<ResourceMetadata> | undefined;
28
- getPrompts(): DiscoveredTool<PromptMetadata>[];
29
- findPrompt(name: string): DiscoveredTool<PromptMetadata> | undefined;
27
+ getTools(mcpModuleId: string): DiscoveredTool<ToolMetadata>[];
28
+ findTool(mcpModuleId: string, name: string): DiscoveredTool<ToolMetadata> | undefined;
29
+ getResources(mcpModuleId: string): DiscoveredTool<ResourceMetadata>[];
30
+ findResource(mcpModuleId: string, name: string): DiscoveredTool<ResourceMetadata> | undefined;
31
+ getPrompts(mcpModuleId: string): DiscoveredTool<PromptMetadata>[];
32
+ findPrompt(mcpModuleId: string, name: string): DiscoveredTool<PromptMetadata> | undefined;
30
33
  private convertTemplate;
31
34
  private convertUri;
32
- findResourceByUri(uri: string): {
35
+ findResourceByUri(mcpModuleId: string, uri: string): {
33
36
  resource: DiscoveredTool<ResourceMetadata>;
34
37
  params: Record<string, string>;
35
38
  } | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-registry.service.d.ts","sourceRoot":"","sources":["../../src/services/mcp-registry.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EAEd,sBAAsB,EACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAIL,YAAY,EACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAKhE,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,MAAM,IAAI;IAC7C,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;IACrC,QAAQ,EAAE,CAAC,CAAC;IACZ,aAAa,EAAE,cAAc,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAKF,qBACa,kBAAmB,YAAW,sBAAsB;IAK7D,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,eAAe;IALlC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAC9D,OAAO,CAAC,eAAe,CAA6B;gBAGjC,SAAS,EAAE,gBAAgB,EAC3B,eAAe,EAAE,eAAe;IAGnD,sBAAsB;IAOtB,OAAO,CAAC,aAAa;IA0DrB,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,oBAAoB;IAiB5B,QAAQ,IAAI,cAAc,CAAC,YAAY,CAAC,EAAE;IAO1C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,YAAY,CAAC,GAAG,SAAS;IAOhE,YAAY,IAAI,cAAc,CAAC,gBAAgB,CAAC,EAAE;IAOlD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,gBAAgB,CAAC,GAAG,SAAS;IAOxE,UAAU,IAAI,cAAc,CAAC,cAAc,CAAC,EAAE;IAO9C,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS;IAIpE,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,UAAU;IAYlB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GACzB;QACE,QAAQ,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAChC,GACD,SAAS;CA6Bd"}
1
+ {"version":3,"file":"mcp-registry.service.d.ts","sourceRoot":"","sources":["../../src/services/mcp-registry.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EAEd,sBAAsB,EACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAIL,YAAY,EACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAMhE,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,MAAM,IAAI;IAC7C,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;IACrC,QAAQ,EAAE,CAAC,CAAC;IACZ,aAAa,EAAE,cAAc,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAKF,qBACa,kBAAmB,YAAW,sBAAsB;IAM7D,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAPnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAC9D,OAAO,CAAC,4BAA4B,CACxB;gBAGO,SAAS,EAAE,gBAAgB,EAC3B,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB;IAGrD,sBAAsB;IAOtB,OAAO,CAAC,aAAa;IA4BrB,OAAO,CAAC,qBAAqB;IAiB7B,OAAO,CAAC,6BAA6B;IA4DrC,OAAO,CAAC,YAAY;IA0BpB,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,oBAAoB;IAmB5B,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAAC,YAAY,CAAC,EAAE;IAW7D,QAAQ,CACN,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,cAAc,CAAC,YAAY,CAAC,GAAG,SAAS;IAS3C,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAAC,gBAAgB,CAAC,EAAE;IAWrE,YAAY,CACV,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,cAAc,CAAC,gBAAgB,CAAC,GAAG,SAAS;IAS/C,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAAC,cAAc,CAAC,EAAE;IAWjE,UAAU,CACR,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS;IAM7C,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,UAAU;IAYlB,iBAAiB,CACf,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,GAET;QACE,QAAQ,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAChC,GACD,SAAS;CA6Bd"}