Conecta cualquier cuenta de correo, pega una URL en un cliente MCP con OAuth y autoriza. Los clientes sin OAuth usan una clave de API en su lugar. Referencia completa de herramientas y guía de conexión más abajo.
No se requiere SDK. MCPEmails habla MCP estándar sobre HTTP, así que encaja en cualquier agente compatible con MCP.
Regístrate en mcpemails.com, luego ve a Panel → Bandejas → Conectar bandeja. Elige Gmail, Outlook, iCloud, Fastmail o cualquier bandeja IMAP, después completa el flujo de OAuth o pega una contraseña de aplicación. Tu bandeja queda lista en menos de un minuto.
Conecta tu bandeja de entrada →En Panel → Claves de API, haz clic en «Crear clave». Ponle nombre, selecciona los ámbitos que tu agente necesita (read:email, search:email, send:email, manage:folders, delete:email, manage:drafts, manage:contacts, schedule:email y manage:automations) y copia la clave. Solo se muestra una vez.
# Your key looks like this:
mcpe_live_AbCdEfGhIjKlMnOpQrStUvWxYz123456Elige la pestaña de tu cliente más abajo. Los clientes MCP con soporte de OAuth 2.0 (claude.ai, Claude Desktop, Cursor y otros) solo pegan la URL y autorizan, sin necesidad de clave de API. Los clientes sin OAuth, además del acceso por scripts, usan la clave de API del paso 02.
# OAuth-capable clients (claude.ai, Claude Desktop, Cursor…)
# No API key required. Paste the URL, click Connect, authorize.
#
# Example: claude.ai
# 1. Go to claude.ai → Customize → Connectors
# 2. Click "Add connector" and paste this URL:
#
# https://mcpemails.com/api/mcp
#
# 3. Click Connect and sign in with your mcpemails account.
# 4. Every tool your approved scopes allow is live immediately.
#
# Claude Desktop and Cursor follow the same OAuth flow when
# the server URL is configured in their MCP settings.Sin copiar y pegar UUIDs de bandejas. Tu agente llama primero a inbox_list para descubrir cada bandeja conectada y su UUID, y luego le preguntas: «Revisa mi bandeja y resume los últimos 5 mensajes no leídos.»
# The agent calls inbox_list first, so no hardcoded UUIDs.
# System prompt (optional, for multi-inbox setups):
You have access to email via MCPEmails.
Start by calling inbox_list to discover available inboxes.Todo el tráfico va a un único endpoint Streamable HTTP. Autentícate con un token bearer de tu panel.
https://mcpemails.com/api/mcpEnvía un cuerpo de petición JSON-RPC 2.0. Métodos admitidos: initialize, tools/list, tools/call.
structuredContentcurl -X POST https://mcpemails.com/api/mcp \
-H "Authorization: Bearer mcpe_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-06-18",
"clientInfo": { "name": "my-agent", "version": "1.0" },
"capabilities": {}
}
}'MCPEmails es solo de petición/respuesta: cada resultado proviene de una llamada a una herramienta que hace tu agente. No hay webhooks, notificaciones push ni eventos iniciados por el servidor: un correo entrante nunca activa por sí solo una llamada del agente. Para reaccionar al correo nuevo, haz que tu agente sondee de forma periódica, p. ej. llamando a email_read con action: "list" y unread: true al intervalo que necesite tu flujo (ten en cuenta los límites de tasa anteriores).
Son capacidades conscientes del proveedor dentro de la misma interfaz MCP compacta y basada en acciones, no un catálogo de herramientas aparte para cada caso límite.
Activa la aprobación por bandeja en el panel para retener envíos, respuestas, reenvíos, envíos de borradores y envíos programados. El agente recibe un resultado pendiente y un miembro del espacio de trabajo lo aprueba o lo rechaza en el panel antes de que se envíe nada.
Llama a inbox_list para ver un perfil versionado de cada bandeja. Identifica las operaciones normalizadas como exactas, diferentes o no disponibles, de modo que los agentes puedan elegir flujos portables sin fingir que todos los proveedores son idénticos.
Lee un adjunto seleccionado como texto transitorio para archivos de texto compatibles, CSV, HTML, JSON y PDF con capa de texto, o descarga el original almacenado por el proveedor como un .eml portable. La extracción no ejecuta código incrustado ni aplica OCR a las imágenes.
Reutiliza una idempotency_key para reintentar con seguridad la misma solicitud saliente durante 24 horas. Las ejecuciones de organización masiva mantienen su estado en el panel y aceptan solicitudes de cancelación; en esos registros no se guarda ningún contenido de los mensajes ni los términos de búsqueda.
Los clientes compatibles con los prompts de MCP pueden ofrecer rutinas integradas para un triaje cuidadoso de la bandeja, la revisión de conversaciones abiertas, la preparación de borradores de respuesta, propuestas de organización y la revisión de envíos programados. Los prompts nunca conceden permisos ni se ejecutan automáticamente.
Crea una respuesta sin enviar dentro de su conversación original para que la revise una persona. Los envíos, respuestas y reenvíos de Gmail solo pueden elegir una identidad Send As verificada por el proveedor y devuelta por inbox_list; los demás proveedores usan su dirección conectada.
Los clientes MCP que admiten OAuth 2.0 (claude.ai, Claude Desktop, Cursor y otros) se conectan automáticamente mediante código de autorización + PKCE. Sin clave de API, sin archivo de configuración. Pega la URL y haz clic en Conectar.
https://mcpemails.com/api/mcp como la URL del servidorCómo funciona internamente
claude.ai se registra a sí mismo mediante el Registro dinámico de clientes RFC 7591, así que nunca pre-registras un ID de cliente.
La autorización usa Código de autorización OAuth 2.0 + PKCE (RFC 7636), así que nunca se transmite ningún secreto de cliente.
Los tokens se limitan exactamente a los permisos que apruebas: read:email, search:email, send:email, manage:folders, delete:email, manage:drafts, manage:contacts, schedule:email y manage:automations.
Indicar una bandeja es opcional. Cuando tu clave tiene exactamente una bandeja, cada herramienta por bandeja la resuelve automáticamente, así que no hace falta inbox_id. Con varias bandejas, pasa inbox_id (el UUID de inbox_list) o inbox (la dirección de la bandeja). La mayoría de las herramientas toman un argumento action que selecciona la operación; las insignias muestran los permisos que necesita cada una, y tools/list solo devuelve las herramientas para las que tu clave (o token OAuth) tiene permiso. Una clave con todos los permisos ve 23 herramientas en tools/list: estas 17 más seis herramientas de aprobación y de operaciones masivas que tu cliente MCP maneja desde la tarjeta de revisión que te muestra, en lugar de herramientas que compongas a mano. Haz clic en «Mostrar ejemplo» para ver una petición y respuesta completas.
inbox_listread:emailemail_readread:emailsearch:emailemail_organizemanage:foldersemail_search_and_movemanage:foldersemail_deletedelete:emailemail_composesend:emailfolder_listread:emailfoldermanage:foldersdraft_listmanage:draftsdraftmanage:draftsread:emailsend:emailschedule_listschedule:emailscheduleschedule:emailsignature_getread:emailsignature_setsend:emailautomation_readmanage:automationsautomationmanage:automationscontact_searchmanage:contactsinbox_listread:emailDevuelve todas las bandejas a las que la clave API u OAuth actual tiene acceso. Llama a esta primero para descubrir los valores de inbox_id, así nunca copias UUID desde el panel. Cada resultado incluye la dirección de correo, el proveedor, una marca de servicio opcional (icloud/yahoo/zoho/yandex/generic/fastmail) y un objeto capabilities que describe qué funciones admite esa bandeja.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
provider | enum | opcional | Filtro opcional: devuelve solo las bandejas servidas por este proveedor. Uno de: gmail, outlook, fastmail, imap. Omítelo para listar todas las bandejas a las que la clave tiene acceso. |
include_capabilities | boolean | opcional | Si cada bandeja incluye su objeto capabilities (qué funciones admite). Por defecto true; ponlo en false para una lista compacta con solo inbox_id, dirección de correo, nombre visible, proveedor y marca de servicio. |
email_readread:emailsearch:emailLee, lista y busca mensajes en una bandeja. Define action: 'list' para resúmenes de mensajes recientes (más nuevos primero, con filtro por carpeta/no leídos y paginación), 'read' para el contenido completo de un message_id (cuerpo de texto, HTML saneado opcional y adjuntos), 'read_batch' para obtener hasta 50 message_ids en una sola llamada, 'search' para filtros estructurados e independientes del proveedor (from, to, cc, subject, body, text, unread, has_attachment, flagged, since, before), o 'attachment' para descargar un único adjunto (por attachment_index o filename) como datos base64, hasta 25 MB. Solo lectura: nunca cambia nada. La acción 'search' también se desbloquea por sí sola con el permiso más limitado search:email. Los cuerpos largos se devuelven por ventanas: revisa body_truncated y reenvía body_next_offset como body_offset para continuar. En Outlook, un criterio de texto (from, to, cc, subject, body, text o query) no se puede combinar con unread, has_attachment, flagged, since ni before: esos filtros no se aplican y el resultado indica cuáles.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
action | enum | obligatorio | Qué operación realizar: "list" (resúmenes de mensajes recientes), "read" (contenido completo de un message_id), "read_batch" (varios message_ids), "search" (filtros estructurados) o "attachment" (descargar un adjunto como base64). Determina qué otros argumentos se aplican. |
inbox_id | string (uuid) | opcional | UUID de la bandeja desde la que leer. Opcional: se resuelve automáticamente cuando la clave tiene exactamente una bandeja; si no, pasa este o inbox. Llama a inbox_list para descubrir los IDs de bandeja. |
inbox | string | opcional | Dirección de correo de la bandeja a usar, como alternativa práctica a inbox_id. Opcional; se ignora si se indica inbox_id. |
message_id | string | opcional | ID de mensaje del proveedor a leer (action 'read' o 'attachment'), de un list o search previo. |
message_ids | array[string] | opcional | IDs de mensaje del proveedor a leer (action 'read_batch'), de un list o search previo. Máx. 50 por llamada. |
folder | string | opcional | Carpeta a listar (action 'list'). Por defecto "INBOX". Otros valores: "SENT", "DRAFTS", "TRASH". |
limit | integer | opcional | Máximo de resultados a devolver (action 'list' o 'search'). Por defecto 20, máx. 100. |
offset | integer | opcional | Desplazamiento de paginación basado en cero (action 'list' o 'search'). Por defecto 0. |
include_html | boolean | opcional | Incluir el cuerpo HTML saneado (action 'read'/'read_batch'). Por defecto false. |
include_attachments | boolean | opcional | Incluir datos de adjuntos en base64 (action 'read'/'read_batch'). En 'read_batch' el total de 10 MB se comparte entre todos los mensajes de la llamada. Por defecto false. |
mark_as_read | boolean | opcional | Marcar el mensaje (o mensajes) como leído tras obtenerlo (action 'read'/'read_batch'). Por defecto false. |
body_offset | integer | opcional | Desplazamiento de caracteres en el cuerpo de texto plano (acción 'read'/'read_batch'). Predeterminado 0. Reenvía el body_next_offset devuelto para continuar. |
body_html_offset | integer | opcional | Como body_offset, para el cuerpo HTML saneado cuando include_html es true. Predeterminado 0. |
body_max_chars | integer | opcional | Caracteres del cuerpo devueltos por mensaje. Predeterminado 8000 para 'read' y 2000 para 'read_batch'. Máximo 50000. |
attachment_index | integer | opcional | Índice (base 0) del adjunto a descargar (action 'attachment'), según el orden de la lista de adjuntos de 'read'. Tiene prioridad sobre filename. Omite ambos cuando el mensaje tiene exactamente un adjunto. |
filename | string | opcional | Nombre del adjunto a descargar (action 'attachment'), coincidencia exacta sin distinción de mayúsculas y minúsculas. Se ignora si se indica attachment_index. |
from | string | opcional | Remitente a coincidir (action 'search'): dirección de correo, nombre visible o fragmento (p. ej. "alice@example.com" o "Alice"). |
to | string | opcional | Destinatario principal (To) a coincidir (action 'search'): dirección de correo, nombre visible o fragmento. |
cc | string | opcional | Destinatario en copia (Cc) a coincidir (action 'search'): dirección de correo, nombre visible o fragmento. |
subject | string | opcional | Texto a coincidir en el asunto, tal cual se escribe (action 'search'). Gmail (API o IMAP) y Outlook coinciden por palabras completas, así que una palabra a medias no encuentra nada; los demás servidores IMAP coinciden por subcadena. |
body | string | opcional | Texto libre a encontrar en el cuerpo del mensaje (action 'search'). (En Gmail esto coincide con todo el mensaje, no solo el cuerpo.) |
text | string | opcional | Texto libre a coincidir en cualquier parte del mensaje: cabeceras y cuerpo (action 'search'). |
unread | boolean | opcional | Acciones 'list' y 'search': true = solo mensajes no leídos; false = solo leídos; omítelo para ambos. |
has_attachment | boolean | opcional | Action 'search': true = solo mensajes con adjunto. No admitido en IMAP genérico (se ignora ahí). |
flagged | boolean | opcional | Action 'search': true = solo mensajes marcados/destacados. |
since | string (ISO date) | opcional | Fecha o fecha-hora ISO 8601 (action 'search'); devuelve mensajes recibidos en/después de (>=) este instante. P. ej. "2026-06-01". |
before | string (ISO date) | opcional | Fecha o fecha-hora ISO 8601 (action 'search'); devuelve mensajes recibidos estrictamente antes de (<) este instante. |
query | string | opcional | Cadena de consulta nativa del proveedor (action 'search', recurso de emergencia). Prefiere los campos estructurados de arriba. Se combina con ellos donde se admite; se ignora en Fastmail. |
include_folders | array | opcional | Restringe una búsqueda a estos nombres de carpeta (action 'search'). En IMAP genérico, omitirlo busca solo en INBOX; indica tus carpetas de archivo o de enviados para ampliarlo. Gmail y Outlook buscan en todas las carpetas salvo la papelera (Elementos eliminados en Outlook; Gmail también omite Spam); indícala para incluirla. |
email_organizemanage:foldersMueve, copia, marca o archiva mensajes que indicas por message_id. Define action: 'move'/'move_batch' (a un destination_folder_id), 'copy'/'copy_batch' (duplica en un destination_folder_id, dejando el original en su lugar; disponible allí donde inbox_list indique capabilities.copy true: todas las bandejas IMAP, incluida una dirección de Gmail conectada por IMAP, y Outlook), 'flag' (establece leído/no leído/destacado mediante flag_action sobre message_ids), o 'archive' (saca un mensaje de la bandeja de entrada). Obtén antes los IDs con email_read. Cada acción toca solo los IDs que pasas y se deshace con otra llamada: un movimiento con el movimiento inverso, archive con un movimiento a la bandeja de entrada, flag con la marca contraria, y una copia deja el original donde estaba. En Gmail, mover añade la etiqueta de destino y quita INBOX; las demás etiquetas se mantienen, sacar un mensaje de Trash o Spam también limpia TRASH/SPAM, así que es una restauración real, y el conector de la API de Gmail (provider 'gmail') no tiene copia nativa, aunque un buzón de Gmail conectado por IMAP copia como cualquier otra bandeja IMAP. Para mover todo lo que coincida con una búsqueda en lugar de una lista de IDs, usa email_search_and_move: es una herramienta aparte porque un solo filtro equivocado allí reubica una bandeja entera. Cada acción necesita manage:folders. Eliminar mensajes vive en su propia herramienta email_delete.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
action | enum | obligatorio | Qué operación realizar: "move", "move_batch", "copy", "copy_batch", "flag" o "archive". Determina qué otros argumentos se aplican. Mover cada mensaje que coincida con una búsqueda es la herramienta aparte email_search_and_move. |
inbox_id | string (uuid) | opcional | UUID de la bandeja que contiene los mensajes. Opcional: se resuelve automáticamente cuando la clave tiene exactamente una bandeja; si no, pasa este o inbox. Llama a inbox_list para obtener los IDs de bandeja disponibles. |
inbox | string | opcional | Dirección de correo de la bandeja a usar, como alternativa práctica a inbox_id. Opcional; se ignora si se indica inbox_id. |
message_id | string | opcional | ID de mensaje del proveedor para una acción de un solo mensaje (move, copy, archive), de un list, read o search previo. |
message_ids | array[string] | opcional | IDs de mensaje del proveedor para una acción por lotes (move_batch, copy_batch, flag). Máx. 500 por llamada. |
destination_folder_id | string | opcional | Carpeta de destino (move, move_batch, copy, copy_batch): un alias canónico (inbox, sent, drafts, trash, archive, spam), un nombre de carpeta/etiqueta (p. ej. 'Receipts') o un ID de carpeta nativo del proveedor obtenido de folder_list. Los nombres y alias se resuelven automáticamente. |
flag_action | enum | opcional | Para action 'flag': el cambio a aplicar a cada mensaje: "read" o "unread" para fijar el estado de lectura, o "flag"/"unflag" para añadir o quitar una estrella/marca de seguimiento. |
email_search_and_movemanage:foldersMueve a una carpeta de destino cada mensaje que coincida con una búsqueda, en una sola operación del lado del servidor, de modo que ningún ID de mensaje quede obsoleto antes de usarse. La búsqueda usa los mismos campos estructurados e independientes del proveedor que email_read (from, to, cc, subject, body, text, unread, has_attachment, flagged, since, before), que el servidor traduce a la sintaxis nativa de la bandeja; query es un recurso de emergencia en crudo. Es una herramienta aparte de email_organize, y es la que se marca como destructiva ante tu cliente MCP, porque actúa sobre todo lo que encuentra el filtro y no sobre IDs que hayas elegido: un solo filtro equivocado reubica una bandeja entera. Para mover mensajes que ya has listado, usa email_organize (action 'move' o 'move_batch') en su lugar. Limitada por limit, por defecto y máximo 500: comprueba has_more en el resultado antes de dar una bandeja por barrida del todo, y termina el resto con email_organize (action 'move_batch'). En Gmail, mover añade la etiqueta de destino y quita INBOX. Devuelve los recuentos succeeded/failed y un resultado por mensaje. Necesita manage:folders.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
inbox_id | string (uuid) | opcional | UUID de la bandeja que se va a barrer. Opcional: se resuelve automáticamente cuando la clave tiene exactamente una bandeja; si no, pasa este o inbox. Llama a inbox_list para obtener los IDs de bandeja disponibles. |
inbox | string | opcional | Dirección de correo de la bandeja a usar, como alternativa práctica a inbox_id. Opcional; se ignora si se indica inbox_id. |
destination_folder_id | string | obligatorio | Adónde se mueve cada coincidencia: un alias canónico (inbox, sent, drafts, trash, archive, spam), un nombre de carpeta/etiqueta (p. ej. 'Receipts') o un ID de carpeta nativo del proveedor obtenido de folder_list. Los nombres y alias se resuelven automáticamente. |
from | string | opcional | Remitente a coincidir: dirección de correo, nombre visible o fragmento. |
to | string | opcional | Destinatario principal (To) a coincidir: dirección de correo, nombre visible o fragmento. |
cc | string | opcional | Destinatario en copia (Cc) a coincidir: dirección de correo, nombre visible o fragmento. |
subject | string | opcional | Texto a coincidir en el asunto. |
body | string | opcional | Texto libre a encontrar en el cuerpo del mensaje. (En Gmail esto coincide con todo el mensaje.) |
text | string | opcional | Texto libre a coincidir en cualquier parte del mensaje: cabeceras y cuerpo. |
unread | boolean | opcional | true = solo no leídos; false = solo leídos; omítelo para ambos. |
has_attachment | boolean | opcional | true = solo mensajes con adjunto. No admitido en IMAP genérico (se ignora ahí). |
flagged | boolean | opcional | true = solo mensajes marcados/destacados. |
since | string (ISO date) | opcional | Fecha o fecha-hora ISO 8601; coincide con mensajes recibidos en/después de (>=) este instante. |
before | string (ISO date) | opcional | Fecha o fecha-hora ISO 8601; coincide con mensajes recibidos estrictamente antes de (<) este instante. |
query | string | opcional | Cadena de consulta nativa del proveedor (recurso de emergencia). Prefiere los campos estructurados de arriba. Se ignora en Fastmail. |
include_folders | array | opcional | Restringe la búsqueda a estos nombres de carpeta. En IMAP genérico, omitirlo busca solo en INBOX; indica tus carpetas de archivo o de enviados para ampliarlo. Gmail y Outlook buscan en todas las carpetas salvo la papelera (Elementos eliminados en Outlook; Gmail también omite Spam); indícala para incluirla. |
limit | integer | opcional | Número máximo de coincidencias que se mueven. Por defecto 500, máx. 500. Cuando la búsqueda llena el límite, has_more en el resultado dice si quedaron mensajes coincidentes sin tocar. |
idempotency_key | string | opcional | Clave opaca opcional (1–200 caracteres) para un único barrido lógico. Reutilízala solo para reintentar exactamente la misma llamada en un plazo de 24 horas; una reutilización con argumentos distintos se rechaza. |
email_deletedelete:emailElimina mensajes. Es su propia herramienta, separada de email_organize, porque eliminar es destructivo. Define action: 'delete'/'delete_batch' (Papelera por defecto, o permanente), o 'search_and_delete' (elimina cada mensaje que coincida con una búsqueda estructurada, evita IDs de mensaje obsoletos). Las eliminaciones van a la Papelera salvo que pases permanent: true, que es irreversible. Cada acción necesita el permiso delete:email, y toda la herramienta se marca como destructiva ante tu cliente MCP, que gestiona la confirmación del usuario antes de eliminar nada.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
action | enum | obligatorio | Qué operación realizar: "delete", "delete_batch" o "search_and_delete". Determina qué otros argumentos se aplican. |
inbox_id | string (uuid) | opcional | UUID de la bandeja que contiene los mensajes. Opcional: se resuelve automáticamente cuando la clave tiene exactamente una bandeja; si no, pasa este o inbox. Llama a inbox_list para obtener los IDs de bandeja disponibles. |
inbox | string | opcional | Dirección de correo de la bandeja a usar, como alternativa práctica a inbox_id. Opcional; se ignora si se indica inbox_id. |
message_id | string | opcional | ID de mensaje del proveedor para una eliminación individual (action 'delete'), de un list, read o search previo. |
message_ids | array[string] | opcional | IDs de mensaje del proveedor para una eliminación por lotes (action 'delete_batch'). Máx. 500 por llamada. |
permanent | boolean | opcional | Si es true, elimina de forma definitiva (omite la Papelera; puede ser irreversible); si es false u omitido, mueve a la Papelera. La eliminación permanente está disponible en IMAP, Fastmail y Outlook; la API de Gmail solo admite papelera. Por defecto false. |
from | string | opcional | Remitente a coincidir (search_and_delete): dirección de correo, nombre visible o fragmento. |
to | string | opcional | Destinatario principal (To) a coincidir (search_and_delete): dirección de correo, nombre visible o fragmento. |
cc | string | opcional | Destinatario en copia (Cc) a coincidir (search_and_delete): dirección de correo, nombre visible o fragmento. |
subject | string | opcional | Texto a coincidir en el asunto (search_and_delete). |
body | string | opcional | Texto libre a encontrar en el cuerpo del mensaje (search_and_delete). (En Gmail esto coincide con todo el mensaje.) |
text | string | opcional | Texto libre a coincidir en cualquier parte del mensaje: cabeceras y cuerpo (search_and_delete). |
unread | boolean | opcional | Acción de búsqueda: true = solo no leídos; false = solo leídos; omítelo para ambos. |
has_attachment | boolean | opcional | Acción de búsqueda: true = solo mensajes con adjunto. No admitido en IMAP genérico (se ignora ahí). |
flagged | boolean | opcional | Acción de búsqueda: true = solo mensajes marcados/destacados. |
since | string (ISO date) | opcional | Fecha o fecha-hora ISO 8601 (acción de búsqueda); coincide con mensajes recibidos en/después de (>=) este instante. |
before | string (ISO date) | opcional | Fecha o fecha-hora ISO 8601 (acción de búsqueda); coincide con mensajes recibidos estrictamente antes de (<) este instante. |
query | string | opcional | Cadena de consulta nativa del proveedor (acción de búsqueda, recurso de emergencia). Prefiere los campos estructurados de arriba. Se ignora en Fastmail. |
include_folders | array | opcional | Restringe la búsqueda a estos nombres de carpeta (acción de búsqueda). En IMAP genérico, omitirlo busca solo en INBOX; indica tus carpetas de archivo o de enviados para ampliarlo. Gmail y Outlook buscan en todas las carpetas salvo la papelera (Elementos eliminados en Outlook; Gmail también omite Spam); indícala para incluirla. |
limit | integer | opcional | Para search_and_delete: número máximo de coincidencias sobre las que actuar. Por defecto 500, máx. 500. |
email_composesend:emailEnvía correo nuevo o responde a mensajes existentes. Define action: 'send' para un correo nuevo (to/subject/body, opcionalmente cc/bcc/html_body/reply_to/attachments), 'reply' para responder a un message_id (las cabeceras de hilo se establecen automáticamente; opcionalmente reply_all), o 'forward' para reenviar un message_id a nuevos destinatarios, retransmitiendo el original byte a byte (HTML, imágenes en línea y adjuntos intactos). La firma de la bandeja se añade automáticamente: en respuestas y reenvíos va después de tu texto y antes del bloque citado, regida por el modo de respuesta de la firma; pasa include_signature: false para suprimirla en un único mensaje escueto. Las tres son irreversibles una vez enviadas. 'forward' también acepta message_ids para hasta 50 mensajes en una llamada, informados uno a uno. Para adjuntar un archivo que ya está en esta bandeja, refiérelo como { source_message_id, attachment_index } en lugar de leerlo y volver a codificarlo.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
action | enum | obligatorio | Qué operación realizar: "send", "reply" o "forward". Determina qué otros argumentos se aplican. |
inbox_id | string (uuid) | opcional | UUID de la bandeja desde la que enviar. Opcional: se resuelve automáticamente cuando la clave tiene exactamente una bandeja; si no, pasa este o inbox. Llama a inbox_list para obtener los IDs de bandeja disponibles. |
inbox | string | opcional | Dirección de correo de la bandeja a usar, como alternativa práctica a inbox_id. Opcional; se ignora si se indica inbox_id. |
message_id | string | opcional | ID de mensaje del proveedor del mensaje original (action 'reply' o 'forward'), de un list, read o search previo. |
message_ids | array[string] | opcional | Hasta 50 ID de mensaje para reenviar a los mismos destinatarios en una sola llamada (action 'forward'), en lugar de message_id. Se reenvían de uno en uno y el resultado informa de cada uno por separado, de modo que un fallo a mitad de camino sigue indicando cuáles se enviaron. Los duplicados se eliminan. |
to | array[string] | opcional | Direcciones de correo de los destinatarios (obligatorio para 'send' y 'forward'). Máx. 50. |
subject | string | opcional | Asunto del correo (action 'send'). Máx. 998 caracteres. En reply/forward se deriva del original. |
body | string | opcional | Cuerpo de texto. Para 'reply' es tu respuesta; para 'forward' una nota opcional antepuesta al mensaje reenviado. |
cc | array[string] | opcional | Destinatarios en copia (send, forward). Por defecto []. |
bcc | array[string] | opcional | Destinatarios en copia oculta (send, forward). Por defecto []. |
html_body | string | opcional | Versión HTML del cuerpo (multipart/alternative). Quien llama es responsable de un HTML seguro. |
reply_to | string | opcional | Dirección de la cabecera Reply-To (action 'send'). |
reply_all | boolean | opcional | Responder a todos los destinatarios originales, To + Cc (action 'reply'). Por defecto false. |
include_attachments | boolean | opcional | Conservar los adjuntos del mensaje original (action 'forward'). Por defecto true; ponlo en false para dejar fuera los archivos adjuntos. Las imágenes incrustadas en el cuerpo siempre se conservan. |
as_attachment | boolean | opcional | Reenviar el mensaje original completo como una única parte message/rfc822 (.eml), cabeceras incluidas, en lugar de retransmitir su cuerpo en línea (action 'forward'). Por defecto false. |
include_signature | boolean | opcional | Si añadir la firma configurada de la bandeja a este mensaje. Por defecto true; ponlo en false para enviar este único mensaje sin la firma. |
attachments | array | opcional | Archivos adjuntos. Cada elemento es o bien bytes en línea { filename, mime_type, data (base64) } o una referencia a un archivo que ya está en esta bandeja { source_message_id, attachment_index }, que el servidor copia sin que los bytes pasen por el modelo. Máx. 20 elementos, 10 MB en total. |
idempotency_key | string | opcional | Clave opaca opcional (1–200 caracteres) para una única solicitud saliente lógica. Reutilízala solo para reintentar exactamente la misma acción con los mismos argumentos en un plazo de 24 horas; una reutilización con argumentos distintos se rechaza. |
folder_listread:emailLista todas las carpetas de una bandeja, o todas las etiquetas en Gmail. Cada entrada incluye su ID nativo del proveedor, nombre visible, tipo ('folder' en los proveedores jerárquicos, 'label' en Gmail) y los recuentos de mensajes, totales y sin leer. Usa los IDs devueltos como argumento folder al listar correo con email_read y como destino de los movimientos de email_organize. Solo lectura, sin argumento action: lo único que hay que indicar es qué bandeja consultar. Necesita read:email.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
inbox_id | string (uuid) | opcional | UUID de la bandeja cuyas carpetas se listan. Opcional: se resuelve automáticamente cuando la clave tiene exactamente una bandeja; si no, pasa este o inbox. Llama a inbox_list para obtener los IDs de bandeja disponibles. |
inbox | string | opcional | Dirección de correo de la bandeja a usar, como alternativa práctica a inbox_id. Opcional; se ignora si se indica inbox_id. |
foldermanage:foldersCrea, renombra y elimina carpetas del buzón o etiquetas de Gmail. Los parámetros usan 'folder' por compatibilidad entre proveedores, pero Gmail gestiona etiquetas (type: 'label'), no carpetas. Define action: 'create' (name), 'rename' (folder_id, new_name) o 'delete' (folder_id, irreversible; en Gmail quita la etiqueta de todos los mensajes que la lleven, y en otros proveedores los mensajes que contenga pueden perderse). Leer las carpetas que existen es la herramienta aparte de solo lectura folder_list, que además es de donde salen los folder_id que toman estas acciones. Todas las acciones necesitan manage:folders, y la herramienta se marca como destructiva ante tu cliente MCP.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
action | enum | obligatorio | Qué operación realizar: "create", "rename" o "delete". Determina qué otros argumentos se aplican. Listar carpetas es la herramienta aparte folder_list. |
inbox_id | string (uuid) | opcional | UUID de la bandeja cuyas carpetas se gestionan. Opcional: se resuelve automáticamente cuando la clave tiene exactamente una bandeja; si no, pasa este o inbox. Llama a inbox_list para obtener los IDs de bandeja disponibles. |
inbox | string | opcional | Dirección de correo de la bandeja a usar, como alternativa práctica a inbox_id. Opcional; se ignora si se indica inbox_id. |
name | string | opcional | Nombre de la nueva carpeta o etiqueta (action 'create'). 1–255 caracteres. |
folder_id | string | opcional | ID de carpeta/etiqueta nativo del proveedor (action 'rename' o 'delete'), obtenido de folder_list. |
new_name | string | opcional | Nuevo nombre visible (action 'rename'). 1–255 caracteres. |
draft_listmanage:draftsDevuelve los borradores guardados en la carpeta Drafts de la bandeja, cada uno con su draft_id, asunto, destinatarios y fecha de creación. Pasa el draft_id a la herramienta draft para actualizar, enviar o eliminar uno. Solo lectura, sin argumento action. Necesita manage:drafts.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
inbox_id | string (uuid) | opcional | UUID de la bandeja que contiene los borradores. Opcional: se resuelve automáticamente cuando la clave tiene exactamente una bandeja; si no, pasa este o inbox. Llama a inbox_list para obtener los IDs de bandeja disponibles. |
inbox | string | opcional | Dirección de correo de la bandeja a usar, como alternativa práctica a inbox_id. Opcional; se ignora si se indica inbox_id. |
limit | integer | opcional | Número máximo de borradores a devolver. Por defecto 20, máx. 50. |
draftmanage:draftsread:emailsend:emailCrea, actualiza, envía y elimina borradores sin enviar en la carpeta Drafts de la bandeja. Define action: 'create' (subject/body obligatorios, opcionalmente to/cc/bcc/html_body), 'reply' (message_id/body obligatorios, opcionalmente reply_all; crea una respuesta sin enviar en la conversación de origen), 'update' (draft_id más los campos a sobrescribir), 'send' (draft_id, elimina el borrador y lo envía, irreversible) o 'delete' (draft_id). Leer los borradores que existen es la herramienta aparte de solo lectura draft_list. La firma de la bandeja se incrusta cuando el borrador se crea o se actualiza, así que ya está presente en la carpeta Drafts y no se vuelve a añadir al enviar; pasa include_signature: false para crear un borrador sin ella. En bandejas basadas en IMAP un draft_id cambia en cada actualización, así que usa siempre el más reciente; Gmail y Outlook mantienen un draft_id estable. 'reply' necesita además read:email y nunca envía correo, 'send' necesita send:email para que una clave limitada a borradores no pueda usar un borrador para saltarse el consentimiento de envío, y el resto necesitan manage:drafts. Los borradores admiten adjuntos igual que email_compose: en base64, o un archivo que ya está en esta bandeja mediante source_message_id. 'update' añade archivos y conserva los que el borrador ya tiene.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
action | enum | obligatorio | Qué operación realizar: "create", "reply", "update", "send" o "delete". Determina qué otros argumentos se aplican. Listar borradores es la herramienta aparte draft_list. |
inbox_id | string (uuid) | opcional | UUID de la bandeja que contiene los borradores. Opcional: se resuelve automáticamente cuando la clave tiene exactamente una bandeja; si no, pasa este o inbox. Llama a inbox_list para obtener los IDs de bandeja disponibles. |
inbox | string | opcional | Dirección de correo de la bandeja a usar, como alternativa práctica a inbox_id. Opcional; se ignora si se indica inbox_id. |
draft_id | string | opcional | ID de borrador del proveedor (action 'update' o 'send'), de la acción create o update más reciente, o de draft_list. En bandejas IMAP cambia tras cada actualización, así que usa siempre el más reciente. |
message_id | string | opcional | ID del mensaje de origen para la acción 'reply', obtenido de una acción list, read o search previa. |
reply_all | boolean | opcional | Para la acción 'reply': false por defecto, respondiendo solo al remitente. Ponlo en true para incluir los destinatarios originales de To y Cc. |
subject | string | opcional | Asunto del borrador (action 'create'/'update'). |
body | string | opcional | Cuerpo de texto del borrador (action 'create'/'update'). |
to | array[string] | opcional | Direcciones de destinatarios (action 'create'/'update'). Por defecto []. |
cc | array[string] | opcional | Destinatarios en copia (action 'create'/'update'). Por defecto []. |
bcc | array[string] | opcional | Destinatarios en copia oculta (action 'create'/'update'). Por defecto []. |
html_body | string | opcional | Cuerpo HTML opcional (action 'create'/'update'). |
include_signature | boolean | opcional | Si incrustar la firma configurada de la bandeja en el borrador (action 'create'/'update'). Por defecto true; ponlo en false para guardar un borrador sin la firma. |
idempotency_key | string | opcional | Clave opaca opcional (1–200 caracteres) para un único envío de borrador. Reutilízala solo para reintentar exactamente el mismo envío en un plazo de 24 horas; una reutilización con argumentos distintos se rechaza. |
schedule_listschedule:emailLista los envíos programados pendientes del espacio de trabajo, los más próximos primero, opcionalmente filtrados por una bandeja. Se devuelve todo lo que esté en estado 'pending' o 'sending'. Pasa el id devuelto a la herramienta schedule (action 'cancel') para detener un envío antes de que se despache. Solo lectura, sin argumento action. Necesita schedule:email.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
inbox_id | string (uuid) | opcional | UUID de la bandeja por la que filtrar. Opcional; omítelo para listar los envíos programados de todas las bandejas de la clave. |
limit | integer | opcional | Número máximo de resultados. Por defecto 20, máx. 100. |
scheduleschedule:emailPrograma correo para entrega futura mediante una cola en el servidor, o cancela un envío ya encolado. Define action: 'create' (to/subject/body más una marca de tiempo send_at en ISO 8601 con zona horaria; los destinatarios y el cuerpo se validan de inmediato, y los envíos inválidos no se encolan) o 'cancel' (id, solo se pueden cancelar los envíos que sigan 'pending'). Leer lo que hay en cola es la herramienta aparte de solo lectura schedule_list, que además es de donde sale el id que toma 'cancel'. Usa email_compose para enviar ahora, y esta solo cuando se indique una hora posterior. El despachador se ejecuta cada minuto, por lo que la entrega puede ocurrir hasta 60 segundos después de send_at. Todas las acciones necesitan schedule:email.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
action | enum | obligatorio | Qué operación realizar: "create" o "cancel". Determina qué otros argumentos se aplican. Listar los envíos en cola es la herramienta aparte schedule_list. |
inbox_id | string (uuid) | opcional | UUID de la bandeja desde la que enviar (action 'create'). Opcional: se resuelve automáticamente cuando la clave tiene exactamente una bandeja; si no, pasa este o inbox. Llama a inbox_list para obtener los IDs de bandeja disponibles. |
inbox | string | opcional | Dirección de correo de la bandeja a usar, como alternativa práctica a inbox_id. Opcional; se ignora si se indica inbox_id. |
to | array[string] | opcional | Direcciones de correo de los destinatarios (action 'create'). Máx. 50. |
subject | string | opcional | Asunto del correo (action 'create'). Máx. 998 caracteres. |
body | string | opcional | Cuerpo de texto del correo (action 'create'). |
send_at | string (ISO 8601) | opcional | Fecha-hora ISO 8601 con zona horaria a la que enviar (action 'create'). Debe estar en el futuro, p. ej. "2026-06-02T09:00:00Z". |
cc | array[string] | opcional | Destinatarios en copia (action 'create'). Por defecto []. |
bcc | array[string] | opcional | Destinatarios en copia oculta (action 'create'). Por defecto []. |
html_body | string | opcional | Versión HTML opcional del cuerpo (action 'create'). |
reply_to | string | opcional | Dirección opcional de la cabecera Reply-To (action 'create'). |
attachments | array | opcional | Archivos adjuntos (action 'create'). Solo bytes en línea: { filename, mime_type, data (base64) }. La forma por referencia source_message_id está en email_compose, no aquí. Máx. 20 elementos, 10 MB en total. |
id | string (uuid) | opcional | UUID del envío programado a cancelar (action 'cancel'), tal como lo devolvió 'create' o schedule_list. |
idempotency_key | string | opcional | Clave opaca opcional para la creación de un único envío programado. Reutilízala solo para reintentar exactamente la misma solicitud de creación en un plazo de 24 horas. |
signature_getread:emailLee la firma configurada de una bandeja: su texto plano y su HTML, si está habilitada, el modo de respuesta/reenvío, su origen ('manual', 'gmail_import' o null cuando no hay ninguna) y sender_name, el nombre que los destinatarios ven en la cabecera From. La firma se añade del lado del servidor en cada envío, respuesta, reenvío, borrador y mensaje programado. Solo lectura, sin argumento action. Necesita read:email.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
inbox_id | string (uuid) | opcional | UUID de la bandeja cuya firma se va a leer. Opcional: se resuelve automáticamente cuando la clave tiene exactamente una bandeja; si no, pasa este o inbox. Llama a inbox_list para obtener los IDs de bandeja disponibles. |
inbox | string | opcional | Dirección de correo de la bandeja a usar, como alternativa práctica a inbox_id. Opcional; se ignora si se indica inbox_id. |
signature_setsend:emailEscribe la firma de una bandeja, que se añade del lado del servidor en cada envío, respuesta, reenvío, borrador y mensaje programado. Pasa signature_text, signature_html o ambos, y opcionalmente signature_enabled, signature_reply_mode y sender_name; pasa una cadena vacía en ambos cuerpos para borrarla. Las firmas admiten HTML enriquecido: negrita, cursiva, encabezados, listas, colores, alineación, enlaces e imágenes/logotipos alojados referenciados como URLs https, de modo que un agente puede establecer una firma con formato completo pasando signature_html. El mismo editor enriquecido está disponible en el panel. Establecer una firma marca su origen como 'manual', lo que anula de forma permanente la importación automática de Gmail para esa bandeja. sender_name define el nombre que los destinatarios ven en la cabecera From, p. ej. "Acme Support", mostrado antes de la dirección misma, y puede establecerse por sí solo sin tocar la firma. Leer la firma actual es la herramienta aparte signature_get. No hay argumento action. Necesita send:email.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
inbox_id | string (uuid) | opcional | UUID de la bandeja cuya firma se va a establecer. Opcional: se resuelve automáticamente cuando la clave tiene exactamente una bandeja; si no, pasa este o inbox. Llama a inbox_list para obtener los IDs de bandeja disponibles. |
inbox | string | opcional | Dirección de correo de la bandeja a usar, como alternativa práctica a inbox_id. Opcional; se ignora si se indica inbox_id. |
signature_text | string | opcional | Cuerpo de la firma en texto plano. Omítelo para dejarlo sin cambios; pasa una cadena vacía para borrarlo. Si solo se indica el texto, al enviar se deriva automáticamente una versión HTML. |
signature_html | string | opcional | Cuerpo opcional de la firma en HTML enriquecido. Admite formato (negrita, cursiva, subrayado, encabezados, listas, colores, alineación, enlaces) e imágenes alojadas mediante etiquetas HTML img cuyo src sea una URL https (sin base64 ni CID); se sanea al guardar. Omítelo para dejarlo sin cambios; pasa una cadena vacía para borrarlo. |
signature_enabled | boolean | opcional | Si la firma se añade al correo saliente. Por defecto true; ponlo en false para dejar de añadirla sin borrar el texto. |
signature_reply_mode | enum | opcional | Cuándo incluir la firma en respuestas y reenvíos: "always" (cada respuesta/reenvío), "first_only" (por defecto, solo el primer mensaje de un hilo, evitando firmar por duplicado) o "never". |
sender_name | string | opcional | Nombre que los destinatarios ven en la cabecera From, p. ej. 'Acme Support', que aparece antes de la dirección misma. Omítelo para dejarlo sin cambios; pasa una cadena vacía para borrarlo. Los espacios se compactan, los caracteres de control y los corchetes angulares se eliminan, y el resultado puede tener como máximo 100 caracteres. Establecer solo sender_name no cambia la firma ni su origen. |
automation_readmanage:automationsInspecciona las reglas de triaje programadas y desatendidas y lo que han estado haciendo. Una regla es una búsqueda guardada más una acción fija, reevaluada con una cadencia fija y sin ningún modelo de por medio: el correo se compara, nunca se interpreta. Define action: 'list' (todas las reglas), 'get' (automation_id, una regla completa), 'runs' (contadores de las ejecuciones recientes de una regla) o 'preview' (una simulación que informa de lo que coincide con el filtro ahora mismo, no aplica nada, no envía nada y no reclama nada en el registro de deduplicación). Nada de esto cambia una regla ni toca el buzón; crear y modificar reglas es la herramienta aparte automation. Todas las acciones requieren manage:automations.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
action | enum | obligatorio | Operación a realizar: «list», «get», «runs» o «preview». Determina qué otros argumentos se aplican. Las cuatro son de solo lectura. |
automation_id | string (uuid) | opcional | UUID de la regla a leer, tal como lo devuelven la acción 'create' de automation o 'list'. Obligatorio para get y runs. Opcional en preview: pásalo para simular una regla guardada en lugar de un filtro improvisado. |
inbox_id | string (uuid) | opcional | UUID del buzón sobre el que previsualizar. Opcional cuando la clave tiene exactamente un buzón; si no, pasa este o inbox. |
inbox | string | opcional | Dirección de correo del buzón, como alternativa cómoda a inbox_id. Opcional; se ignora si se indica inbox_id. |
filter | object | opcional | La búsqueda a simular (action 'preview'), con los mismos criterios estructurados que acepta la acción 'search' de email_read: from, to, cc, subject, body, text, unread, has_attachment, flagged, since, before. Se exige al menos un criterio, porque un filtro vacío coincidiría con todo tu buzón. |
max_messages_per_run | integer | opcional | Cuántas coincidencias informa una previsualización: de 1 a 200, 25 por defecto. Refleja el límite que aplicaría una ejecución real, así que la previsualización muestra el mismo radio de impacto que tendría la regla. |
limit | integer | opcional | Para la acción 'runs': cuántas ejecuciones devolver, de la más reciente a la más antigua. Por defecto 20, máximo 100. |
automationmanage:automationsCrea, modifica, activa, desactiva y elimina reglas de triaje programadas y desatendidas. Una regla es una búsqueda guardada más una acción fija, reevaluada con una cadencia fija y sin ningún modelo de por medio: el correo se compara, nunca se interpreta. Define action: 'create' (name, filter, rule_action e interval_minutes; la regla siempre se crea desactivada), 'update' (automation_id más los campos a cambiar), 'enable', 'disable' o 'delete' (automation_id; se conserva el historial de ejecuciones). Listar reglas, leer una completa, ver el historial de ejecuciones y simular un filtro es la herramienta aparte de solo lectura automation_read. Las acciones de regla disponibles son move, label (una etiqueta de Gmail, una categoría de Outlook o una palabra clave IMAP), mark_read, forward y draft_reply. Eliminar correo no está disponible para una automatización. Un reenvío siempre queda retenido para su aprobación humana, diga lo que diga el ajuste de aprobación del buzón, y draft_reply solo escribe un borrador. Haz una previsualización antes de activarla. Todas las acciones requieren manage:automations.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
action | enum | obligatorio | Operación a realizar: «create», «update», «enable», «disable» o «delete». Determina qué otros argumentos se aplican. Leer reglas y previsualizar filtros es la herramienta aparte automation_read. |
automation_id | string (uuid) | opcional | UUID de la regla sobre la que actuar, tal como lo devuelven 'create' o la acción 'list' de automation_read. Obligatorio para update, enable, disable y delete. |
inbox_id | string (uuid) | opcional | UUID del buzón que vigila la regla (action 'create'). Opcional cuando la clave tiene exactamente un buzón; si no, pasa este o inbox. |
inbox | string | opcional | Dirección de correo del buzón, como alternativa cómoda a inbox_id. Opcional; se ignora si se indica inbox_id. |
name | string | opcional | Nombre legible de la regla, de 1 a 80 caracteres. Obligatorio en 'create'. |
filter | object | opcional | La búsqueda guardada, con los mismos criterios estructurados que acepta la acción 'search' de email_read: from, to, cc, subject, body, text, unread, has_attachment, flagged, since, before. Se exige al menos un criterio, porque un filtro vacío coincidiría con todo tu buzón. Aquí no se aceptan consultas nativas del proveedor en texto libre: una regla se reejecuta sin supervisión durante meses, y una cadena en bruto es un dialecto que nadie valida. |
rule_action | object | opcional | La única acción fija que se aplica a cada coincidencia, como objeto etiquetado con un type de move (más folder), label (más label; se escribe como etiqueta de Gmail, categoría de Outlook o palabra clave IMAP), mark_read, forward (más to y un note opcional) o draft_reply (más template). Se llama rule_action porque action ya selecciona la operación. No existe ninguna acción de borrado, y si se pide se rechaza en lugar de ignorarse. Un reenvío siempre queda retenido para su aprobación, y draft_reply solo escribe un borrador. Una plantilla sustituye únicamente {{sender_name}}, {{sender_email}}, {{subject}} y {{date}}, con escapado HTML; todo lo demás es texto literal y el cuerpo de los mensajes nunca se interpola. |
interval_minutes | enum | opcional | Minutos entre ejecuciones, dentro de la escala fija 15, 30, 60, 180, 360, 720 o 1440. Obligatorio en 'create'. Una escala en vez de un entero libre, para que una regla de un minuto no machaque al proveedor hasta provocar límites de tasa. |
max_messages_per_run | integer | opcional | Cuántos mensajes coincidentes puede tratar una ejecución: de 1 a 200, 25 por defecto. Es el radio de impacto: limita cuánto correo puede tocar un filtro equivocado antes de que una persona lea el registro de la ejecución. |
contact_searchmanage:contactsEncuentra correspondientes por nombre o correo con un escaneo en vivo de tu buzón: no hay una lista de contactos almacenada. Cada llamada escanea una ventana reciente de correo coincidente y devuelve las personas que coinciden, ordenadas por contacto más reciente, cada una con nombre visible, correo, recuento de mensajes coincidentes y marca de tiempo del último contacto. Los recuentos reflejan los mensajes coincidentes en esa ventana, no todo tu historial, y nada se almacena entre llamadas.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
query | string | obligatorio | Fragmento de nombre o correo, coincidido sin distinguir mayúsculas/minúsculas con el nombre visible y la dirección. Al menos 1 carácter. |
inbox_id | string (uuid) | opcional | Opcional. Restringe el escaneo en vivo a una bandeja. Omítelo para escanear las bandejas a las que la clave tiene acceso (un número acotado). |
inbox | string | opcional | Dirección de correo de la bandeja a la que restringir, como alternativa práctica a inbox_id. Opcional; se ignora si se indica inbox_id. |
limit | integer | opcional | Número máximo de contactos a devolver. Por defecto 20, máx. 50. |
Una automatización toca tu buzón de forma programada y sin nadie mirando. Esa es una categoría de riesgo distinta a la de un agente con el que estás conversando, así que las garantías siguientes las impone el servidor en lugar de dejarlas en manos de la regla que escribas.
Una regla es una consulta guardada más una acción fija. Al ejecutarse, el servidor lanza esa consulta contra tu buzón y aplica esa acción a las coincidencias. Nada lee tu correo y luego decide qué hacer con él. El contenido del correo se compara, nunca se interpreta como una instrucción, de modo que la inyección de prompts está estructuralmente ausente de la vía desatendida, no simplemente filtrada, puntuada o mitigada. No hay nada en el circuito con lo que un texto inyectado pueda hablar.
Conviene decirlo con claridad, porque la forma peligrosa en esta categoría es un agente que lee correo entrante no confiable y luego actúa sobre él sin ninguna persona presente. Incidentes públicos como EchoLeak y el servidor MCP de Postmark con puerta trasera han dejado a los compradores razonablemente recelosos de justo eso. En una sesión interactiva sí hay un modelo que lee tu correo, que es la razón de ser del producto, y allí hay una persona presente y el contenido va marcado como dato no confiable. La vía programada es la que se ejecuta a solas, y en ella no hay ningún modelo.
Eliminar no es una acción disponible, por diseño. Mover, etiquetar, marcar como leído, reenviar y redactar un borrador de respuesta son el conjunto completo. La eliminación es la única acción que una regla fallida vuelve irreversible, así que queda excluida en la capa de validación, donde una acción que apenas menciona el borrado se rechaza en lugar de ignorarse en silencio.
Un reenvío de una automatización se encola en la cola de aprobación y solo sale de tu buzón cuando un miembro del espacio de trabajo lo aprueba, con independencia del ajuste de aprobación de envíos de cada buzón. El número de destinatarios está limitado por regla. Una regla desatendida no puede sacar correo de tu organización por su cuenta.
Una regla draft_reply escribe un borrador sin enviar dentro de la conversación original y ahí se detiene. Nada se envía sin supervisión, en ningún proveedor y bajo ninguna configuración.
Una plantilla de respuesta se guarda literalmente y nunca se evalúa. Solo se sustituyen {{sender_name}}, {{sender_email}}, {{subject}} y {{date}}, cada uno con escapado HTML. El cuerpo del mensaje nunca se interpola, y no hay ninguna sintaxis de expresiones que evaluar, así que nada de lo que llegue a tu buzón puede convertir una plantilla en un cálculo.
Cada ejecución registra qué coincidió con el filtro, qué le ocurrió a cada mensaje y qué quedó encolado para aprobación, junto con los contadores de coincidencias, procesados, correctos, fallidos y omitidos. Las acciones reversibles guardan el estado necesario para deshacerlas. El historial de ejecuciones sobrevive a la regla a la que pertenece, porque es el registro de lo que se hizo con tu buzón. Léelo con la acción 'runs' o en el panel.
Cada regla se ejecuta como la clave de API que la creó. Nunca puede superar los ámbitos ni el acceso a buzones que esa clave ya tiene, cada acción que realiza se contabiliza, se limita por tasa y se escribe en el registro de auditoría igual que una llamada interactiva, y revocar la clave detiene la regla.
Tras 5 ejecuciones fallidas consecutivas, la regla se desactiva automáticamente y se registra el motivo. Una regla apuntada a un buzón que ha dejado de responder se detiene, en lugar de reintentarlo cada 15 minutos para siempre.
Cada regla lleva un número máximo de mensajes sobre los que puede actuar una sola ejecución, de 1 a 200 y 25 por defecto, de modo que un filtro más amplio de lo que pretendías toca como mucho esa cantidad de mensajes antes de que veas el registro. Además, toda regla se crea desactivada, y la previsualización es una simulación que muestra lo que coincide con el filtro ahora mismo sin aplicar nada.
Los fallos de autenticación, alcance y límite de tasa devuelven un objeto error JSON-RPC con un código numérico. Los fallos de ejecución de herramientas (bandeja no encontrada, error del proveedor, asignación mensual de acciones de correo agotada, etc.) devuelven un result normal con isError: true y un mensaje legible en content[0].text.
| Código | Tipo | Cuándo ocurre | Reintentable |
|---|---|---|---|
-32001 | JSON-RPC error | Clave de API ausente, malformada, revocada o caducada (HTTP 401). | No |
-32004 | JSON-RPC error | La clave es válida pero carece de un alcance que la acción de la herramienta requiere (HTTP 403). data.error_code es "insufficient_scope" y data.required_scopes enumera lo que autorizaría la llamada; la cabecera WWW-Authenticate lo repite para que los clientes OAuth puedan ampliar el acceso. | No |
-32601 | JSON-RPC error | Método JSON-RPC desconocido (p. ej. llamar a un método distinto de initialize, tools/list, tools/call) | No |
-32602 | JSON-RPC error | Nombre de herramienta desconocido, o parámetro ausente / inválido en tools/call | No |
-32003 | JSON-RPC error | Límite de tasa por clave o por espacio de trabajo superado (HTTP 429). data.error_code es siempre "rate_limit_exceeded". Espera data.retry_after segundos, o consulta la cabecera Retry-After, antes de reintentar. | |
isError: true | Tool result | La herramienta se ejecutó pero encontró un error (bandeja no encontrada, mensaje no encontrado, fallo de autenticación del proveedor, destinatario inválido, adjunto demasiado grande, 5xx del proveedor). La descripción del error está en content[0].text. | No |
isError: true | Tool result | El espacio de trabajo ha agotado su asignación mensual de acciones de correo: 150 por mes natural en Free, sin contar los primeros 7 días tras el registro; Personal, Pro y Team no tienen tope mensual, sujeto a uso justo. Se devuelve como un resultado de herramienta normal con isError: true, no como un error JSON-RPC. content[0].text empieza con el recuento y la fecha de reinicio (el día 1 del mes siguiente, UTC), y _meta["com.mcpemails/usage_limit"] lleva error_code "usage_limit_reached" y reset_at. inbox_list sigue funcionando. Reintentar no puede funcionar antes de reset_at. | No |
// Tool execution error: inbox not found
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"content": [{ "type": "text", "text": "Inbox not found or not accessible." }],
"isError": true
}
}
// Rate limit: JSON-RPC error object with data (HTTP 429). Safe to retry
// after retry_after seconds.
{
"jsonrpc": "2.0",
"id": 3,
"error": {
"code": -32003,
"message": "Rate limit exceeded",
"data": {
"error_code": "rate_limit_exceeded",
"window": "per_minute",
"limit": 100,
"used": 100,
"retry_after": 34
}
}
}
// Monthly allowance reached (Free: 150 email actions a month): a normal tool
// result (HTTP 200) with isError: true. NOT a JSON-RPC error, and NOT
// retryable until reset_at. The text opens with the numbers and the reset date.
{
"jsonrpc": "2.0",
"id": 4,
"result": {
"content": [{
"type": "text",
"text": "150 of 150 email actions used this month on the Free plan. The counter resets on 2026-10-01. Until then every email action in this workspace will be refused, so retrying will not help. ..."
}],
"isError": true,
"_meta": {
"com.mcpemails/usage_limit": {
"error_code": "usage_limit_reached",
"allowance": 150,
"reset_at": "2026-10-01T00:00:00.000Z",
"dashboard_url": "https://mcpemails.com/dashboard/usage",
"upgrade_url": "https://mcpemails.com/pricing?from=usage_cap"
}
}
}
}Aplicados por clave de API independientemente del plan. Cuando se superan, el servidor devuelve HTTP 429 con el código de error JSON-RPC -32003, data.error_code: "rate_limit_exceeded" y un campo data.retry_after (segundos). Respeta ese valor antes de reintentar: es una pausa breve y reintentable.
Un límite de ráfaga de uso justo por espacio de trabajo, agregado entre todas tus claves de API. Cuando se supera, las llamadas devuelven el código de error -32003 con data.error_code: "rate_limit_exceeded", data.window: "per_minute" y una cuenta atrás data.retry_after (segundos). Personal, Pro y Team elevan el tope.
Un espacio de trabajo Free dispone de 150 acciones de correo por mes natural (UTC). Durante los primeros 7 días tras el registro no se cuenta nada, y inbox_list y el panel no cuentan nunca. Personal, Pro y Team no tienen tope mensual, sujeto a uso justo. Alcanzar la asignación no es un error JSON-RPC: la llamada devuelve HTTP 200 con un resultado de herramienta normal que lleva isError: true. El texto de content[0].text empieza con el recuento y la fecha de reinicio, el día 1 del mes siguiente, e indica que reintentar no sirve; _meta["com.mcpemails/usage_limit"] lleva error_code: "usage_limit_reached" y reset_at. No hay retry_after. Cualquier otra acción de correo se rechaza hasta el reinicio, las automatizaciones desatendidas se pausan y se reanudan solas el día 1, y el propietario del espacio de trabajo recibe un correo al 80% y al 100%. Trátalo como una parada, no como un retroceso.
Para errores rate_limit_exceeded, espera data.retry_after segundos antes de reintentar. Usa retroceso exponencial para provider_error. No reintentes automáticamente los envíos de email_compose ante provider_error, ya que el mensaje puede haber sido aceptado por el proveedor. Nunca reintentes usage_limit_reached: solo se libera en reset_at.
Empieza en el plan Gratis: una bandeja conectada, para siempre y sin tarjeta. Personal conecta tres buzones, Pro conecta todos los que lleva tu negocio, y Team añade miembros, roles y un espacio de trabajo por cliente.