@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 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
+ [![CI](https://github.com/omermaksutii/mnemo/actions/workflows/ci.yml/badge.svg)](https://github.com/omermaksutii/mnemo/actions)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](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).
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/index.js');
@@ -0,0 +1,2 @@
1
+ export { createServer } from './server.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -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
+ }