Memoreei
Syncs messages from Discord channels via bot API and imports Discord data packages from GDPR exports.
Syncs emails from Gmail via IMAP.
Syncs iMessage conversations from macOS (beta).
Imports Instagram direct messages from GDPR data exports.
Syncs messages from Mastodon via REST API.
Syncs messages from Matrix rooms using the Client-Server API.
Imports Facebook Messenger messages from GDPR data downloads.
Syncs messages from Signal Desktop (beta).
Syncs messages from Slack via Web API.
Syncs messages from Telegram via bot API.
Imports WhatsApp chat exports (.txt) and indexes messages.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Memoreeiwhat did I discuss with John last week?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Memoreei
Remember every conversation you've ever had.
Memoreei is an open-source MCP server that gives AI assistants a searchable memory of your entire personal communication history. It connects to 13 platforms so far — Discord, WhatsApp, Telegram, Signal, iMessage, Gmail, Slack, Instagram, and more — ingests your messages, and indexes them with a hybrid search engine combining keyword and semantic vector search. Any AI client that supports the Model Context Protocol can then query your memories as naturally as asking a question.
The problem it solves: every AI assistant starts each conversation with no knowledge of who you are, what you've discussed, or what matters to you. Memoreei changes that by turning years of your personal conversations into a living, searchable knowledge base — surfaced exactly when your AI needs it.
"What's my friend's favorite restaurant?"
"What did my sister say she wanted for her birthday?"
"How many times have I asked Dory to send that link again?"Your AI can answer these now. Without Memoreei, it can't.
It's Also a Platform
Memoreei isn't just a memory server — any app can be built on top of it. Two of our favorites:
Movie Ring — Ranks movies based on what your friends are actually talking about in the group chat that never shuts up.
Contact Dossier — A personal CRM that builds itself from your conversations. No data entry required.
Key Features
Local-first — all data stays in a single SQLite file on your machine
13 sources and counting — WhatsApp, Discord, Telegram, Slack, Matrix, iMessage, Signal, Gmail, Instagram, Mastodon, and more
MCP-native — 19 tools exposed via the Model Context Protocol, usable by any MCP client
Hybrid search — BM25 keyword search + vector semantic search, fused with Reciprocal Rank Fusion
No mandatory cloud — default embedding model runs fully offline via ONNX
CLI + Docker —
pip install memoreeiand you're running in under a minute
Supported Sources
Source | Type | Status |
WhatsApp ( | File import | ✅ Stable |
Discord (bot API) | Live sync | ✅ Stable |
Discord Data Package (GDPR export) | File import | ✅ Stable |
Telegram (bot API) | Live sync | ✅ Stable |
Slack (Web API) | Live sync | ✅ Stable |
Matrix (Client-Server API) | Live sync | ✅ Stable |
Mastodon (REST API) | Live sync | ✅ Stable |
Gmail (IMAP) | Live sync | ✅ Stable |
Instagram DMs (GDPR export) | File import | ✅ Stable |
Facebook Messenger (GDPR export) | File import | ✅ Stable |
SMS Backup & Restore XML | File import | ✅ Stable |
Generic JSON / JSON-lines | File import | ✅ Stable |
Generic CSV / TSV | File import | ✅ Stable |
iMessage (macOS) | Live sync | 🧪 Beta |
Signal Desktop | Live sync | 🧪 Beta |
Manual notes ( | MCP tool | ✅ Stable |
File import — one-time or repeated ingest from an exported file. Live sync — incremental sync via API, checkpoint-based (only fetches new messages).
Quick Start
pip install memoreei
memoreei setup # interactive — pick connectors, enter credentials
memoreei sync # pull messages from configured sources
memoreei serve # start the MCP serverOr from source:
git clone https://github.com/CalebChristiansen/Memoreei.git
cd Memoreei
python -m venv .venv && source .venv/bin/activate
pip install -e .Connect to Your AI
Add to your MCP client config (e.g. .mcp.json, claude_desktop_config.json, or wherever your client reads MCP server definitions):
{
"mcpServers": {
"memoreei": {
"command": "/path/to/memoreei/.venv/bin/python",
"args": ["-m", "memoreei.server"],
"cwd": "/path/to/memoreei"
}
}
}If you installed via pip install memoreei, the memoreei-server command is also available:
{
"mcpServers": {
"memoreei": {
"command": "memoreei-server"
}
}
}MCP Tools
All 19 tools are available to any connected MCP client.
Search & Retrieval
search_memory
Hybrid keyword + semantic search across all ingested memories.
Parameter | Type | Default | Description |
| string | required | Natural language search query |
| int | 10 | Max results to return |
| string | — | Filter by source, e.g. |
| string | — | Filter by sender name (case-insensitive) |
| string | — | ISO date lower bound, e.g. |
| string | — | ISO date upper bound |
get_context
Fetch surrounding messages for a specific memory — essential for understanding the conversation around a result.
Parameter | Type | Default | Description |
| string | required | Memory ID (ULID) from search results |
| int | 5 | Messages to include before the target |
| int | 5 | Messages to include after the target |
add_memory
Manually store a note, fact, or anything worth remembering. Auto-embeds content immediately.
Parameter | Type | Default | Description |
| string | required | Text to remember |
| string |
| Source label |
| dict | — | Optional key-value pairs |
list_sources
Inventory all ingested sources with message counts.
{
"whatsapp:friends": 1842,
"discord:1234567890": 391,
"telegram:-100987654321": 227,
"manual": 12
}File Import Tools
ingest_whatsapp
Import a WhatsApp chat export .txt file. Handles multi-line messages, media placeholders, and deduplication on re-import.
Parameter | Type | Description |
| string | Path to the WhatsApp |
import_discord_package
Import a Discord GDPR data export (all channels and DMs). Accepts a ZIP file or extracted folder.
Request your data at: Discord Settings → Privacy & Safety → Request All of My Data
Parameter | Type | Description |
| string | Path to extracted folder or ZIP file |
import_messenger
Import Facebook Messenger messages from a GDPR data download (JSON format).
Download at: Facebook Settings → Your Information → Download Your Information
Parameter | Type | Description |
| string | Path to the extracted folder containing |
import_instagram
Import Instagram DMs from a GDPR data download (JSON format).
Download at: Instagram Settings → Accounts Center → Your Information → Download Your Information
Parameter | Type | Description |
| string | Path to the extracted folder containing |
import_sms_backup
Import SMS/MMS messages from an Android SMS Backup & Restore XML file.
Parameter | Type | Description |
| string | Path to the XML backup file |
import_json_file
Import messages from any JSON file. Supports JSON arrays, JSON-lines, and wrapped objects. Covers Google Chat takeout, Google Hangouts, LinkedIn data, and custom formats.
Parameter | Type | Default | Description |
| string | required | Path to the JSON or JSON-lines file |
| string | required | Field name containing the message text |
| string | — | Field name for sender name |
| string | — | Field name for timestamp (auto-detects format) |
| string |
| Tag for imported messages |
import_csv_file
Import messages from any CSV or TSV file. Auto-detects delimiter (comma, tab, semicolon). Covers LinkedIn exports and any custom spreadsheet format.
Parameter | Type | Default | Description |
| string | required | Path to the CSV/TSV file |
| string | required | Column name for message text |
| string | — | Column name for sender |
| string | — | Column name for timestamp |
| string |
| Tag for imported messages |
Live Sync Tools
All sync tools use checkpoint-based incremental sync — only new messages are fetched on subsequent runs.
sync_discord
Sync messages from a Discord channel via the bot API.
Parameter | Type | Default | Description |
| string |
| Discord channel ID |
sync_telegram
Sync messages received by a Telegram bot via getUpdates. Bot must be a member of the target group or have received DMs.
Parameter | Type | Default | Description |
| string |
| Chat ID (positive = DM, negative = group). Syncs all if omitted. |
sync_matrix
Sync messages from a Matrix room using the Client-Server API.
Parameter | Type | Default | Description |
| string |
| Matrix room ID, e.g. |
sync_slack
Sync messages from a Slack channel via the Web API (conversations.history). Requires bot token with channels:history and users:read scopes.
Parameter | Type | Default | Description |
| string |
| Slack channel ID, e.g. |
sync_email
Sync Gmail messages via IMAP. Uses per-folder UID checkpointing.
Parameter | Type | Default | Description |
| string |
| IMAP folder, e.g. |
| int | 200 | Maximum emails per sync |
sync_mastodon
Sync Mastodon posts. Public and hashtag timelines require no authentication.
Parameter | Type | Default | Description |
| string |
| Instance URL, e.g. |
| string |
| Hashtag without |
| string |
| OAuth token (optional, for home timeline) |
sync_imessage
🧪 Beta — macOS only. Requires Full Disk Access for Terminal in System Settings → Privacy & Security.
Sync iMessage/SMS conversations from ~/Library/Messages/chat.db (read-only).
Parameter | Type | Description |
| string | Optional — filter by contact name or identifier (e.g. |
sync_signal
🧪 Beta — requires
pysqlcipher3. Signal Desktop must be installed.
Sync Signal Desktop messages from the local encrypted SQLCipher database.
Default paths: ~/.config/Signal/sql/db.sqlite (Linux), ~/Library/Application Support/Signal/sql/db.sqlite (macOS).
Parameter | Type | Description |
| string | Optional — filter by conversation ID, name, or phone number |
Utility Tools
refresh_memory
Trigger an immediate sync of all configured sources. Returns count of new messages.
sync_all
Sync every configured connector and return counts per source.
CLI Reference
# Interactive setup — configure connectors, writes to .env
memoreei setup # pick from a list (spacebar to select, enter to confirm)
memoreei setup gmail # configure a specific connector directly
# Start the MCP server (stdio transport, default)
memoreei serve
# Start with SSE transport (for HTTP clients)
memoreei serve --sse --port 8080
# Show DB stats: message counts, sources, last sync times
memoreei status
# Sync all configured sources
memoreei sync
# Sync a specific source
memoreei sync discord
memoreei sync telegram
memoreei sync matrix
memoreei sync slack
memoreei sync email
memoreei sync mastodon
# Search from the terminal
memoreei search "API redesign notes"
memoreei search "printer issue" --limit 5 --source whatsapp:friends
# Import files
memoreei import-whatsapp /path/to/WhatsApp\ Chat.txt
memoreei import-sms /path/to/sms-backup.xml
memoreei import-discord-package /path/to/discord-package.zip
# Show current configuration (tokens masked)
memoreei configArchitecture
┌──────────────────────────────────────────────────────────────────────┐
│ Your Data Sources │
│ │
│ File Imports Live Sync (API) │
│ ───────────────────────────── ────────────────────────── │
│ WhatsApp .txt Instagram JSON Discord Telegram │
│ Messenger JSON SMS Backup XML Slack Matrix │
│ Discord ZIP Generic JSON/CSV Gmail Mastodon │
│ iMessage Signal │
└──────────────┬───────────────────────────────┬─────────────────────┘
│ │
▼ ▼
┌──────────────────────────────────────────────────────────────────────┐
│ Memoreei MCP Server │
│ │
│ ┌────────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │
│ │ Connectors │ │ Hybrid Search │ │ MCP Tools │ │
│ │ │ │ │ │ │ │
│ │ 13 sources │ │ FTS5 (BM25) │ │ search_memory │ │
│ │ file + live sync │ │ + vector cosine │ │ get_context │ │
│ │ checkpoint-based │ │ + RRF fusion │ │ add_memory │ │
│ │ dedup on import │ │ │ │ list_sources │ │
│ │ │ └────────┬─────────┘ │ ingest_* │ │
│ │ │ │ │ import_* │ │
│ │ │ │ │ sync_* │ │
│ │ │ ┌────────▼──────────┐ │ refresh_memory │ │
│ │ │ │ SQLite Database │ │ sync_all │ │
│ │ │ │ memories + FTS5 │ └────────┬────────┘ │
│ └────────────────────┘ │ embeddings BLOB │ │ │
│ │ sync checkpoints │ │ │
│ └───────────────────┘ │ │
└────────────────────────────────────────────────────────┼────────────┘
│ │ stdio / SSE
▼
┌─────────────────────┐
│ MCP Clients │
│ │
│ Any AI assistant │
│ that speaks MCP │
└─────────────────────┘How Hybrid Search Works
Memoreei runs two searches in parallel and fuses the results:
Query: "that weird API rate limit issue"
│
├──▶ FTS5 BM25 keyword search
│ Matches "API", "rate", "limit" — fast, exact
│ Returns ranked list of IDs
│
└──▶ Vector search (cosine similarity)
Matches "throttling", "429 errors", "backoff"
Returns ranked list of IDs
│
▼
Reciprocal Rank Fusion (RRF)
─────────────────────────────
score(item) = Σ 1 / (60 + rank_i)
i ∈ {keyword_rank, vector_rank}
Items in BOTH result sets are boosted.
Items in only one set still contribute.
Top N returned, then filtered by source/participant/date.Why RRF? Rank-based fusion requires no score normalization across different scales. The constant k=60 is the standard default from the original paper and empirically outperforms weighted linear combinations.
Default embedding model: BAAI/bge-small-en-v1.5 via FastEmbed — 384-dimensional vectors, ~23 MB ONNX model, runs fully offline.
Configuration
Copy .env.example to .env and fill in the credentials for the sources you want to use. Unused connectors can be left blank. Or just run memoreei setup and it'll walk you through it.
Core
Variable | Default | Description |
|
|
|
| — | Required only if |
|
| SQLite database path |
|
| Enable background sync loop on server start |
|
| Background sync interval in seconds |
Discord
Variable | Description |
| Bot token from Discord Developer Portal |
| Default channel ID for |
Telegram
Variable | Description |
| Bot token from @BotFather |
| Default chat ID (positive = DM, negative = group) |
Matrix
Variable | Description |
| Homeserver URL, e.g. |
| User access token |
| Default room ID, e.g. |
Slack
Variable | Description |
| Bot token ( |
| Default channel ID, e.g. |
Gmail
Variable | Description |
| Gmail address |
| App Password (required if 2FA enabled) |
Mastodon
Variable | Default | Description |
|
| Instance URL |
| — | Default hashtag (without |
| — | OAuth token (optional, for home timeline) |
iMessage (macOS only)
Variable | Default | Description |
|
| Override path to |
Signal Desktop
Variable | Description |
| Override path to Signal's |
| Override path to Signal's |
Privacy
Local-first by design.
All data stored in a single SQLite file on your machine
Default embedding model (FastEmbed) runs entirely offline via ONNX — zero network calls
OpenAI embeddings are strictly opt-in (
EMBEDDING_PROVIDER=openai)No telemetry, no analytics, no cloud sync
Your messages never leave your machine in the default configuration
What requires network access:
Live sync connectors (Discord, Telegram, Slack, Matrix, Gmail, Mastodon) make outbound API calls to those services
EMBEDDING_PROVIDER=openaisends message text to OpenAI's API for embedding
The .env file and memoreei.db are in .gitignore.
Docker
docker build -t memoreei .
docker run -v ./data:/data -e MEMOREEI_DB_PATH=/data/memoreei.db memoreei serveOr with docker-compose:
docker-compose upContributing
See CONTRIBUTING.md for guidelines on adding new connectors, running tests, and submitting pull requests.
License
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/CalebChristiansen/Memoreei'
If you have feedback or need assistance with the MCP directory API, please join our Discord server