@nestjs-mcp/server 0.1.0-alpha.9 → 0.1.0

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 (74) hide show
  1. package/README.md +450 -134
  2. package/coverage/clover.xml +507 -0
  3. package/coverage/coverage-final.json +19 -0
  4. package/coverage/lcov-report/base.css +224 -0
  5. package/coverage/lcov-report/block-navigation.js +87 -0
  6. package/coverage/lcov-report/favicon.png +0 -0
  7. package/coverage/lcov-report/index.html +206 -0
  8. package/coverage/lcov-report/prettify.css +1 -0
  9. package/coverage/lcov-report/prettify.js +2 -0
  10. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  11. package/coverage/lcov-report/sorter.js +196 -0
  12. package/coverage/lcov-report/src/controllers/sse/index.html +146 -0
  13. package/coverage/lcov-report/src/controllers/sse/index.ts.html +91 -0
  14. package/coverage/lcov-report/src/controllers/sse/sse.controller.ts.html +160 -0
  15. package/coverage/lcov-report/src/controllers/sse/sse.service.ts.html +403 -0
  16. package/coverage/lcov-report/src/controllers/streamable/index.html +146 -0
  17. package/coverage/lcov-report/src/controllers/streamable/index.ts.html +91 -0
  18. package/coverage/lcov-report/src/controllers/streamable/streamable.controller.ts.html +157 -0
  19. package/coverage/lcov-report/src/controllers/streamable/streamable.service.ts.html +655 -0
  20. package/coverage/lcov-report/src/decorators/capabilities.constants.ts.html +106 -0
  21. package/coverage/lcov-report/src/decorators/capabilities.decorators.ts.html +535 -0
  22. package/coverage/lcov-report/src/decorators/index.html +146 -0
  23. package/coverage/lcov-report/src/decorators/index.ts.html +91 -0
  24. package/coverage/lcov-report/src/index.html +131 -0
  25. package/coverage/lcov-report/src/index.ts.html +118 -0
  26. package/coverage/lcov-report/src/interfaces/capabilities.interface.ts.html +703 -0
  27. package/coverage/lcov-report/src/interfaces/index.html +131 -0
  28. package/coverage/lcov-report/src/interfaces/index.ts.html +91 -0
  29. package/coverage/lcov-report/src/mcp.module.ts.html +817 -0
  30. package/coverage/lcov-report/src/registry/discovery.service.ts.html +433 -0
  31. package/coverage/lcov-report/src/registry/index.html +161 -0
  32. package/coverage/lcov-report/src/registry/index.ts.html +91 -0
  33. package/coverage/lcov-report/src/registry/logger.service.ts.html +514 -0
  34. package/coverage/lcov-report/src/registry/registry.service.ts.html +1183 -0
  35. package/coverage/lcov-report/src/services/index.html +116 -0
  36. package/coverage/lcov-report/src/services/session.manager.ts.html +163 -0
  37. package/coverage/lcov.info +912 -0
  38. package/dist/controllers/sse/sse.controller.d.ts +1 -3
  39. package/dist/controllers/sse/sse.controller.js +2 -8
  40. package/dist/controllers/sse/sse.controller.js.map +1 -1
  41. package/dist/interfaces/capabilities.interface.d.ts +1 -1
  42. package/dist/interfaces/{context.interface.d.ts → guards.interface.d.ts} +0 -2
  43. package/dist/interfaces/{message.types.js → guards.interface.js} +1 -1
  44. package/dist/interfaces/guards.interface.js.map +1 -0
  45. package/dist/interfaces/index.d.ts +1 -1
  46. package/dist/interfaces/index.js +1 -1
  47. package/dist/interfaces/index.js.map +1 -1
  48. package/dist/interfaces/mcp-server-options.interface.d.ts +2 -2
  49. package/dist/mcp.module.js +1 -18
  50. package/dist/mcp.module.js.map +1 -1
  51. package/dist/registry/registry.service.d.ts +1 -3
  52. package/dist/registry/registry.service.js +3 -8
  53. package/dist/registry/registry.service.js.map +1 -1
  54. package/dist/tsconfig.build.tsbuildinfo +1 -1
  55. package/package.json +16 -17
  56. package/src/controllers/sse/sse.service.ts +21 -5
  57. package/src/controllers/streamable/streamable.service.ts +45 -23
  58. package/src/interfaces/capabilities.interface.ts +112 -1
  59. package/src/interfaces/context.interface.ts +21 -6
  60. package/src/mcp.module.ts +4 -10
  61. package/src/registry/registry.service.ts +94 -10
  62. package/src/services/session.manager.ts +26 -0
  63. package/dist/interceptors/message.interceptor.d.ts +0 -10
  64. package/dist/interceptors/message.interceptor.js +0 -61
  65. package/dist/interceptors/message.interceptor.js.map +0 -1
  66. package/dist/interfaces/context.interface.js +0 -3
  67. package/dist/interfaces/context.interface.js.map +0 -1
  68. package/dist/interfaces/message.types.d.ts +0 -8
  69. package/dist/interfaces/message.types.js.map +0 -1
  70. package/dist/services/message.service.d.ts +0 -7
  71. package/dist/services/message.service.js +0 -25
  72. package/dist/services/message.service.js.map +0 -1
  73. package/src/interceptors/message.interceptor.ts +0 -70
  74. package/src/services/message.service.ts +0 -18
