imessage-mcp
Un servidor MCP local que expone los datos de iMessage de tu Mac a Claude Desktop / Claude Code. Dos superficies:
ENVIAR mediante AppleScript →
Messages.appLEER mediante acceso directo y de solo lectura a SQLite en
~/Library/Messages/chat.db
Todo es local. Sin claves de API, sin llamadas de red.
Instalación
# 1. Clone / copy into ~/mcp-servers/imessage-mcp
cd ~/mcp-servers/imessage-mcp
# 2. Create a Python 3.11+ venv and install deps
python3.12 -m venv .venv
.venv/bin/pip install -e .Related MCP server: iMessage MCP Server
Permisos (requeridos)
Acceso total al disco — para que podamos leer chat.db
Configuración del sistema → Privacidad y seguridad → Acceso total al disco → activa el interruptor para:
tu aplicación de terminal (ej. Terminal, iTerm2, Ghostty), Y
Claude.app(si usas Claude Desktop)
Automatización — para que podamos controlar Messages.app
Configuración del sistema → Privacidad y seguridad → Automatización → despliega tu terminal / Claude.app
y activa Messages.
Messages.app debe estar ejecutándose y con la sesión iniciada en iMessage.
Si falta un paso de permiso, el servidor mostrará un error con la ruta exacta de la configuración que debes abrir.
Configuración de Claude Desktop
Combínalo en ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"imessage": {
"command": "/Users/YOUR_USERNAME/mcp-servers/imessage-mcp/.venv/bin/python",
"args": ["-m", "imessage_mcp.server"]
}
}
}(La ruta absoluta al python del venv es la más segura; evita la ambigüedad de PATH. Reemplaza YOUR_USERNAME.)
Herramientas
Herramienta | Propósito |
| Enviar mediante Messages.app. |
| Chats ordenados del más reciente al más antiguo con vista previa del último mensaje y recuento de no leídos. |
| Mensajes de un chat; proporciona |
| Búsqueda LIKE (sin distinguir mayúsculas/minúsculas) en el cuerpo de los mensajes. |
| Identificadores propios + metadatos de la base de datos. |
Las fechas están en formato ISO8601 tanto de entrada como de salida. Internamente, Apple almacena message.date como nanosegundos desde el 01-01-2001 UTC; el servidor realiza la conversión en ambos sentidos.
Invariantes de seguridad
chat.dbse abre consqlite3.connect("file:...chat.db?mode=ro", uri=True). Cualquier intento de escritura genera unsqlite3.OperationalError: attempt to write a readonly database.send_imessagepasa el destinatario / cuerpo / servicio como entradas de argv de osascript separadas — sin interpolación de shell, sin inyección.Los archivos adjuntos devuelven solo metadatos (nombre de archivo, mime_type, total_bytes). Los blobs nunca se leen.
Limitaciones
No se admiten envíos programados / retrasados.
Los mensajes enriquecidos / con hilos de respuesta pueden tener su texto almacenado en
attributedBody(NSKeyedArchive). Hacemos el mejor esfuerzo para extraer el NSString incrustado; los mensajes con cargas útiles más exóticas (imágenes, toques, Apple Pay) mostrarán unbodyvacío pero con los metadatos correctos.Confirmación de entrega:
send_imessageinforma del éxito a partir del código de salida de osascript. Para verificar que el mensaje realmente se envió, llama asearch_imessagesoget_chat_messagesunos segundos después.Esto es exclusivo de macOS y no funcionará en aplicaciones de la App Store en entorno aislado (sandboxed).
Desarrollo local
.venv/bin/pytest -qMaintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/camfortin/imessage-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
