@aeriondyseti/vector-memory-mcp 0.9.0-dev.2 → 0.9.0-dev.3

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.
Files changed (79) hide show
  1. package/README.md +21 -1
  2. package/dist/scripts/publish.d.ts +13 -0
  3. package/dist/scripts/publish.d.ts.map +1 -0
  4. package/dist/scripts/publish.js +56 -0
  5. package/dist/scripts/publish.js.map +1 -0
  6. package/dist/scripts/test-runner.d.ts +9 -0
  7. package/dist/scripts/test-runner.d.ts.map +1 -0
  8. package/dist/scripts/test-runner.js +61 -0
  9. package/dist/scripts/test-runner.js.map +1 -0
  10. package/dist/scripts/warmup.d.ts +8 -0
  11. package/dist/scripts/warmup.d.ts.map +1 -0
  12. package/dist/scripts/warmup.js +61 -0
  13. package/dist/scripts/warmup.js.map +1 -0
  14. package/dist/src/config/index.d.ts +23 -0
  15. package/dist/src/config/index.d.ts.map +1 -0
  16. package/dist/src/config/index.js +46 -0
  17. package/dist/src/config/index.js.map +1 -0
  18. package/dist/src/db/connection.d.ts +3 -0
  19. package/dist/src/db/connection.d.ts.map +1 -0
  20. package/dist/src/db/connection.js +10 -0
  21. package/dist/src/db/connection.js.map +1 -0
  22. package/dist/src/db/memory.repository.d.ts +13 -0
  23. package/dist/src/db/memory.repository.d.ts.map +1 -0
  24. package/dist/src/db/memory.repository.js +97 -0
  25. package/dist/src/db/memory.repository.js.map +1 -0
  26. package/dist/src/db/schema.d.ts +4 -0
  27. package/dist/src/db/schema.d.ts.map +1 -0
  28. package/dist/src/db/schema.js +12 -0
  29. package/dist/src/db/schema.js.map +1 -0
  30. package/dist/src/http/mcp-transport.d.ts +19 -0
  31. package/dist/src/http/mcp-transport.d.ts.map +1 -0
  32. package/dist/src/http/mcp-transport.js +191 -0
  33. package/dist/src/http/mcp-transport.js.map +1 -0
  34. package/dist/src/http/server.d.ts +12 -0
  35. package/dist/src/http/server.d.ts.map +1 -0
  36. package/dist/src/http/server.js +168 -0
  37. package/dist/src/http/server.js.map +1 -0
  38. package/dist/src/index.d.ts +3 -0
  39. package/dist/src/index.d.ts.map +1 -0
  40. package/dist/src/index.js +59 -0
  41. package/dist/src/index.js.map +1 -0
  42. package/dist/src/mcp/handlers.d.ts +11 -0
  43. package/dist/src/mcp/handlers.d.ts.map +1 -0
  44. package/dist/src/mcp/handlers.js +175 -0
  45. package/dist/src/mcp/handlers.js.map +1 -0
  46. package/dist/src/mcp/server.d.ts +5 -0
  47. package/dist/src/mcp/server.d.ts.map +1 -0
  48. package/dist/src/mcp/server.js +22 -0
  49. package/dist/src/mcp/server.js.map +1 -0
  50. package/dist/src/mcp/tools.d.ts +9 -0
  51. package/dist/src/mcp/tools.d.ts.map +1 -0
  52. package/dist/src/mcp/tools.js +243 -0
  53. package/dist/src/mcp/tools.js.map +1 -0
  54. package/dist/src/services/embeddings.service.d.ts +12 -0
  55. package/dist/src/services/embeddings.service.d.ts.map +1 -0
  56. package/dist/src/services/embeddings.service.js +37 -0
  57. package/dist/src/services/embeddings.service.js.map +1 -0
  58. package/dist/src/services/memory.service.d.ts +31 -0
  59. package/dist/src/services/memory.service.d.ts.map +1 -0
  60. package/dist/src/services/memory.service.js +131 -0
  61. package/dist/src/services/memory.service.js.map +1 -0
  62. package/dist/src/types/memory.d.ts +17 -0
  63. package/dist/src/types/memory.d.ts.map +1 -0
  64. package/dist/src/types/memory.js +15 -0
  65. package/dist/src/types/memory.js.map +1 -0
  66. package/package.json +12 -8
  67. package/src/config/index.ts +0 -75
  68. package/src/db/connection.ts +0 -11
  69. package/src/db/memory.repository.ts +0 -115
  70. package/src/db/schema.ts +0 -34
  71. package/src/http/mcp-transport.ts +0 -255
  72. package/src/http/server.ts +0 -190
  73. package/src/index.ts +0 -70
  74. package/src/mcp/handlers.ts +0 -248
  75. package/src/mcp/server.ts +0 -34
  76. package/src/mcp/tools.ts +0 -254
  77. package/src/services/embeddings.service.ts +0 -48
  78. package/src/services/memory.service.ts +0 -185
  79. package/src/types/memory.ts +0 -31
