better-email-mcp

Gestión de correo electrónico vía IMAP/SMTP, multi-cuenta

Documentación

Better Email MCP

mcp-name: io.github.n24q02m/better-email-mcp

Correo IMAP/SMTP para agentes de IA: lee, envía, organiza carpetas y gestiona archivos adjuntos en múltiples cuentas, con autodetección.

CI codecov npm Docker License: Apache-2.0

TypeScript Node.js IMAP/SMTP semantic-release Renovate

Proyectos hermanos de n24q02m (clic para expandir)
ProyectoEsloganEtiqueta
agent-chat-pluginAgentes de IA pares chatean en una carpeta compartida: sin intermediario humano, sin orquestador, fun...Herramientas
better-code-review-graphGrafo de conocimiento para revisiones de código eficientes en tokens: búsqueda semántica y llamadas...MCP
better-driveSincronización bidireccional de Google Drive con filtro .driveignore: motor rclone, bandeja de WindowsHerramientas
better-email-mcpCorreo IMAP/SMTP para agentes de IA: lee, envía, organiza carpetas y gestiona archivos adjuntos...MCP
better-godot-mcpServidor MCP compuesto para Godot Engine: 17 herramientas compuestas para desarrollo de juegos asistido...MCP
better-notion-mcpNotion centrado en Markdown para agentes de IA: páginas, bases de datos, bloques y comentarios...MCP
better-semantic-releaseBifurcación directa de python-semantic-release con protecciones de seguridad de lanzamiento integradas (or...Herramientas
better-telegram-mcpTelegram para agentes de IA: mensajes, chats, medios y contactos en ambas cuentas...MCP
better-workspace-mcpServidor MCP de Google Workspace (Docs/Drive/Calendar/Gmail/Sheets/Slides/Tasks/Ch...MCP
claude-pluginsMercado de plugins de Claude Code para los servidores MCP de n24q02m: instala búsqueda web...Marketplace
imagine-mcpComprensión y generación de imágenes y vídeos para agentes de IA: en Gemini, Op...MCP
jules-task-archiverExtensión de Chrome para operaciones masivas en tareas de Jules mediante la API batchexecute...Herramientas
mcp-coreBase compartida para crear servidores MCP: transporte Streamable HTTP, OAut...MCP
mnemo-mcpMemoria persistente de IA con búsqueda híbrida y sincronización integrada. Abierta, gratuita, ilimit...MCP
qwen3-embedIncrustación y reordenación de texto Qwen3 ligera mediante ONNX Runtime y GGUFBiblioteca
skretSecretos sin servidor.CLI
tacetUna cascada neuro-simbólica autodestilante que amortiza el coste de LLM en el conocim...Herramientas
web-corePaquete de infraestructura web compartida para búsqueda, scraping, seguridad HTTP y alm...Biblioteca
wet-mcpServidor MCP de código abierto para agentes de IA: búsqueda web, extracción de contenido y bib...MCP

Tabla de contenidos

Better Email MCP server

Características

  • Soporte multi-cuenta: gestiona 6 o más cuentas de correo (Gmail, Outlook, Yahoo, iCloud, Zoho, ProtonMail, IMAP personalizado)
  • Contraseñas de aplicación: no requiere configuración OAuth2 para la mayoría de proveedores; clona y ejecuta en 1 minuto
  • 4 herramientas compuestas con 22 acciones (más help + config__open_relay): búsqueda, lectura, envío, respuesta, reenvío, organización y configuración de credenciales en una sola llamada
  • Autodetección: la configuración del proveedor se detecta a partir de la dirección de correo; se admite host IMAP personalizado
  • Consciente de hilos: responder/reenviar mantiene las cabeceras In-Reply-To y References
  • Optimización de tokens por niveles: descripciones comprimidas + herramienta help bajo demanda + Recursos MCP

Instalación

El servidor funciona en dos modos: stdio (predeterminado, un solo usuario, credenciales de variables de entorno) y HTTP (opt-in, multi-usuario con OAuth 2.1). Para stdio, añádelo a la configuración de tu cliente MCP:

{
  "mcpServers": {
    "better-email": {
      "command": "npx",
      "args": ["--yes", "@n24q02m/better-email-mcp@latest"],
      "env": {
        "EMAIL_CREDENTIALS": "user@gmail.com:app-password"
      }
    }
  }
}

Las cuentas múltiples se separan con comas: user1@gmail.com:pass1,user2@outlook.com:pass2. Consulta Configuración para todas las variables de entorno, y Remoto (modo HTTP) para ejecutar un servidor multi-usuario alojado.

La mayoría de proveedores usan una Contraseña de aplicación (sin configuración OAuth); Outlook/Hotmail/Live usan un flujo de código de dispositivo OAuth integrado en modo HTTP. La configuración (host IMAP/SMTP, puerto) se autodetecta a partir del dominio del correo.

CLI

El paquete incluye un único binario, better-email-mcp (se ejecuta mediante npx @n24q02m/better-email-mcp). Sin argumentos, inicia el servidor MCP sobre stdio; también acepta una bandera y un subcomando:

InvocaciónDescripción
better-email-mcpInicia el servidor MCP sobre stdio (predeterminado). Lee las credenciales de EMAIL_CREDENTIALS, o de EMAIL_USER + EMAIL_APP_PASSWORD
better-email-mcp --httpInicia el servidor en modo HTTP (multi-usuario, OAuth 2.1). Equivalente a MCP_TRANSPORT=http o TRANSPORT_MODE=http
better-email-mcp auth [outlook] <email> [--client-id=<id>]Autentica una cuenta de Outlook/Hotmail/Live mediante el flujo de Código de Dispositivo OAuth2. Los tokens se guardan en ~/.better-email-mcp/tokens.json. El argumento posicional de proveedor outlook es opcional (el correo tiene un único proveedor OAuth2); --client-id anula OUTLOOK_CLIENT_ID para una aplicación Azure AD autoalojada
better-email-mcp logout [<email>]Borra los tokens de Outlook almacenados localmente. Omite <email> para borrar todos los tokens almacenados
# stdio server (normally launched by your MCP client, not by hand)
EMAIL_CREDENTIALS="user@gmail.com:app-password" npx @n24q02m/better-email-mcp

# HTTP multi-user server
npx @n24q02m/better-email-mcp --http

# One-off Outlook OAuth device-code sign-in
npx @n24q02m/better-email-mcp auth user@outlook.com

# Sign out of a single account (or omit the email to clear all)
npx @n24q02m/better-email-mcp logout user@outlook.com

auth/logout son solo para direcciones de Outlook/Hotmail/Live: otros proveedores usan una Contraseña de aplicación en EMAIL_CREDENTIALS. Consulta Remoto (modo HTTP) para la configuración HTTP.

Smithery

Publicado con una configuración de Smithery (smithery.yaml). Smithery ejecuta el servidor sobre stdio sin necesidad de configuración de compilación; las credenciales se proporcionan en tiempo de ejecución mediante el propio flujo de configuración del servidor (consulta Configuración). El comando de inicio es:

startCommand:
  type: stdio
  commandFunction: |-
    (config) => ({ command: 'npx', args: ['-y', '@n24q02m/better-email-mcp'] })

Documentación

Documentación completa en mcp.n24q02m.com/servers/better-email-mcp/setup/:

Instalar con agente de IA: pega esto en tu agente de codificación de IA:

Instala el servidor MCP better-email-mcp siguiendo los pasos en https://raw.githubusercontent.com/n24q02m/claude-plugins/main/plugins/better-email-mcp/setup-with-agent.md

Herramientas

Renombrado de herramienta pública

La herramienta pública send se sustituye por messages con action: new, reply o forward. Esto sigue el estándar MCP N+2: el envío es una acción del dominio de mensajes, por lo que mantener una entrada separada send duplicaría ese dominio y añadiría superficie redundante de lista de herramientas y temas de ayuda. El nombre antiguo se elimina directamente; no hay alias de compatibilidad.

Nombre público antiguoNombre público nuevoMotivoEliminación de alias
sendmessages (action: new | reply | forward)Regla de herramienta de dominio N+2: el correo saliente forma parte de la mega-herramienta messages, no de una segunda herramienta a nivel de acción.Eliminado directamente en la versión Unreleased; sin alias
HerramientaAccionesDescripción
messagessearch, read, mark_read, mark_unread, flag, unflag, move, archive, trash, new, reply, forwardBusca, lee, organiza, redacta, responde y reenvía correos
folderslist, statusLista las carpetas del buzón o lee metadatos IMAP STATUS específicos
attachmentslist, downloadLista y descarga archivos adjuntos de correo
configstatus, setup_status, setup_start, setup_reset, setup_complete, set, cache_clearConfiguración de credenciales mediante relevo de navegador, comprobación de estado, restablecimiento, re-resolución, limpieza de caché
config__open_relay-Abre el formulario de configuración de relevo en el navegador y devuelve la URL de relevo
help-Obtiene la documentación completa de cualquier herramienta

Recursos MCP

URIDescripción
email://docs/messagesReferencia de operaciones de mensajes
email://docs/foldersReferencia de operaciones de carpetas
email://docs/attachmentsReferencia de operaciones de archivos adjuntos
email://docs/helpDocumentación completa
email://docs/configReferencia de configuración de credenciales y configuración en tiempo de ejecución

Comparación

Cómo se posiciona better-email-mcp frente a competidores directos en cada pilar:

Capacidadbetter-email-mcpemail-mcpGmail-MCP-Servermcp-mail-server
IMAP/SMTP (independiente del proveedor)No (solo API de Gmail)
Multi-cuentaSí (credenciales separadas por comas)No (credencial global única)No (una cuenta por instancia)
Contraseñas de aplicaciónSí (sin configuración OAuth)No (solo OAuth2)
Autodetección a partir de la dirección de correoSí (8 proveedores)n/d (solo Gmail)No (host/puerto manuales)
OAuth de Outlook integrado (sin aplicación Azure del usuario)Sí (código de dispositivo, cliente patrón Thunderbird)parcial (OAuth2 XOAUTH2, experimental)No (OAuth de Google proporcionado por el usuario)No
Archivos adjuntos (listar + descargar)
Modo HTTP multi-usuario (por JWT-sub)Sí (OAuth 2.1, autoalojable)No (solo stdio)No (solo stdio)No (solo stdio)

Remoto (modo HTTP)

Ejecuta como servidor HTTP multi-usuario con autenticación OAuth 2.1:

{
  "mcpServers": {
    "better-email": {
      "type": "http",
      "url": "https://<your-host>/mcp"
    }
  }
}

Autoalojamiento (modo HTTP)

Modo multi-usuario único (formulario de relevo para proveedores de Contraseña de aplicación + código de dispositivo OAuth de Outlook integrado):

docker run -p 8080:8080 \
  -e PORT=8080 \
  -e PUBLIC_URL=https://your-domain.com \
  n24q02m/better-email-mcp:latest

Los usuarios proporcionan sus propias credenciales de correo mediante el flujo OAuth / formulario de pegado. No se necesita EMAIL_CREDENTIALS en el servidor. Con el autoalojamiento Docker predeterminado, las credenciales por usuario se guardan en un almacén en memoria (se borran al reiniciar); los usuarios las reenvían tras un reinicio. El OAuth de Outlook usa el cliente público de Azure integrado (d56f8c71-9f7c-43f4-9934-be29cb6e77b0, patrón Thunderbird): no se necesita registro de aplicación Azure por parte del usuario.

Modo serverless de Cloudflare (solo KV)

Autoalojable como instancia serverless por usuario en Cloudflare Workers + Containers: cada JWT sub tiene su propio Container Durable Object, y todas las credenciales Y los tokens OAuth de Outlook están cifrados con AES-256-GCM en Workers KV (un blob subs/<sub>/config por usuario) para que sobrevivan al escalado a cero / recreación del contenedor sin reautenticación. La clave de firma JWT se deriva de forma determinista de CREDENTIAL_SECRET (EdDSA), por lo que la identidad del usuario es estable entre recreaciones. Secretos necesarios: CREDENTIAL_SECRET (bóveda por sub + EdDSA), MCP_RELAY_PASSWORD (puerta del formulario), MCP_DCR_SERVER_SECRET (despliegue multi-usuario intencional). Consulta wrangler.jsonc.

Clave de tokens de Outlook por JWT sub (en el blob KV por sub) resuelve la antigua ambigüedad tokens.json clave-por-correo (error conocido n.º 4 de CLAUDE.md): las cuentas de Outlook de dos usuarios ya no pueden colisionar. Advertencia: localhost cuentas IMAP (email:pass:localhost:1993) son válidas para implementaciones locales / en VM pero NO pueden funcionar en Cloudflare — no hay un proxy IMAP co-ubicado dentro del contenedor. Usa un host IMAP accesible públicamente en CF.

Código de dispositivo OAuth de Outlook (modo HTTP)

En modo HTTP, las cuentas de Outlook/Hotmail/Live usan OAuth2 con código de dispositivo automáticamente. En el primer uso:

  1. El servidor imprime un código de dispositivo y una URL de inicio de sesión de Microsoft
  2. Abre la URL en un navegador e introduce el código
  3. Inicia sesión y autoriza la aplicación
  4. Los tokens se persisten por sub de JWT — en el blob de credenciales cifrado de Cloudflare KV (subs/<sub>/config) en la implementación serverless, en el almacén local en memoria para HTTP local, o en ~/.better-email-mcp/tokens.json para un solo usuario / stdio

OAuth usa el cliente público de Azure incluido (d56f8c71-9f7c-43f4-9934-be29cb6e77b0, patrón Thunderbird) — no se necesita registro de Azure por parte del usuario.

En modo stdio, las cuentas de Outlook usan una Contraseña de aplicación (Configuración de la cuenta de Outlook → Seguridad → Opciones de seguridad avanzadas → Contraseñas de aplicación).

Configuración

Para confiar en la configuración de mise automáticamente, establece trusted_config_paths en la configuración a nivel de usuario en ~/.config/mise/config.toml; no lo añadas al .mise.toml de este proyecto.

VariableRequeridaPredeterminadoDescripción
EMAIL_CREDENTIALSSí (stdio)-Credenciales de correo, email:app-password por cuenta, separadas por comas para múltiples cuentas. Host/puerto IMAP personalizado opcional: email:password:imap_host:imap_port
EMAIL_USERAlternativa (stdio, cuenta única)-Dirección de correo. Se usa con EMAIL_APP_PASSWORD como alternativa por campo a EMAIL_CREDENTIALS; se fusiona en EMAIL_CREDENTIALS al arrancar
EMAIL_APP_PASSWORDAlternativa (stdio, cuenta única)-Contraseña de aplicación (Gmail/Yahoo/iCloud) o Contraseña de aplicación de Outlook; se usa con EMAIL_USER
PUBLIC_URLNo (http)-URL pública del servidor para enlaces de relay / redirección OAuth
PORTNo0 (asignado por el SO)Puerto del servidor (modo http); establécelo explícitamente (p. ej. 8080) para vincular un puerto fijo
HOSTNo-Dirección de enlace (modo http)
MCP_AUTH_DISABLENo (http)-Establécelo en 1 para omitir la verificación de JWT Bearer cuando hay una puerta de enlace de autenticación externa
OUTLOOK_CLIENT_IDNod56f8c71-9f7c-43f4-9934-be29cb6e77b0 (cliente público incluido)Sobrescribe el cliente público de Azure AD incluido para OAuth2 de Outlook autoalojado (o --client-id=<id> en auth, que sobrescribe esta variable de entorno)
OUTLOOK_EMAILNo-Solución alternativa cuando la respuesta del código de dispositivo de Microsoft omite el campo de correo electrónico
OUTLOOK_TENANTNoconsumers (stdio/CLI), common (código de dispositivo http)Directorio de Microsoft contra el que iniciar sesión, usado tanto para el código de dispositivo como para el punto final de renovación de tokens. Establece common para un buzón de trabajo/escuela (Entra ID), o un GUID de inquilino / dominio verificado para fijar un directorio
OUTLOOK_SCOPESNohttps://outlook.office.com/IMAP.AccessAsUser.All https://outlook.office.com/SMTP.Send offline_accessLista de ámbitos separados por espacios. Redúcela (p. ej. elimina SMTP.Send) para una implementación de solo lectura — un consentimiento otorgado con menos ámbitos no se puede renovar contra la lista completa
OUTLOOK_EXTRA_DOMAINSNo-Dominios separados por comas enrutados a OAuth además de outlook.com/hotmail.com/live.com. Necesario para un buzón de Microsoft 365 en tu propio dominio, que de otro modo parece una cuenta de contraseña

Múltiples cuentas

EMAIL_CREDENTIALS=user1@gmail.com:pass1,user2@outlook.com:pass2,user3@yahoo.com:pass3

Host IMAP personalizado

# Custom hostname (default port 993, implicit TLS)
EMAIL_CREDENTIALS=user@custom.com:password:imap.custom.com

# Custom hostname with a custom port
EMAIL_CREDENTIALS=user@custom.com:password:imap.custom.com:1993

# Local IMAP proxy -- "localhost" is accepted as a host, even without a dot
EMAIL_CREDENTIALS=user@custom.com:password:localhost:1993

Cada cuenta puede usar su propio host y puerto. Un puerto distinto de 993 se trata como texto plano/STARTTLS — la forma habitual para un proxy IMAP local (por ejemplo email-oauth2-proxy).

Cuentas de trabajo/escuela de Microsoft 365

Un buzón en una organización de Microsoft 365 — incluido uno en tu propio dominio — inicia sesión a través de Entra ID en lugar del directorio de consumidores, y Microsoft deshabilitó la autenticación básica para Exchange Online en 2024, por lo que una Contraseña de aplicación no es una opción. Dos ajustes lo hacen funcionar:

# Sign in against the directory that owns the mailbox
OUTLOOK_TENANT=common                      # or a tenant GUID / verified domain

# Route your own domain to OAuth instead of asking for a password
OUTLOOK_EXTRA_DOMAINS=company.com

OUTLOOK_TENANT se aplica también a la renovación de tokens, no solo al inicio de sesión inicial — renovar un token de trabajo/escuela contra el directorio de consumidores falla con AADSTS7000012: The grant was obtained for a different tenant.

Si el buzón fue consentido con un consentimiento más restringido (digamos IMAP pero no SMTP), hazlo coincidir con OUTLOOK_SCOPES para que la renovación no solicite más de lo que fue otorgado.

Lenguaje de consulta de búsqueda

ConsultaDescripción
UNREADCorreos no leídos
FLAGGEDCorreos destacados
SINCE 2024-01-01Correos después de una fecha
FROM boss@company.comCorreos de un remitente
SUBJECT meetingCorreos que coinciden con el asunto
UNREAD SINCE 2024-06-01Filtro compuesto

Proveedores compatibles

ProveedorAutenticaciónGuardar en enviados
GmailContraseña de aplicaciónAutomático (omitido)
YahooContraseña de aplicaciónAutomático (omitido)
iCloud/Me.comContraseña específica de la aplicaciónAutomático (omitido)
Outlook/Hotmail/LiveOAuth2 (Código de dispositivo)IMAP APPEND
ZohoContraseña de aplicaciónIMAP APPEND
ProtonMailProtonMail BridgeIMAP APPEND
PersonalizadoVía email:pass:imap.hostIMAP APPEND

Seguridad

  • Saneamiento de credenciales — Las contraseñas nunca se filtran en mensajes de error
  • Contraseñas de aplicación — Usa contraseñas específicas de la aplicación, no contraseñas normales
  • Almacenamiento de tokens — Los tokens OAuth de Outlook se guardan con permisos 600
  • Validación IMAP — Las consultas de búsqueda se validan antes de ejecutarse

Compilar desde el código fuente

git clone https://github.com/n24q02m/better-email-mcp.git
cd better-email-mcp
bun install
bun run dev

Implementar en Cloudflare

Deploy to Cloudflare

Ejecuta tu propia instancia multiusuario de better-email sin servidor en Cloudflare (Containers + KV). Cada sub de JWT obtiene su propio Container Durable Object, y las credenciales de correo de cada usuario y los tokens OAuth de Outlook se cifran con AES-256-GCM en un único blob de Workers KV por usuario, por lo que sobreviven al escalado a cero / recreación del contenedor sin necesidad de reautenticación.

Requisitos previos: una cuenta de Cloudflare en el plan de pago Workers — necesario para Containers (el nivel gratuito de Cloudflare no incluye Containers) — y la CLI wrangler.

  1. git clone https://github.com/n24q02m/better-email-mcp && cd better-email-mcp
  2. wrangler login
  3. Crea el espacio de nombres KV (better-email es solo KV — sin D1 / Vectorize):
    wrangler kv namespace create better-email-kv
    
    Pega el id devuelto en <better-email-kv-namespace-id> en wrangler.jsonc.
  4. Sube la imagen del contenedor a tu registro gestionado de Cloudflare (CF Containers no puede extraer de registros externos directamente), luego establece <YOUR_ACCOUNT_ID> en wrangler.jsonc:
    docker pull ghcr.io/n24q02m/better-email-mcp:beta
    docker tag ghcr.io/n24q02m/better-email-mcp:beta better-email-mcp:beta
    wrangler containers push better-email-mcp:beta   # prints registry.cloudflare.com/<ACCOUNT_ID>/better-email-mcp:beta
    
  5. Apunta wrangler.jsonc a tu propio dominio: establece <YOUR_PUBLIC_URL> (p. ej. https://email.example.com) y <YOUR_WORKER_DOMAIN> (p. ej. email.example.com).
  6. Establece los secretos de implementación:
    wrangler secret put CREDENTIAL_SECRET      # per-sub vault key + deterministic EdDSA signing (required)
    wrangler secret put MCP_RELAY_PASSWORD     # gate for the /authorize setup form
    wrangler secret put MCP_DCR_SERVER_SECRET  # proof of an intentional multi-user deploy
    
    Sobrescrituras opcionales de Outlook — solo para reemplazar el cliente de código de dispositivo público de Azure incluido (el predeterminado no necesita una aplicación de Azure por parte del usuario): wrangler secret put OUTLOOK_CLIENT_ID y wrangler secret put OUTLOOK_EMAIL. Para una organización de Microsoft 365, también establece OUTLOOK_TENANT (y OUTLOOK_EXTRA_DOMAINS para buzones en tu propio dominio).
  7. wrangler deploy, luego abre <YOUR_PUBLIC_URL>/authorize y completa el formulario de relay del navegador.

Los usuarios finales proporcionan sus propias credenciales de correo — una Contraseña de aplicación mediante el formulario de pegado, o el inicio de sesión de código de dispositivo de Outlook incluido — a través de ese formulario de relay; no hay EMAIL_CREDENTIALS del lado del servidor. El almacenamiento se asigna a Cloudflare vía MCP_STORAGE_BACKEND=cf-kv (ya establecido en wrangler.jsonc); consulta modo serverless de Cloudflare (solo KV) para los detalles de cifrado y confianza.

Modelo de confianza

Este plugin implementa TC-NearZK. La durabilidad del almacenamiento depende del modo de implementación; consulta el modelo de confianza de mcp-core para la clasificación completa.

ModoAlmacenamientoCifrado¿Quién puede leer tus datos?
HTTP remoto (Cloudflare)Workers KV cifrado subs/<sub>/configAES-256-GCMOperador del servidor (admin = usuario)
HTTP local DockerEn memoria Map<sub, CredentialPayload>Solo en procesoProceso del servidor (se borra al reiniciar)
stdiodirectorio de configuración de platformdirs mcp (config.enc; p. ej. %APPDATA%\mcp\Config\config.enc en Windows)AES-GCM, clave vinculada a la máquinaSolo tu usuario del SO (permiso de archivo 0600)

Licencia

Apache-2.0 — Consulta LICENSE.