Skip to main content

Personal claude.ai conversation archive — ingest, embed, search, and MCP server

Project description

tinderbox-archive

A personal claude.ai conversation archive with hybrid search, Haiku-powered enrichment, and an MCP server for Claude Desktop / Claude Code.

Built to answer: "What did I talk to Claude about six months ago?"

What it does

  • Ingests your claude.ai conversation export (ZIP) into a Supabase database — messages, artifacts, attachments
  • Embeds every message with mxbai-embed-large via Ollama (1024d, stored in pgvector)
  • Searches using hybrid retrieval — cosine similarity + full-text, merged with RRF scoring
  • Enriches each conversation with Claude Haiku: summary, topics, project tags, key decisions, named AI personas
  • Serves everything over MCP so Claude Desktop or Claude Code can search your archive mid-conversation

Requirements

  • Python 3.12+
  • Supabase project with pgvector enabled
  • Ollama running locally with mxbai-embed-large pulled
  • Anthropic API key (for enrichment only — search works without it)

Installation

pip install tinderbox-archive

Or from source:

git clone https://github.com/luckyrmp/tinderbox-archive
cd tinderbox-archive/parser
pip install -e .

Setup

1. Supabase schema

Apply the migrations in migrations/ to your Supabase project. The schema is named tinderbox and must be exposed via PostgREST.

2. Environment

Create a .env file (default location: ~/.secrets/tinderbox.env):

SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SERVICE_KEY=your-service-role-key
ANTHROPIC_API_KEY=your-anthropic-key   # enrichment only

Or set the variables directly in your shell. Point to a custom env file:

export TINDERBOX_ENV_FILE=/path/to/your.env

3. Pull your Ollama model

ollama pull mxbai-embed-large

Usage

Ingest a conversation export

Download your export from claude.ai (Settings → Export Data), then:

tinderbox ingest /path/to/conversations.zip

Embed messages

tinderbox embed

Search

tinderbox search "what did we decide about the database schema"

Enrich conversations

tinderbox enrich

This calls Claude Haiku once per conversation and writes structured annotations (summary, topics, project tags, key decisions, named AI personas) to Supabase.

MCP server (Claude Desktop / Claude Code)

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "tinderbox": {
      "command": "/path/to/tinderbox-archive/parser/scripts/tinderbox_mcp.sh"
    }
  }
}

Or if installed via pip, point directly at the module:

{
  "mcpServers": {
    "tinderbox": {
      "command": "python3",
      "args": ["-m", "tinderbox.mcp.server"],
      "env": {
        "TINDERBOX_ENV_FILE": "/path/to/your.env"
      }
    }
  }
}

Two tools are exposed:

  • tinderbox_search — hybrid search returning top results with enrichment summaries
  • tinderbox_get_conversation — fetch a full conversation thread by export ID

CLI reference

tinderbox ingest <zip>          Ingest a claude.ai export ZIP
tinderbox embed                 Generate embeddings for new messages
tinderbox search <query>        Hybrid search (semantic + full-text)
tinderbox enrich                Enrich conversations with Haiku annotations
tinderbox enrich --retry-failures   Re-attempt previously failed enrichments
tinderbox runs list             Show recent ingest runs
tinderbox named-clean           Remove false-positive named instances
tinderbox staleness             Check how stale the archive is
tinderbox qa run                Run retrieval quality eval

Architecture

claude.ai export ZIP
        ↓
  tinderbox ingest       → Supabase: conversations, messages, artifacts
        ↓
  tinderbox embed        → Supabase: embeddings (pgvector, mxbai-embed-large 1024d)
        ↓
  tinderbox enrich       → Supabase: enrichment (Haiku annotations)
        ↓
  tinderbox search       → hybrid retrieval (cosine + FTS + RRF)
        ↓
  MCP server             → Claude Desktop / Claude Code tools

Supabase is accessed via the REST API (supabase-py). No direct Postgres connection required.

Design notes

  • Memorial design: conversations are never deleted. Deleted-upstream conversations are tombstoned (deleted_upstream=true) and remain searchable.
  • Mass-tombstone canary: ingest halts if more than 10% of active conversations would be tombstoned in a single run.
  • Enrichment is opinion: Haiku annotations are surfaced as navigation aids, not ground truth. The original messages are always the source of truth.
  • Cache layer: a SQLite read cache (740× speedup on repeated searches) wraps Supabase queries. Invalidated automatically on new ingest or enrichment.

License

Apache 2.0 — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

claude_tinderbox-0.1.0-py3-none-any.whl (70.1 kB view details)

Uploaded Python 3

File details

Details for the file claude_tinderbox-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for claude_tinderbox-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6348ddf50ad3cad96080c03a6a3e9780cceda1cfe6e86a4122ca41120534eb23
MD5 c51b0d4183602b8cc511da5b0c14df45
BLAKE2b-256 8f8caad9673964bcbb4c76e1af8afc1f98cf4fa993deba6f3f04061d29db9623

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page