The performance section is the tell. The author found the benchmark script was measuring coroutine construction rather than search time, replaced every previously published figure with a measured one, and left a note saying the old numbers were never actually measured. The current claim is modest and reproducible: FTS5 search around 10 to 13ms median on a 159-conversation dataset, roughly ten times faster than the linear JSON scan it replaces. Treat those as order-of-magnitude, as the README asks.
An MCP server that stores conversations and makes them searchable with SQLite FTS5 full-text search and relevance ranking. Conversations are filed on disk by date and topic under `~/claude-memory/`, with topics extracted automatically, and importers cover Claude, ChatGPT, Cursor and a generic format.
- Full-text search with relevance ranking, where query text is treated as literal Unicode terms so punctuation and FTS5 operators do not change what you asked — `search_conversations`, returning IDs for exact retrieval
- Retrieval of a stored conversation by ID, read from the authoritative JSON store and truncated to a `max_chars` limit so a long thread cannot flood the model's context — `get_conversation`
- Storage with automatic topic extraction and indexing — `add_conversation`
- Four narrower lookups: `search_by_topic`, `search_by_tag` for metadata like `starred` or `archived`, `search_by_session_id` for reconstructing a multi-turn session spread across several records (returned oldest first), and `search_by_conversation_type` for `chat`, `code` or `analysis`
- In-place edits with an audit trail — `update_conversation` rewrites only the fields you pass and, by default, prepends a self-documenting audit line chained across repeated updates; tag operations distinguish replacing the whole list from adding and removing individual tags
- `generate_weekly_summary` for insights and patterns over recent conversations, and `get_search_stats` for index size, topic counts and engine status
No account and no key — everything is local. Python 3.10 or newer. Install it as an application with `uv tool install universal-memory-mcp` or `pipx install universal-memory-mcp`, not a bare `pip install`, which fails on PEP 668 systems with `error: externally-managed-environment`; inside an activated virtualenv `pip install` is fine. Then `claude mcp add --transport stdio universal-memory-mcp -- universal-memory-mcp`, or name the console script directly in your config. Conversations live in `~/claude-memory/` whatever you call the server. `CLAUDE_MEMORY_PATH` moves the store, `CLAUDE_MEMORY_DISABLE_SQLITE` falls back to JSON linear search on platforms without FTS5, and `CLAUDE_MCP_LOG_FORMAT`, `CLAUDE_MCP_LOG_LEVEL`, `CLAUDE_MCP_CONSOLE_OUTPUT` and `CLAUDE_MCP_PLATFORM_PROFILE` tune logging and defaults. Settings can also live in a config file, where an unknown key raises an error rather than being ignored. MIT licensed.
One command — uv tool install universal-memory-mcp