package/README.md CHANGED
@@ -23,21 +23,28 @@ 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+ (recommended) or [Node.js](https://nodejs.org/) 20+
27
27
  - An MCP-compatible client (Claude Code, Claude Desktop, etc.)
28
28
 
29
29
  ### Install
30
30
 
31
+ **With Bun (recommended):**
31
32
  ```bash
32
33
  bun install -g @aeriondyseti/vector-memory-mcp
33
34
  ```
34
35
 
36
+ **With npm/Node.js:**
37
+ ```bash
38
+ npm install -g @aeriondyseti/vector-memory-mcp
39
+ ```
40
+
35
41
  > First install downloads ML models (~90MB). This may take a minute.
36
42
 
37
43
  ### Configure
38
44
 
39
45
  Add to your MCP client config (e.g., `~/.claude/settings.json`):
40
46
 
47
+ **With Bun:**
41
48
  ```json
42
49
  {
43
50
  "mcpServers": {
@@ -50,6 +57,19 @@ Add to your MCP client config (e.g., `~/.claude/settings.json`):
50
57
  }
51
58
  ```
52
59
 
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
+
53
73
  ### Use
54
74
 
55
75
  Restart your MCP client. You now have access to:
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * Publish script for vector-memory-mcp
4
+ *
5
+ * Prerequisites:
6
+ * 1. Create a granular access token at https://www.npmjs.com/settings/tokens
7
+ * 2. Store it: npm config set //registry.npmjs.org/:_authToken=npm_YOUR_TOKEN
8
+ * Or set NPM_TOKEN environment variable
9
+ *
10
+ * Usage: bun run scripts/publish.ts [--dry-run]
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../scripts/publish.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG"}
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * Publish script for vector-memory-mcp
4
+ *
5
+ * Prerequisites:
6
+ * 1. Create a granular access token at https://www.npmjs.com/settings/tokens
7
+ * 2. Store it: npm config set //registry.npmjs.org/:_authToken=npm_YOUR_TOKEN
8
+ * Or set NPM_TOKEN environment variable
9
+ *
10
+ * Usage: bun run scripts/publish.ts [--dry-run]
11
+ */
12
+ import { $ } from "bun";
13
+ const dryRun = process.argv.includes("--dry-run");
14
+ async function main() {
15
+ // Check for authentication
16
+ console.log("🔐 Checking NPM authentication...");
17
+ try {
18
+ const whoami = await $ `npm whoami`.text();
19
+ console.log(`✅ Authenticated as: ${whoami.trim()}`);
20
+ }
21
+ catch {
22
+ console.error("❌ Not authenticated with NPM.");
23
+ console.error(" Option 1: npm login");
24
+ console.error(" Option 2: npm config set //registry.npmjs.org/:_authToken=npm_YOUR_TOKEN");
25
+ console.error(" Option 3: Set NPM_TOKEN environment variable");
26
+ process.exit(1);
27
+ }
28
+ // Run tests
29
+ console.log("🧪 Running tests...");
30
+ const testResult = await $ `bun run test`.quiet();
31
+ if (testResult.exitCode !== 0) {
32
+ console.error("❌ Tests failed. Aborting publish.");
33
+ process.exit(1);
34
+ }
35
+ console.log("✅ Tests passed");
36
+ // Build
37
+ console.log("🔨 Building...");
38
+ await $ `bun run build`;
39
+ console.log("✅ Build complete");
40
+ // Get version info
41
+ const pkg = await Bun.file("package.json").json();
42
+ console.log(`\n📦 Publishing ${pkg.name}@${pkg.version}...`);
43
+ if (dryRun) {
44
+ console.log("🔍 Dry run - would publish:");
45
+ await $ `npm publish --dry-run`;
46
+ }
47
+ else {
48
+ await $ `npm publish --access public`;
49
+ console.log(`\n✅ Published ${pkg.name}@${pkg.version}`);
50
+ }
51
+ }
52
+ main().catch((err) => {
53
+ console.error("❌ Publish failed:", err.message);
54
+ process.exit(1);
55
+ });
56
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../scripts/publish.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAElD,KAAK,UAAU,IAAI;IACjB,2BAA2B;IAC3B,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,CAAA,YAAY,CAAC,IAAI,EAAE,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,6EAA6E,CAAC,CAAC;QAC7F,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,YAAY;IACZ,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,MAAM,CAAC,CAAA,cAAc,CAAC,KAAK,EAAE,CAAC;IACjD,IAAI,UAAU,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAE9B,QAAQ;IACR,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC9B,MAAM,CAAC,CAAA,eAAe,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAEhC,mBAAmB;IACnB,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC;IAE7D,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,MAAM,CAAC,CAAA,uBAAuB,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,CAAA,6BAA6B,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * Test runner wrapper that handles Bun's post-test crash gracefully.
4
+ *
5
+ * Bun crashes during native module cleanup after tests complete successfully.
6
+ * This wrapper captures the output, verifies tests passed, and exits cleanly.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=test-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../scripts/test-runner.ts"],"names":[],"mappings":";AACA;;;;;GAKG"}
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * Test runner wrapper that handles Bun's post-test crash gracefully.
4
+ *
5
+ * Bun crashes during native module cleanup after tests complete successfully.
6
+ * This wrapper captures the output, verifies tests passed, and exits cleanly.
7
+ */
8
+ import { spawn } from "bun";
9
+ const proc = spawn(["bun", "test", "--preload", "./tests/preload.ts"], {
10
+ stdout: "pipe",
11
+ stderr: "pipe",
12
+ env: { ...process.env, FORCE_COLOR: "1" },
13
+ });
14
+ let stdout = "";
15
+ let stderr = "";
16
+ const decoder = new TextDecoder();
17
+ // Stream stdout in real-time
18
+ const stdoutReader = proc.stdout.getReader();
19
+ (async () => {
20
+ while (true) {
21
+ const { done, value } = await stdoutReader.read();
22
+ if (done)
23
+ break;
24
+ const text = decoder.decode(value);
25
+ stdout += text;
26
+ process.stdout.write(text);
27
+ }
28
+ })();
29
+ // Stream stderr in real-time
30
+ const stderrReader = proc.stderr.getReader();
31
+ (async () => {
32
+ while (true) {
33
+ const { done, value } = await stderrReader.read();
34
+ if (done)
35
+ break;
36
+ const text = decoder.decode(value);
37
+ stderr += text;
38
+ process.stderr.write(text);
39
+ }
40
+ })();
41
+ await proc.exited;
42
+ // Check if tests actually passed by looking for the summary line
43
+ const output = stdout + stderr;
44
+ const passMatch = output.match(/(\d+) pass/);
45
+ const failMatch = output.match(/(\d+) fail/);
46
+ const passed = passMatch ? parseInt(passMatch[1], 10) : 0;
47
+ const failed = failMatch ? parseInt(failMatch[1], 10) : 0;
48
+ // Exit based on test results, not Bun's crash
49
+ if (failed > 0) {
50
+ console.error(`\n❌ ${failed} test(s) failed`);
51
+ process.exit(1);
52
+ }
53
+ else if (passed > 0) {
54
+ console.log(`\n✅ All ${passed} tests passed (ignoring Bun cleanup crash)`);
55
+ process.exit(0);
56
+ }
57
+ else {
58
+ console.error("\n⚠️ Could not determine test results");
59
+ process.exit(1);
60
+ }
61
+ //# sourceMappingURL=test-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-runner.js","sourceRoot":"","sources":["../../scripts/test-runner.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC;AAE5B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,oBAAoB,CAAC,EAAE;IACrE,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,MAAM;IACd,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE;CAC1C,CAAC,CAAC;AAEH,IAAI,MAAM,GAAG,EAAE,CAAC;AAChB,IAAI,MAAM,GAAG,EAAE,CAAC;AAEhB,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAElC,6BAA6B;AAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;AAC7C,CAAC,KAAK,IAAI,EAAE;IACV,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAClD,IAAI,IAAI;YAAE,MAAM;QAChB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,IAAI,IAAI,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC,CAAC,EAAE,CAAC;AAEL,6BAA6B;AAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;AAC7C,CAAC,KAAK,IAAI,EAAE;IACV,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAClD,IAAI,IAAI;YAAE,MAAM;QAChB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,IAAI,IAAI,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,IAAI,CAAC,MAAM,CAAC;AAElB,iEAAiE;AACjE,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAC/B,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AAC7C,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AAE7C,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1D,8CAA8C;AAC9C,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;IACf,OAAO,CAAC,KAAK,CAAC,OAAO,MAAM,iBAAiB,CAAC,CAAC;IAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;KAAM,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,4CAA4C,CAAC,CAAC;IAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;KAAM,CAAC;IACN,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * Warmup script to pre-download ML models and verify dependencies
4
+ * This runs during installation to ensure everything is ready to use
5
+ */
6
+ declare function warmup(): Promise<void>;
7
+ export { warmup };
8
+ //# sourceMappingURL=warmup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warmup.d.ts","sourceRoot":"","sources":["../../scripts/warmup.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAKH,iBAAe,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAsDrC;AAOD,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * Warmup script to pre-download ML models and verify dependencies
4
+ * This runs during installation to ensure everything is ready to use
5
+ */
6
+ import { config } from "../src/config/index.js";
7
+ import { EmbeddingsService } from "../src/services/embeddings.service.js";
8
+ async function warmup() {
9
+ console.log("🔥 Warming up vector-memory-mcp...");
10
+ console.log();
11
+ try {
12
+ // Check native dependencies
13
+ console.log("✓ Checking native dependencies...");
14
+ try {
15
+ await import("onnxruntime-node");
16
+ console.log(" ✓ onnxruntime-node loaded");
17
+ }
18
+ catch (e) {
19
+ console.error(" ✗ onnxruntime-node failed:", e.message);
20
+ process.exit(1);
21
+ }
22
+ try {
23
+ await import("sharp");
24
+ console.log(" ✓ sharp loaded");
25
+ }
26
+ catch (e) {
27
+ console.error(" ✗ sharp failed:", e.message);
28
+ process.exit(1);
29
+ }
30
+ console.log();
31
+ // Initialize embeddings service to download model
32
+ console.log("📥 Downloading ML model (this may take a minute)...");
33
+ console.log(` Model: ${config.embeddingModel}`);
34
+ console.log(` Cache: ~/.cache/huggingface/`);
35
+ console.log();
36
+ const embeddings = new EmbeddingsService(config.embeddingModel, config.embeddingDimension);
37
+ // Trigger model download by generating a test embedding
38
+ const startTime = Date.now();
39
+ await embeddings.embed("warmup test");
40
+ const duration = ((Date.now() - startTime) / 1000).toFixed(2);
41
+ console.log();
42
+ console.log(`✅ Warmup complete! (${duration}s)`);
43
+ console.log();
44
+ console.log("Ready to use! Configure your MCP client and restart to get started.");
45
+ console.log();
46
+ }
47
+ catch (error) {
48
+ console.error();
49
+ console.error("❌ Warmup failed:", error);
50
+ console.error();
51
+ console.error("This is not a critical error - the server will download models on first run.");
52
+ console.error("You can try running 'vector-memory-mcp warmup' manually later.");
53
+ process.exit(0); // Exit successfully to not block installation
54
+ }
55
+ }
56
+ // Only run if this is the main module
57
+ if (import.meta.url === `file://${process.argv[1]}`) {
58
+ warmup();
59
+ }
60
+ export { warmup };
61
+ //# sourceMappingURL=warmup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warmup.js","sourceRoot":"","sources":["../../scripts/warmup.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE1E,KAAK,UAAU,MAAM;IACnB,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,CAAC;QACH,4BAA4B;QAC5B,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACjD,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,kDAAkD;QAClD,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,MAAM,UAAU,GAAG,IAAI,iBAAiB,CACtC,MAAM,CAAC,cAAc,EACrB,MAAM,CAAC,kBAAkB,CAC1B,CAAC;QAEF,wDAAwD;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE9D,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,uBAAuB,QAAQ,IAAI,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QACzC,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,8EAA8E,CAAC,CAAC;QAC9F,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,8CAA8C;IACjE,CAAC;AACH,CAAC;AAED,sCAAsC;AACtC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACpD,MAAM,EAAE,CAAC;AACX,CAAC;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -0,0 +1,23 @@
1
+ export type TransportMode = "stdio" | "http" | "both";
2
+ export interface Config {
3
+ dbPath: string;
4
+ embeddingModel: string;
5
+ embeddingDimension: number;
6
+ httpPort: number;
7
+ httpHost: string;
8
+ enableHttp: boolean;
9
+ transportMode: TransportMode;
10
+ }
11
+ export interface ConfigOverrides {
12
+ dbPath?: string;
13
+ httpPort?: number;
14
+ enableHttp?: boolean;
15
+ transportMode?: TransportMode;
16
+ }
17
+ export declare function loadConfig(overrides?: ConfigOverrides): Config;
18
+ /**
19
+ * Parse CLI arguments into config overrides.
20
+ */
21
+ export declare function parseCliArgs(argv: string[]): ConfigOverrides;
22
+ export declare const config: Config;
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAGA,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"}
@@ -0,0 +1,46 @@
1
+ import arg from "arg";
2
+ import { join } from "path";
3
+ // Defaults - always use repo-local .vector-memory folder
4
+ const DEFAULT_DB_PATH = join(process.cwd(), ".vector-memory", "memories.db");
5
+ const DEFAULT_EMBEDDING_MODEL = "Xenova/all-MiniLM-L6-v2";
6
+ const DEFAULT_EMBEDDING_DIMENSION = 384;
7
+ const DEFAULT_HTTP_PORT = 3271;
8
+ const DEFAULT_HTTP_HOST = "127.0.0.1";
9
+ function resolvePath(path) {
10
+ return path.startsWith("/") ? path : join(process.cwd(), path);
11
+ }
12
+ export function loadConfig(overrides = {}) {
13
+ const transportMode = overrides.transportMode ?? "stdio";
14
+ // HTTP enabled by default (needed for hooks), can disable with --no-http
15
+ const enableHttp = overrides.enableHttp ?? true;
16
+ return {
17
+ dbPath: resolvePath(overrides.dbPath ?? DEFAULT_DB_PATH),
18
+ embeddingModel: DEFAULT_EMBEDDING_MODEL,
19
+ embeddingDimension: DEFAULT_EMBEDDING_DIMENSION,
20
+ httpPort: overrides.httpPort ?? DEFAULT_HTTP_PORT,
21
+ httpHost: DEFAULT_HTTP_HOST,
22
+ enableHttp,
23
+ transportMode,
24
+ };
25
+ }
26
+ /**
27
+ * Parse CLI arguments into config overrides.
28
+ */
29
+ export function parseCliArgs(argv) {
30
+ const args = arg({
31
+ "--db-file": String,
32
+ "--port": Number,
33
+ "--no-http": Boolean,
34
+ // Aliases
35
+ "-d": "--db-file",
36
+ "-p": "--port",
37
+ }, { argv, permissive: true });
38
+ return {
39
+ dbPath: args["--db-file"],
40
+ httpPort: args["--port"],
41
+ enableHttp: args["--no-http"] ? false : undefined,
42
+ };
43
+ }
44
+ // Default config for imports that don't use CLI args
45
+ export const config = loadConfig();
46
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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;AAqB5B,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,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;AACjE,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"}
@@ -0,0 +1,3 @@
1
+ import * as lancedb from "@lancedb/lancedb";
2
+ export declare function connectToDatabase(dbPath: string): Promise<lancedb.Connection>;
3
+ //# sourceMappingURL=connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../src/db/connection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAI5C,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAMnF"}
@@ -0,0 +1,10 @@
1
+ import * as lancedb from "@lancedb/lancedb";
2
+ import { mkdirSync } from "fs";
3
+ import { dirname } from "path";
4
+ export async function connectToDatabase(dbPath) {
5
+ // Ensure directory exists
6
+ mkdirSync(dirname(dbPath), { recursive: true });
7
+ const db = await lancedb.connect(dbPath);
8
+ return db;
9
+ }
10
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/db/connection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAc;IACpD,0BAA0B;IAC1B,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhD,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import * as lancedb from "@lancedb/lancedb";
2
+ import { type Memory, type VectorRow } from "../types/memory.js";
3
+ export declare class MemoryRepository {
4
+ private db;
5
+ constructor(db: lancedb.Connection);
6
+ private getTable;
7
+ insert(memory: Memory): Promise<void>;
8
+ upsert(memory: Memory): Promise<void>;
9
+ findById(id: string): Promise<Memory | null>;
10
+ markDeleted(id: string): Promise<boolean>;
11
+ findSimilar(embedding: number[], limit: number): Promise<VectorRow[]>;
12
+ }
13
+ //# sourceMappingURL=memory.repository.d.ts.map
@@ -0,0 +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;AAE5C,OAAO,EACL,KAAK,MAAM,EACX,KAAK,SAAS,EAEf,MAAM,oBAAoB,CAAC;AAE5B,qBAAa,gBAAgB;IACf,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,OAAO,CAAC,UAAU;YAE5B,QAAQ;IAShB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAerC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBrC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA4B5C,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqBzC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;CAS5E"}
@@ -0,0 +1,97 @@
1
+ import { TABLE_NAME, memorySchema } from "./schema.js";
2
+ import { DELETED_TOMBSTONE, } from "../types/memory.js";
3
+ export class MemoryRepository {
4
+ db;
5
+ constructor(db) {
6
+ this.db = db;
7
+ }
8
+ async getTable() {
9
+ const names = await this.db.tableNames();
10
+ if (names.includes(TABLE_NAME)) {
11
+ return await this.db.openTable(TABLE_NAME);
12
+ }
13
+ // Create with empty data to initialize schema
14
+ return await this.db.createTable(TABLE_NAME, [], { schema: memorySchema });
15
+ }
16
+ async insert(memory) {
17
+ const table = await this.getTable();
18
+ await table.add([
19
+ {
20
+ id: memory.id,
21
+ vector: memory.embedding,
22
+ content: memory.content,
23
+ metadata: JSON.stringify(memory.metadata),
24
+ created_at: memory.createdAt.getTime(),
25
+ updated_at: memory.updatedAt.getTime(),
26
+ superseded_by: memory.supersededBy,
27
+ },
28
+ ]);
29
+ }
30
+ async upsert(memory) {
31
+ const table = await this.getTable();
32
+ const existing = await table.query().where(`id = '${memory.id}'`).limit(1).toArray();
33
+ if (existing.length === 0) {
34
+ return await this.insert(memory);
35
+ }
36
+ await table.update({
37
+ where: `id = '${memory.id}'`,
38
+ values: {
39
+ vector: memory.embedding,
40
+ content: memory.content,
41
+ metadata: JSON.stringify(memory.metadata),
42
+ created_at: memory.createdAt.getTime(),
43
+ updated_at: memory.updatedAt.getTime(),
44
+ superseded_by: memory.supersededBy,
45
+ },
46
+ });
47
+ }
48
+ async findById(id) {
49
+ const table = await this.getTable();
50
+ const results = await table.query().where(`id = '${id}'`).limit(1).toArray();
51
+ if (results.length === 0) {
52
+ return null;
53
+ }
54
+ const row = results[0];
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
+ };
70
+ }
71
+ async markDeleted(id) {
72
+ const table = await this.getTable();
73
+ // Verify existence first to match previous behavior (return false if not found)
74
+ const existing = await table.query().where(`id = '${id}'`).limit(1).toArray();
75
+ if (existing.length === 0) {
76
+ return false;
77
+ }
78
+ const now = Date.now();
79
+ await table.update({
80
+ where: `id = '${id}'`,
81
+ values: {
82
+ superseded_by: DELETED_TOMBSTONE,
83
+ updated_at: now,
84
+ },
85
+ });
86
+ return true;
87
+ }
88
+ async findSimilar(embedding, limit) {
89
+ const table = await this.getTable();
90
+ const results = await table.vectorSearch(embedding).limit(limit).toArray();
91
+ return results.map((r) => ({
92
+ id: r.id,
93
+ distance: r._distance,
94
+ }));
95
+ }
96
+ }
97
+ //# sourceMappingURL=memory.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.repository.js","sourceRoot":"","sources":["../../../src/db/memory.repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Schema } from "apache-arrow";
2
+ export declare const TABLE_NAME = "memories";
3
+ export declare const memorySchema: Schema<any>;
4
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/db/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAOP,MAAM,cAAc,CAAC;AAEtB,eAAO,MAAM,UAAU,aAAa,CAAC;AAErC,eAAO,MAAM,YAAY,aAoBvB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { Schema, Field, FixedSizeList, Float32, Utf8, Timestamp, TimeUnit, } from "apache-arrow";
2
+ export const TABLE_NAME = "memories";
3
+ export const memorySchema = new Schema([
4
+ new Field("id", new Utf8(), false),
5
+ new Field("vector", new FixedSizeList(384, new Field("item", new Float32())), false),
6
+ new Field("content", new Utf8(), false),
7
+ new Field("metadata", new Utf8(), false), // JSON string
8
+ new Field("created_at", new Timestamp(TimeUnit.MILLISECOND), false),
9
+ new Field("updated_at", new Timestamp(TimeUnit.MILLISECOND), false),
10
+ new Field("superseded_by", new Utf8(), true), // Nullable
11
+ ]);
12
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +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,GACT,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;CAC1D,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * MCP HTTP Transport Handler
3
+ *
4
+ * Provides StreamableHTTP transport for MCP over HTTP.
5
+ * and other HTTP-based MCP clients to connect to the memory server.
6
+ *
7
+ * This implementation handles the MCP protocol directly using Hono's streaming
8
+ * capabilities, since StreamableHTTPServerTransport expects Node.js req/res objects.
9
+ */
10
+ import { Hono } from "hono";
11
+ import type { MemoryService } from "../services/memory.service.js";
12
+ /**
13
+ * Creates MCP routes for a Hono app.
14
+ *
15
+ * Uses InMemoryTransport internally and bridges to HTTP/SSE manually,
16
+ * since StreamableHTTPServerTransport requires Node.js req/res objects.
17
+ */
18
+ export declare function createMcpRoutes(memoryService: MemoryService): Hono;
19
+ //# sourceMappingURL=mcp-transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-transport.d.ts","sourceRoot":"","sources":["../../../src/http/mcp-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAe5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAUnE;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,aAAa,EAAE,aAAa,GAAG,IAAI,CAkLlE"}