@rekog/mcp-nest 1.9.10 → 2.0.0-alpha.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.
- package/README.md +76 -29
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/decorators/constants.d.ts +1 -0
- package/dist/mcp/decorators/constants.d.ts.map +1 -1
- package/dist/mcp/decorators/constants.js +2 -1
- package/dist/mcp/decorators/constants.js.map +1 -1
- package/dist/mcp/decorators/index.d.ts +3 -1
- package/dist/mcp/decorators/index.d.ts.map +1 -1
- package/dist/mcp/decorators/index.js +3 -1
- package/dist/mcp/decorators/index.js.map +1 -1
- package/dist/mcp/decorators/mcp-controller.decorator.d.ts +6 -0
- package/dist/mcp/decorators/mcp-controller.decorator.d.ts.map +1 -0
- package/dist/mcp/decorators/mcp-controller.decorator.js +43 -0
- package/dist/mcp/decorators/mcp-controller.decorator.js.map +1 -0
- package/dist/mcp/decorators/mcp-message-pattern.d.ts +3 -0
- package/dist/mcp/decorators/mcp-message-pattern.d.ts.map +1 -0
- package/dist/mcp/decorators/mcp-message-pattern.js +13 -0
- package/dist/mcp/decorators/mcp-message-pattern.js.map +1 -0
- package/dist/mcp/decorators/prompt.decorator.d.ts +1 -1
- package/dist/mcp/decorators/prompt.decorator.d.ts.map +1 -1
- package/dist/mcp/decorators/prompt.decorator.js +2 -1
- package/dist/mcp/decorators/prompt.decorator.js.map +1 -1
- package/dist/mcp/decorators/public.decorator.js.map +1 -1
- package/dist/mcp/decorators/raw-request.decorator.d.ts +2 -0
- package/dist/mcp/decorators/raw-request.decorator.d.ts.map +1 -0
- package/dist/mcp/decorators/raw-request.decorator.js +6 -0
- package/dist/mcp/decorators/raw-request.decorator.js.map +1 -0
- package/dist/mcp/decorators/resource-template.decorator.d.ts +1 -1
- package/dist/mcp/decorators/resource-template.decorator.d.ts.map +1 -1
- package/dist/mcp/decorators/resource-template.decorator.js +2 -1
- package/dist/mcp/decorators/resource-template.decorator.js.map +1 -1
- package/dist/mcp/decorators/resource.decorator.d.ts +1 -1
- package/dist/mcp/decorators/resource.decorator.d.ts.map +1 -1
- package/dist/mcp/decorators/resource.decorator.js +2 -1
- package/dist/mcp/decorators/resource.decorator.js.map +1 -1
- package/dist/mcp/decorators/tool.decorator.d.ts +1 -3
- package/dist/mcp/decorators/tool.decorator.d.ts.map +1 -1
- package/dist/mcp/decorators/tool.decorator.js +2 -1
- package/dist/mcp/decorators/tool.decorator.js.map +1 -1
- package/dist/mcp/filters/mcp-exception.filter.d.ts +6 -0
- package/dist/mcp/filters/mcp-exception.filter.d.ts.map +1 -0
- package/dist/mcp/filters/mcp-exception.filter.js +26 -0
- package/dist/mcp/filters/mcp-exception.filter.js.map +1 -0
- package/dist/mcp/index.d.ts +11 -7
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +11 -7
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/interfaces/authenticated-user.interface.d.ts +9 -0
- package/dist/mcp/interfaces/authenticated-user.interface.d.ts.map +1 -0
- package/dist/{authz/interfaces/request-with-user.js → mcp/interfaces/authenticated-user.interface.js} +1 -1
- package/dist/mcp/interfaces/authenticated-user.interface.js.map +1 -0
- package/dist/mcp/interfaces/dynamic-prompt.interface.d.ts +1 -1
- package/dist/mcp/interfaces/dynamic-prompt.interface.d.ts.map +1 -1
- package/dist/mcp/interfaces/dynamic-prompt.interface.js.map +1 -1
- package/dist/mcp/interfaces/dynamic-resource.interface.d.ts +1 -1
- package/dist/mcp/interfaces/dynamic-resource.interface.d.ts.map +1 -1
- package/dist/mcp/interfaces/dynamic-resource.interface.js.map +1 -1
- package/dist/mcp/interfaces/dynamic-tool.interface.d.ts +1 -1
- package/dist/mcp/interfaces/dynamic-tool.interface.d.ts.map +1 -1
- package/dist/mcp/interfaces/dynamic-tool.interface.js.map +1 -1
- package/dist/mcp/interfaces/index.d.ts +2 -2
- package/dist/mcp/interfaces/index.d.ts.map +1 -1
- package/dist/mcp/interfaces/index.js +0 -3
- package/dist/mcp/interfaces/index.js.map +1 -1
- package/dist/mcp/services/tool-authorization.service.d.ts +7 -5
- package/dist/mcp/services/tool-authorization.service.d.ts.map +1 -1
- package/dist/mcp/services/tool-authorization.service.js +9 -6
- package/dist/mcp/services/tool-authorization.service.js.map +1 -1
- package/dist/mcp/transport/mcp-context.d.ts +34 -0
- package/dist/mcp/transport/mcp-context.d.ts.map +1 -0
- package/dist/mcp/transport/mcp-context.js +74 -0
- package/dist/mcp/transport/mcp-context.js.map +1 -0
- package/dist/mcp/transport/mcp-http-handler.d.ts +7 -0
- package/dist/mcp/transport/mcp-http-handler.d.ts.map +1 -0
- package/dist/mcp/transport/mcp-http-handler.js +5 -0
- package/dist/mcp/transport/mcp-http-handler.js.map +1 -0
- package/dist/mcp/transport/mcp-server-options.interface.d.ts +23 -0
- package/dist/mcp/transport/mcp-server-options.interface.d.ts.map +1 -0
- package/dist/{authz/providers/oauth-provider.interface.js → mcp/transport/mcp-server-options.interface.js} +1 -1
- package/dist/mcp/transport/mcp-server-options.interface.js.map +1 -0
- package/dist/mcp/transport/mcp-transport.constants.d.ts +19 -0
- package/dist/mcp/transport/mcp-transport.constants.d.ts.map +1 -0
- package/dist/mcp/transport/mcp-transport.constants.js +21 -0
- package/dist/mcp/transport/mcp-transport.constants.js.map +1 -0
- package/dist/mcp/transport/mcp-transport.interface.d.ts +17 -0
- package/dist/mcp/transport/mcp-transport.interface.d.ts.map +1 -0
- package/dist/{authz/interfaces/oauth-common.interface.js → mcp/transport/mcp-transport.interface.js} +1 -1
- package/dist/mcp/transport/mcp-transport.interface.js.map +1 -0
- package/dist/mcp/transport/mcp.strategy.d.ts +56 -0
- package/dist/mcp/transport/mcp.strategy.d.ts.map +1 -0
- package/dist/mcp/transport/mcp.strategy.js +446 -0
- package/dist/mcp/transport/mcp.strategy.js.map +1 -0
- package/dist/mcp/transport/resource-matcher.d.ts +13 -0
- package/dist/mcp/transport/resource-matcher.d.ts.map +1 -0
- package/dist/mcp/transport/resource-matcher.js +83 -0
- package/dist/mcp/transport/resource-matcher.js.map +1 -0
- package/dist/mcp/transport/streamable-http.controller.d.ts +16 -0
- package/dist/mcp/transport/streamable-http.controller.d.ts.map +1 -0
- package/dist/mcp/transport/streamable-http.controller.js +98 -0
- package/dist/mcp/transport/streamable-http.controller.js.map +1 -0
- package/dist/mcp/transport/transports/index.d.ts +3 -0
- package/dist/mcp/transport/transports/index.d.ts.map +1 -0
- package/dist/{authz → mcp/transport/transports}/index.js +2 -10
- package/dist/mcp/transport/transports/index.js.map +1 -0
- package/dist/mcp/transport/transports/read-body.d.ts +3 -0
- package/dist/mcp/transport/transports/read-body.d.ts.map +1 -0
- package/dist/mcp/transport/transports/read-body.js +32 -0
- package/dist/mcp/transport/transports/read-body.js.map +1 -0
- package/dist/mcp/transport/transports/stdio.transport.d.ts +9 -0
- package/dist/mcp/transport/transports/stdio.transport.d.ts.map +1 -0
- package/dist/mcp/transport/transports/stdio.transport.js +27 -0
- package/dist/mcp/transport/transports/stdio.transport.js.map +1 -0
- package/dist/mcp/transport/transports/streamable-http.transport.d.ts +33 -0
- package/dist/mcp/transport/transports/streamable-http.transport.d.ts.map +1 -0
- package/dist/mcp/transport/transports/streamable-http.transport.js +216 -0
- package/dist/mcp/transport/transports/streamable-http.transport.js.map +1 -0
- package/dist/mcp/utils/mcp-logger.factory.d.ts +6 -2
- package/dist/mcp/utils/mcp-logger.factory.d.ts.map +1 -1
- package/dist/mcp/utils/mcp-logger.factory.js.map +1 -1
- package/package.json +3 -66
- package/src/index.ts +0 -1
- package/src/mcp/decorators/constants.ts +1 -0
- package/src/mcp/decorators/index.ts +3 -1
- package/src/mcp/decorators/mcp-controller.decorator.ts +126 -0
- package/src/mcp/decorators/mcp-message-pattern.ts +38 -0
- package/src/mcp/decorators/prompt.decorator.ts +6 -2
- package/src/mcp/decorators/public.decorator.ts +3 -3
- package/src/mcp/decorators/raw-request.decorator.ts +32 -0
- package/src/mcp/decorators/resource-template.decorator.ts +6 -2
- package/src/mcp/decorators/resource.decorator.ts +6 -2
- package/src/mcp/decorators/tool.decorator.ts +6 -3
- package/src/mcp/filters/mcp-exception.filter.ts +47 -0
- package/src/mcp/index.ts +13 -7
- package/src/mcp/interfaces/authenticated-user.interface.ts +22 -0
- package/src/mcp/interfaces/dynamic-prompt.interface.ts +1 -1
- package/src/mcp/interfaces/dynamic-resource.interface.ts +1 -1
- package/src/mcp/interfaces/dynamic-tool.interface.ts +2 -2
- package/src/mcp/interfaces/index.ts +3 -7
- package/src/mcp/services/tool-authorization.service.ts +52 -72
- package/src/mcp/transport/mcp-context.ts +138 -0
- package/src/mcp/transport/mcp-http-handler.ts +32 -0
- package/src/mcp/transport/mcp-server-options.interface.ts +75 -0
- package/src/mcp/transport/mcp-transport.constants.ts +99 -0
- package/src/mcp/transport/mcp-transport.interface.ts +50 -0
- package/src/mcp/transport/mcp.strategy.ts +752 -0
- package/src/mcp/transport/resource-matcher.ts +107 -0
- package/src/mcp/transport/streamable-http.controller.ts +114 -0
- package/src/mcp/transport/transports/index.ts +2 -0
- package/src/mcp/transport/transports/read-body.ts +39 -0
- package/src/mcp/transport/transports/stdio.transport.ts +35 -0
- package/src/mcp/transport/transports/streamable-http.transport.ts +384 -0
- package/src/mcp/utils/mcp-logger.factory.spec.ts +8 -22
- package/src/mcp/utils/mcp-logger.factory.ts +13 -2
- package/dist/authz/guards/jwt-auth.guard.d.ts +0 -19
- package/dist/authz/guards/jwt-auth.guard.d.ts.map +0 -1
- package/dist/authz/guards/jwt-auth.guard.js +0 -108
- package/dist/authz/guards/jwt-auth.guard.js.map +0 -1
- package/dist/authz/index.d.ts +0 -11
- package/dist/authz/index.d.ts.map +0 -1
- package/dist/authz/index.js.map +0 -1
- package/dist/authz/interfaces/oauth-common.interface.d.ts +0 -21
- package/dist/authz/interfaces/oauth-common.interface.d.ts.map +0 -1
- package/dist/authz/interfaces/oauth-common.interface.js.map +0 -1
- package/dist/authz/interfaces/request-with-user.d.ts +0 -13
- package/dist/authz/interfaces/request-with-user.d.ts.map +0 -1
- package/dist/authz/interfaces/request-with-user.js.map +0 -1
- package/dist/authz/mcp-oauth.controller.d.ts +0 -81
- package/dist/authz/mcp-oauth.controller.d.ts.map +0 -1
- package/dist/authz/mcp-oauth.controller.js +0 -540
- package/dist/authz/mcp-oauth.controller.js.map +0 -1
- package/dist/authz/mcp-oauth.module.d.ts +0 -12
- package/dist/authz/mcp-oauth.module.d.ts.map +0 -1
- package/dist/authz/mcp-oauth.module.js +0 -271
- package/dist/authz/mcp-oauth.module.js.map +0 -1
- package/dist/authz/providers/azure-ad.provider.d.ts +0 -3
- package/dist/authz/providers/azure-ad.provider.d.ts.map +0 -1
- package/dist/authz/providers/azure-ad.provider.js +0 -37
- package/dist/authz/providers/azure-ad.provider.js.map +0 -1
- package/dist/authz/providers/github.provider.d.ts +0 -3
- package/dist/authz/providers/github.provider.d.ts.map +0 -1
- package/dist/authz/providers/github.provider.js +0 -24
- package/dist/authz/providers/github.provider.js.map +0 -1
- package/dist/authz/providers/google.provider.d.ts +0 -3
- package/dist/authz/providers/google.provider.d.ts.map +0 -1
- package/dist/authz/providers/google.provider.js +0 -25
- package/dist/authz/providers/google.provider.js.map +0 -1
- package/dist/authz/providers/oauth-provider.interface.d.ts +0 -107
- package/dist/authz/providers/oauth-provider.interface.d.ts.map +0 -1
- package/dist/authz/providers/oauth-provider.interface.js.map +0 -1
- package/dist/authz/services/client.service.d.ts +0 -12
- package/dist/authz/services/client.service.d.ts.map +0 -1
- package/dist/authz/services/client.service.js +0 -81
- package/dist/authz/services/client.service.js.map +0 -1
- package/dist/authz/services/jwt-token.service.d.ts +0 -37
- package/dist/authz/services/jwt-token.service.d.ts.map +0 -1
- package/dist/authz/services/jwt-token.service.js +0 -182
- package/dist/authz/services/jwt-token.service.js.map +0 -1
- package/dist/authz/services/oauth-strategy.service.d.ts +0 -13
- package/dist/authz/services/oauth-strategy.service.d.ts.map +0 -1
- package/dist/authz/services/oauth-strategy.service.js +0 -71
- package/dist/authz/services/oauth-strategy.service.js.map +0 -1
- package/dist/authz/stores/memory-store.service.d.ts +0 -27
- package/dist/authz/stores/memory-store.service.d.ts.map +0 -1
- package/dist/authz/stores/memory-store.service.js +0 -107
- package/dist/authz/stores/memory-store.service.js.map +0 -1
- package/dist/authz/stores/oauth-store.interface.d.ts +0 -61
- package/dist/authz/stores/oauth-store.interface.d.ts.map +0 -1
- package/dist/authz/stores/oauth-store.interface.js +0 -5
- package/dist/authz/stores/oauth-store.interface.js.map +0 -1
- package/dist/authz/stores/typeorm/constants.d.ts +0 -3
- package/dist/authz/stores/typeorm/constants.d.ts.map +0 -1
- package/dist/authz/stores/typeorm/constants.js +0 -6
- package/dist/authz/stores/typeorm/constants.js.map +0 -1
- package/dist/authz/stores/typeorm/entities/authorization-code.entity.d.ts +0 -15
- package/dist/authz/stores/typeorm/entities/authorization-code.entity.d.ts.map +0 -1
- package/dist/authz/stores/typeorm/entities/authorization-code.entity.js +0 -69
- package/dist/authz/stores/typeorm/entities/authorization-code.entity.js.map +0 -1
- package/dist/authz/stores/typeorm/entities/index.d.ts +0 -5
- package/dist/authz/stores/typeorm/entities/index.d.ts.map +0 -1
- package/dist/authz/stores/typeorm/entities/index.js +0 -12
- package/dist/authz/stores/typeorm/entities/index.js.map +0 -1
- package/dist/authz/stores/typeorm/entities/oauth-client.entity.d.ts +0 -17
- package/dist/authz/stores/typeorm/entities/oauth-client.entity.d.ts.map +0 -1
- package/dist/authz/stores/typeorm/entities/oauth-client.entity.js +0 -77
- package/dist/authz/stores/typeorm/entities/oauth-client.entity.js.map +0 -1
- package/dist/authz/stores/typeorm/entities/oauth-session.entity.d.ts +0 -14
- package/dist/authz/stores/typeorm/entities/oauth-session.entity.d.ts.map +0 -1
- package/dist/authz/stores/typeorm/entities/oauth-session.entity.js +0 -65
- package/dist/authz/stores/typeorm/entities/oauth-session.entity.js.map +0 -1
- package/dist/authz/stores/typeorm/entities/user-profile.entity.d.ts +0 -13
- package/dist/authz/stores/typeorm/entities/user-profile.entity.d.ts.map +0 -1
- package/dist/authz/stores/typeorm/entities/user-profile.entity.js +0 -62
- package/dist/authz/stores/typeorm/entities/user-profile.entity.js.map +0 -1
- package/dist/authz/stores/typeorm/typeorm-store.service.d.ts +0 -28
- package/dist/authz/stores/typeorm/typeorm-store.service.d.ts.map +0 -1
- package/dist/authz/stores/typeorm/typeorm-store.service.js +0 -138
- package/dist/authz/stores/typeorm/typeorm-store.service.js.map +0 -1
- package/dist/mcp/constants/feature-registration.constants.d.ts +0 -7
- package/dist/mcp/constants/feature-registration.constants.d.ts.map +0 -1
- package/dist/mcp/constants/feature-registration.constants.js +0 -5
- package/dist/mcp/constants/feature-registration.constants.js.map +0 -1
- package/dist/mcp/decorators/tool-guards.decorator.d.ts +0 -12
- package/dist/mcp/decorators/tool-guards.decorator.d.ts.map +0 -1
- package/dist/mcp/decorators/tool-guards.decorator.js +0 -13
- package/dist/mcp/decorators/tool-guards.decorator.js.map +0 -1
- package/dist/mcp/interfaces/mcp-options.interface.d.ts +0 -53
- package/dist/mcp/interfaces/mcp-options.interface.d.ts.map +0 -1
- package/dist/mcp/interfaces/mcp-options.interface.js +0 -10
- package/dist/mcp/interfaces/mcp-options.interface.js.map +0 -1
- package/dist/mcp/mcp.module.d.ts +0 -15
- package/dist/mcp/mcp.module.d.ts.map +0 -1
- package/dist/mcp/mcp.module.js +0 -248
- package/dist/mcp/mcp.module.js.map +0 -1
- package/dist/mcp/services/handlers/mcp-handler.base.d.ts +0 -117
- package/dist/mcp/services/handlers/mcp-handler.base.d.ts.map +0 -1
- package/dist/mcp/services/handlers/mcp-handler.base.js +0 -125
- package/dist/mcp/services/handlers/mcp-handler.base.js.map +0 -1
- package/dist/mcp/services/handlers/mcp-prompts.handler.d.ts +0 -12
- package/dist/mcp/services/handlers/mcp-prompts.handler.d.ts.map +0 -1
- package/dist/mcp/services/handlers/mcp-prompts.handler.js +0 -98
- package/dist/mcp/services/handlers/mcp-prompts.handler.js.map +0 -1
- package/dist/mcp/services/handlers/mcp-resources.handler.d.ts +0 -13
- package/dist/mcp/services/handlers/mcp-resources.handler.d.ts.map +0 -1
- package/dist/mcp/services/handlers/mcp-resources.handler.js +0 -117
- package/dist/mcp/services/handlers/mcp-resources.handler.js.map +0 -1
- package/dist/mcp/services/handlers/mcp-tools.handler.d.ts +0 -22
- package/dist/mcp/services/handlers/mcp-tools.handler.d.ts.map +0 -1
- package/dist/mcp/services/handlers/mcp-tools.handler.js +0 -258
- package/dist/mcp/services/handlers/mcp-tools.handler.js.map +0 -1
- package/dist/mcp/services/mcp-dynamic-registry.service.d.ts +0 -26
- package/dist/mcp/services/mcp-dynamic-registry.service.d.ts.map +0 -1
- package/dist/mcp/services/mcp-dynamic-registry.service.js +0 -133
- package/dist/mcp/services/mcp-dynamic-registry.service.js.map +0 -1
- package/dist/mcp/services/mcp-executor.service.d.ts +0 -15
- package/dist/mcp/services/mcp-executor.service.d.ts.map +0 -1
- package/dist/mcp/services/mcp-executor.service.js +0 -47
- package/dist/mcp/services/mcp-executor.service.js.map +0 -1
- package/dist/mcp/services/mcp-registry-discovery.service.d.ts +0 -63
- package/dist/mcp/services/mcp-registry-discovery.service.d.ts.map +0 -1
- package/dist/mcp/services/mcp-registry-discovery.service.js +0 -397
- package/dist/mcp/services/mcp-registry-discovery.service.js.map +0 -1
- package/dist/mcp/services/mcp-sse.service.d.ts +0 -20
- package/dist/mcp/services/mcp-sse.service.d.ts.map +0 -1
- package/dist/mcp/services/mcp-sse.service.js +0 -91
- package/dist/mcp/services/mcp-sse.service.js.map +0 -1
- package/dist/mcp/services/mcp-streamable-http.service.d.ts +0 -32
- package/dist/mcp/services/mcp-streamable-http.service.d.ts.map +0 -1
- package/dist/mcp/services/mcp-streamable-http.service.js +0 -327
- package/dist/mcp/services/mcp-streamable-http.service.js.map +0 -1
- package/dist/mcp/services/sse-ping.service.d.ts +0 -23
- package/dist/mcp/services/sse-ping.service.d.ts.map +0 -1
- package/dist/mcp/services/sse-ping.service.js +0 -99
- package/dist/mcp/services/sse-ping.service.js.map +0 -1
- package/dist/mcp/transport/sse.controller.factory.d.ts +0 -14
- package/dist/mcp/transport/sse.controller.factory.d.ts.map +0 -1
- package/dist/mcp/transport/sse.controller.factory.js +0 -67
- package/dist/mcp/transport/sse.controller.factory.js.map +0 -1
- package/dist/mcp/transport/stdio.service.d.ts +0 -14
- package/dist/mcp/transport/stdio.service.d.ts.map +0 -1
- package/dist/mcp/transport/stdio.service.js +0 -66
- package/dist/mcp/transport/stdio.service.js.map +0 -1
- package/dist/mcp/transport/streamable-http.controller.factory.d.ts +0 -14
- package/dist/mcp/transport/streamable-http.controller.factory.d.ts.map +0 -1
- package/dist/mcp/transport/streamable-http.controller.factory.js +0 -74
- package/dist/mcp/transport/streamable-http.controller.factory.js.map +0 -1
- package/dist/mcp/utils/capabilities-builder.d.ts +0 -5
- package/dist/mcp/utils/capabilities-builder.d.ts.map +0 -1
- package/dist/mcp/utils/capabilities-builder.js +0 -25
- package/dist/mcp/utils/capabilities-builder.js.map +0 -1
- package/dist/mcp/utils/mcp-server.factory.d.ts +0 -6
- package/dist/mcp/utils/mcp-server.factory.d.ts.map +0 -1
- package/dist/mcp/utils/mcp-server.factory.js +0 -22
- package/dist/mcp/utils/mcp-server.factory.js.map +0 -1
- package/src/authz/guards/jwt-auth.guard.ts +0 -127
- package/src/authz/index.ts +0 -10
- package/src/authz/interfaces/oauth-common.interface.ts +0 -21
- package/src/authz/interfaces/request-with-user.ts +0 -16
- package/src/authz/mcp-oauth.controller.ts +0 -860
- package/src/authz/mcp-oauth.module.ts +0 -384
- package/src/authz/providers/azure-ad.provider.ts +0 -40
- package/src/authz/providers/github.provider.ts +0 -22
- package/src/authz/providers/google.provider.ts +0 -23
- package/src/authz/providers/oauth-provider.interface.ts +0 -147
- package/src/authz/services/client.service.ts +0 -125
- package/src/authz/services/jwt-token.service.spec.ts +0 -67
- package/src/authz/services/jwt-token.service.ts +0 -188
- package/src/authz/services/oauth-strategy.service.ts +0 -64
- package/src/authz/stores/memory-store.service.spec.ts +0 -475
- package/src/authz/stores/memory-store.service.ts +0 -141
- package/src/authz/stores/oauth-store.interface.ts +0 -131
- package/src/authz/stores/typeorm/README.md +0 -140
- package/src/authz/stores/typeorm/constants.ts +0 -6
- package/src/authz/stores/typeorm/entities/authorization-code.entity.ts +0 -41
- package/src/authz/stores/typeorm/entities/index.ts +0 -4
- package/src/authz/stores/typeorm/entities/oauth-client.entity.ts +0 -53
- package/src/authz/stores/typeorm/entities/oauth-session.entity.ts +0 -38
- package/src/authz/stores/typeorm/entities/user-profile.entity.ts +0 -46
- package/src/authz/stores/typeorm/typeorm-store.service.spec.ts +0 -494
- package/src/authz/stores/typeorm/typeorm-store.service.ts +0 -165
- package/src/mcp/constants/feature-registration.constants.ts +0 -24
- package/src/mcp/decorators/tool-guards.decorator.ts +0 -82
- package/src/mcp/interfaces/mcp-options.interface.ts +0 -95
- package/src/mcp/mcp.module.ts +0 -349
- package/src/mcp/services/handlers/mcp-handler.base.ts +0 -203
- package/src/mcp/services/handlers/mcp-prompts.handler.ts +0 -143
- package/src/mcp/services/handlers/mcp-resources.handler.ts +0 -183
- package/src/mcp/services/handlers/mcp-tools.handler.spec.ts +0 -41
- package/src/mcp/services/handlers/mcp-tools.handler.ts +0 -436
- package/src/mcp/services/mcp-dynamic-registry.service.ts +0 -236
- package/src/mcp/services/mcp-executor.service.ts +0 -64
- package/src/mcp/services/mcp-registry-discovery.service.spec.ts +0 -306
- package/src/mcp/services/mcp-registry-discovery.service.ts +0 -849
- package/src/mcp/services/mcp-sse.service.ts +0 -124
- package/src/mcp/services/mcp-streamable-http.service.ts +0 -472
- package/src/mcp/services/sse-ping.service.ts +0 -144
- package/src/mcp/transport/custom-decorator.spec.ts +0 -75
- package/src/mcp/transport/sse.controller.factory.ts +0 -84
- package/src/mcp/transport/stdio.service.ts +0 -75
- package/src/mcp/transport/streamable-http.controller.factory.ts +0 -80
- package/src/mcp/utils/capabilities-builder.ts +0 -43
- package/src/mcp/utils/mcp-server.factory.ts +0 -33
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Injectable,
|
|
3
|
-
OnModuleInit,
|
|
4
|
-
OnModuleDestroy,
|
|
5
|
-
Logger,
|
|
6
|
-
Inject,
|
|
7
|
-
Optional,
|
|
8
|
-
} from '@nestjs/common';
|
|
9
|
-
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
|
|
10
|
-
import { HttpResponse } from '../interfaces/http-adapter.interface';
|
|
11
|
-
import type { McpOptions } from '../interfaces';
|
|
12
|
-
import { createMcpLogger } from '../utils/mcp-logger.factory';
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Service that implements automatic ping for SSE connections
|
|
16
|
-
* This prevents browser/client timeouts for long-lived connections
|
|
17
|
-
*/
|
|
18
|
-
@Injectable()
|
|
19
|
-
export class SsePingService implements OnModuleInit, OnModuleDestroy {
|
|
20
|
-
private pingInterval: NodeJS.Timeout | null = null;
|
|
21
|
-
private readonly logger: Logger;
|
|
22
|
-
private readonly activeConnections = new Map<
|
|
23
|
-
string,
|
|
24
|
-
{
|
|
25
|
-
transport: SSEServerTransport;
|
|
26
|
-
res: HttpResponse;
|
|
27
|
-
}
|
|
28
|
-
>();
|
|
29
|
-
|
|
30
|
-
// Default to 30 seconds - this is a reasonable interval for most clients
|
|
31
|
-
private pingIntervalMs = 30000;
|
|
32
|
-
|
|
33
|
-
constructor(@Optional() @Inject('MCP_OPTIONS') options?: McpOptions) {
|
|
34
|
-
this.logger = createMcpLogger(SsePingService.name, options);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
onModuleInit() {
|
|
38
|
-
this.logger.log('Initializing SSE ping service');
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
onModuleDestroy() {
|
|
42
|
-
this.stopPingInterval();
|
|
43
|
-
this.logger.log('SSE ping service stopped');
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Configure the ping service
|
|
48
|
-
*/
|
|
49
|
-
configure(options: { pingEnabled?: boolean; pingIntervalMs?: number }) {
|
|
50
|
-
if (options.pingIntervalMs !== undefined) {
|
|
51
|
-
this.pingIntervalMs = options.pingIntervalMs;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
if (options.pingEnabled !== false) {
|
|
55
|
-
this.startPingInterval();
|
|
56
|
-
} else {
|
|
57
|
-
this.stopPingInterval();
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Register a new SSE connection to receive pings
|
|
63
|
-
*/
|
|
64
|
-
registerConnection(
|
|
65
|
-
sessionId: string,
|
|
66
|
-
transport: SSEServerTransport,
|
|
67
|
-
res: HttpResponse,
|
|
68
|
-
) {
|
|
69
|
-
this.activeConnections.set(sessionId, { transport, res });
|
|
70
|
-
this.logger.debug(`SSE connection registered: ${sessionId}`);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Remove an SSE connection
|
|
75
|
-
*/
|
|
76
|
-
removeConnection(sessionId: string) {
|
|
77
|
-
this.activeConnections.delete(sessionId);
|
|
78
|
-
this.logger.debug(`SSE connection removed: ${sessionId}`);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Start the ping interval timer
|
|
83
|
-
*/
|
|
84
|
-
private startPingInterval() {
|
|
85
|
-
if (this.pingInterval) {
|
|
86
|
-
this.stopPingInterval();
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
this.logger.log(
|
|
90
|
-
`Starting SSE ping service (interval: ${this.pingIntervalMs}ms)`,
|
|
91
|
-
);
|
|
92
|
-
this.pingInterval = setInterval(() => {
|
|
93
|
-
this.sendPingToAllConnections();
|
|
94
|
-
}, this.pingIntervalMs);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Stop the ping interval timer
|
|
99
|
-
*/
|
|
100
|
-
private stopPingInterval() {
|
|
101
|
-
if (this.pingInterval) {
|
|
102
|
-
clearInterval(this.pingInterval);
|
|
103
|
-
this.pingInterval = null;
|
|
104
|
-
this.logger.log('SSE ping interval stopped');
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Send a ping to all active connections
|
|
110
|
-
*/
|
|
111
|
-
private sendPingToAllConnections() {
|
|
112
|
-
const timestamp = Date.now();
|
|
113
|
-
const connectionCount = this.activeConnections.size;
|
|
114
|
-
|
|
115
|
-
if (connectionCount === 0) {
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
this.logger.debug(`Sending SSE ping to ${connectionCount} connections`);
|
|
120
|
-
|
|
121
|
-
for (const [sessionId, { res }] of this.activeConnections.entries()) {
|
|
122
|
-
try {
|
|
123
|
-
// Send a comment-type SSE message (line starting with ':')
|
|
124
|
-
// This keeps the connection alive without triggering an event in the client
|
|
125
|
-
if (!res.closed && res.writable) {
|
|
126
|
-
res.write(`: ping - ${new Date(timestamp).toISOString()}\n\n`);
|
|
127
|
-
} else {
|
|
128
|
-
this.logger.debug(
|
|
129
|
-
`Connection ${sessionId} is no longer writable, removing`,
|
|
130
|
-
);
|
|
131
|
-
// TODO: After non writable connections are discovered it'd be useful to cleanup transports/mcp servers
|
|
132
|
-
// for that connection in sse.controller.factory.ts
|
|
133
|
-
this.removeConnection(sessionId);
|
|
134
|
-
}
|
|
135
|
-
} catch (error) {
|
|
136
|
-
this.logger.error(
|
|
137
|
-
`Error sending ping to connection ${sessionId}`,
|
|
138
|
-
error,
|
|
139
|
-
);
|
|
140
|
-
this.removeConnection(sessionId);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { SetMetadata } from '@nestjs/common';
|
|
2
|
-
import { createSseController } from './sse.controller.factory';
|
|
3
|
-
import { createStreamableHttpController } from './streamable-http.controller.factory';
|
|
4
|
-
|
|
5
|
-
describe('Custom Decorators', () => {
|
|
6
|
-
// Custom decorator for testing
|
|
7
|
-
const testCustomDecorator = SetMetadata('test:decorator', true);
|
|
8
|
-
|
|
9
|
-
describe('SSE Controller Factory', () => {
|
|
10
|
-
it('should apply custom decorators to the SSE controller', () => {
|
|
11
|
-
// Arrange
|
|
12
|
-
const decorators = [testCustomDecorator];
|
|
13
|
-
|
|
14
|
-
// Act
|
|
15
|
-
const sseController = createSseController(
|
|
16
|
-
'test-sse-endpoint',
|
|
17
|
-
'test-messages-endpoint',
|
|
18
|
-
'/api',
|
|
19
|
-
[],
|
|
20
|
-
decorators,
|
|
21
|
-
);
|
|
22
|
-
|
|
23
|
-
// Assert
|
|
24
|
-
expect(sseController).toBeDefined();
|
|
25
|
-
expect(Reflect.getMetadata('test:decorator', sseController)).toBeTruthy();
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
it('should work without custom decorators', () => {
|
|
29
|
-
// Act
|
|
30
|
-
const sseController = createSseController(
|
|
31
|
-
'test-sse-endpoint',
|
|
32
|
-
'test-messages-endpoint',
|
|
33
|
-
'/api',
|
|
34
|
-
);
|
|
35
|
-
|
|
36
|
-
// Assert
|
|
37
|
-
expect(sseController).toBeDefined();
|
|
38
|
-
expect(
|
|
39
|
-
Reflect.getMetadata('test:decorator', sseController),
|
|
40
|
-
).toBeUndefined();
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
describe('Streamable HTTP Controller Factory', () => {
|
|
45
|
-
it('should apply custom decorators to the Streamable HTTP controller', () => {
|
|
46
|
-
// Arrange
|
|
47
|
-
const decorators = [testCustomDecorator];
|
|
48
|
-
|
|
49
|
-
// Act
|
|
50
|
-
const streamableController = createStreamableHttpController(
|
|
51
|
-
'test-http-endpoint',
|
|
52
|
-
'/api',
|
|
53
|
-
[],
|
|
54
|
-
decorators,
|
|
55
|
-
);
|
|
56
|
-
|
|
57
|
-
// Assert
|
|
58
|
-
expect(streamableController).toBeDefined();
|
|
59
|
-
expect(
|
|
60
|
-
Reflect.getMetadata('test:decorator', streamableController),
|
|
61
|
-
).toBeTruthy();
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
it('should work without custom decorators', () => {
|
|
65
|
-
// Act
|
|
66
|
-
const StreamableController = createStreamableHttpController(
|
|
67
|
-
'test-http-endpoint',
|
|
68
|
-
'/api',
|
|
69
|
-
);
|
|
70
|
-
|
|
71
|
-
// Assert
|
|
72
|
-
expect(StreamableController).toBeDefined();
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
});
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Body,
|
|
3
|
-
CanActivate,
|
|
4
|
-
Controller,
|
|
5
|
-
Get,
|
|
6
|
-
Inject,
|
|
7
|
-
Logger,
|
|
8
|
-
OnModuleInit,
|
|
9
|
-
Post,
|
|
10
|
-
Req,
|
|
11
|
-
Res,
|
|
12
|
-
Type,
|
|
13
|
-
UseGuards,
|
|
14
|
-
VERSION_NEUTRAL,
|
|
15
|
-
applyDecorators,
|
|
16
|
-
} from '@nestjs/common';
|
|
17
|
-
|
|
18
|
-
import type { McpOptions } from '../interfaces';
|
|
19
|
-
import { McpSseService } from '../services/mcp-sse.service';
|
|
20
|
-
import { normalizeEndpoint } from '../utils/normalize-endpoint';
|
|
21
|
-
import { createMcpLogger } from '../utils/mcp-logger.factory';
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Creates a controller for handling SSE connections and tool executions
|
|
25
|
-
*/
|
|
26
|
-
export function createSseController(
|
|
27
|
-
sseEndpoint: string,
|
|
28
|
-
messagesEndpoint: string,
|
|
29
|
-
apiPrefix: string,
|
|
30
|
-
guards: Type<CanActivate>[] = [],
|
|
31
|
-
decorators: ClassDecorator[] = [],
|
|
32
|
-
options?: McpOptions,
|
|
33
|
-
) {
|
|
34
|
-
@Controller({
|
|
35
|
-
version: VERSION_NEUTRAL,
|
|
36
|
-
})
|
|
37
|
-
@applyDecorators(...decorators)
|
|
38
|
-
class SseController implements OnModuleInit {
|
|
39
|
-
readonly logger: Logger;
|
|
40
|
-
|
|
41
|
-
constructor(
|
|
42
|
-
@Inject('MCP_OPTIONS') public readonly mcpOptions: McpOptions,
|
|
43
|
-
public readonly mcpSseService: McpSseService,
|
|
44
|
-
) {
|
|
45
|
-
this.logger = createMcpLogger(SseController.name, options || mcpOptions);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Initialize the controller and configure SSE service
|
|
50
|
-
*/
|
|
51
|
-
onModuleInit() {
|
|
52
|
-
this.mcpSseService.initialize();
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* SSE connection endpoint
|
|
57
|
-
*/
|
|
58
|
-
@Get(normalizeEndpoint(`${apiPrefix}/${sseEndpoint}`))
|
|
59
|
-
@UseGuards(...guards)
|
|
60
|
-
async sse(@Req() rawReq: any, @Res() rawRes: any) {
|
|
61
|
-
return this.mcpSseService.createSseConnection(
|
|
62
|
-
rawReq,
|
|
63
|
-
rawRes,
|
|
64
|
-
messagesEndpoint,
|
|
65
|
-
apiPrefix,
|
|
66
|
-
);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Tool execution endpoint - protected by the provided guards
|
|
71
|
-
*/
|
|
72
|
-
@Post(normalizeEndpoint(`${apiPrefix}/${messagesEndpoint}`))
|
|
73
|
-
@UseGuards(...guards)
|
|
74
|
-
async messages(
|
|
75
|
-
@Req() rawReq: any,
|
|
76
|
-
@Res() rawRes: any,
|
|
77
|
-
@Body() body: unknown,
|
|
78
|
-
): Promise<void> {
|
|
79
|
-
await this.mcpSseService.handleMessage(rawReq, rawRes, body);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
return SseController;
|
|
84
|
-
}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
2
|
-
import {
|
|
3
|
-
Inject,
|
|
4
|
-
Injectable,
|
|
5
|
-
Logger,
|
|
6
|
-
OnApplicationBootstrap,
|
|
7
|
-
} from '@nestjs/common';
|
|
8
|
-
import { ContextIdFactory, ModuleRef } from '@nestjs/core';
|
|
9
|
-
import { McpTransportType } from '../interfaces';
|
|
10
|
-
import type { McpOptions } from '../interfaces';
|
|
11
|
-
import { McpExecutorService } from '../services/mcp-executor.service';
|
|
12
|
-
import { McpRegistryDiscoveryService } from '../services/mcp-registry-discovery.service';
|
|
13
|
-
import { createMcpLogger } from '../utils/mcp-logger.factory';
|
|
14
|
-
import { createMcpServer } from '../utils/mcp-server.factory';
|
|
15
|
-
|
|
16
|
-
@Injectable()
|
|
17
|
-
export class StdioService implements OnApplicationBootstrap {
|
|
18
|
-
private readonly logger: Logger;
|
|
19
|
-
|
|
20
|
-
constructor(
|
|
21
|
-
@Inject('MCP_OPTIONS') private readonly options: McpOptions,
|
|
22
|
-
@Inject('MCP_MODULE_ID') private readonly mcpModuleId: string,
|
|
23
|
-
private readonly moduleRef: ModuleRef,
|
|
24
|
-
private readonly toolRegistry: McpRegistryDiscoveryService,
|
|
25
|
-
) {
|
|
26
|
-
this.logger = createMcpLogger(StdioService.name, this.options);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
async onApplicationBootstrap() {
|
|
30
|
-
const transports = Array.isArray(this.options.transport)
|
|
31
|
-
? this.options.transport
|
|
32
|
-
: [this.options.transport];
|
|
33
|
-
if (!transports.includes(McpTransportType.STDIO)) return;
|
|
34
|
-
|
|
35
|
-
this.logger.log('Bootstrapping MCP STDIO...');
|
|
36
|
-
|
|
37
|
-
// Warn about tools with @ToolGuards() - they require HTTP context
|
|
38
|
-
const toolsWithGuards = this.toolRegistry
|
|
39
|
-
.getTools(this.mcpModuleId)
|
|
40
|
-
.filter(
|
|
41
|
-
(tool) => tool.metadata.guards && tool.metadata.guards.length > 0,
|
|
42
|
-
);
|
|
43
|
-
|
|
44
|
-
if (toolsWithGuards.length > 0) {
|
|
45
|
-
const toolNames = toolsWithGuards.map((t) => t.metadata.name).join(', ');
|
|
46
|
-
this.logger.warn(
|
|
47
|
-
`@ToolGuards() are not supported with STDIO transport. ` +
|
|
48
|
-
`The following tools have guards configured and will be hidden: ${toolNames}. ` +
|
|
49
|
-
`Consider using HTTP transport.`,
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
const mcpServer = createMcpServer(
|
|
54
|
-
this.mcpModuleId,
|
|
55
|
-
this.toolRegistry,
|
|
56
|
-
this.options,
|
|
57
|
-
this.logger,
|
|
58
|
-
);
|
|
59
|
-
|
|
60
|
-
const contextId = ContextIdFactory.create();
|
|
61
|
-
const executor = await this.moduleRef.resolve(
|
|
62
|
-
McpExecutorService,
|
|
63
|
-
contextId,
|
|
64
|
-
{ strict: false },
|
|
65
|
-
);
|
|
66
|
-
|
|
67
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
68
|
-
executor.registerRequestHandlers(mcpServer, {} as any);
|
|
69
|
-
|
|
70
|
-
const transport = new StdioServerTransport();
|
|
71
|
-
await mcpServer.connect(transport);
|
|
72
|
-
|
|
73
|
-
this.logger.log('MCP STDIO ready');
|
|
74
|
-
}
|
|
75
|
-
}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Body,
|
|
3
|
-
CanActivate,
|
|
4
|
-
Controller,
|
|
5
|
-
Delete,
|
|
6
|
-
Get,
|
|
7
|
-
Inject,
|
|
8
|
-
Logger,
|
|
9
|
-
Post,
|
|
10
|
-
Req,
|
|
11
|
-
Res,
|
|
12
|
-
Type,
|
|
13
|
-
UseGuards,
|
|
14
|
-
applyDecorators,
|
|
15
|
-
} from '@nestjs/common';
|
|
16
|
-
|
|
17
|
-
import type { McpOptions } from '../interfaces';
|
|
18
|
-
import { McpStreamableHttpService } from '../services/mcp-streamable-http.service';
|
|
19
|
-
import { normalizeEndpoint } from '../utils/normalize-endpoint';
|
|
20
|
-
import { createMcpLogger } from '../utils/mcp-logger.factory';
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Creates a controller for handling Streamable HTTP connections and tool executions
|
|
24
|
-
*/
|
|
25
|
-
export function createStreamableHttpController(
|
|
26
|
-
endpoint: string,
|
|
27
|
-
apiPrefix: string,
|
|
28
|
-
guards: Type<CanActivate>[] = [],
|
|
29
|
-
decorators: ClassDecorator[] = [],
|
|
30
|
-
options?: McpOptions,
|
|
31
|
-
) {
|
|
32
|
-
@Controller()
|
|
33
|
-
@applyDecorators(...decorators)
|
|
34
|
-
class StreamableHttpController {
|
|
35
|
-
public readonly logger: Logger;
|
|
36
|
-
|
|
37
|
-
constructor(
|
|
38
|
-
@Inject('MCP_OPTIONS') public readonly mcpOptions: McpOptions,
|
|
39
|
-
public readonly mcpStreamableHttpService: McpStreamableHttpService,
|
|
40
|
-
) {
|
|
41
|
-
this.logger = createMcpLogger(
|
|
42
|
-
StreamableHttpController.name,
|
|
43
|
-
options || mcpOptions,
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Main HTTP endpoint for both initialization and subsequent requests
|
|
49
|
-
*/
|
|
50
|
-
@Post(`${normalizeEndpoint(`${apiPrefix}/${endpoint}`)}`)
|
|
51
|
-
@UseGuards(...guards)
|
|
52
|
-
async handlePostRequest(
|
|
53
|
-
@Req() req: any,
|
|
54
|
-
@Res() res: any,
|
|
55
|
-
@Body() body: unknown,
|
|
56
|
-
): Promise<void> {
|
|
57
|
-
await this.mcpStreamableHttpService.handlePostRequest(req, res, body);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* GET endpoint for SSE streams - not supported in stateless mode
|
|
62
|
-
*/
|
|
63
|
-
@Get(`${normalizeEndpoint(`${apiPrefix}/${endpoint}`)}`)
|
|
64
|
-
@UseGuards(...guards)
|
|
65
|
-
async handleGetRequest(@Req() req: any, @Res() res: any): Promise<void> {
|
|
66
|
-
await this.mcpStreamableHttpService.handleGetRequest(req, res);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* DELETE endpoint for terminating sessions - not supported in stateless mode
|
|
71
|
-
*/
|
|
72
|
-
@Delete(`${normalizeEndpoint(`${apiPrefix}/${endpoint}`)}`)
|
|
73
|
-
@UseGuards(...guards)
|
|
74
|
-
async handleDeleteRequest(@Req() req: any, @Res() res: any): Promise<void> {
|
|
75
|
-
await this.mcpStreamableHttpService.handleDeleteRequest(req, res);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
return StreamableHttpController;
|
|
80
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { ServerCapabilities } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
-
import { McpRegistryDiscoveryService } from '../services/mcp-registry-discovery.service';
|
|
3
|
-
import type { McpOptions } from '../interfaces';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Utility function to build MCP server capabilities dynamically based on
|
|
7
|
-
* discovered tools, resources, and prompts
|
|
8
|
-
*/
|
|
9
|
-
export function buildMcpCapabilities(
|
|
10
|
-
mcpModuleId: string,
|
|
11
|
-
registry: McpRegistryDiscoveryService,
|
|
12
|
-
options: McpOptions,
|
|
13
|
-
): ServerCapabilities {
|
|
14
|
-
// Start with user-provided capabilities or empty object
|
|
15
|
-
const baseCapabilities = options.capabilities || {};
|
|
16
|
-
|
|
17
|
-
const capabilities: ServerCapabilities = { ...baseCapabilities };
|
|
18
|
-
|
|
19
|
-
// Add tools capability if tools are discovered
|
|
20
|
-
if (registry.getTools(mcpModuleId).length > 0) {
|
|
21
|
-
capabilities.tools = capabilities.tools || {
|
|
22
|
-
listChanged: true,
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
if (
|
|
27
|
-
registry.getResources(mcpModuleId).length > 0 ||
|
|
28
|
-
registry.getResourceTemplates(mcpModuleId).length > 0
|
|
29
|
-
) {
|
|
30
|
-
capabilities.resources = capabilities.resources || {
|
|
31
|
-
listChanged: true,
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// Add prompts capability if prompts are discovered
|
|
36
|
-
if (registry.getPrompts(mcpModuleId).length > 0) {
|
|
37
|
-
capabilities.prompts = capabilities.prompts || {
|
|
38
|
-
listChanged: true,
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
return capabilities;
|
|
43
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { McpOptions } from '../interfaces';
|
|
2
|
-
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
|
-
import { buildMcpCapabilities } from './capabilities-builder';
|
|
4
|
-
import { McpRegistryDiscoveryService } from '../services/mcp-registry-discovery.service';
|
|
5
|
-
import { Logger } from '@nestjs/common';
|
|
6
|
-
|
|
7
|
-
export function createMcpServer(
|
|
8
|
-
mcpModuleId: string,
|
|
9
|
-
registry: McpRegistryDiscoveryService,
|
|
10
|
-
options: McpOptions,
|
|
11
|
-
logger: Logger,
|
|
12
|
-
): McpServer {
|
|
13
|
-
const capabilities = buildMcpCapabilities(mcpModuleId, registry, options);
|
|
14
|
-
|
|
15
|
-
logger.debug(`Built MCP capabilities: ${JSON.stringify(capabilities)}`);
|
|
16
|
-
|
|
17
|
-
const mcpServer = new McpServer(
|
|
18
|
-
{
|
|
19
|
-
name: options.name,
|
|
20
|
-
version: options.version,
|
|
21
|
-
...(options.title && { title: options.title }),
|
|
22
|
-
...(options.description && { description: options.description }),
|
|
23
|
-
...(options.websiteUrl && { websiteUrl: options.websiteUrl }),
|
|
24
|
-
...(options.icons && { icons: options.icons }),
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
capabilities,
|
|
28
|
-
instructions: options.instructions || '',
|
|
29
|
-
},
|
|
30
|
-
);
|
|
31
|
-
|
|
32
|
-
return options.serverMutator ? options.serverMutator(mcpServer) : mcpServer;
|
|
33
|
-
}
|