@danielzfliu/memory 1.0.2 → 2.1.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/dist/config.js ADDED
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_MEMORY_CONFIG = void 0;
4
+ exports.resolveConfig = resolveConfig;
5
+ exports.DEFAULT_MEMORY_CONFIG = {
6
+ chromaUrl: "http://localhost:8000",
7
+ ollamaUrl: "http://localhost:11434",
8
+ embeddingModel: "nomic-embed-text-v2-moe:latest",
9
+ generationModel: "gemma3:latest",
10
+ collectionName: "pieces",
11
+ };
12
+ const ENV_CONFIG_KEYS = {
13
+ chromaUrl: ["MEMORY_CHROMA_URL", "CHROMA_URL"],
14
+ ollamaUrl: ["MEMORY_OLLAMA_URL", "OLLAMA_URL"],
15
+ embeddingModel: ["MEMORY_EMBEDDING_MODEL", "EMBEDDING_MODEL"],
16
+ generationModel: ["MEMORY_GENERATION_MODEL", "GENERATION_MODEL"],
17
+ collectionName: ["MEMORY_COLLECTION_NAME", "COLLECTION_NAME"],
18
+ };
19
+ function resolveEnvOverride(keys) {
20
+ for (const key of keys) {
21
+ const value = process.env[key]?.trim();
22
+ if (value) {
23
+ return value;
24
+ }
25
+ }
26
+ return undefined;
27
+ }
28
+ function resolveConfig(config = {}) {
29
+ return {
30
+ chromaUrl: config.chromaUrl ??
31
+ resolveEnvOverride(ENV_CONFIG_KEYS.chromaUrl) ??
32
+ exports.DEFAULT_MEMORY_CONFIG.chromaUrl,
33
+ ollamaUrl: config.ollamaUrl ??
34
+ resolveEnvOverride(ENV_CONFIG_KEYS.ollamaUrl) ??
35
+ exports.DEFAULT_MEMORY_CONFIG.ollamaUrl,
36
+ embeddingModel: config.embeddingModel ??
37
+ resolveEnvOverride(ENV_CONFIG_KEYS.embeddingModel) ??
38
+ exports.DEFAULT_MEMORY_CONFIG.embeddingModel,
39
+ generationModel: config.generationModel ??
40
+ resolveEnvOverride(ENV_CONFIG_KEYS.generationModel) ??
41
+ exports.DEFAULT_MEMORY_CONFIG.generationModel,
42
+ collectionName: config.collectionName ??
43
+ resolveEnvOverride(ENV_CONFIG_KEYS.collectionName) ??
44
+ exports.DEFAULT_MEMORY_CONFIG.collectionName,
45
+ };
46
+ }
47
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AA6BA,sCAuBC;AAlDY,QAAA,qBAAqB,GAA2B;IACzD,SAAS,EAAE,uBAAuB;IAClC,SAAS,EAAE,wBAAwB;IACnC,cAAc,EAAE,gCAAgC;IAChD,eAAe,EAAE,eAAe;IAChC,cAAc,EAAE,QAAQ;CAC3B,CAAC;AAEF,MAAM,eAAe,GAAmD;IACpE,SAAS,EAAE,CAAC,mBAAmB,EAAE,YAAY,CAAC;IAC9C,SAAS,EAAE,CAAC,mBAAmB,EAAE,YAAY,CAAC;IAC9C,cAAc,EAAE,CAAC,wBAAwB,EAAE,iBAAiB,CAAC;IAC7D,eAAe,EAAE,CAAC,yBAAyB,EAAE,kBAAkB,CAAC;IAChE,cAAc,EAAE,CAAC,wBAAwB,EAAE,iBAAiB,CAAC;CAChE,CAAC;AAEF,SAAS,kBAAkB,CAAC,IAAc;IACtC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;QACvC,IAAI,KAAK,EAAE,CAAC;YACR,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAgB,aAAa,CAAC,SAAuB,EAAE;IACnD,OAAO;QACH,SAAS,EACL,MAAM,CAAC,SAAS;YAChB,kBAAkB,CAAC,eAAe,CAAC,SAAS,CAAC;YAC7C,6BAAqB,CAAC,SAAS;QACnC,SAAS,EACL,MAAM,CAAC,SAAS;YAChB,kBAAkB,CAAC,eAAe,CAAC,SAAS,CAAC;YAC7C,6BAAqB,CAAC,SAAS;QACnC,cAAc,EACV,MAAM,CAAC,cAAc;YACrB,kBAAkB,CAAC,eAAe,CAAC,cAAc,CAAC;YAClD,6BAAqB,CAAC,cAAc;QACxC,eAAe,EACX,MAAM,CAAC,eAAe;YACtB,kBAAkB,CAAC,eAAe,CAAC,eAAe,CAAC;YACnD,6BAAqB,CAAC,eAAe;QACzC,cAAc,EACV,MAAM,CAAC,cAAc;YACrB,kBAAkB,CAAC,eAAe,CAAC,cAAc,CAAC;YAClD,6BAAqB,CAAC,cAAc;KAC3C,CAAC;AACN,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=http-main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-main.d.ts","sourceRoot":"","sources":["../src/http-main.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const server_1 = require("./server");
4
+ const PORT = process.env.PORT ?? 3000;
5
+ const app = (0, server_1.createServer)();
6
+ app.listen(PORT, () => {
7
+ console.log(`Memory RAG server running on http://localhost:${PORT}`);
8
+ });
9
+ //# sourceMappingURL=http-main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-main.js","sourceRoot":"","sources":["../src/http-main.ts"],"names":[],"mappings":";;AAAA,qCAAwC;AAExC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;AACtC,MAAM,GAAG,GAAG,IAAA,qBAAY,GAAE,CAAC;AAC3B,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IAClB,OAAO,CAAC,GAAG,CAAC,iDAAiD,IAAI,EAAE,CAAC,CAAC;AACzE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare function tokenize(text: string): string[];
2
+ export declare function keywordScore(queryTokens: string[], docText: string): number;
3
+ export interface RankedItem<T> {
4
+ item: T;
5
+ score: number;
6
+ }
7
+ export declare function reciprocalRankFusion<T>(rankings: RankedItem<T>[][], idFn: (item: T) => string, k?: number): RankedItem<T>[];
8
+ //# sourceMappingURL=hybrid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hybrid.d.ts","sourceRoot":"","sources":["../src/hybrid.ts"],"names":[],"mappings":"AAUA,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAK/C;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAQ3E;AAED,MAAM,WAAW,UAAU,CAAC,CAAC;IACzB,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EAClC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,EAC3B,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,EACzB,CAAC,SAAK,GACP,UAAU,CAAC,CAAC,CAAC,EAAE,CAejB"}
package/dist/hybrid.js ADDED
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ // ── Hybrid search helpers ────────────────────────────────────────────────────
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.tokenize = tokenize;
5
+ exports.keywordScore = keywordScore;
6
+ exports.reciprocalRankFusion = reciprocalRankFusion;
7
+ const STOP_WORDS = new Set([
8
+ "a", "an", "the", "is", "are", "was", "were", "be", "been", "being",
9
+ "have", "has", "had", "do", "does", "did", "will", "would", "shall",
10
+ "should", "may", "might", "must", "can", "could", "of", "in", "to",
11
+ "for", "with", "on", "at", "from", "by", "as", "into", "about",
12
+ "it", "its", "this", "that", "and", "or", "but", "not", "no", "so",
13
+ ]);
14
+ function tokenize(text) {
15
+ return text
16
+ .toLowerCase()
17
+ .split(/[^a-z0-9]+/)
18
+ .filter((t) => t.length > 1 && !STOP_WORDS.has(t));
19
+ }
20
+ function keywordScore(queryTokens, docText) {
21
+ if (queryTokens.length === 0)
22
+ return 0;
23
+ const docLower = docText.toLowerCase();
24
+ let matches = 0;
25
+ for (const token of queryTokens) {
26
+ if (docLower.includes(token))
27
+ matches++;
28
+ }
29
+ return matches / queryTokens.length;
30
+ }
31
+ function reciprocalRankFusion(rankings, idFn, k = 60) {
32
+ const scores = new Map();
33
+ const items = new Map();
34
+ for (const ranking of rankings) {
35
+ for (let rank = 0; rank < ranking.length; rank++) {
36
+ const id = idFn(ranking[rank].item);
37
+ scores.set(id, (scores.get(id) ?? 0) + 1 / (k + rank + 1));
38
+ if (!items.has(id))
39
+ items.set(id, ranking[rank].item);
40
+ }
41
+ }
42
+ return Array.from(scores.entries())
43
+ .sort((a, b) => b[1] - a[1])
44
+ .map(([id, score]) => ({ item: items.get(id), score }));
45
+ }
46
+ //# sourceMappingURL=hybrid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hybrid.js","sourceRoot":"","sources":["../src/hybrid.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  export { PieceStore } from "./store";
2
2
  export { RagPipeline } from "./rag";
