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
package/README.md ADDED
@@ -0,0 +1,439 @@
1
+ # MCP Server Framework
2
+
3
+ [![License: LGPL-3.0](https://img.shields.io/badge/License-LGPL--3.0-blue.svg)](LICENSE.md)
4
+ [![Node.js](https://img.shields.io/badge/Node.js-%E2%89%A520-green.svg)](https://nodejs.org/)
5
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.9+-blue.svg)](https://www.typescriptlang.org/)
6
+ [![MCP SDK](https://img.shields.io/badge/MCP_SDK-1.27+-purple.svg)](https://modelcontextprotocol.io/)
7
+ [![Express](https://img.shields.io/badge/Express-5.x-lightgrey.svg)](https://expressjs.com/)
8
+
9
+ A production-ready TypeScript framework for building [Model Context Protocol](https://modelcontextprotocol.io/) servers — born out of the belief that MCP server development shouldn't mean reinventing infrastructure every time.
10
+
11
+ ## Why This Framework?
12
+
13
+ When I started building an MCP server for [Komodo MCP Server](https://github.com/MP-Tool/komodo-mcp-server), I quickly realized that the MCP SDK gives you protocol handling, but everything around it — transport management, session lifecycle, security middleware, configuration, observability, error handling — you're on your own. Every MCP server project ends up solving the same problems from scratch if you want a flexible,production-ready MCP server.
14
+
15
+ This framework extracts that infrastructure into a reusable foundation. The goal is simple: **you focus on your API, tools, resources and prompts — the framework handles everything else.**
16
+
17
+ It's opinionated where it matters (security defaults, structured logging, transport abstraction) and flexible where it should be (pluggable session stores, optional OpenTelemetry, multiple transport modes). Whether you're building a local CLI tool for Claude Desktop or a multi-client HTTP service in Docker — the same `defineTool()` call works everywhere.
18
+
19
+ ## Disclaimer
20
+
21
+ This framework is a personal project built with best effort and care. AI tools (GitHub Copilot, Claude) were used extensively during development — for code generation, architecture exploration, and documentation. All AI-generated code and documentation has been critically reviewed, tested, and refined by me.
22
+
23
+ That said: this software is provided **as-is, without warranty of any kind**. See the [license](LICENSE.md) for the full legal terms. If you find bugs or have ideas, [issues](https://github.com/MP-Tool/mcp-server-framework/issues) and contributions are always welcome.
24
+
25
+ ## License
26
+
27
+ [LGPL-3.0](LICENSE.md) — GNU Lesser General Public License v3.0 or later
28
+
29
+ ## Features
30
+
31
+ ### 🔌 Transport & Protocol
32
+
33
+ - **Multi-Transport** — Stdio, Streamable HTTP (stateful & stateless), SSE (legacy). Same `defineTool()` code works everywhere.
34
+ - **HTTPS / TLS** — Native TLS support with configurable cert/key paths, passphrase, and trust proxy for reverse proxies.
35
+ - **Stateless Mode** — Per-request sessions for serverless and edge deployments, zero state overhead.
36
+ - **SSE Resumability** — Pluggable `EventStore` interface for resilient SSE stream reconnections.
37
+
38
+ ### 🔐 Authentication & Security
39
+
40
+ - **OAuth 2.1 / OIDC** — Opt-in auth with three patterns: OIDC auto-discovery (Keycloak, Auth0, Okta, Azure AD), upstream OAuth proxy (GitHub, Google), and custom token verification.
41
+ - **Scope-Based Access Control** — Permission guards (`requireAuth`, `requireScope`, `hasScope`) for fine-grained tool access.
42
+ - **Security Middleware Stack** — Helmet headers, DNS rebinding protection, configurable rate limiting, protocol version validation — all enabled by default for HTTP transports.
43
+ - **Secret Scrubbing** — JWT, Bearer tokens, and API keys automatically redacted from logs. CWE-117 log injection guard strips ANSI escapes and neutralizes injection attempts.
44
+
45
+ ### 🛠️ Developer Experience
46
+
47
+ - **Type-Safe Factories** — `defineTool()`, `defineResource()`, `defineResourceTemplate()`, `definePrompt()` with full Zod schema validation and auto-completion.
48
+ - **MCP Apps** — `defineApp()` combines a tool with a UI resource in one declaration, enabling rich client interfaces via `_meta.ui.resourceUri`.
49
+ - **MCP Tasks** *(experimental)* — `defineTask()` for async background work with `tasks/list`, `tasks/get`, `tasks/cancel` protocol support.
50
+ - **Zero-Boilerplate** — Auto-registration via global registries. Import a tool file = it's registered. `createServer()` picks it up automatically.
51
+ - **Response Helpers** — `text()`, `json()`, `error()`, `image()`, `audio()`, `multi()` — no manual content array assembly.
52
+ - **Builder Pattern** — `McpServerBuilder` fluent API for full control: custom providers, lifecycle hooks, explicit wiring.
53
+
54
+ ### 📊 Observability & Operations
55
+
56
+ - **OpenTelemetry** — Distributed tracing and metrics with zero-cost lazy loading (no overhead when disabled). OTLP and Prometheus export.
57
+ - **Structured Logging** — Pipeline-based logger with JSON (ECS) and text formatters, file + console writers, `AsyncLocalStorage` for automatic request context.
58
+ - **Dual Logging** — Framework logs go to stderr/files; MCP client notifications go to the connected client via SDK — simultaneously.
59
+ - **Health Endpoints** — Kubernetes-ready `/health` (liveness) and `/ready` (readiness with API connectivity, session capacity, and configuration checks).
60
+
61
+ ### ⚙️ Configuration & Session Management
62
+
63
+ - **12-Factor Config** — Five-level cascade: defaults → `.env` → config file (TOML/YAML/JSON) → environment variables → programmatic overrides.
64
+ - **Pluggable Session Store** — `SessionStore` interface with in-memory default. Bring your own Redis, PostgreSQL, or any backend.
65
+ - **Session Lifecycle** — Configurable idle timeouts, heartbeat keep-alive, dead connection cleanup, and max session capacity.
66
+ - **Connection State Manager** — Generic `ConnectionStateManager<TApi>` with health checks, state transitions, and reconnection tracking for API clients.
67
+ - **Graceful Shutdown** — SIGINT/SIGTERM handling, session drain, configurable shutdown timeouts.
68
+
69
+ ### 🧩 Error System
70
+
71
+ - **Typed Error Hierarchy** — `AppError` base with categories: MCP, Session, Transport, Validation, Configuration, Operation, System.
72
+ - **`FrameworkErrorFactory`** — Single import for all error types with unique IDs, HTTP/JSON-RPC code mappings, recovery hints, and cause chains.
73
+
74
+ ## Quick Start
75
+
76
+ ```typescript
77
+ import { createServer, defineTool, text, z } from 'mcp-server-framework';
78
+
79
+ defineTool({
80
+ name: 'greet',
81
+ description: 'Greet someone',
82
+ input: z.object({ name: z.string() }),
83
+ handler: async ({ input }) => text(`Hello, ${input.name}!`),
84
+ });
85
+
86
+ const { start } = createServer({
87
+ name: 'my-server',
88
+ version: '1.0.0',
89
+ });
90
+
91
+ await start();
92
+ ```
93
+
94
+ That's it. The tool is auto-registered, the server starts on stdio by default.
95
+
96
+ ## Installation
97
+
98
+ ```bash
99
+ npm install mcp-server-framework @modelcontextprotocol/sdk zod
100
+ ```
101
+
102
+ **For HTTP transport** (Express is a peer dependency, optional for stdio-only):
103
+
104
+ ```bash
105
+ npm install express
106
+ ```
107
+
108
+ **For OpenTelemetry** (all optional):
109
+
110
+ ```bash
111
+ npm install @opentelemetry/api @opentelemetry/sdk-node @opentelemetry/sdk-metrics \
112
+ @opentelemetry/instrumentation-http @opentelemetry/instrumentation-express \
113
+ @opentelemetry/exporter-trace-otlp-http @opentelemetry/exporter-prometheus
114
+ ```
115
+
116
+ **Requirements**: Node.js ≥20.0.0, TypeScript ≥5.0
117
+
118
+ ## Primary API
119
+
120
+ ### High-Level: `createServer()` + `define*()`
121
+
122
+ ```typescript
123
+ import { createServer, defineTool, defineResource, definePrompt, text, json, z } from 'mcp-server-framework';
124
+
125
+ // Tools — auto-registered in the global registry
126
+ defineTool({
127
+ name: 'health',
128
+ description: 'Check server health',
129
+ input: z.object({}),
130
+ handler: async () => text('OK'),
131
+ });
132
+
133
+ // Resources — static URI-based content
134
+ defineResource({
135
+ uri: 'config://version',
136
+ name: 'Version Info',
137
+ handler: async () => json({ version: '1.0.0' }),
138
+ });
139
+
140
+ // Prompts — reusable prompt templates
141
+ definePrompt({
142
+ name: 'summarize',
143
+ description: 'Summarize a topic',
144
+ args: [{ name: 'topic', description: 'Topic to summarize', required: true }],
145
+ handler: async ({ args }) => ({
146
+ messages: [{ role: 'user', content: { type: 'text', text: `Summarize: ${args.topic}` } }],
147
+ }),
148
+ });
149
+
150
+ // Start the server
151
+ const { start } = createServer({
152
+ name: 'my-server',
153
+ version: '1.0.0',
154
+ });
155
+ await start();
156
+ ```
157
+
158
+ ### Advanced: `McpServerBuilder`
159
+
160
+ For full control over server composition:
161
+
162
+ ```typescript
163
+ import { McpServerBuilder } from 'mcp-server-framework';
164
+
165
+ const server = new McpServerBuilder()
166
+ .withOptions({
167
+ name: 'advanced-server',
168
+ version: '1.0.0',
169
+ transport: { mode: 'http', host: '0.0.0.0', port: 8000 },
170
+ })
171
+ .withToolProvider(myToolRegistry)
172
+ .withResourceProvider(myResourceProvider)
173
+ .withLifecycleHooks({
174
+ onStarted: () => console.log('Server ready'),
175
+ })
176
+ .build();
177
+
178
+ await server.start();
179
+ ```
180
+
181
+ ## Definition Helpers
182
+
183
+ | Function | Description | Auto-Registration |
184
+ |----------|-------------|-------------------|
185
+ | `defineTool()` | MCP Tool with Zod schema and handler | `globalToolRegistry` |
186
+ | `defineResource()` | Static MCP Resource (URI-based) | `globalResourceRegistry` |
187
+ | `defineResourceTemplate()` | URI-template Resource with parameters | `globalResourceRegistry` |
188
+ | `definePrompt()` | MCP Prompt with optional arguments | `globalPromptRegistry` |
189
+ | `defineApp()` | MCP App (Tool + Resource composition) | `globalToolRegistry` + `globalResourceRegistry` |
190
+ | `defineTask()` | Async background task tool (experimental) | `globalTaskToolRegistry` |
191
+
192
+ ## Response Helpers
193
+
194
+ | Function | Description |
195
+ |----------|-------------|
196
+ | `text()` | Text content response |
197
+ | `json()` | JSON-serialized response |
198
+ | `error()` | Error response with `isError: true` |
199
+ | `image()` | Base64-encoded image |
200
+ | `audio()` | Base64-encoded audio |
201
+ | `multi()` | Multi-content response |
202
+
203
+ ## Transport Modes
204
+
205
+ | Transport | Protocol | Session Mode | Use Case |
206
+ |-----------|----------|--------------|----------|
207
+ | **Stdio** | — | Single session | CLI, local development (Claude Desktop, VS Code) |
208
+ | **Streamable HTTP** (stateful) | 2025-03-26 | Persistent sessions | Production, Docker, multi-client |
209
+ | **Streamable HTTP** (stateless) | 2025-03-26 | Per-request | Serverless, edge, horizontal scaling |
210
+ | **SSE** (legacy) | 2024-11-05 | Persistent sessions | Backwards compatibility |
211
+
212
+ ```typescript
213
+ // Stdio (default)
214
+ createServer({ transport: { mode: 'stdio' } });
215
+
216
+ // HTTP
217
+ createServer({ transport: { mode: 'http', host: '0.0.0.0', port: 8000 } });
218
+
219
+ // HTTPS
220
+ createServer({ transport: { mode: 'https', host: '0.0.0.0', port: 8443 } });
221
+
222
+ // Stateless (serverless / edge)
223
+ createServer({ transport: { mode: 'http', host: '0.0.0.0', port: 8000, stateless: true } });
224
+ ```
225
+
226
+ ## Configuration
227
+
228
+ The framework follows the [12-Factor App](https://12factor.net/config) methodology.
229
+ Sources are merged in order of precedence:
230
+
231
+ ```
232
+ Defaults → .env file → Config file → Environment variables → Programmatic overrides
233
+ ```
234
+
235
+ **Environment variables** (excerpt — [full reference](docs/configuration.md)):
236
+
237
+ | Variable | Default | Description |
238
+ |----------|---------|-------------|
239
+ | `MCP_TRANSPORT` | `http` | Transport mode: `stdio`, `http`, `https` |
240
+ | `MCP_BIND_HOST` | `127.0.0.1` | Host to bind to |
241
+ | `MCP_PORT` | `8000` | Port to listen on |
242
+ | `MCP_STATELESS` | `false` | Stateless mode (no sessions) |
243
+ | `MCP_JSON_RESPONSE` | `true` | Prefer JSON over SSE for non-streaming responses |
244
+ | `MCP_BODY_SIZE_LIMIT` | `1mb` | Max request body size |
245
+ | `LOG_LEVEL` | `info` | Log level: `trace`, `debug`, `info`, `warn`, `error` |
246
+ | `OTEL_ENABLED` | `false` | Enable OpenTelemetry tracing & metrics |
247
+
248
+ **Config file** (auto-discovered as `mcp-server.toml`, `.yaml`, `.json` in CWD):
249
+
250
+ ```toml
251
+ [transport]
252
+ mode = "http"
253
+ host = "0.0.0.0"
254
+ port = 8000
255
+
256
+ [security]
257
+ trust_proxy = "loopback"
258
+
259
+ [session]
260
+ timeout_ms = 1800000
261
+
262
+ [logging]
263
+ level = "info"
264
+ format = "json"
265
+ ```
266
+
267
+ ## Subpath Exports
268
+
269
+ For advanced use cases, internal modules are available via subpath imports:
270
+
271
+ | Import Path | Purpose |
272
+ |-------------|---------|
273
+ | `mcp-server-framework` | Main API: `createServer`, `defineTool`, auth providers, guards, helpers |
274
+ | `mcp-server-framework/logger` | Logger configuration, child loggers |
275
+ | `mcp-server-framework/connection` | `ConnectionStateManager` for API clients |
276
+ | `mcp-server-framework/session` | Session internals, `SessionStore` interface |
277
+ | `mcp-server-framework/telemetry` | OpenTelemetry tracing & metrics |
278
+ | `mcp-server-framework/errors` | Error classes & `FrameworkErrorFactory` |
279
+ | `mcp-server-framework/http` | Express app, HTTP/HTTPS server (lazy-loaded) |
280
+ | `mcp-server-framework/config` | Config cache, env schema, Zod helpers |
281
+
282
+ ```typescript
283
+ import { ConnectionStateManager } from 'mcp-server-framework/connection';
284
+ import { FrameworkErrorFactory } from 'mcp-server-framework/errors';
285
+ import { withSpan } from 'mcp-server-framework/telemetry';
286
+ import type { SessionStore } from 'mcp-server-framework/session';
287
+ ```
288
+
289
+ ## Architecture
290
+
291
+ ```
292
+ src/
293
+ ├── mcp/ # MCP Protocol Layer
294
+ │ ├── capabilities/ # Registries, define*() factories, apps, tasks
295
+ │ ├── handlers/ # Ping, progress
296
+ │ ├── responses/ # text(), json(), error(), image(), audio(), multi()
297
+ │ └── types/ # ToolDefinition, ResourceDefinition, ToolContext
298
+ ├── server/ # Server Infrastructure
299
+ │ ├── auth/ # OAuth 2.1, OIDC auto-discovery, guards
300
+ │ ├── builder/ # McpServerBuilder (fluent API)
301
+ │ ├── http/ # Express app factory, HTTP/HTTPS server (lazy-loaded)
302
+ │ ├── middleware/ # Helmet, DNS rebinding, rate limiting, auth
303
+ │ ├── routes/ # Health, readiness, metrics, streamable HTTP, SSE
304
+ │ ├── session/ # SessionManager, SessionStore, Housekeeper, auth context
305
+ │ ├── transport/ # Stdio, Streamable HTTP, SSE transports
306
+ │ └── telemetry/ # OpenTelemetry traces, metrics, SDK init (lazy-loaded)
307
+ ├── api/ # API Client Abstraction
308
+ │ └── connection/ # ConnectionStateManager<TApi>
309
+ ├── logger/ # Structured Logging
310
+ │ ├── scrubbing/ # Secret scrubbing, injection guard
311
+ │ ├── formatters/ # JSON (ECS), text
312
+ │ └── writers/ # Console, file, composite
313
+ ├── errors/ # Error System
314
+ │ ├── core/ # AppError, ErrorCodes, HTTP/JSON-RPC mappings
315
+ │ └── categories/ # Validation, Connection, MCP, Operation, System
316
+ ├── config/ # Configuration
317
+ │ └── # Env schema (Zod), config cache, file parser
318
+ └── utils/ # Helpers
319
+ ```
320
+
321
+ ## Security
322
+
323
+ The HTTP middleware stack runs before the MCP SDK processes any request:
324
+
325
+ ```
326
+ Request → Trust Proxy → Helmet → DNS Rebinding → Rate Limiter → Auth → Protocol Version → SDK
327
+ ```
328
+
329
+ - **Helmet**: Security headers (CSP, X-Frame-Options, HSTS, Referrer-Policy, etc.)
330
+ - **DNS Rebinding Protection**: Host header validation against allowed hosts
331
+ - **Rate Limiting**: Configurable window, max requests, and custom key generators
332
+ - **Trust Proxy**: Native Express trust-proxy support for reverse proxies (nginx, Traefik, Cloud LBs)
333
+ - **Secret Scrubbing**: JWT, Bearer tokens, API keys automatically redacted from all log output
334
+ - **Log Injection Guard**: CWE-117 protection — ANSI escapes stripped, injection attempts neutralized
335
+
336
+ ## Authentication
337
+
338
+ OAuth 2.1 and OIDC authentication is **opt-in** — servers work without auth by default.
339
+
340
+ ```typescript
341
+ import { createServer, createOidcProvider } from 'mcp-server-framework';
342
+
343
+ // OIDC auto-discovery (Keycloak, Auth0, Okta, Azure AD, ...)
344
+ const { provider, callbackHandler } = await createOidcProvider({
345
+ issuer: 'https://auth.example.com',
346
+ clientId: process.env.OIDC_CLIENT_ID!,
347
+ clientSecret: process.env.OIDC_CLIENT_SECRET!,
348
+ serverUrl: 'http://localhost:8000',
349
+ });
350
+
351
+ const { start } = createServer({
352
+ name: 'secure-server',
353
+ version: '1.0.0',
354
+ transport: { mode: 'http' },
355
+ auth: { provider, callbackHandler },
356
+ });
357
+ await start();
358
+ ```
359
+
360
+ **Supported patterns**:
361
+ - **OIDC Auto-Discovery** — `createOidcProvider()` fetches `.well-known/openid-configuration` automatically
362
+ - **Upstream OAuth Proxy** — `createUpstreamOAuthProvider()` for GitHub, Google, and other OAuth services
363
+ - **Custom Token Verifier** — Implement `TokenVerifier` for API keys, custom JWTs, or any auth scheme
364
+ - **Permission Guards** — `requireAuth()`, `requireScope()`, `hasScope()` for tool-level access control
365
+
366
+ Health (`/health`) and metrics (`/metrics`) endpoints remain unauthenticated for liveness/readiness probes.
367
+
368
+ ## Error Handling
369
+
370
+ All framework errors extend `AppError` with structured metadata:
371
+
372
+ ```typescript
373
+ import { FrameworkErrorFactory } from 'mcp-server-framework/errors';
374
+
375
+ throw FrameworkErrorFactory.mcp.invalidRequest('Missing required parameter');
376
+ throw FrameworkErrorFactory.session.expired('sess-abc123');
377
+ throw FrameworkErrorFactory.validation.fieldRequired('name');
378
+ ```
379
+
380
+ Each error includes: unique `errorId` (UUID), `code`, `statusCode` (HTTP), `mcpCode` (JSON-RPC),
381
+ `recoveryHint`, `cause` chain, and `timestamp`.
382
+
383
+ ## Process Error Handling
384
+
385
+ The framework handles graceful shutdown (SIGINT, SIGTERM) but delegates process-level error
386
+ handling to consumers. Add these handlers in your server entry point:
387
+
388
+ ```typescript
389
+ process.on('unhandledRejection', (reason) => {
390
+ logger.error('Unhandled rejection: %s', reason);
391
+ });
392
+
393
+ process.on('uncaughtException', (error) => {
394
+ logger.error('Uncaught exception: %s', error.message);
395
+ process.exit(1);
396
+ });
397
+ ```
398
+
399
+ ## Tech Stack
400
+
401
+ ### Core
402
+
403
+ | Technology | Version | Purpose |
404
+ |------------|---------|---------|
405
+ | TypeScript | ^5.0 | Strict mode, ES2022 target, `exactOptionalPropertyTypes`, `verbatimModuleSyntax` |
406
+ | Node.js | ≥20.0.0 | Runtime (ESM, `node:` built-ins) |
407
+ | `@modelcontextprotocol/sdk` | ^1.27.1 | MCP Protocol SDK — tools, resources, prompts, transports |
408
+ | Express | ^5.2.1 | HTTP/HTTPS transport (lazy-loaded, see DD-018) |
409
+ | Zod | ^3.25.0 | Runtime schema validation for tool inputs and config |
410
+
411
+ ### Security & Middleware
412
+
413
+ | Technology | Version | Purpose |
414
+ |------------|---------|---------|
415
+ | Helmet | ^8.1.0 | Security headers (CSP, X-Frame-Options, HSTS, etc.) |
416
+ | `express-rate-limit` | ^8.2.1 | Configurable request rate limiting |
417
+ | CORS | ^2.8.5 | Cross-origin resource sharing |
418
+
419
+ ### Observability (opt-in, lazy-loaded)
420
+
421
+ | Technology | Version | Purpose |
422
+ |------------|---------|---------|
423
+ | `@opentelemetry/sdk-node` | ^0.213.0 | OTEL SDK orchestration |
424
+ | `@opentelemetry/api` | ^1.9.0 | Tracing API, span context |
425
+ | `@opentelemetry/sdk-metrics` | ^2.6.0 | Metrics collection & export |
426
+ | `@opentelemetry/instrumentation-http` | ^0.213.0 | Automatic HTTP span instrumentation |
427
+ | `@opentelemetry/instrumentation-express` | ^0.61.0 | Automatic Express route instrumentation |
428
+ | `@opentelemetry/exporter-prometheus` | ^0.213.0 | Prometheus `/metrics` endpoint |
429
+ | `@opentelemetry/exporter-trace-otlp-http` | ^0.213.0 | OTLP trace export (Jaeger, Grafana, etc.) |
430
+
431
+ ### Configuration & Utilities
432
+
433
+ | Technology | Version | Purpose |
434
+ |------------|---------|---------|
435
+ | dotenv | ^17.3.1 | `.env` file loading |
436
+ | smol-toml | ^1.3.1 | TOML config file parsing |
437
+ | yaml | ^2.7.1 | YAML config file parsing |
438
+
439
+ > **Note**: Express, Zod, and all OpenTelemetry packages are **peer dependencies**. OTEL packages are optional — install only what you need. Express is optional, stdio-only servers.
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Framework Config Cache
3
+ *
4
+ * Provides a cached, lazily-initialized accessor for the parsed
5
+ * framework environment configuration. Single source of truth —
6
+ * all modules delegate to this cache instead of caching locally.
7
+ *
8
+ * Config sources are applied in 12-Factor priority order (highest wins):
9
+ * 1. Defaults (from Zod schema)
10
+ * 2. `.env` file (parsed via `dotenv.parse()` — no `process.env` mutation)
11
+ * 3. Config file (config.toml / config.yaml / config.yml / config.json)
12
+ * 4. Environment variables (`process.env`)
13
+ * 5. Programmatic overrides (via `applyConfigOverrides()`)
14
+ *
15
+ * This follows the 12-Factor App methodology: environment variables
16
+ * always override config file values, enabling per-deploy overrides
17
+ * without touching configuration files.
18
+ *
19
+ * Derived caches in middleware (DNS rebinding, rate limiter) register
20
+ * their reset functions so `resetConfigCache()` invalidates everything.
21
+ *
22
+ * @module config/config-cache
23
+ */
24
+ import { type FrameworkEnvConfig } from "./env.js";
25
+ import { type ConfigSource } from "./file/index.js";
26
+ /**
27
+ * Minimal logger interface for config module.
28
+ * Avoids direct dependency on the framework logger.
29
+ */
30
+ interface ConfigLogger {
31
+ debug(message: string, ...args: unknown[]): void;
32
+ info(message: string, ...args: unknown[]): void;
33
+ }
34
+ /**
35
+ * Inject the framework logger into the config module.
36
+ *
37
+ * Called once during server startup after the logger is initialized.
38
+ * Before injection, log calls are silently dropped (startup-critical
39
+ * warnings use `addStartupWarning()` which writes to stderr immediately).
40
+ *
41
+ * @param injectedLogger - A ConfigLogger instance (caller creates child logger)
42
+ * @internal
43
+ */
44
+ export declare function setConfigLogger(injectedLogger: ConfigLogger): void;
45
+ /**
46
+ * Check whether the framework config has been initialized.
47
+ *
48
+ * Used by the extensions module to guard against late registration
49
+ * of config sections after config loading is complete.
50
+ *
51
+ * @returns `true` if `getFrameworkConfig()` has been called at least once
52
+ * @internal
53
+ */
54
+ export declare function isConfigInitialized(): boolean;
55
+ /**
56
+ * Returns the parsed framework environment configuration.
57
+ *
58
+ * The config is lazily initialized on first access and cached
59
+ * for the lifetime of the process. This avoids re-parsing
60
+ * environment variables on every request.
61
+ *
62
+ * On first call, the initialization sequence is:
63
+ * 1. Parse environment variables (defaults + env)
64
+ * 2. Discover and load config file (if present)
65
+ * 3. Merge config file and overrides env config
66
+ * 4. Validate cross-field constraints on merged result
67
+ *
68
+ * @returns Parsed and validated framework environment configuration
69
+ */
70
+ export declare function getFrameworkConfig(): Readonly<FrameworkEnvConfig>;
71
+ /**
72
+ * Returns metadata about which config source is active.
73
+ *
74
+ * Useful for logging after the logger is initialized.
75
+ * Returns `undefined` if the config hasn't been loaded yet.
76
+ */
77
+ export declare function getConfigSource(): ConfigSource | undefined;
78
+ /**
79
+ * Registers a satellite cache reset function.
80
+ *
81
+ * Modules that derive cached values from the framework config
82
+ * (e.g., allowed hosts list, rate limiter instance) register their
83
+ * reset functions here so `resetConfigCache()` can invalidate them.
84
+ *
85
+ * @param resetFn - Function that clears the satellite cache
86
+ * @internal
87
+ */
88
+ export declare function registerCacheReset(resetFn: () => void): void;
89
+ /**
90
+ * Resets the framework config cache and all registered satellite caches.
91
+ *
92
+ * Intended for testing — forces re-parsing of environment
93
+ * variables on the next `getFrameworkConfig()` call and
94
+ * invalidates all derived caches.
95
+ *
96
+ * @internal
97
+ */
98
+ export declare function resetConfigCache(): void;
99
+ /**
100
+ * Applies programmatic overrides to the framework configuration cache.
101
+ *
102
+ * This bridges the gap between programmatic `createServer()` options and
103
+ * the environment-based framework configuration. Called early in the server
104
+ * startup sequence (before transport creation) to ensure all downstream
105
+ * modules see consistent configuration.
106
+ *
107
+ * Only non-undefined values are applied — environment variables remain
108
+ * the default source for any unspecified options.
109
+ *
110
+ * Automatically invalidates satellite caches (rate limiter, DNS rebinding, etc.)
111
+ * since the underlying config has changed.
112
+ *
113
+ * After merging, cross-field constraints are re-validated to catch
114
+ * invalid combinations (e.g., HTTPS mode without TLS paths).
115
+ *
116
+ * @param overrides - Partial config to merge into the cached configuration
117
+ */
118
+ export declare function applyConfigOverrides(overrides: Partial<FrameworkEnvConfig>): void;
119
+ export {};
120
+ //# sourceMappingURL=config-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-cache.d.ts","sourceRoot":"","sources":["../../src/config/config-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAKH,OAAO,EAAgD,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEjG,OAAO,EAAsC,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAiBxF;;;GAGG;AACH,UAAU,YAAY;IACpB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACjD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CACjD;AAWD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,cAAc,EAAE,YAAY,GAAG,IAAI,CAElE;AAeD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,IAAI,QAAQ,CAAC,kBAAkB,CAAC,CAKjE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,YAAY,GAAG,SAAS,CAE1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI,CAI5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CASvC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAkBjF"}