Integración MCP
Model Context Protocol para Asistentes de IA
Model Context Protocol (MCP) es un estándar abierto introducido por Anthropic que permite a los asistentes de IA (como Claude, Cursor, VS Code Copilot) integrarse con herramientas y fuentes de datos externas.
Cómo Funciona
El asistente de IA se comunica con el servidor MCP a través del protocolo STDIO, y el servidor MCP realiza operaciones en NetSendo usando la API REST v1.
┌─────────────────┐ STDIO ┌─────────────────┐ HTTP/S ┌─────────────────┐ │ Claude/Cursor │ ◄──────────► │ MCP Server │ ◄───────────► │ NetSendo │ │ (AI Client) │ │ (Docker/npx) │ │ (Your inst.) │ └─────────────────┘ └─────────────────┘ └─────────────────┘
Instalación
Requisitos
- Node.js 18+
- Clave API de NetSendo
Pasos
- Generar clave API: Configuración → Claves API
- Instalar Node.js desde nodejs.org
- Configurar tu herramienta de IA usando la configuración de abajo
Claude Desktop y Cursor
{
"mcpServers": {
"netsendo": {
"command": "npx",
"args": [
"-y",
"@netsendo/mcp-client",
"--url",
"https://your-domain.com",
"--api-key",
"YOUR_API_KEY"
]
}
}
}VS Code .vscode/mcp.json
VS Code lee los servidores MCP de .vscode/mcp.json en tu workspace (o de tu perfil de usuario con el comando "MCP: Open User Configuration"). Este archivo usa la clave de primer nivel "servers" en lugar de "mcpServers".
{
"servers": {
"netsendo": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@netsendo/mcp-client",
"--url",
"https://your-domain.com",
"--api-key",
"YOUR_API_KEY"
]
}
}
}Reemplaza https://your-domain.com con la URL de tu instancia NetSendo y YOUR_API_KEY con tu clave API generada.
Requisitos
- Docker instalado y ejecutándose
- Acceso al archivo docker-compose.yml de NetSendo
Pasos
- Generar clave API: Configuración → Claves API
- Marcar la clave API para MCP en la configuración
- Añadir la clave al archivo .env:
MCP_API_KEY=your-api-key - Construir el contenedor MCP:
docker compose build mcp - Configurar tu herramienta de IA usando la configuración de abajo
Claude Desktop y Cursor
{
"mcpServers": {
"netsendo": {
"command": "docker",
"args": [
"compose",
"-f",
"/path/to/NetSendo/docker-compose.yml",
"run",
"--rm",
"-i",
"mcp"
]
}
}
}Reemplaza /path/to/NetSendo con la ruta completa a tu directorio de instalación de NetSendo.
En VS Code, coloca la misma entrada "netsendo" bajo la clave de primer nivel "servers" en .vscode/mcp.json y añade "type": "stdio".
Ubicaciones de Archivos de Configuración
| Cliente | Ubicación del Archivo |
|---|---|
| Claude Desktop (macOS) | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Claude Desktop (Windows) | %APPDATA%\Claude\claude_desktop_config.json |
| Cursor IDE | Configuración → MCP → Añadir Servidor |
| VS Code | .vscode/mcp.json |
Clientes de IA Compatibles
Aplicación de escritorio oficial Claude de Anthropic
IDE con IA integrada para desarrolladores
Visual Studio Code con GitHub Copilot (modo agente)
Funciones Disponibles
Suscriptores
Gestionar contactos – añadir, editar, eliminar
Listas de Contactos
Explorar y organizar listas de correo
Mensajes de Email
Enviar mensajes de correo personalizados
Mensajes SMS
Enviar mensajes SMS a contactos
Etiquetas
Categorizar suscriptores usando etiquetas
Estadísticas
Verificar estadísticas de cuenta y entregabilidad
Herramientas Disponibles
La versión 1.6.0 de @netsendo/mcp-client ofrece 140 herramientas en 21 grupos.
Suscriptores (6)
| Herramienta | Descripción |
|---|---|
| list_subscribers | Listar suscriptores con filtrado y paginación |
| get_subscriber | Obtener un suscriptor por ID o email |
| create_subscriber | Crear un suscriptor, con listas y etiquetas opcionales |
| update_subscriber | Actualizar los datos de un suscriptor |
| delete_subscriber | Eliminar un suscriptor de forma permanente |
| sync_subscriber_tags | Reemplazar todas las etiquetas de un suscriptor |
Listas de contactos y sus ajustes (11)
| Herramienta | Descripción |
|---|---|
| list_contact_lists | Obtener todas las listas con número de suscriptores y buzón predeterminado |
| get_contact_list | Obtener la configuración completa de una lista: ajustes, etiquetas, corregistro, límites y webhook |
| get_list_subscribers | Obtener los suscriptores de una lista |
| get_list_stats | Resumen de la lista: miembros por estado, interacción, crecimiento en 30 días y ajustes de envío |
| create_contact_list | Crear una lista de email o SMS con cualquier ajuste del editor de listas |
| update_contact_list | Cambiar los ajustes de una lista (solo los campos indicados) |
| get_list_cron_settings | Obtener el horario de envío de una lista: franjas semanales, límite por minuto y si sigue los ajustes CRON globales |
| update_list_cron_settings | Definir cuándo y a qué ritmo se envían los mensajes en cola de una lista, o volver a los ajustes globales |
| get_list_defaults | Obtener los valores predeterminados de listas de la cuenta y los ajustes CRON de la instancia |
| update_list_defaults | Cambiar los valores predeterminados de listas de la cuenta (solo las claves indicadas) |
| delete_contact_list | Eliminar una lista; los contactos permanecen en la cuenta |
Etiquetas y campos personalizados (9)
| Herramienta | Descripción |
|---|---|
| list_tags | Obtener las etiquetas de la cuenta con nombre, color y descripción |
| list_custom_fields | Obtener los campos personalizados de la cuenta con su marcador y ámbito |
| create_tag | Crear una etiqueta (los nombres son únicos por cuenta) |
| update_tag | Renombrar una etiqueta o cambiar su color y descripción |
| delete_tag | Eliminar una etiqueta y quitarla de suscriptores, listas y mensajes |
| get_custom_field | Obtener un campo personalizado con todos sus ajustes |
| create_custom_field | Crear un campo personalizado global o de una lista; su nombre pasa a ser un marcador |
| update_custom_field | Cambiar la etiqueta, el tipo, las opciones o el nombre de un campo (el ámbito no cambia) |
| delete_custom_field | Eliminar un campo personalizado y todos los valores guardados en él |
Importación (2)
| Herramienta | Descripción |
|---|---|
| preview_list_import | Simular una importación: mapeo de columnas, direcciones no válidas y duplicados, sin guardar nada |
| import_subscribers | Importar contactos a una lista desde CSV, TSV, JSON o direcciones sueltas |
Exportación (3)
| Herramienta | Descripción |
|---|---|
| export_list | Exportar miembros de una lista al momento como JSON, CSV o NDJSON, con filtros |
| get_export_fields | Mostrar las columnas exportables, incluidos los campos personalizados |
| queue_list_export | Encolar una exportación CSV completa; el titular recibe un enlace de descarga |
Higiene de listas (5)
| Herramienta | Descripción |
|---|---|
| analyze_list_health | Informe de higiene (solo lectura) con puntuación de 0–100 y recomendaciones |
| clean_list | Aplicar una acción a los miembros de las categorías elegidas (simulación por defecto) |
| dedupe_list | Fusionar direcciones duplicadas, incluidos los alias de Gmail con puntos y +etiqueta |
| verify_list_emails | Comprobar la entregabilidad: sintaxis, direcciones desechables y genéricas, dominios con errores, registros MX |
| get_hygiene_options | Devolver las categorías y acciones que acepta clean_list |
Miembros de listas (6)
| Herramienta | Descripción |
|---|---|
| add_list_members | Añadir contactos existentes a una lista |
| remove_list_members | Quitar contactos de una lista y cancelar sus mensajes pendientes |
| set_member_status | Cambiar el estado: activo, inactivo, dado de baja o rebotado |
| copy_list_members | Copiar contactos a otra lista del mismo canal |
| move_list_members | Mover contactos a otra lista del mismo canal |
| tag_list_members | Añadir o quitar etiquetas en un segmento de una lista |
Actividad e interacción (3)
| Herramienta | Descripción |
|---|---|
| get_list_activity | Feed de eventos de una lista: altas, bajas, rebotes, envíos, aperturas y clics |
| get_list_engagement | Rendimiento de la lista: crecimiento, abandono, tasas de apertura y clic, mejores mensajes y enlaces |
| get_subscriber_activity | Historial completo de un contacto: listas, etiquetas, mensajes pendientes y cronología |
Lista de supresión (3)
| Herramienta | Descripción |
|---|---|
| list_suppressions | Mostrar la lista de supresión de la cuenta con motivo y fecha |
| suppress_emails | Añadir direcciones a la lista de supresión y darlas de baja de todas las listas |
| unsuppress_emails | Levantar la supresión de direcciones (no vuelve a suscribir a nadie) |
Notificaciones (2)
| Herramienta | Descripción |
|---|---|
| send_notification | Publicar una notificación en el centro de notificaciones del titular de la cuenta |
| list_notifications | Leer las notificaciones recientes del titular y cuántas quedan sin leer |
Mensajes de email y SMS (6)
| Herramienta | Descripción |
|---|---|
| list_mailboxes | Obtener los buzones de envío disponibles |
| send_email | Enviar un email individual a un suscriptor |
| get_email_status | Verificar el estado de entrega del email |
| list_sms_providers | Obtener los proveedores SMS disponibles |
| send_sms | Enviar un SMS individual a un suscriptor o número de teléfono |
| get_sms_status | Verificar el estado de entrega del SMS |
Campañas (17)
| Herramienta | Descripción |
|---|---|
| list_campaigns | Listar campañas de email y SMS con filtrado |
| get_campaign | Obtener todos los campos editables de una campaña, incluidas listas, disparador y traducciones |
| create_campaign | Crear una campaña de email o SMS (como borrador) |
| update_campaign | Actualizar un borrador o una campaña programada |
| set_campaign_lists | Definir las listas de destinatarios de una campaña |
| set_campaign_exclusions | Definir listas de exclusión cuyos suscriptores no recibirán la campaña |
| schedule_campaign | Programar una campaña, con soporte de zonas horarias |
| send_campaign | Enviar una campaña ahora o activar un autorespondedor |
| get_campaign_stats | Obtener las estadísticas de envío de una campaña |
| delete_campaign | Eliminar un borrador o una campaña programada |
| send_campaign_test | Enviar una prueba de una campaña a hasta 5 direcciones; no se pone nada en cola |
| preview_campaign | Mostrar una campaña tal como la ve un destinatario, con los marcadores resueltos |
| duplicate_campaign | Copiar una campaña como nuevo borrador |
| set_campaign_active | Activar o pausar un autorespondedor |
| get_campaign_recipient_count | Contar a quién llegaría una campaña ahora, tras exclusiones y filtros |
| resend_campaign_failed | Volver a poner en cola a los destinatarios cuyo envío falló (requiere confirmación) |
| send_campaign_to_missed | Enviar ahora un autorespondedor activo a los suscriptores que se lo perdieron (requiere confirmación) |
Tests A/B (7)
| Herramienta | Descripción |
|---|---|
| list_ab_tests | Listar tests A/B, filtrados por estado o campaña |
| create_ab_test | Crear un test A/B para una campaña |
| add_ab_variant | Añadir una variante a un test A/B |
| start_ab_test | Iniciar un test A/B (mínimo 2 variantes) |
| end_ab_test | Finalizar un test en curso y, opcionalmente, elegir el ganador |
| get_ab_test_results | Obtener resultados y estadísticas detallados de un test |
| delete_ab_test | Eliminar un test A/B que no esté en curso |
Embudos (automatización) (12)
| Herramienta | Descripción |
|---|---|
| list_funnels | Listar los embudos de automatización |
| get_funnel | Obtener un embudo con todos sus pasos y estadísticas |
| create_funnel | Crear un embudo de automatización |
| update_funnel | Renombrar un embudo o cambiar su disparador |
| add_funnel_step | Añadir un paso a un embudo y conectarlo |
| update_funnel_step | Cambiar los ajustes y conexiones de un paso |
| delete_funnel_step | Eliminar un paso y reconectar el embudo sin él |
| enroll_subscriber_in_funnel | Incluir al instante a un suscriptor en un embudo activo |
| activate_funnel | Activar un embudo para nuevos suscriptores |
| pause_funnel | Pausar un embudo |
| get_funnel_stats | Obtener estadísticas del embudo: suscriptores y tasas de finalización |
| delete_funnel | Eliminar un embudo (primero hay que pausarlo) |
Personalización (1)
| Herramienta | Descripción |
|---|---|
| list_placeholders | Obtener los marcadores para personalizar contenido de email y SMS |
Webhooks (8)
| Herramienta | Descripción |
|---|---|
| list_webhook_events | Listar los eventos a los que puede suscribirse un webhook |
| list_webhooks | Listar los webhooks de la cuenta con estado, número de fallos y última entrega |
| get_webhook | Obtener los ajustes de un webhook (sin el secreto) |
| create_webhook | Registrar un webhook para los eventos elegidos; el secreto de firma se muestra una sola vez |
| update_webhook | Cambiar el nombre, la URL, los eventos o el estado de un webhook |
| delete_webhook | Eliminar un webhook de forma permanente |
| test_webhook | Enviar una entrega de prueba y comprobar si el endpoint respondió con 2xx |
| regenerate_webhook_secret | Generar un nuevo secreto de firma; el anterior deja de funcionar al instante |
Plantillas de email (13)
| Herramienta | Descripción |
|---|---|
| list_templates | Listar las plantillas de email propias y las plantillas de inicio del sistema |
| get_template | Obtener una plantilla con su HTML, MJML, bloques del editor y ajustes |
| create_template | Crear una plantilla de email a partir de HTML o de bloques del editor |
| update_template | Actualizar una plantilla propia (solo los campos indicados) |
| delete_template | Eliminar una plantilla propia; las campañas creadas con ella conservan su contenido |
| duplicate_template | Copiar una plantilla propia o del sistema a la cuenta para editarla |
| preview_template | Resolver los marcadores de una plantilla para un suscriptor o datos de ejemplo; no se envía nada |
| list_template_categories | Listar las categorías de plantillas del sistema y propias |
| list_template_block_types | Listar los tipos de bloque del editor con su contenido y ajustes predeterminados |
| list_template_blocks | Listar los bloques guardados del editor, propios y globales |
| create_template_block | Guardar un bloque reutilizable del editor, como un encabezado, un pie o un botón |
| update_template_block | Cambiar un bloque guardado propio |
| delete_template_block | Eliminar un bloque guardado propio; las plantillas que lo contienen no cambian |
Emails y páginas del sistema (9)
| Herramienta | Descripción |
|---|---|
| list_system_emails | Listar los emails automáticos del sistema (doble opt-in, bienvenida, baja…) de una lista o globales |
| get_system_email | Obtener un email del sistema con su asunto, HTML y marcadores disponibles |
| update_system_email | Cambiar el asunto, el contenido o el estado de un email del sistema, para una lista o de forma global |
| set_system_email_active | Activar o desactivar un email del sistema para una lista |
| reset_system_email | Quitar la versión propia de una lista para que vuelva a usar el email global |
| list_system_pages | Listar las páginas del sistema que se muestran tras el alta, la activación, la baja y el cambio de preferencias |
| get_system_page | Obtener una página del sistema con su título, HTML, acceso y marcadores |
| update_system_page | Cambiar el título, el contenido o el acceso de una página del sistema, para una lista o de forma global |
| reset_system_page | Quitar la versión propia de una lista para que vuelva a usar la página global |
Formularios de suscripción (6)
| Herramienta | Descripción |
|---|---|
| list_forms | Listar los formularios de suscripción con estado, lista, número de envíos y URL alojada |
| get_form | Obtener la configuración de un formulario con su URL alojada y los códigos de inserción HTML, JS e iframe |
| create_form | Crear un formulario de suscripción para una lista de email (empieza como borrador) |
| update_form | Cambiar un formulario, publicarlo o detener las altas |
| delete_form | Eliminar un formulario; las páginas que lo insertan dejan de funcionar y los suscriptores se conservan |
| duplicate_form | Copiar un formulario como nuevo borrador con un nuevo código de inserción |
Reglas de automatización (9)
| Herramienta | Descripción |
|---|---|
| get_automation_options | Obtener el catálogo de eventos, condiciones y acciones para crear reglas |
| list_automations | Listar las reglas de automatización con disparador, acciones, estado y número de ejecuciones |
| get_automation | Obtener una regla completa, con estadísticas de 7 días |
| create_automation | Crear una regla: cuando ocurre un evento y se cumplen las condiciones, se ejecutan las acciones |
| update_automation | Cambiar una regla (solo los campos indicados) |
| set_automation_active | Activar, desactivar o alternar una regla |
| duplicate_automation | Copiar una regla; la copia empieza inactiva |
| delete_automation | Eliminar una regla de forma permanente, con su registro de ejecuciones |
| get_automation_logs | Obtener el registro de ejecuciones de una regla: estado, suscriptor y resultado de cada acción |
Cuenta (2)
| Herramienta | Descripción |
|---|---|
| test_connection | Probar la conexión con la API y las credenciales |
| get_account_info | Obtener información de la cuenta conectada |
Además de las herramientas, el cliente ofrece 5 prompts predefinidos (analyze_subscribers, send_newsletter, cleanup_list, import_contacts, list_report) y 3 recursos (netsendo://info, netsendo://stats, netsendo://lists).
Consultas de Ejemplo
Seguridad
Solución de Problemas
- Asegúrate de que NetSendo esté ejecutándose y sea accesible
- Verifica que la clave API sea válida
- Verifica que la URL sea correcta (incluye https://)
Reinicia tu herramienta de IA después de cambios de configuración.
Instala Node.js desde nodejs.org (incluye npm/npx).
Múltiples Instancias de NetSendo
Puedes conectarte a múltiples instancias de NetSendo usando diferentes nombres de servidor:
{
"mcpServers": {
"netsendo-production": {
"command": "npx",
"args": ["-y", "@netsendo/mcp-client", "--url", "https://app.company.com", "--api-key", "prod-key"]
},
"netsendo-staging": {
"command": "npx",
"args": ["-y", "@netsendo/mcp-client", "--url", "https://staging.company.com", "--api-key", "staging-key"]
}
}
}