3
3
  export { EmbeddingClient } from "./embeddings";
4
+ export { MemoryMcpServer } from "./mcp";
4
5
  export { createServer } from "./server";
5
- export { Piece, MemoryConfig, DEFAULT_MEMORY_CONFIG, QueryOptions, QueryResult, RagResult, } from "./types";
6
+ export { Piece, MemoryConfig, QueryOptions, QueryResult, RagResult, } from "./types";
7
+ export { DEFAULT_MEMORY_CONFIG } from "./config";
6
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EACH,KAAK,EACL,YAAY,EACZ,qBAAqB,EACrB,YAAY,EACZ,WAAW,EACX,SAAS,GACZ,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EACH,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,SAAS,GACZ,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC"}
package/dist/index.js CHANGED
@@ -1,14 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFAULT_MEMORY_CONFIG = exports.createServer = exports.EmbeddingClient = exports.RagPipeline = exports.PieceStore = void 0;
3
+ exports.DEFAULT_MEMORY_CONFIG = exports.createServer = exports.MemoryMcpServer = exports.EmbeddingClient = exports.RagPipeline = exports.PieceStore = void 0;
4
4
  var store_1 = require("./store");
5
5
  Object.defineProperty(exports, "PieceStore", { enumerable: true, get: function () { return store_1.PieceStore; } });
