universal-memory-mcp 0.1.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/README.md ADDED
@@ -0,0 +1,133 @@
1
+ # Universal Memory MCP Server
2
+
3
+ MCP Server for persistent AI memory across sessions. Works with any MCP-compatible AI CLI.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install -g universal-memory-mcp
9
+ ```
10
+
11
+ ## Configuration
12
+
13
+ ### Claude Desktop
14
+
15
+ Edit `~/Library/Application Support/Claude/claude_desktop_config.json`:
16
+
17
+ ```json
18
+ {
19
+ "mcpServers": {
20
+ "universal-memory": {
21
+ "command": "npx",
22
+ "args": ["-y", "universal-memory-mcp"]
23
+ }
24
+ }
25
+ }
26
+ ```
27
+
28
+ ### Claude Code CLI
29
+
30
+ Edit `~/.config/claude/settings.json`:
31
+
32
+ ```json
33
+ {
34
+ "mcpServers": {
35
+ "universal-memory": {
36
+ "command": "npx",
37
+ "args": ["-y", "universal-memory-mcp"]
38
+ }
39
+ }
40
+ }
41
+ ```
42
+
43
+ ## Tools
44
+
45
+ ### memory_search
46
+
47
+ Search through conversation history and long-term memories.
48
+
49
+ ```json
50
+ {
51
+ "query": "database decision",
52
+ "time_range": ["2026-01-01", "2026-01-31"],
53
+ "project": "my-project",
54
+ "limit": 10
55
+ }
56
+ ```
57
+
58
+ **When to use:**
59
+ - User asks about past discussions
60
+ - User references "we talked about before"
61
+ - Need to know user preferences (search "preferences")
62
+ - Need context from previous sessions
63
+
64
+ ### memory_record
65
+
66
+ Record conversation for future reference.
67
+
68
+ ```json
69
+ {
70
+ "user_message": "Help me design a REST API",
71
+ "ai_response": "Recommended RESTful patterns with resource-based URLs...",
72
+ "project": "my-project"
73
+ }
74
+ ```
75
+
76
+ **When to use:**
77
+ - After every meaningful conversation exchange
78
+ - To ensure continuity across sessions
79
+
80
+ ### memory_update_long_term
81
+
82
+ Store important information for easy retrieval.
83
+
84
+ ```json
85
+ {
86
+ "category": "preferences",
87
+ "content": "User prefers TypeScript over JavaScript"
88
+ }
89
+ ```
90
+
91
+ **Categories:**
92
+ - `preferences` - User's working style and preferences
93
+ - `decisions` - Important technical decisions
94
+ - `facts` - Key information about user/projects
95
+ - `contacts` - People and teams
96
+
97
+ ## How It Works
98
+
99
+ ```
100
+ User asks about past discussion
101
+
102
+
103
+ AI calls memory_search("topic")
104
+
105
+
106
+ Returns relevant memories
107
+
108
+
109
+ AI responds with context
110
+
111
+
112
+ AI calls memory_record() to save this exchange
113
+ ```
114
+
115
+ ## Storage
116
+
117
+ All data stored locally in `~/.ai_memory/`:
118
+
119
+ ```
120
+ ~/.ai_memory/
121
+ ├── daily/ # Daily conversation logs (YYYY-MM-DD.md)
122
+ ├── long_term/ # Important memories (MEMORY.md, preferences.md, etc.)
123
+ ├── projects/ # Project-specific state
124
+ └── config.json # Configuration
125
+ ```
126
+
127
+ ## Development
128
+
129
+ ```bash
130
+ pnpm install
131
+ pnpm build
132
+ node dist/index.js
133
+ ```
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Universal Memory MCP Server
4
+ *
5
+ * Provides MCP tools for persistent memory across AI sessions:
6
+ * - memory_search: Search conversation history and long-term memories
7
+ * - memory_record: Record conversations
8
+ * - memory_update_long_term: Update long-term memory
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG"}
package/dist/index.js ADDED
@@ -0,0 +1,237 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Universal Memory MCP Server
4
+ *
5
+ * Provides MCP tools for persistent memory across AI sessions:
6
+ * - memory_search: Search conversation history and long-term memories
7
+ * - memory_record: Record conversations
8
+ * - memory_update_long_term: Update long-term memory
9
+ */
10
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
11
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
12
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
13
+ import { createMemoryManager } from 'universal-memory-core';
14
+ // Create memory manager
15
+ const memoryManager = createMemoryManager();
16
+ // Create MCP Server
17
+ const server = new Server({
18
+ name: 'universal-memory-mcp',
19
+ version: '0.1.0',
20
+ }, {
21
+ capabilities: {
22
+ tools: {},
23
+ },
24
+ });
25
+ // Define tools
26
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
27
+ return {
28
+ tools: [
29
+ {
30
+ name: 'memory_search',
31
+ description: `Search through conversation history and long-term memories.
32
+
33
+ WHEN TO USE:
34
+ - When user asks about past discussions, decisions, or preferences
35
+ - When user references something "we talked about before"
36
+ - When you need context from previous sessions
37
+ - When user asks "what did we decide about X" or "remember when we..."
38
+ - When you need to know user preferences (search "preferences" or specific topic)
39
+
40
+ This searches across all recorded conversations and long-term memories.
41
+ Use specific keywords for better results (e.g., "TypeScript preferences", "database decision").`,
42
+ inputSchema: {
43
+ type: 'object',
44
+ properties: {
45
+ query: {
46
+ type: 'string',
47
+ description: 'Search keywords or question',
48
+ },
49
+ time_range: {
50
+ type: 'array',
51
+ items: { type: 'string' },
52
+ description: 'Time range [start_date, end_date], format: YYYY-MM-DD',
53
+ },
54
+ project: {
55
+ type: 'string',
56
+ description: 'Filter by project name',
57
+ },
58
+ limit: {
59
+ type: 'number',
60
+ description: 'Max results to return, default 10',
61
+ },
62
+ },
63
+ required: ['query'],
64
+ },
65
+ },
66
+ {
67
+ name: 'memory_record',
68
+ description: `Record the current conversation exchange for future reference.
69
+
70
+ WHEN TO USE:
71
+ - After EVERY meaningful conversation exchange
72
+ - When the conversation contains information worth remembering
73
+ - To ensure continuity across sessions
74
+
75
+ What to record:
76
+ - user_message: The user's question or request
77
+ - ai_response: Summary of your response (key points, not full text)
78
+
79
+ This builds memory over time, allowing recall of past discussions in future sessions.`,
80
+ inputSchema: {
81
+ type: 'object',
82
+ properties: {
83
+ user_message: {
84
+ type: 'string',
85
+ description: 'The user message/question',
86
+ },
87
+ ai_response: {
88
+ type: 'string',
89
+ description: 'Summary of your response (key points)',
90
+ },
91
+ project: {
92
+ type: 'string',
93
+ description: 'Project name if in a project context',
94
+ },
95
+ session_id: {
96
+ type: 'string',
97
+ description: 'Session ID for grouping related conversations',
98
+ },
99
+ },
100
+ required: ['user_message', 'ai_response'],
101
+ },
102
+ },
103
+ {
104
+ name: 'memory_update_long_term',
105
+ description: `Store important information in long-term memory for easy retrieval.
106
+
107
+ WHEN TO USE - Call this when you identify:
108
+ - User preferences (coding style, tools, communication preferences)
109
+ - Important decisions (architecture choices, technology selections)
110
+ - Key facts about user or their projects
111
+ - Contact information or team details
112
+
113
+ Categories:
114
+ - preferences: User's personal preferences and working style
115
+ - decisions: Important technical or project decisions
116
+ - facts: Key information about user, projects, or context
117
+ - contacts: People, teams, or organizations mentioned
118
+
119
+ Long-term memories are searchable via memory_search.`,
120
+ inputSchema: {
121
+ type: 'object',
122
+ properties: {
123
+ category: {
124
+ type: 'string',
125
+ enum: ['decisions', 'preferences', 'contacts', 'facts'],
126
+ description: 'Memory category',
127
+ },
128
+ content: {
129
+ type: 'string',
130
+ description: 'Content to remember',
131
+ },
132
+ },
133
+ required: ['category', 'content'],
134
+ },
135
+ },
136
+ ],
137
+ };
138
+ });
139
+ // Handle tool calls
140
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
141
+ const { name, arguments: args } = request.params;
142
+ try {
143
+ switch (name) {
144
+ case 'memory_search': {
145
+ const { query, time_range, project, limit } = args;
146
+ const results = await memoryManager.search(query, {
147
+ timeRange: time_range
148
+ ? [new Date(time_range[0]), new Date(time_range[1])]
149
+ : undefined,
150
+ project,
151
+ limit,
152
+ });
153
+ if (results.length === 0) {
154
+ return {
155
+ content: [
156
+ {
157
+ type: 'text',
158
+ text: `No memories found matching "${query}".`,
159
+ },
160
+ ],
161
+ };
162
+ }
163
+ const formatted = results
164
+ .map((r, i) => {
165
+ const date = r.timestamp.toISOString().split('T')[0];
166
+ const projectInfo = r.project ? ` [${r.project}]` : '';
167
+ return `### Result ${i + 1}${projectInfo} (${date}, relevance: ${(r.score * 100).toFixed(0)}%)\n\n${r.content}`;
168
+ })
169
+ .join('\n\n---\n\n');
170
+ return {
171
+ content: [
172
+ {
173
+ type: 'text',
174
+ text: `Found ${results.length} relevant memories:\n\n${formatted}`,
175
+ },
176
+ ],
177
+ };
178
+ }
179
+ case 'memory_record': {
180
+ const { user_message, ai_response, project, session_id } = args;
181
+ const conversation = await memoryManager.recordConversation(user_message, ai_response, {
182
+ project,
183
+ sessionId: session_id,
184
+ });
185
+ return {
186
+ content: [
187
+ {
188
+ type: 'text',
189
+ text: `Conversation recorded (ID: ${conversation.id})`,
190
+ },
191
+ ],
192
+ };
193
+ }
194
+ case 'memory_update_long_term': {
195
+ const { category, content } = args;
196
+ await memoryManager.updateLongTermMemory(category, content);
197
+ return {
198
+ content: [
199
+ {
200
+ type: 'text',
201
+ text: `Stored in long-term memory [${category}]:\n\n${content}`,
202
+ },
203
+ ],
204
+ };
205
+ }
206
+ default:
207
+ throw new Error(`Unknown tool: ${name}`);
208
+ }
209
+ }
210
+ catch (error) {
211
+ const message = error instanceof Error ? error.message : String(error);
212
+ return {
213
+ content: [
214
+ {
215
+ type: 'text',
216
+ text: `Error: ${message}`,
217
+ },
218
+ ],
219
+ isError: true,
220
+ };
221
+ }
222
+ });
223
+ // Start server
224
+ async function main() {
225
+ // Initialize memory system
226
+ await memoryManager.initialize();
227
+ console.error('Universal Memory MCP Server starting...');
228
+ console.error(`Storage path: ${memoryManager.getStoragePath()}`);
229
+ const transport = new StdioServerTransport();
230
+ await server.connect(transport);
231
+ console.error('Universal Memory MCP Server running');
232
+ }
233
+ main().catch((error) => {
234
+ console.error('Fatal error:', error);
235
+ process.exit(1);
236
+ });
237
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "universal-memory-mcp",
3
+ "version": "0.1.2",
4
+ "description": "MCP Server for persistent AI memory across sessions",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "bin": {
9
+ "universal-memory-mcp": "./dist/index.js"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/index.js",
14
+ "types": "./dist/index.d.ts"
15
+ }
16
+ },
17
+ "scripts": {
18
+ "build": "tsc",
19
+ "dev": "tsc --watch",
20
+ "clean": "rm -rf dist",
21
+ "start": "node dist/index.js",
22
+ "test": "vitest"
23
+ },
24
+ "dependencies": {
25
+ "@modelcontextprotocol/sdk": "^1.0.0",
26
+ "universal-memory-core": "^0.1.2"
27
+ },
28
+ "devDependencies": {
29
+ "@types/node": "^20.11.0",
30
+ "typescript": "^5.3.0",
31
+ "vitest": "^1.2.0"
32
+ },
33
+ "keywords": [
34
+ "mcp",
35
+ "memory",
36
+ "ai",
37
+ "claude",
38
+ "context",
39
+ "model-context-protocol"
40
+ ],
41
+ "author": "slicenferqin",
42
+ "license": "MIT",
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "git+https://github.com/slicenferqin/universal-memory-mcp.git",
46
+ "directory": "packages/mcp-server"
47
+ },
48
+ "homepage": "https://github.com/slicenferqin/universal-memory-mcp#readme",
49
+ "files": [
50
+ "dist",
51
+ "README.md"
52
+ ]
53
+ }