memory-journal-mcp 4.3.0 → 4.4.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 (109) hide show
  1. package/.dockerignore +131 -122
  2. package/.gitattributes +29 -0
  3. package/.github/workflows/docker-publish.yml +1 -1
  4. package/.github/workflows/lint-and-test.yml +1 -2
  5. package/.github/workflows/secrets-scanning.yml +0 -1
  6. package/.github/workflows/security-update.yml +6 -6
  7. package/.vscode/settings.json +17 -15
  8. package/CHANGELOG.md +1065 -11
  9. package/DOCKER_README.md +51 -33
  10. package/Dockerfile +14 -12
  11. package/README.md +68 -33
  12. package/SECURITY.md +225 -220
  13. package/dist/cli.js +7 -0
  14. package/dist/cli.js.map +1 -1
  15. package/dist/constants/ServerInstructions.d.ts +1 -1
  16. package/dist/constants/ServerInstructions.d.ts.map +1 -1
  17. package/dist/constants/ServerInstructions.js +70 -26
  18. package/dist/constants/ServerInstructions.js.map +1 -1
  19. package/dist/constants/icons.d.ts +2 -0
  20. package/dist/constants/icons.d.ts.map +1 -1
  21. package/dist/constants/icons.js +6 -0
  22. package/dist/constants/icons.js.map +1 -1
  23. package/dist/database/SqliteAdapter.d.ts +51 -10
  24. package/dist/database/SqliteAdapter.d.ts.map +1 -1
  25. package/dist/database/SqliteAdapter.js +143 -43
  26. package/dist/database/SqliteAdapter.js.map +1 -1
  27. package/dist/filtering/ToolFilter.d.ts +1 -1
  28. package/dist/filtering/ToolFilter.d.ts.map +1 -1
  29. package/dist/filtering/ToolFilter.js +7 -1
  30. package/dist/filtering/ToolFilter.js.map +1 -1
  31. package/dist/github/GitHubIntegration.d.ts +74 -2
  32. package/dist/github/GitHubIntegration.d.ts.map +1 -1
  33. package/dist/github/GitHubIntegration.js +508 -7
  34. package/dist/github/GitHubIntegration.js.map +1 -1
  35. package/dist/handlers/prompts/index.js +1 -0
  36. package/dist/handlers/prompts/index.js.map +1 -1
  37. package/dist/handlers/resources/index.d.ts.map +1 -1
  38. package/dist/handlers/resources/index.js +257 -13
  39. package/dist/handlers/resources/index.js.map +1 -1
  40. package/dist/handlers/tools/index.d.ts.map +1 -1
  41. package/dist/handlers/tools/index.js +595 -8
  42. package/dist/handlers/tools/index.js.map +1 -1
  43. package/dist/server/McpServer.d.ts +2 -0
  44. package/dist/server/McpServer.d.ts.map +1 -1
  45. package/dist/server/McpServer.js +69 -26
  46. package/dist/server/McpServer.js.map +1 -1
  47. package/dist/types/index.d.ts +97 -0
  48. package/dist/types/index.d.ts.map +1 -1
  49. package/dist/types/index.js.map +1 -1
  50. package/dist/utils/logger.d.ts +1 -0
  51. package/dist/utils/logger.d.ts.map +1 -1
  52. package/dist/utils/logger.js +8 -1
  53. package/dist/utils/logger.js.map +1 -1
  54. package/dist/utils/progress-utils.d.ts +18 -3
  55. package/dist/utils/progress-utils.d.ts.map +1 -1
  56. package/dist/utils/progress-utils.js.map +1 -1
  57. package/dist/utils/security-utils.d.ts +91 -0
  58. package/dist/utils/security-utils.d.ts.map +1 -0
  59. package/dist/utils/security-utils.js +184 -0
  60. package/dist/utils/security-utils.js.map +1 -0
  61. package/dist/vector/VectorSearchManager.d.ts +2 -1
  62. package/dist/vector/VectorSearchManager.d.ts.map +1 -1
  63. package/dist/vector/VectorSearchManager.js +100 -34
  64. package/dist/vector/VectorSearchManager.js.map +1 -1
  65. package/docker-compose.yml +46 -37
  66. package/mcp-config-example.json +0 -2
  67. package/package.json +21 -14
  68. package/releases/v4.3.1.md +69 -0
  69. package/releases/v4.4.0.md +120 -0
  70. package/server.json +3 -3
  71. package/src/cli.ts +11 -0
  72. package/src/constants/ServerInstructions.ts +70 -26
  73. package/src/constants/icons.ts +7 -0
  74. package/src/database/SqliteAdapter.ts +165 -44
  75. package/src/filtering/ToolFilter.ts +7 -1
  76. package/src/github/GitHubIntegration.ts +588 -8
  77. package/src/handlers/prompts/index.ts +1 -0
  78. package/src/handlers/resources/index.ts +318 -12
  79. package/src/handlers/tools/index.ts +686 -13
  80. package/src/server/McpServer.ts +79 -37
  81. package/src/types/index.ts +98 -0
  82. package/src/utils/logger.ts +10 -1
  83. package/src/utils/progress-utils.ts +17 -6
  84. package/src/utils/security-utils.ts +205 -0
  85. package/src/vector/VectorSearchManager.ts +110 -39
  86. package/tests/constants/icons.test.ts +102 -0
  87. package/tests/constants/server-instructions.test.ts +549 -0
  88. package/tests/database/sqlite-adapter.bench.ts +63 -0
  89. package/tests/database/sqlite-adapter.test.ts +555 -0
  90. package/tests/filtering/tool-filter.test.ts +266 -0
  91. package/tests/github/github-integration.test.ts +1024 -0
  92. package/tests/handlers/github-resource-handlers.test.ts +473 -0
  93. package/tests/handlers/github-tool-handlers.test.ts +556 -0
  94. package/tests/handlers/prompt-handlers.test.ts +91 -0
  95. package/tests/handlers/resource-handlers.test.ts +339 -0
  96. package/tests/handlers/tool-handlers.test.ts +497 -0
  97. package/tests/handlers/vector-tool-handlers.test.ts +238 -0
  98. package/tests/security/sql-injection.test.ts +347 -0
  99. package/tests/server/mcp-server.bench.ts +55 -0
  100. package/tests/server/mcp-server.test.ts +675 -0
  101. package/tests/utils/logger.test.ts +180 -0
  102. package/tests/utils/mcp-logger.test.ts +212 -0
  103. package/tests/utils/progress-utils.test.ts +156 -0
  104. package/tests/utils/security-utils.test.ts +82 -0
  105. package/tests/vector/vector-search-manager.test.ts +335 -0
  106. package/tests/vector/vector-search.bench.ts +53 -0
  107. package/vitest.config.ts +15 -0
  108. package/.github/workflows/DOCKER_DEPLOYMENT_SETUP.md +0 -387
  109. package/.github/workflows/dependabot-auto-merge.yml +0 -42
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-utils.js","sourceRoot":"","sources":["../../src/utils/security-utils.ts"],"names":[],"mappings":"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"}
@@ -49,7 +49,8 @@ export declare class VectorSearchManager {
49
49
  */
50
50
  removeEntry(entryId: number): Promise<boolean>;
51
51
  /**
52
- * Rebuild index from database entries
52
+ * Rebuild index from database entries.
53
+ * Uses paginated fetching and parallel batch embedding for performance.
53
54
  * @param db - Database adapter
54
55
  * @param progress - Optional progress context for notifications
55
56
  */
@@ -1 +1 @@
1
- {"version":3,"file":"VectorSearchManager.d.ts","sourceRoot":"","sources":["../../src/vector/VectorSearchManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAQ/E,0CAA0C;AAC1C,MAAM,WAAW,oBAAoB;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,YAAY,CAAA;CACvB;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,QAAQ,CAEC;IACjB,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,YAAY,CAAQ;gBAEhB,MAAM,EAAE,MAAM,EAAE,SAAS,SAAgB;IAOrD;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2CjC;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAiBxD;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA2ClE;;OAEG;IACG,MAAM,CACR,KAAK,EAAE,MAAM,EACb,KAAK,SAAK,EACV,mBAAmB,SAAM,GAC1B,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAmClC;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYpD;;;;OAIG;IACG,YAAY,CAAC,EAAE,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IA8ElF;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CAkB1F"}
1
+ {"version":3,"file":"VectorSearchManager.d.ts","sourceRoot":"","sources":["../../src/vector/VectorSearchManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAc/E,0CAA0C;AAC1C,MAAM,WAAW,oBAAoB;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,YAAY,CAAA;CACvB;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,QAAQ,CAEC;IACjB,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,YAAY,CAAQ;gBAEhB,MAAM,EAAE,MAAM,EAAE,SAAS,SAAgB;IAOrD;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2CjC;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAiBxD;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA2ClE;;OAEG;IACG,MAAM,CACR,KAAK,EAAE,MAAM,EACb,KAAK,SAAK,EACV,mBAAmB,SAAM,GAC1B,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAmClC;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYpD;;;;;OAKG;IACG,YAAY,CAAC,EAAE,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IA8IlF;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CAkB1F"}
@@ -14,6 +14,10 @@ import { sendProgress } from '../utils/progress-utils.js';
14
14
  const DEFAULT_MODEL = 'Xenova/all-MiniLM-L6-v2';
15
15
  /** Embedding dimensions for all-MiniLM-L6-v2 */
16
16
  const EMBEDDING_DIMENSIONS = 384;
17
+ /** Number of entries to embed concurrently during rebuild */
18
+ const REBUILD_BATCH_SIZE = 5;
19
+ /** Number of entries to fetch per page during rebuild */
20
+ const REBUILD_PAGE_SIZE = 200;
17
21
  /**
18
22
  * VectorSearchManager - Handles semantic search with local embeddings
19
23
  */
@@ -185,7 +189,8 @@ export class VectorSearchManager {
185
189
  }
186
190
  }
187
191
  /**
188
- * Rebuild index from database entries
192
+ * Rebuild index from database entries.
193
+ * Uses paginated fetching and parallel batch embedding for performance.
189
194
  * @param db - Database adapter
190
195
  * @param progress - Optional progress context for notifications
191
196
  */
@@ -197,56 +202,117 @@ export class VectorSearchManager {
197
202
  return 0;
198
203
  }
199
204
  logger.info('Rebuilding vector index from database...', { module: 'VectorSearch' });
200
- // Step 1: Get all entries from database
201
- const entries = db.getRecentEntries(10000); // Get up to 10k entries
202
- const dbIds = new Set(entries.map((e) => String(e.id)));
203
- // Step 2: Clean up orphaned entries from the index
204
- // These are vector entries for database records that were permanently deleted
205
- const indexItems = await this.index.listItems();
206
- let orphansRemoved = 0;
207
- for (const item of indexItems) {
208
- if (!dbIds.has(item.id)) {
205
+ // Step 1: Get total entry count and build ID set for orphan detection
206
+ const totalEntries = db.getActiveEntryCount();
207
+ const dbIds = new Set();
208
+ // Collect all active entry IDs via pagination (avoids loading all content at once)
209
+ for (let offset = 0; offset < totalEntries; offset += REBUILD_PAGE_SIZE) {
210
+ const page = db.getEntriesPage(offset, REBUILD_PAGE_SIZE);
211
+ for (const entry of page) {
212
+ dbIds.add(String(entry.id));
213
+ }
214
+ }
215
+ // Step 2: Clean up existing index items
216
+ // If the index is corrupted (e.g., from a process kill), recreate it
217
+ try {
218
+ const indexItems = await this.index.listItems();
219
+ let orphansRemoved = 0;
220
+ for (const item of indexItems) {
221
+ if (!dbIds.has(item.id)) {
222
+ try {
223
+ await this.index.deleteItem(item.id);
224
+ orphansRemoved++;
225
+ }
226
+ catch {
227
+ // Ignore errors during cleanup
228
+ }
229
+ }
230
+ }
231
+ if (orphansRemoved > 0) {
232
+ logger.info(`Cleaned up ${String(orphansRemoved)} orphaned vector entries`, {
233
+ module: 'VectorSearch',
234
+ });
235
+ }
236
+ // Step 3: Delete all remaining items to prepare for clean re-index
237
+ // This avoids the double-delete overhead of calling addEntry (upsert) per item
238
+ const remainingItems = await this.index.listItems();
239
+ for (const item of remainingItems) {
209
240
  try {
210
241
  await this.index.deleteItem(item.id);
211
- orphansRemoved++;
212
242
  }
213
243
  catch {
214
- // Ignore errors during cleanup
244
+ // Ignore
215
245
  }
216
246
  }
217
247
  }
218
- if (orphansRemoved > 0) {
219
- logger.info(`Cleaned up ${String(orphansRemoved)} orphaned vector entries`, {
248
+ catch (indexError) {
249
+ // Index files are corrupted recreate from scratch
250
+ logger.warning('Vector index corrupted, recreating...', {
220
251
  module: 'VectorSearch',
252
+ error: indexError instanceof Error ? indexError.message : String(indexError),
221
253
  });
254
+ // Delete and recreate the vectra index directory
255
+ if (fs.existsSync(this.indexPath)) {
256
+ fs.rmSync(this.indexPath, { recursive: true, force: true });
257
+ fs.mkdirSync(this.indexPath, { recursive: true });
258
+ }
259
+ this.index = new LocalIndex(this.indexPath);
260
+ await this.index.createIndex();
261
+ logger.info('Recreated vector index after corruption', { module: 'VectorSearch' });
222
262
  }
223
- // Step 3: Re-index all current entries
224
- const total = entries.length;
225
- // Send initial progress
226
- await sendProgress(progress, 0, total, 'Starting vector index rebuild...');
263
+ // Step 4: Re-index all entries using paginated fetch
264
+ // Embeddings are generated in parallel batches (CPU-bound, safe),
265
+ // but vectra insertions are sequential (file I/O, not concurrency-safe)
266
+ await sendProgress(progress, 0, totalEntries, 'Starting vector index rebuild...');
227
267
  let indexed = 0;
228
- for (const entry of entries) {
229
- // Delete existing item first to avoid "already exists" error
230
- try {
231
- await this.index.deleteItem(String(entry.id));
232
- }
233
- catch {
234
- // Item may not exist, ignore
235
- }
236
- const success = await this.addEntry(entry.id, entry.content);
237
- if (success)
238
- indexed++;
239
- // Report progress every 10 entries to avoid flooding
240
- if (indexed % 10 === 0 || indexed === total) {
241
- await sendProgress(progress, indexed, total, `Indexed ${String(indexed)} of ${String(total)} entries`);
268
+ for (let offset = 0; offset < totalEntries; offset += REBUILD_PAGE_SIZE) {
269
+ const page = db.getEntriesPage(offset, REBUILD_PAGE_SIZE);
270
+ // Generate embeddings in parallel batches
271
+ for (let i = 0; i < page.length; i += REBUILD_BATCH_SIZE) {
272
+ const batch = page.slice(i, i + REBUILD_BATCH_SIZE);
273
+ // Parallel embedding generation
274
+ const embeddings = await Promise.all(batch.map(async (entry) => {
275
+ try {
276
+ return { entry, embedding: await this.generateEmbedding(entry.content) };
277
+ }
278
+ catch {
279
+ return { entry, embedding: null };
280
+ }
281
+ }));
282
+ // Sequential vectra insertion (file I/O not concurrency-safe)
283
+ for (const { entry, embedding } of embeddings) {
284
+ if (embedding !== null) {
285
+ try {
286
+ await this.index.insertItem({
287
+ id: String(entry.id),
288
+ vector: embedding,
289
+ metadata: {
290
+ entryId: entry.id,
291
+ contentPreview: entry.content.slice(0, 100),
292
+ },
293
+ });
294
+ indexed++;
295
+ }
296
+ catch (error) {
297
+ logger.error('Failed to insert entry into vector index', {
298
+ module: 'VectorSearch',
299
+ entityId: entry.id,
300
+ error: error instanceof Error ? error.message : String(error),
301
+ });
302
+ }
303
+ }
304
+ }
305
+ // Report progress every 10 entries to avoid flooding
306
+ if (indexed % 10 === 0 || indexed === totalEntries) {
307
+ await sendProgress(progress, indexed, totalEntries, `Indexed ${String(indexed)} of ${String(totalEntries)} entries`);
308
+ }
242
309
  }
243
310
  }
244
311
  // Force index to refresh by re-listing items
245
312
  // This ensures the internal query structures are updated and ready for search
246
- // The 100ms delay was insufficient because it didn't refresh the internal state
247
313
  await this.index.listItems();
248
314
  // Final progress
249
- await sendProgress(progress, indexed, total, 'Vector index rebuild complete');
315
+ await sendProgress(progress, indexed, totalEntries, 'Vector index rebuild complete');
250
316
  logger.info(`Rebuilt vector index with ${String(indexed)} entries`, {
251
317
  module: 'VectorSearch',
252
318
  });
@@ -1 +1 @@
1
- {"version":3,"file":"VectorSearchManager.js","sourceRoot":"","sources":["../../src/vector/VectorSearchManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VectorSearchManager.js","sourceRoot":"","sources":["../../src/vector/VectorSearchManager.ts"],"names":[],"mappings":"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"}
@@ -1,37 +1,46 @@
1
- version: '3.8'
2
-
3
- services:
4
- memory-journal-mcp:
5
- build: .
6
- container_name: memory-journal-mcp
7
- volumes:
8
- # Mount local data directory for persistent SQLite database
9
- - ./data:/app/data
10
- # Mount git config for context bundle functionality
11
- - ${HOME}/.gitconfig:/root/.gitconfig:ro
12
- # Mount SSH keys for GitHub access (optional)
13
- - ${HOME}/.ssh:/root/.ssh:ro
14
- environment:
15
- - DB_PATH=/app/data/memory_journal.db
16
- - PYTHONPATH=/app
17
- stdin_open: true
18
- tty: true
19
- # For MCP stdio communication
20
- command: python src/server.py
21
- restart: unless-stopped
22
-
23
- # Alternative service for testing without git/ssh mounts
24
- memory-journal-mcp-basic:
25
- build: .
26
- container_name: memory-journal-mcp-basic
27
- volumes:
28
- - ./data:/app/data
29
- environment:
30
- - DB_PATH=/app/data/memory_journal.db
31
- - PYTHONPATH=/app
32
- stdin_open: true
33
- tty: true
34
- command: python src/server.py
35
- restart: unless-stopped
36
- profiles:
37
- - basic
1
+ services:
2
+ memory-journal-mcp:
3
+ build: .
4
+ container_name: memory-journal-mcp
5
+ volumes:
6
+ # Mount local data directory for persistent SQLite database
7
+ - ./data:/app/data:rw,noexec,nosuid,nodev
8
+ environment:
9
+ - DB_PATH=/app/data/memory_journal.db
10
+ # Optional: GitHub integration
11
+ # - GITHUB_TOKEN=ghp_your_token_here
12
+ # - GITHUB_REPO_PATH=/app/repo
13
+ # Optional: CORS origin (default: *)
14
+ # - MCP_CORS_ORIGIN=http://localhost:3000
15
+ stdin_open: true
16
+ tty: true
17
+ # MCP stdio communication (default transport)
18
+ command: ['node', 'dist/cli.js']
19
+ restart: unless-stopped
20
+
21
+ # HTTP transport service for remote access
22
+ memory-journal-mcp-http:
23
+ build: .
24
+ container_name: memory-journal-mcp-http
25
+ volumes:
26
+ - ./data:/app/data:rw,noexec,nosuid,nodev
27
+ environment:
28
+ - DB_PATH=/app/data/memory_journal.db
29
+ - MCP_HOST=0.0.0.0
30
+ # Optional: GitHub integration
31
+ # - GITHUB_TOKEN=ghp_your_token_here
32
+ # - GITHUB_REPO_PATH=/app/repo
33
+ # Optional: CORS origin (default: *)
34
+ # - MCP_CORS_ORIGIN=http://localhost:3000
35
+ ports:
36
+ - '3000:3000'
37
+ command:
38
+ ['node', 'dist/cli.js', '--transport', 'http', '--port', '3000', '--server-host', '0.0.0.0']
39
+ restart: unless-stopped
40
+ deploy:
41
+ resources:
42
+ limits:
43
+ memory: 1g
44
+ cpus: '1.0'
45
+ profiles:
46
+ - http
@@ -13,8 +13,6 @@
13
13
  "env": {
14
14
  "MEMORY_JOURNAL_MCP_TOOL_FILTER": "tool_group_name_here",
15
15
  "GITHUB_TOKEN": "your_github_token_here",
16
- "GITHUB_ORG_TOKEN": "your_org_token_here",
17
- "DEFAULT_ORG": "your-org-name",
18
16
  "DEFAULT_PROJECT_NUMBER": "1"
19
17
  }
20
18
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memory-journal-mcp",
3
- "version": "4.3.0",
3
+ "version": "4.4.0",
4
4
  "description": "Project context management for AI-assisted development - Persistent knowledge graphs and intelligent context recall across fragmented AI threads",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -14,7 +14,11 @@
14
14
  "lint": "eslint src/",
15
15
  "lint:fix": "eslint src/ --fix",
16
16
  "typecheck": "tsc --noEmit",
17
- "check": "npm run lint && npm run typecheck"
17
+ "check": "npm run lint && npm run typecheck",
18
+ "test": "vitest run",
19
+ "test:watch": "vitest",
20
+ "test:coverage": "vitest run --coverage",
21
+ "bench": "vitest bench --run"
18
22
  },
19
23
  "keywords": [
20
24
  "mcp",
@@ -46,32 +50,35 @@
46
50
  "node": ">=24.0.0"
47
51
  },
48
52
  "dependencies": {
49
- "@modelcontextprotocol/sdk": "^1.25.2",
53
+ "@modelcontextprotocol/sdk": "^1.27.1",
50
54
  "@octokit/graphql": "^9.0.3",
51
55
  "@octokit/rest": "^22.0.1",
52
56
  "@xenova/transformers": "^2.17.2",
53
- "commander": "^14.0.2",
54
- "cors": "^2.8.5",
57
+ "commander": "^14.0.3",
58
+ "cors": "^2.8.6",
55
59
  "express": "^5.2.1",
56
- "simple-git": "^3.28.0",
57
- "sql.js": "^1.12.0",
60
+ "simple-git": "^3.32.3",
61
+ "sql.js": "^1.14.0",
58
62
  "vectra": "^0.12.3",
59
- "zod": "^4.3.5"
63
+ "zod": "^4.3.6"
60
64
  },
61
65
  "devDependencies": {
62
- "@eslint/js": "^9.39.2",
66
+ "@eslint/js": "^10.0.1",
63
67
  "@types/cors": "^2.8.19",
64
68
  "@types/express": "^5.0.6",
65
- "@types/node": "^25.0.9",
66
- "eslint": "^9.39.2",
67
- "globals": "^17.0.0",
69
+ "@types/node": "^25.3.2",
70
+ "@vitest/coverage-v8": "^4.0.18",
71
+ "eslint": "^10.0.2",
72
+ "globals": "^17.3.0",
68
73
  "typescript": "^5.9.3",
69
- "typescript-eslint": "^8.52.0"
74
+ "typescript-eslint": "^8.56.1",
75
+ "vitest": "^4.0.17"
70
76
  },
71
77
  "overrides": {
72
- "axios": "^1.13.2",
78
+ "axios": "^1.13.5",
73
79
  "brace-expansion": "^2.0.2",
74
80
  "glob": "^11.1.0",
81
+ "tar": "^7.5.8",
75
82
  "tmp": "^0.2.4"
76
83
  }
77
84
  }
@@ -0,0 +1,69 @@
1
+ # v4.3.1 - OutputSchema Fix & CVE Remediations
2
+
3
+ Released: February 5, 2026
4
+
5
+ ## Highlights
6
+
7
+ - **OutputSchema Fix** — Fixed `get_cross_project_insights` validation error on empty results
8
+ - **Security Patches** — Remediated 3 CVEs in Docker image (libexpat CRITICAL, tar HIGH)
9
+ - **Dependency Updates** — MCP SDK 1.26.0 and other updates
10
+
11
+ ---
12
+
13
+ ## Fixed
14
+
15
+ ### `get_cross_project_insights` OutputSchema Validation
16
+
17
+ When no projects met the minimum entry threshold, the tool returned only `message` and `projects` fields, failing outputSchema validation.
18
+
19
+ **Now returns all required fields:**
20
+
21
+ - `project_count: 0`
22
+ - `total_entries: 0`
23
+ - `inactive_projects: []`
24
+ - `time_distribution: []`
25
+ - `message` (with explanation)
26
+ - `projects: []`
27
+
28
+ ---
29
+
30
+ ## Security
31
+
32
+ ### CVE-2026-24515 (libexpat) — CRITICAL
33
+
34
+ Null pointer dereference vulnerability. Fixed by explicitly installing libexpat from Alpine edge repositories in Dockerfile.
35
+
36
+ ### CVE-2026-25210 (libexpat) — MEDIUM
37
+
38
+ Integer overflow leading to information disclosure. Same fix as CVE-2026-24515.
39
+
40
+ ### CVE-2026-24842 (tar) — HIGH
41
+
42
+ Path traversal vulnerability in npm's bundled tar package. Updated from 7.5.4 → 7.5.7 in Dockerfile.
43
+
44
+ ---
45
+
46
+ ## Changed
47
+
48
+ ### Dependency Updates
49
+
50
+ | Package | From | To |
51
+ | --------------------------- | ------- | ------ |
52
+ | `@modelcontextprotocol/sdk` | 1.25.3 | 1.26.0 |
53
+ | `@types/node` | 25.0.10 | 25.2.0 |
54
+ | `commander` | 14.0.2 | 14.0.3 |
55
+ | `globals` | 17.1.0 | 17.3.0 |
56
+
57
+ ---
58
+
59
+ ## Upgrade
60
+
61
+ ```bash
62
+ # npm
63
+ npm update -g memory-journal-mcp
64
+
65
+ # Docker
66
+ docker pull writenotenow/memory-journal-mcp:v4.3.1
67
+ ```
68
+
69
+ **Full Changelog**: https://github.com/neverinfamous/memory-journal-mcp/wiki/CHANGELOG
@@ -0,0 +1,120 @@
1
+ # v4.4.0 - Milestones, Insights, Security Hardening & Performance
2
+
3
+ Released: February 27, 2026
4
+
5
+ ## Highlights
6
+
7
+ - **GitHub Milestones Integration** — Full CRUD support with 5 new tools, 2 new resources, and briefing/status integration
8
+ - **Repository Insights/Traffic Tool** — New `get_repo_insights` tool and `memory://github/insights` resource for monitoring stars, forks, clones, views, referrers, and popular paths (14-day rolling data)
9
+ - **HTTP Transport Security Hardening** — Configurable CORS, request body size limits, security headers, session timeout, and error log token scrubbing
10
+ - **Performance Improvements** — Debounced database save, paginated vector rebuild, parallel batch embedding, GitHub API TTL cache, and startup deduplication
11
+ - **15+ Bug Fixes** — Including `memory://significant` sort correctness, `delete_entry` permanent delete, JournalEntry GitHub metadata exposure, and `list_tags` zero-count filtering
12
+
13
+ ---
14
+
15
+ ## Added
16
+
17
+ ### GitHub Milestones Integration
18
+
19
+ Full lifecycle management for GitHub Milestones:
20
+
21
+ - **5 new tools**: `get_github_milestones`, `get_github_milestone`, `create_github_milestone`, `update_github_milestone`, `delete_github_milestone`
22
+ - **2 new resources**: `memory://github/milestones` (list) and `memory://milestones/{number}` (detail)
23
+ - Briefing and status resources now include milestone progress data
24
+ - `create_github_issue_with_entry` accepts optional `milestone_number` parameter
25
+
26
+ ### Repository Insights/Traffic
27
+
28
+ - **New tool**: `get_repo_insights` with token-efficient `sections` parameter
29
+ - **New resource**: `memory://github/insights` — compact summary (~150 tokens)
30
+ - Surfaces stars, forks, watchers, clones, views, top referrers, and popular pages
31
+ - Extended 10-minute cache TTL for slowly-changing traffic data
32
+
33
+ ### Server Host Bind Parameter
34
+
35
+ - New `--server-host` CLI option and `MCP_HOST` / `HOST` environment variables
36
+ - Defaults to `localhost`; set to `0.0.0.0` for container deployments
37
+
38
+ ### Performance Benchmarking Suite
39
+
40
+ - New `npm run bench` script using `vitest bench` for baseline performance measurement
41
+
42
+ ---
43
+
44
+ ## Improved
45
+
46
+ - **`get_entry_by_id` Importance Scoring Breakdown** — Returns weighted component contributions
47
+ - **`get_cross_project_insights` Inactive Threshold Visibility** — Self-documenting `inactiveThresholdDays` field
48
+ - **Database I/O — Debounced Save** — 500ms debounce batches rapid writes into single disk flush
49
+ - **Vector Index Rebuild** — Paginated fetching (200 per page) + parallel batch embedding (5 at a time) + sequential insertion
50
+ - **Server Startup — `getTools()` Deduplication** — Eliminated duplicate call during startup
51
+ - **GitHub API — TTL Response Cache** — 5-minute cache for read methods with automatic invalidation on mutations
52
+
53
+ ---
54
+
55
+ ## Fixed
56
+
57
+ - **`memory://significant` Importance Sort** — Fixed resource returning timestamp-sorted instead of importance-sorted entries when >20 entries exist
58
+ - **`memory://instructions` Active Tool Count** — Fixed hardcoded 3-tool fallback; now uses `getAllToolNames()`
59
+ - **`memory://health` Tool Count** — Dynamic computation from `TOOL_GROUPS` instead of hardcoded value
60
+ - **`delete_entry` Permanent Delete** — Now works on previously soft-deleted entries via `getEntryByIdIncludeDeleted()`
61
+ - **`delete_entry` Existence Check (P154)** — Pre-checks entry existence before mutation
62
+ - **`link_entries` Existence Check (P154)** — Pre-checks both source and target entry existence
63
+ - **`visualize_relationships` Disambiguation (P154)** — Clear "Entry not found" message for nonexistent entries
64
+ - **`list_tags` Zero-Count Filtering** — No longer returns orphan tags with zero usage
65
+ - **`get_github_issue` Missing Milestone Field** — Now maps `issue.milestone` from API response
66
+ - **`JournalEntry` GitHub Metadata** — 10 GitHub fields now included in all tool responses
67
+ - **`delete_github_milestone` Structured Error** — Returns proper `DeleteMilestoneOutputSchema` on failure
68
+ - **`ServerInstructions.ts` Entry Types** — Updated from 7 stale types to full 13-type union
69
+ - **Docker Hub Short Description** — Corrected "HTTPS" → "HTTP/SSE"
70
+
71
+ ---
72
+
73
+ ## Security
74
+
75
+ - **HTTP Transport Hardening** — Configurable CORS (`--cors-origin`), 1MB request body limit, `X-Content-Type-Options: nosniff` + `X-Frame-Options: DENY`, 30-min session timeout
76
+ - **Error Log Token Scrubbing** — Automatic sanitization of GitHub tokens and Authorization headers
77
+ - **CVE-2026-26960 (tar)** — Updated npm's bundled tar → 7.5.8 (HIGH, path traversal CVSS 7.1)
78
+ - **GHSA-w7fw-mjwx-w883 (qs)** — Updated qs 6.14.1 → 6.14.2 (low, arrayLimit bypass DoS)
79
+ - **GHSA-43fc-jf86-j433 (axios)** — Override to 1.13.5 (DoS via `__proto__` key)
80
+ - **SECURITY.md Rewrite** — Complete rewrite for TypeScript era
81
+ - **docker-compose.yml Rewrite** — Removed Python-era configuration, added secure mounts
82
+ - **Dockerfile Healthcheck** — Replaced no-op healthcheck with `process.exit(0)` validation
83
+
84
+ ---
85
+
86
+ ## CI/CD
87
+
88
+ - Removed Dependabot auto-merge workflow — manual review required
89
+ - Trivy Action updated to 0.34.0
90
+ - CI test matrix aligned to `[24.x, 25.x]` matching `engines.node: >=24.0.0`
91
+ - Blocking `npm audit` — known vulnerabilities now fail the pipeline
92
+ - Blocking secret scanning — verified leaks now fail the pipeline
93
+
94
+ ---
95
+
96
+ ## Dependencies
97
+
98
+ | Package | From | To |
99
+ | --------------------------- | ------ | -------------- |
100
+ | `@eslint/js` | 9.39.2 | 10.0.1 (major) |
101
+ | `@modelcontextprotocol/sdk` | 1.26.0 | 1.27.1 (minor) |
102
+ | `@types/node` | 25.2.0 | 25.3.2 (minor) |
103
+ | `eslint` | 9.39.2 | 10.0.2 (major) |
104
+ | `simple-git` | 3.28.0 | 3.32.3 (minor) |
105
+ | `sql.js` | 1.12.0 | 1.14.0 (minor) |
106
+ | `typescript-eslint` | 8.54.0 | 8.56.1 (minor) |
107
+
108
+ ---
109
+
110
+ ## Upgrade
111
+
112
+ ```bash
113
+ # npm
114
+ npm update -g memory-journal-mcp
115
+
116
+ # Docker
117
+ docker pull writenotenow/memory-journal-mcp:v4.4.0
118
+ ```
119
+
120
+ **Full Changelog**: https://github.com/neverinfamous/memory-journal-mcp/wiki/CHANGELOG
package/server.json CHANGED
@@ -3,12 +3,12 @@
3
3
  "name": "io.github.neverinfamous/memory-journal-mcp",
4
4
  "title": "Memory Journal MCP",
5
5
  "description": "MCP server– Project memory system with GitHub-aware context, knowledge graphs, and CI/PR timelines",
6
- "version": "4.3.0",
6
+ "version": "4.4.0",
7
7
  "packages": [
8
8
  {
9
9
  "registryType": "oci",
10
- "identifier": "docker.io/writenotenow/memory-journal-mcp:v4.3.0",
11
- "version": "4.3.0",
10
+ "identifier": "docker.io/writenotenow/memory-journal-mcp:v4.4.0",
11
+ "version": "4.4.0",
12
12
  "transport": {
13
13
  "type": "stdio"
14
14
  }