io.github.kurovu146/memory-fts
Long-term memory for Claude Code with SQLite FTS5 search and BM25 ranking
Ask AI about io.github.kurovu146/memory-fts
Powered by Claude Β· Grounded in docs
I know everything about io.github.kurovu146/memory-fts. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
claude-memory-fts
Long-term memory MCP server for Claude Code. Stores facts in a local SQLite database with hybrid search (FTS5 + semantic vector similarity) and automatic context injection.
Features
- Hybrid search β FTS5 keyword search + semantic vector similarity, merged via Reciprocal Rank Fusion (RRF)
- Semantic understanding β find memories by meaning, not just keywords (powered by all-MiniLM-L6-v2 embeddings)
- Auto context injection β top 30 most important memories injected into every prompt via hook
- Importance ranking β facts ranked by access frequency, recency decay, and category weight
- Access tracking β tracks how often each memory is accessed
- Upsert β automatically updates existing facts instead of duplicating
- Categorized β organize by type: preference, decision, technical, project, workflow, personal, general
- MCP Resources β exposes
memory://contextresource for session context - Zero config β works out of the box, stores data in
~/.claude/memory.db
Install
# Add to Claude Code
claude mcp add memory -- npx claude-memory-fts
# Auto-configure context injection hook (recommended)
npx claude-memory-fts --setup-hook
The --setup-hook command automatically:
- Creates
~/.claude/scripts/memory-context.sh - Adds a
UserPromptSubmithook to~/.claude/settings.json - Top 30 memories are injected into every prompt automatically
CLI Commands
| Command | Description |
|---|---|
npx claude-memory-fts | Start MCP server (used by Claude Code) |
npx claude-memory-fts --context | Output top 30 facts (used by hook script) |
npx claude-memory-fts --setup-hook | Auto-configure context injection hook |
Configuration
| Environment Variable | Default | Description |
|---|---|---|
MEMORY_DB_PATH | ~/.claude/memory.db | Path to the SQLite database file |
Example with custom path:
claude mcp add memory -e MEMORY_DB_PATH=/path/to/my/memory.db -- npx claude-memory-fts
Tools
memory_save
Save a fact to long-term memory.
| Parameter | Type | Required | Description |
|---|---|---|---|
fact | string | yes | The information to remember |
category | string | no | One of: preference, decision, personal, technical, project, workflow, general |
memory_search
Hybrid search: runs FTS5 and semantic search in parallel, merges results with RRF. Falls back to LIKE for partial matches.
| Parameter | Type | Required | Description |
|---|---|---|---|
keyword | string | yes | Search keyword or phrase |
limit | number | no | Max results (default: 10) |
memory_update
Update a memory's content or category by ID.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | yes | Memory ID |
fact | string | no | New content (omit to keep current) |
category | string | no | New category (omit to keep current) |
memory_list
List all saved memories grouped by category.
| Parameter | Type | Required | Description |
|---|---|---|---|
category | string | no | Filter by category |
limit | number | no | Max results (default: 50) |
memory_delete
Delete a memory by ID.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | yes | Memory ID |
Resources
memory://context
MCP resource exposing top 30 facts ranked by importance score:
- Access frequency β frequently accessed facts score higher (capped at 20 points)
- Recency β recently updated facts score higher (10 points, decays over 90 days)
- Category weight β preference/decision (3), workflow/technical (2), project/personal (1), general (0)
How It Works
Search Pipeline
- FTS5 + BM25 and semantic vector similarity run in parallel
- Results are merged and deduplicated using Reciprocal Rank Fusion (k=60)
- Facts appearing in both lists get naturally boosted
- If both return empty, falls back to LIKE substring matching
- Access count is tracked on every search hit
Embeddings
- Model: all-MiniLM-L6-v2 (384 dimensions, ~23MB)
- Generated locally via
@xenova/transformersβ no API calls, no data leaves your machine - Embeddings are created on save and backfilled on server startup
- Cosine similarity with 0.3 threshold to filter noise
Storage
- SQLite with WAL mode for fast concurrent reads/writes
- FTS5 virtual table synced via triggers for real-time full-text indexing
- Embeddings stored as BLOB columns alongside facts
Development
git clone https://github.com/kurovu146/claude-memory-mcp.git
cd claude-memory-mcp
npm install
npm run build
npm test
License
MIT
