@mnemoverse/mcp-memory-server 0.3.0 → 0.3.2
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.
- package/.github/workflows/release.yml +138 -0
- package/.github/workflows/verify-configs.yml +55 -0
- package/CONTRIBUTING.md +199 -0
- package/README.md +50 -21
- package/dist/index.js +82 -40
- package/dist/index.js.map +1 -1
- package/docs/configs/claude-code-cli.sh +1 -1
- package/docs/configs/claude-desktop.json +1 -1
- package/docs/configs/cursor-deep-link.txt +1 -1
- package/docs/configs/cursor.json +1 -1
- package/docs/configs/vscode-deep-link.txt +1 -1
- package/docs/configs/vscode.json +1 -1
- package/docs/configs/windsurf.json +1 -1
- package/docs/snippets/claude-code.md +9 -0
- package/docs/snippets/claude-desktop.md +20 -0
- package/docs/snippets/cursor.md +20 -0
- package/docs/snippets/vscode.md +21 -0
- package/docs/snippets/windsurf.md +20 -0
- package/package.json +2 -1
- package/scripts/generate-configs.mjs +196 -7
- package/scripts/install-hooks.mjs +76 -0
- package/server.json +10 -9
- package/smithery.yaml +1 -1
- package/src/configs/source.json +2 -2
- package/src/index.ts +114 -72
package/dist/index.js
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { createRequire } from "node:module";
|
|
2
3
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
4
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
5
|
import { z } from "zod";
|
|
6
|
+
// Version is read at runtime from package.json so there is exactly one place
|
|
7
|
+
// to bump on each release. Works both from `dist/` during local dev and from
|
|
8
|
+
// `node_modules/@mnemoverse/mcp-memory-server/dist/` after an npm install.
|
|
9
|
+
const require = createRequire(import.meta.url);
|
|
10
|
+
const pkg = require("../package.json");
|
|
5
11
|
const API_URL = process.env.MNEMOVERSE_API_URL || "https://core.mnemoverse.com/api/v1";
|
|
6
12
|
const API_KEY = process.env.MNEMOVERSE_API_KEY || "";
|
|
7
13
|
// Hard cap on tool result size — required by Claude Connectors Directory
|
|
@@ -13,6 +19,19 @@ if (!API_KEY) {
|
|
|
13
19
|
"Get your free key at https://console.mnemoverse.com");
|
|
14
20
|
process.exit(1);
|
|
15
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Fetch from the Mnemoverse core API with authentication.
|
|
24
|
+
*
|
|
25
|
+
* Generic so call sites can declare the expected response shape:
|
|
26
|
+
*
|
|
27
|
+
* const r = await apiFetch<{ stored: boolean; atom_id: string }>("/memory/write", { ... });
|
|
28
|
+
*
|
|
29
|
+
* Handles 204 No Content and empty bodies defensively — FastAPI DELETE
|
|
30
|
+
* handlers may switch to 204 in the future even though today they return
|
|
31
|
+
* a JSON body.
|
|
32
|
+
*
|
|
33
|
+
* @throws Error with message `Mnemoverse API error {status}: {body}` on non-2xx.
|
|
34
|
+
*/
|
|
16
35
|
async function apiFetch(path, options = {}) {
|
|
17
36
|
const res = await fetch(`${API_URL}${path}`, {
|
|
18
37
|
...options,
|
|
@@ -26,23 +45,37 @@ async function apiFetch(path, options = {}) {
|
|
|
26
45
|
const text = await res.text();
|
|
27
46
|
throw new Error(`Mnemoverse API error ${res.status}: ${text}`);
|
|
28
47
|
}
|
|
29
|
-
return
|
|
48
|
+
// 204 No Content or empty body — return an empty object cast as T so
|
|
49
|
+
// call sites using optional chaining still work without crashing.
|
|
50
|
+
if (res.status === 204 || res.headers.get("content-length") === "0") {
|
|
51
|
+
return {};
|
|
52
|
+
}
|
|
53
|
+
return (await res.json());
|
|
30
54
|
}
|
|
31
55
|
/**
|
|
32
56
|
* Truncate a result string to MAX_RESULT_CHARS, appending a notice if truncated.
|
|
33
57
|
* Required by Claude Connectors Directory submission policy.
|
|
58
|
+
*
|
|
59
|
+
* Defensive against splitting UTF-16 surrogate pairs: if the character right
|
|
60
|
+
* before the cut point is a high surrogate (U+D800–U+DBFF), drop it so the
|
|
61
|
+
* result stays well-formed. Otherwise an emoji or non-BMP character at the
|
|
62
|
+
* boundary can produce a lone surrogate and corrupt downstream JSON encoding.
|
|
34
63
|
*/
|
|
35
64
|
function capResult(text) {
|
|
36
65
|
if (text.length <= MAX_RESULT_CHARS)
|
|
37
66
|
return text;
|
|
38
|
-
|
|
67
|
+
let truncated = text.slice(0, MAX_RESULT_CHARS - 200);
|
|
68
|
+
const lastCode = truncated.charCodeAt(truncated.length - 1);
|
|
69
|
+
if (lastCode >= 0xd800 && lastCode <= 0xdbff) {
|
|
70
|
+
truncated = truncated.slice(0, -1);
|
|
71
|
+
}
|
|
39
72
|
return (truncated +
|
|
40
73
|
`\n\n[…truncated to fit 25K token limit. Use a more specific query or smaller top_k to see all results.]`);
|
|
41
74
|
}
|
|
42
75
|
// --- Server setup ---
|
|
43
76
|
const server = new McpServer({
|
|
44
77
|
name: "mnemoverse-memory",
|
|
45
|
-
version:
|
|
78
|
+
version: pkg.version,
|
|
46
79
|
});
|
|
47
80
|
// --- Tool: memory_write ---
|
|
48
81
|
server.registerTool("memory_write", {
|
|
@@ -70,7 +103,7 @@ server.registerTool("memory_write", {
|
|
|
70
103
|
openWorldHint: true,
|
|
71
104
|
},
|
|
72
105
|
}, async ({ content, concepts, domain }) => {
|
|
73
|
-
const
|
|
106
|
+
const r = await apiFetch("/memory/write", {
|
|
74
107
|
method: "POST",
|
|
75
108
|
body: JSON.stringify({
|
|
76
109
|
content,
|
|
@@ -78,13 +111,13 @@ server.registerTool("memory_write", {
|
|
|
78
111
|
domain: domain || "general",
|
|
79
112
|
}),
|
|
80
113
|
});
|
|
81
|
-
const
|
|
82
|
-
if (r
|
|
114
|
+
const importance = (r?.importance ?? 0).toFixed(2);
|
|
115
|
+
if (r?.stored) {
|
|
83
116
|
return {
|
|
84
117
|
content: [
|
|
85
118
|
{
|
|
86
119
|
type: "text",
|
|
87
|
-
text: `Stored (importance: ${
|
|
120
|
+
text: `Stored (importance: ${importance}). ID: ${r.atom_id ?? "unknown"}`,
|
|
88
121
|
},
|
|
89
122
|
],
|
|
90
123
|
};
|
|
@@ -93,7 +126,7 @@ server.registerTool("memory_write", {
|
|
|
93
126
|
content: [
|
|
94
127
|
{
|
|
95
128
|
type: "text",
|
|
96
|
-
text: `Filtered — ${r
|
|
129
|
+
text: `Filtered — ${r?.reason ?? "unknown reason"} (importance: ${importance})`,
|
|
97
130
|
},
|
|
98
131
|
],
|
|
99
132
|
};
|
|
@@ -127,7 +160,7 @@ server.registerTool("memory_read", {
|
|
|
127
160
|
openWorldHint: true,
|
|
128
161
|
},
|
|
129
162
|
}, async ({ query, top_k, domain }) => {
|
|
130
|
-
const
|
|
163
|
+
const r = await apiFetch("/memory/read", {
|
|
131
164
|
method: "POST",
|
|
132
165
|
body: JSON.stringify({
|
|
133
166
|
query,
|
|
@@ -136,19 +169,24 @@ server.registerTool("memory_read", {
|
|
|
136
169
|
include_associations: true,
|
|
137
170
|
}),
|
|
138
171
|
});
|
|
139
|
-
const
|
|
140
|
-
if (
|
|
172
|
+
const items = Array.isArray(r?.items) ? r.items : [];
|
|
173
|
+
if (items.length === 0) {
|
|
141
174
|
return {
|
|
142
175
|
content: [
|
|
143
176
|
{ type: "text", text: "No memories found for this query." },
|
|
144
177
|
],
|
|
145
178
|
};
|
|
146
179
|
}
|
|
147
|
-
const lines =
|
|
148
|
-
(item
|
|
180
|
+
const lines = items.map((item, i) => {
|
|
181
|
+
const relevance = ((item?.relevance ?? 0) * 100).toFixed(0);
|
|
182
|
+
const content = item?.content ?? "(empty)";
|
|
183
|
+
const concepts = Array.isArray(item?.concepts) && item.concepts.length > 0
|
|
149
184
|
? ` (${item.concepts.join(", ")})`
|
|
150
|
-
: ""
|
|
151
|
-
|
|
185
|
+
: "";
|
|
186
|
+
return `${i + 1}. [${relevance}%] ${content}${concepts}`;
|
|
187
|
+
});
|
|
188
|
+
const searchMs = (r?.search_time_ms ?? 0).toFixed(0);
|
|
189
|
+
const text = lines.join("\n\n") + `\n\n(${searchMs}ms)`;
|
|
152
190
|
return {
|
|
153
191
|
content: [
|
|
154
192
|
{
|
|
@@ -175,21 +213,25 @@ server.registerTool("memory_feedback", {
|
|
|
175
213
|
annotations: {
|
|
176
214
|
title: "Rate Memory Helpfulness",
|
|
177
215
|
readOnlyHint: false,
|
|
178
|
-
|
|
216
|
+
// Feedback permanently mutates the memory's valence and importance
|
|
217
|
+
// scores on the backend — per MCP spec, that is a destructive update
|
|
218
|
+
// to the stored state (cf. ToolAnnotations.destructiveHint), even
|
|
219
|
+
// though the caller intends it as quality signal rather than delete.
|
|
220
|
+
destructiveHint: true,
|
|
179
221
|
idempotentHint: false,
|
|
180
222
|
openWorldHint: true,
|
|
181
223
|
},
|
|
182
224
|
}, async ({ atom_ids, outcome }) => {
|
|
183
|
-
const
|
|
225
|
+
const r = await apiFetch("/memory/feedback", {
|
|
184
226
|
method: "POST",
|
|
185
227
|
body: JSON.stringify({ atom_ids, outcome }),
|
|
186
228
|
});
|
|
187
|
-
const
|
|
229
|
+
const count = r?.updated_count ?? 0;
|
|
188
230
|
return {
|
|
189
231
|
content: [
|
|
190
232
|
{
|
|
191
233
|
type: "text",
|
|
192
|
-
text: `Feedback recorded for ${
|
|
234
|
+
text: `Feedback recorded for ${count} memor${count === 1 ? "y" : "ies"}.`,
|
|
193
235
|
},
|
|
194
236
|
],
|
|
195
237
|
};
|
|
@@ -206,13 +248,15 @@ server.registerTool("memory_stats", {
|
|
|
206
248
|
openWorldHint: true,
|
|
207
249
|
},
|
|
208
250
|
}, async () => {
|
|
209
|
-
const
|
|
210
|
-
const
|
|
251
|
+
const r = await apiFetch("/memory/stats");
|
|
252
|
+
const domains = Array.isArray(r?.domains) && r.domains.length > 0
|
|
253
|
+
? r.domains.join(", ")
|
|
254
|
+
: "general";
|
|
211
255
|
const text = [
|
|
212
|
-
`Memories: ${r
|
|
213
|
-
`Associations: ${r
|
|
214
|
-
`Domains: ${
|
|
215
|
-
`Avg quality: valence ${r
|
|
256
|
+
`Memories: ${r?.total_atoms ?? 0} (${r?.episodes ?? 0} episodes, ${r?.prototypes ?? 0} prototypes)`,
|
|
257
|
+
`Associations: ${r?.hebbian_edges ?? 0} Hebbian edges`,
|
|
258
|
+
`Domains: ${domains}`,
|
|
259
|
+
`Avg quality: valence ${(r?.avg_valence ?? 0).toFixed(2)}, importance ${(r?.avg_importance ?? 0).toFixed(2)}`,
|
|
216
260
|
].join("\n");
|
|
217
261
|
return { content: [{ type: "text", text }] };
|
|
218
262
|
});
|
|
@@ -233,13 +277,11 @@ server.registerTool("memory_delete", {
|
|
|
233
277
|
openWorldHint: true,
|
|
234
278
|
},
|
|
235
279
|
}, async ({ atom_id }) => {
|
|
236
|
-
const result = await apiFetch(`/memory/atoms/${encodeURIComponent(atom_id)}`, {
|
|
237
|
-
method: "DELETE",
|
|
238
|
-
});
|
|
239
280
|
// Core API returns { deleted: <count>, atom_id }. count == 0 means
|
|
240
|
-
// the atom didn't exist (or was already removed). count >= 1 means
|
|
241
|
-
|
|
242
|
-
|
|
281
|
+
// the atom didn't exist (or was already removed). count >= 1 means
|
|
282
|
+
// it was deleted.
|
|
283
|
+
const r = await apiFetch(`/memory/atoms/${encodeURIComponent(atom_id)}`, { method: "DELETE" });
|
|
284
|
+
if (!r?.deleted) {
|
|
243
285
|
return {
|
|
244
286
|
content: [
|
|
245
287
|
{
|
|
@@ -278,19 +320,19 @@ server.registerTool("memory_delete_domain", {
|
|
|
278
320
|
idempotentHint: true,
|
|
279
321
|
openWorldHint: true,
|
|
280
322
|
},
|
|
281
|
-
},
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
const
|
|
323
|
+
},
|
|
324
|
+
// The `confirm: z.literal(true)` in the input schema is the safety
|
|
325
|
+
// interlock — Zod rejects any call without confirm === true before it
|
|
326
|
+
// reaches this handler, so no runtime re-check is needed here.
|
|
327
|
+
async ({ domain }) => {
|
|
328
|
+
const r = await apiFetch(`/memory/domain/${encodeURIComponent(domain)}`, { method: "DELETE" });
|
|
329
|
+
const count = r?.deleted ?? 0;
|
|
330
|
+
const domainName = r?.domain ?? domain;
|
|
289
331
|
return {
|
|
290
332
|
content: [
|
|
291
333
|
{
|
|
292
334
|
type: "text",
|
|
293
|
-
text: `Deleted ${
|
|
335
|
+
text: `Deleted ${count} ${count === 1 ? "memory" : "memories"} from domain "${domainName}".`,
|
|
294
336
|
},
|
|
295
337
|
],
|
|
296
338
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,OAAO,GACX,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,oCAAoC,CAAC;AACzE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC;AAErD,yEAAyE;AACzE,wFAAwF;AACxF,mGAAmG;AACnG,MAAM,gBAAgB,GAAG,MAAM,GAAG,CAAC,CAAC;AAEpC,IAAI,CAAC,OAAO,EAAE,CAAC;IACb,OAAO,CAAC,KAAK,CACX,+DAA+D;QAC7D,qDAAqD,CACxD,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,IAAY,EACZ,UAAuB,EAAE;IAEzB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,EAAE,EAAE;QAC3C,GAAG,OAAO;QACV,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,WAAW,EAAE,OAAO;YACpB,GAAG,CAAE,OAAO,CAAC,OAAkC,IAAI,EAAE,CAAC;SACvD;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
cursor://anysphere.cursor-deeplink/mcp/install?name=mnemoverse&config=
|
|
1
|
+
cursor://anysphere.cursor-deeplink/mcp/install?name=mnemoverse&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBtbmVtb3ZlcnNlL21jcC1tZW1vcnktc2VydmVyQGxhdGVzdCJdLCJlbnYiOnsiTU5FTU9WRVJTRV9BUElfS0VZIjoibWtfbGl2ZV9ZT1VSX0tFWSJ9fQ==
|
package/docs/configs/cursor.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
vscode:mcp/install?%7B%22name%22%3A%22mnemoverse%22%2C%22type%22%3A%22stdio%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40mnemoverse%2Fmcp-memory-server%22%5D%2C%22env%22%3A%7B%22MNEMOVERSE_API_KEY%22%3A%22mk_live_YOUR_KEY%22%7D%7D
|
|
1
|
+
vscode:mcp/install?%7B%22name%22%3A%22mnemoverse%22%2C%22type%22%3A%22stdio%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40mnemoverse%2Fmcp-memory-server%40latest%22%5D%2C%22env%22%3A%7B%22MNEMOVERSE_API_KEY%22%3A%22mk_live_YOUR_KEY%22%7D%7D
|
package/docs/configs/vscode.json
CHANGED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<!-- AUTO-GENERATED from src/configs/source.json. Run `npm run generate:configs`. Do not edit by hand. -->
|
|
2
|
+
|
|
3
|
+
**Claude Code** — add via CLI:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
claude mcp add mnemoverse \
|
|
7
|
+
-e MNEMOVERSE_API_KEY=mk_live_YOUR_KEY \
|
|
8
|
+
-- npx -y @mnemoverse/mcp-memory-server@latest
|
|
9
|
+
```
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<!-- AUTO-GENERATED from src/configs/source.json. Run `npm run generate:configs`. Do not edit by hand. -->
|
|
2
|
+
|
|
3
|
+
**Claude Desktop** — add to `claude_desktop_config.json`:
|
|
4
|
+
|
|
5
|
+
```json
|
|
6
|
+
{
|
|
7
|
+
"mcpServers": {
|
|
8
|
+
"mnemoverse": {
|
|
9
|
+
"command": "npx",
|
|
10
|
+
"args": [
|
|
11
|
+
"-y",
|
|
12
|
+
"@mnemoverse/mcp-memory-server@latest"
|
|
13
|
+
],
|
|
14
|
+
"env": {
|
|
15
|
+
"MNEMOVERSE_API_KEY": "mk_live_YOUR_KEY"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
```
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<!-- AUTO-GENERATED from src/configs/source.json. Run `npm run generate:configs`. Do not edit by hand. -->
|
|
2
|
+
|
|
3
|
+
**Cursor** — add to `.cursor/mcp.json`:
|
|
4
|
+
|
|
5
|
+
```json
|
|
6
|
+
{
|
|
7
|
+
"mcpServers": {
|
|
8
|
+
"mnemoverse": {
|
|
9
|
+
"command": "npx",
|
|
10
|
+
"args": [
|
|
11
|
+
"-y",
|
|
12
|
+
"@mnemoverse/mcp-memory-server@latest"
|
|
13
|
+
],
|
|
14
|
+
"env": {
|
|
15
|
+
"MNEMOVERSE_API_KEY": "mk_live_YOUR_KEY"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
```
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<!-- AUTO-GENERATED from src/configs/source.json. Run `npm run generate:configs`. Do not edit by hand. -->
|
|
2
|
+
|
|
3
|
+
**VS Code** — add to `.vscode/mcp.json` (note: VS Code uses `servers`, not `mcpServers`):
|
|
4
|
+
|
|
5
|
+
```json
|
|
6
|
+
{
|
|
7
|
+
"servers": {
|
|
8
|
+
"mnemoverse": {
|
|
9
|
+
"type": "stdio",
|
|
10
|
+
"command": "npx",
|
|
11
|
+
"args": [
|
|
12
|
+
"-y",
|
|
13
|
+
"@mnemoverse/mcp-memory-server@latest"
|
|
14
|
+
],
|
|
15
|
+
"env": {
|
|
16
|
+
"MNEMOVERSE_API_KEY": "mk_live_YOUR_KEY"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
```
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<!-- AUTO-GENERATED from src/configs/source.json. Run `npm run generate:configs`. Do not edit by hand. -->
|
|
2
|
+
|
|
3
|
+
**Windsurf** — add to `~/.codeium/windsurf/mcp_config.json`:
|
|
4
|
+
|
|
5
|
+
```json
|
|
6
|
+
{
|
|
7
|
+
"mcpServers": {
|
|
8
|
+
"mnemoverse": {
|
|
9
|
+
"command": "npx",
|
|
10
|
+
"args": [
|
|
11
|
+
"-y",
|
|
12
|
+
"@mnemoverse/mcp-memory-server@latest"
|
|
13
|
+
],
|
|
14
|
+
"env": {
|
|
15
|
+
"MNEMOVERSE_API_KEY": "mk_live_YOUR_KEY"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mnemoverse/mcp-memory-server",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2",
|
|
4
4
|
"description": "MCP server for Mnemoverse Memory API — persistent AI memory across Claude Code, Cursor, VS Code, and any MCP client",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
"start": "node dist/index.js",
|
|
15
15
|
"generate:configs": "node scripts/generate-configs.mjs",
|
|
16
16
|
"verify:configs": "node scripts/generate-configs.mjs --check",
|
|
17
|
+
"install-hooks": "node scripts/install-hooks.mjs",
|
|
17
18
|
"prebuild": "npm run generate:configs",
|
|
18
19
|
"prepublishOnly": "npm run build"
|
|
19
20
|
},
|