@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.
Files changed (364) hide show
  1. package/README.md +76 -29
  2. package/dist/index.d.ts +0 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +0 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/mcp/decorators/constants.d.ts +1 -0
  7. package/dist/mcp/decorators/constants.d.ts.map +1 -1
  8. package/dist/mcp/decorators/constants.js +2 -1
  9. package/dist/mcp/decorators/constants.js.map +1 -1
  10. package/dist/mcp/decorators/index.d.ts +3 -1
  11. package/dist/mcp/decorators/index.d.ts.map +1 -1
  12. package/dist/mcp/decorators/index.js +3 -1
  13. package/dist/mcp/decorators/index.js.map +1 -1
  14. package/dist/mcp/decorators/mcp-controller.decorator.d.ts +6 -0
  15. package/dist/mcp/decorators/mcp-controller.decorator.d.ts.map +1 -0
  16. package/dist/mcp/decorators/mcp-controller.decorator.js +43 -0
  17. package/dist/mcp/decorators/mcp-controller.decorator.js.map +1 -0
  18. package/dist/mcp/decorators/mcp-message-pattern.d.ts +3 -0
  19. package/dist/mcp/decorators/mcp-message-pattern.d.ts.map +1 -0
  20. package/dist/mcp/decorators/mcp-message-pattern.js +13 -0
  21. package/dist/mcp/decorators/mcp-message-pattern.js.map +1 -0
  22. package/dist/mcp/decorators/prompt.decorator.d.ts +1 -1
  23. package/dist/mcp/decorators/prompt.decorator.d.ts.map +1 -1
  24. package/dist/mcp/decorators/prompt.decorator.js +2 -1
  25. package/dist/mcp/decorators/prompt.decorator.js.map +1 -1
  26. package/dist/mcp/decorators/public.decorator.js.map +1 -1
  27. package/dist/mcp/decorators/raw-request.decorator.d.ts +2 -0
  28. package/dist/mcp/decorators/raw-request.decorator.d.ts.map +1 -0
  29. package/dist/mcp/decorators/raw-request.decorator.js +6 -0
  30. package/dist/mcp/decorators/raw-request.decorator.js.map +1 -0
  31. package/dist/mcp/decorators/resource-template.decorator.d.ts +1 -1
  32. package/dist/mcp/decorators/resource-template.decorator.d.ts.map +1 -1
  33. package/dist/mcp/decorators/resource-template.decorator.js +2 -1
  34. package/dist/mcp/decorators/resource-template.decorator.js.map +1 -1
  35. package/dist/mcp/decorators/resource.decorator.d.ts +1 -1
  36. package/dist/mcp/decorators/resource.decorator.d.ts.map +1 -1
  37. package/dist/mcp/decorators/resource.decorator.js +2 -1
  38. package/dist/mcp/decorators/resource.decorator.js.map +1 -1
  39. package/dist/mcp/decorators/tool.decorator.d.ts +1 -3
  40. package/dist/mcp/decorators/tool.decorator.d.ts.map +1 -1
  41. package/dist/mcp/decorators/tool.decorator.js +2 -1
  42. package/dist/mcp/decorators/tool.decorator.js.map +1 -1
  43. package/dist/mcp/filters/mcp-exception.filter.d.ts +6 -0
  44. package/dist/mcp/filters/mcp-exception.filter.d.ts.map +1 -0
  45. package/dist/mcp/filters/mcp-exception.filter.js +26 -0
  46. package/dist/mcp/filters/mcp-exception.filter.js.map +1 -0
  47. package/dist/mcp/index.d.ts +11 -7
  48. package/dist/mcp/index.d.ts.map +1 -1
  49. package/dist/mcp/index.js +11 -7
  50. package/dist/mcp/index.js.map +1 -1
  51. package/dist/mcp/interfaces/authenticated-user.interface.d.ts +9 -0
  52. package/dist/mcp/interfaces/authenticated-user.interface.d.ts.map +1 -0
  53. package/dist/{authz/interfaces/request-with-user.js → mcp/interfaces/authenticated-user.interface.js} +1 -1
  54. package/dist/mcp/interfaces/authenticated-user.interface.js.map +1 -0
  55. package/dist/mcp/interfaces/dynamic-prompt.interface.d.ts +1 -1
  56. package/dist/mcp/interfaces/dynamic-prompt.interface.d.ts.map +1 -1
  57. package/dist/mcp/interfaces/dynamic-prompt.interface.js.map +1 -1
  58. package/dist/mcp/interfaces/dynamic-resource.interface.d.ts +1 -1
  59. package/dist/mcp/interfaces/dynamic-resource.interface.d.ts.map +1 -1
  60. package/dist/mcp/interfaces/dynamic-resource.interface.js.map +1 -1
  61. package/dist/mcp/interfaces/dynamic-tool.interface.d.ts +1 -1
  62. package/dist/mcp/interfaces/dynamic-tool.interface.d.ts.map +1 -1
  63. package/dist/mcp/interfaces/dynamic-tool.interface.js.map +1 -1
  64. package/dist/mcp/interfaces/index.d.ts +2 -2
  65. package/dist/mcp/interfaces/index.d.ts.map +1 -1
  66. package/dist/mcp/interfaces/index.js +0 -3
  67. package/dist/mcp/interfaces/index.js.map +1 -1
  68. package/dist/mcp/services/tool-authorization.service.d.ts +7 -5
  69. package/dist/mcp/services/tool-authorization.service.d.ts.map +1 -1
  70. package/dist/mcp/services/tool-authorization.service.js +9 -6
  71. package/dist/mcp/services/tool-authorization.service.js.map +1 -1
  72. package/dist/mcp/transport/mcp-context.d.ts +34 -0
  73. package/dist/mcp/transport/mcp-context.d.ts.map +1 -0
  74. package/dist/mcp/transport/mcp-context.js +74 -0
  75. package/dist/mcp/transport/mcp-context.js.map +1 -0
  76. package/dist/mcp/transport/mcp-http-handler.d.ts +7 -0
  77. package/dist/mcp/transport/mcp-http-handler.d.ts.map +1 -0
  78. package/dist/mcp/transport/mcp-http-handler.js +5 -0
  79. package/dist/mcp/transport/mcp-http-handler.js.map +1 -0
  80. package/dist/mcp/transport/mcp-server-options.interface.d.ts +23 -0
  81. package/dist/mcp/transport/mcp-server-options.interface.d.ts.map +1 -0
  82. package/dist/{authz/providers/oauth-provider.interface.js → mcp/transport/mcp-server-options.interface.js} +1 -1
  83. package/dist/mcp/transport/mcp-server-options.interface.js.map +1 -0
  84. package/dist/mcp/transport/mcp-transport.constants.d.ts +19 -0
  85. package/dist/mcp/transport/mcp-transport.constants.d.ts.map +1 -0
  86. package/dist/mcp/transport/mcp-transport.constants.js +21 -0
  87. package/dist/mcp/transport/mcp-transport.constants.js.map +1 -0
  88. package/dist/mcp/transport/mcp-transport.interface.d.ts +17 -0
  89. package/dist/mcp/transport/mcp-transport.interface.d.ts.map +1 -0
  90. package/dist/{authz/interfaces/oauth-common.interface.js → mcp/transport/mcp-transport.interface.js} +1 -1
  91. package/dist/mcp/transport/mcp-transport.interface.js.map +1 -0
  92. package/dist/mcp/transport/mcp.strategy.d.ts +56 -0
  93. package/dist/mcp/transport/mcp.strategy.d.ts.map +1 -0
  94. package/dist/mcp/transport/mcp.strategy.js +446 -0
  95. package/dist/mcp/transport/mcp.strategy.js.map +1 -0
  96. package/dist/mcp/transport/resource-matcher.d.ts +13 -0
  97. package/dist/mcp/transport/resource-matcher.d.ts.map +1 -0
  98. package/dist/mcp/transport/resource-matcher.js +83 -0
  99. package/dist/mcp/transport/resource-matcher.js.map +1 -0
  100. package/dist/mcp/transport/streamable-http.controller.d.ts +16 -0
  101. package/dist/mcp/transport/streamable-http.controller.d.ts.map +1 -0
  102. package/dist/mcp/transport/streamable-http.controller.js +98 -0
  103. package/dist/mcp/transport/streamable-http.controller.js.map +1 -0
  104. package/dist/mcp/transport/transports/index.d.ts +3 -0
  105. package/dist/mcp/transport/transports/index.d.ts.map +1 -0
  106. package/dist/{authz → mcp/transport/transports}/index.js +2 -10
  107. package/dist/mcp/transport/transports/index.js.map +1 -0
  108. package/dist/mcp/transport/transports/read-body.d.ts +3 -0
  109. package/dist/mcp/transport/transports/read-body.d.ts.map +1 -0
  110. package/dist/mcp/transport/transports/read-body.js +32 -0
  111. package/dist/mcp/transport/transports/read-body.js.map +1 -0
  112. package/dist/mcp/transport/transports/stdio.transport.d.ts +9 -0
  113. package/dist/mcp/transport/transports/stdio.transport.d.ts.map +1 -0
  114. package/dist/mcp/transport/transports/stdio.transport.js +27 -0
  115. package/dist/mcp/transport/transports/stdio.transport.js.map +1 -0
  116. package/dist/mcp/transport/transports/streamable-http.transport.d.ts +33 -0
  117. package/dist/mcp/transport/transports/streamable-http.transport.d.ts.map +1 -0
  118. package/dist/mcp/transport/transports/streamable-http.transport.js +216 -0
  119. package/dist/mcp/transport/transports/streamable-http.transport.js.map +1 -0
  120. package/dist/mcp/utils/mcp-logger.factory.d.ts +6 -2
  121. package/dist/mcp/utils/mcp-logger.factory.d.ts.map +1 -1
  122. package/dist/mcp/utils/mcp-logger.factory.js.map +1 -1
  123. package/package.json +3 -66
  124. package/src/index.ts +0 -1
  125. package/src/mcp/decorators/constants.ts +1 -0
  126. package/src/mcp/decorators/index.ts +3 -1
  127. package/src/mcp/decorators/mcp-controller.decorator.ts +126 -0
  128. package/src/mcp/decorators/mcp-message-pattern.ts +38 -0
  129. package/src/mcp/decorators/prompt.decorator.ts +6 -2
  130. package/src/mcp/decorators/public.decorator.ts +3 -3
  131. package/src/mcp/decorators/raw-request.decorator.ts +32 -0
  132. package/src/mcp/decorators/resource-template.decorator.ts +6 -2
  133. package/src/mcp/decorators/resource.decorator.ts +6 -2
  134. package/src/mcp/decorators/tool.decorator.ts +6 -3
  135. package/src/mcp/filters/mcp-exception.filter.ts +47 -0
  136. package/src/mcp/index.ts +13 -7
  137. package/src/mcp/interfaces/authenticated-user.interface.ts +22 -0
  138. package/src/mcp/interfaces/dynamic-prompt.interface.ts +1 -1
  139. package/src/mcp/interfaces/dynamic-resource.interface.ts +1 -1
  140. package/src/mcp/interfaces/dynamic-tool.interface.ts +2 -2
  141. package/src/mcp/interfaces/index.ts +3 -7
  142. package/src/mcp/services/tool-authorization.service.ts +52 -72
  143. package/src/mcp/transport/mcp-context.ts +138 -0
  144. package/src/mcp/transport/mcp-http-handler.ts +32 -0
  145. package/src/mcp/transport/mcp-server-options.interface.ts +75 -0
  146. package/src/mcp/transport/mcp-transport.constants.ts +99 -0
  147. package/src/mcp/transport/mcp-transport.interface.ts +50 -0
  148. package/src/mcp/transport/mcp.strategy.ts +752 -0
  149. package/src/mcp/transport/resource-matcher.ts +107 -0
  150. package/src/mcp/transport/streamable-http.controller.ts +114 -0
  151. package/src/mcp/transport/transports/index.ts +2 -0
  152. package/src/mcp/transport/transports/read-body.ts +39 -0
  153. package/src/mcp/transport/transports/stdio.transport.ts +35 -0
  154. package/src/mcp/transport/transports/streamable-http.transport.ts +384 -0
  155. package/src/mcp/utils/mcp-logger.factory.spec.ts +8 -22
  156. package/src/mcp/utils/mcp-logger.factory.ts +13 -2
  157. package/dist/authz/guards/jwt-auth.guard.d.ts +0 -19
  158. package/dist/authz/guards/jwt-auth.guard.d.ts.map +0 -1
  159. package/dist/authz/guards/jwt-auth.guard.js +0 -108
  160. package/dist/authz/guards/jwt-auth.guard.js.map +0 -1
  161. package/dist/authz/index.d.ts +0 -11
  162. package/dist/authz/index.d.ts.map +0 -1
  163. package/dist/authz/index.js.map +0 -1
  164. package/dist/authz/interfaces/oauth-common.interface.d.ts +0 -21
  165. package/dist/authz/interfaces/oauth-common.interface.d.ts.map +0 -1
  166. package/dist/authz/interfaces/oauth-common.interface.js.map +0 -1
  167. package/dist/authz/interfaces/request-with-user.d.ts +0 -13
  168. package/dist/authz/interfaces/request-with-user.d.ts.map +0 -1
  169. package/dist/authz/interfaces/request-with-user.js.map +0 -1
  170. package/dist/authz/mcp-oauth.controller.d.ts +0 -81
  171. package/dist/authz/mcp-oauth.controller.d.ts.map +0 -1
  172. package/dist/authz/mcp-oauth.controller.js +0 -540
  173. package/dist/authz/mcp-oauth.controller.js.map +0 -1
  174. package/dist/authz/mcp-oauth.module.d.ts +0 -12
  175. package/dist/authz/mcp-oauth.module.d.ts.map +0 -1
  176. package/dist/authz/mcp-oauth.module.js +0 -271
  177. package/dist/authz/mcp-oauth.module.js.map +0 -1
  178. package/dist/authz/providers/azure-ad.provider.d.ts +0 -3
  179. package/dist/authz/providers/azure-ad.provider.d.ts.map +0 -1
  180. package/dist/authz/providers/azure-ad.provider.js +0 -37
  181. package/dist/authz/providers/azure-ad.provider.js.map +0 -1
  182. package/dist/authz/providers/github.provider.d.ts +0 -3
  183. package/dist/authz/providers/github.provider.d.ts.map +0 -1
  184. package/dist/authz/providers/github.provider.js +0 -24
  185. package/dist/authz/providers/github.provider.js.map +0 -1
  186. package/dist/authz/providers/google.provider.d.ts +0 -3
  187. package/dist/authz/providers/google.provider.d.ts.map +0 -1
  188. package/dist/authz/providers/google.provider.js +0 -25
  189. package/dist/authz/providers/google.provider.js.map +0 -1
  190. package/dist/authz/providers/oauth-provider.interface.d.ts +0 -107
  191. package/dist/authz/providers/oauth-provider.interface.d.ts.map +0 -1
  192. package/dist/authz/providers/oauth-provider.interface.js.map +0 -1
  193. package/dist/authz/services/client.service.d.ts +0 -12
  194. package/dist/authz/services/client.service.d.ts.map +0 -1
  195. package/dist/authz/services/client.service.js +0 -81
  196. package/dist/authz/services/client.service.js.map +0 -1
  197. package/dist/authz/services/jwt-token.service.d.ts +0 -37
  198. package/dist/authz/services/jwt-token.service.d.ts.map +0 -1
  199. package/dist/authz/services/jwt-token.service.js +0 -182
  200. package/dist/authz/services/jwt-token.service.js.map +0 -1
  201. package/dist/authz/services/oauth-strategy.service.d.ts +0 -13
  202. package/dist/authz/services/oauth-strategy.service.d.ts.map +0 -1
  203. package/dist/authz/services/oauth-strategy.service.js +0 -71
  204. package/dist/authz/services/oauth-strategy.service.js.map +0 -1
  205. package/dist/authz/stores/memory-store.service.d.ts +0 -27
  206. package/dist/authz/stores/memory-store.service.d.ts.map +0 -1
  207. package/dist/authz/stores/memory-store.service.js +0 -107
  208. package/dist/authz/stores/memory-store.service.js.map +0 -1
  209. package/dist/authz/stores/oauth-store.interface.d.ts +0 -61
  210. package/dist/authz/stores/oauth-store.interface.d.ts.map +0 -1
  211. package/dist/authz/stores/oauth-store.interface.js +0 -5
  212. package/dist/authz/stores/oauth-store.interface.js.map +0 -1
  213. package/dist/authz/stores/typeorm/constants.d.ts +0 -3
  214. package/dist/authz/stores/typeorm/constants.d.ts.map +0 -1
  215. package/dist/authz/stores/typeorm/constants.js +0 -6
  216. package/dist/authz/stores/typeorm/constants.js.map +0 -1
  217. package/dist/authz/stores/typeorm/entities/authorization-code.entity.d.ts +0 -15
  218. package/dist/authz/stores/typeorm/entities/authorization-code.entity.d.ts.map +0 -1
  219. package/dist/authz/stores/typeorm/entities/authorization-code.entity.js +0 -69
  220. package/dist/authz/stores/typeorm/entities/authorization-code.entity.js.map +0 -1
  221. package/dist/authz/stores/typeorm/entities/index.d.ts +0 -5
  222. package/dist/authz/stores/typeorm/entities/index.d.ts.map +0 -1
  223. package/dist/authz/stores/typeorm/entities/index.js +0 -12
  224. package/dist/authz/stores/typeorm/entities/index.js.map +0 -1
  225. package/dist/authz/stores/typeorm/entities/oauth-client.entity.d.ts +0 -17
  226. package/dist/authz/stores/typeorm/entities/oauth-client.entity.d.ts.map +0 -1
  227. package/dist/authz/stores/typeorm/entities/oauth-client.entity.js +0 -77
  228. package/dist/authz/stores/typeorm/entities/oauth-client.entity.js.map +0 -1
  229. package/dist/authz/stores/typeorm/entities/oauth-session.entity.d.ts +0 -14
  230. package/dist/authz/stores/typeorm/entities/oauth-session.entity.d.ts.map +0 -1
  231. package/dist/authz/stores/typeorm/entities/oauth-session.entity.js +0 -65
  232. package/dist/authz/stores/typeorm/entities/oauth-session.entity.js.map +0 -1
  233. package/dist/authz/stores/typeorm/entities/user-profile.entity.d.ts +0 -13
  234. package/dist/authz/stores/typeorm/entities/user-profile.entity.d.ts.map +0 -1
  235. package/dist/authz/stores/typeorm/entities/user-profile.entity.js +0 -62
  236. package/dist/authz/stores/typeorm/entities/user-profile.entity.js.map +0 -1
  237. package/dist/authz/stores/typeorm/typeorm-store.service.d.ts +0 -28
  238. package/dist/authz/stores/typeorm/typeorm-store.service.d.ts.map +0 -1
  239. package/dist/authz/stores/typeorm/typeorm-store.service.js +0 -138
  240. package/dist/authz/stores/typeorm/typeorm-store.service.js.map +0 -1
  241. package/dist/mcp/constants/feature-registration.constants.d.ts +0 -7
  242. package/dist/mcp/constants/feature-registration.constants.d.ts.map +0 -1
  243. package/dist/mcp/constants/feature-registration.constants.js +0 -5
  244. package/dist/mcp/constants/feature-registration.constants.js.map +0 -1
  245. package/dist/mcp/decorators/tool-guards.decorator.d.ts +0 -12
  246. package/dist/mcp/decorators/tool-guards.decorator.d.ts.map +0 -1
  247. package/dist/mcp/decorators/tool-guards.decorator.js +0 -13
  248. package/dist/mcp/decorators/tool-guards.decorator.js.map +0 -1
  249. package/dist/mcp/interfaces/mcp-options.interface.d.ts +0 -53
  250. package/dist/mcp/interfaces/mcp-options.interface.d.ts.map +0 -1
  251. package/dist/mcp/interfaces/mcp-options.interface.js +0 -10
  252. package/dist/mcp/interfaces/mcp-options.interface.js.map +0 -1
  253. package/dist/mcp/mcp.module.d.ts +0 -15
  254. package/dist/mcp/mcp.module.d.ts.map +0 -1
  255. package/dist/mcp/mcp.module.js +0 -248
  256. package/dist/mcp/mcp.module.js.map +0 -1
  257. package/dist/mcp/services/handlers/mcp-handler.base.d.ts +0 -117
  258. package/dist/mcp/services/handlers/mcp-handler.base.d.ts.map +0 -1
  259. package/dist/mcp/services/handlers/mcp-handler.base.js +0 -125
  260. package/dist/mcp/services/handlers/mcp-handler.base.js.map +0 -1
  261. package/dist/mcp/services/handlers/mcp-prompts.handler.d.ts +0 -12
  262. package/dist/mcp/services/handlers/mcp-prompts.handler.d.ts.map +0 -1
  263. package/dist/mcp/services/handlers/mcp-prompts.handler.js +0 -98
  264. package/dist/mcp/services/handlers/mcp-prompts.handler.js.map +0 -1
  265. package/dist/mcp/services/handlers/mcp-resources.handler.d.ts +0 -13
  266. package/dist/mcp/services/handlers/mcp-resources.handler.d.ts.map +0 -1
  267. package/dist/mcp/services/handlers/mcp-resources.handler.js +0 -117
  268. package/dist/mcp/services/handlers/mcp-resources.handler.js.map +0 -1
  269. package/dist/mcp/services/handlers/mcp-tools.handler.d.ts +0 -22
  270. package/dist/mcp/services/handlers/mcp-tools.handler.d.ts.map +0 -1
  271. package/dist/mcp/services/handlers/mcp-tools.handler.js +0 -258
  272. package/dist/mcp/services/handlers/mcp-tools.handler.js.map +0 -1
  273. package/dist/mcp/services/mcp-dynamic-registry.service.d.ts +0 -26
  274. package/dist/mcp/services/mcp-dynamic-registry.service.d.ts.map +0 -1
  275. package/dist/mcp/services/mcp-dynamic-registry.service.js +0 -133
  276. package/dist/mcp/services/mcp-dynamic-registry.service.js.map +0 -1
  277. package/dist/mcp/services/mcp-executor.service.d.ts +0 -15
  278. package/dist/mcp/services/mcp-executor.service.d.ts.map +0 -1
  279. package/dist/mcp/services/mcp-executor.service.js +0 -47
  280. package/dist/mcp/services/mcp-executor.service.js.map +0 -1
  281. package/dist/mcp/services/mcp-registry-discovery.service.d.ts +0 -63
  282. package/dist/mcp/services/mcp-registry-discovery.service.d.ts.map +0 -1
  283. package/dist/mcp/services/mcp-registry-discovery.service.js +0 -397
  284. package/dist/mcp/services/mcp-registry-discovery.service.js.map +0 -1
  285. package/dist/mcp/services/mcp-sse.service.d.ts +0 -20
  286. package/dist/mcp/services/mcp-sse.service.d.ts.map +0 -1
  287. package/dist/mcp/services/mcp-sse.service.js +0 -91
  288. package/dist/mcp/services/mcp-sse.service.js.map +0 -1
  289. package/dist/mcp/services/mcp-streamable-http.service.d.ts +0 -32
  290. package/dist/mcp/services/mcp-streamable-http.service.d.ts.map +0 -1
  291. package/dist/mcp/services/mcp-streamable-http.service.js +0 -327
  292. package/dist/mcp/services/mcp-streamable-http.service.js.map +0 -1
  293. package/dist/mcp/services/sse-ping.service.d.ts +0 -23
  294. package/dist/mcp/services/sse-ping.service.d.ts.map +0 -1
  295. package/dist/mcp/services/sse-ping.service.js +0 -99
  296. package/dist/mcp/services/sse-ping.service.js.map +0 -1
  297. package/dist/mcp/transport/sse.controller.factory.d.ts +0 -14
  298. package/dist/mcp/transport/sse.controller.factory.d.ts.map +0 -1
  299. package/dist/mcp/transport/sse.controller.factory.js +0 -67
  300. package/dist/mcp/transport/sse.controller.factory.js.map +0 -1
  301. package/dist/mcp/transport/stdio.service.d.ts +0 -14
  302. package/dist/mcp/transport/stdio.service.d.ts.map +0 -1
  303. package/dist/mcp/transport/stdio.service.js +0 -66
  304. package/dist/mcp/transport/stdio.service.js.map +0 -1
  305. package/dist/mcp/transport/streamable-http.controller.factory.d.ts +0 -14
  306. package/dist/mcp/transport/streamable-http.controller.factory.d.ts.map +0 -1
  307. package/dist/mcp/transport/streamable-http.controller.factory.js +0 -74
  308. package/dist/mcp/transport/streamable-http.controller.factory.js.map +0 -1
  309. package/dist/mcp/utils/capabilities-builder.d.ts +0 -5
  310. package/dist/mcp/utils/capabilities-builder.d.ts.map +0 -1
  311. package/dist/mcp/utils/capabilities-builder.js +0 -25
  312. package/dist/mcp/utils/capabilities-builder.js.map +0 -1
  313. package/dist/mcp/utils/mcp-server.factory.d.ts +0 -6
  314. package/dist/mcp/utils/mcp-server.factory.d.ts.map +0 -1
  315. package/dist/mcp/utils/mcp-server.factory.js +0 -22
  316. package/dist/mcp/utils/mcp-server.factory.js.map +0 -1
  317. package/src/authz/guards/jwt-auth.guard.ts +0 -127
  318. package/src/authz/index.ts +0 -10
  319. package/src/authz/interfaces/oauth-common.interface.ts +0 -21
  320. package/src/authz/interfaces/request-with-user.ts +0 -16
  321. package/src/authz/mcp-oauth.controller.ts +0 -860
  322. package/src/authz/mcp-oauth.module.ts +0 -384
  323. package/src/authz/providers/azure-ad.provider.ts +0 -40
  324. package/src/authz/providers/github.provider.ts +0 -22
  325. package/src/authz/providers/google.provider.ts +0 -23
  326. package/src/authz/providers/oauth-provider.interface.ts +0 -147
  327. package/src/authz/services/client.service.ts +0 -125
  328. package/src/authz/services/jwt-token.service.spec.ts +0 -67
  329. package/src/authz/services/jwt-token.service.ts +0 -188
  330. package/src/authz/services/oauth-strategy.service.ts +0 -64
  331. package/src/authz/stores/memory-store.service.spec.ts +0 -475
  332. package/src/authz/stores/memory-store.service.ts +0 -141
  333. package/src/authz/stores/oauth-store.interface.ts +0 -131
  334. package/src/authz/stores/typeorm/README.md +0 -140
  335. package/src/authz/stores/typeorm/constants.ts +0 -6
  336. package/src/authz/stores/typeorm/entities/authorization-code.entity.ts +0 -41
  337. package/src/authz/stores/typeorm/entities/index.ts +0 -4
  338. package/src/authz/stores/typeorm/entities/oauth-client.entity.ts +0 -53
  339. package/src/authz/stores/typeorm/entities/oauth-session.entity.ts +0 -38
  340. package/src/authz/stores/typeorm/entities/user-profile.entity.ts +0 -46
  341. package/src/authz/stores/typeorm/typeorm-store.service.spec.ts +0 -494
  342. package/src/authz/stores/typeorm/typeorm-store.service.ts +0 -165
  343. package/src/mcp/constants/feature-registration.constants.ts +0 -24
  344. package/src/mcp/decorators/tool-guards.decorator.ts +0 -82
  345. package/src/mcp/interfaces/mcp-options.interface.ts +0 -95
  346. package/src/mcp/mcp.module.ts +0 -349
  347. package/src/mcp/services/handlers/mcp-handler.base.ts +0 -203
  348. package/src/mcp/services/handlers/mcp-prompts.handler.ts +0 -143
  349. package/src/mcp/services/handlers/mcp-resources.handler.ts +0 -183
  350. package/src/mcp/services/handlers/mcp-tools.handler.spec.ts +0 -41
  351. package/src/mcp/services/handlers/mcp-tools.handler.ts +0 -436
  352. package/src/mcp/services/mcp-dynamic-registry.service.ts +0 -236
  353. package/src/mcp/services/mcp-executor.service.ts +0 -64
  354. package/src/mcp/services/mcp-registry-discovery.service.spec.ts +0 -306
  355. package/src/mcp/services/mcp-registry-discovery.service.ts +0 -849
  356. package/src/mcp/services/mcp-sse.service.ts +0 -124
  357. package/src/mcp/services/mcp-streamable-http.service.ts +0 -472
  358. package/src/mcp/services/sse-ping.service.ts +0 -144
  359. package/src/mcp/transport/custom-decorator.spec.ts +0 -75
  360. package/src/mcp/transport/sse.controller.factory.ts +0 -84
  361. package/src/mcp/transport/stdio.service.ts +0 -75
  362. package/src/mcp/transport/streamable-http.controller.factory.ts +0 -80
  363. package/src/mcp/utils/capabilities-builder.ts +0 -43
  364. package/src/mcp/utils/mcp-server.factory.ts +0 -33
