MultiMail
Correo electrónico para agentes de IA. Enviar y recibir como markdown con supervisión humana.
Documentación
@multimail/mcp-server
Tu agente aún no tiene correo electrónico porque nadie le confía el correo todavía. MultiMail lo soluciona. Una dirección de correo real con una escalera de confianza desde solo lectura hasta totalmente autónomo, identidad criptográfica en cada mensaje y controles de envío por destinatario.
Inicio rápido
{
"mcpServers": {
"multimail": {
"type": "url",
"url": "https://mcp.multimail.dev/mcp"
}
}
}
Servidor remoto. Sin instalación. Se autentica mediante OAuth en la primera conexión.
Funciona con Claude.ai, Claude Desktop, Claude Code, Cursor, Windsurf, Copilot (VS Code), ChatGPT Desktop y cualquier cliente MCP que admita servidores remotos.
Alternativa: servidor stdio local
{
"mcpServers": {
"multimail": {
"command": "npx",
"args": ["-y", "@multimail/mcp-server"],
"env": {
"MULTIMAIL_API_KEY": "mm_live_...",
"MULTIMAIL_MAILBOX_ID": "01KJ1NHN8J..."
}
}
}
}
Obtén una clave en multimail.dev. O ejecuta sin una para crear una cuenta de forma interactiva.
Ubicaciones de archivos de configuración
| Cliente | Archivo de configuración |
|---|---|
| Claude Code | ~/.claude/.mcp.json |
| Claude Desktop | claude_desktop_config.json |
| Cursor | .cursor/mcp.json en tu proyecto |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
| Copilot (VS Code) | .vscode/mcp.json en tu proyecto |
| OpenCode | mcp.json en tu proyecto |
| ChatGPT Desktop | Configuración > Servidores MCP |
Escalera de confianza
Cada buzón tiene un modo de supervisión. Comienza con restricciones y avanza a medida que el agente gana confianza.
| Modo | Comportamiento |
|---|---|
read_only | El agente lee el correo. Todos los envíos están bloqueados. |
gated_all | Cada acción requiere aprobación humana. |
gated_send | Saliente retenido para aprobación. Entrante inmediato. (predeterminado) |
monitored | El agente envía libremente. Las copias van a la dirección de supervisión. |
autonomous | Envío/recepción completos. Sin restricciones. |
Los agentes solicitan actualizaciones mediante la API. El operador las aprueba con un código de un solo uso. Las degradaciones no requieren aprobación. El agente siempre puede restringirse a sí mismo.
El flujo de aprobación con compuertas está verificado formalmente en Lean 4. Ningún correo llega a la entrega sin pasar por la aprobación del operador, para cada posible ruta de código.
Lista de permitidos por destinatario
En el modo gated_send, los destinatarios en la lista de permitidos omiten la cola de aprobación. Añade direcciones exactas (vendor@example.com) o comodines de dominio (*@example.com). Cada adición requiere aprobación por correo del operador. El agente no puede autoaprobar cambios en la lista de permitidos.
El punto medio práctico: la correspondencia habitual con contactos conocidos se envía de inmediato; los destinatarios nuevos aún requieren supervisión.
Identidad criptográfica
Cada correo saliente lleva un encabezado X-MultiMail-Identity firmado (ECDSA P-256). La carga útil incluye el nombre del operador, el modo de supervisión, las capacidades y el estado de verificación. Los destinatarios verifican contra la clave pública en GET /.well-known/multimail-signing-key.
Un encabezado X-MultiMail-Reputation separado enlaza con datos de reputación que preservan la privacidad: tasas de rebote, tasas de quejas, antigüedad de la cuenta. No se exponen direcciones sin procesar.
Sin identidad verificada, los destinatarios no pueden distinguir a tu agente de un spammer. Con ella, pueden verificar al operador, el nivel de supervisión y el historial de envíos antes de leer una palabra.
Retransmisión DID del agente (opcional). Si tu agente ha vinculado un did:key a su cuenta de MultiMail, pasa un parámetro opcional ucan a send_email / reply_email. MultiMail retransmite el UCAN autofirmado de tu agente textualmente en un encabezado X-Agent-Identity separado (did="…"; ucan="…") — no lo firma ni lo avala; las herramientas del destinatario verifican la delegación de forma independiente. Inerte a menos que se vincule un DID.
Autorregistro del agente (auth.md)
Los agentes pueden registrarse sin navegador. El protocolo usa la aserción de identidad por correo verificado, siguiendo la convención auth.md inspirada en WorkOS AuthKit:
POST /agent/auth -> claim_token + OTP sent to operator email
POST /agent/auth/claim/complete -> API key + tenant_id + granted scopes
El descubrimiento sigue RFC 9728:
GET /.well-known/oauth-protected-resource(metadatos del recurso)GET /.well-known/oauth-authorization-server(metadatos de autorización con extensiónagent_auth)GET /auth.md(guía de registro legible por humanos/agentes)
El encabezado WWW-Authenticate en las respuestas 401 apunta a los agentes a estos endpoints automáticamente. Un agente que recibe un 401 puede seguir el enlace, leer el protocolo de registro e incorporarse por sí mismo.
Escaneo de contenido
Cada correo saliente se escanea antes de la entrega. Los correos entran en estado pending_scan y luego pasan a entrega o pending_send_approval (en modos con compuertas). Los correos entrantes pasan por el mismo proceso. Los patrones de phishing, malware e inyección de prompts se marcan antes de llegar a la bandeja de entrada del agente.
Cómo funciona
- Los cuerpos de correo son markdown de entrada y HTML formateado de salida. El HTML entrante llega como markdown limpio (15 veces menos tokens que el MIME sin procesar).
- El hilo es automático. Responde a un correo y los encabezados se configuran correctamente.
- Los envíos devuelven
pending_scanmientras se escanean. Los buzones con compuertas pasan luego apending_send_approvalpara revisión humana. No reintentes. - Cada correo saliente lleva un encabezado
X-MultiMail-Identityfirmado criptográficamente. - Datos de reputación mediante el encabezado
X-MultiMail-Reputation: tasas de rebote, tasas de quejas, antigüedad de la cuenta. Preservan la privacidad y se actualizan a diario.
Herramientas (50)
| Herramienta | Descripción |
|---|---|
| Correo principal | |
send_email | Envía correo como markdown. Admite adjuntos, idempotency_key, entrega programada mediante send_at. |
check_inbox | Lista correos con filtros: estado, remitente, asunto, rango de fechas, dirección, adjuntos, paginación. |
read_email | Contenido completo del correo. Metadatos confiables y cuerpo no confiable devueltos como bloques de contenido separados. |
reply_email | Responde en el hilo. Los encabezados de hilo se configuran automáticamente. |
get_thread | Todos los correos en un hilo de conversación con participantes y metadatos. |
download_attachment | Descarga el adjunto como base64 con tipo de contenido. |
cancel_message | Cancela un correo pendiente o programado. |
edit_scheduled_email | Edita el correo programado antes de que se envíe. |
wait_for_email | Bloquea hasta que llegue un correo que coincida o se agote el tiempo (máx. 120 s). |
get_tags | Obtiene todas las etiquetas de un correo. Memoria persistente clave-valor del agente entre sesiones. |
set_tags | Establece etiquetas en un correo. Se fusiona con las etiquetas existentes. |
delete_tag | Elimina una clave de etiqueta específica de un correo. |
| Supervisión | |
list_pending | Correos pendientes de decisión de supervisión (requiere alcance de supervisión). |
decide_email | Aprueba o rechaza un correo pendiente (requiere alcance de supervisión). |
manage_upgrade | Solicita o aplica una actualización del modo de supervisión (acción: request|apply). |
| Lista de permitidos de envío | |
list_allowlist | Lista las entradas de la lista de permitidos de envío. |
add_allowlist_entry | Añade un destinatario a la lista de permitidos de envío. Se requiere aprobación del operador. |
remove_allowlist_entry | Elimina una entrada de la lista de permitidos. |
| Gestión de buzones | |
list_mailboxes | Todos los buzones con ID, dirección, modo de supervisión, nombre para mostrar. |
configure_mailbox | Configuración inicial: modo de supervisión, nombre para mostrar, CC/CCO, programación, firma. |
update_mailbox | Actualiza la configuración (nombre para mostrar, modo de supervisión, firma, webhooks). |
create_mailbox | Crea un buzón (alcance de administrador + aprobación del operador). |
delete_mailbox | Elimina permanentemente un buzón (alcance de administrador). |
| Cuenta y facturación | |
get_account | Estado de la cuenta, plan, cuota, envío habilitado, nivel de aplicación. |
update_account | Actualiza el nombre de la organización, el correo de supervisión y la dirección física. |
delete_account | Elimina permanentemente la cuenta y todos los datos (alcance de administrador). |
get_usage | Cuota y estadísticas de uso del período de facturación. |
upgrade_plan | Actualiza al plan de pago (Builder $9/mes, Pro $29/mes, Scale $99/mes). |
cancel_subscription | Cancela la suscripción de pago y vuelve al plan inicial al final del período. |
get_billing_portal | URL del portal de Stripe para facturación de autoservicio. |
| Registro (sin necesidad de clave de API) | |
request_challenge | Desafío de prueba de trabajo ALTCHA para la creación de cuentas. |
create_account | Crea una cuenta con el desafío PoW resuelto. |
resend_confirmation | Reenvía el correo de activación con un código nuevo. |
activate_account | Activa la cuenta con el código de confirmación. |
setup_multimail | Incorporación guiada en el endpoint público /onboard. |
| Claves de API y auditoría | |
list_api_keys | Lista todas las claves de API (alcance de administrador). |
create_api_key | Crea una clave de API con alcances (administrador + aprobación del operador). send+oversight rechazados para evitar la autoaprobación. |
revoke_api_key | Revoca una clave de API (alcance de administrador). |
get_audit_log | Registro de auditoría de la cuenta (alcance de administrador). |
| Contactos y spam | |
search_contacts | Busca contactos por nombre o correo. |
add_contact | Añade un contacto. |
delete_contact | Elimina un contacto. |
manage_spam_status | Reporta spam o limpia el estado de spam (acción: report|clear). |
list_spam | Correos marcados como spam y en cuarentena. |
list_suppression | Lista destinatarios suprimidos con paginación. |
remove_suppression | Elimina un destinatario de la lista de supresión. |
| Webhooks | |
create_webhook | Crea un webhook para notificaciones de eventos de correo en tiempo real. |
list_webhooks | Lista todos los webhooks. |
delete_webhook | Elimina un webhook. |
| Meta | |
report_issue | Reporta un error, un problema del sitio o una solicitud de función. |
Ejemplos de prompts
Find the most recent email from alice@example.com, summarize what she's asking,
then draft a reply saying I'll review this week. Don't send until I approve.
Check my inbox and summarize the last 5 unread emails.
For each: sender, subject, time, and whether it needs action today.
Review the pending approval queue. For each pending email: who it goes to,
the subject, risk factors, and whether to approve or reject.
Show my current sending allowlist. Then add *@acme.com so emails to Acme skip approval.
Variables de entorno
| Variable | Requerido | Descripción |
|---|---|---|
MULTIMAIL_API_KEY | Para modo stdio | Tu clave de API (mm_live_...). No es necesaria para el servidor remoto (usa OAuth). |
MULTIMAIL_MAILBOX_ID | No | ID de buzón predeterminado. Si no se establece, pasa mailbox_id por herramienta o llama a list_mailboxes. |
MULTIMAIL_API_URL | No | URL base de la API. El valor predeterminado es https://api.multimail.dev. |
También disponible
- API REST:
https://api.multimail.dev(especificación OpenAPI) - CLI:
npx -y @mvanhorn/printing-press install multimail(cada endpoint de la API como comando de shell) - SDKs: Python, Vercel AI SDK, LangChain, LlamaIndex, CrewAI, AutoGen
Desarrollo
npm install
npm run dev # Run with tsx
npm run build # Compile TypeScript
npm start # Run compiled version
Licencia
MIT
Al usar MultiMail aceptas los Términos de servicio y la Política de uso aceptable.