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
package/dist/cli.js ADDED
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Memory Journal MCP Server - CLI Entry Point
3
+ */
4
+ import { Command } from 'commander';
5
+ import { createServer } from './server/McpServer.js';
6
+ import { logger } from './utils/logger.js';
7
+ const program = new Command();
8
+ program
9
+ .name('memory-journal-mcp')
10
+ .description('Project context management for AI-assisted development')
11
+ .version('3.0.0-alpha.1')
12
+ .option('--transport <type>', 'Transport type: stdio or http', 'stdio')
13
+ .option('--port <number>', 'HTTP port (for http transport)', '3000')
14
+ .option('--db <path>', 'Database path', './memory_journal.db')
15
+ .option('--tool-filter <filter>', 'Tool filter string (e.g., "starter", "core,search")')
16
+ .option('--log-level <level>', 'Log level: debug, info, warning, error', 'info')
17
+ .action(async (options) => {
18
+ // Set log level
19
+ logger.setLevel(options.logLevel);
20
+ logger.info('Starting Memory Journal MCP Server', {
21
+ module: 'CLI',
22
+ transport: options.transport,
23
+ db: options.db,
24
+ });
25
+ try {
26
+ await createServer({
27
+ transport: options.transport,
28
+ port: parseInt(options.port, 10),
29
+ dbPath: options.db,
30
+ toolFilter: options.toolFilter,
31
+ });
32
+ }
33
+ catch (error) {
34
+ logger.error('Failed to start server', {
35
+ module: 'CLI',
36
+ error: error instanceof Error ? error.message : String(error),
37
+ });
38
+ process.exit(1);
39
+ }
40
+ });
41
+ program.parse();
42
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACF,IAAI,CAAC,oBAAoB,CAAC;KAC1B,WAAW,CAAC,wDAAwD,CAAC;KACrE,OAAO,CAAC,eAAe,CAAC;KACxB,MAAM,CAAC,oBAAoB,EAAE,+BAA+B,EAAE,OAAO,CAAC;KACtE,MAAM,CAAC,iBAAiB,EAAE,gCAAgC,EAAE,MAAM,CAAC;KACnE,MAAM,CAAC,aAAa,EAAE,eAAe,EAAE,qBAAqB,CAAC;KAC7D,MAAM,CAAC,wBAAwB,EAAE,qDAAqD,CAAC;KACvF,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,EAAE,MAAM,CAAC;KAC/E,MAAM,CAAC,KAAK,EAAE,OAMd,EAAE,EAAE;IACD,gBAAgB;IAChB,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAkD,CAAC,CAAC;IAE5E,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE;QAC9C,MAAM,EAAE,KAAK;QACb,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,EAAE,EAAE,OAAO,CAAC,EAAE;KACjB,CAAC,CAAC;IAEH,IAAI,CAAC;QACD,MAAM,YAAY,CAAC;YACf,SAAS,EAAE,OAAO,CAAC,SAA6B;YAChD,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAChC,MAAM,EAAE,OAAO,CAAC,EAAE;YAClB,UAAU,EAAE,OAAO,CAAC,UAAU;SACjC,CAAC,CAAC;IACP,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE;YACnC,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAChE,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Server instructions for Memory Journal MCP.
3
+ *
4
+ * These instructions are automatically sent to MCP clients during initialization,
5
+ * providing guidance for AI agents on tool usage.
6
+ */
7
+ export declare const SERVER_INSTRUCTIONS = "# memory-journal-mcp\n\nMemory Journal MCP Server - Persistent project context management for AI-assisted development.\n\n## GitHub Tools\n\nGitHub tools auto-detect repository from the configured GITHUB_REPO_PATH.\n- If owner/repo are detected, they appear in `detectedOwner`/`detectedRepo` in responses\n- If not detected (null), specify `owner` and `repo` parameters explicitly\n\n## Tool Groups\n\n| Group | Tools |\n|-------|-------|\n| journal | create_entry, create_entry_minimal, update_entry, delete_entry |\n| search | search_entries, semantic_search, search_by_date_range |\n| github | get_github_issues, get_github_prs, get_github_issue, get_github_pr, get_github_context |\n| admin | backup_journal, list_backups, restore_backup, rebuild_vector_index |\n";
8
+ //# sourceMappingURL=ServerInstructions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerInstructions.d.ts","sourceRoot":"","sources":["../../src/constants/ServerInstructions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,owBAkB/B,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Server instructions for Memory Journal MCP.
3
+ *
4
+ * These instructions are automatically sent to MCP clients during initialization,
5
+ * providing guidance for AI agents on tool usage.
6
+ */
7
+ export const SERVER_INSTRUCTIONS = `# memory-journal-mcp
8
+
9
+ Memory Journal MCP Server - Persistent project context management for AI-assisted development.
10
+
11
+ ## GitHub Tools
12
+
13
+ GitHub tools auto-detect repository from the configured GITHUB_REPO_PATH.
14
+ - If owner/repo are detected, they appear in \`detectedOwner\`/\`detectedRepo\` in responses
15
+ - If not detected (null), specify \`owner\` and \`repo\` parameters explicitly
16
+
17
+ ## Tool Groups
18
+
19
+ | Group | Tools |
20
+ |-------|-------|
21
+ | journal | create_entry, create_entry_minimal, update_entry, delete_entry |
22
+ | search | search_entries, semantic_search, search_by_date_range |
23
+ | github | get_github_issues, get_github_prs, get_github_issue, get_github_pr, get_github_context |
24
+ | admin | backup_journal, list_backups, restore_backup, rebuild_vector_index |
25
+ `;
26
+ //# sourceMappingURL=ServerInstructions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerInstructions.js","sourceRoot":"","sources":["../../src/constants/ServerInstructions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;CAkBlC,CAAC"}
@@ -0,0 +1,198 @@
1
+ /**
2
+ * Memory Journal MCP Server - SQLite Database Adapter
3
+ *
4
+ * Manages SQLite database with FTS5 full-text search using sql.js.
5
+ * Note: sql.js is pure JavaScript, no native compilation required.
6
+ */
7
+ import { type Database } from 'sql.js';
8
+ import type { JournalEntry, Tag, Relationship, EntryType, SignificanceType, RelationshipType } from '../types/index.js';
9
+ /**
10
+ * Input for creating a new entry
11
+ */
12
+ export interface CreateEntryInput {
13
+ content: string;
14
+ entryType?: EntryType;
15
+ tags?: string[];
16
+ isPersonal?: boolean;
17
+ significanceType?: SignificanceType;
18
+ autoContext?: string;
19
+ projectNumber?: number;
20
+ projectOwner?: string;
21
+ issueNumber?: number;
22
+ issueUrl?: string;
23
+ prNumber?: number;
24
+ prUrl?: string;
25
+ prStatus?: 'draft' | 'open' | 'merged' | 'closed';
26
+ workflowRunId?: number;
27
+ workflowName?: string;
28
+ workflowStatus?: 'queued' | 'in_progress' | 'completed';
29
+ }
30
+ /**
31
+ * SQLite Database Adapter for Memory Journal using sql.js
32
+ */
33
+ export declare class SqliteAdapter {
34
+ private db;
35
+ private readonly dbPath;
36
+ private initialized;
37
+ constructor(dbPath: string);
38
+ /**
39
+ * Initialize the database (must be called before using)
40
+ */
41
+ initialize(): Promise<void>;
42
+ /**
43
+ * Save database to disk
44
+ */
45
+ private save;
46
+ /**
47
+ * Close database connection
48
+ */
49
+ close(): void;
50
+ /**
51
+ * Ensure database is initialized
52
+ */
53
+ private ensureDb;
54
+ /**
55
+ * Create a new journal entry
56
+ */
57
+ createEntry(input: CreateEntryInput): JournalEntry;
58
+ /**
59
+ * Get entry by ID
60
+ */
61
+ getEntryById(id: number): JournalEntry | null;
62
+ /**
63
+ * Get recent entries
64
+ */
65
+ getRecentEntries(limit?: number, isPersonal?: boolean): JournalEntry[];
66
+ /**
67
+ * Update an entry
68
+ */
69
+ updateEntry(id: number, updates: {
70
+ content?: string;
71
+ entryType?: EntryType;
72
+ tags?: string[];
73
+ isPersonal?: boolean;
74
+ }): JournalEntry | null;
75
+ /**
76
+ * Soft delete an entry
77
+ */
78
+ deleteEntry(id: number, permanent?: boolean): boolean;
79
+ /**
80
+ * Full-text search entries (using LIKE for sql.js - FTS5 not supported)
81
+ */
82
+ searchEntries(query: string, options?: {
83
+ limit?: number;
84
+ isPersonal?: boolean;
85
+ projectNumber?: number;
86
+ issueNumber?: number;
87
+ prNumber?: number;
88
+ }): JournalEntry[];
89
+ /**
90
+ * Search by date range
91
+ */
92
+ searchByDateRange(startDate: string, endDate: string, options?: {
93
+ entryType?: EntryType;
94
+ tags?: string[];
95
+ isPersonal?: boolean;
96
+ projectNumber?: number;
97
+ }): JournalEntry[];
98
+ /**
99
+ * Get or create tags and link to entry
100
+ */
101
+ private linkTagsToEntry;
102
+ /**
103
+ * Get tags for an entry
104
+ */
105
+ getTagsForEntry(entryId: number): string[];
106
+ /**
107
+ * List all tags
108
+ */
109
+ listTags(): Tag[];
110
+ /**
111
+ * Link two entries
112
+ */
113
+ linkEntries(fromEntryId: number, toEntryId: number, relationshipType: RelationshipType, description?: string): Relationship;
114
+ /**
115
+ * Get relationships for an entry
116
+ */
117
+ getRelationships(entryId: number): Relationship[];
118
+ /**
119
+ * Get entry statistics
120
+ */
121
+ getStatistics(groupBy?: 'day' | 'week' | 'month'): {
122
+ totalEntries: number;
123
+ entriesByType: Record<string, number>;
124
+ entriesByPeriod: {
125
+ period: string;
126
+ count: number;
127
+ }[];
128
+ };
129
+ /**
130
+ * Get the backups directory path (relative to database location)
131
+ */
132
+ getBackupsDir(): string;
133
+ /**
134
+ * Export database to a backup file
135
+ * @param backupName Optional custom name (default: timestamp-based)
136
+ * @returns Backup file info
137
+ */
138
+ exportToFile(backupName?: string): {
139
+ filename: string;
140
+ path: string;
141
+ sizeBytes: number;
142
+ };
143
+ /**
144
+ * List all available backup files
145
+ * @returns Array of backup file information
146
+ */
147
+ listBackups(): {
148
+ filename: string;
149
+ path: string;
150
+ sizeBytes: number;
151
+ createdAt: string;
152
+ }[];
153
+ /**
154
+ * Restore database from a backup file
155
+ * @param filename Backup filename to restore from
156
+ * @returns Statistics about the restore operation
157
+ */
158
+ restoreFromFile(filename: string): Promise<{
159
+ restoredFrom: string;
160
+ previousEntryCount: number;
161
+ newEntryCount: number;
162
+ }>;
163
+ /**
164
+ * Get database health status for diagnostics
165
+ */
166
+ getHealthStatus(): {
167
+ database: {
168
+ path: string;
169
+ sizeBytes: number;
170
+ entryCount: number;
171
+ deletedEntryCount: number;
172
+ relationshipCount: number;
173
+ tagCount: number;
174
+ };
175
+ backups: {
176
+ directory: string;
177
+ count: number;
178
+ lastBackup: {
179
+ filename: string;
180
+ createdAt: string;
181
+ sizeBytes: number;
182
+ } | null;
183
+ };
184
+ };
185
+ /**
186
+ * Convert columns and values to object
187
+ */
188
+ private rowToObject;
189
+ /**
190
+ * Convert database row to JournalEntry
191
+ */
192
+ private rowToEntry;
193
+ /**
194
+ * Get raw database for advanced operations
195
+ */
196
+ getRawDb(): Database;
197
+ }
198
+ //# sourceMappingURL=SqliteAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SqliteAdapter.d.ts","sourceRoot":"","sources":["../../src/database/SqliteAdapter.ts"],"names":[],"mappings":"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"}