Para agentes de IA
Servidor MCP de SendHQ
Dé a un agente de IA control total y seguro de un espacio de trabajo de SendHQ: enviar y recibir correo, verificar dominios, publicar plantillas e investigar la entregabilidad mediante 59 herramientas con tipado estricto. Escrito primero para agentes; las personas también son bienvenidas.
curl -fsSL https://downloads.sendhq.cc/install.sh | sh
claude mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcpQué es este servidor
El servidor MCP de SendHQ permite que un agente de IA opere un espacio de trabajo de SendHQ mediante el Model Context Protocol: enviar correo (individual, por lotes, con plantilla, respuestas, adjuntos, reintentos idempotentes), leer y buscar el correo enviado y recibido (asuntos, cuerpos y nombres de adjuntos) y sus eventos de entrega, organizar el correo en etiquetas con reglas de archivado automático, gestionar borradores y adjuntos privados, crear y publicar plantillas alojadas, agregar y verificar dominios y su DNS, configurar la recepción de correo entrante y las direcciones de entrada, inspeccionar la entregabilidad, los rebotes, las quejas y las supresiones, y consultar el uso de la cuenta, el estado de facturación, las analíticas y los metadatos de las claves de API.
Es un servidor stdio local integrado en el binario de la CLI sendhq. Su cliente MCP inicia sendhq mcp como proceso hijo y se comunica mediante JSON-RPC por stdin/stdout. Cada llamada a una herramienta se convierte en una solicitud documentada a la API REST de SendHQ en https://sendhq.cc/api/v1, autenticada con la clave de API de su espacio de trabajo, de modo que el servidor MCP tiene exactamente los permisos de esa clave y ninguno más.
- 59 herramientas en 8 grupos, generadas a partir de un único catálogo que también se publica como tools.json.
- JSON Schemas estrictos: los argumentos desconocidos, los tipos incorrectos y los campos obligatorios ausentes se rechazan localmente antes de que nada llegue a SendHQ.
- Errores estructurados con un
codeestable, elstatusHTTP, unaexplanation, unremedyconcreto y la indicación de si reintentar puede ayudar. - Toda herramienta que envía correo real o destruye datos lo indica en las primeras palabras de su descripción y lleva anotaciones de seguridad de MCP.
- El modo
--read-onlyoculta todas las herramientas que envían o modifican datos. - No se registra nada. stdout transporta solo mensajes del protocolo; la clave de API y el contenido de los mensajes nunca llegan a un log.
https://sendhq.cc/api/mcp (consulta de precios y documentación, sin acceso a la cuenta). El servidor de esta página es el completo, con alcance de cuenta; se ejecuta localmente o como el conector alojado que se describe a continuación.Usar SendHQ en Claude y ChatGPT
Sin instalación: SendHQ también ejecuta este servidor como conector alojado en https://mcp.sendhq.cc/mcp, con las mismas herramientas. Usted inicia sesión con su cuenta de SendHQ en lugar de pegar una clave.
Claude
- Abra Settings → Connectors y busque SendHQ en el directorio, o elija Add custom connector y pegue
https://mcp.sendhq.cc/mcp. - Haga clic en Connect, inicie sesión en SendHQ, revise el acceso y haga clic en Allow.
- Pídale a Claude que revise su bandeja de entrada, que envíe un correo desde su dominio verificado o que le explique un rebote.
ChatGPT
- Open Settings → Security and login and turn on Developer mode.
- Go to chatgpt.com/plugins, click Create MCP app, name it SendHQ and enter
https://mcp.sendhq.cc/mcp. - Sign in to SendHQ and click Allow, then pick SendHQ from the tools menu in a new chat.
Muse by Meta
In Muse, open Connectors and search for SendHQ. Click Connect, sign in to SendHQ and click Allow.
Aprobación y desconexión
- The
request_featuretool sends a feature request to the SendHQ team with your account details, so we can follow up by email. - Las herramientas que envían correo real o eliminan datos están etiquetadas como tales. Si el asistente le pregunta primero o no se configura por herramienta en el propio asistente: en Claude, elija Needs approval para esas herramientas en Settings → Connectors → SendHQ.
- El conector obtiene su propia clave de API, con el nombre del asistente (por ejemplo, “Claude (AI connector)”). Elimínela en API Keys para desconectarlo de inmediato.
- No puede crear ni revocar claves de API ni modificar la facturación. Los adjuntos se envían y se devuelven en base64; no hay acceso a archivos locales.
- Los espacios de trabajo sin pago (prueba de integración) solo pueden entregar al correo de la cuenta o a una dirección del simulador de AWS SES.
Preguntas: postmaster@sendhq.cc. Privacidad: sendhq.cc/privacy.
Instalación
Instale el binario sendhq (Linux, macOS y Windows en x86-64 y arm64). El instalador verifica el checksum de la versión y coloca el binario en ~/.local/bin de forma predeterminada.
curl -fsSL https://downloads.sendhq.cc/install.sh | shirm https://downloads.sendhq.cc/install.ps1 | iexsendhq version
SENDHQ_API_KEY=re_your_key sendhq doctorCree una clave de API en el panel, en https://sendhq.cc/app#/keys. El servidor MCP no puede crear claves. El único comando que ejecuta el servidor es:
SENDHQ_API_KEY=re_your_key sendhq mcpNormalmente nunca lo ejecuta a mano: lo inicia el cliente MCP. Si se ejecuta en una terminal, espera JSON-RPC por stdin.
Configurar su cliente
Claude Code
claude mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcp
# read-only variant
claude mcp add sendhq-readonly --env SENDHQ_API_KEY=re_your_key -- sendhq mcp --read-onlyAgregue --scope user para que esté disponible en todos los proyectos, o --scope project para escribirlo en el .mcp.json del proyecto. En un .mcp.json compartido, haga referencia a la clave desde el entorno en lugar de confirmarla en el repositorio; Claude Code expande ${VAR} en .mcp.json.
{
"mcpServers": {
"sendhq": {
"command": "sendhq",
"args": [
"mcp"
],
"env": {
"SENDHQ_API_KEY": "${SENDHQ_API_KEY}"
}
}
}
}OpenAI Codex
[mcp_servers.sendhq]
command = "sendhq"
args = ["mcp"]
env = { SENDHQ_API_KEY = "re_your_key" }O desde la línea de comandos: codex mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcp.
Claude Desktop
Edite claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\) y reinicie la aplicación. Las aplicaciones de escritorio no heredan el PATH de su shell, así que use la ruta absoluta del binario (which sendhq).
{
"mcpServers": {
"sendhq": {
"command": "/Users/you/.local/bin/sendhq",
"args": [
"mcp"
],
"env": {
"SENDHQ_API_KEY": "re_your_key"
}
}
}
}Cualquier otro cliente MCP
Configure un servidor stdio con el comando sendhq, los argumentos ["mcp"] (opcionalmente "--read-only") y las variables de entorno que se indican a continuación. El servidor admite las versiones del protocolo MCP 2024-11-05, 2025-03-26, 2025-06-18 y 2025-11-25, e implementa initialize, ping, tools/list y tools/call. Los resultados de las herramientas incluyen tanto un bloque de texto JSON como structuredContent.
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"probe","version":"1"}}}
{"jsonrpc":"2.0","method":"notifications/initialized"}
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_service_health","arguments":{}}}No existe un transporte HTTP alojado para el servidor con alcance de cuenta. Un endpoint MCP remoto con capacidad de escritura necesitaría OAuth por usuario, que SendHQ no ofrece; el binario local mantiene la clave en la máquina que ya la tiene.
Entorno y flags
| Variable o flag | Obligatoria | Significado |
|---|---|---|
SENDHQ_API_KEY | sí | Clave de API del espacio de trabajo (re_…). Todas las herramientas excepto get_service_health la necesitan. Sin ella, el servidor arranca igualmente y cada llamada devuelve un auth_error estructurado que explica cómo solucionarlo. |
SENDHQ_API_BASE_URL | no | URL base de la API. Valor predeterminado: https://sendhq.cc/api/v1. Úsela solo para un despliegue local o de staging. SENDHQ_BASE_URL se acepta como alias antiguo. |
SENDHQ_MCP_READ_ONLY | no | 1, true o yes se comporta como --read-only. |
--read-only | no | Expone solo las herramientas que no envían correo ni cambian el estado. Las herramientas ocultas también se rechazan si se llaman por su nombre. |
SENDHQ_PROFILE / --profile | no | Usa una clave guardada por sendhq auth login en el llavero del sistema operativo en lugar de SENDHQ_API_KEY. Si existen ambas, prevalece la variable de entorno. |
La clave se envía únicamente como encabezado Authorization: Bearer a la URL base configurada. Nunca se imprime, se registra, se repite en los errores ni se incluye en los resultados de las herramientas.
Modelo de seguridad para agentes
- Envía correo real.
send_email,send_batchysend_template_testentregan correo a personas reales y consumen créditos de entrega. Sus descripciones empiezan porSENDS REAL EMAIL. Llámelas solo cuando el usuario haya pedido explícitamente que se envíe ese mensaje concreto, con los destinatarios, el remitente y el contenido confirmados. - Destructivas.
delete_email,delete_draft,delete_attachment,delete_domain,delete_inboxyremove_suppressionestán marcadas condestructiveHint: truey sus descripciones empiezan porDESTRUCTIVE. Confirme primero con el usuario.remove_suppressiondebilita un bloqueo de seguridad y solo es apropiada cuando una persona confirma que la dirección vuelve a funcionar. - Cambian el estado. Crear o actualizar borradores, plantillas, dominios y bandejas de entrada, publicar plantillas e iniciar la verificación modifican el espacio de trabajo, pero no envían correo.
- Solo lectura. Todo lo demás es
readOnlyHint: truey se puede llamar libremente. - Este servidor nunca modifica el DNS.
add_domaindevuelve registros para que una persona los publique;get_domain_connect_linkdevuelve una URL de consentimiento que una persona debe abrir y aprobar en su proveedor de DNS. - Este servidor nunca modifica la facturación.
get_accountsolo lee el plan, el uso y el estado de la suscripción. - Los espacios de trabajo sin pago (prueba de integración) solo pueden entregar al correo del propietario de la cuenta (
get_account→user.email) o a una dirección del simulador de AWS SES, comosuccess@simulator.amazonses.com, y no pueden enviar adjuntos. - Aceptado no significa entregado. Un envío correcto devuelve un ID; las evidencias de entrega, rebote y queja llegan más tarde en
list_email_events. Nunca afirme que un mensaje llegó a la bandeja de entrada ni que una persona lo leyó. - No cambie a otra dirección From para eludir una pausa
423, y nunca vuelva a agregar destinatarios que se hayan dado de baja o que hayan presentado una queja.
Las claves de API quedan fuera del alcance
Por diseño, no hay herramientas que creen, modifiquen, roten, revoquen o eliminen claves de API. Un agente no debe emitir ni destruir credenciales. list_api_keys devuelve solo nombres, prefijos no secretos y fechas de último uso. La gestión de claves se hace en el panel, con una persona que haya iniciado sesión.
Flujos de trabajo
1. Primer envío
get_service_healthconfirma que la API es accesible (funciona sin clave).get_accountmuestra el plan (access.tier), la cuota restante yuser.email. En la prueba, ese correo es el único destinatario real permitido.list_sending_identitiesenumera las direcciones From que puede usar. Si está vacía, complete primero el flujo de dominio.- Confirme con el usuario el remitente, el destinatario, el asunto y el cuerpo; después llame a
send_emailcon unaidempotency_key. list_email_eventscon eliddevuelto muestradelivery,bounce,complaintorejecten cuanto el proveedor lo notifica (normalmente entre unos segundos y unos minutos).
{
"name": "send_email",
"arguments": {
"from": "Acme <hello@example.com>",
"to": [
"owner@example.com"
],
"subject": "SendHQ is connected",
"text": "It works.",
"idempotency_key": "first-send-2026-09-26"
}
}2. Verificación de dominios de principio a fin
add_domainconname: "example.com". El resultado incluye los registros DNS (CNAME de DKIM, verificación de SES, SPF y el DMARC recomendado).get_dns_providercon eldomain_iddetecta el proveedor de DNS autoritativo y devuelve el host relativo exacto que hay que introducir para cada registro en ese proveedor.- Si
providers.domainConnect.availablees true,get_domain_connect_linkdevuelve una URL de consentimiento. Entréguesela a la persona; no cambia nada hasta que la apruebe en el proveedor. En caso contrario, entréguele los registros que debe publicar. Nunca publique un segundo registro SPF: combineinclude:amazonses.comcon el valorv=spf1existente. verify_domainvuelve a comprobar el DNS y SES. El estado pasa porpending,checkingypropagatinghastaverified. Consulteverify_domainoget_domaincada 30–60 segundos; el DNS puede tardar de minutos a horas.- Cuando
statusesverified, las direcciones del dominio aparecen enlist_sending_identities.
3. Rebotes, quejas y supresiones
list_blocked_recipientsdevuelve todas las direcciones bloqueadas con su motivo (bounce,complaint,unsubscribe) y un recuento resumido.list_suppressionsdevuelve las supresiones por rebote permanente y por queja;deliverability_statsofrece las tasas de entrega, rebotes y quejas de 30 días;list_sender_reputationmuestra qué direcciones From tienen el envío limitado o en pausa.- Un envío que contiene un destinatario suprimido falla con
422 recipient_suppressed. Quite ese destinatario y vuelva a enviar. - Llame a
remove_suppressionsolo cuando una persona confirme que un buzón que rebotaba ahora funciona. Las supresiones por queja son permanentes (409 complaint_suppression_locked).
4. Recibir correo entrante
- El dominio (a menudo un subdominio como
inbound.example.com) debe estar verificado. setup_inboundhabilita la recepción y devuelve un registro MX. Una persona lo publica.verify_inboundhasta questatusseaready.create_inboxcondomain_idylocal_part(por ejemplo,support) creasupport@inbound.example.com.- Consulte periódicamente
list_emailscondirection: "in"yunread: true(opcionalmenteinbox_id). Lea un mensaje conget_email, su conversación conget_thready los adjuntos condownload_attachment, y márquelo como atendido conmark_email(read: true). - Responda dentro del hilo con
send_emailyreply_to_email_id; SendHQ establece In-Reply-To, References y el hilo.
5. Webhooks y notificaciones de eventos
Actualmente SendHQ no ofrece webhooks configurables por el cliente, por lo que no hay ninguna herramienta de webhooks. Las notificaciones del proveedor se procesan dentro de SendHQ y se exponen mediante lecturas. En su lugar, consulte periódicamente: list_email_events para el resultado de un mensaje, list_emails con status (por ejemplo, bounced) o after para los cambios recientes, list_emails con direction: "in" y unread: true para el correo entrante nuevo, y list_blocked_recipients para las supresiones nuevas. No consulte más de una vez por minuto, aproximadamente, para cada pregunta.
6. Diagnosticar un fallo de entrega
- Localice el mensaje:
list_emailscondirection: "out"ytooquery, oget_emailsi tiene el ID.status: failedsignifica que SendHQ o el proveedor lo rechazó en el envío; el error del correo explica el motivo. list_email_events:bounce(permanente o transitorio, con el diagnóstico del proveedor),complaint,rejectodelivery. Si aún no hay eventos, el proveedor no ha informado; espere y vuelva a comprobar.- Si la propia llamada de envío falló, lea el
codedel error:sender_domain_unverified→ termine la verificación del dominio;recipient_suppressed→ la dirección ya tuvo un rebote permanente o una queja;sender_paused→ reviselist_sender_reputationy corrija el origen de la lista;trial_recipient_restricted→ límites de la prueba;quota_exhausted→ uso enget_account. get_domaincomprueba que DKIM, SPF y DMARC siguen publicados;deliverability_statsmuestra si el problema es de un solo mensaje o una tendencia.- Informe lo que muestran las evidencias. Un evento
deliverysignifica que el servidor del destinatario aceptó el mensaje, no que llegó a la bandeja de entrada ni que se leyó.
7. Encargarse de una categoría de tareas (etiquetas)
create_labelconname(por ejemplo,Agent/Orders) yskip_inbox: true. Eso convierte la etiqueta en una categoría: el correo recibido que la obtiene se archiva, de modo que aparece solo en la etiqueta y nunca en la bandeja de entrada de la persona.- Envíe el correo de la tarea con
send_email(osend_batch) ylabels: ["Agent/Orders"]. Las respuestas a esa conversación heredan la etiqueta automáticamente y no pasan por la bandeja de entrada. - Para el correo que empieza fuera de sus conversaciones, agregue una regla de archivado:
create_label_ruleconinbox_id(una dirección dedicada comoorders@…),from,toosubject. Paseapply_to_existing: truepara archivar el correo ya recibido. - Trabaje la categoría:
list_emailsconlabel: "Agent/Orders",direction: "in"yunread: true; lea conget_emailoget_thread, responda consend_emailyreply_to_email_id, y usemark_emailread: truecuando lo haya atendido. - Mueva un mensaje suelto hacia dentro o fuera con
label_email(add/remove). Agregar una etiqueta de categoría a un mensaje recibido también lo archiva. - Opcionalmente,
set_inbox_forwardingenvía una copia de todo lo que recibe una dirección de recepción a otro buzón (el destino lo confirma primero por correo).
{
"name": "send_email",
"arguments": {
"from": "Orders <orders@example.com>",
"to": [
"customer@example.net"
],
"subject": "Order 1042: confirm delivery window",
"text": "Reply with a time that works.",
"labels": [
"Agent/Orders"
],
"idempotency_key": "order-1042-window"
}
}8. Adjuntos y plantillas
Adjunte hasta 10 archivos con attachments de send_email (cada uno necesita content_base64 o un file_path local; filename toma por defecto el nombre base del archivo) en un plan de pago. Para las plantillas alojadas: create_template → update_template_draft → render_template para previsualizar con datos de ejemplo → send_template_test (envía una prueba real) → publish_template; después envíe con send_email o send_batch usando template: {key, data} y exactamente un destinatario to.
Resultados, paginación y errores
Una llamada correcta devuelve el objeto JSON de la API como structuredContent y como bloque de texto JSON. Toda herramienta list_* acepta limit (1–200, valor predeterminado 50) y offset, y agrega un objeto pagination. Siga llamando con offset: pagination.next_offset mientras has_more sea true.
{
"data": [
"…"
],
"count": 50,
"pagination": {
"offset": 0,
"limit": 50,
"returned": 50,
"total": 180,
"has_more": true,
"next_offset": 50
}
}Una llamada fallida devuelve isError: true con un error estructurado. Siga el remedy en lugar de reintentar a ciegas; reintente solo cuando retryable sea true.
{
"error": {
"code": "trial_recipient_restricted",
"status": 402,
"message": "The integration trial can deliver only to your account email or an AWS SES simulator address",
"retryable": false,
"explanation": "This workspace is on the unpaid integration trial. Trial sends can be delivered only to the account owner's email address or an AWS SES simulator address.",
"remedy": "Send to the account email (get_account -> user.email) or a simulator address such as success@simulator.amazonses.com to test. To email anyone else, the account owner must activate a paid plan in the dashboard (Profile & Billing). Do not retry the same recipients."
}
}Campos de error opcionales: request_id (indíquelo al soporte), retry_after_seconds, problems (lista de infracciones del esquema para invalid_arguments) e idempotent_replayed (consulte Idempotencia).
Idempotencia
send_email y send_batch aceptan idempotency_key (máximo 200 caracteres), que se envía como encabezado Idempotency-Key. Genere una clave estable por cada mensaje lógico, por ejemplo invoice-4812-receipt.
- Un reintento debe reutilizar la misma clave Y un cuerpo de solicitud idéntico. La misma clave con cualquier cambio (destinatario, asunto, cuerpo, encabezado, datos de plantilla, incluso valores de argumentos) devuelve
409 idempotency_conflict. - Misma clave, mismo cuerpo y el original ya terminado: SendHQ devuelve el resultado almacenado sin volver a enviar. Así se reintenta de forma segura después de un timeout o de un
network_error. - Misma clave mientras el original sigue en curso:
409 idempotency_in_progress, que se puede reintentar tras una breve espera. - Un mensaje lógico nuevo necesita una clave nueva.
- Los fallos almacenados también se reproducen. Si el primer intento falló, reintentar con la misma clave devuelve ese mismo fallo con
idempotent_replayed: trueyretryable: false. Reviselist_emails(direction: out) para confirmar que no salió nada, corrija la causa y después envíe con una clave nueva. - El servidor nunca reintenta un POST por su cuenta. Solo las llamadas GET de solo lectura se reintentan automáticamente (hasta 3 intentos ante errores de red, 429 y 5xx).
send_emailconattachmentsen línea no admite unaidempotency_key, porque ejecuta varias solicitudes. Para envíos con adjuntos seguros ante reintentos:create_draft→upload_attachment→send_emailcondraft_ideidempotency_key.
{
"name": "send_email",
"arguments": {
"from": "Acme <billing@example.com>",
"to": [
"owner@example.com"
],
"subject": "Receipt #4812",
"text": "Thanks for your payment.",
"idempotency_key": "receipt-4812"
}
}Límites de frecuencia y cuotas
SendHQ no publica un límite fijo de solicitudes por segundo para la API. Los límites con los que realmente se encuentra un agente son límites de uso, que se devuelven como 429:
- Entregas mensuales a destinatarios por plan. Cada dirección To, Cc y Bcc cuenta como una entrega. Consulte
get_account→usage.recipientDeliveriesfrente ausage.emailQuotaMonth. - Destinatarios diarios por dirección From exacta, según el estado de reputación de ese remitente (
list_sender_reputation→dailyLimit, 2.000 de forma predeterminada en los planes de pago). - Prueba de integración: 100 destinatarios en total, solo al correo de la cuenta o a direcciones del simulador de SES.
- Adjuntos: como máximo 10 archivos y 10 MB por mensaje; 10 GB al mes de transferencia de adjuntos ponderada por destinatario en los planes de pago.
- Por solicitud: To + Cc + Bcc hasta 100 direcciones;
send_batchhasta 100 mensajes. - Cortacircuitos de reputación: en una ventana móvil de 7 días, los rebotes o las quejas por encima del umbral limitan o pausan una dirección From (
423 sender_paused). Se recupera automáticamente cuando las tasas bajan.
quota_exhausted no se puede reintentar hasta que se reinicie el periodo o cambie el plan. rate_limited se puede reintentar después de retry_after_seconds; en los envíos, reintente con la misma idempotency_key y un cuerpo idéntico.
Catálogo de errores
code es estable; ramifique su lógica en función de él y no de message.
| code | HTTP | ¿Reintentar? | Qué significa y qué hacer |
|---|---|---|---|
invalid_arguments | — | no | Los argumentos no superaron localmente el JSON Schema de la herramienta; nada llegó a SendHQ. Corrija los campos indicados en problems. |
auth_error | 401 | no | Clave de API ausente, revocada o incorrecta. Defina SENDHQ_API_KEY para el proceso del servidor; las claves las crea una persona en el panel. |
trial_recipient_restricted | 402 | no | La prueba de integración solo puede entregar al correo de la cuenta o a una dirección del simulador de SES. Envíe allí, o el propietario activa un plan de pago. |
payment_required | 402 | no | La función requiere un plan de pago (por ejemplo, los adjuntos). Envíe sin ella o cambie a un plan superior. |
sender_domain_not_owned | 403 | no | El dominio From no pertenece a este espacio de trabajo. Use list_sending_identities o add_domain. |
sender_domain_unverified | 403 | no | El dominio From aún no está verificado. get_domain, publique los registros que faltan, verify_domain. |
domain_limit_reached | 403 | no | Se alcanzó el límite de dominios del plan. Elimine un dominio sin uso (con aprobación) o cambie a un plan superior. |
marketing_not_enabled | 403 | no | La clase marketing no está habilitada para este dominio o plan. Use transactional solo si el mensaje realmente lo es. |
forbidden | 403 | no | La política no permite la operación. Ajuste la solicitud. |
not_found | 404 | no | El ID no pertenece a este espacio de trabajo. Liste el recurso para encontrar el ID correcto; restaure primero las plantillas archivadas. |
idempotency_conflict | 409 | no | Clave reutilizada con un cuerpo distinto. Reenvíe exactamente el original o use una clave nueva para un mensaje nuevo. |
idempotency_in_progress | 409 | sí | La solicitud original sigue en curso. Espere y reintente con la misma clave y el mismo cuerpo. |
revision_conflict | 409 | no | El borrador de la plantilla cambió desde que lo leyó. get_template, combine los cambios y vuelva a guardar. |
complaint_suppression_locked | 409 | no | El destinatario presentó una queja. No vuelva a escribirle nunca. |
inbound_not_ready | 409 | no | La recepción de correo entrante no está lista. setup_inbound, publique el MX, verify_inbound. |
conflict | 409 | no | El recurso ya existe o está en un estado incorrecto. Léalo y ajústelo. |
attachments_too_large | 413 | no | Más de 10 archivos o 10 MB. Quite adjuntos o reduzca su tamaño. |
recipient_suppressed | 422 | no | Un destinatario tuvo antes un rebote permanente o presentó una queja. Quítelo; consulte list_blocked_recipients. |
recipient_unsubscribed | 422 | no | Un destinatario se dio de baja del correo de marketing. Quítelo de forma permanente. |
validation_failed | 422 | no | Contenido rechazado, por ejemplo datos de plantilla que incumplen el contrato de variables. Corrija la entrada. |
sender_paused | 423 | no | Esta dirección From está en pausa por el cortacircuitos de rebotes/quejas de 7 días. Deténgase, corrija la lista y espere la recuperación automática. |
quota_exhausted | 429 | no | Se alcanzó el límite mensual, diario por remitente, de adjuntos o de la prueba. Revise get_account; espere al reinicio o cambie a un plan superior. |
rate_limited | 429 | sí | Reduzca el ritmo; espere retry_after_seconds. Envíos: misma clave, mismo cuerpo. |
server_error | 5xx | sí | Fallo temporal de SendHQ o del proveedor. Aplique backoff y reintente; los envíos, con la misma clave y el mismo cuerpo. Si idempotent_replayed es true, use una clave nueva después de confirmar que no se envió nada. |
network_error | — | sí | Se perdió la solicitud o la respuesta. Reintente; en los envíos, la misma idempotency_key lo hace seguro. |
invalid_request | 400 | no | Solicitud mal formada. Lea message y corríjala. |
tool_error | — | no | Fallo local dentro del servidor MCP (por ejemplo, un file_path ilegible). Lea message. |
Referencia de herramientas
Cada herramienta con su clase de seguridad, el endpoint REST al que llama, sus parámetros, la estructura de respuesta y un objeto params de tools/call de ejemplo. Los parámetros son exactos: el servidor rechaza todo lo que no esté en la lista.
Correos e hilos: send_email, send_batch, list_emails, get_email, mark_email, delete_email, list_email_events, get_thread
Etiquetas y reglas de archivado automático: list_labels, get_label, create_label, update_label, delete_label, create_label_rule, delete_label_rule, label_email
Borradores, adjuntos e identidades de remitente: list_sending_identities, create_draft, list_drafts, get_draft, update_draft, delete_draft, upload_attachment, download_attachment, delete_attachment
Plantillas alojadas: list_templates, create_template, get_template, update_template_draft, create_template_draft, render_template, send_template_test, publish_template, archive_template, restore_template
Dominios y DNS: list_domains, get_domain, add_domain, verify_domain, delete_domain, get_dns_provider, get_domain_connect_link
Correo entrante: setup_inbound, verify_inbound, list_inboxes, get_inbox, create_inbox, update_inbox, set_inbox_forwarding, delete_inbox
Entregabilidad, rebotes y supresiones: deliverability_stats, list_sender_reputation, list_suppressions, remove_suppression, list_blocked_recipients
Cuenta, uso, analíticas y claves: get_account, get_analytics, list_api_keys, get_service_health
Ninguna herramienta coincide con este filtro.
Correos e hilos
send_emailEnviar un correo
SENDS REAL EMAIL. Envía un mensaje desde un dominio verificado: html/text sin procesar, una plantilla alojada publicada, una respuesta en un hilo existente o un mensaje con adjuntos. Pase idempotency_key para que un reintento no pueda enviar dos veces; un reintento debe reutilizar la misma clave Y una solicitud idéntica; de lo contrario, SendHQ devuelve 409. attachments es un atajo que crea un borrador, sube cada archivo y envía con ese borrador; no se puede combinar con idempotency_key ni con draft_id (use create_draft + upload_attachment + send_email con draft_id para envíos con adjuntos seguros ante reintentos). Los espacios de trabajo sin pago (prueba de integración) solo pueden entregar al correo de la cuenta o a una dirección del simulador de AWS SES, y no pueden enviar adjuntos.
Proporcione al menos uno de: html, text, template.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
from | string | sí | Remitente, p. ej. Acme <hello@example.com>. El dominio debe estar verificado en este espacio de trabajo (consulte list_sending_identities). (máx. 998 caracteres) |
to | string[] | sí | Destinatarios. Cada entrada es una dirección, opcionalmente con un nombre visible. To+cc+bcc pueden sumar como máximo 100; cada destino consume un crédito de entrega. (1–100 elementos) |
cc | string[] | no | Destinatarios en copia. (0–100 elementos) |
bcc | string[] | no | Destinatarios en copia oculta. (0–100 elementos) |
subject | string | no | Línea de asunto. Omítala al enviar una plantilla. (máx. 998 caracteres) |
text | string | no | Cuerpo en texto sin formato. Proporcione text, html o template. |
html | string | no | Cuerpo HTML. SendHQ lo sanea y genera el texto cuando se omite text. |
reply_to | string | no | Dirección Reply-To. |
headers | object | no | Encabezados personalizados adicionales y seguros (valores string), p. ej. {"X-Entity-Ref-ID": "123"}. Los encabezados de enrutamiento como From/To/Message-ID los controla SendHQ. |
message_class | string | no | transactional (predeterminado) o marketing. Marketing requiere un plan o dominio con marketing habilitado y agrega la gestión de bajas. (uno de transactional, marketing) |
reply_to_email_id | string | no | Responder dentro de una conversación existente: el ID em_… del mensaje al que se responde. SendHQ establece In-Reply-To/References y el hilo. |
thread_id | string | no | ID de hilo explícito en el que archivar el mensaje. |
draft_id | string | no | Enviar con este mensaje los adjuntos de un borrador guardado (dr_…). El borrador se elimina tras un envío correcto. |
template | object | no | Enviar una plantilla alojada publicada en lugar de html/text sin procesar. Requiere exactamente un destinatario to y ningún cc/bcc; la plantilla proporciona el asunto. Proporcione al menos uno de: id, key. |
template.id | string | no | ID de la plantilla (tmpl_…). Proporcione id o key. |
template.key | string | no | Clave de la plantilla, como account-welcome. Proporcione id o key. |
template.version_id | string | no | ID de versión publicada opcional (tmplv_…). Por defecto, la versión publicada actual. |
template.data | object | no | Valores para las variables tipadas de la plantilla. |
labels | string[] | no | Nombres de etiqueta o IDs lbl_… en los que archivar este mensaje. Los nombres desconocidos se crean. Las respuestas de la conversación heredan las etiquetas, y una etiqueta de categoría (skip_inbox) mantiene esas respuestas fuera de la bandeja de entrada. Máx. 10. (0–10 elementos) |
idempotency_key | string | no | Encabezado Idempotency-Key (máx. 200 caracteres). Reutilícelo solo para reintentar exactamente esta solicitud. (máx. 200 caracteres) |
attachments | object[] | no | Archivos que adjuntar (máx. 10 archivos, 10 MB en total). Cada uno necesita content_base64 (más filename) o un file_path local. (0–10 elementos) Proporcione al menos uno de: content_base64, file_path. |
attachments[].filename | string | no | Nombre de archivo que ve el destinatario. Obligatorio con content_base64; por defecto, el nombre base de file_path. (máx. 255 caracteres) |
attachments[].content_type | string | no | Tipo MIME, p. ej. application/pdf. Por defecto, application/octet-stream. |
attachments[].content_base64 | string | no | Contenido del archivo en base64 estándar. |
attachments[].file_path | string | no | Ruta absoluta de un archivo local que el proceso del servidor MCP pueda leer. |
{
"name": "send_email",
"arguments": {
"from": "Acme <hello@example.com>",
"to": [
"owner@example.com"
],
"subject": "Your export is ready",
"text": "Download it from your dashboard.",
"idempotency_key": "export-ready-42"
}
}send_batchEnviar un lote de correos personalizados
SENDS REAL EMAIL. Envía de 1 a 100 mensajes independientes en una sola solicitud (úselo para personalizar plantillas por destinatario). Cada elemento tiene la misma estructura que send_email (sin attachments/idempotency_key). Cada elemento tiene éxito o falla por separado: HTTP 207 significa éxito parcial; revise cada data[i].ok y data[i].error. Una sola idempotency_key cubre todo el cuerpo del lote.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
emails | object[] | sí | Mensajes que enviar. (1–100 elementos) Proporcione al menos uno de: html, text, template. |
idempotency_key | string | no | Idempotency-Key para todo el lote (máx. 200 caracteres). (máx. 200 caracteres) |
{
"name": "send_batch",
"arguments": {
"emails": [
{
"from": "Acme <hello@example.com>",
"to": [
"owner@example.com"
],
"template": {
"key": "account-welcome",
"data": {
"first_name": "Asha"
}
}
}
],
"idempotency_key": "welcome-batch-2026-09-26"
}
}list_emailsListar y buscar correo
Lista el correo enviado (direction: out) y recibido (direction: in), del más reciente al más antiguo, con filtros. El correo recibido se clasifica: lea la bandeja de entrada de la persona con direction: in, archived: false, category: primary; priorice con important: true; el spam se oculta salvo que se indique category: spam o include_spam: true. Paginado: el resultado incluye pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
direction | string | no | in para el recibido, out para el enviado. (uno de in, out) |
status | string | no | Filtro de estado, p. ej. queued, sent, delivered, bounced, complained, failed. |
domain | string | no | Solo los mensajes de este dominio, o de una lista de dominios separados por comas (coincide con cualquiera). |
inbox_id | string | no | Solo los mensajes recibidos en esta bandeja de entrada (inb_…). |
label | string | no | Solo los mensajes con esta etiqueta: un ID de etiqueta lbl_… o el nombre exacto, o una lista separada por comas (coincide con cualquiera). Use list_labels para ver las carpetas. |
archived | boolean | no | false = la vista de la bandeja de entrada (correo recibido no archivado), true = solo archivados. Omítalo para todo el correo. |
category | string | no | primary (personas), updates (newsletters, envíos masivos, automatizados) o spam; o una lista separada por comas. El spam se oculta salvo que se solicite. |
important | boolean | no | true = solo los mensajes marcados como importantes (respuestas a conversaciones que usted inició y remitentes marcados como importantes). |
include_spam | boolean | no | Incluir el spam en los resultados (para búsquedas en todas las carpetas). |
from | string | no | La dirección del remitente contiene este valor. |
to | string | no | La dirección del destinatario contiene este valor. |
unread | boolean | no | true = solo no leídos, false = solo leídos. |
after | string | no | Marca de tiempo ISO-8601; solo los mensajes creados después de ella. (date-time) |
before | string | no | Marca de tiempo ISO-8601; solo los mensajes creados antes de ella. (date-time) |
query | string | no | Búsqueda de texto libre en asuntos, cuerpos, direcciones de remitente/destinatario y nombres de archivos adjuntos. (máx. 200 caracteres) |
limit | integer | no | Tamaño de página. Por defecto, 50. (predeterminado 50; 1–200) |
offset | integer | no | Número de registros que omitir. Use pagination.next_offset de la página anterior. (predeterminado 0; 0–…) |
{
"name": "list_emails",
"arguments": {
"direction": "in",
"unread": true,
"limit": 25
}
}get_emailObtener un correo
Recupera un mensaje con sus encabezados, cuerpo html/text, estado, metadatos del hilo y metadatos de los adjuntos (descargue los bytes con download_attachment).
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
email_id | string | sí | ID del correo (empieza por em_), tal como lo devuelve una herramienta de listado o de creación. (máx. 128 caracteres) |
{
"name": "get_email",
"arguments": {
"email_id": "em_123"
}
}mark_emailMarcar como leído, archivado, spam o importante
Actualiza un mensaje: read, archived, category (primary, updates, spam; solo correo recibido) e important. Marcar como spam o como importante enseña a SendHQ sobre ese remitente para el correo futuro; pase learn: false para cambiar solo este mensaje. Pase al menos un campo.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
email_id | string | sí | ID del correo (empieza por em_), tal como lo devuelve una herramienta de listado o de creación. (máx. 128 caracteres) |
read | boolean | no | true = leído, false = no leído. |
archived | boolean | no | true = archivar (fuera de la bandeja de entrada), false = devolver a la bandeja de entrada. |
category | string | no | Mueve un mensaje recibido a primary, updates o spam. (uno de primary, updates, spam) |
important | boolean | no | Marca o desmarca el mensaje como importante. |
learn | boolean | no | false = no recordar este veredicto para el remitente (predeterminado true). |
{
"name": "mark_email",
"arguments": {
"email_id": "em_123",
"read": true
}
}delete_emailEliminar un correo
DESTRUCTIVE: elimina de forma permanente de SendHQ un mensaje conservado y sus adjuntos almacenados. No recupera un mensaje que ya se entregó.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
email_id | string | sí | ID del correo (empieza por em_), tal como lo devuelve una herramienta de listado o de creación. (máx. 128 caracteres) |
{
"name": "delete_email",
"arguments": {
"email_id": "em_123"
}
}list_email_eventsListar los eventos de entrega de un correo
Eventos del proveedor para un mensaje enviado: delivery, bounce, complaint, reject, open, click. Es la evidencia de si un mensaje se entregó o de por qué falló. Paginado: el resultado incluye pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
email_id | string | sí | ID del correo (empieza por em_), tal como lo devuelve una herramienta de listado o de creación. (máx. 128 caracteres) |
limit | integer | no | Tamaño de página. Por defecto, 50. (predeterminado 50; 1–200) |
offset | integer | no | Número de registros que omitir. Use pagination.next_offset de la página anterior. (predeterminado 0; 0–…) |
{
"name": "list_email_events",
"arguments": {
"email_id": "em_123"
}
}get_threadObtener una conversación
Recupera todos los mensajes de una conversación en orden cronológico (enviados y recibidos), cada uno con los metadatos de sus adjuntos.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
thread_id | string | sí | ID del hilo (normalmente el ID em_… del primer mensaje; consulte threadId en cualquier correo). (máx. 128 caracteres) |
{
"name": "get_thread",
"arguments": {
"thread_id": "em_123"
}
}Etiquetas y reglas de archivado automático
list_labelsListar etiquetas
Lista las etiquetas (carpetas) del espacio de trabajo con los recuentos totales y de no leídos, y sus reglas de archivado automático. Paginado: el resultado incluye pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
limit | integer | no | Tamaño de página. Por defecto, 50. (predeterminado 50; 1–200) |
offset | integer | no | Número de registros que omitir. Use pagination.next_offset de la página anterior. (predeterminado 0; 0–…) |
{
"name": "list_labels",
"arguments": {}
}get_labelObtener una etiqueta
Recupera una etiqueta con sus recuentos y reglas de archivado automático.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
label_id | string | sí | ID de la etiqueta (empieza por lbl_) o el nombre exacto de la etiqueta. (máx. 128 caracteres) |
{
"name": "get_label",
"arguments": {
"label_id": "Billing"
}
}create_labelCrear una etiqueta
Crea una etiqueta tipo carpeta. Defina skip_inbox: true para convertirla en una categoría propiedad de un agente: envíe con labels: [name] y las respuestas se archivan en la etiqueta y quedan fuera de la bandeja de entrada. Las reglas de archivado automático opcionales archivan el correo nuevo enviado/recibido (todas las condiciones de una regla deben coincidir). Defina apply_to_existing para archivar también el correo conservado.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
name | string | sí | Nombre de la etiqueta, p. ej. Billing o Clients/Acme. Único por espacio de trabajo (sin distinguir mayúsculas y minúsculas). (máx. 64 caracteres) |
color | string | no | Color hexadecimal, como #1a73e8. Opcional. |
skip_inbox | boolean | no | Modo categoría: el correo recibido que obtiene esta etiqueta (por una regla, por responder a una conversación enviada con esta etiqueta o manualmente) se archiva para que aparezca solo en la etiqueta, no en la bandeja de entrada. |
rules | object[] | no | Reglas de archivado automático opcionales (máx. 20). Cada una necesita al menos uno de inbox_id, from, to, subject. (0–20 elementos) |
rules[].direction | string | no | Solo el correo in (recibido) u out (enviado). Omítalo para ambos. (uno de in, out) |
rules[].inbox_id | string | no | Solo el correo recibido en esta bandeja de entrada (inb_…). Archiva cada dirección de recepción en su propia carpeta. |
rules[].from | string | no | El remitente contiene este texto (sin distinguir mayúsculas y minúsculas), p. ej. @stripe.com. (máx. 200 caracteres) |
rules[].to | string | no | To/Cc contiene este texto (sin distinguir mayúsculas y minúsculas). (máx. 200 caracteres) |
rules[].subject | string | no | El asunto contiene este texto (sin distinguir mayúsculas y minúsculas). (máx. 200 caracteres) |
rules[].skip_inbox | boolean | no | Archivar el correo recibido que coincida para que aparezca solo en la carpeta de la etiqueta, no en la bandeja de entrada. |
apply_to_existing | boolean | no | Archivar también el correo ya conservado que coincida con las reglas. |
{
"name": "create_label",
"arguments": {
"name": "Agent/Orders",
"skip_inbox": true,
"rules": [
{
"from": "@stripe.com"
}
]
}
}update_labelRenombrar, cambiar el color o convertir una etiqueta en categoría
Cambia el nombre de una etiqueta, su color o activa/desactiva el modo categoría (skip_inbox). Al activar el modo categoría se archiva el correo recibido que ya está en la etiqueta.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
label_id | string | sí | ID de la etiqueta (empieza por lbl_) o el nombre exacto de la etiqueta. (máx. 128 caracteres) |
name | string | no | Nombre nuevo. (máx. 64 caracteres) |
color | string | no | Color hexadecimal nuevo. |
skip_inbox | boolean | no | Modo categoría: el correo recibido que obtiene esta etiqueta (por una regla, por responder a una conversación enviada con esta etiqueta o manualmente) se archiva para que aparezca solo en la etiqueta, no en la bandeja de entrada. |
{
"name": "update_label",
"arguments": {
"label_id": "lbl_123",
"name": "Finance/Billing"
}
}delete_labelEliminar una etiqueta
DESTRUCTIVE: elimina una etiqueta y sus reglas. El correo en sí se conserva; solo pierde esta etiqueta.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
label_id | string | sí | ID de la etiqueta (empieza por lbl_) o el nombre exacto de la etiqueta. (máx. 128 caracteres) |
{
"name": "delete_label",
"arguments": {
"label_id": "lbl_123"
}
}create_label_ruleAgregar una regla de archivado automático
Agrega una regla a una etiqueta para que el correo nuevo que coincida se archive automáticamente. Todas las condiciones que defina deben coincidir. Use inbox_id para dar a una dirección de recepción su propia carpeta; agregue skip_inbox para mantenerla fuera de la bandeja de entrada.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
label_id | string | sí | ID de la etiqueta (empieza por lbl_) o el nombre exacto de la etiqueta. (máx. 128 caracteres) |
direction | string | no | Solo el correo in (recibido) u out (enviado). Omítalo para ambos. (uno de in, out) |
inbox_id | string | no | Solo el correo recibido en esta bandeja de entrada (inb_…). Archiva cada dirección de recepción en su propia carpeta. |
from | string | no | El remitente contiene este texto (sin distinguir mayúsculas y minúsculas), p. ej. @stripe.com. (máx. 200 caracteres) |
to | string | no | To/Cc contiene este texto (sin distinguir mayúsculas y minúsculas). (máx. 200 caracteres) |
subject | string | no | El asunto contiene este texto (sin distinguir mayúsculas y minúsculas). (máx. 200 caracteres) |
skip_inbox | boolean | no | Archivar el correo recibido que coincida para que aparezca solo en la carpeta de la etiqueta, no en la bandeja de entrada. |
apply_to_existing | boolean | no | Archivar también el correo ya conservado que coincida. |
{
"name": "create_label_rule",
"arguments": {
"label_id": "Billing",
"inbox_id": "inb_123",
"skip_inbox": true
}
}delete_label_ruleEliminar una regla de archivado automático
DESTRUCTIVE: elimina una regla de archivado automático. El correo ya archivado conserva su etiqueta.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
label_id | string | sí | ID de la etiqueta (empieza por lbl_) o el nombre exacto de la etiqueta. (máx. 128 caracteres) |
rule_id | string | sí | ID de la regla (empieza por lrule_), obtenido de get_label. (máx. 128 caracteres) |
{
"name": "delete_label_rule",
"arguments": {
"label_id": "lbl_123",
"rule_id": "lrule_123"
}
}label_emailAgregar o quitar etiquetas de un correo
Mueve un mensaje entre carpetas: agrega o quita etiquetas por nombre o por ID lbl_…. Los nombres desconocidos en add se crean, salvo que create sea false.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
email_id | string | sí | ID del correo (empieza por em_), tal como lo devuelve una herramienta de listado o de creación. (máx. 128 caracteres) |
add | string[] | no | Etiquetas que agregar. (0–10 elementos) |
remove | string[] | no | Etiquetas que quitar. (0–10 elementos) |
create | boolean | no | Crear las etiquetas desconocidas en add (predeterminado true). |
{
"name": "label_email",
"arguments": {
"email_id": "em_123",
"add": [
"Billing"
],
"remove": [
"Support"
]
}
}Borradores, adjuntos e identidades de remitente
list_sending_identitiesListar las identidades de remitente verificadas
Direcciones y dominios desde los que este espacio de trabajo puede enviar ahora mismo (dominios verificados, su From predeterminado y las direcciones de entrada activas). Llámela antes de send_email para elegir un from válido.
Sin parámetros.
{
"name": "list_sending_identities",
"arguments": {}
}create_draftCrear un borrador
Crea un borrador del editor. Los borradores contienen adjuntos: cree un borrador, use upload_attachment y después send_email con draft_id. No envía nada.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
from | string | no | Dirección del remitente en un dominio verificado (puede estar vacía mientras se redacta). |
to | string[] | no | Destinatarios. (0–100 elementos) |
cc | string[] | no | Destinatarios en copia. (0–100 elementos) |
bcc | string[] | no | Destinatarios en copia oculta. (0–100 elementos) |
subject | string | no | Línea de asunto. (máx. 998 caracteres) |
html | string | no | Cuerpo HTML. |
text | string | no | Cuerpo en texto sin formato. |
reply_to_email_id | string | no | ID del correo al que responde este borrador. |
thread_id | string | no | ID del hilo al que pertenece este borrador. |
{
"name": "create_draft",
"arguments": {
"from": "hello@example.com",
"to": [
"owner@example.com"
],
"subject": "Invoice"
}
}list_draftsListar borradores
Lista los borradores del editor, los actualizados más recientemente primero. Paginado: el resultado incluye pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
limit | integer | no | Tamaño de página. Por defecto, 50. (predeterminado 50; 1–200) |
offset | integer | no | Número de registros que omitir. Use pagination.next_offset de la página anterior. (predeterminado 0; 0–…) |
{
"name": "list_drafts",
"arguments": {}
}get_draftObtener un borrador
Recupera un borrador con los metadatos de sus adjuntos.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
draft_id | string | sí | ID del borrador (empieza por dr_), tal como lo devuelve una herramienta de listado o de creación. (máx. 128 caracteres) |
{
"name": "get_draft",
"arguments": {
"draft_id": "dr_123"
}
}update_draftReemplazar el contenido de un borrador
Reemplaza el contenido y los destinatarios de un borrador. Es un reemplazo completo: los campos que omita se vacían, así que lea primero get_draft y envíe todos los campos que quiera conservar. Los adjuntos no se ven afectados.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
draft_id | string | sí | ID del borrador (empieza por dr_), tal como lo devuelve una herramienta de listado o de creación. (máx. 128 caracteres) |
from | string | no | Dirección del remitente en un dominio verificado (puede estar vacía mientras se redacta). |
to | string[] | no | Destinatarios. (0–100 elementos) |
cc | string[] | no | Destinatarios en copia. (0–100 elementos) |
bcc | string[] | no | Destinatarios en copia oculta. (0–100 elementos) |
subject | string | no | Línea de asunto. (máx. 998 caracteres) |
html | string | no | Cuerpo HTML. |
text | string | no | Cuerpo en texto sin formato. |
reply_to_email_id | string | no | ID del correo al que responde este borrador. |
thread_id | string | no | ID del hilo al que pertenece este borrador. |
{
"name": "update_draft",
"arguments": {
"draft_id": "dr_123",
"from": "hello@example.com",
"to": [
"owner@example.com"
],
"subject": "Invoice (updated)",
"text": "Attached."
}
}delete_draftDescartar un borrador
DESTRUCTIVE: descarta un borrador y elimina de forma permanente sus adjuntos almacenados.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
draft_id | string | sí | ID del borrador (empieza por dr_), tal como lo devuelve una herramienta de listado o de creación. (máx. 128 caracteres) |
{
"name": "delete_draft",
"arguments": {
"draft_id": "dr_123"
}
}upload_attachmentSubir un adjunto a un borrador
Sube un archivo a un borrador (máx. 10 archivos y 10 MB en total por mensaje). Proporcione content_base64 o un file_path local. Los adjuntos requieren un plan de pago en el momento del envío.
Proporcione al menos uno de: content_base64, file_path.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
draft_id | string | sí | ID del borrador (empieza por dr_), tal como lo devuelve una herramienta de listado o de creación. (máx. 128 caracteres) |
filename | string | no | Nombre de archivo que ve el destinatario. Por defecto, el nombre base de file_path. (máx. 255 caracteres) |
content_type | string | no | Tipo MIME, p. ej. application/pdf. Por defecto, application/octet-stream. |
content_base64 | string | no | Contenido del archivo en base64 estándar. |
file_path | string | no | Ruta absoluta de un archivo local que el proceso del servidor MCP pueda leer. |
{
"name": "upload_attachment",
"arguments": {
"draft_id": "dr_123",
"filename": "invoice.pdf",
"content_type": "application/pdf",
"file_path": "/tmp/invoice.pdf"
}
}download_attachmentDescargar un adjunto
Descarga un adjunto privado (enviado, recibido o de un borrador). Devuelve el contenido en base64, o escribe el archivo cuando se define save_to_path (se niega a sobrescribir salvo que overwrite sea true).
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
attachment_id | string | sí | ID del adjunto (empieza por att_), tal como lo devuelve una herramienta de listado o de creación. (máx. 128 caracteres) |
save_to_path | string | no | Ruta local absoluta opcional en la que escribir el archivo en lugar de devolverlo en base64. |
overwrite | boolean | no | Permite reemplazar un archivo existente en save_to_path. Por defecto, false. |
{
"name": "download_attachment",
"arguments": {
"attachment_id": "att_123",
"save_to_path": "/tmp/invoice.pdf"
}
}delete_attachmentEliminar un adjunto
DESTRUCTIVE: elimina de forma permanente un adjunto almacenado (por ejemplo, para quitar un archivo de un borrador antes de enviarlo).
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
attachment_id | string | sí | ID del adjunto (empieza por att_), tal como lo devuelve una herramienta de listado o de creación. (máx. 128 caracteres) |
{
"name": "delete_attachment",
"arguments": {
"attachment_id": "att_123"
}
}Plantillas alojadas
list_templatesListar plantillas alojadas
Lista las plantillas de correo alojadas con su estado de publicación y su uso. Paginado: el resultado incluye pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
lifecycle | string | no | active (predeterminado), archived o all. (uno de active, archived, all) |
query | string | no | Buscar por nombre o clave. (máx. 120 caracteres) |
limit | integer | no | Tamaño de página. Por defecto, 50. (predeterminado 50; 1–200) |
offset | integer | no | Número de registros que omitir. Use pagination.next_offset de la página anterior. (predeterminado 0; 0–…) |
{
"name": "list_templates",
"arguments": {
"lifecycle": "active"
}
}create_templateCrear una plantilla alojada
Crea una plantilla con un borrador editable, opcionalmente a partir de una plantilla inicial (welcome, reset, receipt o blank). Publíquela antes de enviar por clave.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
name | string | sí | Nombre legible. (máx. 120 caracteres) |
key | string | no | Clave de envío estable: letras minúsculas, números y guiones; empieza por una letra (2–64 caracteres). Si se omite, se deriva del nombre. |
starter | string | no | Contenido inicial. (uno de blank, welcome, reset, receipt) |
{
"name": "create_template",
"arguments": {
"name": "Account welcome",
"key": "account-welcome",
"starter": "welcome"
}
}get_templateObtener una plantilla
Recupera el borrador actual de una plantilla (con revision), la versión publicada activa, el historial de versiones y el uso. Acepta ID o clave.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
template_id | string | sí | ID de la plantilla (tmpl_…) o clave. (máx. 128 caracteres) |
{
"name": "get_template",
"arguments": {
"template_id": "account-welcome"
}
}update_template_draftGuardar el borrador de una plantilla
Guarda el borrador editable de la plantilla con concurrencia optimista: pase la revision actual obtenida de get_template (409 significa que otra persona guardó antes; vuelva a leer y reintente). Es un reemplazo completo del contenido del borrador: los campos omitidos se vacían, así que envíe todos los campos que quiera conservar. Use marcadores {{variable}}.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
template_id | string | sí | ID o clave de la plantilla. (máx. 128 caracteres) |
revision | integer | sí | Revisión actual del borrador, obtenida de get_template. (1–…) |
name | string | no | Nombre de la plantilla. (máx. 120 caracteres) |
subject_template | string | no | Asunto con marcadores. (máx. 998 caracteres) |
preheader_template | string | no | Texto de vista previa. (máx. 240 caracteres) |
html_template | string | no | Cuerpo HTML con marcadores. |
text_template | string | no | Cuerpo en texto sin formato con marcadores. |
from | string | no | Remitente predeterminado para los envíos de esta plantilla. |
reply_to | string | no | Reply-To predeterminado. |
variables | object[] | no | Contrato de variables tipadas. Cada elemento: {key (minúsculas/guiones bajos), label, type: text|number|url|boolean, required (predeterminado true), fallback, description}. |
variables[].key | string | sí | |
variables[].label | string | no | |
variables[].type | string | no | (uno de text, number, url, boolean) |
variables[].required | boolean | no | |
variables[].fallback | any | no | |
variables[].description | string | no | |
sample_data | object | no | Valores de ejemplo usados en vistas previas y pruebas. |
{
"name": "update_template_draft",
"arguments": {
"template_id": "account-welcome",
"revision": 3,
"name": "Account welcome",
"subject_template": "Welcome, {{first_name}}",
"text_template": "Hi {{first_name}}",
"variables": [
{
"key": "first_name",
"type": "text",
"required": true
}
],
"sample_data": {
"first_name": "Asha"
}
}
}create_template_draftIniciar un borrador nuevo a partir de la versión publicada
Crea un borrador editable nuevo copiado de la versión publicada actual (409 si ya existe un borrador o no hay nada publicado).
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
template_id | string | sí | ID o clave de la plantilla. (máx. 128 caracteres) |
{
"name": "create_template_draft",
"arguments": {
"template_id": "account-welcome"
}
}render_templateRenderizar la vista previa de una plantilla
Renderiza la salida exacta del servidor (asunto, html, texto) para el borrador, la versión publicada o una versión concreta con los datos indicados. No envía nada. Devuelve 422 con findings cuando los datos incumplen el contrato de variables.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
template_id | string | sí | ID o clave de la plantilla. (máx. 128 caracteres) |
version_id | string | no | ID de versión opcional; por defecto, el borrador y, si no hay, la versión publicada. |
data | object | no | Valores de las variables; por defecto, los datos de ejemplo de la versión. |
{
"name": "render_template",
"arguments": {
"template_id": "account-welcome",
"data": {
"first_name": "Asha"
}
}
}send_template_testEnviar un correo de prueba de una plantilla
SENDS REAL EMAIL. Envía a los destinatarios indicados una instantánea del borrador (o de una versión concreta) con el prefijo [Test]. Cuenta para el uso; los espacios de trabajo en prueba solo pueden enviar al correo de la cuenta o a una dirección del simulador de SES.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
template_id | string | sí | ID o clave de la plantilla. (máx. 128 caracteres) |
to | string[] | sí | Destinatarios de la prueba. (1–100 elementos) |
from | string | no | Remitente en un dominio verificado; por defecto, el From de la plantilla. |
version_id | string | no | ID de versión opcional. |
data | object | no | Valores de las variables; por defecto, los datos de ejemplo. |
{
"name": "send_template_test",
"arguments": {
"template_id": "account-welcome",
"to": [
"owner@example.com"
]
}
}publish_templatePublicar una versión de plantilla
Publica el borrador actual como una versión inmutable que usará send_email con template.key. Falla con findings 422 si hay errores de validación, o con 409 si rompería el contrato de variables en vigor de una plantilla que ya se usa en producción.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
template_id | string | sí | ID o clave de la plantilla. (máx. 128 caracteres) |
{
"name": "publish_template",
"arguments": {
"template_id": "account-welcome"
}
}archive_templateArchivar una plantilla
Detiene los envíos nuevos que usan esta plantilla (el historial se conserva; se puede revertir con restore_template). Cualquier integración que envíe con esta clave empezará a fallar con 404.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
template_id | string | sí | ID o clave de la plantilla. (máx. 128 caracteres) |
{
"name": "archive_template",
"arguments": {
"template_id": "account-welcome"
}
}restore_templateRestaurar una plantilla archivada
Vuelve a activar una plantilla archivada.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
template_id | string | sí | ID o clave de la plantilla. (máx. 128 caracteres) |
{
"name": "restore_template",
"arguments": {
"template_id": "account-welcome"
}
}Dominios y DNS
list_domainsListar dominios
Lista los dominios de envío con el setup_status agregado (verified | checking | pending), el estado DNS de cada registro y el estado de entrada. Puede ser lento: los dominios no verificados se vuelven a comprobar en tiempo real. Paginado: el resultado incluye pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
limit | integer | no | Tamaño de página. Por defecto, 50. (predeterminado 50; 1–200) |
offset | integer | no | Número de registros que omitir. Use pagination.next_offset de la página anterior. (predeterminado 0; 0–…) |
{
"name": "list_domains",
"arguments": {}
}get_domainObtener los detalles de configuración de un dominio
Recupera un dominio con los registros DNS exactos que hay que publicar (tipo, nombre, valor), el estado en tiempo real de cada registro según dos resolvedores públicos, dns_issues con sus correcciones y el estado de entrada.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
domain_id | string | sí | ID del dominio (empieza por dom_), tal como lo devuelve una herramienta de listado o de creación. (máx. 128 caracteres) |
{
"name": "get_domain",
"arguments": {
"domain_id": "dom_123"
}
}add_domainAgregar un dominio de envío
Registra para el envío un dominio que usted controla. Devuelve los registros DNS (CNAME de SES Easy DKIM) que el propietario debe publicar. No modifica el DNS por sí mismo. Cuenta para el límite de dominios del plan.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
name | string | sí | Nombre de dominio sin más, p. ej. example.com o mail.example.com. (máx. 253 caracteres) |
default_from | string | no | Dirección de remitente predeterminada opcional en este dominio. |
{
"name": "add_domain",
"arguments": {
"name": "example.com"
}
}verify_domainVerificar un dominio
Ejecuta ahora una comprobación de verificación SES/DNS en tiempo real. Se puede repetir sin riesgo; consulte cada 30–60 s después de cambios en el DNS (la propagación puede tardar de minutos a horas). El envío se permite cuando el estado es verified.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
domain_id | string | sí | ID del dominio (empieza por dom_), tal como lo devuelve una herramienta de listado o de creación. (máx. 128 caracteres) |
{
"name": "verify_domain",
"arguments": {
"domain_id": "dom_123"
}
}delete_domainEliminar un dominio
DESTRUCTIVE: quita el dominio del espacio de trabajo, incluida su ruta de recepción de correo entrante. Los envíos desde él fallan inmediatamente después. No elimina los registros DNS en su proveedor de DNS.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
domain_id | string | sí | ID del dominio (empieza por dom_), tal como lo devuelve una herramienta de listado o de creación. (máx. 128 caracteres) |
{
"name": "delete_domain",
"arguments": {
"domain_id": "dom_123"
}
}get_dns_providerDetectar el proveedor de DNS y los hosts de los registros
Detecta el proveedor de DNS autoritativo del dominio y devuelve el host relativo que hay que escribir en ese proveedor para cada registro, el registro DMARC recomendado, las indicaciones de MX de entrada y si está disponible la configuración con un clic (Domain Connect).
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
domain_id | string | sí | ID del dominio (empieza por dom_), tal como lo devuelve una herramienta de listado o de creación. (máx. 128 caracteres) |
{
"name": "get_dns_provider",
"arguments": {
"domain_id": "dom_123"
}
}get_domain_connect_linkObtener un enlace de configuración DNS con un clic
Cuando get_dns_provider informa providers.domainConnect.available, crea una URL de consentimiento firmada. Entréguesela a la persona: ella la abre y aprueba el cambio de DNS en su proveedor. No cambia nada hasta que lo apruebe. 409 si no es compatible.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
domain_id | string | sí | ID del dominio (empieza por dom_), tal como lo devuelve una herramienta de listado o de creación. (máx. 128 caracteres) |
{
"name": "get_domain_connect_link",
"arguments": {
"domain_id": "dom_123"
}
}Correo entrante
setup_inboundHabilitar la recepción de correo entrante para un dominio
Habilita la recepción de correo entrante de SES para un dominio verificado. Usa el dominio raíz cuando no tiene un MX en conflicto; de lo contrario, inbound.<domain>. Devuelve el registro MX que el propietario debe publicar; no edita el DNS.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
domain_id | string | sí | ID del dominio (empieza por dom_), tal como lo devuelve una herramienta de listado o de creación. (máx. 128 caracteres) |
{
"name": "setup_inbound",
"arguments": {
"domain_id": "dom_123"
}
}verify_inboundVerificar el MX de entrada
Vuelve a comprobar el registro MX de entrada. El estado pasa a ready cuando ambos resolvedores públicos lo ven.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
domain_id | string | sí | ID del dominio (empieza por dom_), tal como lo devuelve una herramienta de listado o de creación. (máx. 128 caracteres) |
{
"name": "verify_inbound",
"arguments": {
"domain_id": "dom_123"
}
}list_inboxesListar direcciones de entrada
Lista las direcciones de recepción, opcionalmente de un solo dominio. Paginado: el resultado incluye pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
domain_id | string | no | Filtro opcional por ID de dominio. |
limit | integer | no | Tamaño de página. Por defecto, 50. (predeterminado 50; 1–200) |
offset | integer | no | Número de registros que omitir. Use pagination.next_offset de la página anterior. (predeterminado 0; 0–…) |
{
"name": "list_inboxes",
"arguments": {
"domain_id": "dom_123"
}
}get_inboxObtener una bandeja de entrada
Recupera una dirección de entrada.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
inbox_id | string | sí | ID de la bandeja de entrada (empieza por inb_), tal como lo devuelve una herramienta de listado o de creación. (máx. 128 caracteres) |
{
"name": "get_inbox",
"arguments": {
"inbox_id": "inb_123"
}
}create_inboxCrear una dirección de entrada
Crea una dirección como support@<receiving domain> en un dominio cuyo estado de entrada sea ready (ejecute antes setup_inbound y verify_inbound). El correo recibido aparece en list_emails con direction in.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
domain_id | string | sí | ID del dominio (empieza por dom_), tal como lo devuelve una herramienta de listado o de creación. (máx. 128 caracteres) |
local_part | string | sí | Parte anterior a la @, p. ej. support. (máx. 64 caracteres) |
name | string | no | Nombre visible opcional. |
{
"name": "create_inbox",
"arguments": {
"domain_id": "dom_123",
"local_part": "support",
"name": "Support"
}
}update_inboxRenombrar, habilitar o deshabilitar una bandeja de entrada
Cambia el nombre de una bandeja de entrada o establece su estado en active / disabled.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
inbox_id | string | sí | ID de la bandeja de entrada (empieza por inb_), tal como lo devuelve una herramienta de listado o de creación. (máx. 128 caracteres) |
name | string | no | Nombre visible nuevo. |
status | string | no | Estado nuevo. (uno de active, disabled) |
{
"name": "update_inbox",
"arguments": {
"inbox_id": "inb_123",
"status": "disabled"
}
}set_inbox_forwardingReenviar una bandeja de entrada a otra dirección
SENDS REAL EMAIL cuando se reenvía a alguien distinto del propietario de la cuenta: define adónde se reenvía el correo recibido en una bandeja de entrada. La dirección del propio propietario se activa de inmediato; cualquier otra dirección recibe un correo de confirmación y el reenvío queda en pending hasta que alguien lo confirme allí. Pase forward_to: null para desactivar el reenvío. Las copias reenviadas salen desde la dirección de la bandeja de entrada, con el remitente original como Reply-To.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
inbox_id | string | sí | ID de la bandeja de entrada (empieza por inb_), tal como lo devuelve una herramienta de listado o de creación. (máx. 128 caracteres) |
forward_to | string,null | sí | Dirección de correo de destino del reenvío, o null para desactivarlo. (máx. 254 caracteres) |
{
"name": "set_inbox_forwarding",
"arguments": {
"inbox_id": "inb_123",
"forward_to": "team@example.net"
}
}delete_inboxEliminar una bandeja de entrada
DESTRUCTIVE: elimina una dirección de entrada. El correo ya recibido se conserva; el correo nuevo a esa dirección deja de archivarse en ella.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
inbox_id | string | sí | ID de la bandeja de entrada (empieza por inb_), tal como lo devuelve una herramienta de listado o de creación. (máx. 128 caracteres) |
{
"name": "delete_inbox",
"arguments": {
"inbox_id": "inb_123"
}
}Entregabilidad, rebotes y supresiones
deliverability_statsObtener estadísticas de entrega de 30 días
Totales de 30 días de todo el espacio de trabajo: sent, delivery, bounce, complaint, reject, open, click y deliveryRate (%).
Sin parámetros.
{
"name": "deliverability_stats",
"arguments": {}
}list_sender_reputationListar la reputación del remitente
Estado de reputación por dirección From exacta: active, throttled (límite diario más bajo) o paused (los envíos devuelven 423), con el motivo y el límite diario. Revíselo cuando los envíos fallen con 423 o 429. Paginado: el resultado incluye pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
limit | integer | no | Tamaño de página. Por defecto, 50. (predeterminado 50; 1–200) |
offset | integer | no | Número de registros que omitir. Use pagination.next_offset de la página anterior. (predeterminado 0; 0–…) |
{
"name": "list_sender_reputation",
"arguments": {}
}list_suppressionsListar supresiones
Lista de supresión del espacio de trabajo: destinatarios bloqueados tras un rebote permanente o una queja por spam. Los envíos a ellos fallan con 422. Paginado: el resultado incluye pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
limit | integer | no | Tamaño de página. Por defecto, 50. (predeterminado 50; 1–200) |
offset | integer | no | Número de registros que omitir. Use pagination.next_offset de la página anterior. (predeterminado 0; 0–…) |
{
"name": "list_suppressions",
"arguments": {}
}remove_suppressionQuitar una supresión por rebote
DESTRUCTIVE (debilita un bloqueo de seguridad): quita una supresión por rebote para que se pueda volver a escribir a la dirección. Hágalo solo cuando la persona confirme que la dirección vuelve a ser válida. Las supresiones por queja no se pueden quitar (409).
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
email | string | sí | Dirección del destinatario suprimido. (máx. 320 caracteres) |
{
"name": "remove_suppression",
"arguments": {
"email": "fixed-mailbox@example.net"
}
}list_blocked_recipientsListar destinatarios bloqueados
Todos los destinatarios que SendHQ rechazará: rebotes, quejas y bajas de marketing con alcance por dominio, con un resumen por tipo. Lee hasta los 500 más recientes. Paginado: el resultado incluye pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
limit | integer | no | Tamaño de página. Por defecto, 50. (predeterminado 50; 1–200) |
offset | integer | no | Número de registros que omitir. Use pagination.next_offset de la página anterior. (predeterminado 0; 0–…) |
{
"name": "list_blocked_recipients",
"arguments": {}
}Cuenta, uso, analíticas y claves
get_accountObtener la cuenta, el uso y la facturación
Correo del propietario de la cuenta, plan/nivel de acceso, entregas a destinatarios usadas en el periodo actual frente a la cuota, dominios usados frente al límite, transferencia de adjuntos, resumen de reputación, estado de la suscripción, planes publicados y recuentos del espacio de trabajo. Úselo para comprobar la cuota restante o a quién puede entregar la prueba (el correo de la cuenta).
Sin parámetros.
{
"name": "get_account",
"arguments": {}
}get_analyticsObtener analíticas de envío
Analíticas del panel de los últimos 7, 30 o 90 días: totales de enviados/recibidos/entregados/rebotados/bloqueados/abiertos/con clic/quejas, una línea de tiempo diaria, los principales dominios de envío y los asuntos más frecuentes.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
days | integer | no | Ventana en días: 7, 30 (predeterminado) o 90. (uno de 7, 30, 90) |
{
"name": "get_analytics",
"arguments": {
"days": 30
}
}list_api_keysListar los metadatos de las claves de API
Lista los nombres de las claves de API, los prefijos no secretos y las fechas de último uso. Solo lectura: este servidor MCP no puede crear, rotar ni revocar claves; eso lo hace una persona en el panel. Paginado: el resultado incluye pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parámetro | Tipo | Obligatoria | Descripción |
|---|---|---|---|
limit | integer | no | Tamaño de página. Por defecto, 50. (predeterminado 50; 1–200) |
offset | integer | no | Número de registros que omitir. Use pagination.next_offset de la página anterior. (predeterminado 0; 0–…) |
{
"name": "list_api_keys",
"arguments": {}
}get_service_healthComprobar el estado del servicio SendHQ
Comprueba que la API de SendHQ está operativa y qué proveedor de correo está activo. No necesita una clave de API válida.
Sin parámetros.
{
"name": "get_service_health",
"arguments": {}
}Inventario de cobertura de la API
Cada operación de la API pública y la herramienta que la cubre. Todo lo que un usuario puede hacer en el panel y que tiene API está cubierto; las exclusiones que se indican abajo son deliberadas.
| Endpoint | Herramienta | Notas |
|---|---|---|
| POST /emails | send_email | Enviar un correo |
| POST /emails/batch | send_batch | Enviar hasta 100 mensajes personalizados |
| GET /emails | list_emails | Listar el correo enviado y recibido |
| GET /emails/:id | get_email | Obtener un correo y sus adjuntos |
| PATCH /emails/:id | mark_email | Actualizar leído, archivado, spam, categoría o importancia |
| POST /emails/:id/labels | label_email | Agregar o quitar etiquetas de un correo |
| DELETE /emails/:id | delete_email | Eliminar un correo conservado |
| GET /emails/:id/events | list_email_events | Listar los eventos de entrega de un correo |
| GET /threads/:id | get_thread | Obtener una conversación en orden cronológico |
| GET /labels | list_labels | Listar etiquetas con recuentos de mensajes y reglas de archivado |
| POST /labels | create_label | Crear una etiqueta, opcionalmente con reglas de archivado automático |
| GET /labels/:id | get_label | Obtener una etiqueta por ID o nombre |
| PATCH /labels/:id | update_label | Renombrar, cambiar el color o convertir una etiqueta en categoría |
| DELETE /labels/:id | delete_label | Eliminar una etiqueta sin eliminar su correo |
| POST /labels/:id/rules | create_label_rule | Agregar una regla de archivado automático a una etiqueta |
| DELETE /labels/:id/rules/:rule_id | delete_label_rule | Eliminar una regla de archivado automático |
| POST /drafts | create_draft | Crear un borrador del editor |
| GET /drafts | list_drafts | Listar los borradores del editor |
| GET /drafts/:id | get_draft | Obtener un borrador y sus adjuntos |
| PUT /drafts/:id | update_draft | Reemplazar el contenido de un borrador |
| DELETE /drafts/:id | delete_draft | Descartar un borrador |
| POST /drafts/:id/attachments | upload_attachment | Subir un adjunto a un borrador |
| GET /attachments/:id | download_attachment | Descargar un adjunto privado |
| DELETE /attachments/:id | delete_attachment | Eliminar un adjunto privado |
| GET /sending-identities | list_sending_identities | Listar las identidades de remitente verificadas |
| GET /templates | list_templates | Listar plantillas alojadas |
| POST /templates | create_template | Crear una plantilla alojada |
| GET /templates/:id | get_template | Obtener borradores, versiones y uso |
| PUT /templates/:id/draft | update_template_draft | Guardar automáticamente el borrador de una plantilla |
| POST /templates/:id/draft | create_template_draft | Crear un borrador nuevo a partir de la versión publicada |
| POST /templates/:id/render | render_template | Renderizar la salida exacta del servidor |
| POST /templates/:id/test | send_template_test | Enviar una instantánea de prueba |
| POST /templates/:id/publish | publish_template | Publicar una versión inmutable de la plantilla |
| POST /templates/:id/archive | archive_template | Archivar una plantilla |
| POST /templates/:id/restore | restore_template | Restaurar una plantilla archivada |
| POST /domains | add_domain | Agregar un dominio de envío |
| GET /domains | list_domains | Listar dominios y el estado DNS en caché |
| GET /domains/:id | get_domain | Obtener los detalles de configuración de un dominio |
| POST /domains/:id/verify | verify_domain | Actualizar la verificación de SES y DNS |
| POST /domains/:id/inbound/setup | setup_inbound | Habilitar la recepción de correo entrante de SES |
| POST /domains/:id/inbound/verify | verify_inbound | Verificar el enrutamiento MX de entrada |
| DELETE /domains/:id | delete_domain | Eliminar un dominio |
| GET /dns/provider | get_dns_provider | Detectar el proveedor de DNS autoritativo y los hosts relativos de los registros |
| GET /dns/domain-connect/connect | get_domain_connect_link | Crear un enlace de consentimiento de Domain Connect para la configuración DNS con un clic |
| POST /inboxes | create_inbox | Crear una dirección de entrada |
| GET /inboxes | list_inboxes | Listar direcciones de entrada |
| GET /inboxes/:id | get_inbox | Obtener una dirección de entrada |
| PATCH /inboxes/:id | update_inbox | Renombrar, habilitar o deshabilitar una bandeja de entrada |
| PUT /inboxes/:id/forwarding | set_inbox_forwarding | Reenviar el correo recibido en una bandeja de entrada a otra dirección |
| DELETE /inboxes/:id | delete_inbox | Eliminar una bandeja de entrada conservando los mensajes |
| GET /deliverability/stats | deliverability_stats | Obtener las estadísticas de entrega de 30 días |
| GET /deliverability/reputation | list_sender_reputation | Listar el estado de reputación por identidad de remitente exacta |
| GET /suppressions | list_suppressions | Listar las supresiones del espacio de trabajo |
| DELETE /suppressions/:email | remove_suppression | Quitar una supresión por rebote que cumpla los requisitos |
| GET /blocked-recipients | list_blocked_recipients | Listar rebotes, quejas y bajas |
| GET /account | get_account | Obtener la cuenta, el uso, el estado de facturación y los recuentos del espacio de trabajo con una clave de API |
| GET /analytics | get_analytics | Obtener las analíticas de envío del panel de 7, 30 o 90 días |
| GET /profile | get_account | Gemelo de GET /account solo para sesiones; el servidor MCP lee la ruta con clave de API. |
| POST /billing/checkout | no expuesto | Por diseño, los cambios de facturación solo se hacen con sesión y requieren al propietario de la cuenta en el panel. El estado de facturación se puede leer con get_account. |
| POST /billing/cancel | no expuesto | Por diseño, los cambios de facturación solo se hacen con sesión y requieren al propietario de la cuenta en el panel. El estado de facturación se puede leer con get_account. |
| POST /keys | no expuesto | Excluido deliberadamente: un agente no debe emitir ni destruir credenciales. Las claves las gestiona una persona en el panel. |
| GET /keys | list_api_keys | Listar los metadatos de las claves de API |
| DELETE /keys/:id | no expuesto | Excluido deliberadamente: un agente no debe emitir ni destruir credenciales. Las claves las gestiona una persona en el panel. |
No disponible deliberadamente
| Capacidad | Endpoints | Motivo |
|---|---|---|
| Crear, rotar, revocar o eliminar claves de API | POST /keys, DELETE /keys/:id | Excluido deliberadamente: un agente no debe emitir ni destruir credenciales. Las claves las gestiona una persona en el panel. |
| Iniciar una página de pago o cancelar una suscripción | POST /billing/checkout, POST /billing/cancel | Por diseño, los cambios de facturación solo se hacen con sesión y requieren al propietario de la cuenta en el panel. El estado de facturación se puede leer con get_account. |
| DNS con un clic de Cloudflare (OAuth) | GET /api/dns/cloudflare/connect | Requiere una sesión interactiva del navegador y el consentimiento OAuth de Cloudflare. En su lugar, use los registros de get_domain, los hosts de get_dns_provider o get_domain_connect_link. |
| Registro, inicio de sesión, cierre de sesión, vinculación de cuenta de Google | /api/auth/* | Autenticación humana en el navegador; el servidor MCP se autentica con una clave de API. |
| Formulario de contacto con soporte | POST /api/contact | Formulario público del sitio de marketing para personas, no una operación del espacio de trabajo. |
Catálogo legible por máquinas: /docs/mcp/tools.json (esquemas, anotaciones, correspondencia con endpoints, exclusiones). Versión Markdown de esta página: /docs/mcp.md. Con la CLI instalada, sendhq commands --format json imprime el mismo catálogo.