lane-mac-mcp
lane-mac-mcp
Сервер MCP только для чтения для iMessage + CLI для macOS. Один проверяемый файл, без возможности отправки.
Claude (через MCP) или вы (через CLI) можете просматривать список разговоров, читать чат и искать в истории сообщений — и ничего больше. Только чтение по построению: в v1 вообще нет кода отправки. Весь доступ к данным выполняется через собственный /usr/bin/sqlite3 от Apple с флагами -json -readonly против ~/Library/Messages/chat.db; имена контактов берутся из запросов только на чтение к локальным базам AddressBook.
Ограничения дизайна
Весь сервер — это server.ts (~600 строк, включая комментарии), чтобы его можно было проверить от начала до конца — проверяемый файл и есть исполняемый файл, поскольку Node ≥ 22.18 выполняет TypeScript напрямую с нативным удалением типов (без шага сборки, без скомпилированных артефактов). Есть ровно две зависимости, зафиксированные через package-lock.json: @modelcontextprotocol/sdk и zod. Никаких сетевых импортов, никаких открытых портов — только stdio JSON-RPC, запускаемый как дочерний процесс Claude Desktop; запуски CLI — одноразовые процессы. Демона нет: Claude Desktop запускает и останавливает сервер вместе с приложением (перезапустите приложение, чтобы перезагрузить код).
Related MCP server: imessage-rich-search
Требования
macOS с настроенными Сообщениями, Node.js ≥ 22.18 и полный доступ к диску для процесса, который запускает сервер: Terminal (или ваше терминальное приложение) для CLI, и Claude Desktop для MCP. Предоставьте его в Системных настройках → Конфиденциальность и безопасность → Полный доступ к диску, затем перезапустите приложение. node server.ts doctor проверяет всё это и сообщает, чего не хватает.
Установка
git clone <this repo> && cd MacMCPServer
npm install # installs the two pinned dependencies
node server.ts doctorЗатем добавьте сервер в claude_desktop_config.json Claude Desktop (Настройки → Разработчик → Изменить конфигурацию):
{
"mcpServers": {
"lane-mac": {
"command": "node",
"args": ["/Users/you/Desktop/MacMCPServer/server.ts"]
}
}
}Перезапустите Claude Desktop. Появятся три инструмента: list_chats, read_chat, search_messages.
Использование CLI
node server.ts chats # recent chats, names resolved
node server.ts chats --search "mom" --limit 5
node server.ts chats --awaiting-reply-only # threads where the last word wasn't yours
node server.ts read "Martha" --limit 100 # fuzzy name; ambiguous → candidates
node server.ts read 42 --start-date 2024-01-01 --end-date 2024-06-30 --include-reactions
node server.ts search "dinner" --from "martha" # last 30 days by default
node server.ts search "dinner" --start-date 2015-01-01 --deep # older history + rich-text decode
node server.ts doctorВывод — JSON. search покрывает message.text с помощью SQL LIKE; --deep дополнительно декодирует сообщения, чей текст находится только в blob attributedBody (ограниченное сканирование, медленнее). Реакции Tapback исключаются везде, если не указано --include-reactions.
Обработанные особенности Apple
Метки времени — наносекунды с 2001-01-01 (секунды для очень старых строк) — конвертируются оба варианта. Текст сообщения часто находится в blob typedstream attributedBody, а не в message.text; он декодируется в JS с известной эвристикой NSString. Имена контактов сопоставляются по нормализованному последнему 10-значному номеру телефона или email в нижнем регистре по всем источникам AddressBook, с корректным откатом к сырым номерам, когда контакты недоступны для чтения.
Позиция по конфиденциальности и безопасности
Сервер может только читать. Он открывает базы данных с флагом -readonly sqlite3, не содержит пути кода, который записывает в любую базу данных или отправляет сообщения, не устанавливает сетевых соединений и не слушает порты. Пользовательский ввод экранируется в строковые литералы SQL (удвоение ''), а числовые значения проверяются. doctor выводит только количество строк, никогда не содержимое сообщений. Переопределения через переменные окружения (CHAT_DB_PATH, SQLITE_BIN, ADDRESSBOOK_DIR) существуют, чтобы тесты никогда не касались реальных данных.
Тестирование
npm testТесты «чёрного ящика» генерируют синтетический chat.db и фикстуру AddressBook (включая сообщение только с attributedBody, tapback и входящую ветку без ответа) и запускают реальный CLI и реальный интерфейс MCP stdio как дочерние процессы. Разработка никогда не касается реальных данных.
Дорожная карта (позже, не v1)
Полировка обогащения контактов → чтение Заметок через osascript → отправка, ограниченная переменной окружения SEND_ENABLED плюс одобрение каждого вызова.
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP connector for iMessage & Contacts via a local Mac agent + Vercel relay
Let Claude or ChatGPT search, read and send your WhatsApp messages over MCP. OAuth sign-in.
A hosted LinkedIn MCP server for your own account. Paste one address into Claude, ChatGPT, Cursor or n8n to read your inbox, send messages and invitations, and search people. Free to start. Not made by LinkedIn.
Your own WhatsApp as an MCP server: read, search and send from any MCP client.
Related MCP Servers
- AlicenseAqualityCmaintenanceA local MCP server that enables reading iMessage conversations and sending new messages through Claude Desktop. It provides secure, read-only access to your Mac's iMessage database and AppleScript-based message sending capabilities.6MIT
- 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
- FlicenseAqualityDmaintenanceA read-only MCP server that exposes your iMessage data to Claude Code and Claude Desktop, with automatic contact name resolution.3-
- AlicenseNot gradedqualityDmaintenanceRead-only MCP server for local macOS Messages database, enabling querying of chats, messages, attachments, and metadata.147 npmMIT