Skip to main content
Glama
cmdparkour

memory-mcp-server

by cmdparkour
README.md
# Memory MCP Server

**Universal personal memory system for AI assistants** — a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server that gives any AI tool persistent, searchable memory across sessions.

Works with **Claude Desktop, Cursor, Windsurf, Cline, Roo Code, OpenCode, Continue** and any MCP-compatible client.

100% local. No API keys. No cloud. Your memories stay on your machine.

---

## Features

- **Hybrid Search** — semantic vector search + full-text keyword search, combined for best results
- **100% Local** — uses [FastEmbed](https://github.com/qdrant/fastembed) for embeddings, runs entirely on your machine
- **Zero Config** — `uvx memory-mcp-server` just works
- **Universal** — one server, all your AI tools share the same memory
- **Structured** — five memory types: `preference`, `project`, `workflow`, `knowledge`, `summary`
- **Auto-setup** — one command to configure all your AI tools
- **Fast** — SQLite + LanceDB, sub-second queries even with thousands of memories

## Quick Start

### Prerequisites

- Python 3.11+
- [uv](https://docs.astral.sh/uv/) (recommended) or pip

### Install

```bash
# Using uv (recommended)
uv tool install memory-mcp-server

# Or with pip
pip install memory-mcp-server
```

### Auto-Configure All Your AI Tools

```bash
memory-mcp-setup setup
```

This detects your installed AI tools and adds memory-mcp to each one automatically.

### Or Configure Manually

See [Manual Configuration](#manual-configuration) below.

---

## Supported AI Tools

| Tool | Auto-Setup | Manual Config |
|------|:----------:|:-------------:|
| Claude Desktop | ✅ | ✅ |
| Cursor | ✅ | ✅ |
| Windsurf | ✅ | ✅ |
| Cline (VS Code) | ✅ | ✅ |
| Roo Code (VS Code) | ✅ | ✅ |
| OpenCode | ✅ | ✅ |
| Continue | — | ✅ |
| Any MCP Client | — | ✅ |

---

## Manual Configuration

### Claude Desktop

Add to `claude_desktop_config.json`:
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "memory": {
      "command": "uvx",
      "args": ["memory-mcp-server"]
    }
  }
}
```

### Cursor

Add to `~/.cursor/mcp.json`:

```json
{
  "mcpServers": {
    "memory": {
      "command": "uvx",
      "args": ["memory-mcp-server"]
    }
  }
}
```

### Windsurf

Add to `~/.codeium/windsurf/mcp_config.json`:

```json
{
  "mcpServers": {
    "memory": {
      "command": "uvx",
      "args": ["memory-mcp-server"]
    }
  }
}
```

### Cline (VS Code)

Cline auto-detects MCP servers, or add manually in Cline MCP settings:

```json
{
  "mcpServers": {
    "memory": {
      "command": "uvx",
      "args": ["memory-mcp-server"],
      "disabled": false,
      "autoApprove": []
    }
  }
}
```

### Roo Code (VS Code)

Same format as Cline, in Roo MCP settings:

```json
{
  "mcpServers": {
    "memory": {
      "command": "uvx",
      "args": ["memory-mcp-server"],
      "disabled": false,
      "autoApprove": []
    }
  }
}
```

### OpenCode

Add to `~/.config/opencode/opencode.json`:

```json
{
  "mcp": {
    "memory": {
      "type": "local",
      "command": ["uvx", "memory-mcp-server"],
      "enabled": true
    }
  }
}
```

### Any MCP Client (stdio transport)

```bash
uvx memory-mcp-server
```

The server communicates over stdio using the MCP protocol.

---

## MCP Tools

The server exposes 6 tools:

| Tool | Description |
|------|-------------|
| `memory_store` | Store a new memory with kind, tags, priority |
| `memory_search` | Hybrid semantic + keyword search |
| `memory_list` | List memories with optional filters |
| `memory_update` | Update content, tags, or priority |
| `memory_delete` | Delete a memory by ID |
| `memory_stats` | Get total count and breakdown |

### Memory Kinds

| Kind | Use For |
|------|---------|
| `preference` | Personal preferences: coding style, tools, conventions |
| `project` | Project-specific: architecture, tech stack, decisions |
| `workflow` | Processes: PR flow, deployment steps, review checklists |
| `knowledge` | Technical insights: gotchas, solutions, tips |
| `summary` | Session summaries: key decisions, outcomes |

---

## Teaching Your AI to Use Memory

Copy the contents of [`SKILL.md`](./SKILL.md) into your AI tool's system prompt, custom instructions, or rules file. This teaches the AI when and how to use the memory tools.

### Where to Put It

| Tool | Location |
|------|----------|
| Claude Desktop | Project Instructions or `CLAUDE.md` |
| Cursor | `.cursor/rules/*.mdc` or Settings → Rules |
| Windsurf | `.windsurfrules` |
| Cline | `.clinerules` |
| Roo Code | `.roorules` |
| OpenCode | `.opencode/skills/memory-system/SKILL.md` |
| Continue | `.continue/rules/*.md` |

---

## CLI Commands

```bash
# Auto-configure all detected AI tools
memory-mcp-setup setup

# Auto-configure a specific tool
memory-mcp-setup setup --tool cursor

# Preview config without writing (dry run)
memory-mcp-setup setup --dry-run

# Show config snippet for manual setup
memory-mcp-setup show-config --tool claude-desktop

# Health check
memory-mcp-setup doctor
```

---

## Environment Variables

| Variable | Default | Description |
|----------|---------|-------------|
| `MEMORY_DATA_DIR` | Platform-specific (see below) | Directory for memory database files |
| `MEMORY_CACHE_DIR` | System default | Cache directory for embedding model |

### Default Data Directory

| Platform | Path |
|----------|------|
| macOS | `~/Library/Application Support/memory-mcp/data` |
| Linux | `~/.local/share/memory-mcp/data` |
| Windows | `%APPDATA%\memory-mcp\data` |

---

## Architecture

```
┌─────────────────────────────────────────────┐
│              AI Tool (Client)                │
│  Claude / Cursor / Windsurf / Cline / ...    │
└────────────────┬────────────────────────────┘
                 │ MCP (stdio)
┌────────────────▼────────────────────────────┐
│          memory-mcp-server                   │
│                                              │
│  ┌─────────────┐  ┌──────────────────────┐  │
│  │   FastMCP    │  │   EmbeddingManager   │  │
│  │  (6 tools)   │  │  (FastEmbed/BGE)     │  │
│  └──────┬──────┘  └──────────┬───────────┘  │
│         │                    │               │
│  ┌──────▼────────────────────▼───────────┐  │
│  │           MemoryStore                  │  │
│  │                                        │  │
│  │  ┌──────────┐    ┌─────────────────┐  │  │
│  │  │  SQLite   │    │    LanceDB      │  │  │
│  │  │ metadata  │    │  vector index   │  │  │
│  │  │   + FTS   │    │  (384-dim BGE)  │  │  │
│  │  └──────────┘    └─────────────────┘  │  │
│  └────────────────────────────────────────┘  │
└──────────────────────────────────────────────┘
```

- **SQLite**: stores memory metadata, supports full-text search via FTS5
- **LanceDB**: stores embedding vectors, supports fast approximate nearest neighbor search
- **FastEmbed**: runs BAAI/bge-small-en-v1.5 locally for 384-dimensional embeddings

---

## Development

```bash
# Clone
git clone https://github.com/cmdparkour/memory-mcp-server.git
cd memory-mcp-server

# Install with dev dependencies
uv sync

# Run directly
uv run memory-mcp

# Run setup CLI
uv run memory-mcp-setup doctor
```

---

## FAQ

### Does it need an API key?
No. Everything runs locally — embedding model included.

### Does it support Chinese / non-English languages?
Yes. The BGE embedding model supports multilingual text. SQLite FTS5 also handles CJK characters.

### Can multiple AI tools share the same memory?
Yes — that's the whole point. All tools point to the same local database.

### Where is my data stored?
See [Default Data Directory](#default-data-directory). You can override with `MEMORY_DATA_DIR`.

### How do I back up my memories?
Copy the data directory. It contains a SQLite database and a LanceDB folder.

### How do I reset all memories?
Delete the data directory.

---

## License

MIT — see [LICENSE](./LICENSE).

TDQS

A3.5/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: delete by ID, list with filters, search by similarity/keywords, get stats, store new, update existing. No overlap.

Naming Consistency5/5

All tools follow a consistent 'memory_verb' pattern in snake_case, making the operation immediately clear.

Tool Count5/5

6 tools is well-scoped for a memory system, covering core operations without unnecessary bloat.

Completeness4/5

Covers CRUD (store, list, search, update, delete) plus stats. Minor gap: no explicit get-by-id, but list/search likely return full memory objects.

Maintenance

ActivityInactive
ResponsivenessNo issues