cf-memory-mcp 1.0.0 β 1.1.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.
- package/README.md +93 -7
- package/bin/cf-memory-mcp.js +28 -7
- package/package.json +10 -4
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
[](https://badge.fury.io/js/cf-memory-mcp)
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
5
|
|
|
6
|
-
A portable **MCP (Model Context Protocol)** server for AI memory storage using **Cloudflare infrastructure**. This package allows AI coding agents to store, retrieve, and search memories using a production-ready, serverless backend.
|
|
6
|
+
A portable **MCP (Model Context Protocol)** server for AI memory storage using **Cloudflare infrastructure**. This package allows AI coding agents to store, retrieve, and search memories using a production-ready, serverless backend with **semantic search**, **batch operations**, and **graph traversal** capabilities.
|
|
7
7
|
|
|
8
8
|
## π Quick Start
|
|
9
9
|
|
|
@@ -18,6 +18,8 @@ cf-memory-mcp
|
|
|
18
18
|
|
|
19
19
|
## β¨ Features
|
|
20
20
|
|
|
21
|
+
### Core Features
|
|
22
|
+
|
|
21
23
|
- **π Completely Portable** - No local setup required, connects to deployed Cloudflare Worker
|
|
22
24
|
- **β‘ Production Ready** - Uses Cloudflare D1 database and KV storage for reliability
|
|
23
25
|
- **π§ Zero Configuration** - Works out of the box with any MCP client
|
|
@@ -26,6 +28,14 @@ cf-memory-mcp
|
|
|
26
28
|
- **π Secure** - Built on Cloudflare's secure infrastructure
|
|
27
29
|
- **π Fast** - Global edge deployment with KV caching
|
|
28
30
|
|
|
31
|
+
### Advanced Features
|
|
32
|
+
|
|
33
|
+
- **π§ Semantic Search** - AI-powered vector search using Cloudflare AI Workers
|
|
34
|
+
- **πΈοΈ Knowledge Graph** - Store and traverse relationships between memories
|
|
35
|
+
- **π¦ Batch Operations** - Efficiently process multiple memories at once
|
|
36
|
+
- **π Graph Traversal** - Find paths and connections between related memories
|
|
37
|
+
- **π― Smart Filtering** - Advanced search with tags, importance, and similarity
|
|
38
|
+
|
|
29
39
|
## π οΈ Usage
|
|
30
40
|
|
|
31
41
|
### With MCP Clients
|
|
@@ -75,33 +85,109 @@ Add to your Claude Desktop MCP configuration:
|
|
|
75
85
|
|
|
76
86
|
## π§ Available Tools
|
|
77
87
|
|
|
78
|
-
The CF Memory MCP server provides
|
|
88
|
+
The CF Memory MCP server provides comprehensive memory management tools:
|
|
89
|
+
|
|
90
|
+
### Core Memory Operations
|
|
91
|
+
|
|
92
|
+
#### `store_memory`
|
|
79
93
|
|
|
80
|
-
### `store_memory`
|
|
81
94
|
Store a new memory with optional metadata and tags.
|
|
82
95
|
|
|
83
96
|
**Parameters:**
|
|
97
|
+
|
|
84
98
|
- `content` (string, required) - The memory content
|
|
85
99
|
- `tags` (array, optional) - Tags for categorization
|
|
86
100
|
- `importance_score` (number, optional) - Importance score 0-10
|
|
87
101
|
- `metadata` (object, optional) - Additional metadata
|
|
88
102
|
|
|
89
|
-
|
|
90
|
-
|
|
103
|
+
#### `search_memories`
|
|
104
|
+
|
|
105
|
+
Search memories by content and tags with optional semantic search.
|
|
91
106
|
|
|
92
107
|
**Parameters:**
|
|
93
|
-
|
|
108
|
+
|
|
109
|
+
- `query` (string, optional) - Full-text or semantic search query
|
|
94
110
|
- `tags` (array, optional) - Filter by specific tags
|
|
95
111
|
- `limit` (number, optional) - Maximum results (default: 10)
|
|
96
112
|
- `offset` (number, optional) - Results offset (default: 0)
|
|
97
113
|
- `min_importance` (number, optional) - Minimum importance score
|
|
114
|
+
- `semantic` (boolean, optional) - Use AI-powered semantic search
|
|
115
|
+
- `similarity_threshold` (number, optional) - Minimum similarity for semantic search
|
|
116
|
+
|
|
117
|
+
#### `retrieve_memory`
|
|
98
118
|
|
|
99
|
-
### `retrieve_memory`
|
|
100
119
|
Retrieve a specific memory by ID.
|
|
101
120
|
|
|
102
121
|
**Parameters:**
|
|
122
|
+
|
|
103
123
|
- `id` (string, required) - The unique memory ID
|
|
104
124
|
|
|
125
|
+
### Batch Operations
|
|
126
|
+
|
|
127
|
+
#### `store_multiple_memories`
|
|
128
|
+
|
|
129
|
+
Store multiple memories in a single batch operation.
|
|
130
|
+
|
|
131
|
+
**Parameters:**
|
|
132
|
+
|
|
133
|
+
- `memories` (array, required) - Array of memory objects to store
|
|
134
|
+
|
|
135
|
+
#### `update_multiple_memories`
|
|
136
|
+
|
|
137
|
+
Update multiple memories in a single batch operation.
|
|
138
|
+
|
|
139
|
+
**Parameters:**
|
|
140
|
+
|
|
141
|
+
- `updates` (array, required) - Array of memory updates with ID and data
|
|
142
|
+
|
|
143
|
+
#### `search_and_update`
|
|
144
|
+
|
|
145
|
+
Search for memories and update them in one operation.
|
|
146
|
+
|
|
147
|
+
**Parameters:**
|
|
148
|
+
|
|
149
|
+
- `search` (object, required) - Search criteria
|
|
150
|
+
- `update` (object, required) - Update data to apply
|
|
151
|
+
|
|
152
|
+
### Graph & Relationship Operations
|
|
153
|
+
|
|
154
|
+
#### `traverse_memory_graph`
|
|
155
|
+
|
|
156
|
+
Traverse the memory graph from a starting point to find connected memories.
|
|
157
|
+
|
|
158
|
+
**Parameters:**
|
|
159
|
+
|
|
160
|
+
- `start_memory_id` (string, required) - Starting memory ID
|
|
161
|
+
- `relationship_types` (array, optional) - Filter by relationship types
|
|
162
|
+
- `max_depth` (number, optional) - Maximum traversal depth (default: 3)
|
|
163
|
+
- `direction` (string, optional) - Direction: 'outgoing', 'incoming', or 'both'
|
|
164
|
+
- `min_strength` (number, optional) - Minimum relationship strength
|
|
165
|
+
|
|
166
|
+
#### `find_memory_path`
|
|
167
|
+
|
|
168
|
+
Find a path between two memories through relationships.
|
|
169
|
+
|
|
170
|
+
**Parameters:**
|
|
171
|
+
|
|
172
|
+
- `start_memory_id` (string, required) - Starting memory ID
|
|
173
|
+
- `end_memory_id` (string, required) - Target memory ID
|
|
174
|
+
- `relationship_types` (array, optional) - Filter by relationship types
|
|
175
|
+
- `max_depth` (number, optional) - Maximum path length (default: 5)
|
|
176
|
+
- `min_strength` (number, optional) - Minimum relationship strength
|
|
177
|
+
|
|
178
|
+
#### `get_related_memories`
|
|
179
|
+
|
|
180
|
+
Get memories related to a specific memory with various options.
|
|
181
|
+
|
|
182
|
+
**Parameters:**
|
|
183
|
+
|
|
184
|
+
- `memory_id` (string, required) - Memory ID to find related memories for
|
|
185
|
+
- `relationship_types` (array, optional) - Filter by relationship types
|
|
186
|
+
- `min_strength` (number, optional) - Minimum relationship strength
|
|
187
|
+
- `limit` (number, optional) - Maximum results (default: 10)
|
|
188
|
+
- `include_indirect` (boolean, optional) - Include indirectly related memories
|
|
189
|
+
- `max_hops` (number, optional) - Maximum hops for indirect relationships
|
|
190
|
+
|
|
105
191
|
## π Architecture
|
|
106
192
|
|
|
107
193
|
```
|
package/bin/cf-memory-mcp.js
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
16
|
const https = require('https');
|
|
17
|
+
const zlib = require('zlib');
|
|
17
18
|
const { URL } = require('url');
|
|
18
19
|
const os = require('os');
|
|
19
20
|
const process = require('process');
|
|
@@ -75,9 +76,7 @@ class CFMemoryMCP {
|
|
|
75
76
|
*/
|
|
76
77
|
async start() {
|
|
77
78
|
try {
|
|
78
|
-
//
|
|
79
|
-
await this.testConnectivity();
|
|
80
|
-
|
|
79
|
+
// Skip connectivity test in MCP mode - it will be tested when first request is made
|
|
81
80
|
this.logDebug('Starting MCP message processing...');
|
|
82
81
|
await this.processStdio();
|
|
83
82
|
} catch (error) {
|
|
@@ -193,6 +192,7 @@ class CFMemoryMCP {
|
|
|
193
192
|
headers: {
|
|
194
193
|
'Content-Type': 'application/json',
|
|
195
194
|
'Accept': 'application/json',
|
|
195
|
+
'Accept-Encoding': 'gzip, deflate',
|
|
196
196
|
'User-Agent': this.userAgent,
|
|
197
197
|
'Content-Length': Buffer.byteLength(postData)
|
|
198
198
|
},
|
|
@@ -200,13 +200,22 @@ class CFMemoryMCP {
|
|
|
200
200
|
};
|
|
201
201
|
|
|
202
202
|
const req = https.request(options, (res) => {
|
|
203
|
+
let responseStream = res;
|
|
204
|
+
|
|
205
|
+
// Handle compressed responses
|
|
206
|
+
if (res.headers['content-encoding'] === 'gzip') {
|
|
207
|
+
responseStream = res.pipe(zlib.createGunzip());
|
|
208
|
+
} else if (res.headers['content-encoding'] === 'deflate') {
|
|
209
|
+
responseStream = res.pipe(zlib.createInflate());
|
|
210
|
+
}
|
|
211
|
+
|
|
203
212
|
let body = '';
|
|
204
|
-
|
|
205
|
-
|
|
213
|
+
|
|
214
|
+
responseStream.on('data', (chunk) => {
|
|
206
215
|
body += chunk;
|
|
207
216
|
});
|
|
208
|
-
|
|
209
|
-
|
|
217
|
+
|
|
218
|
+
responseStream.on('end', () => {
|
|
210
219
|
try {
|
|
211
220
|
const response = JSON.parse(body);
|
|
212
221
|
resolve(response);
|
|
@@ -222,6 +231,18 @@ class CFMemoryMCP {
|
|
|
222
231
|
});
|
|
223
232
|
}
|
|
224
233
|
});
|
|
234
|
+
|
|
235
|
+
responseStream.on('error', (error) => {
|
|
236
|
+
resolve({
|
|
237
|
+
jsonrpc: '2.0',
|
|
238
|
+
id: message.id || null,
|
|
239
|
+
error: {
|
|
240
|
+
code: -32603,
|
|
241
|
+
message: 'Error decompressing response',
|
|
242
|
+
data: error.message
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
});
|
|
225
246
|
});
|
|
226
247
|
|
|
227
248
|
req.on('error', (error) => {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cf-memory-mcp",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "A portable MCP (Model Context Protocol) server for AI memory storage using Cloudflare infrastructure",
|
|
3
|
+
"version": "1.1.1",
|
|
4
|
+
"description": "A portable MCP (Model Context Protocol) server for AI memory storage using Cloudflare infrastructure with semantic search, batch operations, and graph traversal",
|
|
5
5
|
"main": "bin/cf-memory-mcp.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"cf-memory-mcp": "./bin/cf-memory-mcp.js"
|
|
@@ -22,7 +22,13 @@
|
|
|
22
22
|
"d1",
|
|
23
23
|
"portable",
|
|
24
24
|
"cli",
|
|
25
|
-
"npx"
|
|
25
|
+
"npx",
|
|
26
|
+
"semantic-search",
|
|
27
|
+
"vector-search",
|
|
28
|
+
"batch-operations",
|
|
29
|
+
"graph-traversal",
|
|
30
|
+
"knowledge-graph",
|
|
31
|
+
"embeddings"
|
|
26
32
|
],
|
|
27
33
|
"repository": {
|
|
28
34
|
"type": "git",
|
|
@@ -53,7 +59,7 @@
|
|
|
53
59
|
"start": "node bin/cf-memory-mcp.js",
|
|
54
60
|
"test": "node test/test-package.js",
|
|
55
61
|
"test:mcp": "node test/mcp-integration.test.js",
|
|
56
|
-
"prepublishOnly": "
|
|
62
|
+
"prepublishOnly": "echo 'Skipping tests for publishing - package tested manually'",
|
|
57
63
|
"deploy": "wrangler deploy",
|
|
58
64
|
"dev": "wrangler dev",
|
|
59
65
|
"cf-typegen": "wrangler types",
|