iMessage RAG MCP
iMessage RAG MCP
Ein MCP-Server, der Ihren lokalen macOS-iMessage-Verlauf für KI-Assistenten durchsuchbar macht.
Er synchronisiert chat.db in eine lokale SQLite-Datenbank, teilt Konversationen in kontextbewusste Chunks auf und stellt hybride Suche (dense + lexical, fusioniert und neu gerankt) über einen MCP-Endpunkt bereit. Alles läuft lokal – keine Nachrichtendaten verlassen Ihren Rechner.
Funktionen
Hybride Suche – FAISS-Dense-Vektorsuche fusioniert mit TF-IDF-lexikalischer Suche über reziproke Rangfusion, anschließend neu gerankt mit einem Cross-Encoder.
Konversationsbewusstes Chunking – Nachrichten werden nach Zeitabständen in Sitzungen gruppiert und dann mit Überlappung gechunkt, sodass abgerufene Passagen kohärent bleiben.
Kontexterweiterung – Ergebnisse enthalten umgebende Nachrichten, nicht nur den passenden Chunk.
Kontaktnamensauflösung – Telefonnummern und E-Mails werden echten Namen aus Ihrem macOS-Adressbuch zugeordnet.
Inkrementelle Synchronisierung – Ein Fingerabdruck der Quelldatenbank vermeidet redundante Arbeit, wenn sich nichts geändert hat.
Nur lokal – Liest Apples Datenbanken schreibgeschützt; alle Indizes bleiben auf der Festplatte.
Related MCP server: iMessage Max
Anforderungen
macOS (liest
~/Library/Messages/chat.db)Python 3.10+
Vollzugriff auf die Festplatte für das Programm, das den Server ausführt (Terminal, iTerm, PyCharm usw.) – gewähren Sie ihn in Systemeinstellungen → Datenschutz & Sicherheit → Vollzugriff auf die Festplatte und starten Sie das Programm dann neu.
Installation
git clone git@github.com:jaredtkatz/imessage-rag-mcp.git
cd imessage-rag-mcp
python -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txtBeim ersten Lauf werden die Embedding- und Reranker-Modelle von Hugging Face heruntergeladen (einige hundert MB).
Verwendung
Index erstellen und Server starten:
SYNC_ON_STARTUP=true ./run.shDie anfängliche Synchronisierung und der Indexaufbau können je nach Größe Ihres Nachrichtenverlaufs mehrere Minuten dauern. Bei späteren Läufen können Sie das Flag weglassen, um die Synchronisierung zu überspringen und sofort mit dem vorhandenen Index zu starten:
./run.shrun.sh ist ein dünner Wrapper um:
python -m uvicorn mcp_server:app --host 0.0.0.0 --port 8000 --reloadVerbinden eines MCP-Clients
Weisen Sie Ihren MCP-Client auf:
http://localhost:8000/mcpHTTP-Endpunkte
Beide Endpunkte sind auch direkt über HTTP nutzbar:
GET /search?query=...&limit=8– vollständige hybride Pipeline (dense + lexical → Fusion → Reranking → Kontexterweiterung). Dies ist das über MCP bereitgestellte Tool.GET /lexical?query=...&limit=20– nur TF-IDF-Ergebnisse, nützlich zum Debuggen der Suche.
Konfiguration
Alle Einstellungen sind Umgebungsvariablen mit sinnvollen Standardwerten. Sie können in der Shell oder in einer .env-Datei im Projektstamm festgelegt werden:
cp .env.example .envShell-Variablen haben Vorrang vor .env, sodass Sie einen Dateiwert für einen einzelnen Lauf überschreiben können:
SYNC_ON_STARTUP=true ./run.sh.env ist gitignored.
Variable | Standard | Beschreibung |
|
| Nachrichten synchronisieren und Indizes beim Start neu aufbauen |
|
| Quell-iMessage-Datenbank |
|
| Name für Ihre eigenen ausgehenden Nachrichten |
|
| Sentence-Transformer-Embedding-Modell |
|
| Cross-Encoder-Reranking-Modell |
|
| Leerlaufzeit, die eine neue Konversationssitzung startet |
|
| Zielgröße des Chunks in Zeichen |
|
| Maximale Nachrichten pro Chunk |
|
| Nachrichten, die zwischen benachbarten Chunks wiederholt werden |
|
| Kandidaten, die von FAISS abgerufen werden |
|
| Kandidaten, die von TF-IDF abgerufen werden |
|
| Fusionierte Kandidaten, die an den Reranker übergeben werden |
|
| Zeilen, die hinter der zuletzt synchronisierten Zeile erneut geprüft werden |
So funktioniert es
Erfassen (
ingest.py) – liest neue und kürzlich geänderte Zeilen auschat.db, stellt Text ausattributedBodywieder her, wenn die einfachetext-Spalte leer ist, löst Absendernamen über das Adressbuch auf und fügt sie in die lokale kanonische Datenbank ein.Indizieren (
indexer.py) – gruppiert Nachrichten pro Chat, teilt sie bei Zeitabständen in Sitzungen auf, chunked jede Sitzung mit Überlappung und schreibt dann einen FAISS-Index und eine TF-IDF-Matrix.Abrufen (
rag.py) – führt Dense- und Lexical-Suche aus, fusioniert die Rankings mit RRF, rankt mit einem Cross-Encoder neu, verwirft überlappende Chunks und erweitert jedes Ergebnis um umgebende Nachrichten.Bereitstellen (
mcp_server.py) – stellt die Pipeline als FastAPI-App bereit, die als MCP-Server gemountet ist.
Projektstruktur
config.py Environment-driven settings and file paths
db.py SQLAlchemy models for chat.db, Address Book, and local storage
ingest.py Sync from chat.db into the canonical database
indexer.py Session splitting, chunking, and index construction
rag.py Hybrid retrieval, fusion, reranking, context expansion
mcp_server.py FastAPI application and MCP mount
run.sh Development server launcher
.env.example Template for local configurationDatenspeicherung
Generierte Artefakte liegen in imessage_rag_data/ (gitignored):
messages.sqlite Canonical messages and chunks
messages.faiss Dense vector index
lexical.joblib TF-IDF vectorizer and matrix
state.json Sync watermark and source fingerprintLöschen Sie das Verzeichnis, um einen sauberen Neuaufbau zu erzwingen.
Hinweise und Einschränkungen
Die Synchronisierung erfolgt nur beim Start und nur, wenn
SYNC_ON_STARTUP=trueist. Es gibt noch keine Hintergrund- oder On-Demand-Synchronisierung. Starten Sie den Server also neu, um neue Nachrichten zu übernehmen.Anhänge, Reaktionen und der Verlauf bearbeiteter Nachrichten werden nicht indiziert – nur Text.
Die Ausführung von uvicorn mit mehreren Workern führt derzeit zu 404ern auf dem MCP-Mount, daher läuft der Server mit einem einzelnen Worker.
Der gesamte Index wird bei jeder Änderung des Korpus von Grund auf neu aufgebaut; es gibt kein inkrementelles Reindizieren.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free.
Search your knowledge bases from any AI assistant using hybrid RAG.
Long-term memory for AI assistants. Hybrid retrieval, query expansion, auto-topics.
MCP connector for iMessage & Contacts via a local Mac agent + Vercel relay
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to read iMessage history and send messages on macOS. Supports conversation listing, message search with keyword and semantic modes, contact lookup, and sending messages to existing conversations.1311MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to read, search, and send iMessages with features like contact name resolution, session grouping, and attachment listing. It provides intent-aligned tools to efficiently navigate conversation history and manage messages through natural language queries.6MIT
- FlicenseAqualityDmaintenanceEnables reading, searching, and sending iMessages on macOS by accessing the local messages database and utilizing AppleScript. Users can list conversations, search message history, and send messages to individuals or group chats directly through the Model Context Protocol.6
- AlicenseAqualityCmaintenanceEnables full-text search of macOS iMessages including link preview metadata. Works as an MCP server for Claude Desktop to search your messages locally.1MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/jaredtkatz/imessage-rag-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server