Skip to main content
Glama
jaredtkatz

iMessage RAG MCP

by jaredtkatz

iMessage RAG MCP

MCP-сервер, который делает вашу локальную историю iMessage на macOS доступной для поиска ИИ-ассистентами.

Он синхронизирует chat.db в локальную базу данных SQLite, разбивает разговоры на контекстно-зависимые фрагменты и предоставляет гибридный поиск (плотный + лексический, с объединением и реранжированием) через MCP-эндпоинт. Всё работает локально — данные сообщений не покидают ваш компьютер.

Возможности

  • Гибридный поиск — плотный векторный поиск FAISS объединяется с лексическим поиском TF-IDF через reciprocal rank fusion, затем реранжируется с помощью cross-encoder.

  • Разбиение с учётом контекста разговора — сообщения группируются в сессии по временным промежуткам, затем разбиваются на фрагменты с перекрытием, чтобы найденные отрывки оставались связными.

  • Расширение контекста — результаты включают окружающие сообщения, а не только совпадающий фрагмент.

  • Определение имён контактов — номера телефонов и адреса электронной почты сопоставляются с реальными именами из вашей адресной книги macOS.

  • Инкрементальная синхронизация — отпечаток исходной базы данных позволяет избежать лишней работы, если ничего не изменилось.

  • Только локально — базы данных Apple читаются в режиме только для чтения; все индексы остаются на диске.

Related MCP server: iMessage Max

Требования

  • macOS (читает ~/Library/Messages/chat.db)

  • Python 3.10+

  • Полный доступ к диску для программы, которая запускает сервер (Terminal, iTerm, PyCharm и т. д.) — предоставьте его в Системных настройках → Конфиденциальность и безопасность → Полный доступ к диску, затем перезапустите эту программу.

Установка

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.txt

При первом запуске загружаются модели эмбеддингов и реранжирования с Hugging Face (несколько сотен МБ).

Использование

Создайте индекс и запустите сервер:

SYNC_ON_STARTUP=true ./run.sh

Первоначальная синхронизация и построение индекса могут занять несколько минут в зависимости от размера вашей истории сообщений. При последующих запусках вы можете опустить флаг, чтобы пропустить синхронизацию и сразу запуститься с существующим индексом:

./run.sh

run.sh — это тонкая обёртка над:

python -m uvicorn mcp_server:app --host 0.0.0.0 --port 8000 --reload

Подключение MCP-клиента

Укажите вашему MCP-клиенту:

http://localhost:8000/mcp

HTTP-эндпоинты

Оба эндпоинта также доступны напрямую через HTTP:

  • GET /search?query=...&limit=8 — полный гибридный конвейер (плотный + лексический → объединение → реранжирование → расширение контекста). Это инструмент, доступный через MCP.

  • GET /lexical?query=...&limit=20 — только результаты TF-IDF, полезно для отладки поиска.

Конфигурация

Все настройки задаются через переменные окружения с разумными значениями по умолчанию. Их можно указать в оболочке или в файле .env в корне проекта:

cp .env.example .env

Переменные оболочки имеют приоритет над .env, поэтому вы можете переопределить значение из файла для одного запуска:

SYNC_ON_STARTUP=true ./run.sh

.env игнорируется git.

Переменная

По умолчанию

Описание

SYNC_ON_STARTUP

false

Синхронизировать сообщения и пересобирать индексы при запуске

IMESSAGE_DB

~/Library/Messages/chat.db

Исходная база данных iMessage

IMESSAGE_SELF_SENDER_NAME

Me

Имя, используемое для ваших исходящих сообщений

IMESSAGE_EMBEDDING_MODEL

BAAI/bge-small-en-v1.5

Модель эмбеддингов sentence-transformer

IMESSAGE_RERANK_MODEL

cross-encoder/ms-marco-MiniLM-L-6-v2

Модель реранжирования cross-encoder

IMESSAGE_SESSION_GAP_HOURS

8

Интервал простоя, после которого начинается новая сессия разговора

IMESSAGE_TARGET_CHUNK_CHARS

1800

Целевой размер фрагмента в символах

IMESSAGE_MAX_CHUNK_MESSAGES

16

Максимальное количество сообщений на фрагмент

IMESSAGE_CHUNK_OVERLAP_MESSAGES

3

Сообщения, повторяющиеся между соседними фрагментами

IMESSAGE_DENSE_CANDIDATES

40

Кандидаты, извлекаемые из FAISS

IMESSAGE_LEXICAL_CANDIDATES

40

Кандидаты, извлекаемые из TF-IDF

IMESSAGE_RERANK_CANDIDATES

40

Объединённые кандидаты, передаваемые реранкеру

IMESSAGE_RECENT_ROW_LOOKBACK

5000

Строки, повторно проверяемые после последней синхронизированной строки

Как это работает

  1. Загрузка (ingest.py) — читает новые и недавно изменённые строки из chat.db, восстанавливает текст из attributedBody, когда обычный столбец text пуст, сопоставляет имена отправителей с адресной книгой и выполняет upsert в локальную каноническую базу данных.

  2. Индексация (indexer.py) — группирует сообщения по чатам, разбивает их на сессии по временным промежуткам, разбивает каждую сессию на фрагменты с перекрытием, затем создаёт индекс FAISS и матрицу TF-IDF.

  3. Поиск (rag.py) — выполняет плотный и лексический поиск, объединяет ранжирования с помощью RRF, реранжирует с помощью cross-encoder, удаляет перекрывающиеся фрагменты и расширяет каждый результат окружающими сообщениями.

  4. Сервер (mcp_server.py) — предоставляет конвейер как приложение FastAPI, смонтированное как MCP-сервер.

Структура проекта

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 configuration

Хранение данных

Создаваемые артефакты находятся в imessage_rag_data/ (игнорируется git):

messages.sqlite   Canonical messages and chunks
messages.faiss    Dense vector index
lexical.joblib    TF-IDF vectorizer and matrix
state.json        Sync watermark and source fingerprint

Удалите каталог, чтобы принудительно выполнить чистую пересборку.

Примечания и ограничения

  • Синхронизация происходит только при запуске и только когда SYNC_ON_STARTUP=true. Фоновой или по запросу синхронизации пока нет, поэтому перезапустите сервер, чтобы подхватить новые сообщения.

  • Вложения, реакции и история изменённых сообщений не индексируются — только текст.

  • Запуск uvicorn с несколькими воркерами в настоящее время вызывает ошибки 404 на MCP-подключении, поэтому сервер работает с одним воркером.

  • Весь индекс пересобирается с нуля при каждом изменении корпуса; инкрементальной переиндексации нет.

Maintenance

ActivityMaintained
ResponsivenessSyncing

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

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables 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.
    13
    11
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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.
    6
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Enables 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
  • A
    license
    A
    quality
    C
    maintenance
    Enables full-text search of macOS iMessages including link preview metadata. Works as an MCP server for Claude Desktop to search your messages locally.
    1
    MIT

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/jaredtkatz/imessage-rag-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server