mcp-memory
by oneKn8
README.md
# mcp-memory
**Your AI agent forgets everything between sessions. This fixes that.**
An MCP server that gives any AI agent persistent memory with semantic search. Store decisions, context, and knowledge once -- recall them with natural language queries across any future session.
Built on ChromaDB embeddings, scoped per project, runs entirely locally.
## Why
Every MCP-based agent (Claude Desktop, Claude Code, Cursor) starts each session with amnesia. Decisions made yesterday are gone. Context from last week is gone. You re-explain the same things every time.
mcp-memory adds four tools -- `remember`, `recall`, `forget`, `list_memories` -- that persist knowledge across sessions with vector similarity search. Your agent remembers what matters and finds it when relevant.
## Features
- **Semantic recall** -- vector embeddings (all-MiniLM-L6-v2) find related memories, not just keyword matches
- **Per-project scoping** -- memories don't leak between projects
- **Importance scoring** -- prioritize critical decisions (1-5 scale)
- **Tag-based filtering** -- organize memories by category
- **Fully local** -- ChromaDB on disk, no cloud, no API keys, no telemetry
## Installation
```bash
pip install -e .
```
## Configuration
| Environment Variable | Default | Description |
|---|---|---|
| `MCP_MEMORY_DATA_DIR` | `~/.mcp-memory/` | Where memories are stored on disk |
| `MCP_MEMORY_DEFAULT_PROJECT` | `global` | Default project scope |
| `MCP_MEMORY_MAX_RESULTS` | `10` | Default number of recall results |
## MCP Client Setup
### Claude Desktop
Add to `~/.config/claude/claude_desktop_config.json`:
```json
{
"mcpServers": {
"memory": {
"command": "mcp-memory",
"env": {
"MCP_MEMORY_DATA_DIR": "~/.mcp-memory"
}
}
}
}
```
### Claude Code
Add to `.claude/settings.json`:
```json
{
"mcpServers": {
"memory": {
"command": "mcp-memory"
}
}
}
```
## Tools
### remember
Store a memory for later recall.
| Arg | Type | Default | Description |
|---|---|---|---|
| `content` | string | required | The text to remember |
| `project` | string | "global" | Project scope |
| `tags` | list[string] | [] | Tags for filtering |
| `source` | string | "" | Where this memory came from |
| `importance` | int | 3 | Priority 1-5 |
### recall
Search memories by semantic similarity.
| Arg | Type | Default | Description |
|---|---|---|---|
| `query` | string | required | Natural language search |
| `project` | string | all | Limit to project |
| `tags` | list[string] | none | Filter by tags |
| `n_results` | int | 10 | Max results |
| `min_relevance` | float | none | Minimum relevance 0.0-1.0 |
### forget
Delete stored memories.
| Arg | Type | Default | Description |
|---|---|---|---|
| `memory_ids` | list[string] | none | Specific IDs to delete |
| `project` | string | none | Delete all in project |
| `tags` | list[string] | none | Delete by tags |
### list_memories
Browse stored memories with pagination.
| Arg | Type | Default | Description |
|---|---|---|---|
| `project` | string | all | Filter to project |
| `tags` | list[string] | none | Filter by tags |
| `page` | int | 1 | Page number |
| `page_size` | int | 20 | Results per page |
## Development
```bash
pip install -e ".[dev]"
pytest # run tests
ruff check . # lint
ruff format . # format
mypy mcp_memory # type check
```
## License
MIT
TDQS
A3.6/5.0
Scored across 4 tools
Disambiguation5/5
Each tool has a distinct purpose: remember stores, recall searches semantically, list_memories browses with filtering, and forget deletes. There is no overlap or ambiguity.
Naming Consistency4/5
Most tools use single verb names (remember, recall, forget), but 'list_memories' breaks the pattern with a verb_noun style. The naming is clear but not fully consistent.
Tool Count5/5
With 4 tools covering create, read (two retrieval methods), and delete, the count is well-scoped for a memory server. No tools feel redundant or missing.
Completeness3/5
The set covers create, read (list and search), and delete, but lacks an update operation. There is no way to modify an existing memory, which is a notable gap for a typical CRUD lifecycle.
Maintenance
ActivityInactive
ResponsivenessNo issues