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,294 @@
1
+ /**
2
+ * MCP Notification Logger Module
3
+ *
4
+ * Provides structured logging via MCP notifications/message protocol.
5
+ * This allows MCP clients to receive and display server-side logs.
6
+ *
7
+ * Per MCP Spec, logging levels follow RFC 5424 (syslog):
8
+ * - emergency: System is unusable
9
+ * - alert: Action must be taken immediately
10
+ * - critical: Critical conditions
11
+ * - error: Error conditions
12
+ * - warning: Warning conditions
13
+ * - notice: Normal but significant condition
14
+ * - info: Informational messages
15
+ * - debug: Debug-level messages
16
+ *
17
+ * @module logger/mcp-logger
18
+ */
19
+ import { LOG_LEVEL_TO_MCP, MCP_LEVEL_ORDER } from "./core/constants.js";
20
+ import { secretScrubber as sharedScrubber } from "./scrubbing/secret-scrubber.js";
21
+ import { InjectionGuard } from "./scrubbing/injection-guard.js";
22
+ import { logger as baseLogger } from "./logger.js";
23
+ import { LOGGER_COMPONENTS } from "./core/constants.js";
24
+ // Create a child logger for this module
25
+ const localLogger = baseLogger.child({
26
+ component: LOGGER_COMPONENTS.MCP_LOGGER,
27
+ });
28
+ // ============================================================
29
+ // Constants
30
+ // ============================================================
31
+ // Use centralized constants from core/constants.ts
32
+ const LOG_LEVEL_MAP = LOG_LEVEL_TO_MCP;
33
+ // ============================================================
34
+ // McpNotificationLogger Class
35
+ // ============================================================
36
+ /**
37
+ * MCP Notification Logger
38
+ *
39
+ * Sends structured log messages to MCP clients via the notifications/message protocol.
40
+ * Clients that support the logging capability will receive and display these messages.
41
+ *
42
+ * Features:
43
+ * - Multi-server support for multi-session scenarios
44
+ * - Level filtering with configurable minimum level
45
+ * - Secret scrubbing for security
46
+ * - Context-aware logger creation for tool handlers
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * // Set up with MCP server
51
+ * mcpLogger.addServer(mcpServer);
52
+ *
53
+ * // Log messages (sent to all connected clients)
54
+ * await mcpLogger.info('Processing request...');
55
+ * await mcpLogger.warn('Resource limit approaching', { current: 80, max: 100 });
56
+ * await mcpLogger.error('Failed to connect', { error: 'Connection refused' });
57
+ * ```
58
+ */
59
+ export class McpNotificationLogger {
60
+ // ============================================================
61
+ // Instance Properties
62
+ // ============================================================
63
+ /** Set of registered notification handlers */
64
+ handlers = new Set();
65
+ /** Whether logging is enabled */
66
+ enabled;
67
+ /** Minimum log level to send */
68
+ minLevel;
69
+ /** Use shared secret scrubber instance for consistency */
70
+ secretScrubber = sharedScrubber;
71
+ /** Injection guard for CWE-117 protection (consistent with main logger pipeline) */
72
+ injectionGuard = new InjectionGuard();
73
+ // ============================================================
74
+ // Constructor
75
+ // ============================================================
76
+ /**
77
+ * Create a new McpNotificationLogger.
78
+ *
79
+ * @param config - Optional configuration
80
+ */
81
+ constructor(config = {}) {
82
+ this.enabled = config.enabled ?? true;
83
+ this.minLevel = config.minLevel ?? "debug";
84
+ }
85
+ // ============================================================
86
+ // Server Management
87
+ // ============================================================
88
+ /**
89
+ * Register a notification handler for receiving log notifications.
90
+ * Multiple handlers can be registered for multi-session scenarios.
91
+ *
92
+ * @param handler - The notification handler to register
93
+ */
94
+ addHandler(handler) {
95
+ this.handlers.add(handler);
96
+ localLogger.debug("Log notification handler registered", {
97
+ totalHandlers: this.handlers.size,
98
+ });
99
+ }
100
+ /**
101
+ * Unregister a notification handler.
102
+ *
103
+ * @param handler - The notification handler to remove
104
+ */
105
+ removeHandler(handler) {
106
+ this.handlers.delete(handler);
107
+ localLogger.trace("Log notification handler unregistered", {
108
+ remainingHandlers: this.handlers.size,
109
+ });
110
+ }
111
+ /**
112
+ * Clear all registered handlers.
113
+ */
114
+ clearHandlers() {
115
+ this.handlers.clear();
116
+ localLogger.trace("All log notification handlers cleared");
117
+ }
118
+ /**
119
+ * Get the number of registered handlers.
120
+ */
121
+ getHandlerCount() {
122
+ return this.handlers.size;
123
+ }
124
+ // ============================================================
125
+ // Configuration
126
+ // ============================================================
127
+ /**
128
+ * Enable or disable MCP logging.
129
+ * When disabled, log methods become no-ops but still return resolved promises.
130
+ *
131
+ * @param enabled - Whether to enable logging
132
+ */
133
+ setEnabled(enabled) {
134
+ this.enabled = enabled;
135
+ }
136
+ /**
137
+ * Check if logging is enabled.
138
+ */
139
+ isEnabled() {
140
+ return this.enabled;
141
+ }
142
+ /**
143
+ * Set the minimum log level.
144
+ * Messages below this level will not be sent.
145
+ *
146
+ * @param level - The minimum log level
147
+ */
148
+ setMinLevel(level) {
149
+ this.minLevel = level;
150
+ }
151
+ /**
152
+ * Get the current minimum log level.
153
+ */
154
+ getMinLevel() {
155
+ return this.minLevel;
156
+ }
157
+ /**
158
+ * Check if logging is currently available (enabled and has servers).
159
+ */
160
+ isAvailable() {
161
+ return this.enabled && this.handlers.size > 0;
162
+ }
163
+ // ============================================================
164
+ // Core Logging Methods
165
+ // ============================================================
166
+ /**
167
+ * Send a log message to all connected MCP clients.
168
+ *
169
+ * @param level - The MCP log level
170
+ * @param message - The log message
171
+ * @param data - Optional structured data to include
172
+ * @returns Promise that resolves when all sends complete
173
+ */
174
+ async log(level, message, data) {
175
+ // Early return if not available or below minimum level
176
+ if (!this.enabled || this.handlers.size === 0 || !this.shouldLog(level)) {
177
+ return;
178
+ }
179
+ // Format message with optional data, sanitize, and scrub secrets
180
+ const formattedMessage = this.formatMessage(message, data);
181
+ const sanitized = this.injectionGuard.sanitize(formattedMessage);
182
+ const safeMessage = this.secretScrubber.scrub(sanitized);
183
+ // Send to all registered handlers in parallel
184
+ const sendPromises = Array.from(this.handlers).map((handler) => this.sendToHandler(handler, level, safeMessage));
185
+ await Promise.all(sendPromises);
186
+ }
187
+ // ============================================================
188
+ // Convenience Methods (RFC 5424 Levels)
189
+ // ============================================================
190
+ /** Log a debug message */
191
+ async debug(message, data) {
192
+ return this.log("debug", message, data);
193
+ }
194
+ /** Log an info message */
195
+ async info(message, data) {
196
+ return this.log("info", message, data);
197
+ }
198
+ /** Log a notice message */
199
+ async notice(message, data) {
200
+ return this.log("notice", message, data);
201
+ }
202
+ /** Log a warning message */
203
+ async warn(message, data) {
204
+ return this.log("warning", message, data);
205
+ }
206
+ /** Log a warning message (alias for warn) */
207
+ async warning(message, data) {
208
+ return this.log("warning", message, data);
209
+ }
210
+ /** Log an error message */
211
+ async error(message, data) {
212
+ return this.log("error", message, data);
213
+ }
214
+ /** Log a critical message */
215
+ async critical(message, data) {
216
+ return this.log("critical", message, data);
217
+ }
218
+ /** Log an alert message */
219
+ async alert(message, data) {
220
+ return this.log("alert", message, data);
221
+ }
222
+ /** Log an emergency message */
223
+ async emergency(message, data) {
224
+ return this.log("emergency", message, data);
225
+ }
226
+ // ============================================================
227
+ // Context Logger Factory
228
+ // ============================================================
229
+ /**
230
+ * Create a context-aware logger function for use in tool handlers.
231
+ * Returns a function that can be passed to LogContext.sendMcpLog.
232
+ *
233
+ * @param handler - The notification handler for this context
234
+ * @returns A function compatible with LogContext.sendMcpLog
235
+ *
236
+ * @example
237
+ * ```typescript
238
+ * const sendMcpLog = mcpLogger.createContextLogger(handler);
239
+ * logger.runWithContext({ sendMcpLog }, () => {
240
+ * logger.info('This will also be sent to MCP client');
241
+ * });
242
+ * ```
243
+ */
244
+ createContextLogger(handler) {
245
+ return (level, message) => {
246
+ const mcpLevel = LOG_LEVEL_MAP[level];
247
+ const sanitized = this.injectionGuard.sanitize(message);
248
+ const safeMessage = this.secretScrubber.scrub(sanitized);
249
+ handler.sendLogNotification(mcpLevel, safeMessage).catch(() => {
250
+ // Silently ignore errors (client may have disconnected)
251
+ });
252
+ };
253
+ }
254
+ // ============================================================
255
+ // Private Helper Methods
256
+ // ============================================================
257
+ /**
258
+ * Check if a log level should be logged based on minimum level.
259
+ */
260
+ shouldLog(level) {
261
+ const minIndex = MCP_LEVEL_ORDER.indexOf(this.minLevel);
262
+ const currentIndex = MCP_LEVEL_ORDER.indexOf(level);
263
+ return currentIndex >= minIndex;
264
+ }
265
+ /**
266
+ * Format message with optional data.
267
+ */
268
+ formatMessage(message, data) {
269
+ if (!data || Object.keys(data).length === 0) {
270
+ return message;
271
+ }
272
+ return `${message} ${JSON.stringify(data)}`;
273
+ }
274
+ /**
275
+ * Send a log message to a specific handler.
276
+ */
277
+ async sendToHandler(handler, level, message) {
278
+ try {
279
+ await handler.sendLogNotification(level, message);
280
+ }
281
+ catch {
282
+ // Silently ignore errors (client may have disconnected)
283
+ }
284
+ }
285
+ }
286
+ // ============================================================
287
+ // Singleton Export
288
+ // ============================================================
289
+ /**
290
+ * Singleton instance of the MCP Notification Logger.
291
+ * Use this for sending log messages to MCP clients.
292
+ */
293
+ export const mcpLogger = new McpNotificationLogger();
294
+ //# sourceMappingURL=mcp-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-logger.js","sourceRoot":"","sources":["../../src/logger/mcp-logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Scrubbing Module
3
+ *
4
+ * Security utilities for log sanitization.
5
+ * Provides secret redaction and injection prevention.
6
+ *
7
+ * Note: Security constants (SENSITIVE_KEYS, REDACTED_VALUE, etc.) should be
8
+ * imported directly from '../core/constants.js' or '../core/index.js'
9
+ *
10
+ * @module logger/scrubbing
11
+ */
12
+ export { SecretScrubber, secretScrubber } from "./secret-scrubber.js";
13
+ export { InjectionGuard, injectionGuard, sanitizeForLogging } from "./injection-guard.js";
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/logger/scrubbing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Scrubbing Module
3
+ *
4
+ * Security utilities for log sanitization.
5
+ * Provides secret redaction and injection prevention.
6
+ *
7
+ * Note: Security constants (SENSITIVE_KEYS, REDACTED_VALUE, etc.) should be
8
+ * imported directly from '../core/constants.js' or '../core/index.js'
9
+ *
10
+ * @module logger/scrubbing
11
+ */
12
+ // Secret Scrubber
13
+ export { SecretScrubber, secretScrubber } from "./secret-scrubber.js";
14
+ // Injection Guard
15
+ export { InjectionGuard, injectionGuard, sanitizeForLogging } from "./injection-guard.js";
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/logger/scrubbing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtE,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Injection Guard Module
3
+ *
4
+ * Provides protection against log injection attacks (CWE-117).
5
+ * Prevents attackers from forging log entries by injecting newlines or control characters.
6
+ *
7
+ * @see https://cwe.mitre.org/data/definitions/117.html
8
+ * @module logger/scrubbing/injection-guard
9
+ */
10
+ /**
11
+ * Injection Guard class for preventing log injection attacks.
12
+ *
13
+ * Provides:
14
+ * - Newline escaping (CWE-117 mitigation)
15
+ * - Control character escaping
16
+ * - ANSI escape sequence stripping
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const guard = new InjectionGuard();
21
+ * const safe = guard.sanitize('User: admin\nLevel: root'); // "User: admin\\nLevel: root"
22
+ * ```
23
+ */
24
+ export declare class InjectionGuard {
25
+ private stripAnsi;
26
+ /**
27
+ * Create a new InjectionGuard.
28
+ * @param options - Configuration options
29
+ * @param options.stripAnsi - Whether to strip ANSI escape sequences (default: true)
30
+ */
31
+ constructor(options?: {
32
+ stripAnsi?: boolean;
33
+ });
34
+ /**
35
+ * Sanitize text to prevent log injection.
36
+ * Replaces newlines and control characters with escaped versions.
37
+ *
38
+ * @param text - The text to sanitize
39
+ * @returns Sanitized text safe for logging
40
+ */
41
+ sanitize(text: string): string;
42
+ /**
43
+ * Check if text contains potential injection characters.
44
+ *
45
+ * @param text - The text to check
46
+ * @returns true if the text contains injection characters
47
+ */
48
+ containsInjectionChars(text: string): boolean;
49
+ /**
50
+ * Check if text contains ANSI escape sequences.
51
+ *
52
+ * @param text - The text to check
53
+ * @returns true if the text contains ANSI sequences
54
+ */
55
+ containsAnsiSequences(text: string): boolean;
56
+ }
57
+ /**
58
+ * Default injection guard instance.
59
+ */
60
+ export declare const injectionGuard: InjectionGuard;
61
+ /**
62
+ * Convenience function to sanitize text for logging.
63
+ * Uses the default injection guard instance.
64
+ *
65
+ * @param text - The text to sanitize
66
+ * @returns Sanitized text
67
+ */
68
+ export declare function sanitizeForLogging(text: string): string;
69
+ //# sourceMappingURL=injection-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injection-guard.d.ts","sourceRoot":"","sources":["../../../src/logger/scrubbing/injection-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAwBH;;;;;;;;;;;;;GAaG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAU;IAE3B;;;;OAIG;gBACS,OAAO,GAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAO;IAIjD;;;;;;OAMG;IACI,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAkBrC;;;;;OAKG;IACI,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIpD;;;;;OAKG;IACI,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAGpD;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,gBAAuB,CAAC;AAEnD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Injection Guard Module
3
+ *
4
+ * Provides protection against log injection attacks (CWE-117).
5
+ * Prevents attackers from forging log entries by injecting newlines or control characters.
6
+ *
7
+ * @see https://cwe.mitre.org/data/definitions/117.html
8
+ * @module logger/scrubbing/injection-guard
9
+ */
10
+ import { CONTROL_CHAR_REPLACEMENTS, CONTROL_CHAR_PATTERN, ANSI_ESCAPE_PATTERN } from "../core/constants.js";
11
+ /**
12
+ * Pre-compiled regex for control characters (with /g flag for replacement).
13
+ */
14
+ const CONTROL_CHAR_REGEX = new RegExp(CONTROL_CHAR_PATTERN, "g");
15
+ /**
16
+ * Pre-compiled regex for testing control characters (without /g flag).
17
+ */
18
+ const CONTROL_CHAR_TEST_REGEX = new RegExp(CONTROL_CHAR_PATTERN);
19
+ /**
20
+ * Pre-compiled regex for ANSI escape sequences (with /g flag for replacement).
21
+ */
22
+ const ANSI_ESCAPE_REGEX = new RegExp(ANSI_ESCAPE_PATTERN, "g");
23
+ /**
24
+ * Pre-compiled regex for testing ANSI sequences (without /g flag).
25
+ */
26
+ const ANSI_ESCAPE_TEST_REGEX = new RegExp(ANSI_ESCAPE_PATTERN);
27
+ /**
28
+ * Injection Guard class for preventing log injection attacks.
29
+ *
30
+ * Provides:
31
+ * - Newline escaping (CWE-117 mitigation)
32
+ * - Control character escaping
33
+ * - ANSI escape sequence stripping
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * const guard = new InjectionGuard();
38
+ * const safe = guard.sanitize('User: admin\nLevel: root'); // "User: admin\\nLevel: root"
39
+ * ```
40
+ */
41
+ export class InjectionGuard {
42
+ stripAnsi;
43
+ /**
44
+ * Create a new InjectionGuard.
45
+ * @param options - Configuration options
46
+ * @param options.stripAnsi - Whether to strip ANSI escape sequences (default: true)
47
+ */
48
+ constructor(options = {}) {
49
+ this.stripAnsi = options.stripAnsi ?? true;
50
+ }
51
+ /**
52
+ * Sanitize text to prevent log injection.
53
+ * Replaces newlines and control characters with escaped versions.
54
+ *
55
+ * @param text - The text to sanitize
56
+ * @returns Sanitized text safe for logging
57
+ */
58
+ sanitize(text) {
59
+ let result = text;
60
+ // 1. Strip ANSI escape sequences if enabled
61
+ if (this.stripAnsi) {
62
+ result = result.replace(ANSI_ESCAPE_REGEX, "");
63
+ }
64
+ // 2. Escape control characters using centralized mapping.
65
+ // Unknown control chars get a generic \\xHH replacement.
66
+ result = result.replace(CONTROL_CHAR_REGEX, (char) => CONTROL_CHAR_REPLACEMENTS[char] ?? `\\x${char.charCodeAt(0).toString(16).padStart(2, "0")}`);
67
+ return result;
68
+ }
69
+ /**
70
+ * Check if text contains potential injection characters.
71
+ *
72
+ * @param text - The text to check
73
+ * @returns true if the text contains injection characters
74
+ */
75
+ containsInjectionChars(text) {
76
+ return CONTROL_CHAR_TEST_REGEX.test(text);
77
+ }
78
+ /**
79
+ * Check if text contains ANSI escape sequences.
80
+ *
81
+ * @param text - The text to check
82
+ * @returns true if the text contains ANSI sequences
83
+ */
84
+ containsAnsiSequences(text) {
85
+ return ANSI_ESCAPE_TEST_REGEX.test(text);
86
+ }
87
+ }
88
+ /**
89
+ * Default injection guard instance.
90
+ */
91
+ export const injectionGuard = new InjectionGuard();
92
+ /**
93
+ * Convenience function to sanitize text for logging.
94
+ * Uses the default injection guard instance.
95
+ *
96
+ * @param text - The text to sanitize
97
+ * @returns Sanitized text
98
+ */
99
+ export function sanitizeForLogging(text) {
100
+ return injectionGuard.sanitize(text);
101
+ }
102
+ //# sourceMappingURL=injection-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injection-guard.js","sourceRoot":"","sources":["../../../src/logger/scrubbing/injection-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE5G;;GAEG;AACH,MAAM,kBAAkB,GAAG,IAAI,MAAM,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;AAEjE;;GAEG;AACH,MAAM,uBAAuB,GAAG,IAAI,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAEjE;;GAEG;AACH,MAAM,iBAAiB,GAAG,IAAI,MAAM,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;AAE/D;;GAEG;AACH,MAAM,sBAAsB,GAAG,IAAI,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAE/D;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,cAAc;IACjB,SAAS,CAAU;IAE3B;;;;OAIG;IACH,YAAY,UAAmC,EAAE;QAC/C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;IAC7C,CAAC;IAED;;;;;;OAMG;IACI,QAAQ,CAAC,IAAY;QAC1B,IAAI,MAAM,GAAG,IAAI,CAAC;QAElB,4CAA4C;QAC5C,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,0DAA0D;QAC1D,4DAA4D;QAC5D,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,kBAAkB,EAClB,CAAC,IAAI,EAAE,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CACtG,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACI,sBAAsB,CAAC,IAAY;QACxC,OAAO,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;OAKG;IACI,qBAAqB,CAAC,IAAY;QACvC,OAAO,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;AAEnD;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Secret Scrubber Module
3
+ *
4
+ * Provides utilities for detecting and redacting sensitive information from logs.
5
+ * Handles JWTs, Bearer tokens, and key-value pairs with sensitive keys.
6
+ *
7
+ * @module logger/scrubbing/secret-scrubber
8
+ */
9
+ /**
10
+ * Secret Scrubber class for detecting and redacting sensitive information.
11
+ *
12
+ * Usage:
13
+ * - Create a scrubber: `const scrubber = new SecretScrubber();`
14
+ * - Scrub a string: `scrubber.scrub('token=secret123')` returns `'token=**********'`
15
+ * - Scrub an object: `scrubber.scrubObject({ password: 'secret' })` returns `{ password: '**********' }`
16
+ */
17
+ export declare class SecretScrubber {
18
+ /**
19
+ * Additional sensitive keys provided at construction time.
20
+ * These bypass the shared blocklist since they are explicitly
21
+ * provided by the consumer as known-sensitive patterns.
22
+ */
23
+ private readonly additionalKeys;
24
+ /**
25
+ * Create a new SecretScrubber.
26
+ * @param additionalKeys - Additional keys to consider sensitive
27
+ */
28
+ constructor(additionalKeys?: string[]);
29
+ /**
30
+ * Scrub secrets from a text string.
31
+ *
32
+ * Handles:
33
+ * - JWTs (eyJ...)
34
+ * - Bearer tokens
35
+ * - Key-value pairs with sensitive keys
36
+ *
37
+ * @param text - The text to scrub
38
+ * @returns The scrubbed text
39
+ */
40
+ scrub(text: string): string;
41
+ /**
42
+ * Recursively scrub sensitive keys from an object.
43
+ *
44
+ * Also scrubs string values that may contain embedded secrets
45
+ * (e.g., "password=secret123" patterns).
46
+ *
47
+ * @param obj - The object to scrub
48
+ * @returns A new object with sensitive values redacted
49
+ */
50
+ scrubObject(obj: unknown): unknown;
51
+ /**
52
+ * Internal recursive scrub with circular reference protection.
53
+ */
54
+ private scrubObjectRecursive;
55
+ /**
56
+ * Check if a key is sensitive.
57
+ *
58
+ * Delegates to the shared utility for base sensitive keys (including
59
+ * blocklist logic). Additional keys provided at construction are checked
60
+ * separately — they bypass the blocklist since they are explicitly
61
+ * declared as sensitive by the consumer.
62
+ *
63
+ * @param key - The key to check
64
+ * @returns true if the key matches a sensitive pattern
65
+ */
66
+ isSensitiveKey(key: string): boolean;
67
+ }
68
+ /**
69
+ * Default secret scrubber instance.
70
+ */
71
+ export declare const secretScrubber: SecretScrubber;
72
+ //# sourceMappingURL=secret-scrubber.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-scrubber.d.ts","sourceRoot":"","sources":["../../../src/logger/scrubbing/secret-scrubber.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA4CH;;;;;;;GAOG;AACH,qBAAa,cAAc;IACzB;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoB;IAEnD;;;OAGG;gBACS,cAAc,GAAE,MAAM,EAAO;IAIzC;;;;;;;;;;OAUG;IACI,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAoClC;;;;;;;;OAQG;IACI,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAIzC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAyC5B;;;;;;;;;;OAUG;IACI,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;CAS5C;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,gBAAuB,CAAC"}