@@ -1,61 +0,0 @@
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.RequestContextInterceptor = void 0;
13
- const common_1 = require("@nestjs/common");
14
- const logger_service_1 = require("../registry/logger.service");
15
- const message_service_1 = require("../services/message.service");
16
- let RequestContextInterceptor = class RequestContextInterceptor {
17
- logger;
18
- messageService;
19
- constructor(logger, messageService) {
20
- this.logger = logger;
21
- this.messageService = messageService;
22
- }
23
- intercept(context, next) {
24
- const request = context.switchToHttp().getRequest();
25
- const response = context.switchToHttp().getResponse();
26
- let message;
27
- this.logger.log(`Request path: ${request.path}`, '[RequestContextInterceptor]');
28
- switch (request.path) {
29
- case '/sse':
30
- this.logger.log('SSE connection detected', '[RequestContextInterceptor]');
31
- message = {
32
- req: request,
33
- res: response,
34
- };
35
- this.messageService.set(message);
36
- break;
37
- case '/messages':
38
- this.logger.log('SSE message received', '[RequestContextInterceptor]');
39
- message = {
40
- req: request,
41
- res: response,
42
- };
43
- this.messageService.set(message);
44
- break;
45
- case '/mcp':
46
- this.logger.log('MCP request detected', '[RequestContextInterceptor]');
47
- break;
48
- default:
49
- this.logger.log(`Regular request: ${request.method} ${request.url}`, '[RequestContextInterceptor]');
50
- break;
51
- }
52
- return next.handle();
53
- }
54
- };
55
- exports.RequestContextInterceptor = RequestContextInterceptor;
56
- exports.RequestContextInterceptor = RequestContextInterceptor = __decorate([
57
- (0, common_1.Injectable)(),
58
- __metadata("design:paramtypes", [logger_service_1.McpLoggerService,
59
- message_service_1.MessageService])
60
- ], RequestContextInterceptor);
61
- //# sourceMappingURL=message.interceptor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"message.interceptor.js","sourceRoot":"","sources":["../../src/interceptors/message.interceptor.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAKwB;AAKxB,+DAA8D;AAC9D,iEAA6D;AAEtD,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;IAEjB;IACA;IAFnB,YACmB,MAAwB,EACxB,cAA8B;QAD9B,WAAM,GAAN,MAAM,CAAkB;QACxB,mBAAc,GAAd,cAAc,CAAgB;IAC9C,CAAC;IAEJ,SAAS,CAAC,OAAyB,EAAE,IAAiB;QACpD,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAW,CAAC;QAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,WAAW,EAAY,CAAC;QAChE,IAAI,OAA+B,CAAC;QAEpC,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,iBAAiB,OAAO,CAAC,IAAI,EAAE,EAC/B,6BAA6B,CAC9B,CAAC;QAEF,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,MAAM;gBACT,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,yBAAyB,EACzB,6BAA6B,CAC9B,CAAC;gBAEF,OAAO,GAAG;oBACR,GAAG,EAAE,OAAO;oBACZ,GAAG,EAAE,QAAQ;iBACd,CAAC;gBAEF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAEjC,MAAM;YACR,KAAK,WAAW;gBACd,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,EAAE,6BAA6B,CAAC,CAAC;gBAEvE,OAAO,GAAG;oBACR,GAAG,EAAE,OAAO;oBACZ,GAAG,EAAE,QAAQ;iBACd,CAAC;gBAEF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAEjC,MAAM;YACR,KAAK,MAAM;gBACT,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,EAAE,6BAA6B,CAAC,CAAC;gBAEvE,MAAM;YACR;gBACE,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,oBAAoB,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,EACnD,6BAA6B,CAC9B,CAAC;gBACF,MAAM;QACV,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;CACF,CAAA;AAxDY,8DAAyB;oCAAzB,yBAAyB;IADrC,IAAA,mBAAU,GAAE;qCAGgB,iCAAgB;QACR,gCAAc;GAHtC,yBAAyB,CAwDrC"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=context.interface.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.interface.js","sourceRoot":"","sources":["../../src/interfaces/context.interface.ts"],"names":[],"mappings":""}
@@ -1,8 +0,0 @@
1
- import { Request as ExpressRequest, Response as ExpressResponse } from 'express';
2
- export type Request = ExpressRequest & {
3
- auth?: any;
4
- };
5
- export type McpMessage = {
6
- req: Request;
7
- res: ExpressResponse;
8
- };
@@ -1 +0,0 @@
1
- {"version":3,"file":"message.types.js","sourceRoot":"","sources":["../../src/interfaces/message.types.ts"],"names":[],"mappings":""}
@@ -1,7 +0,0 @@
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
- }
@@ -1,25 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,70 +0,0 @@
1
- import {
2
- CallHandler,
3
- ExecutionContext,
4
- Injectable,
5
- NestInterceptor,
6
- } from '@nestjs/common';
7
- import { Request, Response } from 'express';
8
- import { Observable } from 'rxjs';
9
-
10
- import { McpMessage } from '../interfaces/message.types';
11
- import { McpLoggerService } from '../registry/logger.service';
12
- import { MessageService } from '../services/message.service';
13
- @Injectable()
14
- export class RequestContextInterceptor implements NestInterceptor {
15
- constructor(
16
- private readonly logger: McpLoggerService,
17
- private readonly messageService: MessageService,
18
- ) {}
19
-
20
- intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
21
- const request = context.switchToHttp().getRequest<Request>();
22
- const response = context.switchToHttp().getResponse<Response>();
23
- let message: McpMessage | undefined;
24
-
25
- this.logger.log(
26
- `Request path: ${request.path}`,
27
- '[RequestContextInterceptor]',
28
- );
29
-
30
- switch (request.path) {
31
- case '/sse':
32
- this.logger.log(
33
- 'SSE connection detected',
34
- '[RequestContextInterceptor]',
35
- );
36
-
37
- message = {
38
- req: request,
39
- res: response,
40
- };
41
-
42
- this.messageService.set(message);
43
-
44
- break;
45
- case '/messages':
46
- this.logger.log('SSE message received', '[RequestContextInterceptor]');
47
-
48
- message = {
49
- req: request,
50
- res: response,
51
- };
52
-
53
- this.messageService.set(message);
54
-
55
- break;
56
- case '/mcp':
57
- this.logger.log('MCP request detected', '[RequestContextInterceptor]');
58
- // TODO: Handle MCP request
59
- break;
60
- default:
61
- this.logger.log(
62
- `Regular request: ${request.method} ${request.url}`,
63
- '[RequestContextInterceptor]',
64
- );
65
- break;
66
- }
67
-
68
- return next.handle();
69
- }
70
- }
@@ -1,18 +0,0 @@
1
- import { Injectable } from '@nestjs/common';
2
-
3
- import { AsyncLocalStorage } from 'async_hooks';
4
-
5
- import { McpMessage } from '../interfaces/message.types';
6
-
7
- export const requestContext = new AsyncLocalStorage<McpMessage>();
8
-
9
- @Injectable()
10
- export class MessageService {
11
- public set(context: McpMessage): void {
12
- requestContext.enterWith(context);
13
- }
14
-
15
- public get(): McpMessage | undefined {
16
- return requestContext.getStore();
17
- }
18
- }