@@ -1,124 +0,0 @@
1
- import { Inject, Injectable, Logger } from '@nestjs/common';
2
- import { ApplicationConfig, ContextIdFactory, ModuleRef } from '@nestjs/core';
3
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
4
- import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
5
- import type { McpOptions } from '../interfaces';
6
- import { McpExecutorService } from './mcp-executor.service';
7
- import { McpRegistryDiscoveryService } from './mcp-registry-discovery.service';
8
- import { SsePingService } from './sse-ping.service';
9
- import { normalizeEndpoint } from '../utils/normalize-endpoint';
10
- import { HttpAdapterFactory } from '../adapters';
11
- import { createMcpLogger } from '../utils/mcp-logger.factory';
12
- import { createMcpServer } from '../utils/mcp-server.factory';
13
-
14
- @Injectable()
15
- export class McpSseService {
16
- private readonly logger: Logger;
17
-
18
- // Note: Currently, storing transports and servers makes it a requirement to have sticky sessions.
19
-
20
- // Map to store active transports by session ID
21
- private readonly transports = new Map<string, SSEServerTransport>();
22
- // Map to store MCP server instances by session ID
23
- private readonly mcpServers = new Map<string, McpServer>();
24
-
25
- constructor(
26
- @Inject('MCP_OPTIONS') private readonly options: McpOptions,
27
- @Inject('MCP_MODULE_ID') private readonly mcpModuleId: string,
28
- private readonly applicationConfig: ApplicationConfig,
29
- private readonly moduleRef: ModuleRef,
30
- private readonly toolRegistry: McpRegistryDiscoveryService,
31
- @Inject(SsePingService) private readonly pingService: SsePingService,
32
- ) {
33
- this.logger = createMcpLogger(McpSseService.name, this.options);
34
- }
35
-
36
- /**
37
- * Initialize the SSE service and configure ping service
38
- */
39
- initialize() {
40
- // Configure ping service with options
41
- this.pingService.configure({
42
- pingEnabled: this.options.sse?.pingEnabled, // Enable by default
43
- pingIntervalMs: this.options.sse?.pingIntervalMs,
44
- });
45
- }
46
-
47
- /**
48
- * Create and manage SSE connection
49
- */
50
- async createSseConnection(
51
- rawReq: any,
52
- rawRes: any,
53
- messagesEndpoint: string,
54
- apiPrefix: string,
55
- ): Promise<void> {
56
- const adapter = HttpAdapterFactory.getAdapter(rawReq, rawRes);
57
- const res = adapter.adaptResponse(rawRes);
58
-
59
- // Create a new SSE transport instance
60
- const transport = new SSEServerTransport(
61
- normalizeEndpoint(
62
- `${apiPrefix}/${this.applicationConfig.getGlobalPrefix()}/${messagesEndpoint}`,
63
- ),
64
- res.raw,
65
- );
66
- const sessionId = transport.sessionId;
67
-
68
- const mcpServer = createMcpServer(
69
- this.mcpModuleId,
70
- this.toolRegistry,
71
- this.options,
72
- this.logger,
73
- );
74
-
75
- // Store the transport and server for this session
76
- this.transports.set(sessionId, transport);
77
- this.mcpServers.set(sessionId, mcpServer);
78
-
79
- // Register the connection with the ping service
80
- this.pingService.registerConnection(sessionId, transport, res);
81
-
82
- transport.onclose = () => {
83
- // Clean up when the connection closes
84
- this.transports.delete(sessionId);
85
- this.mcpServers.delete(sessionId);
86
- this.pingService.removeConnection(sessionId);
87
- };
88
-
89
- await mcpServer.connect(transport);
90
- }
91
-
92
- /**
93
- * Handle message processing for SSE
94
- */
95
- async handleMessage(rawReq: any, rawRes: any, body: unknown): Promise<any> {
96
- const adapter = HttpAdapterFactory.getAdapter(rawReq, rawRes);
97
- const req = adapter.adaptRequest(rawReq);
98
- const res = adapter.adaptResponse(rawRes);
99
- const sessionId = req.query.sessionId as string;
100
- const transport = this.transports.get(sessionId);
101
-
102
- if (!transport) {
103
- return res.status(404).send('Session not found');
104
- }
105
-
106
- const mcpServer = this.mcpServers.get(sessionId);
107
- if (!mcpServer) {
108
- return res.status(404).send('MCP server not found for session');
109
- }
110
-
111
- // Resolve the request-scoped tool executor service
112
- const contextId = ContextIdFactory.getByRequest(req);
113
- const executor = await this.moduleRef.resolve(
114
- McpExecutorService,
115
- contextId,
116
- );
117
-
118
- // Register request handlers with the user context from this specific request
119
- executor.registerRequestHandlers(mcpServer, req);
120
-
121
- // Process the message
122
- await transport.handlePostMessage(req.raw, res.raw, body);
123
- }
124
- }
@@ -1,472 +0,0 @@
1
- import { Inject, Injectable, Logger, OnModuleDestroy } from '@nestjs/common';
2
- import { ContextIdFactory, ModuleRef } from '@nestjs/core';
3
- import { randomUUID } from 'crypto';
4
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
- import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
6
- import { HttpAdapterFactory } from '../adapters/http-adapter.factory';
7
- import {
8
- HttpRequest,
9
- HttpResponse,
10
- } from '../interfaces/http-adapter.interface';
11
- import type { McpOptions } from '../interfaces';
12
- import { McpExecutorService } from './mcp-executor.service';
13
- import { McpRegistryDiscoveryService } from './mcp-registry-discovery.service';
14
- import { createMcpLogger } from '../utils/mcp-logger.factory';
15
- import { createMcpServer } from '../utils/mcp-server.factory';
16
-
17
- @Injectable()
18
- export class McpStreamableHttpService implements OnModuleDestroy {
19
- private readonly logger: Logger;
20
- private readonly transports: {
21
- [sessionId: string]: StreamableHTTPServerTransport;
22
- } = {};
23
- private readonly mcpServers: { [sessionId: string]: McpServer } = {};
24
- private readonly executors: { [sessionId: string]: McpExecutorService } = {};
25
- private readonly isStatelessMode: boolean;
26
-
27
- constructor(
28
- @Inject('MCP_OPTIONS') private readonly options: McpOptions,
29
- @Inject('MCP_MODULE_ID') private readonly mcpModuleId: string,
30
- private readonly moduleRef: ModuleRef,
31
- private readonly toolRegistry: McpRegistryDiscoveryService,
32
- ) {
33
- // Determine if we're in stateless mode
34
- this.isStatelessMode = !!options.streamableHttp?.statelessMode;
35
- this.logger = createMcpLogger(McpStreamableHttpService.name, this.options);
36
- }
37
-
38
- /**
39
- * Create a new MCP server instance for stateless requests
40
- */
41
- async createStatelessServer(rawReq: any): Promise<{
42
- server: McpServer;
43
- transport: StreamableHTTPServerTransport;
44
- }> {
45
- // Create a new transport for this request (stateless = no session management)
46
- const transport = new StreamableHTTPServerTransport({
47
- sessionIdGenerator: undefined,
48
- enableJsonResponse:
49
- this.options.streamableHttp?.enableJsonResponse || false,
50
- });
51
-
52
- const server = createMcpServer(
53
- this.mcpModuleId,
54
- this.toolRegistry,
55
- this.options,
56
- this.logger,
57
- );
58
-
59
- // Connect the transport to the MCP server first
60
- await server.connect(transport);
61
-
62
- // Now resolve the request-scoped tool executor service
63
- const contextId = ContextIdFactory.getByRequest(rawReq);
64
- const executor = await this.moduleRef.resolve(
65
- McpExecutorService,
66
- contextId,
67
- { strict: true },
68
- );
69
-
70
- // Register request handlers after connection
71
- this.logger.debug(
72
- '[Stateless] Registering request handlers for stateless MCP server',
73
- );
74
- executor.registerRequestHandlers(server, rawReq);
75
-
76
- return { server, transport };
77
- }
78
-
79
- /**
80
- * Handle POST requests
81
- */
82
- async handlePostRequest(req: any, res: any, body: unknown): Promise<void> {
83
- // Get the appropriate HTTP adapter for the request/response
84
- const adapter = HttpAdapterFactory.getAdapter(req, res);
85
- const adaptedReq = adapter.adaptRequest(req);
86
- const adaptedRes = adapter.adaptResponse(res);
87
- const sessionId = adaptedReq.headers['mcp-session-id'] as
88
- | string
89
- | undefined;
90
-
91
- this.logger.debug(
92
- `[${sessionId || 'No-Session'}] Received MCP request: ${JSON.stringify(body)}`,
93
- );
94
-
95
- try {
96
- if (this.isStatelessMode) {
97
- return this.handleStatelessRequest(adaptedReq, adaptedRes, body);
98
- } else {
99
- return this.handleStatefulRequest(adaptedReq, adaptedRes, body);
100
- }
101
- } catch (error) {
102
- this.logger.error(
103
- `[${sessionId || 'No-Session'}] Error handling MCP request: ${error}`,
104
- );
105
- if (!adaptedRes.headersSent) {
106
- adaptedRes.status(500).json({
107
- jsonrpc: '2.0',
108
- error: {
109
- code: -32603,
110
- message: 'Internal server error',
111
- },
112
- id: null,
113
- });
114
- }
115
- }
116
- }
117
-
118
- /**
119
- * Handle requests in stateless mode
120
- */
121
- async handleStatelessRequest(
122
- req: any,
123
- res: HttpResponse,
124
- body: unknown,
125
- ): Promise<void> {
126
- this.logger.debug(
127
- `[Stateless] Handling stateless MCP request at ${req.url}`,
128
- );
129
-
130
- let server: McpServer | null = null;
131
- let transport: StreamableHTTPServerTransport | null = null;
132
-
133
- try {
134
- // Create a new server and transport for each request
135
- const stateless = await this.createStatelessServer(req);
136
- server = stateless.server;
137
- transport = stateless.transport;
138
-
139
- // Handle the request
140
- await transport.handleRequest(req.raw, res.raw, body);
141
-
142
- // Clean up after response is sent
143
- res.raw.on('finish', async () => {
144
- this.logger.debug('[Stateless] Response sent, cleaning up');
145
- try {
146
- if (transport) await transport.close();
147
- if (server) await server.close();
148
- } catch (error) {
149
- this.logger.error('[Stateless] Error cleaning up:', error);
150
- }
151
- });
152
- } catch (error) {
153
- this.logger.error(
154
- `[Stateless] Error in stateless request handling: ${error}`,
155
- );
156
- // Clean up on error
157
- try {
158
- if (transport) await transport.close();
159
- if (server) await server.close();
160
- } catch (error) {
161
- this.logger.error('[Stateless] Error cleaning up on error:', error);
162
- }
163
- throw error;
164
- }
165
- }
166
-
167
- /**
168
- * Handle requests in stateful mode
169
- */
170
- async handleStatefulRequest(
171
- req: HttpRequest,
172
- res: HttpResponse,
173
- body: unknown,
174
- ): Promise<void> {
175
- const sessionId = req.headers['mcp-session-id'] as string | undefined;
176
-
177
- this.logger.debug(`[${sessionId || 'New'}] Handling stateful MCP request`);
178
-
179
- // Case 1: New initialization request
180
- if (!sessionId && this.isInitializeRequest(body)) {
181
- // Validate it's not a batch with multiple requests
182
- if (Array.isArray(body) && body.length > 1) {
183
- res.status(400).json({
184
- jsonrpc: '2.0',
185
- error: {
186
- code: -32600,
187
- message:
188
- 'Invalid Request: Only one initialization request is allowed',
189
- },
190
- id: null,
191
- });
192
- return;
193
- }
194
-
195
- const mcpServer = createMcpServer(
196
- this.mcpModuleId,
197
- this.toolRegistry,
198
- this.options,
199
- this.logger,
200
- );
201
-
202
- // Create transport with session management
203
- const transport = new StreamableHTTPServerTransport({
204
- sessionIdGenerator:
205
- this.options.streamableHttp?.sessionIdGenerator ||
206
- (() => randomUUID()),
207
- enableJsonResponse:
208
- this.options.streamableHttp?.enableJsonResponse || false,
209
- onsessioninitialized: async (sid: string) => {
210
- this.logger.debug(`[${sid}] Session initialized, storing references`);
211
- // Store all session data
212
- this.transports[sid] = transport;
213
- this.mcpServers[sid] = mcpServer;
214
-
215
- // Resolve and store the executor for this session
216
- const contextId = ContextIdFactory.getByRequest(req);
217
- const executor = await this.moduleRef.resolve(
218
- McpExecutorService,
219
- contextId,
220
- { strict: true },
221
- );
222
- this.executors[sid] = executor;
223
-
224
- // Register request handlers ONCE during initialization
225
- executor.registerRequestHandlers(mcpServer, req);
226
- },
227
- onsessionclosed: async (sid: string) => {
228
- this.logger.debug(`[${sid}] Session closed via DELETE`);
229
- await this.cleanupSession(sid);
230
- },
231
- });
232
-
233
- // Connect transport to server
234
- await mcpServer.connect(transport);
235
-
236
- // Handle the initialization request
237
- await transport.handleRequest(req.raw, res.raw, body);
238
-
239
- this.logger.log(`[${transport.sessionId}] New session initialized`);
240
- return;
241
- }
242
-
243
- // Case 2: Request with session ID
244
- if (sessionId) {
245
- // Check if session exists
246
- if (!this.transports[sessionId]) {
247
- this.logger.debug(`[${sessionId}] Session not found`);
248
- res.status(404).json({
249
- jsonrpc: '2.0',
250
- error: {
251
- code: -32001,
252
- message: 'Session not found',
253
- },
254
- id: null,
255
- });
256
- return;
257
- }
258
-
259
- // Reject re-initialization attempts
260
- if (this.isInitializeRequest(body)) {
261
- res.status(400).json({
262
- jsonrpc: '2.0',
263
- error: {
264
- code: -32600,
265
- message: 'Invalid Request: Server already initialized',
266
- },
267
- id: null,
268
- });
269
- return;
270
- }
271
-
272
- // Use existing transport
273
- const transport = this.transports[sessionId];
274
-
275
- this.logger.debug(
276
- `[${sessionId}] Handling request with existing session`,
277
- );
278
-
279
- // Handle the request with existing transport and handlers
280
- await transport.handleRequest(req.raw, res.raw, body);
281
- return;
282
- }
283
-
284
- // Case 3: No session ID and not initialization
285
- res.status(400).json({
286
- jsonrpc: '2.0',
287
- error: {
288
- code: -32000,
289
- message: 'Bad Request: Mcp-Session-Id header is required',
290
- },
291
- id: null,
292
- });
293
- }
294
-
295
- /**
296
- * Handle GET requests for SSE streams
297
- */
298
- async handleGetRequest(req: any, res: any): Promise<void> {
299
- const adapter = HttpAdapterFactory.getAdapter(req, res);
300
- const adaptedReq = adapter.adaptRequest(req);
301
- const adaptedRes = adapter.adaptResponse(res);
302
-
303
- if (this.isStatelessMode) {
304
- adaptedRes.status(405).json({
305
- jsonrpc: '2.0',
306
- error: {
307
- code: -32000,
308
- message: 'Method not allowed in stateless mode',
309
- },
310
- id: null,
311
- });
312
- return;
313
- }
314
-
315
- const sessionId = adaptedReq.headers['mcp-session-id'] as
316
- | string
317
- | undefined;
318
-
319
- if (!sessionId) {
320
- adaptedRes.status(400).json({
321
- jsonrpc: '2.0',
322
- error: {
323
- code: -32000,
324
- message: 'Bad Request: Mcp-Session-Id header is required',
325
- },
326
- id: null,
327
- });
328
- return;
329
- }
330
-
331
- if (!this.transports[sessionId]) {
332
- this.logger.debug(`[${sessionId}] GET request - session not found`);
333
- adaptedRes.status(404).json({
334
- jsonrpc: '2.0',
335
- error: {
336
- code: -32001,
337
- message: 'Session not found',
338
- },
339
- id: null,
340
- });
341
- return;
342
- }
343
-
344
- this.logger.debug(`[${sessionId}] Establishing SSE stream`);
345
- const transport = this.transports[sessionId];
346
- await transport.handleRequest(adaptedReq.raw, adaptedRes.raw);
347
- }
348
-
349
- /**
350
- * Handle DELETE requests for terminating sessions
351
- */
352
- async handleDeleteRequest(req: any, res: any): Promise<void> {
353
- const adapter = HttpAdapterFactory.getAdapter(req, res);
354
- const adaptedReq = adapter.adaptRequest(req);
355
- const adaptedRes = adapter.adaptResponse(res);
356
-
357
- if (this.isStatelessMode) {
358
- adaptedRes.status(405).json({
359
- jsonrpc: '2.0',
360
- error: {
361
- code: -32000,
362
- message: 'Method not allowed in stateless mode',
363
- },
364
- id: null,
365
- });
366
- return;
367
- }
368
-
369
- const sessionId = adaptedReq.headers['mcp-session-id'] as
370
- | string
371
- | undefined;
372
-
373
- if (!sessionId) {
374
- adaptedRes.status(400).json({
375
- jsonrpc: '2.0',
376
- error: {
377
- code: -32000,
378
- message: 'Bad Request: Mcp-Session-Id header is required',
379
- },
380
- id: null,
381
- });
382
- return;
383
- }
384
-
385
- if (!this.transports[sessionId]) {
386
- this.logger.debug(`[${sessionId}] DELETE request - session not found`);
387
- adaptedRes.status(404).json({
388
- jsonrpc: '2.0',
389
- error: {
390
- code: -32001,
391
- message: 'Session not found',
392
- },
393
- id: null,
394
- });
395
- return;
396
- }
397
-
398
- this.logger.debug(`[${sessionId}] Processing DELETE request`);
399
- const transport = this.transports[sessionId];
400
-
401
- // Let transport handle the DELETE request
402
- // The onsessionclosed callback will handle cleanup
403
- await transport.handleRequest(adaptedReq.raw, adaptedRes.raw);
404
- }
405
-
406
- /**
407
- * Helper function to detect initialize requests
408
- */
409
- private isInitializeRequest(body: unknown): boolean {
410
- if (Array.isArray(body)) {
411
- return body.some(
412
- (msg) =>
413
- typeof msg === 'object' &&
414
- msg !== null &&
415
- 'method' in msg &&
416
- msg.method === 'initialize',
417
- );
418
- }
419
- return (
420
- typeof body === 'object' &&
421
- body !== null &&
422
- 'method' in body &&
423
- (body as any).method === 'initialize'
424
- );
425
- }
426
-
427
- /**
428
- * Clean up session resources
429
- */
430
- private async cleanupSession(sessionId: string): Promise<void> {
431
- if (!sessionId || !this.transports[sessionId]) {
432
- return;
433
- }
434
-
435
- this.logger.debug(`[${sessionId}] Cleaning up session`);
436
-
437
- try {
438
- // Close transport if still open
439
- const transport = this.transports[sessionId];
440
- if (transport) {
441
- await transport.close();
442
- }
443
-
444
- // Close MCP server
445
- const server = this.mcpServers[sessionId];
446
- if (server) {
447
- await server.close();
448
- }
449
-
450
- // Clean up all references
451
- delete this.transports[sessionId];
452
- delete this.mcpServers[sessionId];
453
- delete this.executors[sessionId];
454
- } catch (error) {
455
- this.logger.error(`[${sessionId}] Error during cleanup:`, error);
456
- }
457
- }
458
-
459
- /**
460
- * Clean up all sessions on module destroy
461
- */
462
- async onModuleDestroy(): Promise<void> {
463
- this.logger.log('Cleaning up all MCP sessions...');
464
- const sessionIds = Object.keys(this.transports);
465
-
466
- await Promise.all(
467
- sessionIds.map((sessionId) => this.cleanupSession(sessionId)),
468
- );
469
-
470
- this.logger.log(`Cleaned up ${sessionIds.length} MCP sessions`);
471
- }
472
- }