It keeps what you said once — a decision, a preference, a quirk of the project — in a local database, and puts the most important of it back in front of the model at the start of every prompt.
A Node server that stores facts in SQLite at ~/.claude/memory.db and searches them two ways at once — FTS5 keyword search and semantic vector similarity, merged with Reciprocal Rank Fusion. A setup command installs a hook that injects the most important memories into every prompt.
- memory_save stores a fact, optionally categorised as preference, decision, technical, project, workflow, personal or general
- memory_search runs FTS5 and semantic search in parallel and merges them, with a LIKE fallback for partial matches
- memory_list, memory_update and memory_delete read the store and keep it correct
- Saving a fact that already exists updates it instead of creating a second copy
- Importance ranking by access frequency, recency decay and category weight, so what surfaces is what gets used
- A memory://context resource exposes the session context to the client directly
Node with npx: `claude mcp add memory -- npx claude-memory-fts`. No account and no key — the database is a local file. An environment variable moves it off the default ~/.claude/memory.db, and the package's own setup command writes the UserPromptSubmit hook that does the automatic injection.
One command — claude mcp add memory -- npx claude-memory-fts