6
6
  var rag_1 = require("./rag");
7
7
  Object.defineProperty(exports, "RagPipeline", { enumerable: true, get: function () { return rag_1.RagPipeline; } });
8
8
  var embeddings_1 = require("./embeddings");
9
9
  Object.defineProperty(exports, "EmbeddingClient", { enumerable: true, get: function () { return embeddings_1.EmbeddingClient; } });
10
+ var mcp_1 = require("./mcp");
11
+ Object.defineProperty(exports, "MemoryMcpServer", { enumerable: true, get: function () { return mcp_1.MemoryMcpServer; } });
10
12
  var server_1 = require("./server");
11
13
  Object.defineProperty(exports, "createServer", { enumerable: true, get: function () { return server_1.createServer; } });
12
- var types_1 = require("./types");
13
- Object.defineProperty(exports, "DEFAULT_MEMORY_CONFIG", { enumerable: true, get: function () { return types_1.DEFAULT_MEMORY_CONFIG; } });
14
+ var config_1 = require("./config");
15
+ Object.defineProperty(exports, "DEFAULT_MEMORY_CONFIG", { enumerable: true, get: function () { return config_1.DEFAULT_MEMORY_CONFIG; } });
14
16
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iCAAqC;AAA5B,mGAAA,UAAU,OAAA;AACnB,6BAAoC;AAA3B,kGAAA,WAAW,OAAA;AACpB,2CAA+C;AAAtC,6GAAA,eAAe,OAAA;AACxB,mCAAwC;AAA/B,sGAAA,YAAY,OAAA;AACrB,iCAOiB;AAJb,8GAAA,qBAAqB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iCAAqC;AAA5B,mGAAA,UAAU,OAAA;AACnB,6BAAoC;AAA3B,kGAAA,WAAW,OAAA;AACpB,2CAA+C;AAAtC,6GAAA,eAAe,OAAA;AACxB,6BAAwC;AAA/B,sGAAA,eAAe,OAAA;AACxB,mCAAwC;AAA/B,sGAAA,YAAY,OAAA;AAQrB,mCAAiD;AAAxC,+GAAA,qBAAqB,OAAA"}
package/dist/main.d.ts CHANGED
@@ -1,2 +1,3 @@
1
+ #!/usr/bin/env node
1
2
  export {};
2
3
  //# sourceMappingURL=main.d.ts.map
package/dist/main.js CHANGED
@@ -1,9 +1,10 @@
1
+ #!/usr/bin/env node
1
2
  "use strict";
