{"_id":"@adamrdrew/agent-memory-mcp","_rev":"4-936d034ec7aabf2f7a6d98063c8ea06f","name":"@adamrdrew/agent-memory-mcp","dist-tags":{"latest":"1.1.2"},"versions":{"1.0.0":{"name":"@adamrdrew/agent-memory-mcp","version":"1.0.0","keywords":["mcp","memory","lancedb","vector-search","bm25","embeddings","model-context-protocol","agent-memory"],"author":{"name":"Adam Drew"},"license":"GPL-3.0-or-later","_id":"@adamrdrew/agent-memory-mcp@1.0.0","maintainers":[{"name":"adamrdrew","email":"adamrdrew@live.com"}],"homepage":"https://github.com/adamrdrew/agent-memory-mcp#readme","bugs":{"url":"https://github.com/adamrdrew/agent-memory-mcp/issues"},"bin":{"agent-memory-mcp":"dist/index.js"},"dist":{"shasum":"ac556a3f62fe6e8ba02a275c310f1ffe106e307a","tarball":"https://registry.npmjs.org/@adamrdrew/agent-memory-mcp/-/agent-memory-mcp-1.0.0.tgz","fileCount":24,"integrity":"sha512-HUQsQjYZoqwXS68bbey9SoThWfmqJv0TkYE7xdTfXuKCc8psvwPlmc6dTXAv5ENNDemIRDUR1VRhyLzX3ifHzA==","signatures":[{"sig":"MEYCIQCGbBQJApA+N5pEdgNuBsOje3QYjVDNP34BEavycgUgLwIhAM0egBbmKKIA8YiZP69Fqk8DAtIMLT7qJhfkB7U17HGG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99422},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"b6865b10b251047d4dfad332367623add72956ef","scripts":{"dev":"tsx src/index.ts","test":"vitest run","build":"tsc","start":"node dist/index.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"adamrdrew","email":"adamrdrew@live.com"},"repository":{"url":"git+https://github.com/adamrdrew/agent-memory-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for persistent agent memory — hybrid BM25 + vector search backed by LanceDB with local ONNX embeddings. No API keys, fully local.","directories":{},"_nodeVersion":"20.17.0","dependencies":{"zod":"^3.24.0","@lancedb/lancedb":"^0.26.2","@xenova/transformers":"^2.17.0","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/agent-memory-mcp_1.0.0_1771687067592_0.4010594279768056","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@adamrdrew/agent-memory-mcp","version":"1.1.0","keywords":["mcp","memory","lancedb","vector-search","bm25","embeddings","model-context-protocol","agent-memory"],"author":{"name":"Adam Drew"},"license":"GPL-3.0-or-later","_id":"@adamrdrew/agent-memory-mcp@1.1.0","maintainers":[{"name":"adamrdrew","email":"adamrdrew@live.com"}],"homepage":"https://github.com/adamrdrew/agent-memory-mcp#readme","bugs":{"url":"https://github.com/adamrdrew/agent-memory-mcp/issues"},"bin":{"agent-memory-mcp":"dist/index.js"},"dist":{"shasum":"11e35b9f5efd67e15e8cd224a44611aa63c72a30","tarball":"https://registry.npmjs.org/@adamrdrew/agent-memory-mcp/-/agent-memory-mcp-1.1.0.tgz","fileCount":24,"integrity":"sha512-kXTfhM7rab5c+GM/K0hj7xJkIRGCEor9cNDxeS/uchsGNJGwItAM1a66hok+gi/KM44sPulKsodVITyj/E+BtA==","signatures":[{"sig":"MEQCIB2zuZjoEYEU6+01zcKsYoBEe9bk5EDLulQomg3LBOYIAiA0j6MUDUpYB/NN3Czz2Fglh6upjEm4IgFRs93vr2UELg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103749},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"356c7e02e61c340382491fcf5af02030f373d4d8","scripts":{"dev":"tsx src/index.ts","test":"vitest run","build":"tsc","start":"node dist/index.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"adamrdrew","email":"adamrdrew@live.com"},"repository":{"url":"git+https://github.com/adamrdrew/agent-memory-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for persistent agent memory — hybrid BM25 + vector search backed by LanceDB with local ONNX embeddings. No API keys, fully local.","directories":{},"_nodeVersion":"20.17.0","dependencies":{"zod":"^3.24.0","@lancedb/lancedb":"^0.26.2","@xenova/transformers":"^2.17.0","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/agent-memory-mcp_1.1.0_1772187438943_0.7396270261883908","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@adamrdrew/agent-memory-mcp","version":"1.1.1","keywords":["mcp","memory","lancedb","vector-search","bm25","embeddings","model-context-protocol","agent-memory"],"author":{"name":"Adam Drew"},"license":"GPL-3.0-or-later","_id":"@adamrdrew/agent-memory-mcp@1.1.1","maintainers":[{"name":"adamrdrew","email":"adamrdrew@live.com"}],"homepage":"https://github.com/adamrdrew/agent-memory-mcp#readme","bugs":{"url":"https://github.com/adamrdrew/agent-memory-mcp/issues"},"bin":{"agent-memory-mcp":"dist/index.js"},"dist":{"shasum":"b04e65007c9e73d88d064ead8b16b9d4d51ef69b","tarball":"https://registry.npmjs.org/@adamrdrew/agent-memory-mcp/-/agent-memory-mcp-1.1.1.tgz","fileCount":24,"integrity":"sha512-1znL+HDv8O4AixXdY42LfLZxctcM2YVwUeD4aZm00L+XHMvXNBD/mxA1BPLokj0CqhkADFAIOQvEqNn3VWVe9w==","signatures":[{"sig":"MEQCIH7CtF58J1veJ5PBGDktil/iCx0Hop4TyXekUaxSYzX7AiAxS0PSl//R+knEX4Hs7Wwcu0MJVNzgX+kHA9T6raNAOg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103749},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"ffb97f0191d3b165a1efa9fb56896be0e151b790","scripts":{"dev":"tsx src/index.ts","test":"vitest run","build":"tsc","start":"node dist/index.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"adamrdrew","email":"adamrdrew@live.com"},"repository":{"url":"git+https://github.com/adamrdrew/agent-memory-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for persistent agent memory — hybrid BM25 + vector search backed by LanceDB with local ONNX embeddings. No API keys, fully local.","directories":{},"_nodeVersion":"20.17.0","dependencies":{"zod":"^3.24.0","@lancedb/lancedb":"^0.26.2","@xenova/transformers":"^2.17.0","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/agent-memory-mcp_1.1.1_1772190125624_0.04304962739920293","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@adamrdrew/agent-memory-mcp","version":"1.1.2","description":"MCP server for persistent agent memory — hybrid BM25 + vector search backed by LanceDB with local ONNX embeddings. No API keys, fully local.","license":"GPL-3.0-or-later","type":"module","main":"dist/index.js","bin":{"agent-memory-mcp":"dist/index.js"},"scripts":{"build":"tsc","start":"node dist/index.js","dev":"tsx src/index.ts","test":"vitest run","test:watch":"vitest","prepublishOnly":"npm run build"},"keywords":["mcp","memory","lancedb","vector-search","bm25","embeddings","model-context-protocol","agent-memory"],"repository":{"type":"git","url":"git+https://github.com/adamrdrew/agent-memory-mcp.git"},"author":{"name":"Adam Drew"},"dependencies":{"@lancedb/lancedb":"^0.26.2","@modelcontextprotocol/sdk":"^1.12.0","@xenova/transformers":"^2.17.0","zod":"^3.24.0"},"devDependencies":{"@types/node":"^22.0.0","tsx":"^4.19.0","typescript":"^5.7.0","vitest":"^2.1.0"},"engines":{"node":">=18.0.0"},"publishConfig":{"access":"public"},"_id":"@adamrdrew/agent-memory-mcp@1.1.2","gitHead":"c4211658f480d930cfb9a4cb030bb38d0c56a613","types":"./dist/index.d.ts","bugs":{"url":"https://github.com/adamrdrew/agent-memory-mcp/issues"},"homepage":"https://github.com/adamrdrew/agent-memory-mcp#readme","_nodeVersion":"20.17.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-oJUsAZTqhfXsr9Ez1ZF/W4B3Y8hkkvOLaXF+E0NQn4xRqGjwC4zPvPAp1jaRdMO6oG2b8P1W8M1Xhs5LFOZltQ==","shasum":"7c336e6fae53de1def99bda0ba7d36a06f1c448d","tarball":"https://registry.npmjs.org/@adamrdrew/agent-memory-mcp/-/agent-memory-mcp-1.1.2.tgz","fileCount":24,"unpackedSize":119159,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD6GO1oaNjdggpnjPalwexKkPJYiJEXVEd3vXaWz9qAugIgTHm9zNKK4suYh5fooTccdTynPueRmKhKpdK8EFGxJmQ="}]},"_npmUser":{"name":"adamrdrew","email":"adamrdrew@live.com"},"directories":{},"maintainers":[{"name":"adamrdrew","email":"adamrdrew@live.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/agent-memory-mcp_1.1.2_1772886860930_0.07102060843497959"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-21T15:17:47.512Z","modified":"2026-03-07T12:34:21.190Z","1.0.0":"2026-02-21T15:17:47.737Z","1.1.0":"2026-02-27T10:17:19.072Z","1.1.1":"2026-02-27T11:02:05.764Z","1.1.2":"2026-03-07T12:34:21.070Z"},"bugs":{"url":"https://github.com/adamrdrew/agent-memory-mcp/issues"},"author":{"name":"Adam Drew"},"license":"GPL-3.0-or-later","homepage":"https://github.com/adamrdrew/agent-memory-mcp#readme","keywords":["mcp","memory","lancedb","vector-search","bm25","embeddings","model-context-protocol","agent-memory"],"repository":{"type":"git","url":"git+https://github.com/adamrdrew/agent-memory-mcp.git"},"description":"MCP server for persistent agent memory — hybrid BM25 + vector search backed by LanceDB with local ONNX embeddings. No API keys, fully local.","maintainers":[{"name":"adamrdrew","email":"adamrdrew@live.com"}],"readme":"# agent-memory-mcp\n\nMCP server for persistent agent memory, backed by [LanceDB](https://lancedb.com/) with hybrid BM25 + vector search. Gives AI agents the ability to store, search, and manage memories across sessions using the [Model Context Protocol](https://modelcontextprotocol.io/).\n\nAll data stays on your machine. Embeddings are generated locally using [all-MiniLM-L6-v2](https://huggingface.co/Xenova/all-MiniLM-L6-v2) via ONNX — no API keys, no network dependencies after initial setup.\n\n## Features\n\n- **Hybrid search** — combines BM25 full-text search with cosine vector similarity via Reciprocal Rank Fusion (RRF)\n- **Local embeddings** — runs Xenova/all-MiniLM-L6-v2 locally via ONNX, no external API calls\n- **12 memory categories** — structured taxonomy for organising memories\n- **Batch operations** — store multiple memories in a single call\n- **Hardcopy backup** — optional JSON file mirror of all mutations for human-readable backup\n- **Temporal decay** — exponential time-based decay favors recent memories when relevance is similar. Configurable half-life, with `evergreen` and `never-forget` tag exemptions\n- **Fully local** — all data stays on disk, no network dependencies after first model download\n\n## Installation\n\nInstall the package globally first. This downloads the embedding model (~80 MB) so it's ready when the server starts:\n\n```bash\nnpm install -g @adamrdrew/agent-memory-mcp\n```\n\nThen add the server to your MCP client configuration.\n\n### Claude Desktop\n\nAdd to `~/Library/Application Support/Claude/claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"agent-memory\": {\n      \"command\": \"agent-memory-mcp\",\n      \"env\": {\n        \"MEMORY_DB_PATH\": \"/path/to/your/memory-db\"\n      }\n    }\n  }\n}\n```\n\n### Claude Code\n\nAdd to your project's `.mcp.json`:\n\n```json\n{\n  \"agent-memory\": {\n    \"command\": \"agent-memory-mcp\",\n    \"env\": {\n      \"MEMORY_DB_PATH\": \"/path/to/your/memory-db\"\n    }\n  }\n}\n```\n\n## Configuration\n\n| Variable | Required | Description |\n|---|---|---|\n| `MEMORY_DB_PATH` | Yes | Path to the LanceDB database directory |\n| `EMBEDDING_MODEL` | No | HuggingFace model ID (default: `Xenova/all-MiniLM-L6-v2`) |\n| `MEMORY_DECAY_HALF_LIFE` | No | Decay half-life in days (default: `30`). Set to `0` to disable temporal decay |\n| `ENABLE_HARDCOPY` | No | Set to `true` to enable JSON file backup |\n| `HARDCOPY_PATH` | If hardcopy enabled | Directory for JSON mirror files |\n\n## Tools\n\n| Tool | Description |\n|---|---|\n| `store` | Store a single memory with content, category, and tags |\n| `store_batch` | Store multiple memories in one call |\n| `search` | Search memories by meaning and/or keywords. Supports hybrid, keyword, and semantic modes |\n| `recall` | Multi-topic contextual recall — searches multiple topics in parallel and includes recent memories |\n| `find_related` | Find memories similar to a specific memory |\n| `list_recent` | List most recent memories, optionally filtered by category |\n| `update` | Update an existing memory — re-embeds automatically if content changes |\n| `delete` | Permanently remove a memory by ID |\n| `stats` | Get database statistics: total count, breakdown by category, timestamps |\n\n## Search Modes\n\nThe `search` tool supports three modes:\n\n- **`hybrid`** (default) — combines BM25 keyword scoring with vector similarity using RRF reranking. Falls back to semantic-only if the full-text index is unavailable.\n- **`keyword`** — BM25 full-text search only.\n- **`semantic`** — cosine vector similarity only.\n\nAll modes support filtering by category, tags, and date range.\n\n## Temporal Decay\n\nSearch results are scored with exponential time-based decay so that recent memories surface above older ones when semantic relevance is similar. The decay follows a half-life model: a memory one half-life old has its score halved, two half-lives old gets quartered, and so on.\n\n- **Default half-life**: 30 days (configurable via `MEMORY_DECAY_HALF_LIFE`)\n- **Disable**: set `MEMORY_DECAY_HALF_LIFE=0`\n- **Exempt tags**: memories tagged `evergreen` or `never-forget` are never decayed\n\n## Memory Categories\n\n`code-solution` · `bug-fix` · `architecture` · `learning` · `tool-usage` · `debugging` · `performance` · `security` · `observation` · `personal` · `relationship` · `other`\n\n## Development\n\n```bash\ngit clone https://github.com/adamrdrew/agent-memory-mcp.git\ncd agent-memory-mcp\nnpm install\nnpm run dev          # Run with tsx (no build step)\nnpm run build        # Compile TypeScript to dist/\nnpm test             # Run all tests\nnpm run test:watch   # Run tests in watch mode\n```\n\n## License\n\nThis project is licensed under the [GNU General Public License v3.0](LICENSE).\n","readmeFilename":"README.md"}