memory-journal-mcp 3.0.0 → 3.1.3

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 (52) hide show
  1. package/.github/dependabot.yml +31 -46
  2. package/.github/workflows/codeql.yml +1 -1
  3. package/.github/workflows/docker-publish.yml +53 -16
  4. package/.github/workflows/lint-and-test.yml +2 -2
  5. package/.github/workflows/publish-npm.yml +1 -1
  6. package/.github/workflows/secrets-scanning.yml +1 -1
  7. package/.github/workflows/security-update.yml +1 -1
  8. package/.scout-ignore +12 -0
  9. package/.trivyignore +14 -13
  10. package/DOCKER_README.md +36 -10
  11. package/Dockerfile +25 -8
  12. package/README.md +86 -12
  13. package/VERSION +1 -1
  14. package/dist/cli.js +1 -1
  15. package/dist/cli.js.map +1 -1
  16. package/dist/constants/ServerInstructions.d.ts +24 -1
  17. package/dist/constants/ServerInstructions.d.ts.map +1 -1
  18. package/dist/constants/ServerInstructions.js +173 -13
  19. package/dist/constants/ServerInstructions.js.map +1 -1
  20. package/dist/github/GitHubIntegration.d.ts +18 -3
  21. package/dist/github/GitHubIntegration.d.ts.map +1 -1
  22. package/dist/github/GitHubIntegration.js +301 -3
  23. package/dist/github/GitHubIntegration.js.map +1 -1
  24. package/dist/handlers/prompts/index.js +2 -2
  25. package/dist/handlers/prompts/index.js.map +1 -1
  26. package/dist/handlers/resources/index.js +122 -1
  27. package/dist/handlers/resources/index.js.map +1 -1
  28. package/dist/handlers/tools/index.js +116 -0
  29. package/dist/handlers/tools/index.js.map +1 -1
  30. package/dist/server/McpServer.d.ts.map +1 -1
  31. package/dist/server/McpServer.js +21 -6
  32. package/dist/server/McpServer.js.map +1 -1
  33. package/dist/types/index.d.ts +43 -0
  34. package/dist/types/index.d.ts.map +1 -1
  35. package/dist/types/index.js.map +1 -1
  36. package/dist/vector/VectorSearchManager.js +2 -2
  37. package/dist/vector/VectorSearchManager.js.map +1 -1
  38. package/package.json +9 -7
  39. package/releases/v3.1.0.md +101 -0
  40. package/releases/v3.1.1.md +40 -0
  41. package/releases/v3.1.2.md +38 -0
  42. package/releases/v3.1.3.md +58 -0
  43. package/server.json +3 -3
  44. package/src/cli.ts +1 -1
  45. package/src/constants/ServerInstructions.ts +207 -13
  46. package/src/github/GitHubIntegration.ts +383 -3
  47. package/src/handlers/prompts/index.ts +2 -2
  48. package/src/handlers/resources/index.ts +140 -1
  49. package/src/handlers/tools/index.ts +137 -0
  50. package/src/server/McpServer.ts +33 -9
  51. package/src/types/index.ts +51 -0
  52. package/src/vector/VectorSearchManager.ts +2 -2
@@ -1,10 +1,11 @@
1
1
  # Dependabot configuration for Memory Journal MCP Server
2
- # Manages 72+ dependencies including ML libraries and NVIDIA CUDA packages
2
+ # v3.0.0+ is a TypeScript/Node.js project (npm dependencies)
3
+ # The Python codebase is deprecated and archived in archive/python-v2
3
4
 
4
5
  version: 2
5
6
  updates:
6
- # Python dependencies (pip)
7
- - package-ecosystem: "pip"
7
+ # NPM dependencies (TypeScript/Node.js - v3.0.0+)
8
+ - package-ecosystem: "npm"
8
9
  directory: "/"
9
10
  schedule:
10
11
  interval: "weekly"
@@ -16,61 +17,45 @@ updates:
16
17
  - "neverinfamous"
