lane-mac-mcp
lane-mac-mcp
Un servidor MCP de iMessage de solo lectura + CLI para macOS. Un único archivo auditable, sin capacidad de envío.
Claude (a través de MCP) o tú (a través de la CLI) pueden listar conversaciones, leer un chat y buscar en el historial de mensajes — y nada más. Solo lectura por construcción: v1 no contiene ningún código de envío. Todo el acceso a datos se delega en el /usr/bin/sqlite3 de Apple con -json -readonly contra ~/Library/Messages/chat.db; los nombres de contacto provienen de consultas de solo lectura contra las bases de datos locales de AddressBook.
Restricciones de diseño
Todo el servidor es server.ts (~600 líneas, comentarios incluidos) para que pueda auditarse de principio a fin — el archivo auditado es el archivo en ejecución, ya que Node ≥ 22.18 ejecuta TypeScript directamente con eliminación nativa de tipos (sin paso de compilación, sin artefactos compilados). Hay exactamente dos dependencias, fijadas mediante package-lock.json: @modelcontextprotocol/sdk y zod. Sin importaciones de red, sin puertos abiertos — solo stdio JSON-RPC, lanzado como proceso hijo por Claude Desktop; las ejecuciones de la CLI son procesos de un solo uso. No hay demonio: Claude Desktop inicia y detiene el servidor con la aplicación (reinicia la aplicación para recargar el código).
Related MCP server: imessage-rich-search
Requisitos
macOS con Messages configurado, Node.js ≥ 22.18 y Acceso completo al disco para el proceso que ejecute el servidor: Terminal (o tu aplicación de terminal) para uso de la CLI, y Claude Desktop para uso de MCP. Concédelo en Ajustes del Sistema → Privacidad y seguridad → Acceso completo al disco y reinicia la aplicación. node server.ts doctor comprueba todo esto y te indica qué falta.
Configuración
git clone <this repo> && cd MacMCPServer
npm install # installs the two pinned dependencies
node server.ts doctorLuego añade el servidor al claude_desktop_config.json de Claude Desktop (Ajustes → Desarrollador → Editar configuración):
{
"mcpServers": {
"lane-mac": {
"command": "node",
"args": ["/Users/you/Desktop/MacMCPServer/server.ts"]
}
}
}Reinicia Claude Desktop. Aparecen tres herramientas: list_chats, read_chat, search_messages.
Uso de la 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 doctorLa salida es JSON. search cubre message.text con SQL LIKE; --deep además decodifica mensajes cuyo texto reside solo en el blob attributedBody (escaneo acotado, más lento). Las reacciones Tapback se excluyen en todas partes salvo con --include-reactions.
Peculiaridades de Apple gestionadas
Las marcas de tiempo son nanosegundos desde 2001-01-01 (segundos en filas muy antiguas) — ambas se convierten. El texto de los mensajes suele residir en el blob typedstream attributedBody en lugar de en message.text; se decodifica en JS con la heurística conocida de NSString. Los nombres de contacto se emparejan por teléfono normalizado de los últimos 10 dígitos o correo electrónico en minúsculas en todas las fuentes de AddressBook, degradando con elegancia a números brutos cuando los contactos no se pueden leer.
Postura de privacidad y seguridad
El servidor solo puede leer. Abre las bases de datos con la bandera -readonly de sqlite3, no contiene ninguna ruta de código que escriba en ninguna base de datos ni envíe ningún mensaje, no realiza conexiones de red y no escucha en ningún puerto. La entrada del usuario se escapa en literales de cadena SQL (duplicando '') y los valores numéricos se validan. doctor imprime solo recuentos de filas, nunca contenido de mensajes. Existen anulaciones de entorno (CHAT_DB_PATH, SQLITE_BIN, ADDRESSBOOK_DIR) para que las pruebas nunca toquen datos reales.
Pruebas
npm testLas pruebas de caja negra generan un chat.db sintético y un fixture de AddressBook (incluyendo un mensaje solo con attributedBody, un tapback y un hilo entrante sin responder) y manejan la CLI real y la interfaz stdio real de MCP como procesos hijos. El desarrollo nunca toca datos reales.
Hoja de ruta (más adelante, no en v1)
Pulido del enriquecimiento de contactos → lectura de Notas mediante osascript → envíos controlados por una variable de entorno SEND_ENABLED más aprobación por llamada.
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 Servers
- AlicenseAqualityDmaintenanceA 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
- FlicenseAqualityCmaintenanceA read-only MCP server that exposes your iMessage data to Claude Code and Claude Desktop, with automatic contact name resolution.3
- AlicenseNot gradedqualityCmaintenanceRead-only MCP server for local macOS Messages database, enabling querying of chats, messages, attachments, and metadata.104MIT
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/lanemiles/lane-mac-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server