memory-journal-mcp 9.0.0 → 9.1.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 (356) hide show
  1. package/README.md +165 -124
  2. package/dist/audit/interceptor.d.ts.map +1 -1
  3. package/dist/auth/authorization-server-discovery.d.ts.map +1 -1
  4. package/dist/auth/middleware.d.ts +11 -22
  5. package/dist/auth/middleware.d.ts.map +1 -1
  6. package/dist/auth/scope-map.d.ts.map +1 -1
  7. package/dist/auth/scopes.d.ts.map +1 -1
  8. package/dist/auth/token-validator.d.ts.map +1 -1
  9. package/dist/auth/transport-agnostic.d.ts +4 -0
  10. package/dist/auth/transport-agnostic.d.ts.map +1 -1
  11. package/dist/auth/validation.d.ts +1 -0
  12. package/dist/auth/validation.d.ts.map +1 -1
  13. package/dist/{chunk-6RCZ4IYV.js → chunk-4FZCHFB5.js} +28 -5
  14. package/dist/{chunk-AIWHVEOW.js → chunk-D2FY6XS5.js} +99 -7
  15. package/dist/chunk-FZLB6NAV.js +746 -0
  16. package/dist/{chunk-NVXCRDCO.js → chunk-LE6ZWUPK.js} +216 -138
  17. package/dist/chunk-SGJU2DHU.js +2102 -0
  18. package/dist/{chunk-2UIMA6JF.js → chunk-T7SROBBV.js} +32375 -29351
  19. package/dist/{chunk-IYZWMAA4.js → chunk-Y6MMKR2Z.js} +957 -1333
  20. package/dist/cli/commands/admin.d.ts +1 -1
  21. package/dist/cli/commands/admin.d.ts.map +1 -1
  22. package/dist/cli/commands/entry-payload.d.ts +38 -0
  23. package/dist/cli/commands/entry-payload.d.ts.map +1 -0
  24. package/dist/cli/commands/entry.d.ts +10 -0
  25. package/dist/cli/commands/entry.d.ts.map +1 -1
  26. package/dist/cli/commands/exec.d.ts.map +1 -1
  27. package/dist/cli/commands/io.d.ts +1 -0
  28. package/dist/cli/commands/io.d.ts.map +1 -1
  29. package/dist/cli/commands/visualize.d.ts.map +1 -1
  30. package/dist/cli/index.js +7 -10
  31. package/dist/cli/schemas.d.ts +14 -1
  32. package/dist/cli/schemas.d.ts.map +1 -1
  33. package/dist/cli/server-options-builder.d.ts.map +1 -1
  34. package/dist/cli.js +7 -10
  35. package/dist/codemode/api/journal-api.d.ts +5 -23
  36. package/dist/codemode/api/journal-api.d.ts.map +1 -1
  37. package/dist/codemode/api/key-normalizer.d.ts +8 -0
  38. package/dist/codemode/api/key-normalizer.d.ts.map +1 -0
  39. package/dist/codemode/api/param-normalizer.d.ts +2 -4
  40. package/dist/codemode/api/param-normalizer.d.ts.map +1 -1
  41. package/dist/codemode/api/project-registry-ops.d.ts +26 -0
  42. package/dist/codemode/api/project-registry-ops.d.ts.map +1 -0
  43. package/dist/codemode/api/sandbox-bindings.d.ts +25 -0
  44. package/dist/codemode/api/sandbox-bindings.d.ts.map +1 -0
  45. package/dist/codemode/api/types.d.ts.map +1 -1
  46. package/dist/codemode/api-constants.d.ts +3 -39
  47. package/dist/codemode/api-constants.d.ts.map +1 -1
  48. package/dist/codemode/constants/examples-and-params.d.ts +31 -0
  49. package/dist/codemode/constants/examples-and-params.d.ts.map +1 -0
  50. package/dist/codemode/constants/method-aliases.d.ts +8 -0
  51. package/dist/codemode/constants/method-aliases.d.ts.map +1 -0
  52. package/dist/codemode/normalizers/domain-tool-interceptions.d.ts +6 -0
  53. package/dist/codemode/normalizers/domain-tool-interceptions.d.ts.map +1 -0
  54. package/dist/codemode/normalizers/entry-and-search-interceptions.d.ts +6 -0
  55. package/dist/codemode/normalizers/entry-and-search-interceptions.d.ts.map +1 -0
  56. package/dist/codemode/normalizers/generic-interceptions.d.ts +6 -0
  57. package/dist/codemode/normalizers/generic-interceptions.d.ts.map +1 -0
  58. package/dist/codemode/normalizers/github-and-backup-interceptions.d.ts +6 -0
  59. package/dist/codemode/normalizers/github-and-backup-interceptions.d.ts.map +1 -0
  60. package/dist/codemode/normalizers/shared-utils.d.ts +31 -0
  61. package/dist/codemode/normalizers/shared-utils.d.ts.map +1 -0
  62. package/dist/codemode/param-normalizer.d.ts +5 -1
  63. package/dist/codemode/param-normalizer.d.ts.map +1 -1
  64. package/dist/codemode/proxy-helpers.d.ts +34 -0
  65. package/dist/codemode/proxy-helpers.d.ts.map +1 -0
  66. package/dist/codemode/proxy-namespaces.d.ts +30 -0
  67. package/dist/codemode/proxy-namespaces.d.ts.map +1 -0
  68. package/dist/codemode/security.d.ts +11 -0
  69. package/dist/codemode/security.d.ts.map +1 -1
  70. package/dist/codemode/type-generator.d.ts.map +1 -1
  71. package/dist/codemode/types.d.ts.map +1 -1
  72. package/dist/codemode/worker/mj-shim-domains.d.ts +15 -0
  73. package/dist/codemode/worker/mj-shim-domains.d.ts.map +1 -0
  74. package/dist/codemode/worker/mj-shim-proxy.d.ts +18 -0
  75. package/dist/codemode/worker/mj-shim-proxy.d.ts.map +1 -0
  76. package/dist/codemode/worker/namespace-shims.d.ts +32 -0
  77. package/dist/codemode/worker/namespace-shims.d.ts.map +1 -0
  78. package/dist/codemode/worker/node-shims.d.ts +65 -0
  79. package/dist/codemode/worker/node-shims.d.ts.map +1 -0
  80. package/dist/codemode/worker/prototype-hardening.d.ts +18 -0
  81. package/dist/codemode/worker/prototype-hardening.d.ts.map +1 -0
  82. package/dist/codemode/worker/result-compactor.d.ts +20 -0
  83. package/dist/codemode/worker/result-compactor.d.ts.map +1 -0
  84. package/dist/codemode/worker/sandbox-globals.d.ts +19 -0
  85. package/dist/codemode/worker/sandbox-globals.d.ts.map +1 -0
  86. package/dist/codemode/worker-api-proxy.d.ts +1 -6
  87. package/dist/codemode/worker-api-proxy.d.ts.map +1 -1
  88. package/dist/codemode/worker-result-proxy.d.ts.map +1 -1
  89. package/dist/codemode/worker-sandbox.d.ts.map +1 -1
  90. package/dist/constants/instructions/admin.d.ts +1 -1
  91. package/dist/constants/instructions/admin.d.ts.map +1 -1
  92. package/dist/constants/instructions/base.d.ts +2 -2
  93. package/dist/constants/instructions/base.d.ts.map +1 -1
  94. package/dist/constants/instructions/codemode.d.ts +1 -1
  95. package/dist/constants/instructions/codemode.d.ts.map +1 -1
  96. package/dist/constants/instructions/core.d.ts +1 -1
  97. package/dist/constants/instructions/core.d.ts.map +1 -1
  98. package/dist/constants/instructions/github.d.ts +1 -1
  99. package/dist/constants/instructions/github.d.ts.map +1 -1
  100. package/dist/constants/instructions/gotchas.d.ts +1 -1
  101. package/dist/constants/instructions/gotchas.d.ts.map +1 -1
  102. package/dist/constants/instructions/io.d.ts +1 -1
  103. package/dist/constants/instructions/io.d.ts.map +1 -1
  104. package/dist/constants/instructions/templates.d.ts +1 -1
  105. package/dist/constants/instructions/templates.d.ts.map +1 -1
  106. package/dist/constants/server-instructions.d.ts +2 -2
  107. package/dist/constants/server-instructions.d.ts.map +1 -1
  108. package/dist/database/core/interfaces.d.ts +6 -6
  109. package/dist/database/core/interfaces.d.ts.map +1 -1
  110. package/dist/database/sqlite-adapter/adapter-delegates.d.ts +161 -0
  111. package/dist/database/sqlite-adapter/adapter-delegates.d.ts.map +1 -0
  112. package/dist/database/sqlite-adapter/backup.d.ts.map +1 -1
  113. package/dist/database/sqlite-adapter/database-adapter.d.ts +17 -147
  114. package/dist/database/sqlite-adapter/database-adapter.d.ts.map +1 -1
  115. package/dist/database/sqlite-adapter/entries/crud-read.d.ts +16 -0
  116. package/dist/database/sqlite-adapter/entries/crud-read.d.ts.map +1 -0
  117. package/dist/database/sqlite-adapter/entries/crud-write.d.ts +62 -0
  118. package/dist/database/sqlite-adapter/entries/crud-write.d.ts.map +1 -0
  119. package/dist/database/sqlite-adapter/entries/crud.d.ts +3 -92
  120. package/dist/database/sqlite-adapter/entries/crud.d.ts.map +1 -1
  121. package/dist/database/sqlite-adapter/entries/importance.d.ts +7 -0
  122. package/dist/database/sqlite-adapter/entries/importance.d.ts.map +1 -1
  123. package/dist/database/sqlite-adapter/entries/index.d.ts +9 -4
  124. package/dist/database/sqlite-adapter/entries/index.d.ts.map +1 -1
  125. package/dist/database/sqlite-adapter/entries/revisions.d.ts +16 -0
  126. package/dist/database/sqlite-adapter/entries/revisions.d.ts.map +1 -0
  127. package/dist/database/sqlite-adapter/entries/search/date-and-pagination.d.ts +37 -0
  128. package/dist/database/sqlite-adapter/entries/search/date-and-pagination.d.ts.map +1 -0
  129. package/dist/database/sqlite-adapter/entries/search/entity-lookups.d.ts +31 -0
  130. package/dist/database/sqlite-adapter/entries/search/entity-lookups.d.ts.map +1 -0
  131. package/dist/database/sqlite-adapter/entries/search/fts-and-hybrid.d.ts +44 -0
  132. package/dist/database/sqlite-adapter/entries/search/fts-and-hybrid.d.ts.map +1 -0
  133. package/dist/database/sqlite-adapter/entries/search/index.d.ts +1 -1
  134. package/dist/database/sqlite-adapter/entries/search/index.d.ts.map +1 -1
  135. package/dist/database/sqlite-adapter/entries/search/query.d.ts +3 -82
  136. package/dist/database/sqlite-adapter/entries/search/query.d.ts.map +1 -1
  137. package/dist/database/sqlite-adapter/entries/statistics.d.ts.map +1 -1
  138. package/dist/database/sqlite-adapter/insights/cross-project.d.ts +42 -0
  139. package/dist/database/sqlite-adapter/insights/cross-project.d.ts.map +1 -0
  140. package/dist/database/sqlite-adapter/insights/entry-digest-queries.d.ts +17 -0
  141. package/dist/database/sqlite-adapter/insights/entry-digest-queries.d.ts.map +1 -0
  142. package/dist/database/sqlite-adapter/insights/team-collaboration.d.ts +29 -0
  143. package/dist/database/sqlite-adapter/insights/team-collaboration.d.ts.map +1 -0
  144. package/dist/database/sqlite-adapter/insights-operations.d.ts +11 -50
  145. package/dist/database/sqlite-adapter/insights-operations.d.ts.map +1 -1
  146. package/dist/database/sqlite-adapter/lifecycle-operations.d.ts.map +1 -1
  147. package/dist/database/sqlite-adapter/members.d.ts.map +1 -1
  148. package/dist/database/sqlite-adapter/native-connection.d.ts +5 -0
  149. package/dist/database/sqlite-adapter/native-connection.d.ts.map +1 -1
  150. package/dist/database/sqlite-adapter/relationships.d.ts +1 -2
  151. package/dist/database/sqlite-adapter/relationships.d.ts.map +1 -1
  152. package/dist/database/sqlite-adapter/tags.d.ts.map +1 -1
  153. package/dist/database/sqlite-adapter/vector-operations.d.ts.map +1 -1
  154. package/dist/filtering/tool-constants.d.ts +1 -1
  155. package/dist/{fts-T466O2JP.js → fts-YHUVPPYF.js} +2 -2
  156. package/dist/github/commit-references/enricher.d.ts.map +1 -1
  157. package/dist/github/github-integration/projects.d.ts.map +1 -1
  158. package/dist/handlers/prompts/adversarial-helpers.d.ts +75 -0
  159. package/dist/handlers/prompts/adversarial-helpers.d.ts.map +1 -0
  160. package/dist/handlers/prompts/adversarial.d.ts +3 -5
  161. package/dist/handlers/prompts/adversarial.d.ts.map +1 -1
  162. package/dist/handlers/prompts/cms-supervisor.d.ts +8 -0
  163. package/dist/handlers/prompts/cms-supervisor.d.ts.map +1 -0
  164. package/dist/handlers/prompts/index.d.ts.map +1 -1
  165. package/dist/handlers/prompts/optimizer.d.ts.map +1 -1
  166. package/dist/handlers/prompts/workflow.d.ts.map +1 -1
  167. package/dist/handlers/resources/core/briefing/context-section.d.ts.map +1 -1
  168. package/dist/handlers/resources/core/briefing/github-repo-and-kanban.d.ts +57 -0
  169. package/dist/handlers/resources/core/briefing/github-repo-and-kanban.d.ts.map +1 -0
  170. package/dist/handlers/resources/core/briefing/github-section.d.ts +23 -20
  171. package/dist/handlers/resources/core/briefing/github-section.d.ts.map +1 -1
  172. package/dist/handlers/resources/core/briefing/system-section.d.ts.map +1 -1
  173. package/dist/handlers/resources/core/briefing/user-message.d.ts.map +1 -1
  174. package/dist/handlers/resources/help.d.ts.map +1 -1
  175. package/dist/handlers/resources/index.d.ts.map +1 -1
  176. package/dist/handlers/resources/shared.d.ts +1 -0
  177. package/dist/handlers/resources/shared.d.ts.map +1 -1
  178. package/dist/handlers/resources/staleness.d.ts.map +1 -1
  179. package/dist/handlers/tools/admin/batch-tools.d.ts.map +1 -1
  180. package/dist/handlers/tools/admin/core-tools.d.ts.map +1 -1
  181. package/dist/handlers/tools/admin/index.d.ts.map +1 -1
  182. package/dist/handlers/tools/admin/lifecycle-tools.d.ts.map +1 -1
  183. package/dist/handlers/tools/admin/project-tools.d.ts +1 -1
  184. package/dist/handlers/tools/admin/project-tools.d.ts.map +1 -1
  185. package/dist/handlers/tools/admin/schemas/crud-batch-schemas.d.ts +609 -0
  186. package/dist/handlers/tools/admin/schemas/crud-batch-schemas.d.ts.map +1 -0
  187. package/dist/handlers/tools/admin/schemas/project-and-ops-schemas.d.ts +136 -0
  188. package/dist/handlers/tools/admin/schemas/project-and-ops-schemas.d.ts.map +1 -0
  189. package/dist/handlers/tools/admin/schemas.d.ts +2 -733
  190. package/dist/handlers/tools/admin/schemas.d.ts.map +1 -1
  191. package/dist/handlers/tools/admin/update_configuration.d.ts +14 -0
  192. package/dist/handlers/tools/admin/update_configuration.d.ts.map +1 -1
  193. package/dist/handlers/tools/admin/vector-tools.d.ts.map +1 -1
  194. package/dist/handlers/tools/analytics.d.ts.map +1 -1
  195. package/dist/handlers/tools/arg-interceptions.d.ts +51 -0
  196. package/dist/handlers/tools/arg-interceptions.d.ts.map +1 -0
  197. package/dist/handlers/tools/codemode/code-healer.d.ts +11 -0
  198. package/dist/handlers/tools/codemode/code-healer.d.ts.map +1 -0
  199. package/dist/handlers/tools/codemode/handler.d.ts +4 -23
  200. package/dist/handlers/tools/codemode/handler.d.ts.map +1 -1
  201. package/dist/handlers/tools/codemode/json-entry-recovery.d.ts +13 -0
  202. package/dist/handlers/tools/codemode/json-entry-recovery.d.ts.map +1 -0
  203. package/dist/handlers/tools/codemode/payload-synthesizer.d.ts +17 -0
  204. package/dist/handlers/tools/codemode/payload-synthesizer.d.ts.map +1 -0
  205. package/dist/handlers/tools/codemode/secure-dispatcher.d.ts +25 -0
  206. package/dist/handlers/tools/codemode/secure-dispatcher.d.ts.map +1 -0
  207. package/dist/handlers/tools/codemode/sql-recovery.d.ts +14 -0
  208. package/dist/handlers/tools/codemode/sql-recovery.d.ts.map +1 -0
  209. package/dist/handlers/tools/core/dummy-healing/alias-catalog.d.ts +21 -0
  210. package/dist/handlers/tools/core/dummy-healing/alias-catalog.d.ts.map +1 -0
  211. package/dist/handlers/tools/core/dummy-healing/entry-fallbacks.d.ts +4 -0
  212. package/dist/handlers/tools/core/dummy-healing/entry-fallbacks.d.ts.map +1 -0
  213. package/dist/handlers/tools/core/dummy-healing/fs-fallbacks.d.ts +19 -0
  214. package/dist/handlers/tools/core/dummy-healing/fs-fallbacks.d.ts.map +1 -0
  215. package/dist/handlers/tools/core/dummy-healing/index.d.ts +7 -0
  216. package/dist/handlers/tools/core/dummy-healing/index.d.ts.map +1 -0
  217. package/dist/handlers/tools/core/dummy-healing/mcp-fallbacks.d.ts +12 -0
  218. package/dist/handlers/tools/core/dummy-healing/mcp-fallbacks.d.ts.map +1 -0
  219. package/dist/handlers/tools/core/dummy-healing.d.ts +1 -29
  220. package/dist/handlers/tools/core/dummy-healing.d.ts.map +1 -1
  221. package/dist/handlers/tools/core/index.d.ts +1 -1
  222. package/dist/handlers/tools/core/index.d.ts.map +1 -1
  223. package/dist/handlers/tools/core/schemas.d.ts +33 -9
  224. package/dist/handlers/tools/core/schemas.d.ts.map +1 -1
  225. package/dist/handlers/tools/core/staleness-tools.d.ts +17 -0
  226. package/dist/handlers/tools/core/staleness-tools.d.ts.map +1 -1
  227. package/dist/handlers/tools/core/tools.d.ts.map +1 -1
  228. package/dist/handlers/tools/git.d.ts +5 -11
  229. package/dist/handlers/tools/git.d.ts.map +1 -1
  230. package/dist/handlers/tools/github/close-issue-tool.d.ts +6 -0
  231. package/dist/handlers/tools/github/close-issue-tool.d.ts.map +1 -0
  232. package/dist/handlers/tools/github/create-issue-tool.d.ts +6 -0
  233. package/dist/handlers/tools/github/create-issue-tool.d.ts.map +1 -0
  234. package/dist/handlers/tools/github/issue-tools.d.ts +3 -0
  235. package/dist/handlers/tools/github/issue-tools.d.ts.map +1 -1
  236. package/dist/handlers/tools/github/kanban-tools.d.ts.map +1 -1
  237. package/dist/handlers/tools/github/milestone-tools.d.ts.map +1 -1
  238. package/dist/handlers/tools/index.d.ts +2 -2
  239. package/dist/handlers/tools/index.d.ts.map +1 -1
  240. package/dist/handlers/tools/io/schemas.d.ts +5 -2
  241. package/dist/handlers/tools/io/schemas.d.ts.map +1 -1
  242. package/dist/handlers/tools/relationships.d.ts.map +1 -1
  243. package/dist/handlers/tools/schemas/constants-and-primitives.d.ts +53 -0
  244. package/dist/handlers/tools/schemas/constants-and-primitives.d.ts.map +1 -0
  245. package/dist/handlers/tools/schemas/hallucination-healer.d.ts +8 -0
  246. package/dist/handlers/tools/schemas/hallucination-healer.d.ts.map +1 -0
  247. package/dist/handlers/tools/schemas/output-schemas.d.ts +247 -0
  248. package/dist/handlers/tools/schemas/output-schemas.d.ts.map +1 -0
  249. package/dist/handlers/tools/schemas.d.ts +4 -306
  250. package/dist/handlers/tools/schemas.d.ts.map +1 -1
  251. package/dist/handlers/tools/search/cross-team.d.ts +14 -0
  252. package/dist/handlers/tools/search/cross-team.d.ts.map +1 -1
  253. package/dist/handlers/tools/search/helpers.d.ts.map +1 -1
  254. package/dist/handlers/tools/search/hybrid.d.ts.map +1 -1
  255. package/dist/handlers/tools/search/misc-tools.d.ts.map +1 -1
  256. package/dist/handlers/tools/search/schemas.d.ts +6 -3
  257. package/dist/handlers/tools/search/schemas.d.ts.map +1 -1
  258. package/dist/handlers/tools/search/search-entries.d.ts.map +1 -1
  259. package/dist/handlers/tools/search/semantic-search.d.ts.map +1 -1
  260. package/dist/handlers/tools/team/admin-tools/batch.d.ts.map +1 -1
  261. package/dist/handlers/tools/team/admin-tools/crud.d.ts.map +1 -1
  262. package/dist/handlers/tools/team/backup-tools.d.ts.map +1 -1
  263. package/dist/handlers/tools/team/core-tools.d.ts.map +1 -1
  264. package/dist/handlers/tools/team/helpers.d.ts.map +1 -1
  265. package/dist/handlers/tools/team/io-tools.d.ts.map +1 -1
  266. package/dist/handlers/tools/team/member-tools.d.ts.map +1 -1
  267. package/dist/handlers/tools/team/rbac.d.ts.map +1 -1
  268. package/dist/handlers/tools/team/relationship-tools.d.ts.map +1 -1
  269. package/dist/handlers/tools/team/schemas/admin-batch-schemas.d.ts +618 -0
  270. package/dist/handlers/tools/team/schemas/admin-batch-schemas.d.ts.map +1 -0
  271. package/dist/handlers/tools/team/schemas/analytics-vector-schemas.d.ts +464 -0
  272. package/dist/handlers/tools/team/schemas/analytics-vector-schemas.d.ts.map +1 -0
  273. package/dist/handlers/tools/team/schemas/core-search-schemas.d.ts +525 -0
  274. package/dist/handlers/tools/team/schemas/core-search-schemas.d.ts.map +1 -0
  275. package/dist/handlers/tools/team/schemas/io-backup-schemas.d.ts +419 -0
  276. package/dist/handlers/tools/team/schemas/io-backup-schemas.d.ts.map +1 -0
  277. package/dist/handlers/tools/team/schemas.d.ts +5 -2002
  278. package/dist/handlers/tools/team/schemas.d.ts.map +1 -1
  279. package/dist/handlers/tools/team/search-tools.d.ts.map +1 -1
  280. package/dist/handlers/tools/team/vector-tools.d.ts.map +1 -1
  281. package/dist/index.js +6 -9
  282. package/dist/markdown/exporter.d.ts.map +1 -1
  283. package/dist/markdown/importer.d.ts.map +1 -1
  284. package/dist/observability/latency-tracker.d.ts.map +1 -1
  285. package/dist/observability/metrics-server.d.ts +1 -1
  286. package/dist/observability/metrics-server.d.ts.map +1 -1
  287. package/dist/observability/token-estimator.d.ts.map +1 -1
  288. package/dist/{security-utils-HNTROJAG.js → security-utils-P4P6A2DG.js} +1 -1
  289. package/dist/server/digest-reporter.d.ts +1 -0
  290. package/dist/server/digest-reporter.d.ts.map +1 -1
  291. package/dist/server/mcp-server/core.d.ts.map +1 -1
  292. package/dist/server/mcp-server/tool-registration/call-interceptor.d.ts +6 -0
  293. package/dist/server/mcp-server/tool-registration/call-interceptor.d.ts.map +1 -0
  294. package/dist/server/mcp-server/tool-registration/index.d.ts +4 -0
  295. package/dist/server/mcp-server/tool-registration/index.d.ts.map +1 -0
  296. package/dist/server/mcp-server/tool-registration/list-interceptor.d.ts +4 -0
  297. package/dist/server/mcp-server/tool-registration/list-interceptor.d.ts.map +1 -0
  298. package/dist/server/mcp-server/tool-registration/register-tools.d.ts +18 -0
  299. package/dist/server/mcp-server/tool-registration/register-tools.d.ts.map +1 -0
  300. package/dist/server/mcp-server/tool-registration.d.ts +1 -17
  301. package/dist/server/mcp-server/tool-registration.d.ts.map +1 -1
  302. package/dist/server/registration.d.ts +2 -0
  303. package/dist/server/registration.d.ts.map +1 -1
  304. package/dist/server/scheduler.d.ts +1 -0
  305. package/dist/server/scheduler.d.ts.map +1 -1
  306. package/dist/server/subscription-manager.d.ts +2 -0
  307. package/dist/server/subscription-manager.d.ts.map +1 -1
  308. package/dist/tools-BOQV7QD3.js +6 -0
  309. package/dist/transports/http/security.d.ts.map +1 -1
  310. package/dist/transports/http/server/http-transport.d.ts +25 -0
  311. package/dist/transports/http/server/http-transport.d.ts.map +1 -0
  312. package/dist/transports/http/server/index.d.ts +3 -30
  313. package/dist/transports/http/server/index.d.ts.map +1 -1
  314. package/dist/transports/http/server/legacy-sse.d.ts.map +1 -1
  315. package/dist/transports/http/server/protocol-handlers.d.ts +9 -0
  316. package/dist/transports/http/server/protocol-handlers.d.ts.map +1 -0
  317. package/dist/types/entities.d.ts +41 -1
  318. package/dist/types/entities.d.ts.map +1 -1
  319. package/dist/types/index.d.ts +11 -4
  320. package/dist/types/index.d.ts.map +1 -1
  321. package/dist/utils/config-manager.d.ts +2 -0
  322. package/dist/utils/config-manager.d.ts.map +1 -1
  323. package/dist/utils/error-helpers.d.ts.map +1 -1
  324. package/dist/utils/issue-logger.d.ts.map +1 -1
  325. package/dist/utils/mcp-logger.d.ts +14 -2
  326. package/dist/utils/mcp-logger.d.ts.map +1 -1
  327. package/dist/utils/security-utils.d.ts.map +1 -1
  328. package/dist/utils/vector-index-helpers.d.ts +1 -1
  329. package/dist/utils/vector-index-helpers.d.ts.map +1 -1
  330. package/dist/utils/workspace-resolver.d.ts.map +1 -1
  331. package/dist/vector/vector-search-manager/manager.d.ts +2 -2
  332. package/dist/vector/vector-search-manager/manager.d.ts.map +1 -1
  333. package/dist/vector/vector-search-manager/rebuild.d.ts.map +1 -1
  334. package/dist/vendor/lib-agent-exec/interceptors/git-interceptor.d.ts.map +1 -1
  335. package/dist/vendor/lib-agent-exec/schema.d.ts +18 -18
  336. package/dist/vendor/lib-agent-exec/schema.d.ts.map +1 -1
  337. package/dist/vendor/lib-agent-exec/stream-manager.d.ts.map +1 -1
  338. package/dist/worker-script.js +2662 -2645
  339. package/package.json +3 -4
  340. package/skills/memory-journal-mcp/SKILL.md +8 -8
  341. package/dist/auth/context.d.ts +0 -7
  342. package/dist/auth/context.d.ts.map +0 -1
  343. package/dist/chunk-ELMJYRTT.js +0 -29
  344. package/dist/chunk-F6WSLZVN.js +0 -675
  345. package/dist/chunk-JVGY2GHK.js +0 -776
  346. package/dist/chunk-KWSBCSFM.js +0 -411
  347. package/dist/chunk-SP5D3XYY.js +0 -1550
  348. package/dist/chunk-XJMEPP36.js +0 -57
  349. package/dist/database/core/entry-columns.d.ts +0 -8
  350. package/dist/database/core/entry-columns.d.ts.map +0 -1
  351. package/dist/database/core/schema.d.ts +0 -69
  352. package/dist/database/core/schema.d.ts.map +0 -1
  353. package/dist/error-helpers-STR7IPUR.js +0 -2
  354. package/dist/git-runner-6OE7PVKA.js +0 -1
  355. package/dist/journal-api-UG43ZD7Y.js +0 -1289
  356. package/dist/tools-RBNFDWIE.js +0 -9
