simple-memory-mcp 1.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 (247) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +742 -0
  3. package/dist/cli/arg-parser.d.ts +9 -0
  4. package/dist/cli/arg-parser.d.ts.map +1 -0
  5. package/dist/cli/arg-parser.js +68 -0
  6. package/dist/cli/arg-parser.js.map +1 -0
  7. package/dist/cli/help-generator.d.ts +8 -0
  8. package/dist/cli/help-generator.d.ts.map +1 -0
  9. package/dist/cli/help-generator.js +89 -0
  10. package/dist/cli/help-generator.js.map +1 -0
  11. package/dist/cli/index.d.ts +27 -0
  12. package/dist/cli/index.d.ts.map +1 -0
  13. package/dist/cli/index.js +56 -0
  14. package/dist/cli/index.js.map +1 -0
  15. package/dist/cli/query-builder.d.ts +8 -0
  16. package/dist/cli/query-builder.d.ts.map +1 -0
  17. package/dist/cli/query-builder.js +63 -0
  18. package/dist/cli/query-builder.js.map +1 -0
  19. package/dist/cli/shortcuts-config.d.ts +26 -0
  20. package/dist/cli/shortcuts-config.d.ts.map +1 -0
  21. package/dist/cli/shortcuts-config.js +94 -0
  22. package/dist/cli/shortcuts-config.js.map +1 -0
  23. package/dist/graphql/resolvers.d.ts +101 -0
  24. package/dist/graphql/resolvers.d.ts.map +1 -0
  25. package/dist/graphql/resolvers.js +98 -0
  26. package/dist/graphql/resolvers.js.map +1 -0
  27. package/dist/graphql/schema.d.ts +13 -0
  28. package/dist/graphql/schema.d.ts.map +1 -0
  29. package/dist/graphql/schema.js +314 -0
  30. package/dist/graphql/schema.js.map +1 -0
  31. package/dist/index.d.ts +3 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +573 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/services/backup-service.d.ts +57 -0
  36. package/dist/services/backup-service.d.ts.map +1 -0
  37. package/dist/services/backup-service.js +191 -0
  38. package/dist/services/backup-service.js.map +1 -0
  39. package/dist/services/database-optimizer.d.ts +15 -0
  40. package/dist/services/database-optimizer.d.ts.map +1 -0
  41. package/dist/services/database-optimizer.js +45 -0
  42. package/dist/services/database-optimizer.js.map +1 -0
  43. package/dist/services/memory-service.d.ts +126 -0
  44. package/dist/services/memory-service.d.ts.map +1 -0
  45. package/dist/services/memory-service.js +862 -0
  46. package/dist/services/memory-service.js.map +1 -0
  47. package/dist/services/migrations.d.ts +17 -0
  48. package/dist/services/migrations.d.ts.map +1 -0
  49. package/dist/services/migrations.js +273 -0
  50. package/dist/services/migrations.js.map +1 -0
  51. package/dist/tests/backup-export-test.d.ts +2 -0
  52. package/dist/tests/backup-export-test.d.ts.map +1 -0
  53. package/dist/tests/backup-export-test.js +162 -0
  54. package/dist/tests/backup-export-test.js.map +1 -0
  55. package/dist/tests/backup-test.d.ts +14 -0
  56. package/dist/tests/backup-test.d.ts.map +1 -0
  57. package/dist/tests/backup-test.js +209 -0
  58. package/dist/tests/backup-test.js.map +1 -0
  59. package/dist/tests/export-import-test.d.ts +15 -0
  60. package/dist/tests/export-import-test.d.ts.map +1 -0
  61. package/dist/tests/export-import-test.js +227 -0
  62. package/dist/tests/export-import-test.js.map +1 -0
  63. package/dist/tests/graphql-comprehensive-test.d.ts +6 -0
  64. package/dist/tests/graphql-comprehensive-test.d.ts.map +1 -0
  65. package/dist/tests/graphql-comprehensive-test.js +342 -0
  66. package/dist/tests/graphql-comprehensive-test.js.map +1 -0
  67. package/dist/tests/graphql-performance-test.d.ts +6 -0
  68. package/dist/tests/graphql-performance-test.d.ts.map +1 -0
  69. package/dist/tests/graphql-performance-test.js +141 -0
  70. package/dist/tests/graphql-performance-test.js.map +1 -0
  71. package/dist/tests/graphql-test.d.ts +5 -0
  72. package/dist/tests/graphql-test.d.ts.map +1 -0
  73. package/dist/tests/graphql-test.js +47 -0
  74. package/dist/tests/graphql-test.js.map +1 -0
  75. package/dist/tests/memory-server-tests.d.ts +7 -0
  76. package/dist/tests/memory-server-tests.d.ts.map +1 -0
  77. package/dist/tests/memory-server-tests.js +466 -0
  78. package/dist/tests/memory-server-tests.js.map +1 -0
  79. package/dist/tests/migration-test.d.ts +2 -0
  80. package/dist/tests/migration-test.d.ts.map +1 -0
  81. package/dist/tests/migration-test.js +270 -0
  82. package/dist/tests/migration-test.js.map +1 -0
  83. package/dist/tests/performance-benchmark.d.ts +7 -0
  84. package/dist/tests/performance-benchmark.d.ts.map +1 -0
  85. package/dist/tests/performance-benchmark.js +234 -0
  86. package/dist/tests/performance-benchmark.js.map +1 -0
  87. package/dist/tests/performance-test.d.ts +3 -0
  88. package/dist/tests/performance-test.d.ts.map +1 -0
  89. package/dist/tests/performance-test.js +61 -0
  90. package/dist/tests/performance-test.js.map +1 -0
  91. package/dist/tests/time-range-test.d.ts +7 -0
  92. package/dist/tests/time-range-test.d.ts.map +1 -0
  93. package/dist/tests/time-range-test.js +169 -0
  94. package/dist/tests/time-range-test.js.map +1 -0
  95. package/dist/tools/delete-memory/cli-parser.d.ts +2 -0
  96. package/dist/tools/delete-memory/cli-parser.d.ts.map +1 -0
  97. package/dist/tools/delete-memory/cli-parser.js +13 -0
  98. package/dist/tools/delete-memory/cli-parser.js.map +1 -0
  99. package/dist/tools/delete-memory/executor.d.ts +13 -0
  100. package/dist/tools/delete-memory/executor.d.ts.map +1 -0
  101. package/dist/tools/delete-memory/executor.js +40 -0
  102. package/dist/tools/delete-memory/executor.js.map +1 -0
  103. package/dist/tools/delete-memory/index.d.ts +3 -0
  104. package/dist/tools/delete-memory/index.d.ts.map +1 -0
  105. package/dist/tools/delete-memory/index.js +24 -0
  106. package/dist/tools/delete-memory/index.js.map +1 -0
  107. package/dist/tools/export-memory/cli-parser.d.ts +2 -0
  108. package/dist/tools/export-memory/cli-parser.d.ts.map +1 -0
  109. package/dist/tools/export-memory/cli-parser.js +34 -0
  110. package/dist/tools/export-memory/cli-parser.js.map +1 -0
  111. package/dist/tools/export-memory/executor.d.ts +10 -0
  112. package/dist/tools/export-memory/executor.d.ts.map +1 -0
  113. package/dist/tools/export-memory/executor.js +41 -0
  114. package/dist/tools/export-memory/executor.js.map +1 -0
  115. package/dist/tools/export-memory/index.d.ts +4 -0
  116. package/dist/tools/export-memory/index.d.ts.map +1 -0
  117. package/dist/tools/export-memory/index.js +99 -0
  118. package/dist/tools/export-memory/index.js.map +1 -0
  119. package/dist/tools/import-memory/cli-parser.d.ts +2 -0
  120. package/dist/tools/import-memory/cli-parser.d.ts.map +1 -0
  121. package/dist/tools/import-memory/cli-parser.js +25 -0
  122. package/dist/tools/import-memory/cli-parser.js.map +1 -0
  123. package/dist/tools/import-memory/executor.d.ts +8 -0
  124. package/dist/tools/import-memory/executor.d.ts.map +1 -0
  125. package/dist/tools/import-memory/executor.js +31 -0
  126. package/dist/tools/import-memory/executor.js.map +1 -0
  127. package/dist/tools/import-memory/index.d.ts +4 -0
  128. package/dist/tools/import-memory/index.d.ts.map +1 -0
  129. package/dist/tools/import-memory/index.js +70 -0
  130. package/dist/tools/import-memory/index.js.map +1 -0
  131. package/dist/tools/index.d.ts +14 -0
  132. package/dist/tools/index.d.ts.map +1 -0
  133. package/dist/tools/index.js +48 -0
  134. package/dist/tools/index.js.map +1 -0
  135. package/dist/tools/memory-graphql/cli-parser.d.ts +6 -0
  136. package/dist/tools/memory-graphql/cli-parser.d.ts.map +1 -0
  137. package/dist/tools/memory-graphql/cli-parser.js +24 -0
  138. package/dist/tools/memory-graphql/cli-parser.js.map +1 -0
  139. package/dist/tools/memory-graphql/executor.d.ts +18 -0
  140. package/dist/tools/memory-graphql/executor.d.ts.map +1 -0
  141. package/dist/tools/memory-graphql/executor.js +53 -0
  142. package/dist/tools/memory-graphql/executor.js.map +1 -0
  143. package/dist/tools/memory-graphql/index.d.ts +3 -0
  144. package/dist/tools/memory-graphql/index.d.ts.map +1 -0
  145. package/dist/tools/memory-graphql/index.js +73 -0
  146. package/dist/tools/memory-graphql/index.js.map +1 -0
  147. package/dist/tools/memory-stats/cli-parser.d.ts +2 -0
  148. package/dist/tools/memory-stats/cli-parser.d.ts.map +1 -0
  149. package/dist/tools/memory-stats/cli-parser.js +8 -0
  150. package/dist/tools/memory-stats/cli-parser.js.map +1 -0
  151. package/dist/tools/memory-stats/executor.d.ts +4 -0
  152. package/dist/tools/memory-stats/executor.d.ts.map +1 -0
  153. package/dist/tools/memory-stats/executor.js +4 -0
  154. package/dist/tools/memory-stats/executor.js.map +1 -0
  155. package/dist/tools/memory-stats/index.d.ts +3 -0
  156. package/dist/tools/memory-stats/index.d.ts.map +1 -0
  157. package/dist/tools/memory-stats/index.js +15 -0
  158. package/dist/tools/memory-stats/index.js.map +1 -0
  159. package/dist/tools/search-memory/cli-parser.d.ts +2 -0
  160. package/dist/tools/search-memory/cli-parser.d.ts.map +1 -0
  161. package/dist/tools/search-memory/cli-parser.js +56 -0
  162. package/dist/tools/search-memory/cli-parser.js.map +1 -0
  163. package/dist/tools/search-memory/executor.d.ts +36 -0
  164. package/dist/tools/search-memory/executor.d.ts.map +1 -0
  165. package/dist/tools/search-memory/executor.js +83 -0
  166. package/dist/tools/search-memory/executor.js.map +1 -0
  167. package/dist/tools/search-memory/index.d.ts +3 -0
  168. package/dist/tools/search-memory/index.d.ts.map +1 -0
  169. package/dist/tools/search-memory/index.js +89 -0
  170. package/dist/tools/search-memory/index.js.map +1 -0
  171. package/dist/tools/store-memory/cli-parser.d.ts +2 -0
  172. package/dist/tools/store-memory/cli-parser.d.ts.map +1 -0
  173. package/dist/tools/store-memory/cli-parser.js +21 -0
  174. package/dist/tools/store-memory/cli-parser.js.map +1 -0
  175. package/dist/tools/store-memory/executor.d.ts +16 -0
  176. package/dist/tools/store-memory/executor.d.ts.map +1 -0
  177. package/dist/tools/store-memory/executor.js +100 -0
  178. package/dist/tools/store-memory/executor.js.map +1 -0
  179. package/dist/tools/store-memory/index.d.ts +3 -0
  180. package/dist/tools/store-memory/index.d.ts.map +1 -0
  181. package/dist/tools/store-memory/index.js +68 -0
  182. package/dist/tools/store-memory/index.js.map +1 -0
  183. package/dist/tools/sync-memory/cli-parser.d.ts +1 -0
  184. package/dist/tools/sync-memory/cli-parser.d.ts.map +1 -0
  185. package/dist/tools/sync-memory/cli-parser.js +2 -0
  186. package/dist/tools/sync-memory/cli-parser.js.map +1 -0
  187. package/dist/tools/sync-memory/executor.d.ts +1 -0
  188. package/dist/tools/sync-memory/executor.d.ts.map +1 -0
  189. package/dist/tools/sync-memory/executor.js +2 -0
  190. package/dist/tools/sync-memory/executor.js.map +1 -0
  191. package/dist/tools/sync-memory/index.d.ts +1 -0
  192. package/dist/tools/sync-memory/index.d.ts.map +1 -0
  193. package/dist/tools/sync-memory/index.js +2 -0
  194. package/dist/tools/sync-memory/index.js.map +1 -0
  195. package/dist/tools/update-memory/cli-parser.d.ts +2 -0
  196. package/dist/tools/update-memory/cli-parser.d.ts.map +1 -0
  197. package/dist/tools/update-memory/cli-parser.js +17 -0
  198. package/dist/tools/update-memory/cli-parser.js.map +1 -0
  199. package/dist/tools/update-memory/executor.d.ts +16 -0
  200. package/dist/tools/update-memory/executor.d.ts.map +1 -0
  201. package/dist/tools/update-memory/executor.js +59 -0
  202. package/dist/tools/update-memory/executor.js.map +1 -0
  203. package/dist/tools/update-memory/index.d.ts +3 -0
  204. package/dist/tools/update-memory/index.d.ts.map +1 -0
  205. package/dist/tools/update-memory/index.js +30 -0
  206. package/dist/tools/update-memory/index.js.map +1 -0
  207. package/dist/transports/streamable-http.d.ts +38 -0
  208. package/dist/transports/streamable-http.d.ts.map +1 -0
  209. package/dist/transports/streamable-http.js +209 -0
  210. package/dist/transports/streamable-http.js.map +1 -0
  211. package/dist/types/tools.d.ts +79 -0
  212. package/dist/types/tools.d.ts.map +1 -0
  213. package/dist/types/tools.js +3 -0
  214. package/dist/types/tools.js.map +1 -0
  215. package/dist/utils/cli-parser.d.ts +12 -0
  216. package/dist/utils/cli-parser.d.ts.map +1 -0
  217. package/dist/utils/cli-parser.js +43 -0
  218. package/dist/utils/cli-parser.js.map +1 -0
  219. package/dist/utils/config.d.ts +95 -0
  220. package/dist/utils/config.d.ts.map +1 -0
  221. package/dist/utils/config.js +176 -0
  222. package/dist/utils/config.js.map +1 -0
  223. package/dist/utils/db-integrity-check.d.ts +22 -0
  224. package/dist/utils/db-integrity-check.d.ts.map +1 -0
  225. package/dist/utils/db-integrity-check.js +69 -0
  226. package/dist/utils/db-integrity-check.js.map +1 -0
  227. package/dist/utils/debug.d.ts +25 -0
  228. package/dist/utils/debug.d.ts.map +1 -0
  229. package/dist/utils/debug.js +67 -0
  230. package/dist/utils/debug.js.map +1 -0
  231. package/dist/utils/help-generator.d.ts +18 -0
  232. package/dist/utils/help-generator.d.ts.map +1 -0
  233. package/dist/utils/help-generator.js +81 -0
  234. package/dist/utils/help-generator.js.map +1 -0
  235. package/dist/utils/json-parser.d.ts +12 -0
  236. package/dist/utils/json-parser.d.ts.map +1 -0
  237. package/dist/utils/json-parser.js +52 -0
  238. package/dist/utils/json-parser.js.map +1 -0
  239. package/dist/utils/mcp-config.d.ts +12 -0
  240. package/dist/utils/mcp-config.d.ts.map +1 -0
  241. package/dist/utils/mcp-config.js +64 -0
  242. package/dist/utils/mcp-config.js.map +1 -0
  243. package/dist/web-server.d.ts +3 -0
  244. package/dist/web-server.d.ts.map +1 -0
  245. package/dist/web-server.js +265 -0
  246. package/dist/web-server.js.map +1 -0
  247. package/package.json +75 -0
