multimodal-imessage-mcp
Мультимодальный MCP-сервер для iMessage
Самый полный MCP-сервер для iMessage для Claude. Чтение полных бесед, поиск сообщений, просмотр вложений с изображениями, отправка сообщений, поиск контактов и реакции на сообщения — всё из Claude Desktop или Claude Code.
Зачем это нужно
Все остальные MCP-инструменты для iMessage запрашивают столбец text в chat.db от Apple. Проблема в том, что в современных macOS (14+) 93% сообщений хранятся в attributedBody, а не в text. Эти инструменты молча возвращают пустые или неполные беседы.
Этот сервер восстанавливает бинарный формат NSAttributedString от Apple, чтобы извлечь фактическое содержимое сообщения, предоставляя вам доступ к полной истории сообщений.
Related MCP server: jons-mcp-imessage
Возможности
Инструмент | Описание |
| Чтение последних сообщений из всех бесед |
| Полнотекстовый поиск по всем сообщениям, контактам и именам групп |
| Получение полной ветки беседы с любым контактом (по имени или номеру) |
| Получение ID чатов, идентификаторов, последнего отправителя, превью и статуса группы в формате JSON |
| Получение надёжной структурированной ветки по ID чата |
| Добавляет метаданные о прочтении (по возможности) для исходящих личных сообщений iMessage/RCS |
| Поиск SMS-бесед, требующих повторного обращения |
| Просмотр изображений и файлов из сообщений — Claude может видеть и анализировать фотографии |
| Отправка iMessages или SMS/RCS с подтверждением безопасности и опциональным проверенным запасным вариантом |
| Проверка ветки и рекомендация iMessage, SMS/RCS или автоматический выбор перед отправкой |
| Предпросмотр и отправка проверенных партий с токеном утверждения |
| Список ошибок отправки (красные пузыри), ожидающих отправки и восстановлений через SMS/RCS |
| Удаление точных строк локальных сообщений с очисткой БД с предварительным резервным копированием |
| Предпросмотр и удаление полных локальных веток с одним точным токеном утверждения для партии |
| Экспериментальное редактирование недавнего исходящего iMessage через автоматизацию интерфейса Messages |
| Экспериментальная отмена отправки недавнего исходящего iMessage через автоматизацию интерфейса Messages |
| Просмотр самых активных бесед |
| Поиск номеров телефонов и email-адресов из вашей адресной книги |
| Добавление реакций tapback к сообщениям |
Мультимодальность: Claude может видеть ваши фотографии
При использовании get_attachment изображения возвращаются в виде блоков содержимого base64, которые Claude может фактически просматривать. Фотографии HEIC (стандарт iPhone) автоматически конвертируются в JPEG. Это означает, что Claude может:
Описывать, что находится на фотографии, которую вам кто-то прислал
Читать текст/скриншоты из изображений
Анализировать визуальный контент в ваших беседах
Требования
macOS (этот сервер читает локальную базу данных iMessage)
Node.js >= 18 и < 26. Рекомендуется Node 24 LTS, так как заблокированная собственная зависимость SQLite несовместима с Node 26.
Полный доступ к диску для вашего терминального приложения (Системные настройки > Конфиденциальность и безопасность > Полный доступ к диску). Это охватывает как базу данных iMessage, так и базу данных AddressBook, используемую для разрешения имён контактов — приложение Контакты запускать не нужно.
Установка
git clone https://github.com/tszaks/imessage-mcp.git
cd imessage-mcp
npm installНастройка
Claude Desktop
Добавьте в ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"imessage": {
"command": "/opt/homebrew/bin/node",
"args": ["/path/to/imessage-mcp/index.js"]
}
}
}Важно: Используйте полный путь к вашему бинарному файлу Node.js (например,
/opt/homebrew/bin/node), а не простоnode. Приложения macOS для рабочего стола не наследуют PATH вашей командной оболочки, и использование простой командыnodeчасто приводит к разрешению старой системной Node, что вызывает сбои собственных модулей.
Claude Code
Добавьте в ваш .mcp.json:
{
"mcpServers": {
"imessage": {
"command": "node",
"args": ["/path/to/imessage-mcp/index.js"]
}
}
}В Claude Code
nodeобычно разрешается корректно, так как наследует окружение вашей командной оболочки.
Примеры использования
"Покажи мои последние сообщения" — читает ваши последние беседы
"Что мама написала мне сегодня?" — разрешает "Мама" в номер телефона через вашу адресную книгу, загружает беседу
"Найди в моих сообщениях 'подтверждение рейса'" — полнотекстовый поиск по всем сообщениям
"Найди перспективы для обращений за последние 7 дней, которые ответили и требуют повторного контакта" — возвращает структурированных кандидатов для обращений с метками риска
"Предпросмотри эту партию из 10 повторных текстов" — возвращает точных получателей, сообщения, предупреждения и токен утверждения перед отправкой
"Покажи недавние ошибки доставки" — сообщает об исходящих сообщениях, которые Messages пометил как неудачные или ожидающие, включая информацию о том, восстановила ли более поздняя отправка SMS/RCS ветку
"Покажи фотографию из сообщения 538516" — возвращает фактическое изображение для просмотра и описания Claude
"Отправь 'Опоздаю на 10 минут' на +1234567890" — отправляет iMessage (требуется подтверждение)
Флаги релиза
Флаги релиза включаются опционально через окружение MCP-сервера:
{
"mcpServers": {
"imessage": {
"command": "node",
"args": ["/path/to/imessage-mcp/index.js"],
"env": {
"IMESSAGE_MCP_RELEASES": "auto_sms_fallback,cleanup_failed_imessage_after_sms_fallback,message_mutation_tools,experimental_message_ui_actions,read_receipts"
}
}
}
}Флаг | Поведение |
|
|
| После успешного повторного использования |
| Открывает |
| Открывает |
| Добавляет поля прочтения в структурированные результаты бесед и подсказки статуса прочтения в текстовый вывод |
Инструменты для мутации
delete_messages принимает точные идентификаторы строк сообщений (ROWID):
{ "message_ids": ["538516", "538517"] }Он не требует подтверждения. Он сообщает об удалённых ID, отсутствующих ID, местоположении резервной копии и любых оставшихся строках, найденных при проверке.
delete_threads — это двухэтапный процесс с точной партией:
{ "chat_ids": [101, 102] }Предпросмотр возвращает один approval_token для этого упорядоченного списка и метаданные ветки, показанные в предпросмотре. Для удаления отправьте тот же упорядоченный chat_ids, confirm: true и этот токен:
{ "chat_ids": [101, 102], "confirm": true, "approval_token": "..." }Изменение порядка, списка или токена приводит к отказу запроса.
edit_message и undo_send_message являются экспериментальными, поскольку Messages не предоставляет первоклассных команд AppleScript для этих действий. Они открывают беседу, находят видимый исходящий пузырь по фрагменту текста, используют контекстное меню, а затем проверяют результат. Они предназначены для влияния на фактическое поведение Messages, а не для поддельных локальных изменений БД.
Необязательная настройка:
IMESSAGE_MCP_SEND_VERIFY_DELAY_MS=2500Это контролирует, как долго MCP ожидает перед проверкой локальной базы данных Messages на наличие новой исходящей строки.
Как это работает
Исправление attributedBody
База данных iMessage от Apple (~/Library/Messages/chat.db) имеет два столбца для содержимого сообщения:
text— устаревший столбец с обычным текстом (используется в старых версиях macOS)attributedBody— сериализованный блобNSAttributedString(используется в macOS 14+)
В современных macOS Apple постепенно переносила хранение сообщений в attributedBody для поддержки форматированного текста, упоминаний и форматирования. Столбец text всё чаще является просто устаревшим запасным вариантом, который часто равен NULL.
Этот сервер обнаруживает сообщения с NULL в text и извлекает содержимое из attributedBody, анализируя бинарный формат NSTypedStream:
Находит маркер
NSStringв бинарном блобеПропускает заголовочные байты типа (
01 94 84 01 2b)Декодирует префикс длины (один байт для коротких сообщений, несколько байтов для длинных)
Извлекает текстовую нагрузку UTF-8
Обработка вложений
Вложения iMessage хранятся в ~/Library/Messages/Attachments/ с путями, отслеживаемыми в таблице attachment. Инструмент get_attachment:
Запрашивает метаданные вложения для данного ID сообщения
Преобразует путь
~/Library/Messages/...в абсолютный путьДля JPEG/PNG/GIF/WebP: читает файл и возвращает содержимое изображения в base64
Для HEIC (стандарт iPhone): конвертирует в JPEG с помощью macOS
sipsперед возвратомДля других файлов: возвращает метаданные и путь к файлу
Устранение неполадок
"Не удалось открыть базу данных iMessage"
Предоставьте полный доступ к диску вашему терминальному приложению: Системные настройки > Конфиденциальность и безопасность > Полный доступ к диску.
Поиск контакта не возвращает результатов
Разрешение контактов читает базы данных SQLite адресной книги macOS напрямую (приложение Контакты не требуется). Убедитесь, что предоставлен полный доступ к диску. Если контакт был только что добавлен, перезапустите MCP-сервер, чтобы обновить кэш.
Сбой собственного модуля / "NODE_MODULE_VERSION mismatch"
Пересоберите собственные зависимости: npm rebuild. Это происходит, когда меняется версия Node.js. Также убедитесь, что конфигурация Claude Desktop использует полный путь к node (см. раздел Настройка выше).
Отсутствуют сообщения из беседы
Это именно та ошибка, которую исправляет этот сервер. Убедитесь, что вы используете последнюю версию, включающую извлечение attributedBody.
Лицензия
MIT
Краткое руководство TL;DR
npm install
node index.jsЗатем добавьте сервер в конфигурацию вашего MCP-клиента и предоставьте приложению терминала Full Disk Access.
Как это работает (TL;DR)
Читает базу данных SQLite iMessage в macOS
Декодирует современные полезные нагрузки
attributedBodyдля полного текста сообщенийПредоставляет инструменты для работы с беседами/поиском/вложениями через MCP
Использует AppleScript для отправки сообщений и реакций с явными подтверждениями
Быстрое копирование для LLM
Используйте кнопку копирования в этом блоке кода в GitHub.
Repo: imessage-mcp
Goal: Full iMessage MCP including attachments and send/reaction actions.
Setup:
1) npm install
2) Grant Full Disk Access to terminal app
3) Add MCP config entry for index.js
Use:
- read_recent_messages, search_messages, get_conversation
- list_chats_structured, get_conversation_by_chat_id, find_outreach_followups
- get_attachment for image/file analysis
- send_message/send_message_batch/react_to_message with explicit confirm flag
How it works:
- SQLite + attributedBody decoding + AppleScript actions wrapped as MCP toolsMaintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables reading, searching, and sending iMessages directly from MCP-compatible clients by accessing the local macOS iMessage database, supporting conversations, attachments, and both individual and group chats.20710MIT
- 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
- 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
- AlicenseNot gradedqualityDmaintenanceEnables sending and reading iMessages and SMS messages through the macOS Messages app via MCP.MIT
Related MCP Connectors
MCP connector for iMessage & Contacts via a local Mac agent + Vercel relay
Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free.
Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.
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/tszaks/imessage-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server