mcp-server-framework 1.0.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 (673) hide show
  1. package/CHANGELOG.md +174 -0
  2. package/LICENSE-GPL.md +219 -0
  3. package/LICENSE.md +187 -0
  4. package/README.md +439 -0
  5. package/build/config/config-cache.d.ts +120 -0
  6. package/build/config/config-cache.d.ts.map +1 -0
  7. package/build/config/config-cache.js +310 -0
  8. package/build/config/config-cache.js.map +1 -0
  9. package/build/config/env.d.ts +476 -0
  10. package/build/config/env.d.ts.map +1 -0
  11. package/build/config/env.js +441 -0
  12. package/build/config/env.js.map +1 -0
  13. package/build/config/extensions.d.ts +107 -0
  14. package/build/config/extensions.d.ts.map +1 -0
  15. package/build/config/extensions.js +152 -0
  16. package/build/config/extensions.js.map +1 -0
  17. package/build/config/file/index.d.ts +8 -0
  18. package/build/config/file/index.d.ts.map +1 -0
  19. package/build/config/file/index.js +10 -0
  20. package/build/config/file/index.js.map +1 -0
  21. package/build/config/file/loader.d.ts +31 -0
  22. package/build/config/file/loader.d.ts.map +1 -0
  23. package/build/config/file/loader.js +313 -0
  24. package/build/config/file/loader.js.map +1 -0
  25. package/build/config/file/schema.d.ts +583 -0
  26. package/build/config/file/schema.d.ts.map +1 -0
  27. package/build/config/file/schema.js +388 -0
  28. package/build/config/file/schema.js.map +1 -0
  29. package/build/config/index.d.ts +15 -0
  30. package/build/config/index.d.ts.map +1 -0
  31. package/build/config/index.js +27 -0
  32. package/build/config/index.js.map +1 -0
  33. package/build/config/startup-warnings.d.ts +46 -0
  34. package/build/config/startup-warnings.d.ts.map +1 -0
  35. package/build/config/startup-warnings.js +61 -0
  36. package/build/config/startup-warnings.js.map +1 -0
  37. package/build/connection/connection-state.d.ts +196 -0
  38. package/build/connection/connection-state.d.ts.map +1 -0
  39. package/build/connection/connection-state.js +426 -0
  40. package/build/connection/connection-state.js.map +1 -0
  41. package/build/connection/core/base.d.ts +43 -0
  42. package/build/connection/core/base.d.ts.map +1 -0
  43. package/build/connection/core/base.js +82 -0
  44. package/build/connection/core/base.js.map +1 -0
  45. package/build/connection/core/constants.d.ts +121 -0
  46. package/build/connection/core/constants.d.ts.map +1 -0
  47. package/build/connection/core/constants.js +151 -0
  48. package/build/connection/core/constants.js.map +1 -0
  49. package/build/connection/core/index.d.ts +13 -0
  50. package/build/connection/core/index.d.ts.map +1 -0
  51. package/build/connection/core/index.js +14 -0
  52. package/build/connection/core/index.js.map +1 -0
  53. package/build/connection/core/types.d.ts +102 -0
  54. package/build/connection/core/types.d.ts.map +1 -0
  55. package/build/connection/core/types.js +31 -0
  56. package/build/connection/core/types.js.map +1 -0
  57. package/build/connection/index.d.ts +19 -0
  58. package/build/connection/index.d.ts.map +1 -0
  59. package/build/connection/index.js +22 -0
  60. package/build/connection/index.js.map +1 -0
  61. package/build/connection/types.d.ts +125 -0
  62. package/build/connection/types.d.ts.map +1 -0
  63. package/build/connection/types.js +39 -0
  64. package/build/connection/types.js.map +1 -0
  65. package/build/errors/categories/auth.d.ts +59 -0
  66. package/build/errors/categories/auth.d.ts.map +1 -0
  67. package/build/errors/categories/auth.js +111 -0
  68. package/build/errors/categories/auth.js.map +1 -0
  69. package/build/errors/categories/connection.d.ts +70 -0
  70. package/build/errors/categories/connection.d.ts.map +1 -0
  71. package/build/errors/categories/connection.js +120 -0
  72. package/build/errors/categories/connection.js.map +1 -0
  73. package/build/errors/categories/index.d.ts +14 -0
  74. package/build/errors/categories/index.d.ts.map +1 -0
  75. package/build/errors/categories/index.js +20 -0
  76. package/build/errors/categories/index.js.map +1 -0
  77. package/build/errors/categories/operation.d.ts +83 -0
  78. package/build/errors/categories/operation.d.ts.map +1 -0
  79. package/build/errors/categories/operation.js +149 -0
  80. package/build/errors/categories/operation.js.map +1 -0
  81. package/build/errors/categories/protocol.d.ts +68 -0
  82. package/build/errors/categories/protocol.d.ts.map +1 -0
  83. package/build/errors/categories/protocol.js +135 -0
  84. package/build/errors/categories/protocol.js.map +1 -0
  85. package/build/errors/categories/session.d.ts +50 -0
  86. package/build/errors/categories/session.d.ts.map +1 -0
  87. package/build/errors/categories/session.js +97 -0
  88. package/build/errors/categories/session.js.map +1 -0
  89. package/build/errors/categories/system.d.ts +95 -0
  90. package/build/errors/categories/system.d.ts.map +1 -0
  91. package/build/errors/categories/system.js +190 -0
  92. package/build/errors/categories/system.js.map +1 -0
  93. package/build/errors/categories/transport.d.ts +70 -0
  94. package/build/errors/categories/transport.d.ts.map +1 -0
  95. package/build/errors/categories/transport.js +148 -0
  96. package/build/errors/categories/transport.js.map +1 -0
  97. package/build/errors/categories/validation.d.ts +140 -0
  98. package/build/errors/categories/validation.d.ts.map +1 -0
  99. package/build/errors/categories/validation.js +311 -0
  100. package/build/errors/categories/validation.js.map +1 -0
  101. package/build/errors/core/base.d.ts +103 -0
  102. package/build/errors/core/base.d.ts.map +1 -0
  103. package/build/errors/core/base.js +219 -0
  104. package/build/errors/core/base.js.map +1 -0
  105. package/build/errors/core/constants.d.ts +40 -0
  106. package/build/errors/core/constants.d.ts.map +1 -0
  107. package/build/errors/core/constants.js +49 -0
  108. package/build/errors/core/constants.js.map +1 -0
  109. package/build/errors/core/error-codes.d.ts +72 -0
  110. package/build/errors/core/error-codes.d.ts.map +1 -0
  111. package/build/errors/core/error-codes.js +88 -0
  112. package/build/errors/core/error-codes.js.map +1 -0
  113. package/build/errors/core/http.d.ts +69 -0
  114. package/build/errors/core/http.d.ts.map +1 -0
  115. package/build/errors/core/http.js +106 -0
  116. package/build/errors/core/http.js.map +1 -0
  117. package/build/errors/core/index.d.ts +23 -0
  118. package/build/errors/core/index.d.ts.map +1 -0
  119. package/build/errors/core/index.js +41 -0
  120. package/build/errors/core/index.js.map +1 -0
  121. package/build/errors/core/json-rpc.d.ts +69 -0
  122. package/build/errors/core/json-rpc.d.ts.map +1 -0
  123. package/build/errors/core/json-rpc.js +79 -0
  124. package/build/errors/core/json-rpc.js.map +1 -0
  125. package/build/errors/core/messages.d.ts +51 -0
  126. package/build/errors/core/messages.d.ts.map +1 -0
  127. package/build/errors/core/messages.js +59 -0
  128. package/build/errors/core/messages.js.map +1 -0
  129. package/build/errors/core/types.d.ts +80 -0
  130. package/build/errors/core/types.d.ts.map +1 -0
  131. package/build/errors/core/types.js +10 -0
  132. package/build/errors/core/types.js.map +1 -0
  133. package/build/errors/factory.d.ts +199 -0
  134. package/build/errors/factory.d.ts.map +1 -0
  135. package/build/errors/factory.js +244 -0
  136. package/build/errors/factory.js.map +1 -0
  137. package/build/errors/index.d.ts +35 -0
  138. package/build/errors/index.d.ts.map +1 -0
  139. package/build/errors/index.js +67 -0
  140. package/build/errors/index.js.map +1 -0
  141. package/build/index.d.ts +93 -0
  142. package/build/index.d.ts.map +1 -0
  143. package/build/index.js +107 -0
  144. package/build/index.js.map +1 -0
  145. package/build/logger/core/constants.d.ts +143 -0
  146. package/build/logger/core/constants.d.ts.map +1 -0
  147. package/build/logger/core/constants.js +206 -0
  148. package/build/logger/core/constants.js.map +1 -0
  149. package/build/logger/core/context.d.ts +170 -0
  150. package/build/logger/core/context.d.ts.map +1 -0
  151. package/build/logger/core/context.js +237 -0
  152. package/build/logger/core/context.js.map +1 -0
  153. package/build/logger/core/errors.d.ts +101 -0
  154. package/build/logger/core/errors.d.ts.map +1 -0
  155. package/build/logger/core/errors.js +128 -0
  156. package/build/logger/core/errors.js.map +1 -0
  157. package/build/logger/core/format.d.ts +40 -0
  158. package/build/logger/core/format.d.ts.map +1 -0
  159. package/build/logger/core/format.js +47 -0
  160. package/build/logger/core/format.js.map +1 -0
  161. package/build/logger/core/index.d.ts +19 -0
  162. package/build/logger/core/index.d.ts.map +1 -0
  163. package/build/logger/core/index.js +47 -0
  164. package/build/logger/core/index.js.map +1 -0
  165. package/build/logger/core/trace-context.d.ts +51 -0
  166. package/build/logger/core/trace-context.d.ts.map +1 -0
  167. package/build/logger/core/trace-context.js +42 -0
  168. package/build/logger/core/trace-context.js.map +1 -0
  169. package/build/logger/core/types.d.ts +233 -0
  170. package/build/logger/core/types.d.ts.map +1 -0
  171. package/build/logger/core/types.js +10 -0
  172. package/build/logger/core/types.js.map +1 -0
  173. package/build/logger/factory.d.ts +150 -0
  174. package/build/logger/factory.d.ts.map +1 -0
  175. package/build/logger/factory.js +236 -0
  176. package/build/logger/factory.js.map +1 -0
  177. package/build/logger/formatters/index.d.ts +12 -0
  178. package/build/logger/formatters/index.d.ts.map +1 -0
  179. package/build/logger/formatters/index.js +15 -0
  180. package/build/logger/formatters/index.js.map +1 -0
  181. package/build/logger/formatters/json-formatter.d.ts +54 -0
  182. package/build/logger/formatters/json-formatter.d.ts.map +1 -0
  183. package/build/logger/formatters/json-formatter.js +80 -0
  184. package/build/logger/formatters/json-formatter.js.map +1 -0
  185. package/build/logger/formatters/schema.d.ts +230 -0
  186. package/build/logger/formatters/schema.d.ts.map +1 -0
  187. package/build/logger/formatters/schema.js +278 -0
  188. package/build/logger/formatters/schema.js.map +1 -0
  189. package/build/logger/formatters/text-formatter.d.ts +50 -0
  190. package/build/logger/formatters/text-formatter.d.ts.map +1 -0
  191. package/build/logger/formatters/text-formatter.js +93 -0
  192. package/build/logger/formatters/text-formatter.js.map +1 -0
  193. package/build/logger/index.d.ts +39 -0
  194. package/build/logger/index.d.ts.map +1 -0
  195. package/build/logger/index.js +43 -0
  196. package/build/logger/index.js.map +1 -0
  197. package/build/logger/logger.d.ts +278 -0
  198. package/build/logger/logger.d.ts.map +1 -0
  199. package/build/logger/logger.js +459 -0
  200. package/build/logger/logger.js.map +1 -0
  201. package/build/logger/mcp-logger.d.ts +177 -0
  202. package/build/logger/mcp-logger.d.ts.map +1 -0
  203. package/build/logger/mcp-logger.js +294 -0
  204. package/build/logger/mcp-logger.js.map +1 -0
  205. package/build/logger/scrubbing/index.d.ts +14 -0
  206. package/build/logger/scrubbing/index.d.ts.map +1 -0
  207. package/build/logger/scrubbing/index.js +16 -0
  208. package/build/logger/scrubbing/index.js.map +1 -0
  209. package/build/logger/scrubbing/injection-guard.d.ts +69 -0
  210. package/build/logger/scrubbing/injection-guard.d.ts.map +1 -0
  211. package/build/logger/scrubbing/injection-guard.js +102 -0
  212. package/build/logger/scrubbing/injection-guard.js.map +1 -0
  213. package/build/logger/scrubbing/secret-scrubber.d.ts +72 -0
  214. package/build/logger/scrubbing/secret-scrubber.d.ts.map +1 -0
  215. package/build/logger/scrubbing/secret-scrubber.js +177 -0
  216. package/build/logger/scrubbing/secret-scrubber.js.map +1 -0
  217. package/build/logger/writers/base-writer.d.ts +45 -0
  218. package/build/logger/writers/base-writer.d.ts.map +1 -0
  219. package/build/logger/writers/base-writer.js +41 -0
  220. package/build/logger/writers/base-writer.js.map +1 -0
  221. package/build/logger/writers/composite-writer.d.ts +83 -0
  222. package/build/logger/writers/composite-writer.d.ts.map +1 -0
  223. package/build/logger/writers/composite-writer.js +121 -0
  224. package/build/logger/writers/composite-writer.js.map +1 -0
  225. package/build/logger/writers/console-writer.d.ts +59 -0
  226. package/build/logger/writers/console-writer.d.ts.map +1 -0
  227. package/build/logger/writers/console-writer.js +73 -0
  228. package/build/logger/writers/console-writer.js.map +1 -0
  229. package/build/logger/writers/file-writer.d.ts +160 -0
  230. package/build/logger/writers/file-writer.d.ts.map +1 -0
  231. package/build/logger/writers/file-writer.js +345 -0
  232. package/build/logger/writers/file-writer.js.map +1 -0
  233. package/build/logger/writers/index.d.ts +15 -0
  234. package/build/logger/writers/index.d.ts.map +1 -0
  235. package/build/logger/writers/index.js +19 -0
  236. package/build/logger/writers/index.js.map +1 -0
  237. package/build/mcp/capabilities/apps/define-app.d.ts +68 -0
  238. package/build/mcp/capabilities/apps/define-app.d.ts.map +1 -0
  239. package/build/mcp/capabilities/apps/define-app.js +127 -0
  240. package/build/mcp/capabilities/apps/define-app.js.map +1 -0
  241. package/build/mcp/capabilities/apps/index.d.ts +10 -0
  242. package/build/mcp/capabilities/apps/index.d.ts.map +1 -0
  243. package/build/mcp/capabilities/apps/index.js +10 -0
  244. package/build/mcp/capabilities/apps/index.js.map +1 -0
  245. package/build/mcp/capabilities/capabilities.d.ts +24 -0
  246. package/build/mcp/capabilities/capabilities.d.ts.map +1 -0
  247. package/build/mcp/capabilities/capabilities.js +50 -0
  248. package/build/mcp/capabilities/capabilities.js.map +1 -0
  249. package/build/mcp/capabilities/index.d.ts +17 -0
  250. package/build/mcp/capabilities/index.d.ts.map +1 -0
  251. package/build/mcp/capabilities/index.js +20 -0
  252. package/build/mcp/capabilities/index.js.map +1 -0
  253. package/build/mcp/capabilities/prompts/define-prompt.d.ts +95 -0
  254. package/build/mcp/capabilities/prompts/define-prompt.d.ts.map +1 -0
  255. package/build/mcp/capabilities/prompts/define-prompt.js +109 -0
  256. package/build/mcp/capabilities/prompts/define-prompt.js.map +1 -0
  257. package/build/mcp/capabilities/prompts/index.d.ts +10 -0
  258. package/build/mcp/capabilities/prompts/index.d.ts.map +1 -0
  259. package/build/mcp/capabilities/prompts/index.js +10 -0
  260. package/build/mcp/capabilities/prompts/index.js.map +1 -0
  261. package/build/mcp/capabilities/registry/base-registry.d.ts +95 -0
  262. package/build/mcp/capabilities/registry/base-registry.d.ts.map +1 -0
  263. package/build/mcp/capabilities/registry/base-registry.js +149 -0
  264. package/build/mcp/capabilities/registry/base-registry.js.map +1 -0
  265. package/build/mcp/capabilities/registry/index.d.ts +16 -0
  266. package/build/mcp/capabilities/registry/index.d.ts.map +1 -0
  267. package/build/mcp/capabilities/registry/index.js +34 -0
  268. package/build/mcp/capabilities/registry/index.js.map +1 -0
  269. package/build/mcp/capabilities/registry/prompt-registry.d.ts +116 -0
  270. package/build/mcp/capabilities/registry/prompt-registry.d.ts.map +1 -0
  271. package/build/mcp/capabilities/registry/prompt-registry.js +232 -0
  272. package/build/mcp/capabilities/registry/prompt-registry.js.map +1 -0
  273. package/build/mcp/capabilities/registry/reset.d.ts +30 -0
  274. package/build/mcp/capabilities/registry/reset.d.ts.map +1 -0
  275. package/build/mcp/capabilities/registry/reset.js +48 -0
  276. package/build/mcp/capabilities/registry/reset.js.map +1 -0
  277. package/build/mcp/capabilities/registry/resource-registry.d.ts +152 -0
  278. package/build/mcp/capabilities/registry/resource-registry.d.ts.map +1 -0
  279. package/build/mcp/capabilities/registry/resource-registry.js +430 -0
  280. package/build/mcp/capabilities/registry/resource-registry.js.map +1 -0
  281. package/build/mcp/capabilities/registry/scope-enforcement.d.ts +48 -0
  282. package/build/mcp/capabilities/registry/scope-enforcement.d.ts.map +1 -0
  283. package/build/mcp/capabilities/registry/scope-enforcement.js +62 -0
  284. package/build/mcp/capabilities/registry/scope-enforcement.js.map +1 -0
  285. package/build/mcp/capabilities/registry/task-tool-registry.d.ts +96 -0
  286. package/build/mcp/capabilities/registry/task-tool-registry.d.ts.map +1 -0
  287. package/build/mcp/capabilities/registry/task-tool-registry.js +190 -0
  288. package/build/mcp/capabilities/registry/task-tool-registry.js.map +1 -0
  289. package/build/mcp/capabilities/registry/tool-registry.d.ts +100 -0
  290. package/build/mcp/capabilities/registry/tool-registry.d.ts.map +1 -0
  291. package/build/mcp/capabilities/registry/tool-registry.js +242 -0
  292. package/build/mcp/capabilities/registry/tool-registry.js.map +1 -0
  293. package/build/mcp/capabilities/resources/define-resource.d.ts +103 -0
  294. package/build/mcp/capabilities/resources/define-resource.d.ts.map +1 -0
  295. package/build/mcp/capabilities/resources/define-resource.js +137 -0
  296. package/build/mcp/capabilities/resources/define-resource.js.map +1 -0
  297. package/build/mcp/capabilities/resources/index.d.ts +10 -0
  298. package/build/mcp/capabilities/resources/index.d.ts.map +1 -0
  299. package/build/mcp/capabilities/resources/index.js +10 -0
  300. package/build/mcp/capabilities/resources/index.js.map +1 -0
  301. package/build/mcp/capabilities/server-capabilities.d.ts +33 -0
  302. package/build/mcp/capabilities/server-capabilities.d.ts.map +1 -0
  303. package/build/mcp/capabilities/server-capabilities.js +16 -0
  304. package/build/mcp/capabilities/server-capabilities.js.map +1 -0
  305. package/build/mcp/capabilities/tasks/define-task.d.ts +75 -0
  306. package/build/mcp/capabilities/tasks/define-task.d.ts.map +1 -0
  307. package/build/mcp/capabilities/tasks/define-task.js +93 -0
  308. package/build/mcp/capabilities/tasks/define-task.js.map +1 -0
  309. package/build/mcp/capabilities/tasks/index.d.ts +11 -0
  310. package/build/mcp/capabilities/tasks/index.d.ts.map +1 -0
  311. package/build/mcp/capabilities/tasks/index.js +11 -0
  312. package/build/mcp/capabilities/tasks/index.js.map +1 -0
  313. package/build/mcp/capabilities/tools/define-tool.d.ts +62 -0
  314. package/build/mcp/capabilities/tools/define-tool.d.ts.map +1 -0
  315. package/build/mcp/capabilities/tools/define-tool.js +73 -0
  316. package/build/mcp/capabilities/tools/define-tool.js.map +1 -0
  317. package/build/mcp/capabilities/tools/index.d.ts +10 -0
  318. package/build/mcp/capabilities/tools/index.d.ts.map +1 -0
  319. package/build/mcp/capabilities/tools/index.js +10 -0
  320. package/build/mcp/capabilities/tools/index.js.map +1 -0
  321. package/build/mcp/handlers/index.d.ts +19 -0
  322. package/build/mcp/handlers/index.d.ts.map +1 -0
  323. package/build/mcp/handlers/index.js +26 -0
  324. package/build/mcp/handlers/index.js.map +1 -0
  325. package/build/mcp/handlers/ping.d.ts +27 -0
  326. package/build/mcp/handlers/ping.d.ts.map +1 -0
  327. package/build/mcp/handlers/ping.js +61 -0
  328. package/build/mcp/handlers/ping.js.map +1 -0
  329. package/build/mcp/handlers/progress.d.ts +41 -0
  330. package/build/mcp/handlers/progress.d.ts.map +1 -0
  331. package/build/mcp/handlers/progress.js +79 -0
  332. package/build/mcp/handlers/progress.js.map +1 -0
  333. package/build/mcp/index.d.ts +28 -0
  334. package/build/mcp/index.d.ts.map +1 -0
  335. package/build/mcp/index.js +34 -0
  336. package/build/mcp/index.js.map +1 -0
  337. package/build/mcp/responses/helpers.d.ts +146 -0
  338. package/build/mcp/responses/helpers.d.ts.map +1 -0
  339. package/build/mcp/responses/helpers.js +197 -0
  340. package/build/mcp/responses/helpers.js.map +1 -0
  341. package/build/mcp/responses/index.d.ts +9 -0
  342. package/build/mcp/responses/index.d.ts.map +1 -0
  343. package/build/mcp/responses/index.js +12 -0
  344. package/build/mcp/responses/index.js.map +1 -0
  345. package/build/mcp/types/context.d.ts +371 -0
  346. package/build/mcp/types/context.d.ts.map +1 -0
  347. package/build/mcp/types/context.js +17 -0
  348. package/build/mcp/types/context.js.map +1 -0
  349. package/build/mcp/types/definition.d.ts +727 -0
  350. package/build/mcp/types/definition.d.ts.map +1 -0
  351. package/build/mcp/types/definition.js +29 -0
  352. package/build/mcp/types/definition.js.map +1 -0
  353. package/build/mcp/types/handler.d.ts +58 -0
  354. package/build/mcp/types/handler.d.ts.map +1 -0
  355. package/build/mcp/types/handler.js +10 -0
  356. package/build/mcp/types/handler.js.map +1 -0
  357. package/build/mcp/types/index.d.ts +21 -0
  358. package/build/mcp/types/index.d.ts.map +1 -0
  359. package/build/mcp/types/index.js +18 -0
  360. package/build/mcp/types/index.js.map +1 -0
  361. package/build/mcp/types/response.d.ts +79 -0
  362. package/build/mcp/types/response.d.ts.map +1 -0
  363. package/build/mcp/types/response.js +10 -0
  364. package/build/mcp/types/response.js.map +1 -0
  365. package/build/server/auth/auth-context.d.ts +52 -0
  366. package/build/server/auth/auth-context.d.ts.map +1 -0
  367. package/build/server/auth/auth-context.js +45 -0
  368. package/build/server/auth/auth-context.js.map +1 -0
  369. package/build/server/auth/guards.d.ts +72 -0
  370. package/build/server/auth/guards.d.ts.map +1 -0
  371. package/build/server/auth/guards.js +103 -0
  372. package/build/server/auth/guards.js.map +1 -0
  373. package/build/server/auth/index.d.ts +21 -0
  374. package/build/server/auth/index.d.ts.map +1 -0
  375. package/build/server/auth/index.js +20 -0
  376. package/build/server/auth/index.js.map +1 -0
  377. package/build/server/auth/oidc-discovery.d.ts +68 -0
  378. package/build/server/auth/oidc-discovery.d.ts.map +1 -0
  379. package/build/server/auth/oidc-discovery.js +234 -0
  380. package/build/server/auth/oidc-discovery.js.map +1 -0
  381. package/build/server/auth/oidc-provider.d.ts +96 -0
  382. package/build/server/auth/oidc-provider.d.ts.map +1 -0
  383. package/build/server/auth/oidc-provider.js +126 -0
  384. package/build/server/auth/oidc-provider.js.map +1 -0
  385. package/build/server/auth/types.d.ts +204 -0
  386. package/build/server/auth/types.d.ts.map +1 -0
  387. package/build/server/auth/types.js +29 -0
  388. package/build/server/auth/types.js.map +1 -0
  389. package/build/server/auth/upstream-provider.d.ts +161 -0
  390. package/build/server/auth/upstream-provider.d.ts.map +1 -0
  391. package/build/server/auth/upstream-provider.js +411 -0
  392. package/build/server/auth/upstream-provider.js.map +1 -0
  393. package/build/server/builder/constants.d.ts +45 -0
  394. package/build/server/builder/constants.d.ts.map +1 -0
  395. package/build/server/builder/constants.js +54 -0
  396. package/build/server/builder/constants.js.map +1 -0
  397. package/build/server/builder/index.d.ts +24 -0
  398. package/build/server/builder/index.d.ts.map +1 -0
  399. package/build/server/builder/index.js +25 -0
  400. package/build/server/builder/index.js.map +1 -0
  401. package/build/server/builder/primitive-collector.d.ts +24 -0
  402. package/build/server/builder/primitive-collector.d.ts.map +1 -0
  403. package/build/server/builder/primitive-collector.js +89 -0
  404. package/build/server/builder/primitive-collector.js.map +1 -0
  405. package/build/server/builder/server-builder.d.ts +53 -0
  406. package/build/server/builder/server-builder.d.ts.map +1 -0
  407. package/build/server/builder/server-builder.js +132 -0
  408. package/build/server/builder/server-builder.js.map +1 -0
  409. package/build/server/builder/types.d.ts +93 -0
  410. package/build/server/builder/types.d.ts.map +1 -0
  411. package/build/server/builder/types.js +25 -0
  412. package/build/server/builder/types.js.map +1 -0
  413. package/build/server/builder/validation.d.ts +36 -0
  414. package/build/server/builder/validation.d.ts.map +1 -0
  415. package/build/server/builder/validation.js +44 -0
  416. package/build/server/builder/validation.js.map +1 -0
  417. package/build/server/create-server.d.ts +57 -0
  418. package/build/server/create-server.d.ts.map +1 -0
  419. package/build/server/create-server.js +104 -0
  420. package/build/server/create-server.js.map +1 -0
  421. package/build/server/http/express-app.d.ts +103 -0
  422. package/build/server/http/express-app.d.ts.map +1 -0
  423. package/build/server/http/express-app.js +391 -0
  424. package/build/server/http/express-app.js.map +1 -0
  425. package/build/server/http/http-server.d.ts +67 -0
  426. package/build/server/http/http-server.d.ts.map +1 -0
  427. package/build/server/http/http-server.js +188 -0
  428. package/build/server/http/http-server.js.map +1 -0
  429. package/build/server/http/http-transport.d.ts +33 -0
  430. package/build/server/http/http-transport.d.ts.map +1 -0
  431. package/build/server/http/http-transport.js +84 -0
  432. package/build/server/http/http-transport.js.map +1 -0
  433. package/build/server/http/index.d.ts +15 -0
  434. package/build/server/http/index.d.ts.map +1 -0
  435. package/build/server/http/index.js +11 -0
  436. package/build/server/http/index.js.map +1 -0
  437. package/build/server/index.d.ts +25 -0
  438. package/build/server/index.d.ts.map +1 -0
  439. package/build/server/index.js +41 -0
  440. package/build/server/index.js.map +1 -0
  441. package/build/server/lifecycle.d.ts +114 -0
  442. package/build/server/lifecycle.d.ts.map +1 -0
  443. package/build/server/lifecycle.js +30 -0
  444. package/build/server/lifecycle.js.map +1 -0
  445. package/build/server/middleware/bearer-auth.d.ts +43 -0
  446. package/build/server/middleware/bearer-auth.d.ts.map +1 -0
  447. package/build/server/middleware/bearer-auth.js +75 -0
  448. package/build/server/middleware/bearer-auth.js.map +1 -0
  449. package/build/server/middleware/custom-header-auth.d.ts +40 -0
  450. package/build/server/middleware/custom-header-auth.d.ts.map +1 -0
  451. package/build/server/middleware/custom-header-auth.js +90 -0
  452. package/build/server/middleware/custom-header-auth.js.map +1 -0
  453. package/build/server/middleware/dns-rebinding.d.ts +25 -0
  454. package/build/server/middleware/dns-rebinding.d.ts.map +1 -0
  455. package/build/server/middleware/dns-rebinding.js +94 -0
  456. package/build/server/middleware/dns-rebinding.js.map +1 -0
  457. package/build/server/middleware/index.d.ts +69 -0
  458. package/build/server/middleware/index.d.ts.map +1 -0
  459. package/build/server/middleware/index.js +68 -0
  460. package/build/server/middleware/index.js.map +1 -0
  461. package/build/server/middleware/logging.d.ts +21 -0
  462. package/build/server/middleware/logging.d.ts.map +1 -0
  463. package/build/server/middleware/logging.js +36 -0
  464. package/build/server/middleware/logging.js.map +1 -0
  465. package/build/server/middleware/oauth-router.d.ts +50 -0
  466. package/build/server/middleware/oauth-router.d.ts.map +1 -0
  467. package/build/server/middleware/oauth-router.js +53 -0
  468. package/build/server/middleware/oauth-router.js.map +1 -0
  469. package/build/server/middleware/protocol-version.d.ts +13 -0
  470. package/build/server/middleware/protocol-version.d.ts.map +1 -0
  471. package/build/server/middleware/protocol-version.js +48 -0
  472. package/build/server/middleware/protocol-version.js.map +1 -0
  473. package/build/server/middleware/rate-limit.d.ts +47 -0
  474. package/build/server/middleware/rate-limit.d.ts.map +1 -0
  475. package/build/server/middleware/rate-limit.js +109 -0
  476. package/build/server/middleware/rate-limit.js.map +1 -0
  477. package/build/server/middleware/trust-proxy.d.ts +37 -0
  478. package/build/server/middleware/trust-proxy.d.ts.map +1 -0
  479. package/build/server/middleware/trust-proxy.js +154 -0
  480. package/build/server/middleware/trust-proxy.js.map +1 -0
  481. package/build/server/option-overrides.d.ts +25 -0
  482. package/build/server/option-overrides.d.ts.map +1 -0
  483. package/build/server/option-overrides.js +85 -0
  484. package/build/server/option-overrides.js.map +1 -0
  485. package/build/server/routes/health.d.ts +87 -0
  486. package/build/server/routes/health.d.ts.map +1 -0
  487. package/build/server/routes/health.js +183 -0
  488. package/build/server/routes/health.js.map +1 -0
  489. package/build/server/routes/index.d.ts +16 -0
  490. package/build/server/routes/index.d.ts.map +1 -0
  491. package/build/server/routes/index.js +18 -0
  492. package/build/server/routes/index.js.map +1 -0
  493. package/build/server/routes/metrics.d.ts +40 -0
  494. package/build/server/routes/metrics.d.ts.map +1 -0
  495. package/build/server/routes/metrics.js +81 -0
  496. package/build/server/routes/metrics.js.map +1 -0
  497. package/build/server/routes/oauth-router.d.ts +50 -0
  498. package/build/server/routes/oauth-router.d.ts.map +1 -0
  499. package/build/server/routes/oauth-router.js +53 -0
  500. package/build/server/routes/oauth-router.js.map +1 -0
  501. package/build/server/routes/readiness-status.d.ts +25 -0
  502. package/build/server/routes/readiness-status.d.ts.map +1 -0
  503. package/build/server/routes/readiness-status.js +27 -0
  504. package/build/server/routes/readiness-status.js.map +1 -0
  505. package/build/server/routes/sse-router.d.ts +43 -0
  506. package/build/server/routes/sse-router.d.ts.map +1 -0
  507. package/build/server/routes/sse-router.js +92 -0
  508. package/build/server/routes/sse-router.js.map +1 -0
  509. package/build/server/routes/streamable-http-router.d.ts +36 -0
  510. package/build/server/routes/streamable-http-router.d.ts.map +1 -0
  511. package/build/server/routes/streamable-http-router.js +59 -0
  512. package/build/server/routes/streamable-http-router.js.map +1 -0
  513. package/build/server/server-instance.d.ts +185 -0
  514. package/build/server/server-instance.d.ts.map +1 -0
  515. package/build/server/server-instance.js +615 -0
  516. package/build/server/server-instance.js.map +1 -0
  517. package/build/server/server-options.d.ts +411 -0
  518. package/build/server/server-options.d.ts.map +1 -0
  519. package/build/server/server-options.js +17 -0
  520. package/build/server/server-options.js.map +1 -0
  521. package/build/server/session/in-memory-store.d.ts +128 -0
  522. package/build/server/session/in-memory-store.d.ts.map +1 -0
  523. package/build/server/session/in-memory-store.js +312 -0
  524. package/build/server/session/in-memory-store.js.map +1 -0
  525. package/build/server/session/index.d.ts +43 -0
  526. package/build/server/session/index.d.ts.map +1 -0
  527. package/build/server/session/index.js +47 -0
  528. package/build/server/session/index.js.map +1 -0
  529. package/build/server/session/mcp-session.d.ts +210 -0
  530. package/build/server/session/mcp-session.d.ts.map +1 -0
  531. package/build/server/session/mcp-session.js +428 -0
  532. package/build/server/session/mcp-session.js.map +1 -0
  533. package/build/server/session/session-factory.d.ts +119 -0
  534. package/build/server/session/session-factory.d.ts.map +1 -0
  535. package/build/server/session/session-factory.js +131 -0
  536. package/build/server/session/session-factory.js.map +1 -0
  537. package/build/server/session/session-housekeeper.d.ts +100 -0
  538. package/build/server/session/session-housekeeper.d.ts.map +1 -0
  539. package/build/server/session/session-housekeeper.js +217 -0
  540. package/build/server/session/session-housekeeper.js.map +1 -0
  541. package/build/server/session/session-manager.d.ts +227 -0
  542. package/build/server/session/session-manager.d.ts.map +1 -0
  543. package/build/server/session/session-manager.js +282 -0
  544. package/build/server/session/session-manager.js.map +1 -0
  545. package/build/server/session/session-store.d.ts +95 -0
  546. package/build/server/session/session-store.d.ts.map +1 -0
  547. package/build/server/session/session-store.js +13 -0
  548. package/build/server/session/session-store.js.map +1 -0
  549. package/build/server/session/session.d.ts +132 -0
  550. package/build/server/session/session.d.ts.map +1 -0
  551. package/build/server/session/session.js +61 -0
  552. package/build/server/session/session.js.map +1 -0
  553. package/build/server/transport/constants.d.ts +85 -0
  554. package/build/server/transport/constants.d.ts.map +1 -0
  555. package/build/server/transport/constants.js +103 -0
  556. package/build/server/transport/constants.js.map +1 -0
  557. package/build/server/transport/index.d.ts +21 -0
  558. package/build/server/transport/index.d.ts.map +1 -0
  559. package/build/server/transport/index.js +28 -0
  560. package/build/server/transport/index.js.map +1 -0
  561. package/build/server/transport/sse/handler.d.ts +46 -0
  562. package/build/server/transport/sse/handler.d.ts.map +1 -0
  563. package/build/server/transport/sse/handler.js +189 -0
  564. package/build/server/transport/sse/handler.js.map +1 -0
  565. package/build/server/transport/sse/index.d.ts +15 -0
  566. package/build/server/transport/sse/index.d.ts.map +1 -0
  567. package/build/server/transport/sse/index.js +14 -0
  568. package/build/server/transport/sse/index.js.map +1 -0
  569. package/build/server/transport/sse/transport.d.ts +94 -0
  570. package/build/server/transport/sse/transport.d.ts.map +1 -0
  571. package/build/server/transport/sse/transport.js +175 -0
  572. package/build/server/transport/sse/transport.js.map +1 -0
  573. package/build/server/transport/stdio-transport.d.ts +23 -0
  574. package/build/server/transport/stdio-transport.d.ts.map +1 -0
  575. package/build/server/transport/stdio-transport.js +59 -0
  576. package/build/server/transport/stdio-transport.js.map +1 -0
  577. package/build/server/transport/streamable-http/index.d.ts +9 -0
  578. package/build/server/transport/streamable-http/index.d.ts.map +1 -0
  579. package/build/server/transport/streamable-http/index.js +9 -0
  580. package/build/server/transport/streamable-http/index.js.map +1 -0
  581. package/build/server/transport/streamable-http/stateful-handler.d.ts +41 -0
  582. package/build/server/transport/streamable-http/stateful-handler.d.ts.map +1 -0
  583. package/build/server/transport/streamable-http/stateful-handler.js +264 -0
  584. package/build/server/transport/streamable-http/stateful-handler.js.map +1 -0
  585. package/build/server/transport/streamable-http/stateless-handler.d.ts +28 -0
  586. package/build/server/transport/streamable-http/stateless-handler.d.ts.map +1 -0
  587. package/build/server/transport/streamable-http/stateless-handler.js +81 -0
  588. package/build/server/transport/streamable-http/stateless-handler.js.map +1 -0
  589. package/build/server/transport/streamable-http/transport.d.ts +110 -0
  590. package/build/server/transport/streamable-http/transport.d.ts.map +1 -0
  591. package/build/server/transport/streamable-http/transport.js +118 -0
  592. package/build/server/transport/streamable-http/transport.js.map +1 -0
  593. package/build/server/transport/transport-context.d.ts +67 -0
  594. package/build/server/transport/transport-context.d.ts.map +1 -0
  595. package/build/server/transport/transport-context.js +38 -0
  596. package/build/server/transport/transport-context.js.map +1 -0
  597. package/build/server/transport/types.d.ts +56 -0
  598. package/build/server/transport/types.d.ts.map +1 -0
  599. package/build/server/transport/types.js +11 -0
  600. package/build/server/transport/types.js.map +1 -0
  601. package/build/server/transport-options.d.ts +248 -0
  602. package/build/server/transport-options.d.ts.map +1 -0
  603. package/build/server/transport-options.js +18 -0
  604. package/build/server/transport-options.js.map +1 -0
  605. package/build/server/types.d.ts +172 -0
  606. package/build/server/types.d.ts.map +1 -0
  607. package/build/server/types.js +9 -0
  608. package/build/server/types.js.map +1 -0
  609. package/build/telemetry/connection-telemetry-bridge.d.ts +30 -0
  610. package/build/telemetry/connection-telemetry-bridge.d.ts.map +1 -0
  611. package/build/telemetry/connection-telemetry-bridge.js +54 -0
  612. package/build/telemetry/connection-telemetry-bridge.js.map +1 -0
  613. package/build/telemetry/core/config.d.ts +38 -0
  614. package/build/telemetry/core/config.d.ts.map +1 -0
  615. package/build/telemetry/core/config.js +54 -0
  616. package/build/telemetry/core/config.js.map +1 -0
  617. package/build/telemetry/core/constants.d.ts +183 -0
  618. package/build/telemetry/core/constants.d.ts.map +1 -0
  619. package/build/telemetry/core/constants.js +207 -0
  620. package/build/telemetry/core/constants.js.map +1 -0
  621. package/build/telemetry/core/diag-logger.d.ts +35 -0
  622. package/build/telemetry/core/diag-logger.d.ts.map +1 -0
  623. package/build/telemetry/core/diag-logger.js +54 -0
  624. package/build/telemetry/core/diag-logger.js.map +1 -0
  625. package/build/telemetry/core/index.d.ts +12 -0
  626. package/build/telemetry/core/index.d.ts.map +1 -0
  627. package/build/telemetry/core/index.js +32 -0
  628. package/build/telemetry/core/index.js.map +1 -0
  629. package/build/telemetry/core/types.d.ts +106 -0
  630. package/build/telemetry/core/types.d.ts.map +1 -0
  631. package/build/telemetry/core/types.js +10 -0
  632. package/build/telemetry/core/types.js.map +1 -0
  633. package/build/telemetry/index.d.ts +59 -0
  634. package/build/telemetry/index.d.ts.map +1 -0
  635. package/build/telemetry/index.js +79 -0
  636. package/build/telemetry/index.js.map +1 -0
  637. package/build/telemetry/metrics.d.ts +127 -0
  638. package/build/telemetry/metrics.d.ts.map +1 -0
  639. package/build/telemetry/metrics.js +337 -0
  640. package/build/telemetry/metrics.js.map +1 -0
  641. package/build/telemetry/sdk.d.ts +110 -0
  642. package/build/telemetry/sdk.d.ts.map +1 -0
  643. package/build/telemetry/sdk.js +547 -0
  644. package/build/telemetry/sdk.js.map +1 -0
  645. package/build/telemetry/tracing.d.ts +78 -0
  646. package/build/telemetry/tracing.d.ts.map +1 -0
  647. package/build/telemetry/tracing.js +257 -0
  648. package/build/telemetry/tracing.js.map +1 -0
  649. package/build/utils/env-helpers.d.ts +46 -0
  650. package/build/utils/env-helpers.d.ts.map +1 -0
  651. package/build/utils/env-helpers.js +54 -0
  652. package/build/utils/env-helpers.js.map +1 -0
  653. package/build/utils/index.d.ts +14 -0
  654. package/build/utils/index.d.ts.map +1 -0
  655. package/build/utils/index.js +19 -0
  656. package/build/utils/index.js.map +1 -0
  657. package/build/utils/sensitive-keys.d.ts +48 -0
  658. package/build/utils/sensitive-keys.d.ts.map +1 -0
  659. package/build/utils/sensitive-keys.js +131 -0
  660. package/build/utils/sensitive-keys.js.map +1 -0
  661. package/build/utils/string-helpers.d.ts +126 -0
  662. package/build/utils/string-helpers.d.ts.map +1 -0
  663. package/build/utils/string-helpers.js +189 -0
  664. package/build/utils/string-helpers.js.map +1 -0
  665. package/build/utils/validation.d.ts +84 -0
  666. package/build/utils/validation.d.ts.map +1 -0
  667. package/build/utils/validation.js +111 -0
  668. package/build/utils/validation.js.map +1 -0
  669. package/build/utils/zod-helpers.d.ts +92 -0
  670. package/build/utils/zod-helpers.d.ts.map +1 -0
  671. package/build/utils/zod-helpers.js +120 -0
  672. package/build/utils/zod-helpers.js.map +1 -0
  673. package/package.json +133 -0
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Create Server Function
3
+ *
4
+ * High-level API for creating MCP servers with minimal boilerplate.
5
+ * Automatically uses tools, resources, and prompts from the global registries.
6
+ *
7
+ * @module server/create-server
8
+ */
9
+ import { McpServerBuilder } from "./builder/index.js";
10
+ import { DEFAULT_SERVER_NAME, DEFAULT_SERVER_VERSION } from "./builder/index.js";
11
+ import { getTelemetryConfig } from "../telemetry/core/index.js";
12
+ import { logger as baseLogger } from "../logger/index.js";
13
+ import { globalToolRegistry, globalResourceRegistry, globalPromptRegistry, globalTaskToolRegistry, } from "../mcp/capabilities/registry/index.js";
14
+ // ============================================================================
15
+ // Create Server Function
16
+ // ============================================================================
17
+ /**
18
+ * Create an MCP server with automatic tool, resource, and prompt registration.
19
+ *
20
+ * This is the recommended way to create servers in the framework.
21
+ * It automatically discovers and registers all items defined with
22
+ * `defineTool()`, `defineResource()`, `defineResourceTemplate()`, and `definePrompt()`.
23
+ *
24
+ * @param options - Server configuration options
25
+ * @returns Server instance with start() and stop() methods
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * // Minimal server with stdio transport
30
+ * import { createServer, defineTool, text } from 'mcp-server-framework';
31
+ * import { z } from 'zod';
32
+ *
33
+ * // This tool is auto-registered when the module loads
34
+ * export const greetTool = defineTool({
35
+ * name: 'greet',
36
+ * description: 'Greet a user',
37
+ * input: z.object({ name: z.string() }),
38
+ * handler: async ({ name }) => text(`Hello, ${name}!`),
39
+ * });
40
+ *
41
+ * // Create and start server
42
+ * const server = createServer({
43
+ * name: 'greeting-server',
44
+ * version: '1.0.0',
45
+ * transport: { mode: 'stdio' },
46
+ * });
47
+ *
48
+ * await server.start();
49
+ * ```
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * // Server with HTTP transport
54
+ * const server = createServer({
55
+ * name: 'http-server',
56
+ * version: '1.0.0',
57
+ * transport: { mode: 'http', port: 3000 },
58
+ * });
59
+ *
60
+ * await server.start();
61
+ * ```
62
+ */
63
+ export function createServer(options) {
64
+ const logger = baseLogger.child({ component: "create-server" });
65
+ // Build server using McpServerBuilder
66
+ const builder = new McpServerBuilder();
67
+ // Warn when using default server identity — these should be set explicitly in production
68
+ if (!options.name || !options.version) {
69
+ logger.warn("Server using default identity: name=%s version=%s — set name and version explicitly for production", options.name ?? DEFAULT_SERVER_NAME, options.version ?? DEFAULT_SERVER_VERSION);
70
+ }
71
+ // Configure server options
72
+ builder.withOptions({
73
+ name: options.name ?? DEFAULT_SERVER_NAME,
74
+ version: options.version ?? DEFAULT_SERVER_VERSION,
75
+ transport: options.transport,
76
+ capabilities: options.capabilities,
77
+ lifecycle: options.lifecycle,
78
+ shutdown: options.shutdown,
79
+ health: options.health,
80
+ session: options.session,
81
+ auth: options.auth,
82
+ telemetryEnabled: options.telemetry ?? getTelemetryConfig().enabled,
83
+ onBeforeTelemetryInit: options.onBeforeTelemetryInit,
84
+ });
85
+ // Register global registries as providers.
86
+ // The registries implement Provider interfaces directly.
87
+ builder.withToolProvider(globalToolRegistry);
88
+ builder.withResourceProvider(globalResourceRegistry);
89
+ builder.withPromptProvider(globalPromptRegistry);
90
+ builder.withTaskToolProvider(globalTaskToolRegistry);
91
+ // Build the server instance
92
+ const instance = builder.build();
93
+ // Return simplified interface
94
+ return {
95
+ start: () => instance.start(),
96
+ stop: () => instance.stop(),
97
+ initTelemetry: () => instance.initTelemetry(),
98
+ notifyToolListChanged: () => instance.notifyToolListChanged(),
99
+ notifyResourceListChanged: () => instance.notifyResourceListChanged(),
100
+ notifyPromptListChanged: () => instance.notifyPromptListChanged(),
101
+ notifyResourceUpdated: (uri) => instance.notifyResourceUpdated(uri),
102
+ };
103
+ }
104
+ //# sourceMappingURL=create-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-server.js","sourceRoot":"","sources":["../../src/server/create-server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,uCAAuC,CAAC;AAI/C,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,MAAM,UAAU,YAAY,CAAC,OAA4B;IACvD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;IAEhE,sCAAsC;IACtC,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAEvC,yFAAyF;IACzF,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CACT,oGAAoG,EACpG,OAAO,CAAC,IAAI,IAAI,mBAAmB,EACnC,OAAO,CAAC,OAAO,IAAI,sBAAsB,CAC1C,CAAC;IACJ,CAAC;IAED,2BAA2B;IAC3B,OAAO,CAAC,WAAW,CAAC;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,mBAAmB;QACzC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,sBAAsB;QAClD,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,gBAAgB,EAAE,OAAO,CAAC,SAAS,IAAI,kBAAkB,EAAE,CAAC,OAAO;QACnE,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;KACrD,CAAC,CAAC;IAEH,2CAA2C;IAC3C,yDAAyD;IACzD,OAAO,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;IAC7C,OAAO,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;IACrD,OAAO,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;IACjD,OAAO,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;IAErD,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAEjC,8BAA8B;IAC9B,OAAO;QACL,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE;QAC7B,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE;QAC3B,aAAa,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE;QAC7C,qBAAqB,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,qBAAqB,EAAE;QAC7D,yBAAyB,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,yBAAyB,EAAE;QACrE,uBAAuB,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,uBAAuB,EAAE;QACjE,qBAAqB,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC,GAAG,CAAC;KAC5E,CAAC;AACJ,CAAC"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Express Application Factory
3
+ *
4
+ * Creates and configures the Express application as a security gateway
5
+ * for the MCP server. Express handles routing and security middleware,
6
+ * while MCP protocol handling is fully delegated to the SDK via the
7
+ * StreamableHttpTransport.
8
+ *
9
+ * Layer responsibilities:
10
+ * Express App: Security middleware, routing, health checks
11
+ * StreamableHttpTransport: Session lifecycle, transport instance management
12
+ * SDK Transport: MCP protocol (JSON-RPC, SSE, session headers, Content-Type, Accept)
13
+ * McpServer: Business logic (tools, resources, prompts)
14
+ *
15
+ * Security middleware stack (applied at Express level):
16
+ * 1. DNS Rebinding Protection (MUST — not handled by SDK)
17
+ * 2. Rate Limiting (not handled by SDK)
18
+ * 3. Protocol Version Validation (early rejection before SDK)
19
+ *
20
+ * Protocol validation handled by SDK (removed from Express stack):
21
+ * - Content-Type validation
22
+ * - Accept header validation
23
+ * - JSON-RPC structure validation
24
+ *
25
+ * @module server/http/express-app
26
+ */
27
+ import express from "express";
28
+ import type { SessionManager } from "../session/index.js";
29
+ import type { AuthOptions } from "../auth/types.js";
30
+ import type { SessionFactory } from "../transport/types.js";
31
+ import type { HealthConfig } from "../server-options.js";
32
+ import type { EventStore } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
33
+ /**
34
+ * Options for Express application creation.
35
+ */
36
+ export interface ExpressAppOptions {
37
+ /** Operate in stateless mode (no session IDs). Default: false */
38
+ readonly stateless?: boolean | undefined;
39
+ /** Event store for stream resumability (stateful only) */
40
+ readonly eventStore?: EventStore | undefined;
41
+ /** Prefer JSON responses over SSE for simple request-response. Default: true */
42
+ readonly enableJsonResponse?: boolean | undefined;
43
+ /** Health endpoint configuration for API connectivity monitoring */
44
+ readonly health?: HealthConfig | undefined;
45
+ /**
46
+ * Resolved trust proxy value for Express.
47
+ * - `number` for hop count
48
+ * - `string` for IP/CIDR/keyword (possibly comma-separated)
49
+ * - `undefined` when disabled
50
+ */
51
+ readonly trustProxy?: (string | number) | undefined;
52
+ /**
53
+ * CORS allowed origins.
54
+ * - `undefined` — CORS disabled (no Access-Control headers)
55
+ * - `string[]` — List of allowed origins (e.g. `['https://app.example.com']`)
56
+ * - Use `['*']` to allow all origins (not recommended for production)
57
+ */
58
+ readonly corsOrigin?: readonly string[] | undefined;
59
+ /** Allow credentials in CORS requests. Only effective when corsOrigin is set. */
60
+ readonly corsCredentials?: boolean | undefined;
61
+ /** Enable HSTS header. Default: false (managed by reverse proxy) */
62
+ readonly helmetHsts?: boolean | undefined;
63
+ /**
64
+ * Content Security Policy.
65
+ * - `undefined` — Helmet default CSP
66
+ * - `'false'` — Disable CSP
67
+ * - Custom string — CSP directives
68
+ */
69
+ readonly helmetCsp?: string | undefined;
70
+ /**
71
+ * Maximum request body size for `express.json()` middleware.
72
+ * Accepts Express size strings (e.g. `'1mb'`, `'500kb'`, `'2mb'`).
73
+ * @default '1mb'
74
+ */
75
+ readonly bodyLimit?: string | undefined;
76
+ /**
77
+ * X-Frame-Options header.
78
+ * - `'DENY'` — Never allow framing (default)
79
+ * - `'SAMEORIGIN'` — Allow from same origin
80
+ * - `'false'` — Disable X-Frame-Options
81
+ */
82
+ readonly helmetFrameOptions?: ("DENY" | "SAMEORIGIN" | "false") | undefined;
83
+ /**
84
+ * Authentication configuration.
85
+ * When provided, enables OAuth 2.1 endpoints and/or bearer token validation.
86
+ * Health and metrics endpoints remain unauthenticated for probe access.
87
+ */
88
+ readonly auth?: AuthOptions | undefined;
89
+ }
90
+ /**
91
+ * Creates and configures the Express application.
92
+ *
93
+ * The returned app is fully configured with security middleware
94
+ * and route handlers. MCP protocol validation (Content-Type, Accept,
95
+ * JSON-RPC) is delegated to the SDK transport via StreamableHttpTransport.
96
+ *
97
+ * @param sessionFactory - Factory to create McpSession instances
98
+ * @param sessionManager - Unified session manager (owned by McpServer)
99
+ * @param options - Application configuration options
100
+ * @returns Configured Express application
101
+ */
102
+ export declare function createExpressApp(sessionFactory: SessionFactory, sessionManager: SessionManager, options?: ExpressAppOptions): express.Application;
103
+ //# sourceMappingURL=express-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express-app.d.ts","sourceRoot":"","sources":["../../../src/server/http/express-app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAM9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAY1D,OAAO,KAAK,EAAE,WAAW,EAAuB,MAAM,kBAAkB,CAAC;AAczE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oDAAoD,CAAC;AAuDrF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iEAAiE;IACjE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAEzC,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAE7C,gFAAgF;IAChF,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAElD,oEAAoE;IACpE,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IAE3C;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,SAAS,CAAC;IAEpD;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAEpD,iFAAiF;IACjF,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAE/C,oEAAoE;IACpE,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAE1C;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAExC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAExC;;;;;OAKG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,MAAM,GAAG,YAAY,GAAG,OAAO,CAAC,GAAG,SAAS,CAAC;IAE5E;;;;OAIG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CACzC;AAyRD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,EAC9B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,WAAW,CAoErB"}
@@ -0,0 +1,391 @@
1
+ /**
2
+ * Express Application Factory
3
+ *
4
+ * Creates and configures the Express application as a security gateway
5
+ * for the MCP server. Express handles routing and security middleware,
6
+ * while MCP protocol handling is fully delegated to the SDK via the
7
+ * StreamableHttpTransport.
8
+ *
9
+ * Layer responsibilities:
10
+ * Express App: Security middleware, routing, health checks
11
+ * StreamableHttpTransport: Session lifecycle, transport instance management
12
+ * SDK Transport: MCP protocol (JSON-RPC, SSE, session headers, Content-Type, Accept)
13
+ * McpServer: Business logic (tools, resources, prompts)
14
+ *
15
+ * Security middleware stack (applied at Express level):
16
+ * 1. DNS Rebinding Protection (MUST — not handled by SDK)
17
+ * 2. Rate Limiting (not handled by SDK)
18
+ * 3. Protocol Version Validation (early rejection before SDK)
19
+ *
20
+ * Protocol validation handled by SDK (removed from Express stack):
21
+ * - Content-Type validation
22
+ * - Accept header validation
23
+ * - JSON-RPC structure validation
24
+ *
25
+ * @module server/http/express-app
26
+ */
27
+ import express from "express";
28
+ import helmet from "helmet";
29
+ import cors from "cors";
30
+ import { logger as baseLogger } from "../../logger/index.js";
31
+ // Security Middleware (SDK handles Content-Type, Accept, JSON-RPC)
32
+ import { createRateLimiter, validateProtocolVersion, dnsRebindingProtection, createBearerAuth, createCustomHeaderAuth, } from "../middleware/index.js";
33
+ import { isFullOAuthProvider } from "../auth/types.js";
34
+ // Routes
35
+ import { createHealthRouter, createMetricsRouter, createOAuthRouter } from "../routes/index.js";
36
+ import { createStreamableHttpRouter } from "../routes/streamable-http-router.js";
37
+ import { createSseRouter, isSseEnabled, getSseSessionCount } from "../routes/sse-router.js";
38
+ import { SseRequestHandler } from "../transport/sse/handler.js";
39
+ import { TRANSPORT_LOG_COMPONENTS, TRANSPORT_ROUTES, MCP_HEADERS, SESSION_ID_QUERY_PARAMS, } from "../transport/constants.js";
40
+ const logger = baseLogger.child({
41
+ component: TRANSPORT_LOG_COMPONENTS.HTTP_SERVER,
42
+ });
43
+ const LogMessages = {
44
+ SSE_ENDPOINTS_MOUNTED: "Mounting SSE endpoints at %s, %s and %s",
45
+ UNHANDLED_MIDDLEWARE_ERROR: "Unhandled Express middleware error: %s",
46
+ CORS_HTTP_CREDENTIALS: "CORS credentials enabled with non-localhost HTTP origin(s): %s — credentials over plain HTTP expose tokens to network sniffing",
47
+ };
48
+ /**
49
+ * Known W3C Content Security Policy directive names.
50
+ * Used to validate user-provided CSP strings against typos and injection.
51
+ * @see https://www.w3.org/TR/CSP3/
52
+ */
53
+ const KNOWN_CSP_DIRECTIVES = new Set([
54
+ "default-src",
55
+ "script-src",
56
+ "script-src-elem",
57
+ "script-src-attr",
58
+ "style-src",
59
+ "style-src-elem",
60
+ "style-src-attr",
61
+ "img-src",
62
+ "font-src",
63
+ "connect-src",
64
+ "media-src",
65
+ "object-src",
66
+ "frame-src",
67
+ "child-src",
68
+ "worker-src",
69
+ "manifest-src",
70
+ "prefetch-src",
71
+ "frame-ancestors",
72
+ "form-action",
73
+ "base-uri",
74
+ "navigate-to",
75
+ "sandbox",
76
+ "report-uri",
77
+ "report-to",
78
+ "plugin-types",
79
+ "block-all-mixed-content",
80
+ "upgrade-insecure-requests",
81
+ "require-sri-for",
82
+ "require-trusted-types-for",
83
+ "trusted-types",
84
+ ]);
85
+ // ============================================================================
86
+ // Private Setup Helpers
87
+ // ============================================================================
88
+ /**
89
+ * Configures security headers (Helmet), CORS, and JSON body parser.
90
+ */
91
+ function setupSecurityMiddleware(app, options) {
92
+ // ── Helmet (Security Headers) ──────────────────────────────────────────
93
+ // Build CSP option
94
+ let cspOption;
95
+ if (options?.helmetCsp === "false") {
96
+ cspOption = false;
97
+ logger.warn("Content Security Policy (CSP) is disabled via configuration — this reduces XSS protection");
98
+ }
99
+ else if (options?.helmetCsp) {
100
+ // Parse directive string: "default-src 'self'; script-src 'none'" → object
101
+ const directives = {};
102
+ for (const part of options.helmetCsp.split(";")) {
103
+ const trimmed = part.trim();
104
+ if (!trimmed)
105
+ continue;
106
+ const [name, ...values] = trimmed.split(/\s+/);
107
+ if (name) {
108
+ if (!KNOWN_CSP_DIRECTIVES.has(name)) {
109
+ logger.warn('Unknown CSP directive "%s" — skipping. Check for typos in MCP_HELMET_CSP.', name);
110
+ continue;
111
+ }
112
+ directives[name] = values;
113
+ }
114
+ }
115
+ cspOption = { directives };
116
+ }
117
+ // Build frameguard option
118
+ let frameguardOption;
119
+ if (options?.helmetFrameOptions === "false") {
120
+ frameguardOption = false;
121
+ }
122
+ else if (options?.helmetFrameOptions === "SAMEORIGIN") {
123
+ frameguardOption = { action: "sameorigin" };
124
+ }
125
+ else {
126
+ frameguardOption = { action: "deny" };
127
+ }
128
+ app.use(helmet({
129
+ strictTransportSecurity: options?.helmetHsts === true ? { maxAge: 15552000, includeSubDomains: true } : false,
130
+ ...(cspOption !== undefined && { contentSecurityPolicy: cspOption }),
131
+ frameguard: frameguardOption,
132
+ referrerPolicy: { policy: "strict-origin-when-cross-origin" },
133
+ }));
134
+ // ── CORS ────────────────────────────────────────────────────────────────
135
+ if (options?.corsOrigin && options.corsOrigin.length > 0) {
136
+ // CORS spec: credentials=true is invalid with origin='*'
137
+ if (options.corsCredentials && options.corsOrigin.includes("*")) {
138
+ throw new Error('Invalid CORS configuration: credentials cannot be used with wildcard origin "*". ' +
139
+ "Set MCP_CORS_ORIGIN to specific origins when MCP_CORS_CREDENTIALS=true.");
140
+ }
141
+ // Warn about HTTP origins with credentials (tokens exposed to network sniffing)
142
+ if (options.corsCredentials) {
143
+ const insecureOrigins = options.corsOrigin.filter((origin) => {
144
+ try {
145
+ const url = new URL(origin);
146
+ if (url.protocol !== "http:")
147
+ return false;
148
+ const host = url.hostname;
149
+ return host !== "localhost" && host !== "127.0.0.1" && host !== "::1";
150
+ }
151
+ catch {
152
+ return false;
153
+ }
154
+ });
155
+ if (insecureOrigins.length > 0) {
156
+ logger.warn(LogMessages.CORS_HTTP_CREDENTIALS, insecureOrigins.join(", "));
157
+ }
158
+ }
159
+ const origin = options.corsOrigin.includes("*") ? "*" : [...options.corsOrigin];
160
+ app.use(cors({
161
+ origin,
162
+ credentials: options.corsCredentials ?? false,
163
+ }));
164
+ }
165
+ app.use(express.json({ limit: options?.bodyLimit ?? "1mb" }));
166
+ }
167
+ /**
168
+ * Validates a redirect_uri for OAuth auto-registration.
169
+ *
170
+ * Rejects dangerous URI schemes (javascript:, data:, file:, etc.) and
171
+ * ensures only http: (localhost only) or https: are accepted.
172
+ * This prevents open-redirect attacks (CWE-601) and XSS via crafted URIs.
173
+ *
174
+ * @returns `true` if the URI is safe, `false` otherwise
175
+ */
176
+ function isValidRedirectUri(uri) {
177
+ let parsed;
178
+ try {
179
+ parsed = new URL(uri);
180
+ }
181
+ catch {
182
+ return false;
183
+ }
184
+ // Only allow http: for localhost (development) and https: for everything else
185
+ if (parsed.protocol === "http:") {
186
+ const isLocalhost = parsed.hostname === "localhost" || parsed.hostname === "127.0.0.1" || parsed.hostname === "::1";
187
+ return isLocalhost;
188
+ }
189
+ return parsed.protocol === "https:";
190
+ }
191
+ /**
192
+ * Creates middleware that auto-registers unknown OAuth clients at /authorize.
193
+ *
194
+ * Handles two common scenarios:
195
+ * 1. Clients that skip Dynamic Client Registration (e.g., VS Code with cached credentials)
196
+ * 2. Stale client_ids after server restart (in-memory store cleared)
197
+ *
198
+ * Security constraints:
199
+ * - redirect_uri must use https: (or http: for localhost only)
200
+ * - Dangerous schemes (javascript:, data:, file:) are rejected
201
+ * - This is safe because /register already allows open registration — this middleware
202
+ * does the same thing lazily. The SDK authorize handler then finds the client and
203
+ * proceeds normally.
204
+ */
205
+ function createClientAutoRegistration(provider) {
206
+ return async (req, _res, next) => {
207
+ try {
208
+ const clientId = req.query.client_id;
209
+ const redirectUri = req.query.redirect_uri;
210
+ if (!clientId || !redirectUri || !provider.clientsStore.registerClient) {
211
+ next();
212
+ return;
213
+ }
214
+ // Validate redirect_uri scheme to prevent open-redirect attacks (CWE-601)
215
+ if (!isValidRedirectUri(redirectUri)) {
216
+ logger.warn("Rejected auto-registration for client %s: invalid redirect_uri scheme", clientId);
217
+ next();
218
+ return;
219
+ }
220
+ const existing = await provider.clientsStore.getClient(clientId);
221
+ if (!existing) {
222
+ // Unknown client — auto-register with the requested redirect_uri
223
+ // @type-narrowing: constructing minimal OAuthClientInformationFull
224
+ await provider.clientsStore.registerClient({
225
+ client_id: clientId,
226
+ redirect_uris: [redirectUri],
227
+ client_id_issued_at: Math.floor(Date.now() / 1000),
228
+ });
229
+ logger.info("Auto-registered unknown client %s at /authorize", clientId);
230
+ }
231
+ else if (!existing.redirect_uris.includes(redirectUri)) {
232
+ // Known client but new redirect_uri (e.g., VS Code with different port) — update
233
+ await provider.clientsStore.registerClient({
234
+ ...existing,
235
+ redirect_uris: [...existing.redirect_uris, redirectUri],
236
+ });
237
+ logger.debug("Updated client %s redirect_uris at /authorize", clientId);
238
+ }
239
+ }
240
+ catch (err) {
241
+ // Non-fatal — let the SDK handler deal with the original request
242
+ logger.debug("Client auto-registration failed: %s", err instanceof Error ? err.message : "unknown error");
243
+ }
244
+ next();
245
+ };
246
+ }
247
+ /**
248
+ * Mounts MCP transport routes: Legacy SSE, security middleware stack,
249
+ * SSE fallback on /mcp, and Streamable HTTP router.
250
+ */
251
+ function setupMcpRoutes(app, sessionFactory, sessionManager, options) {
252
+ // ===== Legacy SSE Transport Routes (optional) =====
253
+ // Mount BEFORE the MCP middleware stack to avoid Streamable HTTP validation
254
+ // Deprecated HTTP+SSE transport from protocol 2024-11-05
255
+ if (isSseEnabled()) {
256
+ logger.trace(LogMessages.SSE_ENDPOINTS_MOUNTED, TRANSPORT_ROUTES.MCP_MESSAGE, TRANSPORT_ROUTES.SSE, TRANSPORT_ROUTES.SSE_MESSAGE);
257
+ }
258
+ // Always mount the router — returns 501 if feature is disabled
259
+ // Apply DNS rebinding protection to SSE routes (MCP spec MUST requirement)
260
+ app.use([TRANSPORT_ROUTES.SSE, TRANSPORT_ROUTES.SSE_MESSAGE, TRANSPORT_ROUTES.MCP_MESSAGE], dnsRebindingProtection);
261
+ app.use(createSseRouter(sessionFactory, sessionManager));
262
+ // ===== MCP Transport Routes =====
263
+ // Streamable HTTP transport on /mcp endpoint
264
+ // Security middleware (Express level — not handled by SDK)
265
+ app.use(TRANSPORT_ROUTES.MCP, dnsRebindingProtection); // 1. DNS Rebinding Protection (MUST)
266
+ // 2. Bearer Auth / Custom Header Auth (only when auth is configured)
267
+ if (options?.auth) {
268
+ if (options.auth.headerName && !isFullOAuthProvider(options.auth.provider)) {
269
+ // Custom header auth (e.g. X-API-Key) — only with TokenVerifier
270
+ app.use(TRANSPORT_ROUTES.MCP, createCustomHeaderAuth({
271
+ headerName: options.auth.headerName,
272
+ verifier: options.auth.provider,
273
+ requiredScopes: options.auth.requiredScopes,
274
+ }));
275
+ }
276
+ else {
277
+ // Auto-derive resourceMetadataUrl from issuerUrl when using a full OAuth provider (RFC 9728)
278
+ const resourceMetadataUrl = options.auth.resourceMetadataUrl ??
279
+ (isFullOAuthProvider(options.auth.provider) && options.auth.issuerUrl
280
+ ? `${options.auth.issuerUrl.origin}/.well-known/oauth-protected-resource`
281
+ : undefined);
282
+ // Standard Bearer auth (OAuth or TokenVerifier without custom header)
283
+ app.use(TRANSPORT_ROUTES.MCP, createBearerAuth({
284
+ provider: options.auth.provider,
285
+ requiredScopes: options.auth.requiredScopes,
286
+ resourceMetadataUrl,
287
+ }));
288
+ }
289
+ }
290
+ app.use(TRANSPORT_ROUTES.MCP, createRateLimiter({
291
+ trustProxyConfigured: options?.trustProxy !== undefined,
292
+ })); // 3. Rate Limiting
293
+ app.use(TRANSPORT_ROUTES.MCP, validateProtocolVersion); // 4. Protocol Version (early rejection)
294
+ // Note: Content-Type, Accept, and JSON-RPC validation are handled by the SDK
295
+ // transport internally — no need to duplicate here.
296
+ // ===== Legacy SSE Fallback on /mcp (behind security middleware) =====
297
+ // Intercepts GET /mcp with Accept: text/event-stream and no session ID.
298
+ // Must be BEFORE the Streamable HTTP router so legacy SSE clients are handled
299
+ // before the SDK transport sees the request.
300
+ if (isSseEnabled()) {
301
+ const sseHandler = new SseRequestHandler(sessionFactory, sessionManager);
302
+ app.get(TRANSPORT_ROUTES.MCP, (req, res, next) => {
303
+ const hasSession = req.headers[MCP_HEADERS.SESSION_ID] || SESSION_ID_QUERY_PARAMS.some((p) => req.query[p]);
304
+ const wantsSSE = (req.headers.accept || "").includes("text/event-stream");
305
+ if (!hasSession && wantsSSE) {
306
+ void sseHandler.handleConnection(req, res, TRANSPORT_ROUTES.MCP_MESSAGE);
307
+ }
308
+ else {
309
+ next();
310
+ }
311
+ });
312
+ }
313
+ // MCP route handler — delegates to SDK via StreamableHttpTransport
314
+ const handlerOptions = {
315
+ stateless: options?.stateless,
316
+ eventStore: options?.eventStore,
317
+ enableJsonResponse: options?.enableJsonResponse,
318
+ };
319
+ app.use(TRANSPORT_ROUTES.MCP, createStreamableHttpRouter(sessionFactory, sessionManager, handlerOptions));
320
+ }
321
+ // ============================================================================
322
+ // Public API
323
+ // ============================================================================
324
+ /**
325
+ * Creates and configures the Express application.
326
+ *
327
+ * The returned app is fully configured with security middleware
328
+ * and route handlers. MCP protocol validation (Content-Type, Accept,
329
+ * JSON-RPC) is delegated to the SDK transport via StreamableHttpTransport.
330
+ *
331
+ * @param sessionFactory - Factory to create McpSession instances
332
+ * @param sessionManager - Unified session manager (owned by McpServer)
333
+ * @param options - Application configuration options
334
+ * @returns Configured Express application
335
+ */
336
+ export function createExpressApp(sessionFactory, sessionManager, options) {
337
+ const app = express();
338
+ // Trust Proxy — must be set BEFORE any middleware that reads req.ip or req.protocol
339
+ if (options?.trustProxy !== undefined) {
340
+ app.set("trust proxy", options.trustProxy);
341
+ }
342
+ setupSecurityMiddleware(app, options);
343
+ // ===== OAuth Router (before health routes, needs express.json()) =====
344
+ if (options?.auth && isFullOAuthProvider(options.auth.provider)) {
345
+ if (!options.auth.issuerUrl) {
346
+ throw new Error("issuerUrl is required when using a full OAuth provider");
347
+ }
348
+ // Auto-register unknown clients at /authorize (before SDK router handles it).
349
+ // Handles clients with cached credentials that skip /register.
350
+ app.get("/authorize", createClientAutoRegistration(options.auth.provider));
351
+ app.use(createOAuthRouter({
352
+ provider: options.auth.provider,
353
+ issuerUrl: options.auth.issuerUrl,
354
+ scopesSupported: options.auth.requiredScopes,
355
+ }));
356
+ // Optional callback handler for server-side OAuth callbacks
357
+ // (e.g., GitHub redirects back to MCP server, not directly to client)
358
+ if (options.auth.callbackHandler) {
359
+ app.get("/callback", options.auth.callbackHandler);
360
+ }
361
+ }
362
+ // ===== Health & Metrics Routes (exempt from auth and rate limiting) =====
363
+ app.use(createHealthRouter({
364
+ sessionManager,
365
+ connectionManager: options?.health?.connectionManager,
366
+ isApiConfigured: options?.health?.isApiConfigured,
367
+ apiLabel: options?.health?.apiLabel,
368
+ sseInfo: {
369
+ enabled: isSseEnabled(),
370
+ getSessionCount: getSseSessionCount,
371
+ },
372
+ }));
373
+ app.use(createMetricsRouter());
374
+ setupMcpRoutes(app, sessionFactory, sessionManager, options);
375
+ // ===== Global Error Handler (must be LAST) =====
376
+ // Express identifies error handlers by the 4-parameter signature.
377
+ app.use((err, _req, res, _next) => {
378
+ logger.error(LogMessages.UNHANDLED_MIDDLEWARE_ERROR, err.stack ?? err.message);
379
+ if (!res.headersSent) {
380
+ res.status(500).json({
381
+ jsonrpc: "2.0",
382
+ error: {
383
+ code: -32603,
384
+ message: "Internal server error",
385
+ },
386
+ });
387
+ }
388
+ });
389
+ return app;
390
+ }
391
+ //# sourceMappingURL=express-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express-app.js","sourceRoot":"","sources":["../../../src/server/http/express-app.ts"],"names":[],"mappings":"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"}