AhaSend Email API & SMTP relay

oficial

Envía correos electrónicos, averigua por qué falló un correo, configura dominios de envío y gestiona plantillas, contactos, listas y campañas en tu cuenta de AhaSend.

¿Qué puedes hacer con AhaSend Email API & SMTP Relay MCP?

  • Enviar correo electrónico — Pide al asistente que envíe un correo electrónico puntual, un correo con plantilla o un correo de conversación, y que cancele un envío programado.
  • Diagnosticar la entrega — Busca mensajes, averigua por qué falló un correo electrónico y obtén estadísticas de entregabilidad, rebotes y tiempo de entrega.
  • Gestionar dominios — Lista, añade, actualiza y elimina dominios de envío, y comprueba los registros DNS de un dominio.
  • Crear plantillas — Crea, actualiza, publica y versiona plantillas y plantillas de campaña, editando diseños de Simple Editor como marcado AhaML.
  • Gestionar la audiencia — Crea y actualiza contactos, listas y segmentos, añade contactos a listas y previsualiza un segmento.
  • Ejecutar campañas — Crea, duplica, prueba, envía y programa campañas, y luego consulta las estadísticas y los destinatarios de la campaña.

Servidor MCP alojado

npx add-mcp 'https://mcp.ahasend.com/mcp'

Se instala en Claude Code, Codex, Cursor y más

Documentación

ahasend-mcp

Un módulo de Go con herramientas MCP para AhaSend. Con estas herramientas, un agente de IA puede enviar correo, averiguar por qué falló un correo y gestionar dominios, plantillas, contactos, listas, campañas, webhooks, rutas, supresiones, credenciales SMTP y subcuentas.

Cada herramienta llama a la API v2 de AhaSend a través de ahasend-go. Los ámbitos de la clave de API deciden qué puede hacer el agente.

El módulo construye un servidor con el SDK oficial de MCP para Go. Tu programa elige cómo servirlo: stdio, HTTP o cualquier otro transporte del SDK.

go get github.com/AhaSend/ahasend-mcp

Ejemplo

server, err := ahasendmcp.NewServer(
	&mcp.Implementation{Name: "my-app", Version: "1.0.0"},
	ahasendmcp.Options{
		Client:           api.NewAPIClient(api.WithAPIKey(apiKey)),
		AccountID:        accountID,
		DashboardBaseURL: "https://dash.ahasend.com",
		ConfirmationKey:  key, // at least 32 random bytes
	},
)
if err != nil {
	return err
}
return server.Run(ctx, &mcp.StdioTransport{})

Opciones

CampoQué hace
ClientEl cliente de ahasend-go, con la clave de API. Obligatorio.
AccountIDLa cuenta sobre la que trabajan las herramientas. Obligatorio.
DashboardBaseURLLa URL del panel de AhaSend, usada en los enlaces de campaña. Obligatorio.
ConfirmationKeyUn secreto de al menos 32 bytes que firma las preguntas de envío de campaña. Obligatorio.
ScopesLos ámbitos de la clave de API. Solo se muestran las herramientas que la clave puede usar. nil muestra todas las herramientas.
ToolsetsMostrar solo estos conjuntos de herramientas. nil muestra todos.
ReadOnlyMostrar solo las herramientas que no cambian nada.
StatelessEstablécelo en true si sirves por HTTP sin estado.
MaxRecipientsPerSendEl máximo de destinatarios para un envío. Por defecto 50.
ReadInboundPermite que las herramientas de mensajes devuelvan el correo que recibió la cuenta. Desactivado por defecto.
BlockedSi se establece, cada llamada a una herramienta devuelve este texto como error y no hace nada.
RecorderObtiene un registro por llamada a herramienta: nombre de la herramienta, éxito, tipo de error y tiempo empleado. Nunca las entradas ni los resultados.

Si sirves a muchos usuarios, construye un servidor nuevo para cada solicitud con la clave y los ámbitos de ese usuario. Esto es barato. Usa el mismo ConfirmationKey en cada instancia.

Catalogue() enumera cada herramienta con los ámbitos que necesita. OfferedScopes() enumera cada ámbito que usan las herramientas, para una página donde un usuario elige ámbitos.

Herramientas

