Skip to main content
Glama
fifeek0

claude-history-mcp

by fifeek0
README.md
# claude-history-mcp

MCP server that makes your Claude conversation history searchable. Export your conversations from [claude.ai](https://claude.ai), ingest them into a local SQLite database with full-text search, and query them from Claude Code or Claude Desktop.

## Prerequisites

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

## Setup

### 1. Export your Claude history

Go to [claude.ai](https://claude.ai) → Settings → Export Data. You'll receive an email with a download link containing a folder with `conversations.json`.

### 2. Clone and ingest

```bash
git clone https://github.com/fifeek0/claude-history-mcp.git
cd claude-history-mcp

# Ingest exported conversations into a local SQLite database
uv run python -m claude_history.ingest /path/to/exported/data/
```

This creates `history.db` in the project root with FTS5 full-text search indexes.

### 3. Configure as MCP server

#### Claude Code

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

```json
{
  "mcpServers": {
    "claude-history": {
      "command": "uv",
      "args": ["run", "--directory", "/absolute/path/to/claude-history-mcp", "python", "-m", "claude_history"]
    }
  }
}
```

#### Claude Desktop

Add to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "claude-history": {
      "command": "uv",
      "args": ["run", "--directory", "/absolute/path/to/claude-history-mcp", "python", "-m", "claude_history"]
    }
  }
}
```

Config file location:
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`

## Available MCP Tools

| Tool | Description |
|------|-------------|
| `search_history` | Full-text search across all messages. Supports FTS5 syntax (`AND`, `OR`, `NOT`, `"phrases"`). Optional topic filter. |
| `get_conversation_messages` | Get full conversation content with pagination (20 messages per page). |
| `list_all_topics` | List topic categories with conversation and message counts. |
| `browse_conversations` | Browse conversations by topic, sorted by date or size. |
| `conversation_summary` | Quick overview: stats, first and last human message. |

## Customizing Topic Classification

Topics are assigned by keyword matching during ingestion. Edit `src/claude_history/classify.py` to customize the `TOPIC_RULES` dictionary:

```python
TOPIC_RULES = {
    "Your Topic": ["keyword1", "keyword2", ...],
    ...
}
```

After editing, re-run the ingest command to reclassify all conversations.

## Re-ingesting

Running ingest again deletes the existing database and rebuilds it from scratch — safe to re-run after a fresh export or after changing classification rules.

TDQS

A3.6/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct operation: listing topics, browsing conversations, summarizing a conversation, searching messages, and fetching full messages. The uuid-based summary and full-message tools are clearly differentiated by scope.

Naming Consistency4/5

Mostly snake_case with verb_noun pattern (browse_conversations, search_history, get_conversation_messages), but conversation_summary is a noun phrase and list_all_topics inserts 'all', creating minor inconsistency.

Tool Count5/5

Five tools is a well-scoped, focused set for a read-only conversation history server; no tool feels redundant and the count matches the domain.

Completeness4/5

Core read operations (topics, browse, summary, search, full messages) are covered, but browse_conversations lacks pagination offset and a date filter despite the description, leaving minor gaps.

Maintenance

ActivityInactive
ResponsivenessNo issues