MailSyncMCP
MailSyncMCP
Busca, lee y responde a todas las cuentas de Apple Mail desde Claude, sin entregar una sola contraseña.
Funciona con Gmail, Microsoft 365, iCloud e IMAP de dominio propio por igual, porque lee lo que Mail ya ha sincronizado en lugar de hablar con cada proveedor. Se ejecuta íntegramente en tu Mac. No se sube nada a ningún sitio.
Por qué funciona así
Apple Mail ya sincroniza todas las cuentas que tienes y ya guarda sus credenciales en el Llavero, renovándolas por su cuenta. Este servidor lee el almacén local de Mail y le pide a Mail que redacte. Nunca ve una contraseña o un token, nunca guarda uno y nunca provoca una reautenticación. Añadir una cuenta significa añadirla en Mail; nada cambia aquí.
La alternativa, hablar directamente con cada proveedor, implica un proyecto de Google Cloud, un registro de aplicación de Azure y un token de actualización por cuenta. Peor aún, las cuentas de trabajo y universidad suelen estar bloqueadas para que una app OAuth de terceros necesite el consentimiento del administrador, que a menudo se deniega sin más. Leer lo que Mail ya ha sincronizado evita todo eso.
Related MCP server: macos-mail-mcp
Seguridad
Leer y buscar son gratuitos. Enviar no lo es.
Sin credenciales. Nada que filtrar o caducar.
Confirmación en dos fases. Las herramientas
prepare_*validan una solicitud, generan una vista previa completa y devuelven un token de un solo uso que caduca en cinco minutos. No cambian nada.commit_action(token)es la única herramienta que actúa, y recibe un token y nada más, de modo que el mensaje que sale es siempre el mensaje que se mostró.Aviso de permiso del cliente en
commit_action.Aislamiento de contenido no confiable. Los cuerpos de los mensajes vuelven envueltos y marcados como datos. Como enviar necesita un token que solo puede generar una vista previa renderizada, una instrucción oculta en un correo no puede hacer que se envíe nada.
Registro de auditoría en
~/.local/share/mailsync/audit.jsonl, de solo añadir.
El servidor habla únicamente por stdio. No hay listener, ni demonio, ni temporizador, así que actúa solo cuando se llama a una herramienta desde la sesión de chat.
Establece MAILSYNC_READ_ONLY=1 para desactivar la redacción por completo en una
sesión.
Sobre AppleScript
Cada script en applescript/ es un archivo estático que recibe sus valores a
través de argv. Nunca se genera texto de script, así que comillas, barras
invertidas, saltos de línea y sintaxis de AppleScript en un correo sobreviven
como datos literales. tests/test_applescript_safety.py
comprueba esto contra cargas útiles hostiles. Otros servidores MCP de Apple Mail
concatenan datos de mensajes en el código del script y lo defienden con una
función de escape; este
no tiene ninguna superficie de inyección que escapar.
Herramientas
Lectura: list_accounts, search_mail, get_message, get_thread,
list_attachments, save_attachment, mailbox_stats, open_in_mail,
refresh_index
Redacción: prepare_send, prepare_reply, prepare_forward, list_pending,
commit_action
No hay nada que marque, mueva, archive o elimine correos. Lo único que este servidor puede cambiar es que se envíe o redacte un mensaje nuevo.
Enlaces de vuelta a Mail
Cada mensaje devuelto lleva una URL message:// construida a partir de su
Message-ID RFC-822. Al hacer clic en uno se abre ese mensaje en Apple Mail, de
modo que las respuestas en el chat se pueden rastrear hasta el original. Los
mensajes que Mail no ha guardado localmente no tienen Message-ID y por tanto no
reciben enlace.
Los clientes de chat sanean los destinos de los enlaces a una lista blanca de
esquemas (http, https, mailto), así que un enlace message:// se muestra como
texto muerto en lugar de algo en lo que se pueda hacer clic. La herramienta
open_in_mail existe precisamente por eso: pide abrir un mensaje y va
directamente a Mail. La URL se imprime igualmente para que se pueda copiar o usar
fuera del chat.
open_in_mail acepta whole_thread=True, pero Mail abre cada mensaje en su
propia ventana: no hay una vista de hilo scripteable. set selected messages en
el visor principal se probó repetidamente y no funciona en macOS 26 en modo de
conversación, devolviendo objetos que el puente de AppleScript no puede volver a
coercionar. get_thread es la mejor manera de leer una conversación.
Un enlace siempre abre un mensaje único, no la conversación que lo rodea. Mail
registra solo tres esquemas de URL (mailto, message, mail-pref-pane) y
ninguno de ellos apunta a un hilo. Conducir la propia lista de hilos de Mail a
través de AppleScript se intentó y se abandonó: en macOS 26 set selected messages
selecciona la conversación equivocada o informa de una selección vacía, tanto en
una bandeja de Gmail All Mail como en un INBOX normal. En lugar de enviar eso,
get_message lista el resto de la conversación con un enlace por mensaje, y
get_thread muestra todo el intercambio en orden.
Instalación
python3 -m venv .venv
.venv/bin/pip install -e .
.venv/bin/python -m mailsync --build-indexRegistrarlo
Claude Code y Claude for Desktop son aplicaciones separadas con archivos de configuración separados. Registrarlo en una no sirve para la otra:
Superficie | Archivo de configuración |
Claude Code |
|
Claude for Desktop |
|
Añade la misma entrada a la que uses, apuntando al Python del venv:
{
"mcpServers": {
"mailsync": {
"command": "/absolute/path/to/Apple-Mail-Sync-MCP/.venv/bin/python",
"args": ["-m", "mailsync"]
}
}
}Como el paquete está instalado en el venv con pip install -e ., la entrada no
depende de un directorio de trabajo. Cierra y vuelve a abrir la app después.
Un servidor local como este se ejecuta como proceso hijo en tu Mac, así que solo está disponible para las apps que se ejecutan allí. claude.ai en un navegador no puede alcanzarlo.
Cada superficie inicia su propio proceso de SO; stdio no tiene forma de
compartir uno. Eso no duplica la configuración, porque ambas entradas ejecutan el
mismo paquete instalado y cada proceso lee y escribe el mismo índice en
~/.local/share/mailsync/mailsync.db. Edita el código una vez y ambas lo
recogen en su próximo reinicio. El acceso concurrente es seguro: el índice
funciona en modo WAL con un timeout de ocupado, probado con cinco lectores y dos
reconstrucciones simultáneas.
Acceso total al disco
~/Library/Mail está protegido por el Acceso total al disco, y un servidor MCP
hereda la concesión de la app que lo lanzó. Claude Code y Claude for Desktop son
clientes TCC separados, así que uno puede funcionar mientras el otro no. Concédelo
en Ajustes del Sistema > Privacidad y seguridad > Acceso total al disco, y luego
cierra y reabre la app por completo.
Sin eso, la búsqueda y la lectura siguen funcionando desde el índice local, que
vive fuera del área protegida. Solo refresh_index falla, así que los datos se
vuelven obsoletos. La herramienta lo dice claramente en lugar de fallar de forma
oscura.
Redactar además necesita que Mail.app esté en ejecución y permiso de Automatización, que macOS solicita en el primer uso.
Mensajes parciales
Mail guarda copias solo con cabeceras de los mensajes que no ha descargado por
completo: alrededor de un cuarto de ellos en una bandeja típica. Esos siguen
siendo buscables por remitente, asunto, fecha y el texto de vista previa que Mail
guardó. get_message acepta fetch_if_partial=True para pedirle a Mail la
fuente completa, lo que hace que descargue el cuerpo del servidor. Eso requiere
que Mail esté en ejecución, por lo que es opt-in y no automático.
Cómo funciona el índice
~/.local/share/mailsync/mailsync.db contiene un índice FTS5 sobre los cuerpos
de los mensajes extraídos de ~/Library/Mail/V10/**/*.emlx, vinculado al
Envelope Index propio de Mail. La base de datos de Mail se copia aparte antes de
leerla y nunca se abre en modo escritura ni se bloquea.
Una primera construcción tarda alrededor de un minuto para 12.800 mensajes. Después, una actualización tarda de uno a dos segundos, ya que solo se vuelven a analizar los archivos cuyo mtime ha cambiado. Las búsquedas vuelven en un dígito simple o en decenas de milisegundos bajas.
Los cuerpos son buscables para aproximadamente el 70 por ciento de los mensajes
que Mail ha descargado por completo. El resto son buscables por remitente,
asunto, fecha y el texto de vista previa de Mail, y get_message recurre a esos.
La cobertura aumenta por sí sola a medida que Mail sincroniza.
Mantenimiento
El esquema del Envelope Index de Apple no está documentado y puede cambiar en una
actualización de macOS. Todo ello está confinado en mailsync/index.py, y el
índice de cuerpos se puede reconstruir desde los archivos .emlx en cualquier
momento con --build-index --full.
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
- AlicenseAqualityAmaintenanceMCP server that gives Claude and other MCP hosts full access to Mail.app on macOS — search, read, send, reply, flag, move, and more across all accounts configured in Mail.app.2489MIT
- AlicenseAqualityAmaintenanceAn MCP server for Apple Mail that enables Claude to read, search, manage, and compose emails via AppleScript.203831MIT
- FlicenseBqualityBmaintenanceMCP server that connects Claude to iCloud Mail, enabling reading, searching, sending, and organizing emails via IMAP/SMTP.14
- AlicenseAqualityAmaintenanceAn MCP server that provides programmatic access to Apple Mail, enabling AI assistants like Claude to read, send, search, and manage emails on macOS.25MIT
Related MCP Connectors
Read, search, send, organize, draft and schedule email across your inboxes from any MCP client.
Hosted email MCP for AI agents with inboxes, send/receive, memory, recovery, and credits.
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/st-designs/Apple-Mail-Sync-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server