Conjunto de herramientasHerramientas
sendingsend_email, send_conversation_email, send_template_email, cancel_scheduled_email
diagnosticslist_messages, get_message, diagnose_message, get_deliverability_stats, get_bounce_stats, get_delivery_time_stats
domainslist_domains, get_domain, add_domain, check_domain_dns, update_domain, delete_domain
templateslist_templates, get_template, get_published_template, create_template, update_template, delete_template, discard_template_draft, publish_template, list_template_versions, get_template_version, restore_template_version, list_campaign_templates, get_campaign_template, create_campaign_template, update_campaign_template, delete_campaign_template
audiencelist_contacts, get_contact, create_contact, upsert_contacts, update_contact, delete_contact, list_contact_lists, list_lists, get_list, create_list, update_list, delete_list, list_list_contacts, add_contacts_to_list, upsert_list_contact, remove_contact_from_list, list_segments, get_segment, create_segment, update_segment, delete_segment, preview_segment, list_segment_contacts, list_contact_segments
campaignslist_campaigns, get_campaign, create_campaign, update_campaign, delete_campaign, duplicate_campaign, send_campaign_test, send_campaign, schedule_campaign, unschedule_campaign, get_campaign_stats, list_campaign_recipients
managementget_account, list_webhooks, get_webhook, create_webhook, update_webhook, delete_webhook, list_routes, get_route, create_route, update_route, delete_route, list_suppressions, add_suppression, remove_suppression, list_smtp_credentials, get_smtp_credential, delete_smtp_credential, list_sub_accounts, get_sub_account, create_sub_account, update_sub_account, get_sub_account_usage

Cada herramienta necesita los ámbitos que necesita su endpoint de API. send_campaign y schedule_campaign también necesitan campaigns:read y lists:read, y segments:read para enviar una campaña que usa segmentos. Las herramientas de plantilla de campaña también necesitan campaigns:read. preview_segment, list_segment_contacts y list_contact_segments necesitan contacts:read además de segments:read.

Las herramientas de listado devuelven 20 elementos por defecto y como máximo 100. Pasa el cursor devuelto para obtener la página siguiente.

No hay herramientas para crear claves de API ni credenciales SMTP, cambiar la configuración de la cuenta, la facturación ni los miembros del equipo, eliminar todas las supresiones, ni eliminar o suspender subcuentas.

Diseños del Editor simple y AhaML

Las herramientas de plantillas, plantillas de campaña y campañas leen y escriben un diseño del Editor simple del panel como AhaSend Markup (AhaML), una forma XML del diseño, en el campo markup del contenido. get_template devuelve la copia de trabajo de una plantilla, el borrador mientras existe, para que un agente edite lo que leyó; get_published_template devuelve la copia que usa un envío.

El servidor tiene un recurso, ahasend://docs/ahaml: la referencia de AhaML, con cada etiqueta, atributo, límite y código de error. También está en https://ahasend.com/docs/send-api/ahaml. El recurso se lista en cada conexión, para que un agente sin acceso web pueda leerlo.

Reglas de seguridad

Los envíos de campaña necesitan el sí de una persona. send_campaign y schedule_campaign muestran al usuario un formulario con la hora de envío, el número de contactos, el nombre de la campaña, el asunto, el remitente, las listas y los segmentos, y las listas y segmentos excluidos. Solo envían si el usuario responde que sí. Si la campaña cambia después de la pregunta, la herramienta vuelve a preguntar. Si el cliente no puede mostrar un formulario, la herramienta no envía nada y devuelve un enlace a la campaña en el panel.

Los envíos puntuales tienen un límite de destinatarios. Se rechaza un único envío a más de MaxRecipientsPerSend destinatarios (por defecto 50). Usa una campaña para el correo masivo.

El correo recibido está oculto por defecto. Cualquiera puede enviar correo a las direcciones de entrada de una cuenta, y ese correo puede contener texto que intente engañar al agente. A menos que ReadInbound esté activado, las herramientas de mensajes no devuelven el correo recibido. Cuando está activado, los mensajes recibidos se marcan untrusted: true.

Errores

Cuando la API rechaza una llamada, la herramienta devuelve un error con el mensaje de la API y qué hacer a continuación. Cuando rechaza AhaML, el error enumera los problemas, hasta los primeros 100, cada uno con su código, línea, columna, ruta y pista; el mensaje de la API indica cuántos hay.

Probarlo localmente

cmd/ahasend-mcp-dev sirve todas las herramientas por stdio con tu propia clave de API. Es solo para pruebas.

go build -o ahasend-mcp-dev ./cmd/ahasend-mcp-dev
claude mcp add ahasend \
  -e AHASEND_API_KEY=... -e AHASEND_ACCOUNT_ID=... \
  -- ./ahasend-mcp-dev

Establece AHASEND_BASE_URL para usar una API distinta de la predeterminada.

Licencia

MIT