memory-journal-mcp 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/.dockerignore +88 -0
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +76 -0
  3. package/.github/ISSUE_TEMPLATE/config.yml +11 -0
  4. package/.github/ISSUE_TEMPLATE/feature_request.md +89 -0
  5. package/.github/ISSUE_TEMPLATE/question.md +63 -0
  6. package/.github/dependabot.yml +110 -0
  7. package/.github/pull_request_template.md +110 -0
  8. package/.github/workflows/DOCKER_DEPLOYMENT_SETUP.md +346 -0
  9. package/.github/workflows/codeql.yml +45 -0
  10. package/.github/workflows/dependabot-auto-merge.yml +42 -0
  11. package/.github/workflows/docker-publish.yml +277 -0
  12. package/.github/workflows/lint-and-test.yml +58 -0
  13. package/.github/workflows/publish-npm.yml +75 -0
  14. package/.github/workflows/secrets-scanning.yml +32 -0
  15. package/.github/workflows/security-update.yml +99 -0
  16. package/.memory-journal-team.db +0 -0
  17. package/.trivyignore +18 -0
  18. package/CHANGELOG.md +19 -0
  19. package/CODE_OF_CONDUCT.md +128 -0
  20. package/CONTRIBUTING.md +209 -0
  21. package/DOCKER_README.md +377 -0
  22. package/Dockerfile +64 -0
  23. package/LICENSE +21 -0
  24. package/README.md +461 -0
  25. package/SECURITY.md +200 -0
  26. package/VERSION +1 -0
  27. package/dist/cli.d.ts +5 -0
  28. package/dist/cli.d.ts.map +1 -0
  29. package/dist/cli.js +42 -0
  30. package/dist/cli.js.map +1 -0
  31. package/dist/constants/ServerInstructions.d.ts +8 -0
  32. package/dist/constants/ServerInstructions.d.ts.map +1 -0
  33. package/dist/constants/ServerInstructions.js +26 -0
  34. package/dist/constants/ServerInstructions.js.map +1 -0
  35. package/dist/database/SqliteAdapter.d.ts +198 -0
  36. package/dist/database/SqliteAdapter.d.ts.map +1 -0
  37. package/dist/database/SqliteAdapter.js +736 -0
  38. package/dist/database/SqliteAdapter.js.map +1 -0
  39. package/dist/filtering/ToolFilter.d.ts +63 -0
  40. package/dist/filtering/ToolFilter.d.ts.map +1 -0
  41. package/dist/filtering/ToolFilter.js +242 -0
  42. package/dist/filtering/ToolFilter.js.map +1 -0
  43. package/dist/github/GitHubIntegration.d.ts +91 -0
  44. package/dist/github/GitHubIntegration.d.ts.map +1 -0
  45. package/dist/github/GitHubIntegration.js +317 -0
  46. package/dist/github/GitHubIntegration.js.map +1 -0
  47. package/dist/handlers/prompts/index.d.ts +28 -0
  48. package/dist/handlers/prompts/index.d.ts.map +1 -0
  49. package/dist/handlers/prompts/index.js +366 -0
  50. package/dist/handlers/prompts/index.js.map +1 -0
  51. package/dist/handlers/resources/index.d.ts +27 -0
  52. package/dist/handlers/resources/index.d.ts.map +1 -0
  53. package/dist/handlers/resources/index.js +453 -0
  54. package/dist/handlers/resources/index.js.map +1 -0
  55. package/dist/handlers/tools/index.d.ts +26 -0
  56. package/dist/handlers/tools/index.d.ts.map +1 -0
  57. package/dist/handlers/tools/index.js +982 -0
  58. package/dist/handlers/tools/index.js.map +1 -0
  59. package/dist/index.d.ts +11 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +13 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/server/McpServer.d.ts +18 -0
  64. package/dist/server/McpServer.d.ts.map +1 -0
  65. package/dist/server/McpServer.js +171 -0
  66. package/dist/server/McpServer.js.map +1 -0
  67. package/dist/types/index.d.ts +300 -0
  68. package/dist/types/index.d.ts.map +1 -0
  69. package/dist/types/index.js +15 -0
  70. package/dist/types/index.js.map +1 -0
  71. package/dist/utils/McpLogger.d.ts +61 -0
  72. package/dist/utils/McpLogger.d.ts.map +1 -0
  73. package/dist/utils/McpLogger.js +113 -0
  74. package/dist/utils/McpLogger.js.map +1 -0
  75. package/dist/utils/logger.d.ts +30 -0
  76. package/dist/utils/logger.d.ts.map +1 -0
  77. package/dist/utils/logger.js +70 -0
  78. package/dist/utils/logger.js.map +1 -0
  79. package/dist/vector/VectorSearchManager.d.ts +63 -0
  80. package/dist/vector/VectorSearchManager.d.ts.map +1 -0
  81. package/dist/vector/VectorSearchManager.js +235 -0
  82. package/dist/vector/VectorSearchManager.js.map +1 -0
  83. package/docker-compose.yml +37 -0
  84. package/eslint.config.js +86 -0
  85. package/mcp-config-example.json +21 -0
  86. package/package.json +71 -0
  87. package/releases/release-notes-v2.2.0.md +165 -0
  88. package/releases/release-notes.md +214 -0
  89. package/releases/v3.0.0.md +236 -0
  90. package/server.json +42 -0
  91. package/src/cli.ts +52 -0
  92. package/src/constants/ServerInstructions.ts +25 -0
  93. package/src/database/SqliteAdapter.ts +952 -0
  94. package/src/filtering/ToolFilter.ts +271 -0
  95. package/src/github/GitHubIntegration.ts +409 -0
  96. package/src/handlers/prompts/index.ts +420 -0
  97. package/src/handlers/resources/index.ts +529 -0
  98. package/src/handlers/tools/index.ts +1081 -0
  99. package/src/index.ts +53 -0
  100. package/src/server/McpServer.ts +230 -0
  101. package/src/types/index.ts +435 -0
  102. package/src/types/sql.js.d.ts +34 -0
  103. package/src/utils/McpLogger.ts +155 -0
  104. package/src/utils/logger.ts +98 -0
  105. package/src/vector/VectorSearchManager.ts +277 -0
  106. package/tools.json +300 -0
  107. package/tsconfig.json +51 -0
