slab-email
slab-email
Conector de correo electrónico sin interfaz gráfica para agentes de IA a través de REST y MCP.
slab-email es un microservicio local-first que estandariza el acceso al buzón detrás de una API normalizada y una superficie de herramientas MCP.
Está diseñado para slab-agents y otros entornos de ejecución de IA que necesitan acceso controlado a múltiples cuentas de correo electrónico con manejo seguro de credenciales.
¿Qué es?
slab-email no es una interfaz de usuario de correo electrónico.
Proporciona:
Capacidades normalizadas de lectura/búsqueda/creación/envío sobre proveedores de correo electrónico.
REST de administración para la gestión de cuentas y perfiles de acceso.
Servidor MCP para clientes LLM/herramientas.
Adaptadores a nivel de proveedor para:
Proton a través de Proton Mail Bridge (obligatorio).
IMAP/SMTP genérico.
Gmail a través de OAuth2 + API de Gmail.
Almacenamiento de credenciales cifradas en SQLite.
Tokens de conector con ámbito y capacidades por perfil.
Idempotencia de envío y limitación de velocidad básica anti-bucle.
Related MCP server: Mailport
Arquitectura
Flujo de alto nivel:
slab-agentsllama a/mcpcon un token de conector con ámbito.Los endpoints REST de administración configuran proveedores y perfiles de acceso.
Las cuentas se almacenan en SQLite; las credenciales están cifradas en reposo.
En el momento de la solicitud, se crean instancias de proveedor a partir de la configuración de la cuenta + el secreto descifrado.
slab-emailejecuta operaciones contra las API del proveedor (IMAP/SMTP o API de Gmail).
slab-agents (REST/MCP) -> slab-email
|
+-> sqlite (config + encrypted secrets)
+-> providers
+ proton_bridge -> Proton Mail Bridge (local IMAP/SMTP)
+ imap_smtp -> Any IMAP/SMTP
+ gmail -> Gmail API (OAuth2)Características
Soporte para múltiples cuentas:
conectar y gestionar múltiples cuentas simultáneamente.
Abstracción de proveedor:
Proton Bridge + IMAP/SMTP genérico + Gmail.
Permisos con ámbito de conector:
leer / borrador / enviar.
Envío/respuesta idempotente con
idempotencyKey.Cargas útiles de lectura/lista enhebradas e hidratación completa de mensajes.
Secretos cifrados usando
AES-256-GCM.Tokens de acceso con ámbito en perfiles.
API de administración y API MCP separadas por requisitos de token.
Listo para Docker y CI.
Pila tecnológica
Node.js + TypeScript
Express 5
SQLite (
better-sqlite3)Zod
MCP SDK (
@modelcontextprotocol/sdk)IMAP/SMTP:
imapflow,nodemailerGmail:
googleapis/google-auth-library
Inicio rápido
1) Iniciar el servicio local
npm install
cp .env.example .envEstablece los valores en .env y ejecuta:
export SLAB_EMAIL_ADMIN_KEY=change-me
export SLAB_EMAIL_MASTER_KEY=<32-byte base64 or 64-hex key>
npm run devEsperado:
GET /health→{"status":"ok"}./mcpdisponible enPOST /mcp.
2) Registrar un perfil con ámbito + token
Usa el token de administración para la gestión de cuentas/perfiles y el token de conector para el uso regular.
Configuración
Variables de entorno requeridas / relevantes:
HOST(default127.0.0.1)PORT(default6981)DATABASE_PATH(default./data/slab-email.db)SLAB_EMAIL_ADMIN_KEY(required)SLAB_EMAIL_MASTER_KEY(required, 32-byte key)GOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRETGOOGLE_REDIRECT_URI(defaulthttp://127.0.0.1:6981/api/oauth/google/callback)MAX_SENDS_PER_ACCOUNT_PER_HOUR(default60)MCP_ALLOWED_ORIGINS(comma-separated)MCP_ALLOWED_ORIGINS_HOSTS(comma-separated)PUBLIC_ADMIN_ALLOWED_ORIGINS(comma-separated)
Consulta .env.example para el arranque mínimo.
Configuración de Proton Bridge
Instala Proton Mail Bridge.
Añade tu cuenta de Proton en Bridge y copia la configuración IMAP/SMTP generada.
Configura
slab-emailcon esa configuración a través de:POST /api/accounts/proton-bridge
Prueba:
POST /api/accounts/:id/test
Este proyecto intencionalmente no implementa la automatización de inicio de sesión de Proton. Usa solo credenciales generadas por Bridge.
Consulta docs/proton.md.
Configuración de Gmail
Crea credenciales OAuth de Google Cloud.
Establece
GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET,GOOGLE_REDIRECT_URIen.env.Inicia el servicio.
Usa:
POST /api/accounts/gmail/connectpara obtenerauthorizationUrl.
Completa OAuth en el navegador.
Callback:
GET /api/oauth/google/callback
La cuenta de Gmail se almacena con el token de actualización en la base de datos cifrada.
Consulta docs/gmail.md.
API REST
Base:
GET /health/api/*POST /mcp
Autenticación:
Endpoints de administración:
Bearer <SLAB_EMAIL_ADMIN_KEY>Operacional + MCP:
Bearer <token de conector con ámbito>
Consulta docs/api.md para ejemplos completos de solicitud/respuesta.
MCP
Endpoint: POST /mcp
Herramientas:
email_list_accountsemail_searchemail_get_messageemail_list_threadsemail_get_threademail_create_draftemail_sendemail_reply
Consulta docs/mcp.md para cargas útiles y uso de las herramientas.
Modelo de seguridad
SLAB_EMAIL_MASTER_KEYes necesario para cifrar/descifrar secretos de proveedores.Los secretos nunca son devueltos por la REST de administración/MCP.
Los tokens de conector con ámbito reemplazan la clave de administración en contextos operacionales.
Los permisos de lectura/escritura/envío se aplican por perfil de acceso.
El envío es idempotente por
(accountId, idempotencyKey).Los resultados de envío desconocidos se muestran como
SEND_OUTCOME_UNKNOWNy nunca se reintentan automáticamente a ciegas.Límite de envío por cuenta predeterminado:
MAX_SENDS_PER_ACCOUNT_PER_HOUR.Los registros redactan claves probablemente sensibles.
Modelo de datos
email_accounts: metadatos de cuenta y configuración del proveedor (sin secretos).email_account_secrets: carga útil cifrada (username,password,refreshToken).access_profiles+access_profile_accounts.access_tokens: tokens de conector con hash.send_operations: campos de estado + auditoría yidempotency_key.
Consulta docs/architecture.md.
Docker
Dockerfilepara la construcción de la imagen.docker-compose.ymlpara el tiempo de ejecución local.
Nota: Proton Bridge es local-first. Si ejecutas Bridge fuera de Docker en el host, configura la conectividad cuidadosamente (red del host o equivalente) porque el contenedor no puede asumir acceso a las credenciales del host 127.0.0.1 por defecto.
Desarrollo
npm run dev # start with hot reload
npm test # run test suite
npm run lint
npm run typecheck
npm run build
npm start # run production bundlePruebas
Las pruebas de dominio cubren:
Ciclo de vida de la cuenta y cifrado de secretos
Validación del estado OAuth
Ámbito de perfil y permisos
Separación de carga útil de búsqueda/lista vs obtención
Idempotencia de envío
Comportamiento de resultado de envío desconocido
Autenticación/ámbito/ejecución de herramientas MCP
Limitaciones (MVP)
Sin soporte para archivos adjuntos.
Sin motor de sincronización de buzón, índice de búsqueda de texto completo local o sincronización push por webhook.
Sin flujos de trabajo de lotes/campañas salientes.
Sin interfaz de webmail en este servicio.
Integración con slab-agents
Si existe ../slab-agents, usa docs/slab-agents-integration.md para el contrato de integración y configuración.
Licencia
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
Email inboxes for AI agents: send, receive, reply, search, and manage threaded email over MCP.
Hosted email for AI agents: create inboxes, send, receive, and reply over MCP with scoped API keys
Hosted email MCP for AI agents with inboxes, send/receive, memory, recovery, and credits.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI agents to search, read, send, and organize Gmail emails via MCP protocol.22144 npm2MIT
- AlicenseNot gradedqualityBmaintenanceConnects multiple IMAP and SMTP mailboxes to MCP clients like ChatGPT without exposing credentials, enabling email search and thread retrieval via natural language.1Apache 2.0
- AlicenseNot gradedqualityBmaintenanceConnects any IMAP/SMTP mailbox to AI agents via MCP, enabling email read, search, send, reply, and management through natural language.6 npmMIT
- FlicenseBqualityBmaintenanceEnables external AI agents to read, send, and manage email over IMAP/SMTP via MCP, including inbox listing, search, drafts, scheduled/batch sending, and operations like reply, archive, and labels.303-