2
3
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const server_1 = require("./server");
4
- const PORT = process.env.PORT ?? 3000;
5
- const app = (0, server_1.createServer)();
6
- app.listen(PORT, () => {
7
- console.log(`Memory RAG server running on http://localhost:${PORT}`);
4
+ const mcp_1 = require("./mcp");
5
+ const server = new mcp_1.MemoryMcpServer();
6
+ server.start().catch((err) => {
7
+ console.error("Failed to start MCP server:", err);
8
+ process.exit(1);
8
9
  });
9
10
  //# sourceMappingURL=main.js.map
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;AAAA,qCAAwC;AAExC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;AACtC,MAAM,GAAG,GAAG,IAAA,qBAAY,GAAE,CAAC;AAC3B,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IAClB,OAAO,CAAC,GAAG,CAAC,iDAAiD,IAAI,EAAE,CAAC,CAAC;AACzE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;;AAEA,+BAAwC;AAExC,MAAM,MAAM,GAAG,IAAI,qBAAe,EAAE,CAAC;AACrC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACzB,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;IAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
package/dist/mcp.d.ts ADDED
@@ -0,0 +1,20 @@
1
+ import { Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
2
+ import { MemoryConfig } from "./types";
3
+ export declare class MemoryMcpServer {
4
+ private readonly mcpServer;
5
+ private readonly store;
6
+ private readonly rag;
7
+ private initPromise;
8
+ constructor(config?: MemoryConfig);
9
+ /**
10
+ * Start the server using the given transport (defaults to stdio).
11
+ */
12
+ start(transport?: Transport): Promise<void>;
13
+ /**
14
+ * Shut down the server and its transport.
15
+ */
16
+ close(): Promise<void>;
17
+ private ensureStoreInitialized;
18
+ private registerTools;
19
+ }
20
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAI1E,OAAO,EAAE,YAAY,EAAiC,MAAM,SAAS,CAAC;AAuBtE,qBAAa,eAAe;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,WAAW,CAA8B;gBAErC,MAAM,GAAE,YAAiB;IAiBrC;;OAEG;IACG,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAMd,sBAAsB;IAcpC,OAAO,CAAC,aAAa;CAwIxB"}
package/dist/mcp.js ADDED
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MemoryMcpServer = void 0;
7
+ const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
8
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
9
+ const zod_1 = require("zod");
10
+ const store_1 = require("./store");
11
+ const rag_1 = require("./rag");
12
+ const config_1 = require("./config");
13
+ const package_json_1 = __importDefault(require("../package.json"));
14
+ // ──────────────────────────────────────────────────────────────────────────────
15
+ // Helpers
16
+ // ──────────────────────────────────────────────────────────────────────────────
17
+ function toJsonText(payload) {
18
+ return JSON.stringify(payload, null, 2);
19
+ }
20
+ function toolResult(payload, isError = false) {
21
+ return {
22
+ content: [{ type: "text", text: toJsonText(payload) }],
23
+ ...(isError ? { isError: true } : {}),
24
+ };
25
+ }
26
+ // ──────────────────────────────────────────────────────────────────────────────
27
+ // MCP Server
28
+ // ──────────────────────────────────────────────────────────────────────────────
29
+ class MemoryMcpServer {
30
+ mcpServer;
31
+ store;
32
+ rag;
33
+ initPromise = null;
34
+ constructor(config = {}) {
35
+ const resolved = (0, config_1.resolveConfig)(config);
36
+ this.store = new store_1.PieceStore(resolved);
37
+ this.rag = new rag_1.RagPipeline(this.store, resolved.ollamaUrl, resolved.generationModel);
38
+ this.mcpServer = new mcp_js_1.McpServer({
39
+ name: "memory",
40
+ version: package_json_1.default.version,
41
+ });
42
+ this.registerTools();
43
+ }
44
+ /**
45
+ * Start the server using the given transport (defaults to stdio).
46
+ */
47
+ async start(transport) {
48
+ const t = transport ?? new stdio_js_1.StdioServerTransport();
49
+ await this.mcpServer.connect(t);
50
+ }
51
+ /**
52
+ * Shut down the server and its transport.
53
+ */
54
+ async close() {
55
+ await this.mcpServer.close();
56
+ }
57
+ // ── Store lifecycle ─────────────────────────────────────────────────────
58
+ async ensureStoreInitialized() {
59
+ if (!this.initPromise) {
60
+ this.initPromise = this.store.init();
61
+ }
62
+ try {
63
+ await this.initPromise;
64
+ }
65
+ catch (err) {
66
+ this.initPromise = null;
67
+ throw err;
68
+ }
69
+ }
70
+ // ── Tool registration ───────────────────────────────────────────────────
71
+ registerTools() {
72
+ this.mcpServer.registerTool("add_piece", {
73
+ description: "Add a tagged text piece to the memory store.",
74
+ inputSchema: zod_1.z.object({
75
+ content: zod_1.z.string().describe("Piece content"),
76
+ title: zod_1.z.string().optional().describe("Optional title for display and retrieval context"),
77
+ tags: zod_1.z.array(zod_1.z.string()).optional().describe("Optional tags for filtering and retrieval"),
78
+ collection: zod_1.z.string().optional().describe("Optional collection name (defaults to the configured collection)"),
79
+ }),
80
+ }, async ({ content, title, tags, collection }) => {
81
+ await this.ensureStoreInitialized();
82
+ const piece = await this.store.addPiece(content, tags ?? [], title, collection);
83
+ return toolResult(piece);
84
+ });
85
+ this.mcpServer.registerTool("get_piece", {
86
+ description: "Get a piece by ID.",
87
+ inputSchema: zod_1.z.object({
88
+ id: zod_1.z.string().describe("Piece ID"),
89
+ collection: zod_1.z.string().optional().describe("Optional collection name (defaults to the configured collection)"),
90
+ }),
91
+ }, async ({ id, collection }) => {
92
+ await this.ensureStoreInitialized();
93
+ const piece = await this.store.getPiece(id, collection);
94
+ return toolResult({ found: !!piece, piece });
95
+ });
96
+ this.mcpServer.registerTool("update_piece", {
97
+ description: "Update a piece's content and/or tags.",
98
+ inputSchema: zod_1.z.object({
99
+ id: zod_1.z.string().describe("Piece ID"),
100
+ content: zod_1.z.string().optional().describe("New content (optional)"),
101
+ title: zod_1.z.union([zod_1.z.string(), zod_1.z.null()]).optional().describe("New title, or null to clear it (optional)"),
102
+ tags: zod_1.z.array(zod_1.z.string()).optional().describe("New tags (optional)"),
103
+ collection: zod_1.z.string().optional().describe("Optional collection name (defaults to the configured collection)"),
104
+ }),
105
+ }, async ({ id, content, title, tags, collection }) => {
106
+ await this.ensureStoreInitialized();
107
+ const piece = await this.store.updatePiece(id, content, tags, title, collection);
108
+ return toolResult({ found: !!piece, piece });
109
+ });
110
+ this.mcpServer.registerTool("delete_piece", {
111
+ description: "Delete a piece by ID.",
112
+ inputSchema: zod_1.z.object({
113
+ id: zod_1.z.string().describe("Piece ID"),
114
+ collection: zod_1.z.string().optional().describe("Optional collection name (defaults to the configured collection)"),
115
+ }),
116
+ }, async ({ id, collection }) => {
117
+ await this.ensureStoreInitialized();
118
+ await this.store.deletePiece(id, collection);
119
+ return toolResult({ deleted: true, id });
120
+ });
121
+ this.mcpServer.registerTool("query_pieces", {
122
+ description: "Run semantic search over pieces. Enable hybrid search to combine vector similarity with keyword matching via Reciprocal Rank Fusion.",
123
+ inputSchema: zod_1.z.object({
124
+ query: zod_1.z.string().describe("Semantic query text"),
125
+ tags: zod_1.z.array(zod_1.z.string()).optional().describe("Optional tag filter"),
126
+ topK: zod_1.z.number().int().positive().optional().describe("Maximum number of results (default: 10)"),
127
+ useHybridSearch: zod_1.z.boolean().optional().describe("Combine vector and keyword search via RRF (default: false)"),
128
+ collection: zod_1.z.string().optional().describe("Optional collection name (defaults to the configured collection)"),
129
+ }),
130
+ }, async ({ query, tags, topK, useHybridSearch, collection }) => {
131
+ await this.ensureStoreInitialized();
132
+ const results = await this.store.queryPieces(query, { tags, topK, useHybridSearch }, collection);
133
+ return toolResult(results);
134
+ });
135
+ this.mcpServer.registerTool("rag_query", {
136
+ description: "Run full RAG: retrieve relevant pieces and generate an answer.",
137
+ inputSchema: zod_1.z.object({
138
+ query: zod_1.z.string().describe("User question"),
139
+ tags: zod_1.z.array(zod_1.z.string()).optional().describe("Optional tag filter"),
140
+ topK: zod_1.z.number().int().positive().optional().describe("Maximum number of retrieved sources"),
141
+ useHybridSearch: zod_1.z.boolean().optional().describe("Combine vector and keyword search via RRF (default: false)"),
142
+ collection: zod_1.z.string().optional().describe("Optional collection name (defaults to the configured collection)"),
143
+ }),
144
+ }, async ({ query, tags, topK, useHybridSearch, collection }) => {
145
+ await this.ensureStoreInitialized();
146
+ const result = await this.rag.query(query, { tags, topK, useHybridSearch }, collection);
147
+ return toolResult(result);
148
+ });
149
+ this.mcpServer.registerTool("list_collections", {
150
+ description: "List all collection names in the memory store.",
151
+ inputSchema: zod_1.z.object({}),
152
+ }, async () => {
153
+ await this.ensureStoreInitialized();
154
+ const collections = await this.store.listCollections();
155
+ return toolResult({ collections });
156
+ });
157
+ this.mcpServer.registerTool("delete_collection", {
158
+ description: "Delete an entire collection and all its pieces from the memory store.",
159
+ inputSchema: zod_1.z.object({
160
+ collection: zod_1.z.string().describe("Name of the collection to delete"),
161
+ }),
162
+ }, async ({ collection }) => {
163
+ await this.ensureStoreInitialized();
164
+ await this.store.deleteCollection(collection);
165
+ return toolResult({ deleted: true, collection });
166
+ });
167
+ }
168
+ }
169
+ exports.MemoryMcpServer = MemoryMcpServer;
170
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
package/dist/rag.d.ts CHANGED
@@ -5,6 +5,6 @@ export declare class RagPipeline {
5
5
  private readonly ollama;
6
6
  private readonly model;
7
7
  constructor(store: PieceStore, ollamaUrl: string, model: string);
8
- query(query: string, options?: QueryOptions): Promise<RagResult>;
8
+ query(query: string, options?: QueryOptions, collection?: string): Promise<RagResult>;
9
9
  }
10
10
  //# sourceMappingURL=rag.d.ts.map
package/dist/rag.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"rag.d.ts","sourceRoot":"","sources":["../src/rag.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAElD,qBAAa,WAAW;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAMzD,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,SAAS,CAAC;CAuC7E"}
1
+ {"version":3,"file":"rag.d.ts","sourceRoot":"","sources":["../src/rag.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAElD,qBAAa,WAAW;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAMzD,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;CA+ClG"}
package/dist/rag.js CHANGED
@@ -11,8 +11,8 @@ class RagPipeline {
11
11
  this.ollama = new ollama_1.Ollama({ host: ollamaUrl });
12
12
  this.model = model;
13
13
  }
14
- async query(query, options = {}) {
15
- const sources = await this.store.queryPieces(query, options);
14
+ async query(query, options = {}, collection) {
15
+ const sources = await this.store.queryPieces(query, options, collection);
16
16
  if (sources.length === 0) {
17
17
  return {
18
18
  answer: "I don't have enough context to answer this question. " +
@@ -21,12 +21,19 @@ class RagPipeline {
21
21
  };
22
22
  }
23
23
  const contextBlock = sources
24
- .map((s, i) => `[${i + 1}] (tags: ${s.piece.tags.join(", ")})\n${s.piece.content}`)
24
+ .map((s, i) => `[${i + 1}]${s.piece.title ? ` ${s.piece.title}` : ""} (tags: ${s.piece.tags.join(", ")})\n${s.piece.content}`)
25
25
  .join("\n\n");
26
- const systemPrompt = "You are a helpful assistant. Answer the user's question based on the provided context. " +
27
- "If the context does not contain enough information, say so. " +
28
- "Cite sources by their number when relevant.";
29
- const userPrompt = `Context:\n${contextBlock}\n\nQuestion: ${query}`;
26
+ const systemPrompt = "You are a retrieval-grounded assistant. Answer the user's question using only the provided context. " +
27
+ "Do not use outside knowledge, background assumptions, or examples that are not explicitly supported by the context. " +
28
+ "If the context is incomplete or does not answer the question, say that you do not have enough context instead of guessing. " +
29
+ "Keep the answer concise. Cite sources for every supported factual claim with source numbers like [1].";
30
+ const userPrompt = `Context:\n${contextBlock}\n\n` +
31
+ `Question: ${query}\n\n` +
32
+ "Instructions:\n" +
33
+ "- Use only the context above.\n" +
34
+ "- Do not mention tools, frameworks, companies, or facts that do not appear in the context.\n" +
35
+ "- If the context is insufficient, explicitly say so.\n" +
36
+ "- Cite supported statements with source numbers.";
30
37
  const response = await this.ollama.chat({
31
38
  model: this.model,
32
39
  messages: [
package/dist/rag.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"rag.js","sourceRoot":"","sources":["../src/rag.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;AAIhC,MAAa,WAAW;IACH,KAAK,CAAa;IAClB,MAAM,CAAS;IACf,KAAK,CAAS;IAE/B,YAAY,KAAiB,EAAE,SAAiB,EAAE,KAAa;QAC3D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,UAAwB,EAAE;QACjD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAE7D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO;gBACH,MAAM,EACF,uDAAuD;oBACvD,sDAAsD;gBAC1D,OAAO,EAAE,EAAE;aACd,CAAC;QACN,CAAC;QAED,MAAM,YAAY,GAAG,OAAO;aACvB,GAAG,CACA,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACL,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAC1E;aACA,IAAI,CAAC,MAAM,CAAC,CAAC;QAElB,MAAM,YAAY,GACd,yFAAyF;YACzF,8DAA8D;YAC9D,6CAA6C,CAAC;QAElD,MAAM,UAAU,GAAG,aAAa,YAAY,iBAAiB,KAAK,EAAE,CAAC;QAErE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACpC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE;gBACN,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;gBACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE;aACxC;SACJ,CAAC,CAAC;QAEH,OAAO;YACH,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO;YAChC,OAAO;SACV,CAAC;IACN,CAAC;CACJ;AAlDD,kCAkDC"}
1
+ {"version":3,"file":"rag.js","sourceRoot":"","sources":["../src/rag.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;AAIhC,MAAa,WAAW;IACH,KAAK,CAAa;IAClB,MAAM,CAAS;IACf,KAAK,CAAS;IAE/B,YAAY,KAAiB,EAAE,SAAiB,EAAE,KAAa;QAC3D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,UAAwB,EAAE,EAAE,UAAmB;QACtE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QAEzE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO;gBACH,MAAM,EACF,uDAAuD;oBACvD,sDAAsD;gBAC1D,OAAO,EAAE,EAAE;aACd,CAAC;QACN,CAAC;QAED,MAAM,YAAY,GAAG,OAAO;aACvB,GAAG,CACA,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACL,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CACrH;aACA,IAAI,CAAC,MAAM,CAAC,CAAC;QAElB,MAAM,YAAY,GACd,sGAAsG;YACtG,sHAAsH;YACtH,6HAA6H;YAC7H,uGAAuG,CAAC;QAE5G,MAAM,UAAU,GACZ,aAAa,YAAY,MAAM;YAC/B,aAAa,KAAK,MAAM;YACxB,iBAAiB;YACjB,iCAAiC;YACjC,8FAA8F;YAC9F,wDAAwD;YACxD,kDAAkD,CAAC;QAEvD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACpC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE;gBACN,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;gBACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE;aACxC;SACJ,CAAC,CAAC;QAEH,OAAO;YACH,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO;YAChC,OAAO;SACV,CAAC;IACN,CAAC;CACJ;AA1DD,kCA0DC"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAyB,MAAM,SAAS,CAAC;AAE9D,wBAAgB,YAAY,CAAC,MAAM,GAAE,YAAiB,+CAwHrD"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAiBvC,wBAAgB,YAAY,CAAC,MAAM,GAAE,YAAiB,+CA4MrD"}