@nestjs-mcp/server 0.1.0-alpha.10

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 (100) hide show
  1. package/.copilotignore +38 -0
  2. package/.devcontainer/Dockerfile.dev +28 -0
  3. package/.devcontainer/devcontainer.json +56 -0
  4. package/.devcontainer/docker-compose.yml +15 -0
  5. package/.dockerignore +37 -0
  6. package/.prettierrc +4 -0
  7. package/LICENSE +21 -0
  8. package/README.md +540 -0
  9. package/dist/controllers/sse/index.d.ts +2 -0
  10. package/dist/controllers/sse/index.js +19 -0
  11. package/dist/controllers/sse/index.js.map +1 -0
  12. package/dist/controllers/sse/sse.controller.d.ts +10 -0
  13. package/dist/controllers/sse/sse.controller.js +57 -0
  14. package/dist/controllers/sse/sse.controller.js.map +1 -0
  15. package/dist/controllers/sse/sse.service.d.ts +16 -0
  16. package/dist/controllers/sse/sse.service.js +78 -0
  17. package/dist/controllers/sse/sse.service.js.map +1 -0
  18. package/dist/controllers/streamable/index.d.ts +2 -0
  19. package/dist/controllers/streamable/index.js +19 -0
  20. package/dist/controllers/streamable/index.js.map +1 -0
  21. package/dist/controllers/streamable/streamable.controller.d.ts +9 -0
  22. package/dist/controllers/streamable/streamable.controller.js +62 -0
  23. package/dist/controllers/streamable/streamable.controller.js.map +1 -0
  24. package/dist/controllers/streamable/streamable.service.d.ts +24 -0
  25. package/dist/controllers/streamable/streamable.service.js +118 -0
  26. package/dist/controllers/streamable/streamable.service.js.map +1 -0
  27. package/dist/decorators/capabilities.constants.d.ts +4 -0
  28. package/dist/decorators/capabilities.constants.js +8 -0
  29. package/dist/decorators/capabilities.constants.js.map +1 -0
  30. package/dist/decorators/capabilities.decorators.d.ts +8 -0
  31. package/dist/decorators/capabilities.decorators.js +49 -0
  32. package/dist/decorators/capabilities.decorators.js.map +1 -0
  33. package/dist/decorators/index.d.ts +2 -0
  34. package/dist/decorators/index.js +19 -0
  35. package/dist/decorators/index.js.map +1 -0
  36. package/dist/index.d.ts +4 -0
  37. package/dist/index.js +21 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/interceptors/message.interceptor.d.ts +10 -0
  40. package/dist/interceptors/message.interceptor.js +61 -0
  41. package/dist/interceptors/message.interceptor.js.map +1 -0
  42. package/dist/interfaces/capabilities.interface.d.ts +52 -0
  43. package/dist/interfaces/capabilities.interface.js +3 -0
  44. package/dist/interfaces/capabilities.interface.js.map +1 -0
  45. package/dist/interfaces/context.interface.d.ts +6 -0
  46. package/dist/interfaces/context.interface.js +3 -0
  47. package/dist/interfaces/context.interface.js.map +1 -0
  48. package/dist/interfaces/index.d.ts +2 -0
  49. package/dist/interfaces/index.js +19 -0
  50. package/dist/interfaces/index.js.map +1 -0
  51. package/dist/interfaces/mcp-server-options.interface.d.ts +42 -0
  52. package/dist/interfaces/mcp-server-options.interface.js +3 -0
  53. package/dist/interfaces/mcp-server-options.interface.js.map +1 -0
  54. package/dist/interfaces/message.types.d.ts +8 -0
  55. package/dist/interfaces/message.types.js +3 -0
  56. package/dist/interfaces/message.types.js.map +1 -0
  57. package/dist/mcp.module.d.ts +13 -0
  58. package/dist/mcp.module.js +193 -0
  59. package/dist/mcp.module.js.map +1 -0
  60. package/dist/registry/discovery.service.d.ts +16 -0
  61. package/dist/registry/discovery.service.js +85 -0
  62. package/dist/registry/discovery.service.js.map +1 -0
  63. package/dist/registry/index.d.ts +2 -0
  64. package/dist/registry/index.js +19 -0
  65. package/dist/registry/index.js.map +1 -0
  66. package/dist/registry/logger.service.d.ts +16 -0
  67. package/dist/registry/logger.service.js +97 -0
  68. package/dist/registry/logger.service.js.map +1 -0
  69. package/dist/registry/registry.service.d.ts +16 -0
  70. package/dist/registry/registry.service.js +170 -0
  71. package/dist/registry/registry.service.js.map +1 -0
  72. package/dist/services/message.service.d.ts +7 -0
  73. package/dist/services/message.service.js +25 -0
  74. package/dist/services/message.service.js.map +1 -0
  75. package/dist/tsconfig.build.tsbuildinfo +1 -0
  76. package/eslint.config.mjs +40 -0
  77. package/package.json +109 -0
  78. package/src/controllers/sse/index.ts +2 -0
  79. package/src/controllers/sse/sse.controller.ts +25 -0
  80. package/src/controllers/sse/sse.service.ts +90 -0
  81. package/src/controllers/streamable/index.ts +2 -0
  82. package/src/controllers/streamable/streamable.controller.ts +24 -0
  83. package/src/controllers/streamable/streamable.service.ts +169 -0
  84. package/src/decorators/capabilities.constants.ts +7 -0
  85. package/src/decorators/capabilities.decorators.ts +150 -0
  86. package/src/decorators/index.ts +2 -0
  87. package/src/index.ts +11 -0
  88. package/src/interceptors/message.interceptor.ts +70 -0
  89. package/src/interfaces/capabilities.interface.ts +95 -0
  90. package/src/interfaces/context.interface.ts +18 -0
  91. package/src/interfaces/index.ts +2 -0
  92. package/src/interfaces/mcp-server-options.interface.ts +105 -0
  93. package/src/interfaces/message.types.ts +13 -0
  94. package/src/mcp.module.ts +250 -0
  95. package/src/mcp.service.spec.ts +28 -0
  96. package/src/registry/discovery.service.ts +116 -0
  97. package/src/registry/index.ts +2 -0
  98. package/src/registry/logger.service.ts +143 -0
  99. package/src/registry/registry.service.ts +282 -0
  100. package/src/services/message.service.ts +18 -0
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RegistryService = void 0;
13
+ const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
14
+ const common_1 = require("@nestjs/common");
15
+ const decorators_1 = require("../decorators");
16
+ const capabilities_constants_1 = require("../decorators/capabilities.constants");
17
+ const capabilities_decorators_1 = require("../decorators/capabilities.decorators");
18
+ const message_service_1 = require("../services/message.service");
19
+ const discovery_service_1 = require("./discovery.service");
20
+ const logger_service_1 = require("./logger.service");
21
+ let RegistryService = class RegistryService {
22
+ discoveryService;
23
+ logger;
24
+ messageService;
25
+ constructor(discoveryService, logger, messageService) {
26
+ this.discoveryService = discoveryService;
27
+ this.logger = logger;
28
+ this.messageService = messageService;
29
+ }
30
+ async registerAll(server) {
31
+ this.logger.log('Starting registration of all MCP capabilities...', 'registry');
32
+ await Promise.all([
33
+ this.registerResources(server),
34
+ this.registerPrompts(server),
35
+ this.registerTools(server),
36
+ ]);
37
+ }
38
+ runGuards(instance, methodName, args) {
39
+ const classConstructor = instance.constructor;
40
+ const classGuards = Reflect.getMetadata(capabilities_decorators_1.MCP_GUARDS, classConstructor) || [];
41
+ const prototype = Object.getPrototypeOf(instance);
42
+ const methodKey = prototype[methodName];
43
+ const methodGuards = (methodKey &&
44
+ Reflect.getMetadata(capabilities_decorators_1.MCP_GUARDS, methodKey)) ||
45
+ [];
46
+ const allGuards = [...classGuards, ...methodGuards];
47
+ if (!allGuards.length)
48
+ return Promise.resolve();
49
+ const context = {
50
+ args,
51
+ message: this.messageService.get(),
52
+ getType: () => 'mcp',
53
+ getClass: () => instance.constructor,
54
+ getArgs: () => args,
55
+ };
56
+ return (async () => {
57
+ for (const Guard of allGuards) {
58
+ const guardInstance = typeof Guard === 'function' ? new Guard() : Guard;
59
+ const allowed = await guardInstance.canActivate(context);
60
+ if (!allowed)
61
+ throw new Error(`Access denied by guard on ${methodName}`);
62
+ }
63
+ })();
64
+ }
65
+ async wrappedHandler(instance, handler, args) {
66
+ const isResolver = Reflect.hasMetadata(decorators_1.MCP_RESOLVER, instance.constructor);
67
+ if (!isResolver) {
68
+ throw new Error(`Class "${instance.constructor.name}" must be decorated with @Resolver to use @Prompt, @Tool, or @Resource.`);
69
+ }
70
+ const methodName = handler.name;
71
+ await this.runGuards(instance, methodName, args);
72
+ return handler(...args);
73
+ }
74
+ registerResources(server) {
75
+ const resourceMethods = this.discoveryService.getAllMethodsWithMetadata(capabilities_constants_1.MCP_RESOURCE);
76
+ for (const method of resourceMethods) {
77
+ const { metadata, handler, instance } = method;
78
+ this.logger.log(`Resource "${metadata?.name || 'unnamed'}" found.`, 'resources');
79
+ const wrappedHandler = (...args) => this.wrappedHandler(instance, handler, args);
80
+ try {
81
+ if ('template' in metadata) {
82
+ if ('metadata' in metadata) {
83
+ server.resource(metadata.name, new mcp_js_1.ResourceTemplate(metadata.template, { list: undefined }), metadata.metadata, wrappedHandler);
84
+ }
85
+ else {
86
+ server.resource(metadata.name, new mcp_js_1.ResourceTemplate(metadata.template, { list: undefined }), wrappedHandler);
87
+ }
88
+ }
89
+ else if ('uri' in metadata) {
90
+ if ('metadata' in metadata) {
91
+ server.resource(metadata.name, metadata.uri, metadata.metadata, wrappedHandler);
92
+ }
93
+ else {
94
+ server.resource(metadata.name, metadata.uri, wrappedHandler);
95
+ }
96
+ }
97
+ }
98
+ catch (error) {
99
+ this.logger.error(`Error registering resource ${metadata.name}: ${error}`, undefined, 'resources');
100
+ if (error && typeof error === 'object' && 'stack' in error) {
101
+ this.logger.error(`Error stack: ${error.stack}`, undefined, 'resources');
102
+ }
103
+ }
104
+ }
105
+ }
106
+ registerPrompts(server) {
107
+ const promptMethods = this.discoveryService.getAllMethodsWithMetadata(capabilities_constants_1.MCP_PROMPT);
108
+ for (const method of promptMethods) {
109
+ const { metadata, handler, instance } = method;
110
+ this.logger.log(`Prompt "${metadata?.name || 'unnamed'}" found.`, 'prompts');
111
+ const wrappedHandler = (...args) => this.wrappedHandler(instance, handler, args);
112
+ try {
113
+ if ('description' in metadata && 'argsSchema' in metadata) {
114
+ server.prompt(metadata.name, metadata.description, metadata.argsSchema, wrappedHandler);
115
+ }
116
+ else if ('argsSchema' in metadata) {
117
+ server.prompt(metadata.name, metadata.argsSchema, wrappedHandler);
118
+ }
119
+ else if ('description' in metadata) {
120
+ server.prompt(metadata.name, metadata.description, wrappedHandler);
121
+ }
122
+ else {
123
+ server.prompt(metadata.name, wrappedHandler);
124
+ }
125
+ }
126
+ catch (error) {
127
+ this.logger.error(`Error registering prompt ${metadata.name}: ${error}`, undefined, 'prompts');
128
+ if (error && typeof error === 'object' && 'stack' in error) {
129
+ this.logger.error(`Error stack: ${error.stack}`, undefined, 'prompts');
130
+ }
131
+ }
132
+ }
133
+ }
134
+ registerTools(server) {
135
+ const toolMethods = this.discoveryService.getAllMethodsWithMetadata(capabilities_constants_1.MCP_TOOL);
136
+ for (const method of toolMethods) {
137
+ const { metadata, handler, instance } = method;
138
+ this.logger.log(`Tool "${metadata?.name || 'unnamed'}" found.`, 'tools');
139
+ const wrappedHandler = (...args) => this.wrappedHandler(instance, handler, args);
140
+ try {
141
+ if ('description' in metadata && 'paramSchema' in metadata) {
142
+ server.tool(metadata.name, metadata.description, metadata.paramSchema, wrappedHandler);
143
+ }
144
+ else if ('paramSchema' in metadata) {
145
+ server.tool(metadata.name, metadata.paramSchema, wrappedHandler);
146
+ }
147
+ else if ('description' in metadata) {
148
+ server.tool(metadata.name, metadata.description, wrappedHandler);
149
+ }
150
+ else {
151
+ server.tool(metadata.name, wrappedHandler);
152
+ }
153
+ }
154
+ catch (error) {
155
+ this.logger.error(`Error registering tool ${metadata.name}: ${error}`, undefined, 'tools');
156
+ if (error && typeof error === 'object' && 'stack' in error) {
157
+ this.logger.error(`Stack trace: ${error.stack}`, undefined, 'tools');
158
+ }
159
+ }
160
+ }
161
+ }
162
+ };
163
+ exports.RegistryService = RegistryService;
164
+ exports.RegistryService = RegistryService = __decorate([
165
+ (0, common_1.Injectable)(),
166
+ __metadata("design:paramtypes", [discovery_service_1.DiscoveryService,
167
+ logger_service_1.McpLoggerService,
168
+ message_service_1.MessageService])
169
+ ], RegistryService);
170
+ //# sourceMappingURL=registry.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.service.js","sourceRoot":"","sources":["../../src/registry/registry.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { AsyncLocalStorage } from 'async_hooks';
2
+ import { McpMessage } from '../interfaces/message.types';
3
+ export declare const requestContext: AsyncLocalStorage<McpMessage>;
4
+ export declare class MessageService {
5
+ set(context: McpMessage): void;
6
+ get(): McpMessage | undefined;
7
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.MessageService = exports.requestContext = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const async_hooks_1 = require("async_hooks");
12
+ exports.requestContext = new async_hooks_1.AsyncLocalStorage();
13
+ let MessageService = class MessageService {
14
+ set(context) {
15
+ exports.requestContext.enterWith(context);
16
+ }
17
+ get() {
18
+ return exports.requestContext.getStore();
19
+ }
20
+ };
21
+ exports.MessageService = MessageService;
22
+ exports.MessageService = MessageService = __decorate([
23
+ (0, common_1.Injectable)()
24
+ ], MessageService);
25
+ //# sourceMappingURL=message.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.service.js","sourceRoot":"","sources":["../../src/services/message.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAE5C,6CAAgD;AAInC,QAAA,cAAc,GAAG,IAAI,+BAAiB,EAAc,CAAC;AAG3D,IAAM,cAAc,GAApB,MAAM,cAAc;IAClB,GAAG,CAAC,OAAmB;QAC5B,sBAAc,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAEM,GAAG;QACR,OAAO,sBAAc,CAAC,QAAQ,EAAE,CAAC;IACnC,CAAC;CACF,CAAA;AARY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;GACA,cAAc,CAQ1B"}