Skip to main content
Glama
st-designs

MailSyncMCP

by st-designs

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.

  1. Sin credenciales. Nada que filtrar o caducar.

  2. 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ó.

  3. Aviso de permiso del cliente en commit_action.

  4. 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.

  5. 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-index

Registrarlo

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.json, mcpServers de nivel superior

Claude for Desktop

~/Library/Application Support/Claude/claude_desktop_config.json

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.

Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    A
    quality
    A
    maintenance
    MCP 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.
    24
    89
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    An MCP server for Apple Mail that enables Claude to read, search, manage, and compose emails via AppleScript.
    20
    383
    1
    MIT
  • F
    license
    B
    quality
    B
    maintenance
    MCP server that connects Claude to iCloud Mail, enabling reading, searching, sending, and organizing emails via IMAP/SMTP.
    14
  • A
    license
    A
    quality
    A
    maintenance
    An MCP server that provides programmatic access to Apple Mail, enabling AI assistants like Claude to read, send, search, and manage emails on macOS.
    25
    MIT

View all related MCP servers

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.

View all MCP Connectors

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/st-designs/Apple-Mail-Sync-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server