package/dist/index.js ADDED
@@ -0,0 +1,573 @@
1
+ #!/usr/bin/env node
2
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
3
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
+ import { CallToolRequestSchema, ListToolsRequestSchema, GetPromptRequestSchema, ListPromptsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
5
+ import { config } from 'dotenv';
6
+ config();
7
+ import { existsSync } from 'fs';
8
+ import { resolve } from 'path';
9
+ import { MemoryService } from './services/memory-service.js';
10
+ import { toolRegistry } from './tools/index.js';
11
+ import { debugLog } from './utils/debug.js';
12
+ import { checkDatabaseIntegrity, rebuildHashIndex } from './utils/db-integrity-check.js';
13
+ import { getDatabasePath, ensureConfigDir } from './utils/config.js';
14
+ import { StreamableHTTPServerTransport } from './transports/streamable-http.js';
15
+ import { execute as executeGraphQL } from './tools/memory-graphql/executor.js';
16
+ // Initialize server
17
+ const server = new Server({
18
+ name: 'simple-memory-mcp',
19
+ version: '1.0.0',
20
+ }, {
21
+ capabilities: {
22
+ tools: {},
23
+ prompts: {},
24
+ },
25
+ });
26
+ // Initialize services
27
+ function initializeServices() {
28
+ try {
29
+ const { path: dbPath, isDefault } = getDatabasePath();
30
+ const resolvedPath = resolve(dbPath);
31
+ const dbExists = existsSync(resolvedPath);
32
+ // Ensure config directory exists for default path
33
+ if (isDefault) {
34
+ ensureConfigDir();
35
+ }
36
+ // Log where the database is (helpful for debugging)
37
+ if (!dbExists) {
38
+ if (isDefault) {
39
+ debugLog(`Creating database at default location: ${resolvedPath}`);
40
+ debugLog(`To use a custom location, set MEMORY_DB in your MCP config.`);
41
+ }
42
+ else {
43
+ debugLog(`Creating NEW database at: ${resolvedPath}`);
44
+ }
45
+ }
46
+ const memoryService = new MemoryService(dbPath);
47
+ memoryService.initialize();
48
+ debugLog('Memory service initialized at:', resolvedPath);
49
+ return memoryService;
50
+ }
51
+ catch (error) {
52
+ // Fatal error - this should always show
53
+ console.error('Failed to initialize services:', error);
54
+ process.exit(1);
55
+ }
56
+ }
57
+ // Global references (initialized in main())
58
+ let memoryService;
59
+ let toolContext;
60
+ // List available tools
61
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
62
+ return {
63
+ tools: toolRegistry.getDefinitions(),
64
+ };
65
+ });
66
+ // Handle tool calls
67
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
68
+ const { name, arguments: args } = request.params;
69
+ debugLog('Tool call:', name, 'with args:', args);
70
+ try {
71
+ const result = await toolRegistry.handle(name, args || {}, toolContext);
72
+ return {
73
+ content: [
74
+ {
75
+ type: 'text',
76
+ text: typeof result === 'string' ? result : JSON.stringify(result, null, 2),
77
+ },
78
+ ],
79
+ };
80
+ }
81
+ catch (error) {
82
+ debugLog('Tool error:', error);
83
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
84
+ return {
85
+ content: [
86
+ {
87
+ type: 'text',
88
+ text: `Error: ${errorMessage}`,
89
+ },
90
+ ],
91
+ isError: true,
92
+ };
93
+ }
94
+ });
95
+ // List available prompts
96
+ server.setRequestHandler(ListPromptsRequestSchema, async () => {
97
+ return {
98
+ prompts: [],
99
+ };
100
+ });
101
+ // Handle prompt requests
102
+ server.setRequestHandler(GetPromptRequestSchema, async (request) => {
103
+ const { name, arguments: args } = request.params;
104
+ return {
105
+ messages: [
106
+ {
107
+ role: 'user',
108
+ content: {
109
+ type: 'text',
110
+ text: `Simple Memory MCP Server does not provide prompts. Use tools: ${toolRegistry.getToolNames().join(', ')}`,
111
+ },
112
+ },
113
+ ],
114
+ };
115
+ });
116
+ // =============================================================================
117
+ // CLI SHORTCUTS - Simple commands that generate GraphQL queries
118
+ // =============================================================================
119
+ // Helper to escape GraphQL strings
120
+ function escapeGraphQL(str) {
121
+ return str
122
+ .replace(/\\/g, '\\\\')
123
+ .replace(/"/g, '\\"')
124
+ .replace(/\n/g, '\\n')
125
+ .replace(/\r/g, '\\r')
126
+ .replace(/\t/g, '\\t');
127
+ }
128
+ // Helper to process tags for GraphQL
129
+ function processTagsForGraphQL(tags) {
130
+ return tags.split(',').map((t) => `"${t.trim()}"`).join(', ');
131
+ }
132
+ // Simple shortcut definitions - maps commands to GraphQL query builders
133
+ const CLI_SHORTCUTS = {
134
+ search: (args) => {
135
+ const limit = args.limit || 10;
136
+ const parts = [`limit: ${limit}`];
137
+ if (args.query)
138
+ parts.push(`query: "${escapeGraphQL(args.query)}"`);
139
+ if (args.tags) {
140
+ parts.push(`tags: [${processTagsForGraphQL(args.tags)}]`);
141
+ }
142
+ if (args.daysAgo)
143
+ parts.push(`daysAgo: ${args.daysAgo}`);
144
+ if (args.summary)
145
+ parts.push(`summaryOnly: true`);
146
+ const fields = args.summary
147
+ ? 'hash title preview tags createdAt'
148
+ : 'hash title content tags createdAt';
149
+ return `{ memories(${parts.join(', ')}) { ${fields} } }`;
150
+ },
151
+ store: (args) => {
152
+ if (!args.content)
153
+ throw new Error('--content is required');
154
+ const tagsArg = args.tags ? `, tags: [${processTagsForGraphQL(args.tags)}]` : '';
155
+ return `mutation { store(content: "${escapeGraphQL(args.content)}"${tagsArg}) { success hash } }`;
156
+ },
157
+ update: (args) => {
158
+ if (!args.hash)
159
+ throw new Error('--hash is required');
160
+ if (!args.content)
161
+ throw new Error('--content is required');
162
+ const tagsArg = args.tags ? `, tags: [${processTagsForGraphQL(args.tags)}]` : '';
163
+ return `mutation { update(hash: "${args.hash}", content: "${escapeGraphQL(args.content)}"${tagsArg}) { success newHash } }`;
164
+ },
165
+ get: (args) => {
166
+ if (!args.hash)
167
+ throw new Error('--hash is required');
168
+ return `{ memory(hash: "${args.hash}") { hash content tags createdAt } }`;
169
+ },
170
+ related: (args) => {
171
+ if (!args.hash)
172
+ throw new Error('--hash is required');
173
+ const limit = args.limit || 10;
174
+ return `{ related(hash: "${args.hash}", limit: ${limit}) { hash title tags } }`;
175
+ },
176
+ delete: (args) => {
177
+ if (args.hash) {
178
+ return `mutation { delete(hash: "${args.hash}") { success deletedCount } }`;
179
+ }
180
+ else if (args.tag) {
181
+ return `mutation { delete(tag: "${args.tag}") { success deletedCount } }`;
182
+ }
183
+ throw new Error('Either --hash or --tag is required');
184
+ },
185
+ stats: () => {
186
+ return `{ stats { version totalMemories totalRelationships dbSize dbPath schemaVersion configPath backupEnabled backupPath backupCount lastBackupAge nextBackupIn mcpConfigPaths { name path exists } } }`;
187
+ },
188
+ };
189
+ // Parse CLI args helper - simple argument parser
190
+ function parseCliArgs(args) {
191
+ const result = {};
192
+ for (let i = 0; i < args.length; i++) {
193
+ const arg = args[i];
194
+ if (arg === '--help' || arg === '-h') {
195
+ result.help = true;
196
+ continue;
197
+ }
198
+ if (arg.startsWith('--')) {
199
+ const key = arg.slice(2);
200
+ const nextArg = args[i + 1];
201
+ // Check if next arg exists and is not another flag
202
+ if (nextArg && !nextArg.startsWith('--')) {
203
+ result[key] = nextArg;
204
+ i++; // skip next arg
205
+ }
206
+ else {
207
+ // Boolean flag (no value or next arg is another flag)
208
+ result[key] = true;
209
+ }
210
+ }
211
+ }
212
+ return result;
213
+ }
214
+ // Show general help
215
+ function showHelp() {
216
+ console.log(`
217
+ simple-memory - Persistent memory storage for LLMs
218
+
219
+ USAGE:
220
+ simple-memory <command> [options]
221
+
222
+ QUICK COMMANDS:
223
+ search Search memories by content or tags
224
+ store Store a new memory
225
+ update Update an existing memory
226
+ get Get a memory by hash
227
+ related Find related memories
228
+ delete Delete a memory
229
+ stats Show database statistics
230
+
231
+ CONFIGURATION:
232
+ config Show or initialize config file
233
+
234
+ ADVANCED:
235
+ graphql Execute raw GraphQL query
236
+ export-memory Export memories to JSON
237
+ import-memory Import memories from JSON
238
+ check-integrity Check database integrity
239
+ rebuild-index Rebuild hash index
240
+
241
+ Run "simple-memory <command> --help" for command-specific options.
242
+
243
+ EXAMPLES:
244
+ simple-memory search --query "typescript" --limit 5
245
+ simple-memory store --content "Remember this" --tags "note,important"
246
+ simple-memory stats
247
+ simple-memory get --hash "abc123..."
248
+ simple-memory delete --tag "temporary"
249
+ `);
250
+ }
251
+ // Show command-specific help
252
+ function showCommandHelp(command) {
253
+ const help = {
254
+ search: `
255
+ simple-memory search - Search memories
256
+
257
+ OPTIONS:
258
+ --query <text> Full-text search query
259
+ --tags <tags> Filter by tags (comma-separated)
260
+ --limit <n> Max results [default: 10]
261
+ --daysAgo <n> Filter to last N days
262
+ --summary Return summaries only (faster)
263
+ --verbose Show generated GraphQL query
264
+
265
+ EXAMPLES:
266
+ simple-memory search --query "typescript"
267
+ simple-memory search --tags "project,work" --limit 20
268
+ simple-memory search --query "bug" --daysAgo 7
269
+ simple-memory search --query "api" --verbose
270
+ `,
271
+ store: `
272
+ simple-memory store - Store a new memory
273
+
274
+ OPTIONS:
275
+ --content <text> Content to store (required)
276
+ --tags <tags> Tags (comma-separated)
277
+ --verbose Show generated GraphQL query
278
+
279
+ EXAMPLES:
280
+ simple-memory store --content "Remember this note"
281
+ simple-memory store --content "API key: xyz" --tags "credentials,api"
282
+ `,
283
+ update: `
284
+ simple-memory update - Update existing memory
285
+
286
+ OPTIONS:
287
+ --hash <hash> Memory hash (required)
288
+ --content <text> New content (required)
289
+ --tags <tags> New tags (replaces existing)
290
+
291
+ EXAMPLES:
292
+ simple-memory update --hash "abc123" --content "Updated content"
293
+ `,
294
+ get: `
295
+ simple-memory get - Get memory by hash
296
+
297
+ OPTIONS:
298
+ --hash <hash> Memory hash (required)
299
+
300
+ EXAMPLES:
301
+ simple-memory get --hash "abc123..."
302
+ `,
303
+ related: `
304
+ simple-memory related - Find related memories
305
+
306
+ OPTIONS:
307
+ --hash <hash> Memory hash (required)
308
+ --limit <n> Max results [default: 10]
309
+
310
+ EXAMPLES:
311
+ simple-memory related --hash "abc123..."
312
+ `,
313
+ delete: `
314
+ simple-memory delete - Delete memory
315
+
316
+ OPTIONS:
317
+ --hash <hash> Delete specific memory
318
+ --tag <tag> Delete all with this tag (use ONE only)
319
+
320
+ EXAMPLES:
321
+ simple-memory delete --hash "abc123..."
322
+ simple-memory delete --tag "temporary"
323
+ `,
324
+ stats: `
325
+ simple-memory stats - Show database statistics
326
+
327
+ No options needed.
328
+
329
+ EXAMPLES:
330
+ simple-memory stats
331
+ `,
332
+ graphql: `
333
+ simple-memory graphql - Execute raw GraphQL query
334
+
335
+ OPTIONS:
336
+ --query <graphql> GraphQL query or mutation (required)
337
+
338
+ EXAMPLES:
339
+ simple-memory graphql --query '{ stats { totalMemories } }'
340
+ simple-memory graphql --query '{ memories(limit: 5) { hash title tags } }'
341
+ simple-memory graphql --query 'mutation { store(content: "text") { hash } }'
342
+ `,
343
+ config: `
344
+ simple-memory config - Show or initialize configuration
345
+
346
+ OPTIONS:
347
+ --init Create default config.json with examples
348
+ --show Show current config (default)
349
+ --path Show path to config file only
350
+
351
+ EXAMPLES:
352
+ simple-memory config # Show current configuration
353
+ simple-memory config --init # Create config.json with examples
354
+ simple-memory config --path # Print config file path
355
+
356
+ CONFIG FILE:
357
+ Location: ~/.simple-memory/config.json
358
+
359
+ Settings in config.json apply to ALL clients (CLI, MCP, etc.)
360
+ Environment variables can override for specific contexts.
361
+ `,
362
+ };
363
+ console.log(help[command] || 'No help available for this command.');
364
+ }
365
+ // Execute GraphQL query helper
366
+ async function executeGraphQLQuery(query) {
367
+ const result = await executeGraphQL({ query }, toolContext);
368
+ return result;
369
+ }
370
+ // Start server or run CLI
371
+ async function main() {
372
+ const args = process.argv.slice(2);
373
+ // Check for --http or --both flags
374
+ const useHttp = args.includes('--http') || args.includes('--both');
375
+ const useBoth = args.includes('--both');
376
+ const useStdio = !args.includes('--http') || useBoth;
377
+ // Remove transport flags from args
378
+ const cliArgs = args.filter(arg => arg !== '--http' && arg !== '--both');
379
+ // Suppress debug output in CLI mode for cleaner output (must be set before service init)
380
+ // But respect explicit MEMORY_DEBUG=true if user wants debug in CLI
381
+ const isCliMode = cliArgs.length > 0;
382
+ if (isCliMode && process.env.MEMORY_DEBUG !== 'true') {
383
+ process.env.MEMORY_DEBUG = 'false';
384
+ }
385
+ // Initialize services (backup auto-configures from env vars)
386
+ memoryService = initializeServices();
387
+ // Create tool context
388
+ toolContext = {
389
+ memoryService,
390
+ config: {}
391
+ };
392
+ if (cliArgs.length > 0) {
393
+ // CLI mode - check for help first
394
+ if (cliArgs[0] === '--help' || cliArgs[0] === '-h') {
395
+ showHelp();
396
+ process.exit(0);
397
+ }
398
+ const command = cliArgs[0];
399
+ // Handle shortcuts
400
+ if (command in CLI_SHORTCUTS) {
401
+ const parsedArgs = parseCliArgs(cliArgs.slice(1));
402
+ if (parsedArgs.help) {
403
+ showCommandHelp(command);
404
+ process.exit(0);
405
+ }
406
+ try {
407
+ const query = CLI_SHORTCUTS[command](parsedArgs);
408
+ // Show generated GraphQL if --verbose flag is set (helps users learn GraphQL)
409
+ if (parsedArgs.verbose) {
410
+ console.log('Generated GraphQL:', query);
411
+ console.log('---');
412
+ }
413
+ const result = await executeGraphQLQuery(query);
414
+ console.log(JSON.stringify(result, null, 2));
415
+ process.exit(0);
416
+ }
417
+ catch (error) {
418
+ console.error(`Error: ${error instanceof Error ? error.message : error}`);
419
+ console.log(`\nRun "simple-memory ${command} --help" for usage.`);
420
+ process.exit(1);
421
+ }
422
+ }
423
+ // Handle raw GraphQL
424
+ if (command === 'graphql') {
425
+ const parsedArgs = parseCliArgs(cliArgs.slice(1));
426
+ if (parsedArgs.help) {
427
+ showCommandHelp('graphql');
428
+ process.exit(0);
429
+ }
430
+ if (!parsedArgs.query) {
431
+ console.error('Error: --query is required');
432
+ console.log('\nRun "simple-memory graphql --help" for usage.');
433
+ process.exit(1);
434
+ }
435
+ const result = await executeGraphQLQuery(parsedArgs.query);
436
+ console.log(JSON.stringify(result, null, 2));
437
+ process.exit(0);
438
+ }
439
+ // Handle config command
440
+ if (command === 'config') {
441
+ const parsedArgs = parseCliArgs(cliArgs.slice(1));
442
+ if (parsedArgs.help) {
443
+ showCommandHelp('config');
444
+ process.exit(0);
445
+ }
446
+ const { getConfigPath, loadConfigFile, initConfigFile, getConfig } = await import('./utils/config.js');
447
+ const configPath = getConfigPath();
448
+ if (parsedArgs.path) {
449
+ console.log(configPath);
450
+ process.exit(0);
451
+ }
452
+ if (parsedArgs.init) {
453
+ const { path, created } = initConfigFile();
454
+ if (created) {
455
+ console.log(`✅ Created config file: ${path}`);
456
+ console.log('\nEdit this file to configure database, backups, and other settings.');
457
+ console.log('Settings apply to all clients (CLI, MCP, etc.)');
458
+ }
459
+ else {
460
+ console.log(`Config file already exists: ${path}`);
461
+ }
462
+ process.exit(0);
463
+ }
464
+ // Default: show current config
465
+ console.log(`Config file: ${configPath}\n`);
466
+ const config = getConfig();
467
+ console.log('Current configuration:');
468
+ console.log(JSON.stringify(config, null, 2));
469
+ process.exit(0);
470
+ }
471
+ // CLI mode - check for integrity commands
472
+ if (command === 'check-integrity') {
473
+ const { path: dbPath } = getDatabasePath();
474
+ console.log(`Database: ${dbPath}\n`);
475
+ console.log('Running database integrity check...\n');
476
+ const result = checkDatabaseIntegrity(dbPath);
477
+ console.log('=== Integrity Check Results ===');
478
+ console.log(`Total memories: ${result.totalMemories}`);
479
+ console.log(`Corrupted hashes: ${result.corruptedHashes}`);
480
+ console.log(`Orphaned hash indexes: ${result.orphanedHashIndexes}`);
481
+ console.log(`Missing hash indexes: ${result.missingHashIndexes}`);
482
+ if (result.orphanedMemories.length > 0) {
483
+ console.log('\n⚠️ Issues found:');
484
+ result.orphanedMemories.forEach(mem => {
485
+ console.log(` ID ${mem.id}: ${mem.hash}`);
486
+ console.log(` Content: ${mem.content}`);
487
+ });
488
+ console.log('\nRun "simple-memory rebuild-index" to rebuild the hash index');
489
+ }
490
+ else {
491
+ console.log('\n✓ No integrity issues detected');
492
+ }
493
+ process.exit(result.orphanedMemories.length > 0 ? 1 : 0);
494
+ }
495
+ if (command === 'rebuild-index') {
496
+ const { path: dbPath } = getDatabasePath();
497
+ console.log(`Database: ${dbPath}\n`);
498
+ rebuildHashIndex(dbPath);
499
+ process.exit(0);
500
+ }
501
+ // Handle export/import (keep these as-is from tool registry)
502
+ if (command === 'export-memory' || command === 'import-memory') {
503
+ try {
504
+ const parser = toolRegistry.getCliParser(command);
505
+ const parsedArgs = parser ? parser(cliArgs.slice(1)) : {};
506
+ const result = await toolRegistry.handle(command, parsedArgs, toolContext);
507
+ console.log(JSON.stringify(result, null, 2));
508
+ process.exit(0);
509
+ }
510
+ catch (error) {
511
+ console.error('Error:', error instanceof Error ? error.message : error);
512
+ process.exit(1);
513
+ }
514
+ }
515
+ // Unknown command
516
+ console.error(`Unknown command: ${command}`);
517
+ showHelp();
518
+ process.exit(1);
519
+ }
520
+ else {
521
+ // MCP mode - connect transport(s)
522
+ if (useHttp) {
523
+ // HTTP transport mode
524
+ const httpPort = parseInt(process.env.MCP_PORT || '3000', 10);
525
+ const httpHost = process.env.MCP_HOST || 'localhost';
526
+ const httpTransport = new StreamableHTTPServerTransport({
527
+ port: httpPort,
528
+ host: httpHost
529
+ });
530
+ try {
531
+ await server.connect(httpTransport);
532
+ console.log(`✅ Simple Memory MCP server running on HTTP: http://${httpHost}:${httpPort}/mcp`);
533
+ }
534
+ catch (error) {
535
+ console.error('Failed to start HTTP transport:', error instanceof Error ? error.message : error);
536
+ if (error instanceof Error && error.stack) {
537
+ debugLog('Stack trace:', error.stack);
538
+ }
539
+ process.exit(1);
540
+ }
541
+ }
542
+ if (useStdio) {
543
+ // Stdio transport mode (default or hybrid)
544
+ if (useBoth) {
545
+ debugLog('🔌 Hybrid mode: stdio + HTTP');
546
+ // Servers are already connected above in HTTP block
547
+ }
548
+ else {
549
+ const transport = new StdioServerTransport();
550
+ await server.connect(transport);
551
+ debugLog('🔌 Simple Memory MCP server running on stdio');
552
+ }
553
+ }
554
+ }
555
+ }
556
+ // Handle cleanup
557
+ const cleanup = () => {
558
+ if (memoryService) {
559
+ memoryService.close();
560
+ }
561
+ process.exit(0);
562
+ };
563
+ process.on('SIGINT', cleanup);
564
+ process.on('SIGTERM', cleanup);
565
+ process.on('uncaughtException', (error) => {
566
+ console.error('Uncaught exception:', error);
567
+ cleanup();
568
+ });
569
+ main().catch((error) => {
570
+ console.error('Fatal error:', error);
571
+ cleanup();
572
+ });
573
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import type { ExportFormat } from '../types/tools.js';
2
+ export interface BackupConfig {
3
+ backupPath: string;
4
+ autoBackupInterval?: number;
5
+ maxBackups?: number;
6
+ source?: string;
7
+ getBackupData: () => ExportFormat;
8
+ }
9
+ export declare class BackupService {
10
+ private config;
11
+ private lastBackupTime;
12
+ constructor(config: BackupConfig);
13
+ /**
14
+ * Get path to backup metadata file
15
+ */
16
+ private getMetadataPath;
17
+ /**
18
+ * Save backup metadata
19
+ * @returns true if saved successfully, false on error
20
+ */
21
+ private saveMetadata;
22
+ /**
23
+ * Get last backup time from metadata file
24
+ * @returns timestamp in milliseconds, or 0 if no metadata exists
25
+ */
26
+ private getLastBackupTime;
27
+ /**
28
+ * Create a JSON export backup of all memories
29
+ */
30
+ backup(label?: string): string | null;
31
+ /**
32
+ * Check if backup should be created based on throttle interval
33
+ */
34
+ shouldBackup(): boolean;
35
+ /**
36
+ * Backup if enough time has passed since last backup (lazy backup on write)
37
+ */
38
+ backupIfNeeded(): string | null;
39
+ /**
40
+ * Initialize lazy backup mode (creates initial backup if needed)
41
+ * Backups will be created on write operations when interval has passed
42
+ */
43
+ initialize(): void;
44
+ /**
45
+ * Clean up old backups, keeping only the most recent N
46
+ */
47
+ private cleanupOldBackups;
48
+ /**
49
+ * Get count of available backups
50
+ */
51
+ getBackupCount(): number;
52
+ /**
53
+ * Get time since last backup in minutes
54
+ */
55
+ getTimeSinceLastBackup(): number;
56
+ }
57
+ //# sourceMappingURL=backup-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup-service.d.ts","sourceRoot":"","sources":["../../src/services/backup-service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,YAAY,CAAC;CACnC;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,cAAc,CAAa;gBAEvB,MAAM,EAAE,YAAY;IAmBhC;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAcpB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAsBzB;;OAEG;IACH,MAAM,CAAC,KAAK,GAAE,MAAiB,GAAG,MAAM,GAAG,IAAI;IA+B/C;;OAEG;IACH,YAAY,IAAI,OAAO;IAUvB;;OAEG;IACH,cAAc,IAAI,MAAM,GAAG,IAAI;IAO/B;;;OAGG;IACH,UAAU,IAAI,IAAI;IAMlB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAmCzB;;OAEG;IACH,cAAc,IAAI,MAAM;IAcxB;;OAEG;IACH,sBAAsB,IAAI,MAAM;CAIjC"}