{"_id":"cursor-memory","_rev":"5-780d25c80cae0490a2001a27abd7365e","name":"cursor-memory","dist-tags":{"latest":"1.0.4"},"versions":{"1.0.0":{"name":"cursor-memory","version":"1.0.0","keywords":["cursor","cursor-ide","mcp","mcp-server","model-context-protocol","ai-memory","persistent-memory","semantic-search","cursor-memory","cursor-ai-memory","cursor-ide-memory","cursor-persistent-memory","cursor-semantic-search","cursor-searchable-memory","embeddings"],"author":{"url":"0xTh3OKrypt","name":"Tran Huu Canh","email":"tranhuucanh39@gmail.com"},"license":"MIT","_id":"cursor-memory@1.0.0","maintainers":[{"name":"tranhuucanh39","email":"tranhuucanh39@gmail.com"}],"homepage":"https://github.com/tranhuucanh/cursor-memory#readme","bugs":{"url":"https://github.com/tranhuucanh/cursor-memory/issues"},"bin":{"cursor-memory":"dist/cli.js"},"dist":{"shasum":"a72e4c011d4b77709c143657036ece2d911ddc8f","tarball":"https://registry.npmjs.org/cursor-memory/-/cursor-memory-1.0.0.tgz","fileCount":36,"integrity":"sha512-bBjxL8mDAyWebttlURyDDEmZkG4HoJnH+zku6qk6W6F2jEi6N6iybiyJQw0AyYFmJyXr5ay+poI53aCTZ257QQ==","signatures":[{"sig":"MEYCIQCB0lE8uDe4puTsTvssBlO/qKiE0/R9UhN5HrwKFRG0WQIhAN1a4YHM84Cs999NtHlsYrKcqn53WGhwFx6UhEHwN487","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6052555},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"8db537285416deac7b686d54fb365257a3b55873","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"tranhuucanh39","email":"tranhuucanh39@gmail.com"},"repository":{"url":"git+https://github.com/tranhuucanh/cursor-memory.git","type":"git"},"_npmVersion":"10.8.2","description":"Persistent, searchable memory for Cursor AI — You control what your AI remembers.","directories":{},"_nodeVersion":"20.20.1","dependencies":{"commander":"^14.0.3","sqlite-vec":"^0.1.7","better-sqlite3":"^11.10.0","@huggingface/transformers":"^3.8.1","@modelcontextprotocol/sdk":"^1.28.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^22.19.15","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/cursor-memory_1.0.0_1774946678228_0.05191458660332282","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"cursor-memory","version":"1.0.1","keywords":["cursor","cursor-ide","mcp","mcp-server","model-context-protocol","ai-memory","persistent-memory","semantic-search","cursor-memory","cursor-ai-memory","cursor-ide-memory","cursor-persistent-memory","cursor-semantic-search","cursor-searchable-memory","embeddings"],"author":{"url":"0xTh3OKrypt","name":"Tran Huu Canh","email":"tranhuucanh39@gmail.com"},"license":"MIT","_id":"cursor-memory@1.0.1","maintainers":[{"name":"tranhuucanh39","email":"tranhuucanh39@gmail.com"}],"homepage":"https://github.com/tranhuucanh/cursor-memory#readme","bugs":{"url":"https://github.com/tranhuucanh/cursor-memory/issues"},"bin":{"cursor-memory":"dist/cli.js"},"dist":{"shasum":"1228c1f4c8e7f5dad55c25d9b15687275753369a","tarball":"https://registry.npmjs.org/cursor-memory/-/cursor-memory-1.0.1.tgz","fileCount":36,"integrity":"sha512-cM7RfIE9AUtobI/nv6bODn/soPoIzwPo6upn4J7NL2vGtXMictttHJWUp9S9OedNq6RX4PPPpKr+w6NcxJ3Vdw==","signatures":[{"sig":"MEYCIQCBuxNfZWvGORi/7hwaYuMTuE37TLF9bxQoutcO+sEsxQIhAPAOml1Au/r60jt/L6IFjPdkDJk7iCe4QUd8GmYdM3Nu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6051059},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"43b0dded986a3b9daca1e6006cbb3359345ba1f0","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"tranhuucanh39","email":"tranhuucanh39@gmail.com"},"repository":{"url":"git+https://github.com/tranhuucanh/cursor-memory.git","type":"git"},"_npmVersion":"10.8.2","description":"Persistent, searchable memory for Cursor AI — You control what your AI remembers.","directories":{},"_nodeVersion":"20.20.1","dependencies":{"commander":"^14.0.3","sqlite-vec":"^0.1.7","better-sqlite3":"^11.10.0","@huggingface/transformers":"^3.8.1","@modelcontextprotocol/sdk":"^1.28.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^22.19.15","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/cursor-memory_1.0.1_1774948887100_0.7616136865256184","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"cursor-memory","version":"1.0.2","keywords":["cursor","cursor-ide","mcp","mcp-server","model-context-protocol","ai-memory","persistent-memory","semantic-search","cursor-memory","cursor-ai-memory","cursor-ide-memory","cursor-persistent-memory","cursor-semantic-search","cursor-searchable-memory","embeddings"],"author":{"url":"0xTh3OKrypt","name":"Tran Huu Canh","email":"tranhuucanh39@gmail.com"},"license":"MIT","_id":"cursor-memory@1.0.2","maintainers":[{"name":"tranhuucanh39","email":"tranhuucanh39@gmail.com"}],"homepage":"https://github.com/tranhuucanh/cursor-memory#readme","bugs":{"url":"https://github.com/tranhuucanh/cursor-memory/issues"},"bin":{"cursor-memory":"dist/cli.js"},"dist":{"shasum":"0da6d91fba58df13eef77ab76c8ac228b36cec9b","tarball":"https://registry.npmjs.org/cursor-memory/-/cursor-memory-1.0.2.tgz","fileCount":40,"integrity":"sha512-kdNAARjFHEDEyYEkPK1yXrEYeoaBmfwfyiKkBkybenk0c7OSatxLtz+AG04y5SmVJr3FT3Ag6vUSCXx8q1UWcA==","signatures":[{"sig":"MEYCIQCpG2jiIG6TU1V6FzdUeG96ss8d1vDDpG8SfBdgzgipsQIhANpUcylKLMc3Zcjf8xeIX0nf7NYcZn74eqI5T9TSa+L2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":661011},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"gitHead":"55c39933b4a0122a0816058bd38bcffa3887c6ab","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","postinstall":"node scripts/postinstall.cjs"},"_npmUser":{"name":"tranhuucanh39","email":"tranhuucanh39@gmail.com"},"repository":{"url":"git+https://github.com/tranhuucanh/cursor-memory.git","type":"git"},"_npmVersion":"10.8.2","description":"Persistent, searchable memory for Cursor AI — You control what your AI remembers.","directories":{},"_nodeVersion":"20.20.1","dependencies":{"commander":"^14.0.3","sqlite-vec":"^0.1.7","better-sqlite3":"^11.10.0","@modelcontextprotocol/sdk":"^1.28.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^22.19.15","@types/better-sqlite3":"^7.6.13"},"optionalDependencies":{"@huggingface/transformers":"^3.8.1"},"_npmOperationalInternal":{"tmp":"tmp/cursor-memory_1.0.2_1774952344719_0.3136623131252356","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"cursor-memory","version":"1.0.3","keywords":["cursor","cursor-ide","mcp","mcp-server","model-context-protocol","ai-memory","persistent-memory","semantic-search","cursor-memory","cursor-ai-memory","cursor-ide-memory","cursor-persistent-memory","cursor-semantic-search","cursor-searchable-memory","embeddings"],"author":{"url":"0xTh3OKrypt","name":"Tran Huu Canh","email":"tranhuucanh39@gmail.com"},"license":"MIT","_id":"cursor-memory@1.0.3","maintainers":[{"name":"tranhuucanh39","email":"tranhuucanh39@gmail.com"}],"homepage":"https://github.com/tranhuucanh/cursor-memory#readme","bugs":{"url":"https://github.com/tranhuucanh/cursor-memory/issues"},"bin":{"cursor-memory":"dist/cli.js"},"dist":{"shasum":"fd6bd0d931a28f15a365ba08dee3efda5fa909de","tarball":"https://registry.npmjs.org/cursor-memory/-/cursor-memory-1.0.3.tgz","fileCount":36,"integrity":"sha512-M4CPQRwrHoY08OGZH1O3GeyuzywDiuRyzCJ/axyV3/fiaYmWgtIH0GDNpAorRphrS+f10xPQJwq4O/9TQlQcrw==","signatures":[{"sig":"MEQCIGZ0+V9NHv7/CnjO+EiOytHbRqgMlvjlptdBYAiLKP2TAiBaFZecBJ1RhRm9ZsfIeVmSKkxV2pzBjCu3kB8moL/rEg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130667},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"gitHead":"32684de46308919e2ba1cc94eebc1a0a0f9864a3","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","postinstall":"node scripts/postinstall.cjs"},"_npmUser":{"name":"tranhuucanh39","email":"tranhuucanh39@gmail.com"},"repository":{"url":"git+https://github.com/tranhuucanh/cursor-memory.git","type":"git"},"_npmVersion":"10.8.2","description":"Persistent, searchable memory for Cursor AI — You control what your AI remembers.","directories":{},"_nodeVersion":"20.20.1","dependencies":{"commander":"^14.0.3","sqlite-vec":"^0.1.7","better-sqlite3":"^11.10.0","@modelcontextprotocol/sdk":"^1.28.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^22.19.15","@types/better-sqlite3":"^7.6.13"},"optionalDependencies":{"@huggingface/transformers":"^3.8.1"},"_npmOperationalInternal":{"tmp":"tmp/cursor-memory_1.0.3_1775014674048_0.5256453349686148","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"cursor-memory","version":"1.0.4","description":"Persistent, searchable memory for Cursor AI — You control what your AI remembers.","type":"module","main":"dist/index.js","bin":{"cursor-memory":"dist/cli.js"},"scripts":{"build":"tsc","dev":"tsc --watch","start":"node dist/index.js","preinstall":"node scripts/preinstall.cjs","postinstall":"node scripts/postinstall.cjs"},"keywords":["cursor","cursor-ide","mcp","mcp-server","model-context-protocol","ai-memory","persistent-memory","semantic-search","cursor-memory","cursor-ai-memory","cursor-ide-memory","cursor-persistent-memory","cursor-semantic-search","cursor-searchable-memory","embeddings"],"author":{"name":"Tran Huu Canh","email":"tranhuucanh39@gmail.com","url":"0xTh3OKrypt"},"license":"MIT","engines":{"node":">=20"},"repository":{"type":"git","url":"git+https://github.com/tranhuucanh/cursor-memory.git"},"bugs":{"url":"https://github.com/tranhuucanh/cursor-memory/issues"},"homepage":"https://github.com/tranhuucanh/cursor-memory#readme","dependencies":{"@modelcontextprotocol/sdk":"^1.29.0","better-sqlite3":"^12.9.0","commander":"^14.0.3","sqlite-vec":"^0.1.9"},"optionalDependencies":{"@huggingface/transformers":"^3.8.1"},"devDependencies":{"@types/better-sqlite3":"^7.6.13","@types/node":"^22.19.15","typescript":"^5.9.3"},"_id":"cursor-memory@1.0.4","gitHead":"8dc45e40e6ce01effe9d95fe56d188813f5c349d","types":"./dist/index.d.ts","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-BJUM+WUE9Qjju3fRVZAJf6axmE+tSUwG2nESUku1HtOODQHfeKFHAWPMLOpFYYWAuIPD9bMnMyZLLt41r5tEQw==","shasum":"f5ae690327ebf0964d51b5cbc6d10cb8b1b7ce4d","tarball":"https://registry.npmjs.org/cursor-memory/-/cursor-memory-1.0.4.tgz","fileCount":37,"unpackedSize":132571,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDoCaXINqNTMi4/3kaCph1FAETsdulBOwPdBFV8T01HHgIhAPPUc8UL1sTn5T6ZSsB7pNJZbUphpFGqLwUyL1TqKkmF"}]},"_npmUser":{"name":"tranhuucanh39","email":"tranhuucanh39@gmail.com"},"directories":{},"maintainers":[{"name":"tranhuucanh39","email":"tranhuucanh39@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cursor-memory_1.0.4_1778223517609_0.9980954583509791"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-31T08:44:38.120Z","modified":"2026-05-08T06:58:37.933Z","1.0.0":"2026-03-31T08:44:38.557Z","1.0.1":"2026-03-31T09:21:27.413Z","1.0.2":"2026-03-31T10:19:04.875Z","1.0.3":"2026-04-01T03:37:54.223Z","1.0.4":"2026-05-08T06:58:37.763Z"},"bugs":{"url":"https://github.com/tranhuucanh/cursor-memory/issues"},"author":{"name":"Tran Huu Canh","email":"tranhuucanh39@gmail.com","url":"0xTh3OKrypt"},"license":"MIT","homepage":"https://github.com/tranhuucanh/cursor-memory#readme","keywords":["cursor","cursor-ide","mcp","mcp-server","model-context-protocol","ai-memory","persistent-memory","semantic-search","cursor-memory","cursor-ai-memory","cursor-ide-memory","cursor-persistent-memory","cursor-semantic-search","cursor-searchable-memory","embeddings"],"repository":{"type":"git","url":"git+https://github.com/tranhuucanh/cursor-memory.git"},"description":"Persistent, searchable memory for Cursor AI — You control what your AI remembers.","maintainers":[{"name":"tranhuucanh39","email":"tranhuucanh39@gmail.com"}],"readme":"<div align=\"center\">\n\n<img width=\"180\" alt=\"cursor-memory\" src=\"https://github.com/user-attachments/assets/1ebad884-73d7-423e-b04d-86b74fdd44e4\" />\n\n# cursor-memory\n\n**Persistent, searchable memory for Cursor AI — You control what your AI remembers.**\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Node Version](https://img.shields.io/badge/node-%3E%3D20-brightgreen)](https://nodejs.org)\n[![MCP](https://img.shields.io/badge/MCP-Compatible-blue)](https://modelcontextprotocol.io)\n[![npm](https://img.shields.io/badge/npm-cursor--memory-green.svg)](https://www.npmjs.com/package/cursor-memory)\n[![npm downloads](https://img.shields.io/npm/dt/cursor-memory)](https://www.npmjs.com/package/cursor-memory)\n\n[The Problem](#-the-problem) • [Quick Demo](#-see-it-in-action) • [Installation](#-installation) • [Commands](#-commands) • [How It Works](#-how-it-works) • [Troubleshooting](#-troubleshooting)\n\n</div>\n\n---\n\n## 😤 The Problem\n\nYou just spent an hour with Cursor AI figuring out the right architecture. You made decisions, weighed trade-offs, landed on a solution.\n\nThen you open a new chat.\n```\n❌ \"What database did we choose last week?\"\n   → \"I don't have access to previous conversations.\"\n\n❌ \"Continue the migration plan from yesterday.\"\n   → \"Could you provide context about the migration?\"\n\n❌ \"Why did we pick EFS over EBS again?\"\n   → \"I don't have information about previous decisions.\"\n```\n\n**Every new chat, your AI has amnesia.** Every decision you made, every context you built — gone.\n\nThe workarounds make it worse:\n\n| | |\n|---|---|\n| 📝 Save to a `.md` file | Now you have 1.000 files. Which one was it again? |\n| 📎 Attach files to every chat | Token costs pile up. Most of it isn't even relevant. |\n| 🔁 Retype context manually | You become the memory for a tool that's supposed to help you think. |\n\n---\n\n## ✨ See It in Action\n\n<div align=\"center\">\n  <video src=\"https://github.com/user-attachments/assets/a6bcb5e2-15d8-4533-8240-56d6ee4d70f6\" controls width=\"100%\"></video>\n  <p><sub>▶ Can't see the video? <a href=\"https://github.com/tranhuucanh/cursor-memory\">Watch on GitHub</a></sub></p>\n</div>\n\n---\n\n## 🎯 Why cursor-memory\n\n**You decide what gets saved.** Type `/memo` when something matters — AI creates a structured memo, tags it, and stores it locally. Next time you need it, it's there.\n\n<table>\n  <tr>\n    <td>🎛️ <b>You control what's saved</b></td>\n    <td>Nothing gets saved without you triggering <code>/memo</code>. No background processes, no noise.</td>\n  </tr>\n  <tr>\n    <td>⚡ <b>Context-aware auto-search</b></td>\n    <td><b>AI detects when your question refers to past context and automatically searches your memories</b> — no command needed. <code>/recall</code> is available as a manual fallback.</td>\n  </tr>\n  <tr>\n    <td>🔍 <b>Finds what you mean, not what you type</b></td>\n    <td>Hybrid FTS5 keyword + vector semantic search. <b>Searches by meaning, not just exact words</b>.</td>\n  </tr>\n  <tr>\n    <td>🌍 <b>Cross-language</b></td>\n    <td><b>Save in any language, search in any language</b>. Multilingual E5 — 100+ languages, fully cross-lingual.</td>\n  </tr>\n  <tr>\n    <td>📝 <b>Structured summaries</b></td>\n    <td>AI generates organized memos with <b>Decisions → Key Details → Context → Next Steps</b> — not raw text dumps.</td>\n  </tr>\n  <tr>\n    <td>📄 <b>Handles long content</b></td>\n    <td>Long discussions are automatically split into overlapping chunks — <b>every section is searchable</b>, nothing gets lost.</td>\n  </tr>\n  <tr>\n    <td>📁 <b>Global + per-repo scope</b></td>\n    <td>Global memories visible everywhere. Repo memories isolated per project — one repo never sees another's context.</td>\n  </tr>\n  <tr>\n    <td>🧠 <b>Choose your model</b></td>\n    <td>Small (~50MB), Medium (~115MB), or Large (~270MB) — <b>pick the size that fits your machine</b>.</td>\n  </tr>\n  <tr>\n    <td>🔒 <b>Fully private, runs offline</b></td>\n    <td>No cloud. No API keys. No telemetry. Everything stays on your machine.</td>\n  </tr>\n</table>\n\n---\n\n## 📦 Installation\n\n### Prerequisites\n\n- **Node.js** — Node 20, 22, or 24 LTS recommended ([download](https://nodejs.org))\n  - Native modules ship prebuilt binaries for these versions, no build tools required.\n- **C++ compiler** *(optional)* — only needed as a fallback for non-LTS Node versions (Xcode CLI on Mac, `build-essential` on Ubuntu, VS Build Tools on Windows).\n\n### ⚡ 2-minute setup\n\n```bash\n# 1. Install globally\nnpm install -g cursor-memory\n\n# 2. Setup — downloads model, configures Cursor automatically\ncursor-memory setup\n\n# 3. Restart Cursor — done 🎉\n```\n\nThe CLI handles everything:\n- 📥 Downloads the embedding model\n- ⚙️ Configures MCP server for Cursor\n- 📋 Sets up AI behavior rules\n\n### 🤖 Choose your model\n\n| Model | Size | RAM | Best for |\n|-------|------|-----|----------|\n| Small | ~50MB | ~200MB | Lightweight, fast |\n| Medium | ~115MB | ~500MB | Good balance |\n| **Large** ⭐ | ~270MB | ~1GB | Best accuracy (recommended) |\n\nAll models support **100+ languages** and run **fully offline** after download.\n\n---\n\n## 💬 Commands\n\n### In Cursor Chat\n\nThree commands. That's it.\n\n| Command | What it does |\n|---------|-------------|\n| `/memo` or `/memo [text]` | 💾 With text → saves directly. Without → AI summarizes the conversation into a structured memo |\n| `/recall [query]` | 🔍 Searches your memories by keyword + semantic meaning |\n| `/forget [query]` | 🗑️ Searches → previews matches → confirms before deleting |\n\n> AI detects when your question refers to past context and automatically searches your memories — no command needed. `/recall` is available as a manual fallback.\n\n<details>\n<summary><b>🛠️ CLI Commands</b></summary>\n\n```bash\ncursor-memory setup      # First-time setup or switch model\ncursor-memory status     # Check MCP, rules, model, database health\ncursor-memory reset      # Clear all data and start fresh\ncursor-memory -v         # Show version\ncursor-memory --help     # Show all commands\n```\n</details>\n\n## 🔬 How It Works\n\n### 💾 Architecture\n\n<p align=\"center\">\n  <img width=\"100%\" alt=\"Architecture\" src=\"https://github.com/user-attachments/assets/ce99fdff-854f-408c-8ab0-c4010cfb1493\" />\n</p>\n\n### 💾 Save & Search Flow\n\n<p align=\"center\">\n  <img alt=\"Save and Search Flow\" width=\"100%\" src=\"https://github.com/user-attachments/assets/b6761640-9172-4ca0-b53f-2d1adb7c6469\" />\n</p>\n\n### 📁 Scope Isolation\n\n<p align=\"center\">\n  <img alt=\"Scope Isolation\" width=\"100%\" src=\"https://github.com/user-attachments/assets/ac90d05a-2ae9-462d-912e-e284d5dc44d5\" />\n</p>\n\n---\n\n## 🧪 Tech Stack\n\n| Component | Technology | Why |\n|-----------|-----------|-----|\n| 🔌 MCP Server | `@modelcontextprotocol/sdk` | Standard protocol for AI tool integration |\n| 🗄️ Database | `better-sqlite3` | Zero-config, fast, embedded, WAL mode |\n| 🔎 Vector search | `sqlite-vec` | Native C extension, cosine KNN, no external DB |\n| 📝 Full-text search | SQLite FTS5 | BM25 ranking, auto-sync via triggers |\n| 🧠 Embeddings | `@huggingface/transformers` | Local ONNX inference, no API keys |\n| 🌍 Model | Multilingual E5 (Q8) | 100+ languages, asymmetric search, quantized |\n| ⌨️ CLI | `commander` | Interactive setup, model management |\n| 💻 Language | TypeScript (ESM) | Type safety, modern module system |\n\n---\n\n## 🐛 Troubleshooting\n\n<details>\n<summary><b>🔌 MCP not connecting after setup</b></summary>\n\nRestart Cursor completely (quit and reopen — not just reload window).\n\n```bash\ncursor-memory status        # check system health\n```\n\nIf auto-config failed, manually add MCP server in Cursor:\n\n**Cursor → Settings → MCP** → Add server, or edit your MCP config file:\n\n```json\n{\n  \"mcpServers\": {\n    \"cursor-memory\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"cursor-memory\"]\n    }\n  }\n}\n```\n</details>\n\n<details>\n<summary><b>⚠️ Node.js version mismatch / \"unsupported Node.js version\"</b></summary>\n\ncursor-memory requires Node **20, 22, or 24 LTS** — these are the versions that ship with prebuilt native binaries (`better-sqlite3`). Other versions may fail to install.\n\nCheck your version:\n\n```bash\nnode -v\n```\n\nIf you're on a non-LTS version (18, 19, 21, etc.), install an LTS via [nvm](https://github.com/nvm-sh/nvm):\n\n```bash\nnvm install 22\nnvm use 22\nnpm install -g cursor-memory\ncursor-memory setup\n```\n\nIf you switched Node versions after installing, just reinstall:\n\n```bash\nnpm install -g cursor-memory\ncursor-memory setup\n```\n</details>\n\n<details>\n<summary><b>🔍 AI doesn't auto-search memories</b></summary>\n\nRun `cursor-memory setup` again to reinstall rules.\n\nIf that doesn't work, manually add the rule via **Cursor → Settings → Rules** → create a new User rule and paste the following:\n\n```\n## cursor-memory MCP\n\n### Auto-recall\nBEFORE answering, ask yourself: \"Does the user expect me to know something from a previous chat?\"\nIf YES → call search_memory from cursor-memory MCP immediately. Do NOT answer first.\nIf UNSURE → answer normally, do NOT search.\n\nSigns of past context (any language):\n- References to previous decisions (\"what did we choose\", \"as we discussed\")\n- Continuation requests (\"continue the plan\", \"pick up where we left off\")\n- \"We/our\" referring to past work, not general questions\n- Temporal cues: \"last time\", \"before\", \"already\", \"remember\", \"yesterday\"\n\n### Auto-save awareness\nAfter a substantive conversation, assess whether it produced knowledge worth preserving:\n\nSUGGEST SAVING when:\n- A decision was reached (chose X over Y, with reasoning)\n- A plan, strategy, or approach was agreed upon\n- A problem was analyzed and a solution was identified\n- A comparison or evaluation was completed with a conclusion\n- Important context, constraints, or requirements were established\n- Knowledge was shared that would be useful to recall in future sessions\n\nDo NOT suggest when:\n- Quick Q&A with a generic/textbook answer\n- Still exploring — no conclusion or decision yet\n- User already said /memo in this conversation\n\nHow to suggest: at the END of your response, briefly ask:\n\"This seems worth remembering. Want me to /memo this?\"\nDo NOT auto-save without user confirmation.\n\n### Commands\n/memo → save to memory. With content: save directly. Without content: summarize conversation then save.\n/recall → search via search_memory\n/forget → delete via delete_memory\n```\n</details>\n\n<details>\n<summary><b>❌ Search returns no results</b></summary>\n\n- Try more specific terms\n- Similarity threshold is 0.2 — very broad queries may not match\n- Consider upgrading to a larger model for better recall accuracy\n</details>\n\n---\n\n## 🛠️ Development\n\n```bash\ngit clone https://github.com/tranhuucanh/cursor-memory.git\ncd cursor-memory\nnpm install\nnpm run build       # build once\nnpm run dev         # watch mode\nnode dist/cli.js setup\nnode dist/index.js\n```\n\n---\n\n## 🤝 Contributing\n\n1. 🍴 Fork the repository\n2. 🌿 Create feature branch: `git checkout -b feature/your-feature`\n3. 💾 Commit: `git commit -m 'feat: your feature'`\n4. 🚀 Push: `git push origin feature/your-feature`\n5. 🔁 Open a Pull Request\n\n---\n\n## 📄 License\n\nMIT — see [LICENSE](LICENSE).\n\n---\n\n## 🙏 Acknowledgments\n\n- [Model Context Protocol SDK](https://github.com/modelcontextprotocol/sdk)\n- [HuggingFace Transformers.js](https://github.com/huggingface/transformers.js)\n- [sqlite-vec](https://github.com/asg017/sqlite-vec) by Alex Garcia\n- [Multilingual E5](https://huggingface.co/intfloat/multilingual-e5-base) by Microsoft\n\n---\n\n<div align=\"center\">\n\n**Built with ❤️ for developers who are tired of repeating themselves to AI**\n\n[![Star History Chart](https://api.star-history.com/image?repos=tranhuucanh/cursor-memory&type=date&legend=top-left)](https://www.star-history.com/?repos=tranhuucanh%2Fcursor-memory&type=date&legend=top-left)\n\n[⬆ Back to top](#-cursor-memory)\n\n</div>\n","readmeFilename":"README.md"}