@mnemo-mcp/server 1.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.
- package/LICENSE +21 -0
- package/README.md +123 -0
- package/bin/mnemo-mcp.js +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +10 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +94 -0
- package/dist/server.js.map +1 -0
- package/package.json +47 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Omer Maksuti
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Mnemo
|
|
2
|
+
|
|
3
|
+
> Persistent memory for Claude Code. Your AI never starts from scratch again.
|
|
4
|
+
|
|
5
|
+
[](https://github.com/omermaksutii/mnemo/actions)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
|
|
8
|
+
Mnemo gives Claude Code a brain that survives across sessions. It captures decisions, conventions, and preferences — and recalls them by meaning, on demand, with sub-100ms semantic search.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Install
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# install the CLI
|
|
16
|
+
npm install -g @mnemo-mcp/cli
|
|
17
|
+
|
|
18
|
+
# install Mnemo into Claude Code (skill + MCP server)
|
|
19
|
+
mnemo init
|
|
20
|
+
|
|
21
|
+
# (optional) also wire auto-capture hooks
|
|
22
|
+
mnemo init --with-hooks
|
|
23
|
+
|
|
24
|
+
# verify
|
|
25
|
+
mnemo doctor
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
After `mnemo init`, restart Claude Code. The `/mnemo` skill and the `mnemo_*` MCP tools are now available — Claude will use them automatically when relevant.
|
|
29
|
+
|
|
30
|
+
## Use it from the terminal too
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
mnemo remember "our API auth uses OAuth2 with refresh tokens every 30min"
|
|
34
|
+
mnemo remember --global "I prefer pnpm over npm"
|
|
35
|
+
mnemo recall "what's our auth pattern?"
|
|
36
|
+
mnemo list
|
|
37
|
+
mnemo stats
|
|
38
|
+
mnemo forget <id>
|
|
39
|
+
mnemo export --out memories.json
|
|
40
|
+
mnemo import memories.json
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## What Mnemo solves
|
|
44
|
+
|
|
45
|
+
Claude Code forgets everything when the session ends. `CLAUDE.md` partially helps — it's a static blob loaded on every turn — but it grows unwieldy fast and can't answer "do we have a precedent for X?"
|
|
46
|
+
|
|
47
|
+
Mnemo gives you semantic, on-demand memory:
|
|
48
|
+
|
|
49
|
+
| | `CLAUDE.md` | Mnemo |
|
|
50
|
+
|---|---|---|
|
|
51
|
+
| Capacity | A handful of paragraphs before token cost hurts | Tens of thousands of memories |
|
|
52
|
+
| Retrieval | Always loaded, every turn | On demand, by meaning |
|
|
53
|
+
| Updates | You edit a file by hand | Captured automatically or via `/teach` |
|
|
54
|
+
| Cross-project | Per-project only | Project + global tiers |
|
|
55
|
+
| Forgetting | Manually delete lines | `mnemo forget <id>` or `/forget` |
|
|
56
|
+
|
|
57
|
+
## How it works
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
Claude Code session
|
|
61
|
+
├── /mnemo skill ← teaches Claude when to call the tools
|
|
62
|
+
├── @mnemo-mcp/server server ← exposes recall/remember/forget/list/stats
|
|
63
|
+
└── @mnemo-mcp/cli hooks ← session-start, pre-task, post-edit auto-wiring
|
|
64
|
+
│
|
|
65
|
+
▼
|
|
66
|
+
@mnemo-mcp/core
|
|
67
|
+
├── ONNX all-MiniLM-L6-v2 (384-dim embeddings, ~25MB, lazy)
|
|
68
|
+
├── HNSW vector index (sub-100ms recall at 50k memories)
|
|
69
|
+
└── sql.js (WASM SQLite) (~/.mnemo/memory.db)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Everything is local-first. No daemon. No cloud account. No telemetry.
|
|
73
|
+
|
|
74
|
+
## Auto-capture rules
|
|
75
|
+
|
|
76
|
+
By default the post-edit hook captures any change to:
|
|
77
|
+
|
|
78
|
+
- `CLAUDE.md`, `AGENTS.md`, `GEMINI.md`
|
|
79
|
+
- `*.adr.md`
|
|
80
|
+
- `docs/decisions/**`
|
|
81
|
+
- `docs/adr/**`
|
|
82
|
+
|
|
83
|
+
Anything you write to those files becomes a project memory automatically. Disable with `mnemo init` (no `--with-hooks`).
|
|
84
|
+
|
|
85
|
+
## Recall scoring
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
score = 0.7 × cosine_similarity + 0.2 × recency + 0.1 × access_boost
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Recency decays with a 30-day half-life. Access boost saturates at 20 reads.
|
|
92
|
+
|
|
93
|
+
## Layout
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
@mnemo-mcp/core — pure TS memory engine
|
|
97
|
+
@mnemo-mcp/server — MCP server (drop into Claude Code)
|
|
98
|
+
@mnemo-mcp/cli — terminal commands + hook handlers + init
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Roadmap
|
|
102
|
+
|
|
103
|
+
- ✅ **v0.1** — core engine + CLI
|
|
104
|
+
- ✅ **v0.2** — MCP server (5 tools)
|
|
105
|
+
- ✅ **v0.3** — hooks (session-start, pre-task, post-edit)
|
|
106
|
+
- ✅ **v0.4** — `/mnemo` skill
|
|
107
|
+
- ✅ **v1.0** — `mnemo init`, beefier doctor, CI, polish
|
|
108
|
+
- ⏳ **v1.1** — team mode (git-synced shared memory)
|
|
109
|
+
- ⏳ **v2.0** — opt-in hosted sync, web UI
|
|
110
|
+
|
|
111
|
+
## Development
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
npm install
|
|
115
|
+
npm test # fast (44 tests, hash embedder)
|
|
116
|
+
MNEMO_TEST_ONNX=1 MNEMO_E2E=1 npm test # full incl. real ONNX (~5s)
|
|
117
|
+
npm run build
|
|
118
|
+
npm run lint
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## License
|
|
122
|
+
|
|
123
|
+
MIT — see [LICENSE](LICENSE).
|
package/bin/mnemo-mcp.js
ADDED
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
2
|
+
import { createServer } from './server.js';
|
|
3
|
+
async function main() {
|
|
4
|
+
const { server, close } = await createServer();
|
|
5
|
+
const transport = new StdioServerTransport();
|
|
6
|
+
process.on('SIGINT', async () => {
|
|
7
|
+
await close();
|
|
8
|
+
process.exit(0);
|
|
9
|
+
});
|
|
10
|
+
process.on('SIGTERM', async () => {
|
|
11
|
+
await close();
|
|
12
|
+
process.exit(0);
|
|
13
|
+
});
|
|
14
|
+
await server.connect(transport);
|
|
15
|
+
}
|
|
16
|
+
main().catch(err => {
|
|
17
|
+
console.error('mnemo-mcp:', err);
|
|
18
|
+
process.exit(1);
|
|
19
|
+
});
|
|
20
|
+
export { createServer } from './server.js';
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,KAAK,UAAU,IAAI;IACjB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,EAAE,CAAC;IAC/C,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,KAAK,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAC/B,MAAM,KAAK,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
export type CreateServerOpts = {
|
|
3
|
+
dataDir?: string;
|
|
4
|
+
embedderType?: 'onnx' | 'hash';
|
|
5
|
+
};
|
|
6
|
+
export declare function createServer(opts?: CreateServerOpts): Promise<{
|
|
7
|
+
server: McpServer;
|
|
8
|
+
close: () => Promise<void>;
|
|
9
|
+
}>;
|
|
10
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAChC,CAAC;AAEF,wBAAsB,YAAY,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CA6H1H"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { Mnemo, projectHashOf } from '@mnemo-mcp/core';
|
|
4
|
+
export async function createServer(opts = {}) {
|
|
5
|
+
const embedderType = opts.embedderType ?? (process.env.MNEMO_EMBEDDER === 'hash' ? 'hash' : 'onnx');
|
|
6
|
+
const mnemo = await Mnemo.open({ dataDir: opts.dataDir, embedderType });
|
|
7
|
+
const server = new McpServer({
|
|
8
|
+
name: 'mnemo',
|
|
9
|
+
version: '0.2.0',
|
|
10
|
+
});
|
|
11
|
+
server.tool('mnemo_recall', 'Semantic recall of stored memories', {
|
|
12
|
+
query: z.string().describe('Natural-language query'),
|
|
13
|
+
k: z.number().int().positive().max(50).optional().describe('Number of results (default 5)'),
|
|
14
|
+
scope: z.enum(['project', 'global', 'all']).optional().describe('Memory scope filter (default: all)'),
|
|
15
|
+
project_hash: z.string().optional().describe('Project hash; defaults to hash of cwd when scope=project'),
|
|
16
|
+
min_score: z.number().min(0).max(1).optional().describe('Minimum composite score (default 0)'),
|
|
17
|
+
}, async (args) => {
|
|
18
|
+
const projectHash = args.scope === 'project' ? args.project_hash ?? projectHashOf(process.cwd()) : undefined;
|
|
19
|
+
const hits = await mnemo.recall(args.query, {
|
|
20
|
+
k: args.k ?? 5,
|
|
21
|
+
scope: args.scope,
|
|
22
|
+
projectHash,
|
|
23
|
+
minScore: args.min_score ?? 0,
|
|
24
|
+
});
|
|
25
|
+
if (hits.length === 0) {
|
|
26
|
+
return { content: [{ type: 'text', text: 'no matching memories' }] };
|
|
27
|
+
}
|
|
28
|
+
const lines = hits.map(h => `• [${h.record.id.slice(0, 8)}] (score ${h.score.toFixed(3)}, sim ${h.similarity.toFixed(3)}) ${h.record.scope}: ${h.record.content}`);
|
|
29
|
+
return { content: [{ type: 'text', text: lines.join('\n') }] };
|
|
30
|
+
});
|
|
31
|
+
server.tool('mnemo_remember', 'Capture a memory', {
|
|
32
|
+
content: z.string().describe('What to remember'),
|
|
33
|
+
scope: z.enum(['project', 'global']).optional().describe('Scope (default: project)'),
|
|
34
|
+
tags: z.array(z.string()).optional().describe('Optional tags'),
|
|
35
|
+
project_hash: z.string().optional().describe('Project hash; defaults to hash of cwd'),
|
|
36
|
+
}, async (args) => {
|
|
37
|
+
const scope = args.scope ?? 'project';
|
|
38
|
+
const projectHash = scope === 'global' ? null : args.project_hash ?? projectHashOf(process.cwd());
|
|
39
|
+
const rec = await mnemo.capture({
|
|
40
|
+
content: args.content,
|
|
41
|
+
scope,
|
|
42
|
+
projectHash,
|
|
43
|
+
tags: args.tags ?? [],
|
|
44
|
+
source: 'manual',
|
|
45
|
+
});
|
|
46
|
+
return { content: [{ type: 'text', text: `saved ${rec.id.slice(0, 8)} (${scope})` }] };
|
|
47
|
+
});
|
|
48
|
+
server.tool('mnemo_forget', 'Delete a memory by id (full or 8-char prefix)', {
|
|
49
|
+
id: z.string().describe('Memory id'),
|
|
50
|
+
}, async (args) => {
|
|
51
|
+
const list = await mnemo.list({});
|
|
52
|
+
const match = list.find(r => r.id === args.id || r.id.startsWith(args.id));
|
|
53
|
+
if (!match) {
|
|
54
|
+
return { content: [{ type: 'text', text: `no memory matches "${args.id}"` }] };
|
|
55
|
+
}
|
|
56
|
+
await mnemo.forget(match.id);
|
|
57
|
+
return { content: [{ type: 'text', text: `forgotten ${match.id.slice(0, 8)}` }] };
|
|
58
|
+
});
|
|
59
|
+
server.tool('mnemo_list', 'List recent memories', {
|
|
60
|
+
scope: z.enum(['project', 'global']).optional().describe('Filter scope'),
|
|
61
|
+
limit: z.number().int().positive().max(200).optional().describe('Max results (default 20)'),
|
|
62
|
+
project_hash: z.string().optional(),
|
|
63
|
+
}, async (args) => {
|
|
64
|
+
const list = await mnemo.list({
|
|
65
|
+
scope: args.scope,
|
|
66
|
+
projectHash: args.project_hash,
|
|
67
|
+
limit: args.limit ?? 20,
|
|
68
|
+
});
|
|
69
|
+
if (list.length === 0) {
|
|
70
|
+
return { content: [{ type: 'text', text: 'no memories yet' }] };
|
|
71
|
+
}
|
|
72
|
+
const lines = list.map(r => `• [${r.id.slice(0, 8)}] ${r.scope}: ${r.content}`);
|
|
73
|
+
return { content: [{ type: 'text', text: lines.join('\n') }] };
|
|
74
|
+
});
|
|
75
|
+
server.tool('mnemo_stats', 'Show memory engine stats', {}, async () => {
|
|
76
|
+
const s = await mnemo.stats();
|
|
77
|
+
const text = [
|
|
78
|
+
`total: ${s.totalMemories}`,
|
|
79
|
+
` project: ${s.byScope.project}`,
|
|
80
|
+
` global: ${s.byScope.global}`,
|
|
81
|
+
`index size: ${s.indexSize}`,
|
|
82
|
+
`embedding dim: ${s.embeddingDimension}`,
|
|
83
|
+
`storage bytes: ${s.storageBytes}`,
|
|
84
|
+
].join('\n');
|
|
85
|
+
return { content: [{ type: 'text', text }] };
|
|
86
|
+
});
|
|
87
|
+
return {
|
|
88
|
+
server,
|
|
89
|
+
close: async () => {
|
|
90
|
+
await mnemo.close();
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mnemo-mcp/server",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Mnemo MCP server — exposes persistent memory tools to Claude Code",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Omer Maksuti",
|
|
7
|
+
"homepage": "https://github.com/omermaksutii/mnemo#readme",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/omermaksutii/mnemo.git",
|
|
11
|
+
"directory": "packages/mcp"
|
|
12
|
+
},
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/omermaksutii/mnemo/issues"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"mnemo",
|
|
18
|
+
"mcp",
|
|
19
|
+
"mcp-server",
|
|
20
|
+
"claude-code",
|
|
21
|
+
"memory",
|
|
22
|
+
"anthropic",
|
|
23
|
+
"model-context-protocol"
|
|
24
|
+
],
|
|
25
|
+
"type": "module",
|
|
26
|
+
"main": "dist/index.js",
|
|
27
|
+
"types": "dist/index.d.ts",
|
|
28
|
+
"bin": {
|
|
29
|
+
"mnemo-mcp": "./bin/mnemo-mcp.js"
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"dist",
|
|
33
|
+
"bin"
|
|
34
|
+
],
|
|
35
|
+
"scripts": {
|
|
36
|
+
"build": "tsc",
|
|
37
|
+
"test": "vitest run"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@mnemo-mcp/core": "1.0.0",
|
|
41
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
42
|
+
"zod": "^3.23.0"
|
|
43
|
+
},
|
|
44
|
+
"publishConfig": {
|
|
45
|
+
"access": "public"
|
|
46
|
+
}
|
|
47
|
+
}
|