17
18
  labels:
18
19
  - "dependencies"
19
- - "python"
20
- # Group ML/AI related packages to reduce PR noise
20
+ - "npm"
21
21
  groups:
22
+ mcp-core:
23
+ patterns:
24
+ - "@modelcontextprotocol/*"
25
+ - "zod*"
26
+ update-types:
27
+ - "minor"
28
+ - "patch"
22
29
  ml-packages:
23
30
  patterns:
24
- - "torch*"
25
- - "nvidia-*"
26
- - "transformers*"
27
- - "sentence-transformers*"
28
- - "huggingface-*"
29
- - "scikit-learn*"
30
- - "scipy*"
31
- - "numpy*"
32
- - "faiss-*"
33
- - "pillow*"
34
- - "tokenizers*"
35
- - "safetensors*"
31
+ - "@xenova/*"
32
+ - "vectra*"
36
33
  update-types:
37
34
  - "minor"
38
35
  - "patch"
39
- mcp-core:
36
+ database:
40
37
  patterns:
41
- - "mcp*"
42
- - "pydantic*"
43
- - "httpx*"
44
- - "starlette*"
45
- - "uvicorn*"
38
+ - "sql.js*"
39
+ - "better-sqlite3*"
46
40
  update-types:
47
41
  - "minor"
48
42
  - "patch"
49
- utilities:
43
+ build-tools:
50
44
  patterns:
51
- - "tqdm*"
52
- - "click*"
53
- - "pyyaml*"
54
- - "requests*"
55
- - "urllib3*"
56
- - "certifi*"
57
- - "charset-normalizer*"
58
- - "idna*"
59
- - "filelock*"
60
- - "packaging*"
61
- - "attrs*"
45
+ - "typescript*"
46
+ - "tsup*"
47
+ - "@types/*"
62
48
  update-types:
49
+ - "minor"
50
+ - "patch"
51
+ linting:
52
+ patterns:
53
+ - "eslint*"
54
+ - "@eslint/*"
55
+ - "typescript-eslint*"
56
+ update-types:
57
+ - "minor"
63
58
  - "patch"
64
- # Ignore specific packages that might cause compatibility issues
65
- ignore:
66
- # NVIDIA CUDA packages - only update for security fixes
67
- - dependency-name: "nvidia-*"
68
- update-types: ["version-update:semver-minor"]
69
- # PyTorch - be conservative with updates
70
- - dependency-name: "torch"
71
- update-types: ["version-update:semver-major"]
72
- - dependency-name: "triton"
73
- update-types: ["version-update:semver-major"]
74
59
 
75
60
  # GitHub Actions
76
61
  - package-ecosystem: "github-actions"
@@ -94,7 +79,7 @@ updates:
94
79
  - "minor"
95
80
  - "patch"
96
81
 
97
- # Docker dependencies (if using Docker Compose)
82
+ # Docker dependencies
98
83
  - package-ecosystem: "docker"
99
84
  directory: "/"
100
85
  schedule:
@@ -27,7 +27,7 @@ jobs:
27
27
 
28
28
  steps:
29
29
  - name: Checkout repository
30
- uses: actions/checkout@v5
30
+ uses: actions/checkout@v6
31
31
 
32
32
  - name: Initialize CodeQL
33
33
  uses: github/codeql-action/init@v4
@@ -23,10 +23,41 @@ permissions:
23
23
  attestations: write
24
24
 
25
25
  jobs:
26
+ # Gate check: For tag pushes, run lint/typecheck/build first
27
+ preflight-check:
28
+ if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
29
+ runs-on: ubuntu-latest
30
+ steps:
31
+ - name: Checkout code
32
+ uses: actions/checkout@v6
33
+
34
+ - name: Setup Node.js
35
+ uses: actions/setup-node@v6
36
+ with:
37
+ node-version: '22.x'
38
+ cache: 'npm'
39
+
40
+ - name: Install dependencies
41
+ run: npm ci
42
+
43
+ - name: Run ESLint
44
+ run: npm run lint
45
+
46
+ - name: Run TypeScript check
47
+ run: npm run typecheck
48
+
49
+ - name: Build
50
+ run: npm run build
51
+
26
52
  # Build each platform on native architecture (avoids QEMU emulation issues)