@@ -0,0 +1,377 @@
1
+ # Memory Journal MCP Server
2
+
3
+ Last Updated December 28, 2025 - v3.0.0
4
+
5
+ [![GitHub](https://img.shields.io/badge/GitHub-neverinfamous/memory--journal--mcp-blue?logo=github)](https://github.com/neverinfamous/memory-journal-mcp)
6
+ [![Docker Pulls](https://img.shields.io/docker/pulls/writenotenow/memory-journal-mcp)](https://hub.docker.com/r/writenotenow/memory-journal-mcp)
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)
9
+ ![Status](https://img.shields.io/badge/status-Production%2FStable-brightgreen)
10
+ [![npm](https://img.shields.io/npm/v/memory-journal-mcp)](https://www.npmjs.com/package/memory-journal-mcp)
11
+ [![Security](https://img.shields.io/badge/Security-Enhanced-green.svg)](https://github.com/neverinfamous/memory-journal-mcp/blob/main/SECURITY.md)
12
+ [![GitHub Stars](https://img.shields.io/github/stars/neverinfamous/memory-journal-mcp?style=social)](https://github.com/neverinfamous/memory-journal-mcp)
13
+ [![TypeScript](https://img.shields.io/badge/TypeScript-Strict-blue.svg)](https://github.com/neverinfamous/memory-journal-mcp)
14
+
15
+ **Project context management for AI-assisted development - Maintain continuity across fragmented AI threads with persistent knowledge graphs and intelligent context recall**
16
+
17
+ 🎯 **Solve the AI Context Problem:** Bridge the gap between disconnected AI sessions. Memory Journal provides persistent project memory, enabling AI to access your complete development history, past decisions, and work patterns across any thread or timeframe.
18
+
19
+ **[GitHub](https://github.com/neverinfamous/memory-journal-mcp)** • **[Wiki](https://github.com/neverinfamous/memory-journal-mcp/wiki)** • **[Changelog](https://github.com/neverinfamous/memory-journal-mcp/wiki/CHANGELOG)** • **[Release Article](https://adamic.tech/articles/memory-journal-mcp-server)**
20
+
21
+ **🚀 Multiple Deployment Options:**
22
+ - **[Docker Hub](https://hub.docker.com/r/writenotenow/memory-journal-mcp)** - Node.js Alpine-based multi-platform support
23
+ - **[npm Package](https://www.npmjs.com/package/memory-journal-mcp)** - Simple `npm install -g` for local deployment
24
+ - **[MCP Registry](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.neverinfamous/memory-journal-mcp)**
25
+
26
+ ---
27
+
28
+ ## 🎯 What This Does
29
+
30
+ **Solve the AI Context Problem:** When working with AI across multiple threads, context is lost. Memory Journal provides persistent project memory - every AI conversation can access your complete development history, past decisions, and work patterns.
31
+
32
+ ### Key Benefits
33
+ - 📝 **Auto-capture Git/GitHub context** (commits, branches, issues, PRs, projects)
34
+ - 🔗 **Build knowledge graphs** linking specs → implementations → tests → PRs
35
+ - 🔍 **Triple search** (full-text, semantic, date range)
36
+ - 📊 **Generate reports** (standups, retrospectives, PR summaries, status)
37
+ - 🗄️ **Backup & restore** your journal data with one command
38
+
39
+ ---
40
+
41
+ ## ✨ v3.0.0 Highlights (December 28, 2025)
42
+
43
+ ### **🚀 Complete TypeScript Rewrite**
44
+ - **Pure JS Stack** - No native compilation required (`sql.js` + `vectra` + `@xenova/transformers`)
45
+ - **Cross-Platform** - Works on AMD64 and ARM64 without architecture-specific builds
46
+ - **Strict Type Safety** - 100% TypeScript strict mode compliance
47
+ - **MCP 2025-11-25 Compliance** - Full spec with behavioral annotations
48
+
49
+ ### **🗄️ New: Backup & Restore Tools**
50
+ - `backup_journal` - Create timestamped database backups
51
+ - `list_backups` - List all available backup files
52
+ - `restore_backup` - Restore from any backup (with auto-backup before restore)
53
+
54
+ ### **📊 New: Server Health Resource**
55
+ - `memory://health` - Database stats, backup info, vector index status, tool filter config
56
+
57
+ ### **27 MCP Tools • 14 Workflow Prompts • 14 Resources**
58
+ - **8 tool groups** - `core`, `search`, `analytics`, `relationships`, `export`, `admin`, `github`, `backup`
59
+ - **Knowledge graphs** - 5 relationship types, Mermaid diagram visualization
60
+ - **Semantic search** - AI-powered conceptual search via `@xenova/transformers`
61
+
62
+ ---
63
+
64
+ ## 🚀 Quick Start (2 Minutes)
65
+
66
+ ### 1. Pull the Image
67
+
68
+ ```bash
69
+ docker pull writenotenow/memory-journal-mcp:latest
70
+ ```
71
+
72
+ ### 2. Create Data Directory
73
+
74
+ ```bash
75
+ mkdir data
76
+ ```
77
+
78
+ ### 3. Add to MCP Config
79
+
80
+ Add this to your `~/.cursor/mcp.json`:
81
+
82
+ ```json
83
+ {
84
+ "mcpServers": {
85
+ "memory-journal-mcp": {
86
+ "command": "docker",
87
+ "args": [
88
+ "run", "--rm", "-i",
89
+ "-v", "./data:/app/data",
90
+ "writenotenow/memory-journal-mcp:latest"
91
+ ]
92
+ }
93
+ }
94
+ }
95
+ ```
96
+
97
+ ### 4. Restart & Journal!
98
+
99
+ Restart Cursor or your MCP client and start journaling!
100
+
101
+ ### GitHub Integration (Optional)
102
+
103
+ To enable GitHub tools (`get_github_issues`, `get_github_prs`, etc.), add environment variables:
104
+
105
+ ```json
106
+ {
107
+ "mcpServers": {
108
+ "memory-journal-mcp": {
109
+ "command": "docker",
110
+ "args": [
111
+ "run", "--rm", "-i",
112
+ "-v", "./data:/app/data",
113
+ "-e", "GITHUB_TOKEN",
114
+ "-e", "GITHUB_REPO_PATH=/app/repo",
115
+ "-v", "/path/to/your/repo:/app/repo:ro",
116
+ "writenotenow/memory-journal-mcp:latest"
117
+ ],
118
+ "env": {
119
+ "GITHUB_TOKEN": "ghp_your_token_here"
120
+ }
121
+ }
122
+ }
123
+ }
124
+ ```
125
+
126
+ | Environment Variable | Description |
127
+ |---------------------|-------------|
128
+ | `GITHUB_TOKEN` | GitHub personal access token for API access |
129
+ | `GITHUB_REPO_PATH` | Path to git repo inside container (mount your repo) |
130
+
131
+ **Without `GITHUB_REPO_PATH`**: Explicitly provide `owner` and `repo` when calling GitHub tools.
132
+
133
+ ### Cursor Known Issues
134
+
135
+ **Listing MCP Resources**: If the agent has trouble listing resources, instruct it to call `list_mcp_resources()` without specifying a server parameter. Using `server="memory-journal-mcp"` may return nothing (Cursor bug).
136
+
137
+ ---
138
+
139
+ ## ⚡ **Install to Cursor IDE**
140
+
141
+ ### **One-Click Installation**
142
+
143
+ Click the button below to install directly into Cursor:
144
+
145
+ [![Install to Cursor](https://img.shields.io/badge/Install%20to%20Cursor-Click%20Here-blue?style=for-the-badge)](cursor://anysphere.cursor-deeplink/mcp/install?name=Memory%20Journal%20MCP&config=eyJtZW1vcnktam91cm5hbC1tY3AiOnsiYXJncyI6WyJydW4iLCItLXJtIiwiLWkiLCItdiIsIi4vZGF0YTovYXBwL2RhdGEiLCJ3cml0ZW5vdGVub3cvbWVtb3J5LWpvdXJuYWwtbWNwOmxhdGVzdCJdLCJjb21tYW5kIjoiZG9ja2VyIn19)
146
+
147
+ Or copy this deep link:
148
+ ```
149
+ cursor://anysphere.cursor-deeplink/mcp/install?name=Memory%20Journal%20MCP&config=eyJtZW1vcnktam91cm5hbC1tY3AiOnsiYXJncyI6WyJydW4iLCItLXJtIiwiLWkiLCItdiIsIi4vZGF0YTovYXBwL2RhdGEiLCJ3cml0ZW5vdGVub3cvbWVtb3J5LWpvdXJuYWwtbWNwOmxhdGVzdCJdLCJjb21tYW5kIjoiZG9ja2VyIn19
150
+ ```
151
+
152
+ ### **Prerequisites**
153
+ - ✅ Docker installed and running
154
+ - ✅ ~300MB disk space available
155
+
156
+ **📖 [See Full Installation Guide →](https://github.com/neverinfamous/memory-journal-mcp/wiki/Installation)**
157
+
158
+ ---
159
+
160
+ ## 🛡️ Supply Chain Security
161
+
162
+ For enhanced security and reproducible builds, use SHA-pinned images:
163
+
164
+ **Find SHA tags:** https://hub.docker.com/r/writenotenow/memory-journal-mcp/tags
165
+
166
+ **Option 1: Multi-arch manifest (recommended)**
167
+ ```bash
168
+ docker pull writenotenow/memory-journal-mcp:sha256-<manifest-digest>
169
+ ```
170
+
171
+ **Option 2: Direct digest (maximum security)**
172
+ ```bash
173
+ docker pull writenotenow/memory-journal-mcp@sha256:<manifest-digest>
174
+ ```
175
+
176
+ **Security Features:**
177
+ - ✅ **Build Provenance** - Cryptographic proof of build process
178
+ - ✅ **SBOM Available** - Complete software bill of materials
179
+ - ✅ **Supply Chain Attestations** - Verifiable build integrity
180
+ - ✅ **Non-root Execution** - Minimal attack surface
181
+ - ✅ **No Native Dependencies** - Pure JS stack reduces attack surface
182
+
183
+ ---
184
+
185
+ ## ⚡ Core Features
186
+
187
+ ### 🛠️ 27 MCP Tools (8 Groups)
188
+ | Group | Tools | Description |
189
+ |-------|-------|-------------|
190
+ | `core` | 6 | Entry CRUD, tags, test |
191
+ | `search` | 4 | Text search, date range, semantic, vector stats |
192
+ | `analytics` | 2 | Statistics, cross-project insights |
193
+ | `relationships` | 2 | Link entries, visualize graphs |
194
+ | `export` | 1 | JSON/Markdown export |
195
+ | `admin` | 4 | Update, delete, vector index management |
196
+ | `github` | 5 | Issues, PRs, context integration |
197
+ | `backup` | 3 | **NEW** Backup, list, restore |
198
+
199
+ **[Complete tools documentation →](https://github.com/neverinfamous/memory-journal-mcp/wiki/Tools)**
200
+
201
+ ### 🎯 14 Workflow Prompts
202
+ Standups • Retrospectives • Weekly digests • PR summaries • Code review prep • Goal tracking
203
+ **[Complete prompts guide →](https://github.com/neverinfamous/memory-journal-mcp/wiki/Prompts)**
204
+
205
+ ### 📡 14 Resources
206
+ Including new `memory://health` for server diagnostics
207
+ **[Resources documentation →](https://github.com/neverinfamous/memory-journal-mcp/wiki/Resources)**
208
+
209
+ ---
210
+
211
+ ## 📖 Quick Examples
212
+
213
+ ```javascript
214
+ // Create entry with auto-context
215
+ create_entry({
216
+ content: "Implemented lazy ML loading",
217
+ tags: ["performance"]
218
+ })
219
+
220
+ // Create a backup before major changes
221
+ backup_journal({ name: "pre_refactor" })
222
+
223
+ // Check server health
224
+ // Fetch memory://health resource
225
+
226
+ // Search entries
227
+ search_entries({ query: "performance" })
228
+
229
+ // Access MCP resources
230
+ memory://recent // Recent entries
231
+ memory://health // Server diagnostics
232
+ memory://projects/1/timeline // Project timeline
233
+ ```
234
+
235
+ **Ask Cursor AI naturally:**
236
+ - "Show me my recent journal entries"
237
+ - "Create a backup of my journal"
238
+ - "Check the server health status"
239
+ - "Find entries related to performance"
240
+
241
+ **[See complete examples & prompts →](https://github.com/neverinfamous/memory-journal-mcp/wiki/Examples)**
242
+
243
+ ---
244
+
245
+ ## 🔧 Configuration
246
+
247
+ ### Optional Environment Variables
248
+
249
+ ```bash
250
+ # GitHub integration (optional - enables Projects/Issues/PRs)
251
+ -e GITHUB_TOKEN=your_token
252
+ -e GITHUB_ORG_TOKEN=your_org_token # For org projects
253
+ -e DEFAULT_ORG=your-org-name
254
+
255
+ # Tool filtering (optional - control which tools are exposed)
256
+ -e MEMORY_JOURNAL_MCP_TOOL_FILTER="-github"
257
+
258
+ # Database location
259
+ -e DB_PATH=/app/data/custom.db
260
+ ```
261
+
262
+ **Token Scopes:** `repo`, `project`, `read:org` (org projects only)
263
+ **[Full configuration guide →](https://github.com/neverinfamous/memory-journal-mcp/wiki/Installation#configuration)**
264
+
265
+ ### Tool Filtering
266
+
267
+ Control which tools are exposed using `MEMORY_JOURNAL_MCP_TOOL_FILTER`:
268
+
269
+ ```bash
270
+ docker run -i --rm \
271
+ -e MEMORY_JOURNAL_MCP_TOOL_FILTER="-github,-analytics" \
272
+ -v ./data:/app/data \
273
+ writenotenow/memory-journal-mcp:latest
274
+ ```
275
+
276
+ **Common configurations:**
277
+
278
+ ```bash
279
+ # Starter mode (core + search only)
280
+ -e MEMORY_JOURNAL_MCP_TOOL_FILTER="starter"
281
+
282
+ # Read-only mode (disable modifications)
283
+ -e MEMORY_JOURNAL_MCP_TOOL_FILTER="readonly"
284
+
285
+ # Full mode (all tools, default)
286
+ -e MEMORY_JOURNAL_MCP_TOOL_FILTER="full"
287
+ ```
288
+
289
+ **Available tool groups:** `core`, `search`, `analytics`, `relationships`, `export`, `admin`, `github`, `backup`
290
+
291
+ **[Complete tool filtering guide →](https://github.com/neverinfamous/memory-journal-mcp/wiki/Tool-Filtering)**
292
+
293
+ ---
294
+
295
+ ## 📦 Image Details
296
+
297
+ | Platform | Features |
298
+ |----------|----------|
299
+ | **AMD64** (x86_64) | Complete: all tools, semantic search, Git context |
300
+ | **ARM64** (Apple Silicon) | Complete: all tools, semantic search, Git context |
301
+
302
+ **TypeScript v3.0 Image Benefits:**
303
+ - **Node.js 22 on Alpine Linux** - Minimal footprint (~150MB compressed)
304
+ - **Pure JS Stack** - No native compilation, identical features on all platforms
305
+ - **sql.js** - SQLite in pure JavaScript
306
+ - **vectra** - Vector similarity search without native dependencies
307
+ - **@xenova/transformers** - ML embeddings in JavaScript
308
+ - **Instant Startup** - Lazy loading of ML models
309
+ - **Production/Stable** - Comprehensive error handling and automatic migrations
310
+
311
+ **Automated Deployment:**
312
+ - ⚡ **Always Fresh** - Images built within minutes of commits
313
+ - 🔒 **Security Scanned** - Automatic vulnerability scanning
314
+ - 🌍 **Multi-Platform** - Intel (amd64) and Apple Silicon (arm64)
315
+ - ✅ **Quality Tested** - Automated testing before deployment
316
+ - 📋 **SBOM Available** - Complete software bill of materials
317
+
318
+ **Available Tags:**
319
+ - `3.0.0` - Specific version (recommended for production)
320
+ - `3.0` - Latest patch in 3.0.x series
321
+ - `3` - Latest minor in 3.x series
322
+ - `latest` - Always the newest version
323
+ - `sha256-<digest>` - SHA-pinned for maximum security
324
+
325
+ ---
326
+
327
+ ## 🏗️ Build from Source
328
+
329
+ **Step 1: Clone the repository**
330
+
331
+ ```bash
332
+ git clone https://github.com/neverinfamous/memory-journal-mcp.git
333
+ cd memory-journal-mcp
334
+ ```
335
+
336
+ **Step 2: Build the Docker image**
337
+
338
+ ```bash
339
+ docker build -f Dockerfile -t memory-journal-mcp-local .
340
+ ```
341
+
342
+ **Step 3: Add to MCP config**
343
+
344
+ Update your `~/.cursor/mcp.json` to use the local build:
345
+
346
+ ```json
347
+ {
348
+ "mcpServers": {
349
+ "memory-journal-mcp": {
350
+ "command": "docker",
351
+ "args": [
352
+ "run", "--rm", "-i",
353
+ "-v", "./data:/app/data",
354
+ "memory-journal-mcp-local"
355
+ ]
356
+ }
357
+ }
358
+ }
359
+ ```
360
+
361
+ ---
362
+
363
+ ## 📚 Documentation & Resources
364
+
365
+ - **[GitHub Wiki](https://github.com/neverinfamous/memory-journal-mcp/wiki)** - Complete documentation
366
+ - **[npm Package](https://www.npmjs.com/package/memory-journal-mcp)** - Node.js distribution
367
+ - **[Issues](https://github.com/neverinfamous/memory-journal-mcp/issues)** - Bug reports & feature requests
368
+
369
+ ---
370
+
371
+ ## 📄 License
372
+
373
+ MIT License - See [LICENSE](https://github.com/neverinfamous/memory-journal-mcp/blob/main/LICENSE)
374
+
375
+ ---
376
+
377
+ *Migrating from v2.x?* Your existing database is fully compatible. The TypeScript version uses the same schema and data format.
package/Dockerfile ADDED
@@ -0,0 +1,64 @@
1
+ # Memory Journal MCP Server - TypeScript Version
2
+ # Multi-stage build for optimized production image
3
+ FROM node:22-alpine AS builder
4
+
5
+ WORKDIR /app
6
+
7
+ # Install build dependencies
8
+ RUN apk add --no-cache python3 make g++
9
+
10
+ # Copy package files first for better layer caching
11
+ COPY package*.json ./
12
+
13
+ # Install all dependencies (including devDependencies for build)
14
+ RUN npm ci
15
+
16
+ # Copy source code
17
+ COPY tsconfig.json ./
18
+ COPY src/ ./src/
19
+
20
+ # Build TypeScript
21
+ RUN npm run build
22
+
23
+ # Production stage
24
+ FROM node:22-alpine
25
+
26
+ WORKDIR /app
27
+
28
+ # Install runtime dependencies
29
+ RUN apk add --no-cache git ca-certificates && apk upgrade --no-cache
30
+
31
+ # Copy built artifacts and production dependencies
32
+ COPY --from=builder /app/dist ./dist
33
+ COPY --from=builder /app/node_modules ./node_modules
34
+ COPY package*.json ./
35
+ COPY LICENSE ./
36
+
37
+ # Create data directory for SQLite database with proper permissions
38
+ RUN mkdir -p /app/data && chmod 700 /app/data
39
+
40
+ # Create non-root user for security
41
+ RUN addgroup -g 1001 -S appgroup && \
42
+ adduser -u 1001 -S appuser -G appgroup && \
43
+ chown -R appuser:appgroup /app
44
+
45
+ # Set environment variables
46
+ ENV NODE_ENV=production
47
+ ENV DB_PATH=/app/data/memory_journal.db
48
+
49
+ # Switch to non-root user
50
+ USER appuser
51
+
52
+ # Health check
53
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
54
+ CMD node -e "console.log('Server healthy')" || exit 1
55
+
56
+ # Run the MCP server
57
+ CMD ["node", "dist/cli.js"]
58
+
59
+ # Labels for Docker Hub
60
+ LABEL maintainer="Adamic.tech"
61
+ LABEL description="Memory Journal MCP Server - Project context management for AI-assisted development"
62
+ LABEL version="3.0.0"
63
+ LABEL org.opencontainers.image.source="https://github.com/neverinfamous/memory-journal-mcp"
64
+ LABEL io.modelcontextprotocol.server.name="io.github.neverinfamous/memory-journal-mcp"
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Adamic.tech
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.