@rekog/mcp-nest 1.9.10 → 2.0.0-alpha.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.
- 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 +4 -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 +32 -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,82 +0,0 @@
|
|
|
1
|
-
import { CanActivate, SetMetadata, Type } from '@nestjs/common';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Metadata key for storing tool-level NestJS guards
|
|
5
|
-
*/
|
|
6
|
-
export const MCP_GUARDS_METADATA_KEY = 'mcp:guards';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* The execution context available to guards used with @ToolGuards().
|
|
10
|
-
*
|
|
11
|
-
* MCP tools don't run inside NestJS's request pipeline (all tools share a single
|
|
12
|
-
* HTTP endpoint), so the full ExecutionContext is not available. This type
|
|
13
|
-
* describes exactly what IS available.
|
|
14
|
-
*
|
|
15
|
-
* Available:
|
|
16
|
-
* - `switchToHttp().getRequest()` - the HTTP request object, enriched with:
|
|
17
|
-
* - `body` - during `tools/call`, contains the validated tool arguments;
|
|
18
|
-
* during `tools/list`, contains the raw HTTP request body (if any)
|
|
19
|
-
* - `params` - parsed route params from the HTTP adapter
|
|
20
|
-
* - `user` - if set by a transport-level auth guard
|
|
21
|
-
* - `headers` - original request headers
|
|
22
|
-
* - `getClass()` - the tool's provider class (works with Reflector)
|
|
23
|
-
* - `getHandler()` - the tool's method reference (works with Reflector)
|
|
24
|
-
* - `getType()` - always returns `'http'`
|
|
25
|
-
*
|
|
26
|
-
* Not available (will throw if called):
|
|
27
|
-
* - `switchToHttp().getResponse()` - MCP handles responses via protocol layer
|
|
28
|
-
* - `switchToHttp().getNext()` - no middleware chain
|
|
29
|
-
* - `switchToRpc()` / `switchToWs()` - not an RPC/WS context
|
|
30
|
-
* - `getArgs()` / `getArgByIndex()` - no NestJS argument array
|
|
31
|
-
*/
|
|
32
|
-
export interface ToolGuardExecutionContext {
|
|
33
|
-
switchToHttp(): {
|
|
34
|
-
getRequest<T = unknown>(): T;
|
|
35
|
-
};
|
|
36
|
-
getClass<T = unknown>(): Type<T>;
|
|
37
|
-
getHandler(): Function;
|
|
38
|
-
getType<TContext extends string = string>(): TContext;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Decorator to specify NestJS guards that control access to a tool.
|
|
43
|
-
*
|
|
44
|
-
* When applied, each guard's `canActivate()` is evaluated before listing or executing the tool.
|
|
45
|
-
* If any guard rejects, the tool is hidden from `tools/list` and blocked from execution.
|
|
46
|
-
* ALL guards must pass (AND logic).
|
|
47
|
-
*
|
|
48
|
-
* Guards receive an execution context with the fields described by {@link ToolGuardExecutionContext}.
|
|
49
|
-
* Standard NestJS guards that only use `switchToHttp().getRequest()` will work. Guards that
|
|
50
|
-
* access the response object, RPC context, or WebSocket context will throw at runtime.
|
|
51
|
-
*
|
|
52
|
-
* Note: Guards require an HTTP context and are not supported with STDIO transport.
|
|
53
|
-
* Tools with guards will be hidden when using STDIO.
|
|
54
|
-
*
|
|
55
|
-
* @param guards - Array of NestJS guard classes implementing CanActivate
|
|
56
|
-
*
|
|
57
|
-
* @example
|
|
58
|
-
* ```typescript
|
|
59
|
-
* @Injectable()
|
|
60
|
-
* export class MyTools {
|
|
61
|
-
* @Tool({ name: 'admin-action', description: 'Admin only' })
|
|
62
|
-
* @ToolGuards([AdminGuard])
|
|
63
|
-
* async adminAction() {
|
|
64
|
-
* return { content: [{ type: 'text', text: 'Done' }] };
|
|
65
|
-
* }
|
|
66
|
-
*
|
|
67
|
-
* @Tool({ name: 'secure-action', description: 'Requires both guards' })
|
|
68
|
-
* @ToolGuards([AuthGuard, RoleGuard])
|
|
69
|
-
* async secureAction() {
|
|
70
|
-
* return { content: [{ type: 'text', text: 'Done' }] };
|
|
71
|
-
* }
|
|
72
|
-
* }
|
|
73
|
-
* ```
|
|
74
|
-
*/
|
|
75
|
-
export const ToolGuards = (guards: Type<CanActivate>[]) => {
|
|
76
|
-
if (!Array.isArray(guards) || guards.length === 0) {
|
|
77
|
-
throw new Error(
|
|
78
|
-
'@ToolGuards() requires a non-empty array of guard classes',
|
|
79
|
-
);
|
|
80
|
-
}
|
|
81
|
-
return SetMetadata(MCP_GUARDS_METADATA_KEY, guards);
|
|
82
|
-
};
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import { Icon, ServerCapabilities } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
-
import { CanActivate, ModuleMetadata, Type } from '@nestjs/common';
|
|
3
|
-
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
4
|
-
|
|
5
|
-
export type { Icon };
|
|
6
|
-
|
|
7
|
-
export enum McpTransportType {
|
|
8
|
-
SSE = 'sse',
|
|
9
|
-
STREAMABLE_HTTP = 'streamable-http',
|
|
10
|
-
STDIO = 'stdio',
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export interface McpOptions {
|
|
14
|
-
// When and if, additional properties are introduced in ServerOptions or ServerInfo,
|
|
15
|
-
// consider deprecating these fields in favor of using ServerOptions and ServerInfo directly.
|
|
16
|
-
name: string;
|
|
17
|
-
/** Human-readable display name for the server (passed to MCP Implementation). */
|
|
18
|
-
title?: string;
|
|
19
|
-
version: string;
|
|
20
|
-
/** Short description of what this MCP server does. */
|
|
21
|
-
description?: string;
|
|
22
|
-
/** URL of the website associated with this server. */
|
|
23
|
-
websiteUrl?: string;
|
|
24
|
-
/** Icons representing this server. Use `Icon` exported from `@rekog/mcp-nest`. */
|
|
25
|
-
icons?: Icon[];
|
|
26
|
-
capabilities?: ServerCapabilities;
|
|
27
|
-
instructions?: string;
|
|
28
|
-
|
|
29
|
-
transport?: McpTransportType | McpTransportType[];
|
|
30
|
-
serverMutator?: (server: McpServer) => McpServer;
|
|
31
|
-
sseEndpoint?: string;
|
|
32
|
-
messagesEndpoint?: string;
|
|
33
|
-
mcpEndpoint?: string;
|
|
34
|
-
/**
|
|
35
|
-
* @deprecated Use `app.setGlobalPrefix()` for global api prefix. Use apiPrefix to attach a prefix to the handshake.
|
|
36
|
-
*/
|
|
37
|
-
globalApiPrefix?: never;
|
|
38
|
-
apiPrefix?: string;
|
|
39
|
-
guards?: Type<CanActivate>[];
|
|
40
|
-
/**
|
|
41
|
-
* Allow unauthenticated sessions to connect and access @PublicTool() tools.
|
|
42
|
-
*
|
|
43
|
-
* When true (freemium mode):
|
|
44
|
-
* - Unauthenticated requests are allowed through guards
|
|
45
|
-
* - Can access tools marked with @PublicTool()
|
|
46
|
-
* - Must authenticate to access protected tools (based on scopes/roles)
|
|
47
|
-
*
|
|
48
|
-
* When false or undefined (standard OAuth flow - default):
|
|
49
|
-
* - Unauthenticated requests receive 401 response
|
|
50
|
-
* - Triggers MCP OAuth authorization flow
|
|
51
|
-
* - All tools require authentication
|
|
52
|
-
*
|
|
53
|
-
* @default false
|
|
54
|
-
*/
|
|
55
|
-
allowUnauthenticatedAccess?: boolean;
|
|
56
|
-
decorators?: ClassDecorator[];
|
|
57
|
-
sse?: {
|
|
58
|
-
pingEnabled?: boolean;
|
|
59
|
-
pingIntervalMs?: number;
|
|
60
|
-
};
|
|
61
|
-
streamableHttp?: {
|
|
62
|
-
enableJsonResponse?: boolean;
|
|
63
|
-
sessionIdGenerator?: () => string;
|
|
64
|
-
/**
|
|
65
|
-
* @experimental: The current implementation does not fully comply with the MCP Specification.
|
|
66
|
-
*/
|
|
67
|
-
statelessMode?: boolean;
|
|
68
|
-
};
|
|
69
|
-
/**
|
|
70
|
-
* Configure logging for the MCP module.
|
|
71
|
-
* - `false` to disable all MCP logging
|
|
72
|
-
* - `{ level: LogLevel[] }` to specify which log levels to show
|
|
73
|
-
* - `undefined` (default) to use standard NestJS logging
|
|
74
|
-
*/
|
|
75
|
-
logging?:
|
|
76
|
-
| false
|
|
77
|
-
| {
|
|
78
|
-
level: ('log' | 'error' | 'warn' | 'debug' | 'verbose')[];
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// Async variant omits transport since controllers are not auto-registered in forRootAsync
|
|
83
|
-
export type McpAsyncOptions = Omit<McpOptions, 'transport'>;
|
|
84
|
-
|
|
85
|
-
export interface McpOptionsFactory {
|
|
86
|
-
createMcpOptions(): Promise<McpAsyncOptions> | McpAsyncOptions;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
export interface McpModuleAsyncOptions extends Pick<ModuleMetadata, 'imports'> {
|
|
90
|
-
useExisting?: Type<McpOptionsFactory>;
|
|
91
|
-
useClass?: Type<McpOptionsFactory>;
|
|
92
|
-
useFactory?: (...args: any[]) => Promise<McpAsyncOptions> | McpAsyncOptions;
|
|
93
|
-
inject?: any[];
|
|
94
|
-
extraProviders?: any[]; // allow user to provide additional providers in async mode
|
|
95
|
-
}
|
package/src/mcp/mcp.module.ts
DELETED
|
@@ -1,349 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
DynamicModule,
|
|
3
|
-
InjectionToken,
|
|
4
|
-
Module,
|
|
5
|
-
Provider,
|
|
6
|
-
Type,
|
|
7
|
-
} from '@nestjs/common';
|
|
8
|
-
import { DiscoveryModule } from '@nestjs/core';
|
|
9
|
-
import { McpTransportType } from './interfaces';
|
|
10
|
-
import type {
|
|
11
|
-
McpOptions,
|
|
12
|
-
McpModuleAsyncOptions,
|
|
13
|
-
McpOptionsFactory,
|
|
14
|
-
McpAsyncOptions,
|
|
15
|
-
} from './interfaces';
|
|
16
|
-
import { McpExecutorService } from './services/mcp-executor.service';
|
|
17
|
-
import { McpRegistryDiscoveryService } from './services/mcp-registry-discovery.service';
|
|
18
|
-
import { McpSseService } from './services/mcp-sse.service';
|
|
19
|
-
import { McpStreamableHttpService } from './services/mcp-streamable-http.service';
|
|
20
|
-
import { SsePingService } from './services/sse-ping.service';
|
|
21
|
-
import { ToolAuthorizationService } from './services/tool-authorization.service';
|
|
22
|
-
import { McpRegistryService } from './services/mcp-dynamic-registry.service';
|
|
23
|
-
import { createSseController } from './transport/sse.controller.factory';
|
|
24
|
-
import { StdioService } from './transport/stdio.service';
|
|
25
|
-
import { createStreamableHttpController } from './transport/streamable-http.controller.factory';
|
|
26
|
-
import { normalizeEndpoint } from './utils/normalize-endpoint';
|
|
27
|
-
import {
|
|
28
|
-
MCP_FEATURE_REGISTRATION,
|
|
29
|
-
McpFeatureRegistration,
|
|
30
|
-
} from './constants/feature-registration.constants';
|
|
31
|
-
|
|
32
|
-
let instanceIdCounter = 0;
|
|
33
|
-
let featureIdCounter = 0;
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Lightweight module class used by McpModule.forFeature().
|
|
37
|
-
* This is separate from McpModule to avoid circular dependency issues.
|
|
38
|
-
*/
|
|
39
|
-
@Module({})
|
|
40
|
-
export class McpFeatureModule {}
|
|
41
|
-
|
|
42
|
-
@Module({
|
|
43
|
-
imports: [DiscoveryModule],
|
|
44
|
-
providers: [
|
|
45
|
-
McpRegistryDiscoveryService,
|
|
46
|
-
McpExecutorService,
|
|
47
|
-
ToolAuthorizationService,
|
|
48
|
-
],
|
|
49
|
-
})
|
|
50
|
-
export class McpModule {
|
|
51
|
-
/**
|
|
52
|
-
* To avoid import circular dependency issues, we use a marker property.
|
|
53
|
-
*/
|
|
54
|
-
readonly __isMcpModule = true;
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Registers tool providers to be associated with a specific MCP server.
|
|
58
|
-
*
|
|
59
|
-
* Use this method to organize tools into separate feature modules while
|
|
60
|
-
* associating them with a specific MCP server created by forRoot().
|
|
61
|
-
*
|
|
62
|
-
* @param providers - Array of provider classes that contain @Tool, @Resource, @ResourceTemplate, or @Prompt decorated methods
|
|
63
|
-
* @param serverName - The name of the MCP server (as specified in forRoot options) to register these tools with
|
|
64
|
-
* @returns A DynamicModule that can be imported into any module
|
|
65
|
-
*
|
|
66
|
-
* @example
|
|
67
|
-
* ```typescript
|
|
68
|
-
* // In feature.module.ts
|
|
69
|
-
* @Module({
|
|
70
|
-
* imports: [McpModule.forFeature([UserTools, OrderTools], 'my-server')],
|
|
71
|
-
* providers: [UserTools, OrderTools, UserService, OrderService],
|
|
72
|
-
* exports: [UserTools, OrderTools],
|
|
73
|
-
* })
|
|
74
|
-
* export class FeatureModule {}
|
|
75
|
-
*
|
|
76
|
-
* // In app.module.ts
|
|
77
|
-
* @Module({
|
|
78
|
-
* imports: [
|
|
79
|
-
* McpModule.forRoot({ name: 'my-server', version: '1.0.0' }),
|
|
80
|
-
* FeatureModule,
|
|
81
|
-
* ],
|
|
82
|
-
* })
|
|
83
|
-
* export class AppModule {}
|
|
84
|
-
* ```
|
|
85
|
-
*/
|
|
86
|
-
static forFeature(
|
|
87
|
-
providers: InjectionToken[],
|
|
88
|
-
serverName: string,
|
|
89
|
-
): DynamicModule {
|
|
90
|
-
const registration: McpFeatureRegistration = {
|
|
91
|
-
serverName,
|
|
92
|
-
providerTokens: providers,
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
// Use a unique token for each forFeature call to allow multiple registrations
|
|
96
|
-
const registrationToken = `${MCP_FEATURE_REGISTRATION}_${featureIdCounter++}`;
|
|
97
|
-
|
|
98
|
-
return {
|
|
99
|
-
module: McpFeatureModule,
|
|
100
|
-
providers: [
|
|
101
|
-
{
|
|
102
|
-
provide: registrationToken,
|
|
103
|
-
useValue: registration,
|
|
104
|
-
},
|
|
105
|
-
],
|
|
106
|
-
exports: [registrationToken],
|
|
107
|
-
global: true, // Make it global so the registration can be discovered from any module
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
static forRoot(options: McpOptions): DynamicModule {
|
|
112
|
-
const defaultOptions: Partial<McpOptions> = {
|
|
113
|
-
transport: [
|
|
114
|
-
McpTransportType.SSE,
|
|
115
|
-
McpTransportType.STREAMABLE_HTTP,
|
|
116
|
-
McpTransportType.STDIO,
|
|
117
|
-
],
|
|
118
|
-
sseEndpoint: 'sse',
|
|
119
|
-
messagesEndpoint: 'messages',
|
|
120
|
-
mcpEndpoint: 'mcp',
|
|
121
|
-
guards: [],
|
|
122
|
-
decorators: [],
|
|
123
|
-
streamableHttp: {
|
|
124
|
-
enableJsonResponse: true,
|
|
125
|
-
sessionIdGenerator: undefined,
|
|
126
|
-
statelessMode: true,
|
|
127
|
-
},
|
|
128
|
-
sse: {
|
|
129
|
-
pingEnabled: true,
|
|
130
|
-
pingIntervalMs: 30000,
|
|
131
|
-
},
|
|
132
|
-
};
|
|
133
|
-
const mergedOptions = { ...defaultOptions, ...options } as McpOptions;
|
|
134
|
-
mergedOptions.sseEndpoint = normalizeEndpoint(mergedOptions.sseEndpoint);
|
|
135
|
-
mergedOptions.messagesEndpoint = normalizeEndpoint(
|
|
136
|
-
mergedOptions.messagesEndpoint,
|
|
137
|
-
);
|
|
138
|
-
mergedOptions.mcpEndpoint = normalizeEndpoint(mergedOptions.mcpEndpoint);
|
|
139
|
-
|
|
140
|
-
const moduleId = `mcp-module-${instanceIdCounter++}`;
|
|
141
|
-
const providers = this.createProvidersFromOptions(mergedOptions, moduleId);
|
|
142
|
-
const controllers = this.createControllersFromOptions(mergedOptions);
|
|
143
|
-
return {
|
|
144
|
-
module: McpModule,
|
|
145
|
-
controllers,
|
|
146
|
-
providers,
|
|
147
|
-
exports: [
|
|
148
|
-
McpRegistryDiscoveryService,
|
|
149
|
-
McpSseService,
|
|
150
|
-
McpStreamableHttpService,
|
|
151
|
-
McpRegistryService,
|
|
152
|
-
],
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* Asynchronous variant of forRoot. Controllers are NOT auto-registered here because
|
|
158
|
-
* they must be declared synchronously at module definition time. This keeps the
|
|
159
|
-
* API explicit: when using forRootAsync, you are responsible for creating and
|
|
160
|
-
* registering any transport controllers (e.g. via createSseController / createStreamableHttpController).
|
|
161
|
-
*
|
|
162
|
-
* The exposed async options intentionally omit the `transport` property. Transport
|
|
163
|
-
* selection only influences automatic controller creation (which does not occur here)
|
|
164
|
-
* and STDIO auto-start. If you need STDIO with forRootAsync, manually instantiate
|
|
165
|
-
* and bootstrap it (e.g. by importing a module that injects StdioService) or add
|
|
166
|
-
* an explicit provider that sets options.transport before use.
|
|
167
|
-
*/
|
|
168
|
-
static forRootAsync(options: McpModuleAsyncOptions): DynamicModule {
|
|
169
|
-
const moduleId = `mcp-module-${instanceIdCounter++}`;
|
|
170
|
-
const asyncProviders = this.createAsyncProviders(options);
|
|
171
|
-
const baseProviders: Provider[] = [
|
|
172
|
-
{
|
|
173
|
-
provide: 'MCP_MODULE_ID',
|
|
174
|
-
useValue: moduleId,
|
|
175
|
-
},
|
|
176
|
-
McpRegistryDiscoveryService,
|
|
177
|
-
McpExecutorService,
|
|
178
|
-
ToolAuthorizationService,
|
|
179
|
-
SsePingService,
|
|
180
|
-
McpSseService,
|
|
181
|
-
McpStreamableHttpService,
|
|
182
|
-
McpRegistryService,
|
|
183
|
-
StdioService,
|
|
184
|
-
];
|
|
185
|
-
|
|
186
|
-
return {
|
|
187
|
-
module: McpModule,
|
|
188
|
-
imports: options.imports ?? [],
|
|
189
|
-
// No automatic controllers in async mode
|
|
190
|
-
controllers: [],
|
|
191
|
-
providers: [
|
|
192
|
-
...asyncProviders,
|
|
193
|
-
...baseProviders,
|
|
194
|
-
...(options.extraProviders ?? []),
|
|
195
|
-
],
|
|
196
|
-
exports: [
|
|
197
|
-
McpRegistryDiscoveryService,
|
|
198
|
-
McpSseService,
|
|
199
|
-
McpStreamableHttpService,
|
|
200
|
-
McpRegistryService,
|
|
201
|
-
],
|
|
202
|
-
};
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
private static createAsyncProviders(
|
|
206
|
-
options: McpModuleAsyncOptions,
|
|
207
|
-
): Provider[] {
|
|
208
|
-
if (options.useFactory) {
|
|
209
|
-
return [
|
|
210
|
-
{
|
|
211
|
-
provide: 'MCP_OPTIONS',
|
|
212
|
-
useFactory: async (...args: unknown[]) => {
|
|
213
|
-
const resolved: McpAsyncOptions = await options.useFactory!(
|
|
214
|
-
...args,
|
|
215
|
-
);
|
|
216
|
-
return this.mergeAndNormalizeAsyncOptions(resolved);
|
|
217
|
-
},
|
|
218
|
-
inject: options.inject ?? [],
|
|
219
|
-
},
|
|
220
|
-
];
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
// useClass / useExisting path
|
|
224
|
-
const inject: any[] = [];
|
|
225
|
-
let optionsFactoryProvider: Provider | undefined;
|
|
226
|
-
|
|
227
|
-
if (options.useExisting || options.useClass) {
|
|
228
|
-
const useExisting = options.useExisting || options.useClass!;
|
|
229
|
-
inject.push(useExisting);
|
|
230
|
-
if (options.useClass) {
|
|
231
|
-
optionsFactoryProvider = {
|
|
232
|
-
provide: options.useClass,
|
|
233
|
-
useClass: options.useClass,
|
|
234
|
-
} as Provider;
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
return [
|
|
238
|
-
...(optionsFactoryProvider ? [optionsFactoryProvider] : []),
|
|
239
|
-
{
|
|
240
|
-
provide: 'MCP_OPTIONS',
|
|
241
|
-
useFactory: async (factory: McpOptionsFactory) => {
|
|
242
|
-
const resolved = await factory.createMcpOptions();
|
|
243
|
-
return this.mergeAndNormalizeAsyncOptions(resolved);
|
|
244
|
-
},
|
|
245
|
-
inject,
|
|
246
|
-
},
|
|
247
|
-
];
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
throw new Error('Invalid McpModuleAsyncOptions configuration.');
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
private static mergeAndNormalizeAsyncOptions(
|
|
254
|
-
resolved: McpAsyncOptions,
|
|
255
|
-
): McpOptions {
|
|
256
|
-
const defaultOptions: Partial<McpOptions> = {
|
|
257
|
-
sseEndpoint: 'sse',
|
|
258
|
-
messagesEndpoint: 'messages',
|
|
259
|
-
mcpEndpoint: 'mcp',
|
|
260
|
-
guards: [],
|
|
261
|
-
decorators: [],
|
|
262
|
-
streamableHttp: {
|
|
263
|
-
enableJsonResponse: true,
|
|
264
|
-
sessionIdGenerator: undefined,
|
|
265
|
-
statelessMode: true,
|
|
266
|
-
},
|
|
267
|
-
sse: {
|
|
268
|
-
pingEnabled: true,
|
|
269
|
-
pingIntervalMs: 30000,
|
|
270
|
-
},
|
|
271
|
-
};
|
|
272
|
-
// Note: transport intentionally omitted
|
|
273
|
-
const merged = { ...defaultOptions, ...resolved } as McpOptions;
|
|
274
|
-
merged.sseEndpoint = normalizeEndpoint(merged.sseEndpoint);
|
|
275
|
-
merged.messagesEndpoint = normalizeEndpoint(merged.messagesEndpoint);
|
|
276
|
-
merged.mcpEndpoint = normalizeEndpoint(merged.mcpEndpoint);
|
|
277
|
-
return merged;
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
private static createControllersFromOptions(
|
|
281
|
-
options: McpOptions,
|
|
282
|
-
): Type<any>[] {
|
|
283
|
-
const sseEndpoint = options.sseEndpoint ?? 'sse';
|
|
284
|
-
const messagesEndpoint = options.messagesEndpoint ?? 'messages';
|
|
285
|
-
const mcpEndpoint = options.mcpEndpoint ?? 'mcp';
|
|
286
|
-
const guards = options.guards ?? [];
|
|
287
|
-
const transports = Array.isArray(options.transport)
|
|
288
|
-
? options.transport
|
|
289
|
-
: [options.transport ?? McpTransportType.SSE];
|
|
290
|
-
const controllers: Type<any>[] = [];
|
|
291
|
-
const decorators = options.decorators ?? [];
|
|
292
|
-
const apiPrefix = options.apiPrefix ?? '';
|
|
293
|
-
|
|
294
|
-
if (transports.includes(McpTransportType.SSE)) {
|
|
295
|
-
const sseController = createSseController(
|
|
296
|
-
sseEndpoint,
|
|
297
|
-
messagesEndpoint,
|
|
298
|
-
apiPrefix,
|
|
299
|
-
guards,
|
|
300
|
-
decorators,
|
|
301
|
-
options,
|
|
302
|
-
);
|
|
303
|
-
controllers.push(sseController);
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
if (transports.includes(McpTransportType.STREAMABLE_HTTP)) {
|
|
307
|
-
const streamableHttpController = createStreamableHttpController(
|
|
308
|
-
mcpEndpoint,
|
|
309
|
-
apiPrefix,
|
|
310
|
-
guards,
|
|
311
|
-
decorators,
|
|
312
|
-
options,
|
|
313
|
-
);
|
|
314
|
-
controllers.push(streamableHttpController);
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
if (transports.includes(McpTransportType.STDIO)) {
|
|
318
|
-
// STDIO transport is handled by injectable StdioService, no controller
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
return controllers;
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
private static createProvidersFromOptions(
|
|
325
|
-
options: McpOptions,
|
|
326
|
-
moduleId: string,
|
|
327
|
-
): Provider[] {
|
|
328
|
-
const providers: Provider[] = [
|
|
329
|
-
{
|
|
330
|
-
provide: 'MCP_OPTIONS',
|
|
331
|
-
useValue: options,
|
|
332
|
-
},
|
|
333
|
-
{
|
|
334
|
-
provide: 'MCP_MODULE_ID',
|
|
335
|
-
useValue: moduleId,
|
|
336
|
-
},
|
|
337
|
-
McpRegistryDiscoveryService,
|
|
338
|
-
McpExecutorService,
|
|
339
|
-
ToolAuthorizationService,
|
|
340
|
-
SsePingService,
|
|
341
|
-
McpSseService,
|
|
342
|
-
McpStreamableHttpService,
|
|
343
|
-
McpRegistryService,
|
|
344
|
-
StdioService,
|
|
345
|
-
];
|
|
346
|
-
|
|
347
|
-
return providers;
|
|
348
|
-
}
|
|
349
|
-
}
|