27
53
  build-platform:
28
- # Only run if lint-and-test succeeded OR if this is a tag push
29
- if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'push' }}
54
+ # For workflow_run: only run if lint-and-test succeeded
55
+ # For tag push: only run after preflight-check succeeds
56
+ needs: [preflight-check]
57
+ if: |
58
+ always() &&
59
+ (github.event.workflow_run.conclusion == 'success' ||
60
+ (github.event_name == 'push' && needs.preflight-check.result == 'success'))
30
61
  strategy:
31
62
  fail-fast: false
32
63
  matrix:
@@ -48,7 +79,7 @@ jobs:
48
79
 
49
80
  steps:
50
81
  - name: Checkout repository
51
- uses: actions/checkout@v5
82
+ uses: actions/checkout@v6
52
83
 
53
84
  - name: Set up Docker Buildx
54
85
  uses: docker/setup-buildx-action@v3
@@ -112,7 +143,7 @@ jobs:
112
143
 
113
144
  - name: Upload digest
114
145
  if: github.event_name != 'pull_request'
115
- uses: actions/upload-artifact@v4
146
+ uses: actions/upload-artifact@v6
116
147
  with:
117
148
  name: digests-${{ matrix.platform == 'linux/amd64' && 'amd64' || 'arm64' }}
118
149
  path: /tmp/digests/*
@@ -130,7 +161,7 @@ jobs:
130
161
 
131
162
  steps:
132
163
  - name: Checkout repository
133
- uses: actions/checkout@v5
164
+ uses: actions/checkout@v6
134
165
 
135
166
  - name: Set up Docker Buildx
136
167
  uses: docker/setup-buildx-action@v3
@@ -153,27 +184,33 @@ jobs:
153
184
  docker images local-scan:latest
154
185
  echo "🔍 Running Docker Scout security scan for local-scan:latest"
155
186
 
187
+ # Define CVEs to ignore (upstream issues with NO fix available)
188
+ # CVE-2026-22184: Alpine zlib - no fix version released yet
189
+ # CVE-2019-10790: protobufjs taffydb - unmaintained/abandoned package
190
+ IGNORE_CVES="CVE-2026-22184|CVE-2019-10790"
191
+
156
192
  echo "⏱️ Running Docker Scout scan (max 8 minutes)..."
157
193
  if timeout 480 docker scout cves local-scan:latest > scout_output.txt 2>&1; then
158
194
  echo "📊 Scan completed successfully"
159
195
  cat scout_output.txt
160
196
 
161
- # Check if critical or high vulnerabilities are present in the output
162
- # Look for non-zero counts in CRITICAL or HIGH columns (format: "1C" or "2H")
163
- if grep -E "^\s+[1-9][0-9]*C\s+" scout_output.txt > /dev/null; then
164
- echo "❌ Critical severity vulnerabilities detected"
197
+ # Filter out ignored CVEs and check remaining for critical/high
198
+ # First, check for any critical CVEs that are NOT in our ignore list
199
+ if grep -E "^[A-Z]" scout_output.txt | grep -vE "$IGNORE_CVES" | grep -q "CRITICAL"; then
200
+ echo "❌ Critical severity vulnerability detected (not in allowlist)"
165
201
  echo "🚨 Build blocked due to unacceptable security risk"
166
202
  exit 1
167
203
  fi
168
204
 
169
- if grep -E "^\s+0C\s+[1-9][0-9]*H\s+" scout_output.txt > /dev/null; then
170
- echo " High severity vulnerabilities detected"
205
+ # Check for any high CVEs that are NOT in our ignore list
206
+ if grep -E "^CVE-" scout_output.txt | grep -vE "$IGNORE_CVES" | grep -q "HIGH"; then
207
+ echo "❌ High severity vulnerability detected (not in allowlist)"
171
208
  echo "🚨 Build blocked due to unacceptable security risk"
172
209
  exit 1
173
- else
174
- echo "✅ Security scan passed - no critical/high severity vulnerabilities"
175
- echo "ℹ️ Low/medium severity vulnerabilities are acceptable"
176
210
  fi
211
+
212
+ echo "✅ Security scan passed"
213
+ echo "ℹ️ Any flagged CVEs are either allowlisted (upstream) or low/medium severity"
177
214
  else
178
215
  echo "⚠️ Docker Scout scan timed out or failed"
179
216
  echo "🔄 Continuing build - scan timeout is not a security failure"
@@ -198,10 +235,10 @@ jobs:
198
235
 
199
236
  steps:
200
237
  - name: Checkout repository
201
- uses: actions/checkout@v5
238
+ uses: actions/checkout@v6
202
239
 
203
240
  - name: Download digests
204
- uses: actions/download-artifact@v4
241
+ uses: actions/download-artifact@v7
205
242
  with:
206
243
  path: /tmp/digests
207
244
  pattern: digests-*
@@ -18,7 +18,7 @@ jobs:
18
18
 
19
19
  steps:
20
20
  - name: Checkout code
21
- uses: actions/checkout@v5
21
+ uses: actions/checkout@v6
22
22
 
23
23
  - name: Setup Node.js ${{ matrix.node-version }}
24
24
  uses: actions/setup-node@v6
@@ -42,7 +42,7 @@ jobs:
42
42
  runs-on: ubuntu-latest
43
43
  steps:
44
44
  - name: Checkout code
45
- uses: actions/checkout@v5
45
+ uses: actions/checkout@v6
46
46
 
47
47
  - name: Setup Node.js
48
48
  uses: actions/setup-node@v6
@@ -22,7 +22,7 @@ jobs:
22
22
 
23
23
  steps:
24
24
  - name: Checkout code
25
- uses: actions/checkout@v5
25
+ uses: actions/checkout@v6
26
26
 
27
27
  - name: Setup Node.js
28
28
  uses: actions/setup-node@v6
@@ -14,7 +14,7 @@ jobs:
14
14
  runs-on: ubuntu-latest
15
15
  steps:
16
16
  - name: Checkout code
17
- uses: actions/checkout@v5
17
+ uses: actions/checkout@v6
18
18
  with:
19
19
  fetch-depth: 0
20
20
 
@@ -18,7 +18,7 @@ jobs:
18
18
 
19
19
  steps:
20
20
  - name: Checkout repository
21
- uses: actions/checkout@v5
21
+ uses: actions/checkout@v6
22
22
 
23
23
  - name: Set up Docker Buildx
24
24
  uses: docker/setup-buildx-action@v3
package/.scout-ignore ADDED
@@ -0,0 +1,12 @@
1
+ # Docker Scout CVE Ignore File
2
+ # See: https://docs.docker.com/scout/explore/cve-ignorelist/
3
+ #
4
+ # Only include CVEs with NO upstream fix available
5
+
6
+ # Alpine zlib - Critical severity, but NO FIX VERSION RELEASED by Alpine yet
7
+ # We run `apk upgrade --no-cache` but there's nothing to upgrade to
8
+ CVE-2026-22184
9
+
10
+ # protobufjs bundled taffydb - 6+ year old unmaintained package
11
+ # No fix version exists - package is abandoned
12
+ CVE-2019-10790
package/.trivyignore CHANGED
@@ -1,18 +1,19 @@
1
1
  # Trivy Ignore File
2
2
  # See: https://aquasecurity.github.io/trivy/latest/docs/configuration/filtering/
3
3
 
4
- # CVE-2025-64756: glob command injection in npm CLI (HIGH)
5
- # This is in the Node.js base image's npm installation (/usr/local/lib/node_modules/npm)
6
- # We don't use glob CLI directly and cannot patch base image npm
7
- # Will be fixed when Node.js releases updated base images
8
- CVE-2025-64756
4
+ # ============================================================================
5
+ # Alpine Base Image - No upstream fix available
6
+ # ============================================================================
9
7
 
10
- # CVE-2025-5889: brace-expansion ReDoS (LOW)
11
- # Bundled in protobufjs/cli/node_modules - can't override with npm
12
- # LOW severity, attack complexity is high, exploitation is difficult
13
- CVE-2025-5889
8
+ # CVE-2026-22184: zlib vulnerability (CRITICAL)
9
+ # No fix version released by Alpine yet - `apk upgrade` has nothing to update to
10
+ CVE-2026-22184
14
11
 
15
- # CVE-2025-54798: tmp symlink vulnerability (LOW)
16
- # Bundled in protobufjs/cli/node_modules - can't override with npm
17
- # LOW severity, only affects tmp file creation in CLI context
18
- CVE-2025-54798
12
+ # ============================================================================
13
+ # protobufjs Bundled CLI - in /app/node_modules/protobufjs/cli/node_modules/
14
+ # taffydb is 6+ years unmaintained with no fix available
15
+ # ============================================================================
16
+
17
+ # CVE-2019-10790: taffydb prototype pollution (HIGH)
18
+ # No fix version exists - package is abandoned
19
+ CVE-2019-10790
package/DOCKER_README.md CHANGED
@@ -1,11 +1,11 @@
1
1
  # Memory Journal MCP Server
2
2
 
3
- Last Updated December 28, 2025 - v3.0.0
3
+ Last Updated January 11, 2026 - v3.1.3
4
4
 
5
5
  [![GitHub](https://img.shields.io/badge/GitHub-neverinfamous/memory--journal--mcp-blue?logo=github)](https://github.com/neverinfamous/memory-journal-mcp)
6
6
  [![Docker Pulls](https://img.shields.io/docker/pulls/writenotenow/memory-journal-mcp)](https://hub.docker.com/r/writenotenow/memory-journal-mcp)
7
7
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
8
- ![Version](https://img.shields.io/badge/version-v3.0.0-green)
8
+ ![Version](https://img.shields.io/badge/version-v3.1.3-green)
9
9
  ![Status](https://img.shields.io/badge/status-Production%2FStable-brightgreen)
10
10
  [![npm](https://img.shields.io/npm/v/memory-journal-mcp)](https://www.npmjs.com/package/memory-journal-mcp)
11
11
  [![Security](https://img.shields.io/badge/Security-Enhanced-green.svg)](https://github.com/neverinfamous/memory-journal-mcp/blob/main/SECURITY.md)
@@ -36,6 +36,24 @@ Last Updated December 28, 2025 - v3.0.0
36
36
  - 📊 **Generate reports** (standups, retrospectives, PR summaries, status)
37
37
  - 🗄️ **Backup & restore** your journal data with one command
38
38
 
39
+ ```mermaid
40
+ flowchart LR
41
+ subgraph Problem["❌ Without Memory Journal"]
42
+ direction TB
43
+ A1["Session 1<br/>Context Lost"] --> A2["Session 2<br/>Start Over"]
44
+ end
45
+
46
+ subgraph Solution["✅ With Memory Journal"]
47
+ direction TB
48
+ B1["Session 1"] --> MJ[("📚 Memory<br/>Journal")]
49
+ B2["Session 2"] --> MJ
50
+ MJ --> |"Recall"| B1
51
+ MJ --> |"Search"| B2
52
+ end
53
+
54
+ Problem -.->|"Solve with"| Solution
55
+ ```
56
+
39
57
  ---
40
58
 
41
59
  ## ✨ v3.0.0 Highlights (December 28, 2025)
@@ -54,8 +72,9 @@ Last Updated December 28, 2025 - v3.0.0
54
72
  ### **📊 New: Server Health Resource**
55
73
  - `memory://health` - Database stats, backup info, vector index status, tool filter config
56
74
 
57
- ### **27 MCP Tools • 14 Workflow Prompts • 14 Resources**
75
+ ### **29 MCP Tools • 14 Workflow Prompts • 16 Resources**
58
76
  - **8 tool groups** - `core`, `search`, `analytics`, `relationships`, `export`, `admin`, `github`, `backup`
77
+ - **GitHub Kanban** - View and manage GitHub Project boards directly
59
78
  - **Knowledge graphs** - 5 relationship types, Mermaid diagram visualization
60
79
  - **Semantic search** - AI-powered conceptual search via `@xenova/transformers`
61
80
 
@@ -184,7 +203,7 @@ docker pull writenotenow/memory-journal-mcp@sha256:<manifest-digest>
184
203
 
185
204
  ## ⚡ Core Features
186
205
 
187
- ### 🛠️ 27 MCP Tools (8 Groups)
206
+ ### 🛠️ 29 MCP Tools (8 Groups)
188
207
  | Group | Tools | Description |
189
208
  |-------|-------|-------------|
190
209
  | `core` | 6 | Entry CRUD, tags, test |
@@ -193,8 +212,8 @@ docker pull writenotenow/memory-journal-mcp@sha256:<manifest-digest>
193
212
  | `relationships` | 2 | Link entries, visualize graphs |
194
213
  | `export` | 1 | JSON/Markdown export |
195
214
  | `admin` | 4 | Update, delete, vector index management |
196
- | `github` | 5 | Issues, PRs, context integration |
197
- | `backup` | 3 | **NEW** Backup, list, restore |
215
+ | `github` | 7 | Issues, PRs, context, **Kanban board** |
216
+ | `backup` | 3 | Backup, list, restore |
198
217
 
199
218
  **[Complete tools documentation →](https://github.com/neverinfamous/memory-journal-mcp/wiki/Tools)**
200
219
 
@@ -202,8 +221,8 @@ docker pull writenotenow/memory-journal-mcp@sha256:<manifest-digest>
202
221
  Standups • Retrospectives • Weekly digests • PR summaries • Code review prep • Goal tracking
203
222
  **[Complete prompts guide →](https://github.com/neverinfamous/memory-journal-mcp/wiki/Prompts)**
204
223
 
205
- ### 📡 14 Resources
206
- Including new `memory://health` for server diagnostics
224
+ ### 📡 16 Resources
225
+ Including `memory://health` for diagnostics and `memory://kanban/{n}` for Kanban boards
207
226
  **[Resources documentation →](https://github.com/neverinfamous/memory-journal-mcp/wiki/Resources)**
208
227
 
209
228
  ---
@@ -226,9 +245,16 @@ backup_journal({ name: "pre_refactor" })
226
245
  // Search entries
227
246
  search_entries({ query: "performance" })
228
247
 
248
+ // View Kanban board
249
+ get_kanban_board({ project_number: 5 })
250
+
251
+ // Move item on Kanban
252
+ move_kanban_item({ project_number: 5, item_id: "PVTI_...", target_status: "Done" })
253
+
229
254
  // Access MCP resources
230
255
  memory://recent // Recent entries
231
256
  memory://health // Server diagnostics
257
+ memory://kanban/5 // Kanban board view
232
258
  memory://projects/1/timeline // Project timeline
233
259
  ```
234
260
 
@@ -300,7 +326,7 @@ docker run -i --rm \
300
326
  | **ARM64** (Apple Silicon) | Complete: all tools, semantic search, Git context |
301
327
 
302
328
  **TypeScript v3.0 Image Benefits:**
303
- - **Node.js 22 on Alpine Linux** - Minimal footprint (~150MB compressed)
329
+ - **Node.js 24 on Alpine Linux** - Minimal footprint (~150MB compressed)
304
330
  - **Pure JS Stack** - No native compilation, identical features on all platforms
305
331
  - **sql.js** - SQLite in pure JavaScript
306
332
  - **vectra** - Vector similarity search without native dependencies
@@ -316,7 +342,7 @@ docker run -i --rm \
316
342
  - 📋 **SBOM Available** - Complete software bill of materials
317
343
 
318
344
  **Available Tags:**
319
- - `3.0.0` - Specific version (recommended for production)
345
+ - `3.1.3` - Specific version (recommended for production)
320
346
  - `3.0` - Latest patch in 3.0.x series
321
347
  - `3` - Latest minor in 3.x series
322
348
  - `latest` - Always the newest version
package/Dockerfile CHANGED
@@ -1,18 +1,32 @@
1
1
  # Memory Journal MCP Server - TypeScript Version
2
2
  # Multi-stage build for optimized production image
3
- FROM node:22-alpine AS builder
3
+ FROM node:24-alpine AS builder
4
4
 
5
5
  WORKDIR /app
6
6
 
7
- # Install build dependencies
8
- RUN apk add --no-cache python3 make g++
7
+ # Install build dependencies and upgrade packages for security
8
+ # Use Alpine edge for latest security patches (curl CVE-2025-14524, etc.)
9
+ RUN apk add --no-cache python3 make g++ && \
10
+ apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/main curl && \
11
+ apk upgrade --no-cache
12
+
13
+ # Upgrade npm globally to get fixed versions of bundled packages
14
+ # Fixes CVE-2025-64756 (glob) and CVE-2025-64118 (tar)
15
+ RUN npm install -g npm@latest
9
16
 
10
17
  # Copy package files first for better layer caching
11
- COPY package*.json ./
18
+ COPY package*.json .npmrc ./
12
19
 
13
20
  # Install all dependencies (including devDependencies for build)
21
+ # The .npmrc has legacy-peer-deps=true to handle zod peer conflicts
14
22
  RUN npm ci
15
23
 
24
+ # Clean protobufjs bundled cli dependencies and apply overrides
25
+ # This ensures our brace-expansion and tmp overrides take effect
26
+ RUN rm -rf node_modules/protobufjs/cli/node_modules/brace-expansion \
27
+ node_modules/protobufjs/cli/node_modules/tmp && \
28
+ npm dedupe
29
+
16
30
  # Copy source code
17
31
  COPY tsconfig.json ./
18
32
  COPY src/ ./src/
@@ -21,12 +35,15 @@ COPY src/ ./src/
21
35
  RUN npm run build
22
36
 
23
37
  # Production stage
24
- FROM node:22-alpine
38
+ FROM node:24-alpine
25
39
 
26
40
  WORKDIR /app
27
41
 
28
- # Install runtime dependencies
29
- RUN apk add --no-cache git ca-certificates && apk upgrade --no-cache
42
+ # Install runtime dependencies with security fixes
43
+ # Use Alpine edge for curl with CVE fixes
44
+ RUN apk add --no-cache git ca-certificates && \
45
+ apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/main curl && \
46
+ apk upgrade --no-cache
30
47
 
31
48
  # Copy built artifacts and production dependencies
32
49
  COPY --from=builder /app/dist ./dist
@@ -59,6 +76,6 @@ CMD ["node", "dist/cli.js"]
59
76
  # Labels for Docker Hub
60
77
  LABEL maintainer="Adamic.tech"
61
78
  LABEL description="Memory Journal MCP Server - Project context management for AI-assisted development"
62
- LABEL version="3.0.0"
79
+ LABEL version="3.1.3"
63
80
  LABEL org.opencontainers.image.source="https://github.com/neverinfamous/memory-journal-mcp"
64
81
  LABEL io.modelcontextprotocol.server.name="io.github.neverinfamous/memory-journal-mcp"