package/README.md CHANGED
@@ -5,8 +5,7 @@
5
5
  [![GitHub](https://img.shields.io/badge/GitHub-neverinfamous/memory--journal--mcp-blue?logo=github)](https://github.com/neverinfamous/memory-journal-mcp) [![npm](https://img.shields.io/npm/v/memory-journal-mcp)](https://www.npmjs.com/package/memory-journal-mcp) [![Docker Pulls](https://img.shields.io/docker/pulls/writenotenow/memory-journal-mcp)](https://hub.docker.com/r/writenotenow/memory-journal-mcp)
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) ![Status](https://img.shields.io/badge/status-Production%2FStable-brightgreen)
7
7
  [![MCP Registry](https://img.shields.io/badge/MCP_Registry-Published-green)](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.neverinfamous/memory-journal-mcp) [![Security](https://img.shields.io/badge/Security-Enhanced-green.svg)](SECURITY.md) [![TypeScript](https://img.shields.io/badge/TypeScript-Strict-blue.svg)](https://github.com/neverinfamous/memory-journal-mcp)
8
- ![Coverage](https://img.shields.io/badge/Coverage-81.06%25-yellowgreen.svg) ![E2E](https://img.shields.io/badge/E2E-448%20passing%20%C2%B7%200%20skipped-blue.svg) ![Tests](https://img.shields.io/badge/Tests-1782_passed-brightgreen.svg)
9
- ![E2E Tests](https://img.shields.io/badge/E2E_Tests-391_passed-brightgreen.svg) [![CI](https://github.com/neverinfamous/memory-journal-mcp/actions/workflows/gatekeeper.yml/badge.svg)](https://github.com/neverinfamous/memory-journal-mcp/actions/workflows/gatekeeper.yml)
8
+ ![Coverage](https://img.shields.io/badge/Coverage-85.22%25-green.svg) ![E2E](https://img.shields.io/badge/E2E-450%20passing%20%C2%B7%200%20skipped-blue.svg) ![Tests](https://img.shields.io/badge/Tests-1782_passed-brightgreen.svg) [![Benchmarks](https://img.shields.io/badge/Benchmarks-11_passed-brightgreen.svg)](https://github.com/neverinfamous/memory-journal-mcp/wiki/Performance) [![CI](https://github.com/neverinfamous/memory-journal-mcp/actions/workflows/gatekeeper.yml/badge.svg)](https://github.com/neverinfamous/memory-journal-mcp/actions/workflows/gatekeeper.yml)
10
9
 
11
10
  **[📚 Full Documentation (Wiki)](https://github.com/neverinfamous/memory-journal-mcp/wiki)** • **[Changelog](CHANGELOG.md)** • **[Security](SECURITY.md)** • **[Release Article](https://adamic.tech/articles/memory-journal-mcp-server)**
12
11
 
@@ -24,23 +23,23 @@
24
23
  Large projects face a critical challenge. You lose context between sessions.
25
24
 
26
25
  - **Stop Thread Amnesia** - AI conversations start fresh. They ignore previous work.
27
- - **Retain Deep Context** - You scatter decisions and code across threads. We save them.
28
- - **End Repeated Work** - AI repeats failed solutions. We remember your attempts.
29
- - **Prevent Context Overload** - You copy history manually. We automate context delivery.
26
+ - **Retain Deep Context** - Decisions and code scatter across threads; Memory Journal preserves them automatically.
27
+ - **End Repeated Work** - AI repeats failed solutions; persistent history tracks every prior attempt.
28
+ - **Prevent Context Overload** - Manual history copying wastes tokens; dynamic briefings deliver targeted context automatically.
30
29
 
31
- Memory Journal builds your project's long-term memory. It bridges fragmented AI sessions seamlessly.
30
+ Memory Journal builds your project's long-term memory. It acts as a **Project Context Graph** for AI-assisted engineering. It bridges **human workflows** (Issues, PRs, Kanban, Milestones) with **agent execution** (Git, tests, decisions).
32
31
 
33
32
  ---
34
33
 
35
34
  **Experience true context-aware development:**
36
35
 
37
36
  - _"Why did we choose SQLite over Postgres for this service last month?"_ (Semantic search)
38
- - _"Run the `/issue-triage` workflow on the top priority ticket in the Kanban board."_ (GitHub operations)
37
+ - _"Run the `/issue-commander` (`triage` workflow) on the top priority ticket in the Kanban board."_ (GitHub operations)
39
38
  - _"Who has been touching the auth module recently, and what's our team collaboration density?"_ (Team analytics)
40
39
  - _"Commit the changes and automatically generate a structured journal entry using the \`--journal\` wrapper flag."_ (Automated lifecycles)
41
40
  - _"Draw a visual graph showing how my last 10 architectural decisions relate to each other."_ (Knowledge graph)
42
41
 
43
- **Comprehensive access to internal state via resources (`memory://briefing`, `memory://workflows`, `memory://rules`, `memory://health`, `memory://help`, `memory://staleness`, GitHub status/insights, team stats, metrics/latency, and more) plus dynamic repo variants for cross-repo targeting (like `memory://briefing/{repo}` or `memory://kanban/{repo}/{project_number}`).** **[Resources documentation →](https://github.com/neverinfamous/memory-journal-mcp/wiki/Resources)**
42
+ **Comprehensive access to internal state via resources (`memory://briefing`, `memory://workflows`, `memory://rules`, `memory://health`, `memory://help`, `memory://staleness`, GitHub status/milestones, team stats, and metrics/latency). Dynamic repo variants also support cross-repo targeting (like `memory://briefing/{+repo}` or `memory://kanban/{+repo}/{project_number}`).** **[Resources documentation →](https://github.com/neverinfamous/memory-journal-mcp/wiki/Resources)**
44
43
 
45
44
  ---
46
45
 
@@ -75,10 +74,10 @@ Memory Journal builds your project's long-term memory. It bridges fragmented AI
75
74
 
76
75
  Memory Journal supports multi-tenancy out of the box via the `workspace_id` construct, acting as a strict isolation barrier for multiple journals sharing the same SQLite database file.
77
76
 
78
- - **Default Isolation:** If omitted, all entries are created in and retrieved from the `default` workspace.
79
- - **Data Partitioning:** Core CRUD, Search, and Analytics tools accept a `workspace_id` parameter (e.g., `workspace_id: "alpha"`) to scope operations strictly to that workspace.
80
- - **Immutability:** A `workspace_id` is permanently assigned upon entry creation and **cannot be changed** afterward.
81
- - **Server Config:** Set `--default-workspace-id` (or the `DEFAULT_WORKSPACE_ID` environment variable) to configure the default fallback workspace for the server instance, allowing you to run multiple isolated journal interfaces on a single physical database.
77
+ - **Auto-Resolution:** When `workspace_id` is omitted, the server automatically resolves the target workspace. It matches `project_number` against `PROJECT_REGISTRY`, checks content/tag keyword aliases, or inspects `process.cwd()` before falling back to `DEFAULT_WORKSPACE_ID` (default: `default`).
78
+ - **Data Partitioning & Cross-Workspace Queries:** Core CRUD, Soft-Delete/Restore, FTS5 Search, Vector Semantic Search (`semantic_search`), and Analytics tools enforce `workspace_id` isolation end-to-end. Read and search tools accept `workspace_id: "*"` to query across all workspaces. External write and mutation paths reject wildcard overrides.
79
+ - **Immutability & Controlled Migration:** Entries receive a `workspace_id` upon creation that standard updates cannot overwrite directly. To migrate an entry across workspaces, call `update_entry` with `workspace_id: "*"` and `target_workspace_id`.
80
+ - **Server Config:** Set `--default-workspace-id` (or the `DEFAULT_WORKSPACE_ID` environment variable) to configure the default fallback workspace for the server instance. This lets you run multiple isolated journal interfaces on a single physical database.
82
81
 
83
82
  ---
84
83
 
@@ -147,18 +146,22 @@ When the user initializes the session context by executing the `load-briefing` p
147
146
  ### Control Access with Tool Filtering
148
147
 
149
148
  > [!IMPORTANT]
150
- > All shortcuts and tool groups include **Code Mode** (`mj_execute_code`) by default for token-efficient operations. To exclude it, add `-codemode` to your filter: `--tool-filter starter,-codemode`
151
-
152
- Control which tools are exposed via `MEMORY_JOURNAL_MCP_TOOL_FILTER` (or CLI: `--tool-filter`):
153
-
154
- | Filter | Use Case |
155
- | -------------------- | ------------------------ |
156
- | `full` | All tools (default) |
157
- | `starter` | Core + search + codemode |
158
- | `essential` | Minimal footprint |
159
- | `readonly` | Disable all mutations |
160
- | `-github` | Exclude a group |
161
- | `-github,-analytics` | Exclude multiple groups |
149
+ > All shortcuts and tool groups always include **Code Mode** (`mj_execute_code`) and **Runtime Configuration** (`update_configuration`) as escape-hatch tools so agents can never lock themselves out of the configuration system or Code Mode.
150
+
151
+ Control which tools are exposed using any of the 3 configuration sources (precedence: CLI flag > environment variable > config file):
152
+ - **CLI flag**: `--tool-filter <filter>`
153
+ - **Environment variable**: `MEMORY_JOURNAL_MCP_TOOL_FILTER` *(Note: `TOOL_FILTER` is only a fallback display variable in the session briefing and does **not** activate tool filtering on its own)*
154
+ - **`memory-journal.config.{yaml,yml,json}` key**: `"toolFilter"`
155
+
156
+ | Filter | Use Case |
157
+ | -------------------- | ----------------------------------- |
158
+ | `full` | All tools (default) |
159
+ | `starter` | Core + search + codemode |
160
+ | `essential` | Minimal footprint |
161
+ | `readonly` | Disable all mutations |
162
+ | `codemode` | `mj_execute_code` + runtime config |
163
+ | `-github` | Exclude a group |
164
+ | `-github,-analytics` | Exclude multiple groups |
162
165
 
163
166
  **Filter Syntax:** `shortcut` or `group` or `tool_name` (whitelist mode) · `-group` (disable group) · `-tool` (disable tool) · `+tool` (re-enable after group disable)
164
167
 
@@ -177,83 +180,75 @@ Control which tools are exposed via `MEMORY_JOURNAL_MCP_TOOL_FILTER` (or CLI: `-
177
180
  | Group | Description |
178
181
  | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
179
182
  | `codemode` | Code Mode (sandboxed code execution) 🌟 **Recommended** |
180
- | `core` | Entry CRUD, tags, test, staleness |
181
- | `search` | Text search, date range, semantic, vector stats, cross-team |
183
+ | `core` | Entry creation/read/history, tags, resource & briefing helpers, anchor staleness, test |
184
+ | `search` | Text search, date range, semantic, vector stats, deleted entries, cross-team |
182
185
  | `analytics` | Statistics, cross-project insights |
183
186
  | `relationships` | Link entries, visualize graphs |
184
- | `io` | JSON/Markdown export and File-level Markdown Data Integration Interoperability (Import/Export) |
185
- | `admin` | Update configuration, update, delete, restore, rebuild/add to vector index, merge tags, search audit log, bulk operations (batch create/update/delete) |
187
+ | `io` | JSON/Markdown export, Markdown directory import/export, and external knowledge base import (Notion, Obsidian, Logseq) |
188
+ | `admin` | Update configuration, project registry management, entry update/delete/restore, rebuild/add to vector index, merge tags, search audit log, auto-prune, bulk operations (batch create/update/delete) |
186
189
  | `github` | Issues, PRs, context, Kanban, **Milestones**, **Insights**, **issue lifecycle**, **Copilot Reviews** |
187
190
  | `git` | Commit history, search, release info, patterns, staleness checks |
188
191
  | `backup` | Backup, list, restore, cleanup |
189
- | `team` | CRUD, search, stats, relationships, IO (Markdown import/export), backup, vector search, cross-project insights, matrix, RBAC member management (requires `TEAM_DB_PATH`) |
192
+ | `team` | CRUD, search, stats, relationships, IO (Markdown & external import/export), backup, vector search, cross-project insights, matrix, RBAC member management, author aliases (requires `TEAM_DB_PATH`) |
190
193
 
191
194
  **[Complete tools reference →](https://github.com/neverinfamous/memory-journal-mcp/wiki/Tools)**
192
195
 
193
196
  ### 🎯 **Workflow Prompts**
194
197
 
195
- Session briefing, time period analysis, goal tracking, PR & issue command, session summaries, adversarial plan reviews, exhaustive code & security audits, secure commit workflows, anti-hallucination healing. **[Complete prompts guide →](https://github.com/neverinfamous/memory-journal-mcp/wiki/Prompts)**
198
+ Specialized workflow prompts cover session briefing, standup & retro prep, goal tracking, PR & issue command, session summaries, and journal optimization. Additional prompts support CMS REM supervision, adversarial plan reviews, code & security audits, secure commit workflows, and anti-hallucination healing. **[Complete prompts guide →](https://github.com/neverinfamous/memory-journal-mcp/wiki/Prompts)**
196
199
 
197
200
  ### 📡 **Resources**
198
201
  See the **[Complete resources guide →](https://github.com/neverinfamous/memory-journal-mcp/wiki/Resources)** for the full list of dynamic context resources, including `memory://briefing`, `memory://instructions`, GitHub integration endpoints, telemetry metrics, and templated views.
199
202
 
200
- _Note: The `memory://briefing`, `memory://graph/actions`, `memory://actions/recent`, `memory://github/status`, `memory://github/insights`, `memory://github/milestones`, `memory://milestones/{number}`, `memory://kanban/{project_number}`, and `memory://kanban/{project_number}/diagram` resources also accept an optional `/{repo}` path suffix for cross-repo targeting._
203
+ - **Dynamic Resource Templates**: Resources `memory://briefing/{+repo}`, `memory://agent-context/{+repo}`, `memory://agent-id/{+repo}`, `memory://actions/recent/{+repo}`, `memory://github/status/{+repo}`, `memory://github/milestones/{+repo}`, `memory://milestones/{+repo}/{number}`, and `memory://kanban/{+repo}/{project_number}` accept an RFC 6570 `{+repo}` path parameter for targeted project context.
201
204
 
202
205
  ---
203
206
 
204
207
  ## ⚡ Code Mode: Maximum Efficiency (90% Token Savings)
205
208
 
206
- Code Mode (`mj_execute_code`) is a revolutionary approach that **dramatically reduces token usage by up to 90%** and is included by default in all presets. Instead of spending thousands of tokens on sequential tool calls, AI agents use a single sandboxed execution to reason faster.
209
+ Code Mode (`mj_execute_code`) **reduces token usage by up to 90%** and is included by default in all presets. Instead of spending thousands of tokens on sequential tool calls, AI agents use a single sandboxed execution to reason faster.
207
210
 
208
- Code executes in a **worker_threads sandbox** designed as a secure multi-tenant process isolation environment. All `mj.*` API calls execute against the journal within the sandbox, providing:
211
+ Code executes in a **pre-warmed `worker_threads` V8 isolate pool + secondary `vm.createContext` boundary** designed as a secure multi-tenant process isolation environment. All `mj.*` API calls execute against the journal within the sandbox, providing:
209
212
 
210
213
  - **V8 code generation restrictions** — `eval()` and `Function()` construction from strings disabled at the V8 engine level via `codeGeneration: { strings: false, wasm: false }`
211
- - **Frozen prototypes** — all built-in prototypes (Object, Function, Array, Error, etc.) frozen inside the vm context to prevent dynamic constructor chain escapes
212
- - **Static code validation** — Multiple static regex rules blocking `require()`, `process`, `eval()`, `Reflect.*`, `Symbol.*`, `new Proxy()`, and filesystem/network access
214
+ - **Frozen prototypes & cross-realm constructor lockdown** — all built-in prototypes (`Object`, `Function`, `Array`, `Error`, etc.) and `mj.*` API bindings are frozen, and `.constructor` is neutered across `Object`, `Function`, `AsyncFunction`, `GeneratorFunction`, and `AsyncGeneratorFunction` prototypes in both the inner `vm` realm and outer worker realm to prevent dynamic constructor chain escapes
215
+ - **Single-pass lexical validation** — pre-validation rate-limiting and 50KB byte caps run before any code normalization, followed by a single-pass lexical comment/string scanner (preserving `${...}` template expressions) and static rules blocking `require()`, `import()`, `process`, `eval()`, `Reflect.*`, `Symbol.*`, `Object.getPrototypeOf`/`setPrototypeOf`/`defineProperty`, `new Proxy()`, and filesystem/network access
213
216
  - **Proxy constructor nullified** — `Proxy: undefined` in the sandbox prevents meta-object protocol abuse
214
- - **RPC allowlist** — host-side validation prevents workers from invoking unauthorized API methods
217
+ - **Prototype-safe RPC allowlist** — host-side `Object.hasOwn()` validation, recursion-bounded argument normalization, and `--tool-filter` enforcement prevent workers from invoking unauthorized or filtered API methods
215
218
  - **Rate limiting** — 60 executions per minute per client
216
- - **Hard timeouts** — configurable execution limit (default 30s)
217
- - **Egress boundary enforcement** — result serialization capped to prevent OOM via oversized payloads
219
+ - **Hard timeouts** — configurable execution limit (default 30s) with bounded async timer tracking (`setTimeout`/`sleep` capped and cleared on completion)
220
+ - **Egress boundary enforcement** — result serialization capped (default 100KB via `CODE_MODE_MAX_RESULT_SIZE`) with automatic payload compaction to prevent OOM via oversized payloads
218
221
  - **Full API access** — all tool groups are available via `mj.*` (e.g., `mj.core.createEntry()`, `mj.search.searchEntries()`, `mj.github.getGithubIssues()`)
219
222
  - **Strict Readonly Contract** — Calling any mutation method under `--tool-filter readonly` safely halts the sandbox to prevent execution, returning a structured `{ success: false, error: "..." }` response to the agent instead of a raw MCP protocol exception.
220
223
 
221
- ### ⚡ Code Mode Only (Maximum Token Savings)
224
+ ### ⚡ Code Mode Minimal Surface (Maximum Token Savings)
222
225
 
223
- Run with **only Code Mode enabled** — a single tool that provides access to its full capability through the `mj.*` API:
226
+ Run with the `codemode` filter and `--codemode-internal-full-access` to expose only the escape-hatch tools (`mj_execute_code` and `update_configuration`) on the MCP tool list while retaining full internal access to the `mj.*` API inside the sandbox:
224
227
 
225
228
  ```json
226
229
  {
227
230
  "mcpServers": {
228
231
  "memory-journal-mcp": {
229
232
  "command": "memory-journal-mcp",
230
- "args": ["--tool-filter", "codemode"]
233
+ "args": ["--tool-filter", "codemode", "--codemode-internal-full-access"]
231
234
  }
232
235
  }
233
236
  }
234
237
  ```
235
238
 
236
- This exposes just `mj_execute_code`. The agent writes JavaScript against the typed `mj.*` SDK — composing operations across all tool groups and returning exactly the data it needs — in one execution. This mirrors the [Code Mode pattern](https://blog.cloudflare.com/code-mode-mcp/) pioneered by Cloudflare for their entire API: fixed token cost regardless of how many capabilities exist.
237
-
238
- #### Disabling Code Mode
239
-
240
- If you prefer individual tool calls, exclude codemode:
241
-
242
- ```json
243
- {
244
- "args": ["--tool-filter", "starter,-codemode"]
245
- }
246
- ```
239
+ This exposes only `mj_execute_code` and `update_configuration` to the client's `tools/list`, reducing tool schema overhead to the minimum while preserving full programmatic capability via `mj.*`. The agent writes JavaScript against the typed `mj.*` SDK — composing operations across all tool groups and returning exactly the data it needs — in one execution. This mirrors the [Code Mode pattern](https://blog.cloudflare.com/code-mode-mcp/) pioneered by Cloudflare for their entire API: fixed token cost regardless of how many capabilities exist. Without `--codemode-internal-full-access` (or `CODEMODE_INTERNAL_FULL_ACCESS=true`), internal `mj.*` methods are scoped to the active `--tool-filter`.
247
240
 
248
241
  ---
249
242
 
243
+ ## 🚀 Quick Start & Deployment
244
+
250
245
  _Note: Configuration is resolved using strict precedence: `CLI flags > Environment Variables > Config File > Defaults`._
251
246
 
252
247
  > 🛠️ **Debugging Configuration:** Run `memory-journal-mcp --dump-config` (or pass `--dump-config` as an arg) to print the fully resolved configuration payload with automatically redacted secrets. This is the primary method for diagnosing overriding issues.
253
248
 
254
249
  ### Configure Basics Quickly
255
250
 
256
- > 💡 **Tip:** Don't want to manually escape JSON strings for `PROJECT_REGISTRY`? Run `npx memory-journal-mcp project create` in your terminal to automatically bootstrap and update your MCP configuration!
251
+ > 💡 **Tip:** Don't want to manually escape JSON strings for `PROJECT_REGISTRY`? Run `npx memory-journal-mcp project create <name> --path <repo-path> [--number <project-number>]` in your terminal to automatically bootstrap and update your MCP configuration!
257
252
 
258
253
  ```json
259
254
  {
@@ -274,7 +269,7 @@ _Note: Configuration is resolved using strict precedence: `CLI flags > Environme
274
269
 
275
270
  Showcasing the full power of the server, including Multi-Project Routing, Team Collaboration, Copilot awareness, and Context Injections.
276
271
 
277
- > 💡 **Tip:** Use `npx memory-journal-mcp project create` to easily configure multiple repositories into your `PROJECT_REGISTRY` without manual JSON escaping!
272
+ > 💡 **Tip:** Use `npx memory-journal-mcp project create <name> --path <repo-path> [--number <project-number>]` to easily configure multiple repositories into your `PROJECT_REGISTRY` without manual JSON escaping!
278
273
 
279
274
  ```json
280
275
  {
@@ -324,13 +319,13 @@ You control exactly what additional content your agent sees across three dimensi
324
319
 
325
320
  | Dimension | Variables | What It Controls |
326
321
  | --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
327
- | **Focus** | `TOOL_FILTER` | Control tool exposure: `full` (default), `starter`, `essential` |
328
- | **Journal Content** | `BRIEFING_ENTRY_COUNT`, `BRIEFING_SUMMARY_COUNT`, `BRIEFING_INCLUDE_TEAM` | How many recent entries, session summaries, and whether team entries appear |
322
+ | **Focus** | `MEMORY_JOURNAL_MCP_TOOL_FILTER` (CLI: `--tool-filter`, config: `"toolFilter"`) | Control tool exposure: `full` (default), `starter`, `essential`, `readonly`, `codemode` |
323
+ | **Journal Content** | `BRIEFING_ENTRY_COUNT`, `BRIEFING_SUMMARY_COUNT`, `BRIEFING_COMMIT_COUNT`, `BRIEFING_IMPORTANCE_THRESHOLD`, `BRIEFING_INCLUDE_TEAM` | How many recent entries, session summaries, commits, and whether team entries appear |
329
324
  | **GitHub Enrichment** | `BRIEFING_ISSUE_COUNT`, `BRIEFING_PR_COUNT`, `BRIEFING_PR_STATUS`, `BRIEFING_MILESTONE_COUNT`, `BRIEFING_WORKFLOW_COUNT`, `BRIEFING_WORKFLOW_STATUS`, `BRIEFING_COPILOT_REVIEWS` | Issues, PRs, milestones, CI runs, and Copilot review state surfaced in the briefing |
330
325
 
331
326
  **Context Injections:** Set `RULES_FILE_PATH` and `SKILLS_DIR_PATH` to surface user rules and agent skills as companion resources (`memory://rules`, `memory://skills`) alongside the briefing.
332
327
 
333
- **Repo Targeting:** In multi-repo setups, agents read `memory://briefing/{repo}` to get a briefing scoped to a specific repository registered in `PROJECT_REGISTRY`.
328
+ **Repo Targeting:** In multi-repo setups, agents read `memory://briefing/{+repo}` to get a briefing scoped to a specific repository registered in `PROJECT_REGISTRY`.
334
329
 
335
330
  <details>
336
331
  <summary><strong>Briefing Presets (click to expand)</strong></summary>
@@ -340,7 +335,7 @@ You control exactly what additional content your agent sees across three dimensi
340
335
  ```json
341
336
  "BRIEFING_ENTRY_COUNT": "1",
342
337
  "BRIEFING_SUMMARY_COUNT": "0",
343
- "TOOL_FILTER": "essential"
338
+ "MEMORY_JOURNAL_MCP_TOOL_FILTER": "essential"
344
339
  ```
345
340
 
346
341
  **Full Context (onboarding agents)** — Maximize context for agents unfamiliar with the project:
@@ -353,7 +348,7 @@ You control exactly what additional content your agent sees across three dimensi
353
348
  "BRIEFING_PR_COUNT": "3",
354
349
  "BRIEFING_PR_STATUS": "true",
355
350
  "BRIEFING_COPILOT_REVIEWS": "true",
356
- "TOOL_FILTER": "full"
351
+ "MEMORY_JOURNAL_MCP_TOOL_FILTER": "full"
357
352
  ```
358
353
 
359
354
  **DevOps-Heavy** — Emphasize CI/CD and GitHub state for infrastructure workflows:
@@ -378,51 +373,57 @@ You control exactly what additional content your agent sees across three dimensi
378
373
  | **Minimal (no GitHub)** | Remove the `env` block entirely |
379
374
  | **npx (no install)** | Replace `"command"` with `"npx"` and add `"args": ["-y", "memory-journal-mcp"]` |
380
375
  | **From source** | Replace `"command"` with `"node"` and add `"args": ["dist/cli.js"]` |
381
- | **Code Mode only** | Add `"args": ["--tool-filter", "codemode"]` (single tool, all capabilities) |
382
- | **Docker** | Replace `"command"` with `"docker"` and use `run -i --rm -v ./data:/app/data writenotenow/memory-journal-mcp:latest` as args |
376
+ | **Code Mode minimal** | Add `"args": ["--tool-filter", "codemode", "--codemode-internal-full-access"]` (`mj_execute_code` + `update_configuration`, all `mj.*` capabilities) |
377
+ | **Docker** | Replace `"command"` with `"docker"` and add `"args": ["run", "-i", "--rm", "-v", "./data:/app/data", "-e", "GITHUB_TOKEN", "-e", "PROJECT_REGISTRY", "-e", "ALLOWED_IO_ROOTS", "writenotenow/memory-journal-mcp:latest"]` (forward any `"env"` keys via `-e <VAR>`) |
383
378
  | **Team collaboration** | Add `"TEAM_DB_PATH": "./team.db"` to `env` |
384
379
 
385
380
  Restart your MCP client and start journaling!
386
381
 
387
382
  ### Connect Remotely with HTTP/SSE Transport
388
383
 
389
- > 🔒 **Security Posture: Stdio vs HTTP**
384
+ > [!IMPORTANT]
385
+ > **Security Posture: Stdio vs HTTP (Fail-Closed Startup Guards)**
390
386
  >
391
- > - **Stdio (Default):** Runs implicitly within the secure boundaries of your local IDE or command-line environment. No explicit authentication is required because the execution context is already trusted.
392
- > - **HTTP/SSE:** Exposes the server over a network socket. By default, HTTP binds ONLY to `localhost` and blocks wildcard CORS to prevent unauthorized access and CSRF attacks. **Public network binding (`--server-host 0.0.0.0`) requires explicit authentication** (`--auth-token` or `--oauth-enabled`). The server will throw a fatal error if you attempt to expose it publicly without securing it.
387
+ > - **Stdio (Default):** Runs implicitly within the secure boundaries of your local IDE or command-line environment. No explicit authentication is required because the execution context is already trusted (`ALLOWED_IO_ROOTS` defaults to fail-closed `[]` unless configured).
388
+ > - **HTTP/SSE (`--transport http`):** Exposes the server over a network socket and enforces **three fail-closed startup guards**:
389
+ > 1. **Mandatory Filesystem Boundary (`ALLOWED_IO_ROOTS` / `--allowed-io-roots`):** Always required in HTTP mode so filesystem boundaries are explicitly declared.
390
+ > 2. **Mandatory Public Authentication:** By default, HTTP binds ONLY to `localhost` and blocks wildcard CORS to prevent unauthorized access and CSRF attacks. Binding to a non-loopback address (`--server-host 0.0.0.0`) requires explicit authentication (`MCP_AUTH_TOKEN` / `--auth-token` or `--oauth-enabled`).
391
+ > 3. **Mandatory Public Origin for Non-Loopback OAuth (`PUBLIC_ORIGIN` / `--public-origin`):** When `--oauth-enabled` is bound to a non-loopback address, `--public-origin` (`PUBLIC_ORIGIN`) is strictly required so RFC 9728 Protected Resource Metadata cannot be spoofed via `Host` headers.
393
392
 
394
393
  For remote access or web-based clients, run the server in HTTP mode:
395
394
 
396
395
  ```bash
397
- memory-journal-mcp --transport http --port 3000
396
+ memory-journal-mcp --transport http --port 3000 --allowed-io-roots /path/to/allowed/dir
398
397
  ```
399
398
 
400
- To bind to all interfaces (required for containers) and enable the automated proactive analytics scheduler (e.g. daily digest), you MUST provide an authentication token:
399
+ To bind to all interfaces (required for containers) and enable the automated proactive analytics scheduler (e.g. daily digest), you MUST provide both `ALLOWED_IO_ROOTS` and an authentication token:
401
400
 
402
401
  ```bash
403
402
  export MCP_AUTH_TOKEN="your_secure_random_token"
403
+ export MCP_AUTH_SCOPES="full" # Defaults to "read" if omitted
404
+ export ALLOWED_IO_ROOTS="/path/to/allowed/dir"
404
405
  memory-journal-mcp --transport http --port 3000 --server-host 0.0.0.0 --digest-interval 1440
405
406
  ```
406
407
 
407
408
  **Endpoints:**
408
409
 
409
- | Endpoint | Description | Mode |
410
- | ------------------------------------------- | ------------------------------------------------ | -------- |
411
- | `GET /` | Server info and available endpoints | Both |
412
- | `POST /mcp` | JSON-RPC requests (initialize, tools/call, etc.) | Both |
413
- | `GET /mcp` | SSE stream for server-to-client notifications | Stateful |
414
- | `DELETE /mcp` | Session termination | Stateful |
415
- | `GET /sse` | Legacy SSE connection (MCP 2024-11-05) | Stateful |
416
- | `POST /messages` | Legacy SSE message endpoint | Stateful |
417
- | `GET /health` | Health check (`{ status, timestamp }`) | Both |
418
- | `GET /metrics` | Prometheus metrics export (requires flag) | Both |
419
- | `GET /.well-known/oauth-protected-resource` | RFC 9728 Protected Resource Metadata | Both |
410
+ | Endpoint | Description | Mode |
411
+ | ------------------------------------------- | ------------------------------------------------------------------ | -------- |
412
+ | `GET /` | Server info and available endpoints | Both |
413
+ | `POST /mcp` | JSON-RPC requests (initialize, tools/call, etc.) | Both |
414
+ | `GET /mcp` | SSE stream for server-to-client notifications | Stateful |
415
+ | `DELETE /mcp` | Session termination (`204 No Content`) | Both |
416
+ | `GET / POST /sse` | Legacy SSE connection & stateless/stateful POST (MCP 2024-11-05) | GET: Stateful / POST: Both |
417
+ | `POST /messages` | Legacy SSE message endpoint | Stateful |
418
+ | `GET /health` | Health check (`{ status, timestamp }`) | Both |
419
+ | `GET /metrics` | Prometheus metrics export (requires flag) | Both |
420
+ | `GET /.well-known/oauth-protected-resource` | RFC 9728 Protected Resource Metadata (requires `--oauth-enabled`) | Both |
420
421
 
421
422
  **Session Management:** The server uses stateful sessions by default. Include the `mcp-session-id` header (returned from initialization) in subsequent requests.
422
423
 
423
424
  - **OAuth 2.1** — RFC 9728/8414, JWT/JWKS, granular scopes (opt-in via `--oauth-enabled`)
424
425
  - **Comprehensive Security Headers** — CSP, HSTS (opt-in), X-Frame-Options, and more
425
- - **Rate Limiting** — 100 req/min per IP · **CORS** — configurable multi-origin (exact-match) · **1MB body limit**
426
+ - **Rate Limiting** — 100 req/min per subject/IP · **CORS** — configurable multi-origin (exact-match) · **1MB body limit**
426
427
  - **Server Timeouts** — Request (120s), keep-alive (65s), headers (66s) · **404 handler** · **Cross-protocol guard**
427
428
  - **Build Provenance** · **SBOM** · **Supply Chain Attestations** · **Non-root execution**
428
429
 
@@ -452,7 +453,7 @@ curl -X POST http://localhost:3000/mcp \
452
453
  For serverless deployments (Lambda, Workers, Vercel), use stateless mode:
453
454
 
454
455
  ```bash
455
- memory-journal-mcp --transport http --port 3000 --stateless
456
+ memory-journal-mcp --transport http --port 3000 --stateless --allowed-io-roots /path/to/projects
456
457
  ```
457
458
 
458
459
  | Mode | Progress Notifications | Legacy SSE | Serverless |
@@ -468,19 +469,30 @@ When running in HTTP/SSE mode, enable periodic maintenance jobs with CLI flags.
468
469
 
469
470
  ```bash
470
471
  memory-journal-mcp --transport http --port 3000 \
472
+ --allowed-io-roots /path/to/projects \
471
473
  --backup-interval 60 --keep-backups 10 \
472
474
  --vacuum-interval 1440 \
473
475
  --rebuild-index-interval 720
474
476
  ```
475
477
 
476
- | Flag | Default | Description |
477
- | -------------------------------- | ------- | -------------------------------------------------------------------- |
478
- | `--backup-interval <min>` | 0 (off) | Create timestamped database backups and prune old ones automatically |
479
- | `--keep-backups <count>` | 5 | Max backups retained during automated cleanup |
480
- | `--vacuum-interval <min>` | 0 (off) | Run `PRAGMA optimize` and flush database to disk |
481
- | `--rebuild-index-interval <min>` | 0 (off) | Full vector index rebuild to maintain semantic search quality |
482
- | `--report-interval <min>` | 0 (off) | Scheduled report generation interval in minutes |
483
- | `--digest-interval <min>` | 0 (off) | Scheduled periodic digest analysis report |
478
+ | Flag | Default | Description |
479
+ | --------------------------------------- | ------------------------ | --------------------------------------------------------------------- |
480
+ | `--backup-interval <min>` | 0 (off) | Create timestamped database backups and prune old ones automatically |
481
+ | `--keep-backups <count>` | 5 | Max backups retained during automated cleanup |
482
+ | `--vacuum-interval <min>` | 0 (off) | Run `PRAGMA optimize` and flush database to disk |
483
+ | `--rebuild-index-interval <min>` | 0 (off) | Full vector index rebuild to maintain semantic search quality |
484
+ | `--report-interval <min>` | 0 (off) | Scheduled report generation interval in minutes |
485
+ | `--report-webhook-url <url>` | — | HTTPS webhook URL for scheduled report delivery |
486
+ | `--report-webhook-auth <header>` | — | Custom `Authorization` header for webhook requests |
487
+ | `--report-content-type <type>` | `slack` | Webhook payload format: `slack`, `discord`, or `json` (env: `REPORT_CONTENT_TYPE`) |
488
+ | `--digest-interval <min>` | 0 (off) | Scheduled periodic digest analysis report |
489
+ | `--auto-prune-interval <min>` | 0 (off) | Run autonomous garbage collection (archive, soft-delete, hard-delete) |
490
+ | `--archive-older-than-days <days>` | 0 (off) | Auto-archive low-importance entries older than N days |
491
+ | `--prune-older-than-days <days>` | 0 (off) | Auto soft-delete entries older than N days |
492
+ | `--hard-delete-older-than-days <days>` | 0 (off) | Permanently purge soft-deleted entries older than N days |
493
+ | `--prune-importance-threshold <score>` | 0.15 | Max importance score (`0.0`–`1.0`) eligible for archiving/pruning |
494
+ | `--prune-dry-run` | false | Log auto-prune candidates without mutating entries |
495
+ | `--prune-exclude-tags <tags>` | — | Comma-separated tags exempt from auto-prune (`archived` always kept) |
484
496
 
485
497
  Each job is error-isolated — a failure in one job won't affect the others. Scheduler status (last run, result, next run) is visible via `memory://health`.
486
498
 
@@ -489,7 +501,7 @@ Each job is error-isolated — a failure in one job won't affect the others. Sch
489
501
  The GitHub tools (`get_github_issues`, `get_github_prs`, etc.) auto-detect the repository from your git context when `PROJECT_REGISTRY` is configured or the MCP server is run inside a git repository.
490
502
 
491
503
 
492
- **Multi-Project Workflows**: For agents to seamlessly support multiple projects, configure your **`PROJECT_REGISTRY`** (tip: use `npx memory-journal-mcp project create`).
504
+ **Multi-Project Workflows**: For agents to seamlessly support multiple projects, configure your **`PROJECT_REGISTRY`** (tip: use `npx memory-journal-mcp project create <name> --path <repo-path> [--number <project-number>]`).
493
505
 
494
506
  #### Dynamic Context Resolution & Auto-Detection
495
507
 
@@ -516,21 +528,25 @@ For production deployments, enable OAuth 2.1 authentication on the HTTP transpor
516
528
  | Protected Resource Metadata | ✅ | RFC 9728 `/.well-known/oauth-protected-resource` |
517
529
  | Auth Server Discovery | ✅ | RFC 8414 metadata discovery with caching |
518
530
  | Token Validation | ✅ | JWT validation with JWKS support |
519
- | Scope Enforcement | ✅ | Granular `read`, `write`, `admin` scopes |
531
+ | Scope Enforcement | ✅ | Granular `read`, `write`, `team`, `audit`, `admin`, `full` scopes |
520
532
  | HTTP Transport | ✅ | Streamable HTTP with OAuth middleware |
521
533
 
522
534
  **Supported Scopes:**
523
535
 
524
- | Scope | Tool Groups |
525
- | ------- | ------------------------------------------------- |
526
- | `read` | core, search, analytics, relationships, io |
527
- | `write` | github, team (+ all read groups) |
528
- | `admin` | admin, backup, codemode (+ all write/read groups) |
536
+ | Scope | Tool Groups |
537
+ | ------- | ------------------------------------------------------------------ |
538
+ | `read` | `core (read-only), search, analytics, relationships (visualize_relationships), io (export_entries), git` |
539
+ | `write` | `github (+ all read groups and create_entry / create_entry_minimal / link_entries / mark_anchors_stale / import_external / import_markdown / export_markdown)` |
540
+ | `team` | `team (dedicated team collaboration scope; combine with read/write for personal journal access)` |
541
+ | `audit` | `memory://audit resource access (included in admin/full; search_audit_log requires admin or full)` |
542
+ | `admin` | `admin, backup, codemode (+ all read/write/team/audit groups)` |
543
+ | `full` | `Unrestricted access to all operations` |
529
544
 
530
545
  **Quick Start:**
531
546
 
532
547
  ```bash
533
548
  memory-journal-mcp --transport http --port 3000 \
549
+ --allowed-io-roots /path/to/projects \
534
550
  --oauth-enabled \
535
551
  --oauth-issuer https://auth.example.com/realms/mcp \
536
552
  --oauth-audience memory-journal-mcp \
@@ -540,10 +556,12 @@ memory-journal-mcp --transport http --port 3000 \
540
556
  Or via environment variables:
541
557
 
542
558
  ```bash
559
+ export ALLOWED_IO_ROOTS="/path/to/projects"
543
560
  export OAUTH_ENABLED=true
544
561
  export OAUTH_ISSUER=https://auth.example.com/realms/mcp
545
562
  export OAUTH_AUDIENCE=memory-journal-mcp
546
- export OAUTH_CLOCK_TOLERANCE=5
563
+ export OAUTH_JWKS_URI=https://auth.example.com/realms/mcp/protocol/openid-connect/certs
564
+ export OAUTH_CLOCK_TOLERANCE=60
547
565
  memory-journal-mcp --transport http --port 3000
548
566
  ```
549
567
 
@@ -561,34 +579,54 @@ memory-journal-mcp --transport http --port 3000
561
579
 
562
580
  | Variable | Description |
563
581
  | ---------------------------------------------- | ---------------------------------------------------------- |
564
- | **Core Database** | |
565
- | `DB_PATH` | Path to the personal journal SQLite database |
566
- | `TEAM_DB_PATH` | Path to the shared team SQLite database |
582
+ | **Core Database & Server** | |
583
+ | `DB_PATH` | Path to the personal journal SQLite database (CLI: `--db`, `--database`, default: `./memory_journal.db`) |
584
+ | `DB_ENCRYPTION_KEY` | SQLCipher at-rest database encryption key (alias: `MJ_DB_ENCRYPTION_KEY`) |
585
+ | `TEAM_DB_PATH` | Path to the shared team SQLite database (CLI: `--team-db`, `--team-database`) |
586
+ | `TEAM_AUTHOR` | Display name attached to team entries (used for local author identity; OAuth identity claims take precedence when creating team entries and RBAC ownership under active OAuth) |
587
+ | `TEAM_DEFAULT_ROLE` | Default RBAC role for unlisted team authors: `admin`, `member`, `viewer`, `denied` (CLI: `--team-default-role`, default: `denied`) |
588
+ | `TEAM_ADMIN` | Bootstrap admin author name when the `team_members` table is empty (CLI: `--team-admin`) |
589
+ | `ADDITIONAL_TEAM_DBS` | JSON mapping of label to path for additional read-only team SQLite databases (CLI: `--additional-team-dbs`) |
590
+ | `DEFAULT_WORKSPACE_ID` | Default workspace ID for multi-tenant isolation (CLI: `--default-workspace-id`, default: `default`; `MCP_WORKSPACE_ID` provides a session-scoped schema-healing fallback on tool payloads) |
591
+ | `MEMORY_JOURNAL_CONFIG` | Path to configuration file (`.yaml`, `.yml`, `.json`; CLI: `--config`) |
592
+ | `LOG_LEVEL` | Server log verbosity: `debug`, `info`, `notice`, `warning`, `error`, `critical` (CLI `--log-level` accepts `debug`, `info`, `warning`, `error`; default: `info`) |
593
+ | `TRANSPORT` / `PORT` / `MCP_HOST` / `STATELESS` | Transport mode (`stdio` or `http`; CLI: `--transport`), HTTP port (`--port`, default: `3000`), bind address (`--server-host`, fallback: `HOST`, default: `localhost`), and stateless HTTP mode (`--stateless`, default: `false`) |
594
+ | `CORS_ORIGIN` / `MCP_CORS_ORIGIN` / `MCP_RATE_LIMIT_MAX` | Allowed CORS origins (`--cors-origin`) and per-IP/minute HTTP rate limit (default: `100`) |
567
595
  | `GITHUB_TOKEN` | Personal access token for GitHub integrations |
596
+ | `DEFAULT_PROJECT_NUMBER` | Default GitHub Project number for issue auto-assignment (CLI: `--default-project`) |
568
597
  | `PROJECT_REGISTRY` | JSON map of repo names to local paths and project numbers |
598
+ | `EMBEDDING_MODEL` | HuggingFace transformers model for semantic search (CLI: `--embedding-model`, default: `Xenova/all-MiniLM-L6-v2`) |
599
+ | `AUTO_REBUILD_INDEX` | Rebuild vector search index on startup (`true`/`false`, CLI: `--auto-rebuild-index`) |
569
600
  | **Security & Tooling** | |
570
- | `ALLOWED_IO_ROOTS` | Comma-separated paths for Code Mode filesystem boundaries |
571
- | `TOOL_FILTER` | Control tool exposure (`full`, `starter`, `readonly`, `-github`) |
572
- | `CODE_MODE_MAX_RESULT_SIZE` | Max execution payload buffer size in Code Mode (bytes) |
573
- | `CODEMODE_INTERNAL_FULL_ACCESS` | Allow Code Mode to bypass tool filters internally |
601
+ | `ALLOWED_IO_ROOTS` | Comma-separated paths for Code Mode and IO filesystem boundaries (fail-closed in stdio; mandatory when `--transport http` is used) |
602
+ | `MEMORY_JOURNAL_MCP_TOOL_FILTER` | Control tool exposure (`full`, `starter`, `essential`, `codemode`, `readonly`, `-github`; CLI: `--tool-filter`, `memory-journal.config.{yaml,yml,json}` key: `"toolFilter"`. Note: `TOOL_FILTER` is a display fallback only) |
603
+ | `CODE_MODE_MAX_RESULT_SIZE` | Max execution payload buffer size in Code Mode (bytes, default: `102400`) |
604
+ | `CODEMODE_INTERNAL_FULL_ACCESS` | Allow Code Mode to bypass tool filters internally (default: `false`) |
574
605
  | `MCP_AGENT_HEALING` | Enable/disable autonomous tool & parameter healing (`true`/`false`, CLI: `--no-agent-healing`) |
575
- | `MAX_TOOL_INPUT_ELEMENTS` | Max array/object elements in tool inputs (default: `25000`, `0` = disabled) |
606
+ | `MAX_TOOL_INPUT_ELEMENTS` | Max array/object elements in tool inputs (default: `25000`, `0` or `Infinity` = disabled) |
607
+ | `MCP_AUTH_TOKEN` / `MCP_AUTH_SCOPES` | Static Bearer authentication token (`--auth-token`, `--auth-scopes`) and comma-separated granted scopes for HTTP transport (default: `read`) |
608
+ | `MCP_ENABLE_HSTS` / `TRUST_PROXY` | Enable `Strict-Transport-Security` header (`--enable-hsts`) and reverse-proxy `X-Forwarded-For` trust (`--trust-proxy`) |
576
609
  | **Briefing & Context** | |
577
610
  | `BRIEFING_ENTRY_COUNT` | Number of granular journal entries in briefing (default: 3)|
578
611
  | `BRIEFING_SUMMARY_COUNT` | Number of session summaries in briefing (default: 1) |
612
+ | `BRIEFING_COMMIT_COUNT` | Number of git commits in briefing (default: 3) |
613
+ | `BRIEFING_IMPORTANCE_THRESHOLD` | Minimum importance score for briefing entries (default: 0.3)|
579
614
  | `BRIEFING_INCLUDE_TEAM` | Include entries from the team database (default: false) |
580
- | `BRIEFING_ISSUE_COUNT` / `BRIEFING_PR_COUNT` | GitHub Issues and PRs to list with titles |
581
- | `BRIEFING_MILESTONE_COUNT` | GitHub Milestones to list with titles |
582
- | `BRIEFING_WORKFLOW_COUNT` | CI workflow runs to list |
583
- | `RULES_FILE_PATH` / `SKILLS_DIR_PATH` | Injected behavioral rules and skills boundaries |
615
+ | `BRIEFING_ISSUE_COUNT` / `BRIEFING_PR_COUNT` / `BRIEFING_PR_STATUS` | GitHub Issues (default: `0`), PRs (default: `0`), and PR status breakdown (default: `false`) in briefing |
616
+ | `BRIEFING_MILESTONE_COUNT` | GitHub Milestones to list with titles (default: `3`) |
617
+ | `BRIEFING_WORKFLOW_COUNT` / `BRIEFING_WORKFLOW_STATUS` / `BRIEFING_COPILOT_REVIEWS` | CI workflow runs (default: `0`), status breakdown (default: `false`), and Copilot review state (default: `false`) |
618
+ | `STALENESS_ACTIVE_HOURS` / `STALENESS_RECENT_DAYS` / `STALENESS_STALE_DAYS` | Thresholds for `memory://staleness` project classification (defaults: `24`h / `7`d / `30`d) |
619
+ | `RULES_FILE_PATH` / `SKILLS_DIR_PATH` / `MEMORY_JOURNAL_WORKFLOW_SUMMARY` | Injected behavioral rules, skills boundaries, and workflow summary |
584
620
  | **OAuth (HTTP Mode)** | |
585
621
  | `OAUTH_ENABLED` | Enable OAuth 2.1 authentication (default: false) |
586
- | `OAUTH_ISSUER` / `OAUTH_AUDIENCE` | OAuth token verification parameters |
622
+ | `OAUTH_ISSUER` / `OAUTH_AUDIENCE` / `OAUTH_JWKS_URI` / `OAUTH_CLOCK_TOLERANCE` / `PUBLIC_ORIGIN` / `OAUTH_ALLOW_PLAINTEXT_LOOPBACK` | OAuth token verification parameters (clock tolerance default: 60s), non-loopback RFC 9728 public origin (`--public-origin`), and local dev plaintext loopback issuer flag (`--oauth-allow-plaintext-loopback`) |
587
623
  | **Telemetry & Administration** | |
588
- | `AUDIT_LOG_PATH` / `AUDIT_REDACT` | File path for JSONL telemetry and argument redaction |
589
- | `MCP_METRICS_ENABLED` / `PERSIST_METRICS` | In-memory and disk-persisted operational metrics |
590
- | `PRUNE_OLDER_THAN_DAYS` / `PRUNE_EXCLUDE_TAGS` | Auto-prune settings and exclusion tags |
591
- | `REPORT_INTERVAL` / `REPORT_WEBHOOK_URL` | Scheduled HTTP reports |
624
+ | `AUDIT_LOG_PATH` / `AUDIT_REDACT` / `AUDIT_READS` / `AUDIT_LOG_MAX_SIZE` | Path to JSONL audit log file, argument/result redaction, read-call logging, and rotation size limit (default: 10MB) |
625
+ | `METRICS_EXPORT` / `PERSIST_METRICS` / `METRICS_PATH` / `MJ_METRICS_PORT` / `MJ_METRICS_HOST` | Prometheus export (`METRICS_EXPORT=prometheus` auto-starts the standalone metrics server on `127.0.0.1:9465` in addition to mounting `/metrics` on the HTTP transport), disk-persisted metrics (`--persist-metrics`, `--metrics-path`), and dedicated scrape port/host |
626
+ | `AUTO_PRUNE_INTERVAL_MINUTES` / `ARCHIVE_OLDER_THAN_DAYS` / `PRUNE_OLDER_THAN_DAYS` / `HARD_DELETE_OLDER_THAN_DAYS` / `PRUNE_IMPORTANCE_THRESHOLD` / `PRUNE_DRY_RUN` / `PRUNE_EXCLUDE_TAGS` | Autonomous lifecycle pruning, archiving (interval/days default: `0` = disabled), importance threshold (default: `0.15`), dry-run (default: `false`), and exclusion tags |
627
+ | `BACKUP_INTERVAL` / `KEEP_BACKUPS` / `VACUUM_INTERVAL` / `REBUILD_INDEX_INTERVAL` / `DIGEST_INTERVAL` | Scheduled HTTP maintenance intervals in minutes (`--backup-interval`, `--vacuum-interval`, `--rebuild-index-interval`, `--digest-interval`) and backup retention count (`--keep-backups`, default: `5`) |
628
+ | `REPORT_INTERVAL` / `REPORT_WEBHOOK_URL` / `REPORT_WEBHOOK_AUTH` / `REPORT_CONTENT_TYPE` / `ALLOW_INSECURE_WEBHOOK_HTTP` | Scheduled HTTP reports, webhook delivery headers/content-type, and local dev HTTP webhook override |
629
+ | `DEBUG` / `DISABLE_ISSUE_LOGGING` | Verbose debug logging and suppression of automated runtime issue logging |
592
630
 
593
631
  ### GitHub Integration (Optional)
594
632
 
@@ -617,7 +655,7 @@ See the **[Complete tools reference](https://github.com/neverinfamous/memory-jou
617
655
 
618
656
  ### Automate with GitHub Commander Workflows
619
657
 
620
- The server natively bundles the `github-commander` agent skill (accessible via `memory://skills/github-commander`). This extends your AI assistant with autonomous DevOps workflows for repository stewardship: **Issue Triage**, **Milestone Sprints**, **PR Reviews**, **Copilot Audits**, **Security Audits**, **Code Quality Audits**, **Performance Audits**, **Roadmap Kickoffs**, and **Dependency Updates**. Configure validation layers using the `PROJECT_*` environment overrides to enforce CI-matching execution locally during agent tasks!
658
+ The server natively bundles the `memory-journal-mcp` agent skill (served via SEP-2640 and `memory://skills`). It also provides built-in `issue-commander`, `pr-commander`, and `cms-rem-supervisor` MCP workflow prompts for autonomous DevOps stewardship: **Issue Triage**, **Milestone Sprints**, **PR Reviews**, **Copilot Audits**, **Security Audits**, **Code Quality Audits**, **Performance Audits**, **Roadmap Kickoffs**, and **Dependency Updates**. These workflows enforce multi-gate validation (`lint`, `typecheck`, `test`, and security checks) locally during agent tasks.
621
659
 
622
660
  ## 🏗️ Architecture
623
661
 
@@ -687,11 +725,11 @@ flowchart TB
687
725
 
688
726
  ### Performance Benchmarks
689
727
 
690
- Memory Journal is designed for extremely low overhead during AI task execution. We include a `vitest bench` suite to maintain these baseline guarantees:
728
+ Memory Journal is designed for extremely low overhead during AI task execution. We include a `vitest bench` suite across database, vector search, and MCP server routines to maintain these baseline guarantees:
691
729
 
692
- - **Database Reads**: Operations execute in fractions of a millisecond. `calculateImportance` is ~13-14x faster than retrieving 50 recent entries.
693
- - **Vector Search Engine**: Both search (~140-220 ops/sec) and indexing (~1600-1900+ ops/sec) are high-throughput via `sqlite-vec` with SQL-native KNN queries.
694
- - **Core MCP Routines**: `getTools` uses cached O(1) dispatch (~4800-7000x faster than `get_recent_entries`). `create_entry` and `search_entries` execute through the full MCP layer with sub-millisecond overhead.
730
+ - **Database Operations (`sqlite-adapter.bench.ts`)**: `calculateImportance` runs at **~51,600 ops/sec** (~0.03ms mean, ~27x faster than retrieving 50 recent entries) via a 256-entry LRU prepared statement cache. `getRecentEntries (limit 50)` executes at **~1,870 ops/sec** (~0.63ms mean), `updateEntry` at **~2,380 ops/sec** (~0.79ms mean), `createEntry` at **~1,060 ops/sec** (~1.69ms mean), and `searchEntries` (FTS5 BM25 + batch importance hydration) at **~176 ops/sec** (~6.2ms mean).
731
+ - **Vector Search Engine (`vector-search.bench.ts`)**: Both k-NN similarity search (**~1,050 ops/sec**, ~1.8ms mean with batch entry hydration) and vector indexing (**~4,220 ops/sec**, ~0.41ms mean) are high-throughput via `sqlite-vec` (`vec0` with `chunk_size=256`).
732
+ - **Core MCP Routines (`mcp-server.bench.ts`)**: `getTools` uses cached O(1) dispatch (**~7.2M–9.4M ops/sec**, ~0.0001ms). Full end-to-end `callTool` invocations (including interceptor, token estimation, and project registry resolution) run at **~1,775 ops/sec** (~0.65ms) for `get_recent_entries`, **~205 ops/sec** (~5.4ms) for `search_entries`, and **~800 ops/sec** (~2.4ms) for `create_entry`.
695
733
 
696
734
  To run the benchmarking suite locally:
697
735
 
@@ -705,7 +743,7 @@ Extensively tested across two frameworks:
705
743
 
706
744
  | Suite | Command | Covers |
707
745
  | ------------------------- | ------------------- | ------------------------------------------------------------------------------- |
708
- | Vitest (unit/integration) | `pnpm test` | Database, tools, resources, handlers, security, GitHub, vector search, codemode |
746
+ | Vitest (unit/integration) | `pnpm test` | Extensive Vitest unit and integration suite with strict quality gates (database, tools, resources, handlers, security, GitHub, vector search, codemode) |
709
747
  | Playwright (e2e) | `pnpm run test:e2e` | HTTP/SSE transport, auth, sessions, CORS, security headers, scheduler |
710
748
 
711
749
  ```bash
@@ -719,11 +757,12 @@ pnpm run test:e2e # End-to-end HTTP/SSE transport tests
719
757
 
720
758
  - **Deterministic error handling** - Every tool returns structured `{success, error, code, category, suggestion, recoverable}` responses with actionable context — no raw exceptions, no silent failures, no misleading messages
721
759
  - **Local-first** - All data stored locally, no external API calls (except optional GitHub)
722
- - **Input validation** - Zod schemas, content size limits, SQL injection prevention
723
- - **Path traversal protection** - Backup filenames validated
724
- - **MCP 2025-03-26 annotations** - Behavioral hints (`readOnlyHint`, `destructiveHint`, etc.)
725
- - **HTTP transport hardening** - comprehensive security headers, configurable multi-origin CORS, 1MB body limit, built-in rate limiting (100 req/min), server timeouts, HSTS (opt-in), 30-min session timeout, 404 handler, cross-protocol guard
726
- - **Token scrubbing** - GitHub tokens and credentials automatically redacted from error logs
760
+ - **Input validation** - Zod schemas, content size limits, SQL injection prevention, and `<untrusted_remote_content>` prompt-injection boundary tagging
761
+ - **Path traversal & SSRF protection** - `ALLOWED_IO_ROOTS` sandbox containment with URL-decode/symlink verification, backup path validation, and outbound webhook DNS/IP SSRF blocking
762
+ - **Multi-tenant & filter enforcement** - End-to-end `workspace_id` isolation across SQLite and Vector search, plus execution-layer `--tool-filter` enforcement across `tools/call`, Code Mode (`mj.*`), and fallback handlers
763
+ - **MCP 2025-11-25 annotations & icons** - Behavioral hints (`readOnlyHint`, `destructiveHint`, etc.) and capability icons
764
+ - **HTTP transport hardening** - OAuth 2.1 `tokenClaims` propagation, principal-bound stateful sessions (`100` max active sessions), comprehensive security headers, configurable multi-origin CORS, 1MB body/stream limit, built-in per-subject/IP rate limiting (100 req/min), server timeouts, HSTS (opt-in), 30-min session timeout, and localhost-bound metrics (`METRICS_EXPORT=prometheus` automatically starts the standalone metrics server on `127.0.0.1:9465`, customizable via `MJ_METRICS_PORT` and `MJ_METRICS_HOST`, in addition to mounting `/metrics` on the HTTP transport)
765
+ - **Token scrubbing** - GitHub tokens and credentials automatically redacted from error and audit logs
727
766
 
728
767
  ### Data & Privacy
729
768
 
@@ -751,4 +790,6 @@ MIT License - See [LICENSE](LICENSE) file for details.
751
790
 
752
791
  ## 🤝 Contributing
753
792
 
754
- Built by developers, for developers. PRs welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
793
+ Built by developers, for developers. PRs welcome! Ensure all unit and E2E tests, linting, and typechecks pass. See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
794
+
795
+ _Upgrading from an earlier version?_ Your existing SQLite database is automatically migrated on startup.