@waynesutton/agent-memory 0.0.1

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 (201) hide show
  1. package/.claude/settings.json +9 -0
  2. package/.claude/settings.local.json +7 -0
  3. package/AGENTS.md +113 -0
  4. package/CLAUDE.md +79 -0
  5. package/README.md +1 -0
  6. package/dist/cli/index.d.ts +3 -0
  7. package/dist/cli/index.d.ts.map +1 -0
  8. package/dist/cli/index.js +192 -0
  9. package/dist/cli/index.js.map +1 -0
  10. package/dist/cli/parsers/claude-code.d.ts +3 -0
  11. package/dist/cli/parsers/claude-code.d.ts.map +1 -0
  12. package/dist/cli/parsers/claude-code.js +75 -0
  13. package/dist/cli/parsers/claude-code.js.map +1 -0
  14. package/dist/cli/parsers/codex.d.ts +3 -0
  15. package/dist/cli/parsers/codex.d.ts.map +1 -0
  16. package/dist/cli/parsers/codex.js +42 -0
  17. package/dist/cli/parsers/codex.js.map +1 -0
  18. package/dist/cli/parsers/conductor.d.ts +3 -0
  19. package/dist/cli/parsers/conductor.d.ts.map +1 -0
  20. package/dist/cli/parsers/conductor.js +43 -0
  21. package/dist/cli/parsers/conductor.js.map +1 -0
  22. package/dist/cli/parsers/cursor.d.ts +3 -0
  23. package/dist/cli/parsers/cursor.d.ts.map +1 -0
  24. package/dist/cli/parsers/cursor.js +50 -0
  25. package/dist/cli/parsers/cursor.js.map +1 -0
  26. package/dist/cli/parsers/index.d.ts +12 -0
  27. package/dist/cli/parsers/index.d.ts.map +1 -0
  28. package/dist/cli/parsers/index.js +27 -0
  29. package/dist/cli/parsers/index.js.map +1 -0
  30. package/dist/cli/parsers/opencode.d.ts +3 -0
  31. package/dist/cli/parsers/opencode.d.ts.map +1 -0
  32. package/dist/cli/parsers/opencode.js +72 -0
  33. package/dist/cli/parsers/opencode.js.map +1 -0
  34. package/dist/cli/parsers/parsers.test.d.ts +2 -0
  35. package/dist/cli/parsers/parsers.test.d.ts.map +1 -0
  36. package/dist/cli/parsers/parsers.test.js +151 -0
  37. package/dist/cli/parsers/parsers.test.js.map +1 -0
  38. package/dist/cli/parsers/pi.d.ts +3 -0
  39. package/dist/cli/parsers/pi.d.ts.map +1 -0
  40. package/dist/cli/parsers/pi.js +43 -0
  41. package/dist/cli/parsers/pi.js.map +1 -0
  42. package/dist/cli/parsers/types.d.ts +25 -0
  43. package/dist/cli/parsers/types.d.ts.map +1 -0
  44. package/dist/cli/parsers/types.js +2 -0
  45. package/dist/cli/parsers/types.js.map +1 -0
  46. package/dist/cli/parsers/vscode-copilot.d.ts +3 -0
  47. package/dist/cli/parsers/vscode-copilot.d.ts.map +1 -0
  48. package/dist/cli/parsers/vscode-copilot.js +69 -0
  49. package/dist/cli/parsers/vscode-copilot.js.map +1 -0
  50. package/dist/cli/parsers/zed.d.ts +3 -0
  51. package/dist/cli/parsers/zed.d.ts.map +1 -0
  52. package/dist/cli/parsers/zed.js +43 -0
  53. package/dist/cli/parsers/zed.js.map +1 -0
  54. package/dist/cli/sync.d.ts +21 -0
  55. package/dist/cli/sync.d.ts.map +1 -0
  56. package/dist/cli/sync.js +78 -0
  57. package/dist/cli/sync.js.map +1 -0
  58. package/dist/cli/type-extractor.d.ts +25 -0
  59. package/dist/cli/type-extractor.d.ts.map +1 -0
  60. package/dist/cli/type-extractor.js +254 -0
  61. package/dist/cli/type-extractor.js.map +1 -0
  62. package/dist/cli/type-extractor.test.d.ts +2 -0
  63. package/dist/cli/type-extractor.test.d.ts.map +1 -0
  64. package/dist/cli/type-extractor.test.js +173 -0
  65. package/dist/cli/type-extractor.test.js.map +1 -0
  66. package/dist/client/http.d.ts +44 -0
  67. package/dist/client/http.d.ts.map +1 -0
  68. package/dist/client/http.js +311 -0
  69. package/dist/client/http.js.map +1 -0
  70. package/dist/client/index.d.ts +158 -0
  71. package/dist/client/index.d.ts.map +1 -0
  72. package/dist/client/index.js +256 -0
  73. package/dist/client/index.js.map +1 -0
  74. package/dist/component/_generated/api.d.ts +12 -0
  75. package/dist/component/_generated/api.d.ts.map +1 -0
  76. package/dist/component/_generated/api.js +13 -0
  77. package/dist/component/_generated/api.js.map +1 -0
  78. package/dist/component/_generated/dataModel.d.ts +18 -0
  79. package/dist/component/_generated/dataModel.d.ts.map +1 -0
  80. package/dist/component/_generated/dataModel.js +11 -0
  81. package/dist/component/_generated/dataModel.js.map +1 -0
  82. package/dist/component/_generated/server.d.ts +42 -0
  83. package/dist/component/_generated/server.d.ts.map +1 -0
  84. package/dist/component/_generated/server.js +39 -0
  85. package/dist/component/_generated/server.js.map +1 -0
  86. package/dist/component/actions.d.ts +42 -0
  87. package/dist/component/actions.d.ts.map +1 -0
  88. package/dist/component/actions.js +405 -0
  89. package/dist/component/actions.js.map +1 -0
  90. package/dist/component/apiKeyMutations.d.ts +29 -0
  91. package/dist/component/apiKeyMutations.d.ts.map +1 -0
  92. package/dist/component/apiKeyMutations.js +149 -0
  93. package/dist/component/apiKeyMutations.js.map +1 -0
  94. package/dist/component/apiKeyQueries.d.ts +37 -0
  95. package/dist/component/apiKeyQueries.d.ts.map +1 -0
  96. package/dist/component/apiKeyQueries.js +127 -0
  97. package/dist/component/apiKeyQueries.js.map +1 -0
  98. package/dist/component/checksum.d.ts +6 -0
  99. package/dist/component/checksum.d.ts.map +1 -0
  100. package/dist/component/checksum.js +14 -0
  101. package/dist/component/checksum.js.map +1 -0
  102. package/dist/component/checksum.test.d.ts +2 -0
  103. package/dist/component/checksum.test.d.ts.map +1 -0
  104. package/dist/component/checksum.test.js +27 -0
  105. package/dist/component/checksum.test.js.map +1 -0
  106. package/dist/component/convex.config.d.ts +3 -0
  107. package/dist/component/convex.config.d.ts.map +1 -0
  108. package/dist/component/convex.config.js +4 -0
  109. package/dist/component/convex.config.js.map +1 -0
  110. package/dist/component/cronActions.d.ts +3 -0
  111. package/dist/component/cronActions.d.ts.map +1 -0
  112. package/dist/component/cronActions.js +38 -0
  113. package/dist/component/cronActions.js.map +1 -0
  114. package/dist/component/cronQueries.d.ts +6 -0
  115. package/dist/component/cronQueries.d.ts.map +1 -0
  116. package/dist/component/cronQueries.js +38 -0
  117. package/dist/component/cronQueries.js.map +1 -0
  118. package/dist/component/crons.d.ts +3 -0
  119. package/dist/component/crons.d.ts.map +1 -0
  120. package/dist/component/crons.js +18 -0
  121. package/dist/component/crons.js.map +1 -0
  122. package/dist/component/format.d.ts +11 -0
  123. package/dist/component/format.d.ts.map +1 -0
  124. package/dist/component/format.js +175 -0
  125. package/dist/component/format.js.map +1 -0
  126. package/dist/component/format.test.d.ts +2 -0
  127. package/dist/component/format.test.d.ts.map +1 -0
  128. package/dist/component/format.test.js +118 -0
  129. package/dist/component/format.test.js.map +1 -0
  130. package/dist/component/mutations.d.ts +158 -0
  131. package/dist/component/mutations.d.ts.map +1 -0
  132. package/dist/component/mutations.js +745 -0
  133. package/dist/component/mutations.js.map +1 -0
  134. package/dist/component/queries.d.ts +94 -0
  135. package/dist/component/queries.d.ts.map +1 -0
  136. package/dist/component/queries.js +574 -0
  137. package/dist/component/queries.js.map +1 -0
  138. package/dist/component/schema.d.ts +278 -0
  139. package/dist/component/schema.d.ts.map +1 -0
  140. package/dist/component/schema.js +161 -0
  141. package/dist/component/schema.js.map +1 -0
  142. package/dist/mcp/server.d.ts +11 -0
  143. package/dist/mcp/server.d.ts.map +1 -0
  144. package/dist/mcp/server.js +571 -0
  145. package/dist/mcp/server.js.map +1 -0
  146. package/dist/shared.d.ts +126 -0
  147. package/dist/shared.d.ts.map +1 -0
  148. package/dist/shared.js +67 -0
  149. package/dist/shared.js.map +1 -0
  150. package/dist/test.d.ts +23 -0
  151. package/dist/test.d.ts.map +1 -0
  152. package/dist/test.js +21 -0
  153. package/dist/test.js.map +1 -0
  154. package/eslint.config.js +15 -0
  155. package/example/convex/convex.config.ts +7 -0
  156. package/example/convex/memory.ts +129 -0
  157. package/llms.md +175 -0
  158. package/llms.txt +126 -0
  159. package/package.json +72 -0
  160. package/prds/API-REFERENCE.md +935 -0
  161. package/prds/README.md +988 -0
  162. package/prds/SETUP.md +682 -0
  163. package/src/cli/index.ts +254 -0
  164. package/src/cli/parsers/claude-code.ts +80 -0
  165. package/src/cli/parsers/codex.ts +45 -0
  166. package/src/cli/parsers/conductor.ts +47 -0
  167. package/src/cli/parsers/cursor.ts +55 -0
  168. package/src/cli/parsers/index.ts +30 -0
  169. package/src/cli/parsers/opencode.ts +84 -0
  170. package/src/cli/parsers/parsers.test.ts +201 -0
  171. package/src/cli/parsers/pi.ts +47 -0
  172. package/src/cli/parsers/types.ts +26 -0
  173. package/src/cli/parsers/vscode-copilot.ts +78 -0
  174. package/src/cli/parsers/zed.ts +47 -0
  175. package/src/cli/sync.ts +110 -0
  176. package/src/cli/type-extractor.test.ts +241 -0
  177. package/src/cli/type-extractor.ts +331 -0
  178. package/src/client/http.ts +415 -0
  179. package/src/client/index.ts +519 -0
  180. package/src/component/_generated/api.ts +14 -0
  181. package/src/component/_generated/dataModel.ts +20 -0
  182. package/src/component/_generated/server.ts +64 -0
  183. package/src/component/actions.ts +558 -0
  184. package/src/component/apiKeyMutations.ts +175 -0
  185. package/src/component/apiKeyQueries.ts +156 -0
  186. package/src/component/checksum.test.ts +31 -0
  187. package/src/component/checksum.ts +13 -0
  188. package/src/component/convex.config.ts +5 -0
  189. package/src/component/cronActions.ts +52 -0
  190. package/src/component/cronQueries.ts +42 -0
  191. package/src/component/crons.ts +34 -0
  192. package/src/component/format.test.ts +133 -0
  193. package/src/component/format.ts +232 -0
  194. package/src/component/mutations.ts +824 -0
  195. package/src/component/queries.ts +684 -0
  196. package/src/component/schema.ts +207 -0
  197. package/src/mcp/server.ts +695 -0
  198. package/src/shared.ts +251 -0
  199. package/src/test.ts +32 -0
  200. package/tsconfig.json +21 -0
  201. package/vitest.config.ts +8 -0
