@mbermeo/sendia-cli
v0.1.2
Published
CLI + MCP server + REST API + Web para gestionar envíos SMS y Email via Sendia
Readme
sendia-cli
CLI + MCP server + REST API + Web para gestionar envíos SMS y Email vía Sendia.
Diseñado para ser usado por agentes IA (Claude Code, Claude Desktop, Cursor) a través del protocolo MCP, y también directamente desde la terminal o como servicio web con dashboard.
Instalación
# Sin instalar (recomendado para MCP)
npx @mbermeo/sendia-cli --help
# Instalar globalmente
npm install -g @mbermeo/sendia-cliRequiere Node.js >= 18.
Variables de entorno
Copia .env.example a .env y rellena tus credenciales:
cp .env.example .env| Variable | Descripción |
|---|---|
| SENDIA_SMS_USER | Usuario SMS de Sendia |
| SENDIA_SMS_PASS | Contraseña SMS de Sendia |
| SENDIA_SMS_URL | URL del servicio MT (default: https://secure.sendia.ai/Service/MT) |
| SENDIA_EMAIL_USER | Usuario Email de Sendia |
| SENDIA_EMAIL_PASS | Contraseña Email de Sendia |
| SENDIA_EMAIL_URL | URL del servicio Email (default: https://secure.sendia.ai/Email/api) |
| SENDIA_DB_PATH | Ruta al archivo SQLite (default: ~/.sendia/sendia.db) |
| PORT | Puerto del servidor web (default: 47891) |
Uso como MCP server (para agentes IA)
El modo MCP es el uso principal. Permite que agentes como Claude Code o Claude Desktop envíen SMS, gestionen templates de email, consulten campañas y estadísticas de forma autónoma.
Configurar en Claude Code
Agrega esto a tu archivo de configuración MCP (~/.claude/mcp.json o en la configuración de Claude Code):
Con npx (sin instalación global):
{
"mcpServers": {
"sendia": {
"command": "npx",
"args": ["-y", "@mbermeo/sendia-cli", "mcp"],
"env": {
"SENDIA_SMS_USER": "tu_usuario_sms",
"SENDIA_SMS_PASS": "tu_password_sms",
"SENDIA_EMAIL_USER": "tu_usuario_email",
"SENDIA_EMAIL_PASS": "tu_password_email",
"SENDIA_DB_PATH": "/ruta/opcional/sendia.db"
}
}
}
}Con instalación global (npm install -g @mbermeo/sendia-cli):
{
"mcpServers": {
"sendia": {
"command": "sendia",
"args": ["mcp"],
"env": {
"SENDIA_SMS_USER": "tu_usuario_sms",
"SENDIA_SMS_PASS": "tu_password_sms",
"SENDIA_EMAIL_USER": "tu_usuario_email",
"SENDIA_EMAIL_PASS": "tu_password_email",
"SENDIA_DB_PATH": "/ruta/opcional/sendia.db"
}
}
}
}Configurar en Claude Desktop
En ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"sendia": {
"command": "npx",
"args": ["-y", "@mbermeo/sendia-cli", "mcp"],
"env": {
"SENDIA_SMS_USER": "...",
"SENDIA_SMS_PASS": "...",
"SENDIA_EMAIL_USER": "...",
"SENDIA_EMAIL_PASS": "..."
}
}
}
}Verificar con el inspector MCP
npx @modelcontextprotocol/inspector sendia mcpTools disponibles
| Tool | Descripción | Input requerido |
|---|---|---|
| sms_send | Envía un SMS | phone, text |
| sms_send_batch | Envía lote de SMS en secuencia (uno por uno) | messages[] |
| sms_test | Envía SMS de prueba ("test") | phone |
| email_token | Genera token JWT para la API Email | — |
| email_template_create | Crea un template de email | name, subject, html, fromName, fromMail |
| email_template_get | Obtiene info de un template | id |
| email_template_edit | Edita un template existente | id, name, subject, html, fromName, fromMail |
| email_send | Envía un email usando un template | template, to |
| email_send_batch | Envía lote de emails en secuencia (uno por uno) | template, recipients[] |
| campaign_list | Lista campañas de la BD local | status?, limit? |
| campaign_status | Estado detallado con desglose de envíos | id? |
| campaign_sends | Envíos individuales de una campaña | id, page?, perPage? |
| stats_global | Métricas globales agregadas | — |
Uso como CLI
# Ayuda general
sendia --help
# SMS
sendia sms send --phone 56912345678 --text "Hola desde Sendia"
sendia sms test --phone 56912345678
sendia sms batch --phones 56911111111,56922222222 --text "Promo 2x1"
sendia sms batch --batch '[{"phone":"56911111111","text":"Hola A"},{"phone":"56922222222","text":"Hola B"}]'
# Email — token
sendia email token
# Email — templates
sendia email template create \
--name "Bienvenida" \
--subject "Bienvenido a nuestro servicio" \
--html template.html \
--from-name "Mi Empresa" \
--from-mail "[email protected]" \
--options 2
sendia email template get --id 42
sendia email template edit --id 42 --name "Bienvenida v2" \
--subject "¡Bienvenido!" --html template_v2.html \
--from-name "Mi Empresa" --from-mail "[email protected]"
# Email — enviar
sendia email send --template 42 --to [email protected] \
--op1 "Juan" --op2 "Plan Pro"
# Email — envío batch (uno por uno)
sendia email batch --template 42 --to [email protected],[email protected] --op1 "Cliente"
sendia email batch --template 42 --batch '[{"to":"[email protected]","op1":"Ana"},{"to":"[email protected]","op1":"Beto"}]'
# Campañas
sendia campaign list --status active --limit 10 --json
sendia campaign status --id 5
sendia campaign status --json
# Iniciar servidor web
sendia serve --port 3000Servidor web (sendia serve)
Inicia un servidor Express con:
- Dashboard web →
http://localhost:3000/— vista en tiempo real de campañas, envíos y estadísticas (SSE). - REST API →
http://localhost:3000/api/— endpoints para campañas, SMS, Email y estadísticas. - Webhook Sendia →
GET|POST http://localhost:3000/sendia/status— recibe callbacks de delivery del proveedor. - Health check →
http://localhost:3000/api/health
Endpoints principales
| Método | Ruta | Descripción |
|---|---|---|
| GET | /api/health | Estado del servicio |
| GET | /api/campaigns | Listar campañas |
| GET | /api/campaigns/:id | Detalle de campaña |
| GET | /api/campaigns/:id/sends | Envíos de una campaña |
| GET | /api/stats | Estadísticas globales |
| POST | /api/sms/send | Enviar SMS |
| POST | /api/email/token | Generar token Email |
| POST | /api/email/templates | Crear template |
| GET | /api/email/templates/:id | Obtener template |
| PUT | /api/email/templates/:id | Editar template |
| POST | /api/email/send | Enviar email |
| GET/POST | /sendia/status | Webhook callbacks de delivery |
Base de datos SQLite
La aplicación usa SQLite de forma autocontenida — no requiere servidor de base de datos externo.
- Ubicación por defecto:
~/.sendia/sendia.db - Override:
SENDIA_DB_PATH=/ruta/personalizada/sendia.db - Las tablas se crean automáticamente al primer uso.
Tablas:
campaigns— registro de campañas de envíosends— envíos individuales por campañaevents— eventos de delivery (webhooks)sendia_status_callbacks— callbacks raw de Sendia
Backup:
# Backup simple
cp ~/.sendia/sendia.db ~/backup/sendia.db
# O con sqlite3
sqlite3 ~/.sendia/sendia.db ".backup ~/backup/sendia.db"Build y publicación en npm
El código se publica ofuscado para proteger la integración con Sendia:
# Generar dist/ con código ofuscado
npm run build
# Verificar que funciona
node dist/bin/sendia.js --help
# Publicar (primera vez: npm login)
npm run releaseLicencia
ISC
