@aeriondyseti/vector-memory-mcp 0.9.0-dev.4 → 0.9.0-dev.8
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 +1 -21
- package/dist/package.json +72 -0
- package/dist/src/config/index.d.ts +1 -0
- package/dist/src/config/index.d.ts.map +1 -1
- package/dist/src/config/index.js +4 -2
- package/dist/src/config/index.js.map +1 -1
- package/dist/src/db/memory.repository.d.ts +27 -2
- package/dist/src/db/memory.repository.d.ts.map +1 -1
- package/dist/src/db/memory.repository.js +101 -22
- package/dist/src/db/memory.repository.js.map +1 -1
- package/dist/src/db/schema.d.ts.map +1 -1
- package/dist/src/db/schema.js +4 -1
- package/dist/src/db/schema.js.map +1 -1
- package/dist/src/http/server.d.ts +1 -0
- package/dist/src/http/server.d.ts.map +1 -1
- package/dist/src/http/server.js +47 -5
- package/dist/src/http/server.js.map +1 -1
- package/dist/src/mcp/handlers.d.ts +1 -0
- package/dist/src/mcp/handlers.d.ts.map +1 -1
- package/dist/src/mcp/handlers.js +24 -1
- package/dist/src/mcp/handlers.js.map +1 -1
- package/dist/src/mcp/tools.d.ts +1 -0
- package/dist/src/mcp/tools.d.ts.map +1 -1
- package/dist/src/mcp/tools.js +43 -14
- package/dist/src/mcp/tools.js.map +1 -1
- package/dist/src/services/memory.service.d.ts +4 -2
- package/dist/src/services/memory.service.d.ts.map +1 -1
- package/dist/src/services/memory.service.js +86 -17
- package/dist/src/services/memory.service.js.map +1 -1
- package/dist/src/types/memory.d.ts +15 -4
- package/dist/src/types/memory.d.ts.map +1 -1
- package/dist/src/types/memory.js +3 -0
- package/dist/src/types/memory.js.map +1 -1
- package/package.json +8 -9
- package/src/config/index.ts +78 -0
- package/src/db/connection.ts +11 -0
- package/src/db/memory.repository.ts +205 -0
- package/src/db/schema.ts +42 -0
- package/src/http/mcp-transport.ts +255 -0
- package/src/http/server.ts +264 -0
- package/src/index.ts +70 -0
- package/src/mcp/handlers.ts +279 -0
- package/src/mcp/server.ts +34 -0
- package/src/mcp/tools.ts +284 -0
- package/src/services/embeddings.service.ts +48 -0
- package/src/services/memory.service.ts +266 -0
- package/src/types/memory.ts +43 -0
- package/dist/scripts/publish.d.ts +0 -13
- package/dist/scripts/publish.d.ts.map +0 -1
- package/dist/scripts/publish.js +0 -56
- package/dist/scripts/publish.js.map +0 -1
- package/scripts/publish.ts +0 -61
package/README.md
CHANGED
|
@@ -23,28 +23,21 @@ A local-first MCP server that provides vector-based memory storage. Uses local e
|
|
|
23
23
|
|
|
24
24
|
### Prerequisites
|
|
25
25
|
|
|
26
|
-
- [Bun](https://bun.sh/) 1.0+
|
|
26
|
+
- [Bun](https://bun.sh/) 1.0+
|
|
27
27
|
- An MCP-compatible client (Claude Code, Claude Desktop, etc.)
|
|
28
28
|
|
|
29
29
|
### Install
|
|
30
30
|
|
|
31
|
-
**With Bun (recommended):**
|
|
32
31
|
```bash
|
|
33
32
|
bun install -g @aeriondyseti/vector-memory-mcp
|
|
34
33
|
```
|
|
35
34
|
|
|
36
|
-
**With npm/Node.js:**
|
|
37
|
-
```bash
|
|
38
|
-
npm install -g @aeriondyseti/vector-memory-mcp
|
|
39
|
-
```
|
|
40
|
-
|
|
41
35
|
> First install downloads ML models (~90MB). This may take a minute.
|
|
42
36
|
|
|
43
37
|
### Configure
|
|
44
38
|
|
|
45
39
|
Add to your MCP client config (e.g., `~/.claude/settings.json`):
|
|
46
40
|
|
|
47
|
-
**With Bun:**
|
|
48
41
|
```json
|
|
49
42
|
{
|
|
50
43
|
"mcpServers": {
|
|
@@ -57,19 +50,6 @@ Add to your MCP client config (e.g., `~/.claude/settings.json`):
|
|
|
57
50
|
}
|
|
58
51
|
```
|
|
59
52
|
|
|
60
|
-
**With Node.js:**
|
|
61
|
-
```json
|
|
62
|
-
{
|
|
63
|
-
"mcpServers": {
|
|
64
|
-
"vector-memory": {
|
|
65
|
-
"type": "stdio",
|
|
66
|
-
"command": "npx",
|
|
67
|
-
"args": ["-y", "@aeriondyseti/vector-memory-mcp"]
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
```
|
|
72
|
-
|
|
73
53
|
### Use
|
|
74
54
|
|
|
75
55
|
Restart your MCP client. You now have access to:
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@aeriondyseti/vector-memory-mcp",
|
|
3
|
+
"version": "0.9.0-dev.8",
|
|
4
|
+
"description": "A zero-configuration RAG memory server for MCP clients",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/src/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"vector-memory-mcp": "dist/src/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"src",
|
|
13
|
+
"scripts",
|
|
14
|
+
"hooks",
|
|
15
|
+
"README.md",
|
|
16
|
+
"LICENSE"
|
|
17
|
+
],
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "git+https://github.com/AerionDyseti/vector-memory-mcp.git"
|
|
21
|
+
},
|
|
22
|
+
"author": "AerionDyseti",
|
|
23
|
+
"bugs": {
|
|
24
|
+
"url": "https://github.com/AerionDyseti/vector-memory-mcp/issues"
|
|
25
|
+
},
|
|
26
|
+
"homepage": "https://github.com/AerionDyseti/vector-memory-mcp#readme",
|
|
27
|
+
"scripts": {
|
|
28
|
+
"start": "node dist/src/index.js",
|
|
29
|
+
"start:bun": "bun run src/index.ts",
|
|
30
|
+
"dev": "bun --watch run src/index.ts",
|
|
31
|
+
"build": "tsc",
|
|
32
|
+
"prebuild": "rm -rf dist",
|
|
33
|
+
"typecheck": "bunx tsc --noEmit",
|
|
34
|
+
"test": "bun run scripts/test-runner.ts",
|
|
35
|
+
"test:raw": "bun test --preload ./tests/preload.ts",
|
|
36
|
+
"test:quick": "bun test",
|
|
37
|
+
"test:coverage": "bun test --preload ./tests/preload.ts --coverage",
|
|
38
|
+
"benchmark": "bun test tests/benchmark.test.ts --preload ./tests/preload.ts",
|
|
39
|
+
"test:preload": "bun run tests/preload.ts",
|
|
40
|
+
"warmup": "bun run scripts/warmup.ts",
|
|
41
|
+
"postinstall": "bun run scripts/warmup.ts",
|
|
42
|
+
"prepublishOnly": "bun run build"
|
|
43
|
+
},
|
|
44
|
+
"keywords": [
|
|
45
|
+
"mcp",
|
|
46
|
+
"memory",
|
|
47
|
+
"rag",
|
|
48
|
+
"embeddings",
|
|
49
|
+
"lancedb"
|
|
50
|
+
],
|
|
51
|
+
"license": "MIT",
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"@hono/node-server": "^1.19.9",
|
|
54
|
+
"@huggingface/transformers": "^3.8.0",
|
|
55
|
+
"@lancedb/lancedb": "^0.22.3",
|
|
56
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
57
|
+
"arg": "^5.0.2",
|
|
58
|
+
"hono": "^4.11.3"
|
|
59
|
+
},
|
|
60
|
+
"devDependencies": {
|
|
61
|
+
"@types/bun": "latest",
|
|
62
|
+
"typescript": "^5.0.0"
|
|
63
|
+
},
|
|
64
|
+
"trustedDependencies": [
|
|
65
|
+
"onnxruntime-node",
|
|
66
|
+
"protobufjs",
|
|
67
|
+
"sharp"
|
|
68
|
+
],
|
|
69
|
+
"overrides": {
|
|
70
|
+
"onnxruntime-node": "1.23.2"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,OAAO,QAAsB,CAAC;AAE3C,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAaD,wBAAgB,UAAU,CAAC,SAAS,GAAE,eAAoB,GAAG,MAAM,CAclE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,eAAe,CAmB5D;AAGD,eAAO,MAAM,MAAM,QAAe,CAAC"}
|
package/dist/src/config/index.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import arg from "arg";
|
|
2
|
-
import { join } from "path";
|
|
2
|
+
import { isAbsolute, join } from "path";
|
|
3
|
+
import packageJson from "../../package.json" with { type: "json" };
|
|
4
|
+
export const VERSION = packageJson.version;
|
|
3
5
|
// Defaults - always use repo-local .vector-memory folder
|
|
4
6
|
const DEFAULT_DB_PATH = join(process.cwd(), ".vector-memory", "memories.db");
|
|
5
7
|
const DEFAULT_EMBEDDING_MODEL = "Xenova/all-MiniLM-L6-v2";
|
|
@@ -7,7 +9,7 @@ const DEFAULT_EMBEDDING_DIMENSION = 384;
|
|
|
7
9
|
const DEFAULT_HTTP_PORT = 3271;
|
|
8
10
|
const DEFAULT_HTTP_HOST = "127.0.0.1";
|
|
9
11
|
function resolvePath(path) {
|
|
10
|
-
return path
|
|
12
|
+
return isAbsolute(path) ? path : join(process.cwd(), path);
|
|
11
13
|
}
|
|
12
14
|
export function loadConfig(overrides = {}) {
|
|
13
15
|
const transportMode = overrides.transportMode ?? "stdio";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,WAAW,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAEnE,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;AAqB3C,yDAAyD;AACzD,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;AAC7E,MAAM,uBAAuB,GAAG,yBAAyB,CAAC;AAC1D,MAAM,2BAA2B,GAAG,GAAG,CAAC;AACxC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC/B,MAAM,iBAAiB,GAAG,WAAW,CAAC;AAEtC,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,YAA6B,EAAE;IACxD,MAAM,aAAa,GAAG,SAAS,CAAC,aAAa,IAAI,OAAO,CAAC;IACzD,yEAAyE;IACzE,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,IAAI,IAAI,CAAC;IAEhD,OAAO;QACL,MAAM,EAAE,WAAW,CAAC,SAAS,CAAC,MAAM,IAAI,eAAe,CAAC;QACxD,cAAc,EAAE,uBAAuB;QACvC,kBAAkB,EAAE,2BAA2B;QAC/C,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,iBAAiB;QACjD,QAAQ,EAAE,iBAAiB;QAC3B,UAAU;QACV,aAAa;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAc;IACzC,MAAM,IAAI,GAAG,GAAG,CACd;QACE,WAAW,EAAE,MAAM;QACnB,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE,OAAO;QAEpB,UAAU;QACV,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,QAAQ;KACf,EACD,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAC3B,CAAC;IAEF,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC;QACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;QACxB,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;KAClD,CAAC;AACJ,CAAC;AAED,qDAAqD;AACrD,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC"}
|
|
@@ -1,13 +1,38 @@
|
|
|
1
1
|
import * as lancedb from "@lancedb/lancedb";
|
|
2
|
-
import { type Memory, type
|
|
2
|
+
import { type Memory, type HybridRow } from "../types/memory.js";
|
|
3
3
|
export declare class MemoryRepository {
|
|
4
4
|
private db;
|
|
5
|
+
private ftsIndexPromise;
|
|
5
6
|
constructor(db: lancedb.Connection);
|
|
6
7
|
private getTable;
|
|
8
|
+
/**
|
|
9
|
+
* Ensures the FTS index exists on the content column.
|
|
10
|
+
* Uses a mutex pattern to prevent concurrent index creation.
|
|
11
|
+
* The key insight: we must capture the promise BEFORE any await.
|
|
12
|
+
*/
|
|
13
|
+
private ensureFtsIndex;
|
|
14
|
+
/**
|
|
15
|
+
* Creates the FTS index if it doesn't already exist.
|
|
16
|
+
* Gets its own table reference to ensure consistent index state.
|
|
17
|
+
*/
|
|
18
|
+
private createFtsIndexIfNeeded;
|
|
19
|
+
/**
|
|
20
|
+
* Converts a raw LanceDB row to a Memory object.
|
|
21
|
+
*/
|
|
22
|
+
private rowToMemory;
|
|
7
23
|
insert(memory: Memory): Promise<void>;
|
|
8
24
|
upsert(memory: Memory): Promise<void>;
|
|
9
25
|
findById(id: string): Promise<Memory | null>;
|
|
10
26
|
markDeleted(id: string): Promise<boolean>;
|
|
11
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Performs hybrid search combining vector similarity and full-text search.
|
|
29
|
+
* Uses RRF (Reciprocal Rank Fusion) to combine rankings from both search methods.
|
|
30
|
+
*
|
|
31
|
+
* @param embedding - Query embedding vector
|
|
32
|
+
* @param query - Text query for full-text search
|
|
33
|
+
* @param limit - Maximum number of results to return
|
|
34
|
+
* @returns Array of HybridRow containing full Memory data plus RRF score
|
|
35
|
+
*/
|
|
36
|
+
findHybrid(embedding: number[], query: string, limit: number): Promise<HybridRow[]>;
|
|
12
37
|
}
|
|
13
38
|
//# sourceMappingURL=memory.repository.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.repository.d.ts","sourceRoot":"","sources":["../../../src/db/memory.repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"memory.repository.d.ts","sourceRoot":"","sources":["../../../src/db/memory.repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAG5C,OAAO,EACL,KAAK,MAAM,EACX,KAAK,SAAS,EAEf,MAAM,oBAAoB,CAAC;AAE5B,qBAAa,gBAAgB;IAKf,OAAO,CAAC,EAAE;IAFtB,OAAO,CAAC,eAAe,CAA8B;gBAEjC,EAAE,EAAE,OAAO,CAAC,UAAU;YAE5B,QAAQ;IAStB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAiBtB;;;OAGG;YACW,sBAAsB;IAgBpC;;OAEG;IACH,OAAO,CAAC,WAAW;IAwBb,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBrC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBrC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAW5C,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqB/C;;;;;;;;OAQG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;CA2B1F"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import { Index, rerankers } from "@lancedb/lancedb";
|
|
1
2
|
import { TABLE_NAME, memorySchema } from "./schema.js";
|
|
2
3
|
import { DELETED_TOMBSTONE, } from "../types/memory.js";
|
|
3
4
|
export class MemoryRepository {
|
|
4
5
|
db;
|
|
6
|
+
// Mutex for FTS index creation - ensures only one index creation runs at a time
|
|
7
|
+
// Once set, this promise is never cleared (FTS index persists in the database)
|
|
8
|
+
ftsIndexPromise = null;
|
|
5
9
|
constructor(db) {
|
|
6
10
|
this.db = db;
|
|
7
11
|
}
|
|
@@ -13,6 +17,66 @@ export class MemoryRepository {
|
|
|
13
17
|
// Create with empty data to initialize schema
|
|
14
18
|
return await this.db.createTable(TABLE_NAME, [], { schema: memorySchema });
|
|
15
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Ensures the FTS index exists on the content column.
|
|
22
|
+
* Uses a mutex pattern to prevent concurrent index creation.
|
|
23
|
+
* The key insight: we must capture the promise BEFORE any await.
|
|
24
|
+
*/
|
|
25
|
+
ensureFtsIndex() {
|
|
26
|
+
// If there's already a pending or completed index creation, return that promise
|
|
27
|
+
if (this.ftsIndexPromise) {
|
|
28
|
+
return this.ftsIndexPromise;
|
|
29
|
+
}
|
|
30
|
+
// Synchronously set the promise BEFORE any await
|
|
31
|
+
// This is critical for proper mutex behavior in JS async code
|
|
32
|
+
this.ftsIndexPromise = this.createFtsIndexIfNeeded().catch((error) => {
|
|
33
|
+
// Reset on error so the next call can retry
|
|
34
|
+
this.ftsIndexPromise = null;
|
|
35
|
+
throw error;
|
|
36
|
+
});
|
|
37
|
+
return this.ftsIndexPromise;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Creates the FTS index if it doesn't already exist.
|
|
41
|
+
* Gets its own table reference to ensure consistent index state.
|
|
42
|
+
*/
|
|
43
|
+
async createFtsIndexIfNeeded() {
|
|
44
|
+
const table = await this.getTable();
|
|
45
|
+
const indices = await table.listIndices();
|
|
46
|
+
const hasFtsIndex = indices.some((idx) => idx.columns.includes("content") && idx.indexType === "FTS");
|
|
47
|
+
if (!hasFtsIndex) {
|
|
48
|
+
await table.createIndex("content", {
|
|
49
|
+
config: Index.fts(),
|
|
50
|
+
});
|
|
51
|
+
// Wait for the index to be fully created and available
|
|
52
|
+
await table.waitForIndex(["content_idx"], 30);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Converts a raw LanceDB row to a Memory object.
|
|
57
|
+
*/
|
|
58
|
+
rowToMemory(row) {
|
|
59
|
+
// Handle Arrow Vector type conversion
|
|
60
|
+
// LanceDB returns an Arrow Vector object which is iterable but not an array
|
|
61
|
+
const vectorData = row.vector;
|
|
62
|
+
const embedding = Array.isArray(vectorData)
|
|
63
|
+
? vectorData
|
|
64
|
+
: Array.from(vectorData);
|
|
65
|
+
return {
|
|
66
|
+
id: row.id,
|
|
67
|
+
content: row.content,
|
|
68
|
+
embedding,
|
|
69
|
+
metadata: JSON.parse(row.metadata),
|
|
70
|
+
createdAt: new Date(row.created_at),
|
|
71
|
+
updatedAt: new Date(row.updated_at),
|
|
72
|
+
supersededBy: row.superseded_by,
|
|
73
|
+
usefulness: row.usefulness ?? 0,
|
|
74
|
+
accessCount: row.access_count ?? 0,
|
|
75
|
+
lastAccessed: row.last_accessed
|
|
76
|
+
? new Date(row.last_accessed)
|
|
77
|
+
: null,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
16
80
|
async insert(memory) {
|
|
17
81
|
const table = await this.getTable();
|
|
18
82
|
await table.add([
|
|
@@ -24,6 +88,9 @@ export class MemoryRepository {
|
|
|
24
88
|
created_at: memory.createdAt.getTime(),
|
|
25
89
|
updated_at: memory.updatedAt.getTime(),
|
|
26
90
|
superseded_by: memory.supersededBy,
|
|
91
|
+
usefulness: memory.usefulness,
|
|
92
|
+
access_count: memory.accessCount,
|
|
93
|
+
last_accessed: memory.lastAccessed?.getTime() ?? null,
|
|
27
94
|
},
|
|
28
95
|
]);
|
|
29
96
|
}
|
|
@@ -42,6 +109,9 @@ export class MemoryRepository {
|
|
|
42
109
|
created_at: memory.createdAt.getTime(),
|
|
43
110
|
updated_at: memory.updatedAt.getTime(),
|
|
44
111
|
superseded_by: memory.supersededBy,
|
|
112
|
+
usefulness: memory.usefulness,
|
|
113
|
+
access_count: memory.accessCount,
|
|
114
|
+
last_accessed: memory.lastAccessed?.getTime() ?? null,
|
|
45
115
|
},
|
|
46
116
|
});
|
|
47
117
|
}
|
|
@@ -51,22 +121,7 @@ export class MemoryRepository {
|
|
|
51
121
|
if (results.length === 0) {
|
|
52
122
|
return null;
|
|
53
123
|
}
|
|
54
|
-
|
|
55
|
-
// Handle Arrow Vector type conversion
|
|
56
|
-
// LanceDB returns an Arrow Vector object which is iterable but not an array
|
|
57
|
-
const vectorData = row.vector;
|
|
58
|
-
const embedding = Array.isArray(vectorData)
|
|
59
|
-
? vectorData
|
|
60
|
-
: Array.from(vectorData);
|
|
61
|
-
return {
|
|
62
|
-
id: row.id,
|
|
63
|
-
content: row.content,
|
|
64
|
-
embedding,
|
|
65
|
-
metadata: JSON.parse(row.metadata),
|
|
66
|
-
createdAt: new Date(row.created_at),
|
|
67
|
-
updatedAt: new Date(row.updated_at),
|
|
68
|
-
supersededBy: row.superseded_by,
|
|
69
|
-
};
|
|
124
|
+
return this.rowToMemory(results[0]);
|
|
70
125
|
}
|
|
71
126
|
async markDeleted(id) {
|
|
72
127
|
const table = await this.getTable();
|
|
@@ -85,13 +140,37 @@ export class MemoryRepository {
|
|
|
85
140
|
});
|
|
86
141
|
return true;
|
|
87
142
|
}
|
|
88
|
-
|
|
143
|
+
/**
|
|
144
|
+
* Performs hybrid search combining vector similarity and full-text search.
|
|
145
|
+
* Uses RRF (Reciprocal Rank Fusion) to combine rankings from both search methods.
|
|
146
|
+
*
|
|
147
|
+
* @param embedding - Query embedding vector
|
|
148
|
+
* @param query - Text query for full-text search
|
|
149
|
+
* @param limit - Maximum number of results to return
|
|
150
|
+
* @returns Array of HybridRow containing full Memory data plus RRF score
|
|
151
|
+
*/
|
|
152
|
+
async findHybrid(embedding, query, limit) {
|
|
153
|
+
// Ensure FTS index exists (with mutex to prevent concurrent creation)
|
|
154
|
+
// This must happen BEFORE getTable to ensure proper mutex behavior
|
|
155
|
+
await this.ensureFtsIndex();
|
|
89
156
|
const table = await this.getTable();
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
157
|
+
// Create RRF reranker with k=60 (standard parameter)
|
|
158
|
+
const reranker = await rerankers.RRFReranker.create(60);
|
|
159
|
+
// Perform hybrid search: combine vector search and full-text search
|
|
160
|
+
const results = await table
|
|
161
|
+
.query()
|
|
162
|
+
.nearestTo(embedding)
|
|
163
|
+
.fullTextSearch(query)
|
|
164
|
+
.rerank(reranker)
|
|
165
|
+
.limit(limit)
|
|
166
|
+
.toArray();
|
|
167
|
+
return results.map((row) => {
|
|
168
|
+
const memory = this.rowToMemory(row);
|
|
169
|
+
return {
|
|
170
|
+
...memory,
|
|
171
|
+
rrfScore: row._relevance_score ?? 0,
|
|
172
|
+
};
|
|
173
|
+
});
|
|
95
174
|
}
|
|
96
175
|
}
|
|
97
176
|
//# sourceMappingURL=memory.repository.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.repository.js","sourceRoot":"","sources":["../../../src/db/memory.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAGL,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,OAAO,gBAAgB;
|
|
1
|
+
{"version":3,"file":"memory.repository.js","sourceRoot":"","sources":["../../../src/db/memory.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/db/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/db/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAQP,MAAM,cAAc,CAAC;AAEtB,eAAO,MAAM,UAAU,aAAa,CAAC;AAErC,eAAO,MAAM,YAAY,aA2BvB,CAAC"}
|
package/dist/src/db/schema.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Schema, Field, FixedSizeList, Float32, Utf8, Timestamp, TimeUnit, } from "apache-arrow";
|
|
1
|
+
import { Schema, Field, FixedSizeList, Float32, Utf8, Timestamp, TimeUnit, Int32, } from "apache-arrow";
|
|
2
2
|
export const TABLE_NAME = "memories";
|
|
3
3
|
export const memorySchema = new Schema([
|
|
4
4
|
new Field("id", new Utf8(), false),
|
|
@@ -8,5 +8,8 @@ export const memorySchema = new Schema([
|
|
|
8
8
|
new Field("created_at", new Timestamp(TimeUnit.MILLISECOND), false),
|
|
9
9
|
new Field("updated_at", new Timestamp(TimeUnit.MILLISECOND), false),
|
|
10
10
|
new Field("superseded_by", new Utf8(), true), // Nullable
|
|
11
|
+
new Field("usefulness", new Float32(), false),
|
|
12
|
+
new Field("access_count", new Int32(), false),
|
|
13
|
+
new Field("last_accessed", new Timestamp(TimeUnit.MILLISECOND), true),
|
|
11
14
|
]);
|
|
12
15
|
//# sourceMappingURL=schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/db/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,KAAK,EACL,aAAa,EACb,OAAO,EACP,IAAI,EACJ,SAAS,EACT,QAAQ,
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/db/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,KAAK,EACL,aAAa,EACb,OAAO,EACP,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,KAAK,GACN,MAAM,cAAc,CAAC;AAEtB,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;AAErC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC;IACrC,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC;IAClC,IAAI,KAAK,CACP,QAAQ,EACR,IAAI,aAAa,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC,CAAC,EACxD,KAAK,CACN;IACD,IAAI,KAAK,CAAC,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC;IACvC,IAAI,KAAK,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC,EAAE,cAAc;IACxD,IAAI,KAAK,CACP,YAAY,EACZ,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EACnC,KAAK,CACN;IACD,IAAI,KAAK,CACP,YAAY,EACZ,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EACnC,KAAK,CACN;IACD,IAAI,KAAK,CAAC,eAAe,EAAE,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,WAAW;IACzD,IAAI,KAAK,CAAC,YAAY,EAAE,IAAI,OAAO,EAAE,EAAE,KAAK,CAAC;IAC7C,IAAI,KAAK,CAAC,cAAc,EAAE,IAAI,KAAK,EAAE,EAAE,KAAK,CAAC;IAC7C,IAAI,KAAK,CACP,eAAe,EACf,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EACnC,IAAI,CACL;CACF,CAAC,CAAC"}
|
|
@@ -8,5 +8,6 @@ export interface HttpServerOptions {
|
|
|
8
8
|
export declare function createHttpApp(memoryService: MemoryService, config: Config): Hono;
|
|
9
9
|
export declare function startHttpServer(memoryService: MemoryService, config: Config): Promise<{
|
|
10
10
|
stop: () => void;
|
|
11
|
+
port: number;
|
|
11
12
|
}>;
|
|
12
13
|
//# sourceMappingURL=server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/http/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/http/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAqDjD,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;CAChB;AAKD,wBAAgB,aAAa,CAAC,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAyJhF;AAED,wBAAsB,eAAe,CACnC,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAuC7C"}
|
package/dist/src/http/server.js
CHANGED
|
@@ -1,10 +1,47 @@
|
|
|
1
1
|
import { Hono } from "hono";
|
|
2
2
|
import { cors } from "hono/cors";
|
|
3
3
|
import { serve as nodeServe } from "@hono/node-server";
|
|
4
|
+
import { createServer } from "net";
|
|
4
5
|
import { isDeleted } from "../types/memory.js";
|
|
5
6
|
import { createMcpRoutes } from "./mcp-transport.js";
|
|
6
7
|
// Detect runtime
|
|
7
8
|
const isBun = typeof globalThis.Bun !== "undefined";
|
|
9
|
+
/**
|
|
10
|
+
* Check if a port is available by attempting to bind to it
|
|
11
|
+
*/
|
|
12
|
+
async function isPortAvailable(port, host) {
|
|
13
|
+
return new Promise((resolve) => {
|
|
14
|
+
const server = createServer();
|
|
15
|
+
server.once("error", () => {
|
|
16
|
+
resolve(false);
|
|
17
|
+
});
|
|
18
|
+
server.once("listening", () => {
|
|
19
|
+
server.close(() => resolve(true));
|
|
20
|
+
});
|
|
21
|
+
server.listen(port, host);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Find an available port, starting with the preferred port.
|
|
26
|
+
* If preferred port is unavailable, picks a random available port.
|
|
27
|
+
*/
|
|
28
|
+
async function findAvailablePort(preferredPort, host) {
|
|
29
|
+
if (await isPortAvailable(preferredPort, host)) {
|
|
30
|
+
return preferredPort;
|
|
31
|
+
}
|
|
32
|
+
console.error(`[vector-memory-mcp] Port ${preferredPort} is in use, finding an available port...`);
|
|
33
|
+
// Let the OS pick a random available port
|
|
34
|
+
return new Promise((resolve, reject) => {
|
|
35
|
+
const server = createServer();
|
|
36
|
+
server.once("error", reject);
|
|
37
|
+
server.once("listening", () => {
|
|
38
|
+
const address = server.address();
|
|
39
|
+
const port = typeof address === "object" && address ? address.port : 0;
|
|
40
|
+
server.close(() => resolve(port));
|
|
41
|
+
});
|
|
42
|
+
server.listen(0, host);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
8
45
|
// Track server start time for uptime calculation
|
|
9
46
|
const startedAt = Date.now();
|
|
10
47
|
export function createHttpApp(memoryService, config) {
|
|
@@ -33,11 +70,12 @@ export function createHttpApp(memoryService, config) {
|
|
|
33
70
|
try {
|
|
34
71
|
const body = await c.req.json();
|
|
35
72
|
const query = body.query;
|
|
73
|
+
const intent = body.intent ?? "fact_check";
|
|
36
74
|
const limit = body.limit ?? 10;
|
|
37
75
|
if (!query || typeof query !== "string") {
|
|
38
76
|
return c.json({ error: "Missing or invalid 'query' field" }, 400);
|
|
39
77
|
}
|
|
40
|
-
const memories = await memoryService.search(query, limit);
|
|
78
|
+
const memories = await memoryService.search(query, intent, limit);
|
|
41
79
|
return c.json({
|
|
42
80
|
memories: memories.map((m) => ({
|
|
43
81
|
id: m.id,
|
|
@@ -140,28 +178,32 @@ export function createHttpApp(memoryService, config) {
|
|
|
140
178
|
}
|
|
141
179
|
export async function startHttpServer(memoryService, config) {
|
|
142
180
|
const app = createHttpApp(memoryService, config);
|
|
181
|
+
// Find an available port (uses configured port if available, otherwise picks a random one)
|
|
182
|
+
const actualPort = await findAvailablePort(config.httpPort, config.httpHost);
|
|
143
183
|
if (isBun) {
|
|
144
184
|
// Use Bun's native server
|
|
145
185
|
const server = Bun.serve({
|
|
146
|
-
port:
|
|
186
|
+
port: actualPort,
|
|
147
187
|
hostname: config.httpHost,
|
|
148
188
|
fetch: app.fetch,
|
|
149
189
|
});
|
|
150
|
-
console.error(`[vector-memory-mcp] HTTP server listening on http://${config.httpHost}:${
|
|
190
|
+
console.error(`[vector-memory-mcp] HTTP server listening on http://${config.httpHost}:${actualPort}`);
|
|
151
191
|
return {
|
|
152
192
|
stop: () => server.stop(),
|
|
193
|
+
port: actualPort,
|
|
153
194
|
};
|
|
154
195
|
}
|
|
155
196
|
else {
|
|
156
197
|
// Use Node.js server via @hono/node-server
|
|
157
198
|
const server = nodeServe({
|
|
158
199
|
fetch: app.fetch,
|
|
159
|
-
port:
|
|
200
|
+
port: actualPort,
|
|
160
201
|
hostname: config.httpHost,
|
|
161
202
|
});
|
|
162
|
-
console.error(`[vector-memory-mcp] HTTP server listening on http://${config.httpHost}:${
|
|
203
|
+
console.error(`[vector-memory-mcp] HTTP server listening on http://${config.httpHost}:${actualPort}`);
|
|
163
204
|
return {
|
|
164
205
|
stop: () => server.close(),
|
|
206
|
+
port: actualPort,
|
|
165
207
|
};
|
|
166
208
|
}
|
|
167
209
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/http/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/http/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ export declare function handleDeleteMemories(args: Record<string, unknown> | und
|
|
|
5
5
|
export declare function handleUpdateMemories(args: Record<string, unknown> | undefined, service: MemoryService): Promise<CallToolResult>;
|
|
6
6
|
export declare function handleSearchMemories(args: Record<string, unknown> | undefined, service: MemoryService): Promise<CallToolResult>;
|
|
7
7
|
export declare function handleGetMemories(args: Record<string, unknown> | undefined, service: MemoryService): Promise<CallToolResult>;
|
|
8
|
+
export declare function handleReportMemoryUsefulness(args: Record<string, unknown> | undefined, service: MemoryService): Promise<CallToolResult>;
|
|
8
9
|
export declare function handleStoreHandoff(args: Record<string, unknown> | undefined, service: MemoryService): Promise<CallToolResult>;
|
|
9
10
|
export declare function handleGetHandoff(_args: Record<string, unknown> | undefined, service: MemoryService): Promise<CallToolResult>;
|
|
10
11
|
export declare function handleToolCall(name: string, args: Record<string, unknown> | undefined, service: MemoryService): Promise<CallToolResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAGnE,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CA4BzB;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CAmBzB;AAGD,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CAgCzB;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CA4BzB;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CAgCzB;AAED,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CAqBzB;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CAgBzB;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC1C,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CA6BzB;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CAwBzB"}
|