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,30 @@
1
+ /**
2
+ * Server Lifecycle Types
3
+ *
4
+ * Defines lifecycle hooks and state management for MCP servers.
5
+ * These types enable clean startup/shutdown handling and event-driven architecture.
6
+ *
7
+ * @module server/lifecycle
8
+ */
9
+ /**
10
+ * All possible server states as a readonly array.
11
+ *
12
+ * @public Exported for consumer validation and iteration.
13
+ * The {@link ServerState} type is the recommended way to type state values.
14
+ */
15
+ export const SERVER_STATES = ["created", "starting", "running", "stopping", "stopped", "error"];
16
+ /** Default shutdown timeout in milliseconds (10 seconds). */
17
+ const DEFAULT_SHUTDOWN_TIMEOUT_MS = 10_000;
18
+ /**
19
+ * Default shutdown configuration values.
20
+ *
21
+ * Configurable only via `ServerOptions.shutdown` (programmatic API).
22
+ * Not exposed as env variable or config file field — shutdown behavior
23
+ * is typically set per-deployment in code, not per-environment.
24
+ */
25
+ export const DEFAULT_SHUTDOWN_CONFIG = {
26
+ timeoutMs: DEFAULT_SHUTDOWN_TIMEOUT_MS,
27
+ forceExitOnTimeout: true,
28
+ signals: ["SIGINT", "SIGTERM"],
29
+ };
30
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/server/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAkBH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,CAAU,CAAC;AAiGzG,6DAA6D;AAC7D,MAAM,2BAA2B,GAAG,MAAM,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAmB;IACrD,SAAS,EAAE,2BAA2B;IACtC,kBAAkB,EAAE,IAAI;IACxB,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;CAC/B,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Bearer Auth Middleware
3
+ *
4
+ * Wraps the SDK's `requireBearerAuth()` middleware with framework-level
5
+ * logging, error mapping, and support for both full OAuth providers and
6
+ * custom token verifiers.
7
+ *
8
+ * Follows the factory pattern established by `createRateLimiter()` and
9
+ * `dnsRebindingProtection`.
10
+ *
11
+ * @module server/middleware/bearer-auth
12
+ */
13
+ import type { RequestHandler } from "express";
14
+ import type { AuthProvider } from "../auth/types.js";
15
+ /**
16
+ * Options for creating the bearer auth middleware.
17
+ */
18
+ export interface BearerAuthOptions {
19
+ /** Authentication provider (full OAuth or token verifier) */
20
+ readonly provider: AuthProvider;
21
+ /**
22
+ * Required OAuth scopes for all requests through this middleware.
23
+ * Requests without ALL listed scopes are rejected with 403.
24
+ */
25
+ readonly requiredScopes?: readonly string[] | undefined;
26
+ /**
27
+ * Protected Resource Metadata URL (RFC 9728).
28
+ * Included in `WWW-Authenticate` headers for 401 responses.
29
+ */
30
+ readonly resourceMetadataUrl?: string | undefined;
31
+ }
32
+ /**
33
+ * Creates a bearer auth middleware that validates access tokens.
34
+ *
35
+ * Delegates to the SDK's `requireBearerAuth()` for actual token validation.
36
+ * Supports both full OAuth providers and custom token verifiers via the
37
+ * {@link AuthProvider} union type.
38
+ *
39
+ * @param options - Bearer auth configuration
40
+ * @returns Express middleware that sets `req.auth` on success
41
+ */
42
+ export declare function createBearerAuth(options: BearerAuthOptions): RequestHandler;
43
+ //# sourceMappingURL=bearer-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bearer-auth.d.ts","sourceRoot":"","sources":["../../../src/server/middleware/bearer-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAsBrD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,6DAA6D;IAC7D,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAEhC;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAExD;;;OAGG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnD;AAMD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,CAyC3E"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Bearer Auth Middleware
3
+ *
4
+ * Wraps the SDK's `requireBearerAuth()` middleware with framework-level
5
+ * logging, error mapping, and support for both full OAuth providers and
6
+ * custom token verifiers.
7
+ *
8
+ * Follows the factory pattern established by `createRateLimiter()` and
9
+ * `dnsRebindingProtection`.
10
+ *
11
+ * @module server/middleware/bearer-auth
12
+ */
13
+ import { requireBearerAuth } from "@modelcontextprotocol/sdk/server/auth/middleware/bearerAuth.js";
14
+ import { isFullOAuthProvider } from "../auth/types.js";
15
+ import { logger as baseLogger } from "../../logger/index.js";
16
+ import { logSecurityEvent } from "./logging.js";
17
+ // ============================================================================
18
+ // Logger
19
+ // ============================================================================
20
+ const LOG_COMPONENT = "bearer-auth";
21
+ const LogMessages = {
22
+ CONFIGURED_OAUTH: "Bearer auth configured (full OAuth provider, scopes: %s)",
23
+ CONFIGURED_VERIFIER: "Bearer auth configured (token verifier, scopes: %s)",
24
+ };
25
+ const logger = baseLogger.child({ component: LOG_COMPONENT });
26
+ // ============================================================================
27
+ // Factory
28
+ // ============================================================================
29
+ /**
30
+ * Creates a bearer auth middleware that validates access tokens.
31
+ *
32
+ * Delegates to the SDK's `requireBearerAuth()` for actual token validation.
33
+ * Supports both full OAuth providers and custom token verifiers via the
34
+ * {@link AuthProvider} union type.
35
+ *
36
+ * @param options - Bearer auth configuration
37
+ * @returns Express middleware that sets `req.auth` on success
38
+ */
39
+ export function createBearerAuth(options) {
40
+ const { provider, requiredScopes, resourceMetadataUrl } = options;
41
+ // SDK's requireBearerAuth accepts:
42
+ // - Full OAuthServerProvider — used as-is
43
+ // - { verifyAccessToken } — for token-only verification
44
+ const verifier = isFullOAuthProvider(provider)
45
+ ? provider
46
+ : { verifyAccessToken: provider.verifyAccessToken.bind(provider) };
47
+ const scopeList = requiredScopes ? [...requiredScopes] : undefined;
48
+ if (isFullOAuthProvider(provider)) {
49
+ logger.info(LogMessages.CONFIGURED_OAUTH, scopeList?.join(", ") ?? "none");
50
+ }
51
+ else {
52
+ logger.info(LogMessages.CONFIGURED_VERIFIER, scopeList?.join(", ") ?? "none");
53
+ }
54
+ const sdkMiddleware = requireBearerAuth({
55
+ verifier,
56
+ ...(scopeList && scopeList.length > 0 && { requiredScopes: scopeList }),
57
+ ...(resourceMetadataUrl && { resourceMetadataUrl }),
58
+ });
59
+ // Wrap SDK middleware with security logging for failures
60
+ const middleware = (req, res, next) => {
61
+ // Log auth failures after response is sent
62
+ res.on("finish", () => {
63
+ if (res.statusCode === 401 || res.statusCode === 403) {
64
+ logSecurityEvent(`Bearer auth rejected: ${res.statusCode}`, {
65
+ method: req.method,
66
+ path: req.path,
67
+ statusCode: res.statusCode,
68
+ });
69
+ }
70
+ });
71
+ sdkMiddleware(req, res, next);
72
+ };
73
+ return middleware;
74
+ }
75
+ //# sourceMappingURL=bearer-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bearer-auth.js","sourceRoot":"","sources":["../../../src/server/middleware/bearer-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gEAAgE,CAAC;AAGnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,+EAA+E;AAC/E,SAAS;AACT,+EAA+E;AAE/E,MAAM,aAAa,GAAG,aAAa,CAAC;AAEpC,MAAM,WAAW,GAAG;IAClB,gBAAgB,EAAE,0DAA0D;IAC5E,mBAAmB,EAAE,qDAAqD;CAClE,CAAC;AAEX,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;AA0B9D,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAA0B;IACzD,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC;IAElE,mCAAmC;IACnC,0CAA0C;IAC1C,wDAAwD;IACxD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC;QAC5C,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,EAAE,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAErE,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEnE,IAAI,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC;IAC7E,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,aAAa,GAAG,iBAAiB,CAAC;QACtC,QAAQ;QACR,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;QACvE,GAAG,CAAC,mBAAmB,IAAI,EAAE,mBAAmB,EAAE,CAAC;KACpD,CAAC,CAAC;IAEH,yDAAyD;IACzD,MAAM,UAAU,GAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACpD,2CAA2C;QAC3C,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACpB,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBACrD,gBAAgB,CAAC,yBAAyB,GAAG,CAAC,UAAU,EAAE,EAAE;oBAC1D,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,UAAU,EAAE,GAAG,CAAC,UAAU;iBAC3B,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC;IAEF,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Custom Header Auth Middleware
3
+ *
4
+ * Extracts a token from a configurable request header (e.g. `X-API-Key`)
5
+ * and validates it via a {@link TokenVerifier}. Sets `req.auth` on success,
6
+ * matching the same contract as the SDK's bearer auth middleware.
7
+ *
8
+ * Use this when your auth model is not OAuth Bearer but a custom header
9
+ * like `X-API-Key`, `X-Custom-Token`, etc.
10
+ *
11
+ * @module server/middleware/custom-header-auth
12
+ */
13
+ import type { RequestHandler } from "express";
14
+ import type { TokenVerifier } from "../auth/types.js";
15
+ /**
16
+ * Options for creating the custom header auth middleware.
17
+ */
18
+ export interface CustomHeaderAuthOptions {
19
+ /** Header name to extract the token from (e.g. `'X-API-Key'`) */
20
+ readonly headerName: string;
21
+ /** Token verifier to validate the extracted header value */
22
+ readonly verifier: TokenVerifier;
23
+ /**
24
+ * Required scopes for all requests through this middleware.
25
+ * Requests without ALL listed scopes are rejected with 403.
26
+ */
27
+ readonly requiredScopes?: readonly string[] | undefined;
28
+ }
29
+ /**
30
+ * Creates a middleware that extracts a token from a custom header and
31
+ * validates it via the provided {@link TokenVerifier}.
32
+ *
33
+ * On success, sets `req.auth` to the verified {@link AuthInfo} — same
34
+ * contract as the SDK's bearer auth middleware.
35
+ *
36
+ * @param options - Custom header auth configuration
37
+ * @returns Express middleware
38
+ */
39
+ export declare function createCustomHeaderAuth(options: CustomHeaderAuthOptions): RequestHandler;
40
+ //# sourceMappingURL=custom-header-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-header-auth.d.ts","sourceRoot":"","sources":["../../../src/server/middleware/custom-header-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,SAAS,CAAC;AAEjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAqBtD;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,iEAAiE;IACjE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IAEjC;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CACzD;AAMD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,GAAG,cAAc,CA6DvF"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Custom Header Auth Middleware
3
+ *
4
+ * Extracts a token from a configurable request header (e.g. `X-API-Key`)
5
+ * and validates it via a {@link TokenVerifier}. Sets `req.auth` on success,
6
+ * matching the same contract as the SDK's bearer auth middleware.
7
+ *
8
+ * Use this when your auth model is not OAuth Bearer but a custom header
9
+ * like `X-API-Key`, `X-Custom-Token`, etc.
10
+ *
11
+ * @module server/middleware/custom-header-auth
12
+ */
13
+ import { createJsonRpcError, HttpStatus, JsonRpcErrorCode } from "../../errors/index.js";
14
+ import { logger as baseLogger } from "../../logger/index.js";
15
+ import { logSecurityEvent } from "./logging.js";
16
+ // ============================================================================
17
+ // Logger
18
+ // ============================================================================
19
+ const LOG_COMPONENT = "custom-header-auth";
20
+ const LogMessages = {
21
+ CONFIGURED: "Custom header auth configured (header: %s, scopes: %s)",
22
+ };
23
+ const logger = baseLogger.child({ component: LOG_COMPONENT });
24
+ // ============================================================================
25
+ // Factory
26
+ // ============================================================================
27
+ /**
28
+ * Creates a middleware that extracts a token from a custom header and
29
+ * validates it via the provided {@link TokenVerifier}.
30
+ *
31
+ * On success, sets `req.auth` to the verified {@link AuthInfo} — same
32
+ * contract as the SDK's bearer auth middleware.
33
+ *
34
+ * @param options - Custom header auth configuration
35
+ * @returns Express middleware
36
+ */
37
+ export function createCustomHeaderAuth(options) {
38
+ const { headerName, verifier, requiredScopes } = options;
39
+ const headerLower = headerName.toLowerCase();
40
+ const scopeList = requiredScopes ? [...requiredScopes] : undefined;
41
+ logger.info(LogMessages.CONFIGURED, headerName, scopeList?.join(", ") ?? "none");
42
+ const middleware = async (req, res, next) => {
43
+ const token = req.headers[headerLower];
44
+ if (!token || typeof token !== "string") {
45
+ logSecurityEvent(`Custom header auth rejected: 401 (missing ${headerName})`, {
46
+ method: req.method,
47
+ path: req.path,
48
+ statusCode: 401,
49
+ });
50
+ res
51
+ .status(HttpStatus.UNAUTHORIZED)
52
+ .json(createJsonRpcError(JsonRpcErrorCode.INVALID_REQUEST, `Missing ${headerName} header`));
53
+ return;
54
+ }
55
+ try {
56
+ const authInfo = await verifier.verifyAccessToken(token);
57
+ // Scope enforcement
58
+ if (scopeList && scopeList.length > 0) {
59
+ const missing = scopeList.filter((s) => !authInfo.scopes.includes(s));
60
+ if (missing.length > 0) {
61
+ logSecurityEvent(`Custom header auth rejected: 403 (missing scopes: ${missing.join(", ")})`, {
62
+ method: req.method,
63
+ path: req.path,
64
+ statusCode: 403,
65
+ });
66
+ res
67
+ .status(HttpStatus.FORBIDDEN)
68
+ .json(createJsonRpcError(JsonRpcErrorCode.INVALID_REQUEST, `Missing required scopes: ${missing.join(", ")}`));
69
+ return;
70
+ }
71
+ }
72
+ // Set req.auth — same contract as SDK's bearer auth
73
+ // @express-api — Express Request augmented by SDK types
74
+ req.auth = authInfo;
75
+ next();
76
+ }
77
+ catch {
78
+ logSecurityEvent(`Custom header auth rejected: 401 (invalid token)`, {
79
+ method: req.method,
80
+ path: req.path,
81
+ statusCode: 401,
82
+ });
83
+ res
84
+ .status(HttpStatus.UNAUTHORIZED)
85
+ .json(createJsonRpcError(JsonRpcErrorCode.INVALID_REQUEST, "Invalid or expired token"));
86
+ }
87
+ };
88
+ return middleware;
89
+ }
90
+ //# sourceMappingURL=custom-header-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-header-auth.js","sourceRoot":"","sources":["../../../src/server/middleware/custom-header-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzF,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,+EAA+E;AAC/E,SAAS;AACT,+EAA+E;AAE/E,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAE3C,MAAM,WAAW,GAAG;IAClB,UAAU,EAAE,wDAAwD;CAC5D,CAAC;AAEX,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;AAuB9D,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAgC;IACrE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAEzD,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IAC7C,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEnE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC;IAEjF,MAAM,UAAU,GAAmB,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAI,EAAE,EAAE;QAC7E,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAEvC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACxC,gBAAgB,CAAC,6CAA6C,UAAU,GAAG,EAAE;gBAC3E,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;YACH,GAAG;iBACA,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC;iBAC/B,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,eAAe,EAAE,WAAW,UAAU,SAAS,CAAC,CAAC,CAAC;YAC9F,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAEzD,oBAAoB;YACpB,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtC,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,gBAAgB,CAAC,qDAAqD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;wBAC3F,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,UAAU,EAAE,GAAG;qBAChB,CAAC,CAAC;oBACH,GAAG;yBACA,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;yBAC5B,IAAI,CACH,kBAAkB,CAAC,gBAAgB,CAAC,eAAe,EAAE,4BAA4B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CACvG,CAAC;oBACJ,OAAO;gBACT,CAAC;YACH,CAAC;YAED,oDAAoD;YACpD,wDAAwD;YACvD,GAA0C,CAAC,IAAI,GAAG,QAAQ,CAAC;YAC5D,IAAI,EAAE,CAAC;QACT,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB,CAAC,kDAAkD,EAAE;gBACnE,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;YACH,GAAG;iBACA,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC;iBAC/B,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,eAAe,EAAE,0BAA0B,CAAC,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * DNS Rebinding Protection middleware
3
+ * MCP Spec 2025-06-18 MUST requirement
4
+ *
5
+ * SECURITY NOTE: This middleware validates the Host header to prevent
6
+ * DNS rebinding attacks. For production deployments:
7
+ * - Always run behind a reverse proxy (nginx, traefik) with proper TLS
8
+ * - Configure explicit MCP_ALLOWED_HOSTS
9
+ *
10
+ * @module server/middleware/dns-rebinding
11
+ */
12
+ import type { Request, Response, NextFunction } from "express";
13
+ /**
14
+ * Resets the cached allowed hosts.
15
+ * Called by the central config reset to maintain cache coherence.
16
+ *
17
+ * @internal
18
+ */
19
+ export declare function resetDnsRebindingCache(): void;
20
+ /**
21
+ * DNS Rebinding Protection Middleware
22
+ * Validates Host header to prevent DNS rebinding attacks (MCP Spec MUST)
23
+ */
24
+ export declare function dnsRebindingProtection(req: Request, res: Response, next: NextFunction): void;
25
+ //# sourceMappingURL=dns-rebinding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dns-rebinding.d.ts","sourceRoot":"","sources":["../../../src/server/middleware/dns-rebinding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAuD/D;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CA0B5F"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * DNS Rebinding Protection middleware
3
+ * MCP Spec 2025-06-18 MUST requirement
4
+ *
5
+ * SECURITY NOTE: This middleware validates the Host header to prevent
6
+ * DNS rebinding attacks. For production deployments:
7
+ * - Always run behind a reverse proxy (nginx, traefik) with proper TLS
8
+ * - Configure explicit MCP_ALLOWED_HOSTS
9
+ *
10
+ * @module server/middleware/dns-rebinding
11
+ */
12
+ import { getFrameworkConfig, registerCacheReset } from "../../config/index.js";
13
+ import { isLocalHost } from "../../utils/string-helpers.js";
14
+ import { createJsonRpcError, HttpStatus, JsonRpcErrorCode, TransportErrorMessage } from "../../errors/index.js";
15
+ import { logSecurityEvent, sanitizeForLog } from "./logging.js";
16
+ // ============================================================================
17
+ // Security Configuration
18
+ // ============================================================================
19
+ /**
20
+ * Creates allowed hosts list for DNS rebinding protection.
21
+ *
22
+ * Returns the configured allowed hosts or defaults to localhost variants.
23
+ * The returned list is used by middleware to validate Host headers.
24
+ *
25
+ * @param config - Framework environment configuration
26
+ * @returns Array of allowed host strings (e.g., ['localhost:3000', '127.0.0.1:3000'])
27
+ */
28
+ function createAllowedHosts(config) {
29
+ const port = config.MCP_PORT;
30
+ // prettier-ignore
31
+ const defaults = [
32
+ 'localhost',
33
+ '127.0.0.1',
34
+ '[::1]',
35
+ `localhost:${port}`,
36
+ `127.0.0.1:${port}`,
37
+ `[::1]:${port}`,
38
+ ];
39
+ if (config.MCP_ALLOWED_HOSTS && config.MCP_ALLOWED_HOSTS.length > 0) {
40
+ // Normalize to lowercase — RFC 7230: Host header is case-insensitive
41
+ return config.MCP_ALLOWED_HOSTS.map((h) => h.toLowerCase());
42
+ }
43
+ return defaults;
44
+ }
45
+ /** Cached derived value (lazy initialization) */
46
+ let cachedAllowedHosts;
47
+ // Self-register for central cache reset
48
+ registerCacheReset(resetDnsRebindingCache);
49
+ /**
50
+ * Gets or creates cached allowed hosts list.
51
+ */
52
+ function getAllowedHosts() {
53
+ if (!cachedAllowedHosts) {
54
+ cachedAllowedHosts = createAllowedHosts(getFrameworkConfig());
55
+ }
56
+ return cachedAllowedHosts;
57
+ }
58
+ /**
59
+ * Resets the cached allowed hosts.
60
+ * Called by the central config reset to maintain cache coherence.
61
+ *
62
+ * @internal
63
+ */
64
+ export function resetDnsRebindingCache() {
65
+ cachedAllowedHosts = undefined;
66
+ }
67
+ /**
68
+ * DNS Rebinding Protection Middleware
69
+ * Validates Host header to prevent DNS rebinding attacks (MCP Spec MUST)
70
+ */
71
+ export function dnsRebindingProtection(req, res, next) {
72
+ const config = getFrameworkConfig();
73
+ const host = req.headers.host;
74
+ const allowedHosts = getAllowedHosts();
75
+ // Validate Host header (MUST for all configurations)
76
+ // We allow localhost/127.0.0.1 on ANY port to support Docker port mapping ONLY if no custom hosts are defined
77
+ // Normalize to lowercase — RFC 7230: Host header is case-insensitive
78
+ const cleanHost = host ? host.trim().toLowerCase() : "";
79
+ // If MCP_ALLOWED_HOSTS is set, we strictly enforce that list (no implicit localhost bypass).
80
+ // If not set, we allow defaults AND any localhost port (to support Docker port mapping).
81
+ const strictMode = !!config.MCP_ALLOWED_HOSTS;
82
+ const isAllowed = strictMode
83
+ ? allowedHosts.includes(cleanHost)
84
+ : isLocalHost(cleanHost) || allowedHosts.includes(cleanHost);
85
+ if (!host || !isAllowed) {
86
+ logSecurityEvent(`DNS Rebinding attempt blocked: Host=${sanitizeForLog(host)}`);
87
+ res
88
+ .status(HttpStatus.FORBIDDEN)
89
+ .json(createJsonRpcError(JsonRpcErrorCode.SERVER_ERROR, TransportErrorMessage.DNS_REBINDING_BLOCKED));
90
+ return;
91
+ }
92
+ next();
93
+ }
94
+ //# sourceMappingURL=dns-rebinding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dns-rebinding.js","sourceRoot":"","sources":["../../../src/server/middleware/dns-rebinding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAA2B,MAAM,uBAAuB,CAAC;AACxG,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAChH,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEhE,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E;;;;;;;;GAQG;AACH,SAAS,kBAAkB,CAAC,MAA0B;IACpD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC7B,kBAAkB;IAClB,MAAM,QAAQ,GAAG;QACf,WAAW;QACX,WAAW;QACX,OAAO;QACP,aAAa,IAAI,EAAE;QACnB,aAAa,IAAI,EAAE;QACnB,SAAS,IAAI,EAAE;KAChB,CAAC;IAEF,IAAI,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpE,qEAAqE;QACrE,OAAO,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,iDAAiD;AACjD,IAAI,kBAAwC,CAAC;AAE7C,wCAAwC;AACxC,kBAAkB,CAAC,sBAAsB,CAAC,CAAC;AAE3C;;GAEG;AACH,SAAS,eAAe;IACtB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,kBAAkB,GAAG,kBAAkB,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB;IACpC,kBAAkB,GAAG,SAAS,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IACpF,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;IAC9B,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IAEvC,qDAAqD;IACrD,8GAA8G;IAC9G,qEAAqE;IACrE,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAExD,6FAA6F;IAC7F,yFAAyF;IACzF,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;IAC9C,MAAM,SAAS,GAAG,UAAU;QAC1B,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC;QAClC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAE/D,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACxB,gBAAgB,CAAC,uCAAuC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChF,GAAG;aACA,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;aAC5B,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,EAAE,qBAAqB,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACxG,OAAO;IACT,CAAC;IAED,IAAI,EAAE,CAAC;AACT,CAAC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Transport Middleware
3
+ *
4
+ * Collection of Express middleware for MCP transport security and validation.
5
+ * These middleware handle concerns that the SDK transport does NOT validate.
6
+ *
7
+ * ## Middleware Stack
8
+ *
9
+ * The following middleware are applied in the default Express pipeline:
10
+ *
11
+ * - **DNS Rebinding Protection** - Validates Host header (MCP MUST, not in SDK)
12
+ * - **Rate Limiting** - Prevents abuse and DoS attacks (not in SDK)
13
+ * - **Protocol Version** - Early rejection of unsupported protocol versions
14
+ *
15
+ * Content-Type, Accept header, and JSON-RPC validation are handled internally
16
+ * by the SDK's `StreamableHTTPServerTransport`.
17
+ *
18
+ * ## Default Middleware Stack Order
19
+ *
20
+ * ```typescript
21
+ * app.use('/mcp', dnsRebindingProtection); // 1. Security (Express level)
22
+ * app.use('/mcp', createRateLimiter()); // 2. Rate limiting (Express level)
23
+ * app.use('/mcp', validateProtocolVersion); // 3. Protocol version (early reject)
24
+ * // SDK handles: Content-Type, Accept, JSON-RPC
25
+ * ```
26
+ *
27
+ * @see https://modelcontextprotocol.io/specification/2025-03-26/basic/transports
28
+ *
29
+ * @module server/middleware
30
+ */
31
+ /**
32
+ * DNS Rebinding Protection (MCP MUST, not handled by SDK)
33
+ * Validates Host header to prevent DNS rebinding attacks
34
+ */
35
+ export { dnsRebindingProtection } from "./dns-rebinding.js";
36
+ /**
37
+ * Rate Limiting (not handled by SDK)
38
+ * Prevents abuse and DoS attacks
39
+ */
40
+ export { createRateLimiter } from "./rate-limit.js";
41
+ export type { RateLimiterOptions } from "./rate-limit.js";
42
+ /**
43
+ * Protocol Version Validation
44
+ * Early rejection of unsupported protocol versions before reaching the SDK
45
+ */
46
+ export { validateProtocolVersion } from "./protocol-version.js";
47
+ /**
48
+ * Trust Proxy Resolution
49
+ * Validates and resolves trust proxy values with DNS hostname support
50
+ */
51
+ export { resolveTrustProxy, TRUST_PROXY_KEYWORDS } from "./trust-proxy.js";
52
+ /**
53
+ * Bearer Auth Middleware
54
+ * Validates access tokens via OAuth provider or custom token verifier
55
+ */
56
+ export { createBearerAuth } from "./bearer-auth.js";
57
+ export type { BearerAuthOptions } from "./bearer-auth.js";
58
+ /**
59
+ * Custom Header Auth Middleware
60
+ * Extracts and validates tokens from custom headers (e.g. X-API-Key)
61
+ */
62
+ export { createCustomHeaderAuth } from "./custom-header-auth.js";
63
+ export type { CustomHeaderAuthOptions } from "./custom-header-auth.js";
64
+ /**
65
+ * Sanitizes a string for logging to prevent log injection attacks.
66
+ * Replaces newlines and other control characters.
67
+ */
68
+ export { sanitizeForLog, logSecurityEvent } from "./logging.js";
69
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/middleware/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH;;;GAGG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE5D;;;GAGG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D;;;GAGG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE;;;GAGG;AACH,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAI3E;;;GAGG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;;GAGG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,YAAY,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAIvE;;;GAGG;AACH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Transport Middleware
3
+ *
4
+ * Collection of Express middleware for MCP transport security and validation.
5
+ * These middleware handle concerns that the SDK transport does NOT validate.
6
+ *
7
+ * ## Middleware Stack
8
+ *
9
+ * The following middleware are applied in the default Express pipeline:
10
+ *
11
+ * - **DNS Rebinding Protection** - Validates Host header (MCP MUST, not in SDK)
12
+ * - **Rate Limiting** - Prevents abuse and DoS attacks (not in SDK)
13
+ * - **Protocol Version** - Early rejection of unsupported protocol versions
14
+ *
15
+ * Content-Type, Accept header, and JSON-RPC validation are handled internally
16
+ * by the SDK's `StreamableHTTPServerTransport`.
17
+ *
18
+ * ## Default Middleware Stack Order
19
+ *
20
+ * ```typescript
21
+ * app.use('/mcp', dnsRebindingProtection); // 1. Security (Express level)
22
+ * app.use('/mcp', createRateLimiter()); // 2. Rate limiting (Express level)
23
+ * app.use('/mcp', validateProtocolVersion); // 3. Protocol version (early reject)
24
+ * // SDK handles: Content-Type, Accept, JSON-RPC
25
+ * ```
26
+ *
27
+ * @see https://modelcontextprotocol.io/specification/2025-03-26/basic/transports
28
+ *
29
+ * @module server/middleware
30
+ */
31
+ /**
32
+ * DNS Rebinding Protection (MCP MUST, not handled by SDK)
33
+ * Validates Host header to prevent DNS rebinding attacks
34
+ */
35
+ export { dnsRebindingProtection } from "./dns-rebinding.js";
36
+ /**
37
+ * Rate Limiting (not handled by SDK)
38
+ * Prevents abuse and DoS attacks
39
+ */
40
+ export { createRateLimiter } from "./rate-limit.js";
41
+ /**
42
+ * Protocol Version Validation
43
+ * Early rejection of unsupported protocol versions before reaching the SDK
44
+ */
45
+ export { validateProtocolVersion } from "./protocol-version.js";
46
+ /**
47
+ * Trust Proxy Resolution
48
+ * Validates and resolves trust proxy values with DNS hostname support
49
+ */
50
+ export { resolveTrustProxy, TRUST_PROXY_KEYWORDS } from "./trust-proxy.js";
51
+ // ===== Authentication Middleware =====
52
+ /**
53
+ * Bearer Auth Middleware
54
+ * Validates access tokens via OAuth provider or custom token verifier
55
+ */
56
+ export { createBearerAuth } from "./bearer-auth.js";
57
+ /**
58
+ * Custom Header Auth Middleware
59
+ * Extracts and validates tokens from custom headers (e.g. X-API-Key)
60
+ */
61
+ export { createCustomHeaderAuth } from "./custom-header-auth.js";
62
+ // ===== Security Logging Utilities =====
63
+ /**
64
+ * Sanitizes a string for logging to prevent log injection attacks.
65
+ * Replaces newlines and other control characters.
66
+ */
67
+ export { sanitizeForLog, logSecurityEvent } from "./logging.js";
68
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/middleware/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH;;;GAGG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE5D;;;GAGG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGpD;;;GAGG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE;;;GAGG;AACH,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE3E,wCAAwC;AAExC;;;GAGG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD;;;GAGG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAGjE,yCAAyC;AAEzC;;;GAGG;AACH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Security logging utilities for transport middleware
3
+ *
4
+ * @module server/middleware/logging
5
+ */
6
+ /**
7
+ * Truncates and trims untrusted input for safe inclusion in log messages.
8
+ *
9
+ * Does NOT apply CWE-117 escaping here — the Logger pipeline applies
10
+ * InjectionGuard.sanitize() automatically. Pre-sanitizing would cause
11
+ * double-escaping (e.g., backslashes being re-escaped).
12
+ */
13
+ export declare function sanitizeForLog(input: string | undefined | null): string;
14
+ /**
15
+ * Logs security events with consistent formatting.
16
+ *
17
+ * @param event - Security event description
18
+ * @param details - Optional context for the event
19
+ */
20
+ export declare function logSecurityEvent(event: string, details?: unknown): void;
21
+ //# sourceMappingURL=logging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../../src/server/middleware/logging.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAGvE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAEvE"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Security logging utilities for transport middleware
3
+ *
4
+ * @module server/middleware/logging
5
+ */
6
+ import { logger as baseLogger } from "../../logger/index.js";
7
+ import { TRANSPORT_LOG_COMPONENTS } from "../transport/constants.js";
8
+ const logger = baseLogger.child({
9
+ component: TRANSPORT_LOG_COMPONENTS.SECURITY,
10
+ });
11
+ /** @internal Log messages for transport logging utilities */
12
+ const LogMessages = {
13
+ SECURITY_EVENT: "Security: %s",
14
+ };
15
+ /**
16
+ * Truncates and trims untrusted input for safe inclusion in log messages.
17
+ *
18
+ * Does NOT apply CWE-117 escaping here — the Logger pipeline applies
19
+ * InjectionGuard.sanitize() automatically. Pre-sanitizing would cause
20
+ * double-escaping (e.g., backslashes being re-escaped).
21
+ */
22
+ export function sanitizeForLog(input) {
23
+ if (!input)
24
+ return "";
25
+ return input.trim().slice(0, 200);
26
+ }
27
+ /**
28
+ * Logs security events with consistent formatting.
29
+ *
30
+ * @param event - Security event description
31
+ * @param details - Optional context for the event
32
+ */
33
+ export function logSecurityEvent(event, details) {
34
+ logger.warn(LogMessages.SECURITY_EVENT, event, details || "");
35
+ }
36
+ //# sourceMappingURL=logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../../src/server/middleware/logging.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAErE,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC;IAC9B,SAAS,EAAE,wBAAwB,CAAC,QAAQ;CAC7C,CAAC,CAAC;AAEH,6DAA6D;AAC7D,MAAM,WAAW,GAAG;IAClB,cAAc,EAAE,cAAc;CACtB,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,KAAgC;IAC7D,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,OAAiB;IAC/D,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;AAChE,CAAC"}