@@ -0,0 +1,571 @@
1
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
4
+ import { ConvexHttpClient } from "convex/browser";
5
+ export async function startMcpServer(config) {
6
+ const client = new ConvexHttpClient(config.convexUrl);
7
+ const server = new Server({
8
+ name: "agent-memory",
9
+ version: "0.1.0",
10
+ }, {
11
+ capabilities: {
12
+ tools: {},
13
+ resources: {},
14
+ },
15
+ });
16
+ const WRITE_TOOLS = [
17
+ "memory_remember",
18
+ "memory_forget",
19
+ "memory_update",
20
+ "memory_restore",
21
+ "memory_feedback",
22
+ "memory_relate",
23
+ "memory_batch_archive",
24
+ "memory_ingest",
25
+ ];
26
+ const isDisabled = (name) => config.disabledTools.includes(name) ||
27
+ (config.readOnly && WRITE_TOOLS.includes(name));
28
+ // ── List Tools ──────────────────────────────────────────────────
29
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
30
+ const allTools = [
31
+ {
32
+ name: "memory_remember",
33
+ description: "Save a new memory for future sessions",
34
+ inputSchema: {
35
+ type: "object",
36
+ properties: {
37
+ title: { type: "string", description: "Short title/slug for the memory" },
38
+ content: { type: "string", description: "Markdown content of the memory" },
39
+ memoryType: {
40
+ type: "string",
41
+ enum: ["instruction", "learning", "reference", "feedback", "journal"],
42
+ description: "Type of memory",
43
+ },
44
+ tags: { type: "array", items: { type: "string" }, description: "Tags" },
45
+ priority: { type: "number", minimum: 0, maximum: 1, description: "Priority (0-1, >= 0.8 = pinned)" },
46
+ agentId: { type: "string", description: "Agent that created this memory" },
47
+ sessionId: { type: "string", description: "Session/conversation ID" },
48
+ },
49
+ required: ["title", "content", "memoryType"],
50
+ },
51
+ },
52
+ {
53
+ name: "memory_recall",
54
+ description: "Search memories by keyword (full-text)",
55
+ inputSchema: {
56
+ type: "object",
57
+ properties: {
58
+ query: { type: "string", description: "Search query" },
59
+ memoryType: { type: "string", description: "Filter by type" },
60
+ limit: { type: "number", description: "Max results" },
61
+ },
62
+ required: ["query"],
63
+ },
64
+ },
65
+ {
66
+ name: "memory_semantic_recall",
67
+ description: "Search memories by meaning (vector similarity)",
68
+ inputSchema: {
69
+ type: "object",
70
+ properties: {
71
+ query: { type: "string", description: "Search query" },
72
+ limit: { type: "number", description: "Max results" },
73
+ },
74
+ required: ["query"],
75
+ },
76
+ },
77
+ {
78
+ name: "memory_list",
79
+ description: "List all memories with optional filters",
80
+ inputSchema: {
81
+ type: "object",
82
+ properties: {
83
+ memoryType: { type: "string", description: "Filter by type" },
84
+ minPriority: { type: "number", description: "Minimum priority" },
85
+ agentId: { type: "string", description: "Filter by agent" },
86
+ sessionId: { type: "string", description: "Filter by session" },
87
+ source: { type: "string", description: "Filter by source tool" },
88
+ tags: { type: "array", items: { type: "string" }, description: "Filter by tags (any match)" },
89
+ limit: { type: "number", description: "Max results" },
90
+ },
91
+ },
92
+ },
93
+ {
94
+ name: "memory_context",
95
+ description: "Get context bundle (pinned + relevant memories) for the session",
96
+ inputSchema: {
97
+ type: "object",
98
+ properties: {
99
+ activePaths: {
100
+ type: "array",
101
+ items: { type: "string" },
102
+ description: "Currently open file paths",
103
+ },
104
+ maxTokens: { type: "number", description: "Token budget" },
105
+ },
106
+ },
107
+ },
108
+ {
109
+ name: "memory_forget",
110
+ description: "Archive a memory so it is no longer loaded",
111
+ inputSchema: {
112
+ type: "object",
113
+ properties: {
114
+ memoryId: { type: "string", description: "Memory ID to archive" },
115
+ },
116
+ required: ["memoryId"],
117
+ },
118
+ },
119
+ {
120
+ name: "memory_restore",
121
+ description: "Restore a previously archived memory",
122
+ inputSchema: {
123
+ type: "object",
124
+ properties: {
125
+ memoryId: { type: "string", description: "Memory ID to restore" },
126
+ },
127
+ required: ["memoryId"],
128
+ },
129
+ },
130
+ {
131
+ name: "memory_update",
132
+ description: "Update an existing memory",
133
+ inputSchema: {
134
+ type: "object",
135
+ properties: {
136
+ memoryId: { type: "string", description: "Memory ID to update" },
137
+ content: { type: "string", description: "New content" },
138
+ title: { type: "string", description: "New title" },
139
+ tags: { type: "array", items: { type: "string" } },
140
+ priority: { type: "number", minimum: 0, maximum: 1 },
141
+ },
142
+ required: ["memoryId"],
143
+ },
144
+ },
145
+ {
146
+ name: "memory_history",
147
+ description: "View the change history of a memory (audit trail)",
148
+ inputSchema: {
149
+ type: "object",
150
+ properties: {
151
+ memoryId: { type: "string", description: "Memory ID" },
152
+ limit: { type: "number", description: "Max entries" },
153
+ },
154
+ required: ["memoryId"],
155
+ },
156
+ },
157
+ {
158
+ name: "memory_feedback",
159
+ description: "Rate a memory as helpful or unhelpful",
160
+ inputSchema: {
161
+ type: "object",
162
+ properties: {
163
+ memoryId: { type: "string", description: "Memory ID to rate" },
164
+ sentiment: {
165
+ type: "string",
166
+ enum: ["positive", "negative", "very_negative"],
167
+ description: "Feedback sentiment",
168
+ },
169
+ comment: { type: "string", description: "Optional comment explaining the rating" },
170
+ },
171
+ required: ["memoryId", "sentiment"],
172
+ },
173
+ },
174
+ {
175
+ name: "memory_relate",
176
+ description: "Create a relationship between two memories",
177
+ inputSchema: {
178
+ type: "object",
179
+ properties: {
180
+ fromMemoryId: { type: "string", description: "Source memory ID" },
181
+ toMemoryId: { type: "string", description: "Target memory ID" },
182
+ relationship: {
183
+ type: "string",
184
+ description: "Type of relationship (e.g. 'contradicts', 'extends', 'replaces', 'related_to')",
185
+ },
186
+ },
187
+ required: ["fromMemoryId", "toMemoryId", "relationship"],
188
+ },
189
+ },
190
+ {
191
+ name: "memory_relations",
192
+ description: "View relationships of a memory (graph connections)",
193
+ inputSchema: {
194
+ type: "object",
195
+ properties: {
196
+ memoryId: { type: "string", description: "Memory ID" },
197
+ relationship: { type: "string", description: "Filter by relationship type" },
198
+ direction: { type: "string", enum: ["from", "to", "both"], description: "Direction filter" },
199
+ },
200
+ required: ["memoryId"],
201
+ },
202
+ },
203
+ {
204
+ name: "memory_batch_archive",
205
+ description: "Archive multiple memories at once",
206
+ inputSchema: {
207
+ type: "object",
208
+ properties: {
209
+ memoryIds: {
210
+ type: "array",
211
+ items: { type: "string" },
212
+ description: "Memory IDs to archive",
213
+ },
214
+ },
215
+ required: ["memoryIds"],
216
+ },
217
+ },
218
+ {
219
+ name: "memory_ingest",
220
+ description: "Intelligently extract memories from raw text. Uses LLM to extract facts, deduplicates against existing memories, and decides whether to add, update, or skip each fact.",
221
+ inputSchema: {
222
+ type: "object",
223
+ properties: {
224
+ content: { type: "string", description: "Raw text to extract memories from (conversation, notes, etc.)" },
225
+ agentId: { type: "string", description: "Agent performing the ingest" },
226
+ sessionId: { type: "string", description: "Session/conversation ID" },
227
+ },
228
+ required: ["content"],
229
+ },
230
+ },
231
+ ];
232
+ return {
233
+ tools: allTools.filter((t) => !isDisabled(t.name)),
234
+ };
235
+ });
236
+ // ── Call Tool ───────────────────────────────────────────────────
237
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
238
+ const { name, arguments: args } = request.params;
239
+ if (isDisabled(name)) {
240
+ return {
241
+ content: [{ type: "text", text: `Tool "${name}" is disabled.` }],
242
+ isError: true,
243
+ };
244
+ }
245
+ try {
246
+ switch (name) {
247
+ case "memory_remember": {
248
+ const id = await client.mutation("agentMemory/mutations:create", {
249
+ projectId: config.projectId,
250
+ scope: "project",
251
+ title: args.title,
252
+ content: args.content,
253
+ memoryType: args.memoryType,
254
+ tags: args.tags ?? [],
255
+ priority: args.priority,
256
+ agentId: args.agentId,
257
+ sessionId: args.sessionId,
258
+ source: "mcp",
259
+ });
260
+ return {
261
+ content: [
262
+ {
263
+ type: "text",
264
+ text: `Memory saved: "${args.title}" (${id})`,
265
+ },
266
+ ],
267
+ };
268
+ }
269
+ case "memory_recall": {
270
+ const results = await client.query("agentMemory/queries:search", {
271
+ projectId: config.projectId,
272
+ query: args.query,
273
+ memoryType: args.memoryType,
274
+ limit: args.limit ?? 10,
275
+ });
276
+ return {
277
+ content: [{ type: "text", text: formatMemories(results) }],
278
+ };
279
+ }
280
+ case "memory_semantic_recall": {
281
+ if (!config.embeddingApiKey) {
282
+ const results = await client.query("agentMemory/queries:search", {
283
+ projectId: config.projectId,
284
+ query: args.query,
285
+ limit: args.limit ?? 10,
286
+ });
287
+ return {
288
+ content: [{ type: "text", text: formatMemories(results) }],
289
+ };
290
+ }
291
+ // TODO: call semanticSearch action when action client support is available
292
+ const results = await client.query("agentMemory/queries:search", {
293
+ projectId: config.projectId,
294
+ query: args.query,
295
+ limit: args.limit ?? 10,
296
+ });
297
+ return {
298
+ content: [{ type: "text", text: formatMemories(results) }],
299
+ };
300
+ }
301
+ case "memory_list": {
302
+ const list = await client.query("agentMemory/queries:list", {
303
+ projectId: config.projectId,
304
+ memoryType: args?.memoryType,
305
+ minPriority: args?.minPriority,
306
+ agentId: args?.agentId,
307
+ sessionId: args?.sessionId,
308
+ source: args?.source,
309
+ tags: args?.tags,
310
+ limit: args?.limit ?? 50,
311
+ archived: false,
312
+ });
313
+ return {
314
+ content: [{ type: "text", text: formatMemories(list) }],
315
+ };
316
+ }
317
+ case "memory_context": {
318
+ const bundle = await client.query("agentMemory/queries:getContextBundle", {
319
+ projectId: config.projectId,
320
+ scope: "project",
321
+ activePaths: args?.activePaths,
322
+ maxTokens: args?.maxTokens,
323
+ });
324
+ let text = `## Pinned (${bundle.pinned.length})\n\n`;
325
+ for (const m of bundle.pinned) {
326
+ text += `### ${m.title}\n${m.content}\n\n`;
327
+ }
328
+ text += `## Relevant (${bundle.relevant.length})\n\n`;
329
+ for (const m of bundle.relevant) {
330
+ text += `### ${m.title}\n${m.content}\n\n`;
331
+ }
332
+ text += `## Available (${bundle.available.length})\n`;
333
+ for (const m of bundle.available) {
334
+ text += `- ${m.title} (${m.memoryType}, p=${m.priority})\n`;
335
+ }
336
+ return { content: [{ type: "text", text }] };
337
+ }
338
+ case "memory_forget": {
339
+ await client.mutation("agentMemory/mutations:archive", {
340
+ memoryId: args.memoryId,
341
+ actor: "mcp",
342
+ });
343
+ return {
344
+ content: [{ type: "text", text: `Memory archived: ${args.memoryId}` }],
345
+ };
346
+ }
347
+ case "memory_restore": {
348
+ await client.mutation("agentMemory/mutations:restore", {
349
+ memoryId: args.memoryId,
350
+ actor: "mcp",
351
+ });
352
+ return {
353
+ content: [{ type: "text", text: `Memory restored: ${args.memoryId}` }],
354
+ };
355
+ }
356
+ case "memory_update": {
357
+ await client.mutation("agentMemory/mutations:update", {
358
+ memoryId: args.memoryId,
359
+ content: args?.content,
360
+ title: args?.title,
361
+ tags: args?.tags,
362
+ priority: args?.priority,
363
+ actor: "mcp",
364
+ });
365
+ return {
366
+ content: [{ type: "text", text: `Memory updated: ${args.memoryId}` }],
367
+ };
368
+ }
369
+ case "memory_history": {
370
+ const entries = await client.query("agentMemory/queries:history", {
371
+ memoryId: args.memoryId,
372
+ limit: args?.limit ?? 20,
373
+ });
374
+ if (entries.length === 0) {
375
+ return { content: [{ type: "text", text: "No history found." }] };
376
+ }
377
+ const text = entries
378
+ .map((e) => `**${e.event}** by ${e.actor} at ${new Date(e.timestamp).toISOString()}\n` +
379
+ (e.previousContent
380
+ ? ` Previous: ${e.previousContent.slice(0, 100)}...\n`
381
+ : "") +
382
+ (e.newContent
383
+ ? ` New: ${e.newContent.slice(0, 100)}...\n`
384
+ : ""))
385
+ .join("\n");
386
+ return { content: [{ type: "text", text }] };
387
+ }
388
+ case "memory_feedback": {
389
+ await client.mutation("agentMemory/mutations:addFeedback", {
390
+ memoryId: args.memoryId,
391
+ sentiment: args.sentiment,
392
+ comment: args?.comment,
393
+ actor: "mcp",
394
+ });
395
+ return {
396
+ content: [
397
+ {
398
+ type: "text",
399
+ text: `Feedback recorded: ${args.sentiment} for ${args.memoryId}`,
400
+ },
401
+ ],
402
+ };
403
+ }
404
+ case "memory_relate": {
405
+ const relationId = await client.mutation("agentMemory/mutations:addRelation", {
406
+ projectId: config.projectId,
407
+ fromMemoryId: args.fromMemoryId,
408
+ toMemoryId: args.toMemoryId,
409
+ relationship: args.relationship,
410
+ metadata: { createdBy: "mcp" },
411
+ });
412
+ return {
413
+ content: [
414
+ {
415
+ type: "text",
416
+ text: `Relation created: ${args.fromMemoryId} --[${args.relationship}]--> ${args.toMemoryId} (${relationId})`,
417
+ },
418
+ ],
419
+ };
420
+ }
421
+ case "memory_relations": {
422
+ const relations = await client.query("agentMemory/queries:getRelations", {
423
+ memoryId: args.memoryId,
424
+ relationship: args?.relationship,
425
+ direction: args?.direction,
426
+ });
427
+ if (relations.length === 0) {
428
+ return { content: [{ type: "text", text: "No relations found." }] };
429
+ }
430
+ const text = relations
431
+ .map((r) => `${r.fromMemoryId} --[${r.relationship}]--> ${r.toMemoryId}`)
432
+ .join("\n");
433
+ return { content: [{ type: "text", text }] };
434
+ }
435
+ case "memory_batch_archive": {
436
+ const result = await client.mutation("agentMemory/mutations:batchArchive", {
437
+ memoryIds: args.memoryIds,
438
+ actor: "mcp",
439
+ });
440
+ return {
441
+ content: [
442
+ {
443
+ type: "text",
444
+ text: `Batch archive: ${result.archived} archived, ${result.failed} failed`,
445
+ },
446
+ ],
447
+ };
448
+ }
449
+ case "memory_ingest": {
450
+ if (!config.llmApiKey) {
451
+ return {
452
+ content: [
453
+ {
454
+ type: "text",
455
+ text: "Ingest requires --llm-api-key flag. Pass an OpenAI-compatible API key to enable intelligent memory extraction.",
456
+ },
457
+ ],
458
+ isError: true,
459
+ };
460
+ }
461
+ const result = await client.action("agentMemory/actions:ingest", {
462
+ projectId: config.projectId,
463
+ content: args.content,
464
+ scope: "project",
465
+ agentId: args?.agentId,
466
+ sessionId: args?.sessionId,
467
+ llmApiKey: config.llmApiKey,
468
+ embeddingApiKey: config.embeddingApiKey,
469
+ });
470
+ const summary = result.results
471
+ .map((r) => `- [${r.event}] ${r.content.slice(0, 80)}...${r.previousContent ? ` (was: ${r.previousContent.slice(0, 40)}...)` : ""}`)
472
+ .join("\n");
473
+ return {
474
+ content: [
475
+ {
476
+ type: "text",
477
+ text: `Ingested ${result.totalProcessed} facts:\n${summary}`,
478
+ },
479
+ ],
480
+ };
481
+ }
482
+ default:
483
+ return {
484
+ content: [{ type: "text", text: `Unknown tool: ${name}` }],
485
+ isError: true,
486
+ };
487
+ }
488
+ }
489
+ catch (error) {
490
+ return {
491
+ content: [
492
+ {
493
+ type: "text",
494
+ text: `Error: ${error instanceof Error ? error.message : String(error)}`,
495
+ },
496
+ ],
497
+ isError: true,
498
+ };
499
+ }
500
+ });
501
+ // ── List Resources ──────────────────────────────────────────────
502
+ server.setRequestHandler(ListResourcesRequestSchema, async () => {
503
+ return {
504
+ resources: [
505
+ {
506
+ uri: `memory://project/${config.projectId}/pinned`,
507
+ name: "Pinned Memories",
508
+ description: "High-priority memories always loaded into context",
509
+ mimeType: "text/markdown",
510
+ },
511
+ ],
512
+ };
513
+ });
514
+ // ── Read Resource ───────────────────────────────────────────────
515
+ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
516
+ const { uri } = request.params;
517
+ if (uri === `memory://project/${config.projectId}/pinned`) {
518
+ const bundle = await client.query("agentMemory/queries:getContextBundle", {
519
+ projectId: config.projectId,
520
+ scope: "project",
521
+ });
522
+ const text = bundle.pinned
523
+ .map((m) => `## ${m.title}\n\n${m.content}`)
524
+ .join("\n\n---\n\n");
525
+ return {
526
+ contents: [
527
+ {
528
+ uri,
529
+ mimeType: "text/markdown",
530
+ text: text || "No pinned memories.",
531
+ },
532
+ ],
533
+ };
534
+ }
535
+ return {
536
+ contents: [
537
+ {
538
+ uri,
539
+ mimeType: "text/plain",
540
+ text: "Resource not found.",
541
+ },
542
+ ],
543
+ };
544
+ });
545
+ // ── Start ───────────────────────────────────────────────────────
546
+ const transport = new StdioServerTransport();
547
+ await server.connect(transport);
548
+ console.error(`agent-memory MCP server running for project "${config.projectId}"`);
549
+ }
550
+ // ── Helpers ─────────────────────────────────────────────────────────
551
+ function formatMemories(memories) {
552
+ if (memories.length === 0)
553
+ return "No memories found.";
554
+ return memories
555
+ .map((m) => {
556
+ const meta = [];
557
+ if (m.priority !== undefined)
558
+ meta.push(`p=${m.priority}`);
559
+ if (m.agentId)
560
+ meta.push(`agent=${m.agentId}`);
561
+ if (m.accessCount)
562
+ meta.push(`accessed=${m.accessCount}x`);
563
+ if (m.positiveCount || m.negativeCount) {
564
+ meta.push(`feedback=+${m.positiveCount ?? 0}/-${m.negativeCount ?? 0}`);
565
+ }
566
+ const metaStr = meta.length > 0 ? ` (${meta.join(", ")})` : "";
567
+ return `## ${m.title} [${m.memoryType}]${metaStr}\n\n${m.content}`;
568
+ })
569
+ .join("\n\n---\n\n");
570
+ }
571
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}