Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Descripción del creador (original en inglés)
Send notifications across 23 channels with 36 AI-ready tools. One API, zero boilerplate.
Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.
Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.
Elige la app de IA que usas y copia la configuración.
NOTIFY_CHANNELS_EMAIL_HOST, NOTIFY_CHANNELS_EMAIL_PORT, NOTIFY_CHANNELS_EMAIL_USERNAME, NOTIFY_CHANNELS_EMAIL_PASSWORD, NOTIFY_CHANNELS_EMAIL_FROM, NOTIFY_CHANNELS_SMS_ACCOUNTSID, NOTIFY_CHANNELS_SMS_AUTHTOKEN, NOTIFY_CHANNELS_SMS_FROMNUMBER, NOTIFY_CHANNELS_SLACK_WEBHOOKURL, NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN, NOTIFY_CHANNELS_TELEGRAM_CHATID, NOTIFY_CHANNELS_DISCORD_WEBHOOKURL, NOTIFY_CHANNELS_TEAMS_WEBHOOKURL, NOTIFY_CHANNELS_GOOGLECHAT_WEBHOOKURL, NOTIFY_CHANNELS_TWITTER_APIKEY, NOTIFY_CHANNELS_TWITTER_APISECRET, NOTIFY_CHANNELS_TWITTER_ACCESSTOKEN, NOTIFY_CHANNELS_TWITTER_ACCESSTOKENSECRET, NOTIFY_CHANNELS_LINKEDIN_ACCESSTOKEN, NOTIFY_CHANNELS_LINKEDIN_ORGANIZATIONID, NOTIFY_CHANNELS_WHATSAPP_ACCOUNTSID, NOTIFY_CHANNELS_WHATSAPP_AUTHTOKEN, NOTIFY_CHANNELS_WHATSAPP_FROMNUMBER, NOTIFY_CHANNELS_PUSH_FIREBASECREDENTIALS, NOTIFY_CHANNELS_NOTION_APIKEY, NOTIFY_CHANNELS_NOTION_DATABASEID, NOTIFY_CHANNELS_TWITCH_CLIENTID, NOTIFY_CHANNELS_TWITCH_CLIENTSECRET, NOTIFY_CHANNELS_TWITCH_BROADCASTERID, NOTIFY_CHANNELS_YOUTUBE_CLIENTID, NOTIFY_CHANNELS_YOUTUBE_CLIENTSECRET, NOTIFY_CHANNELS_YOUTUBE_REFRESHTOKEN, NOTIFY_CHANNELS_YOUTUBE_LIVECHATID, NOTIFY_CHANNELS_INSTAGRAM_ACCESSTOKEN, NOTIFY_CHANNELS_INSTAGRAM_USERID, NOTIFY_CHANNELS_SENDGRID_APIKEY, NOTIFY_CHANNELS_SENDGRID_FROMEMAIL, NOTIFY_CHANNELS_TIKTOKSHOP_APPKEY, NOTIFY_CHANNELS_TIKTOKSHOP_APPSECRET, NOTIFY_CHANNELS_TIKTOKSHOP_ACCESSTOKEN, NOTIFY_CHANNELS_TIKTOKSHOP_SHOPID, NOTIFY_CHANNELS_FACEBOOK_PAGEACCESSTOKEN, NOTIFY_CHANNELS_FACEBOOK_PAGEID, NOTIFY_CHANNELS_AWSSNS_ACCESSKEYID, NOTIFY_CHANNELS_AWSSNS_SECRETACCESSKEY, NOTIFY_CHANNELS_AWSSNS_REGION, NOTIFY_CHANNELS_MAILGUN_APIKEY, NOTIFY_CHANNELS_MAILGUN_DOMAIN, NOTIFY_CHANNELS_MAILGUN_FROMEMAIL, NOTIFY_CHANNELS_PAGERDUTY_APIKEYLos valores marcados como secretos son llaves de tu cuenta. Nunca los compartas ni los pegues en un chat.
Necesitas
¿Qué app usas?
Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.
Abre Claude Desktop → Settings → Developer → Edit Config y pega esto en claude_desktop_config.json
{
"mcpServers": {
"notify-hub": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"NOTIFY_CHANNELS_EMAIL_HOST",
"-e",
"NOTIFY_CHANNELS_EMAIL_PORT",
"-e",
"NOTIFY_CHANNELS_EMAIL_USERNAME",
"-e",
"NOTIFY_CHANNELS_EMAIL_PASSWORD",
"-e",
"NOTIFY_CHANNELS_EMAIL_FROM",
"-e",
"NOTIFY_CHANNELS_SMS_ACCOUNTSID",
"-e",
"NOTIFY_CHANNELS_SMS_AUTHTOKEN",
"-e",
"NOTIFY_CHANNELS_SMS_FROMNUMBER",
"-e",
"NOTIFY_CHANNELS_SLACK_WEBHOOKURL",
"-e",
"NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN",
"-e",
"NOTIFY_CHANNELS_TELEGRAM_CHATID",
"-e",
"NOTIFY_CHANNELS_DISCORD_WEBHOOKURL",
"-e",
"NOTIFY_CHANNELS_TEAMS_WEBHOOKURL",
"-e",
"NOTIFY_CHANNELS_GOOGLECHAT_WEBHOOKURL",
"-e",
"NOTIFY_CHANNELS_TWITTER_APIKEY",
"-e",
"NOTIFY_CHANNELS_TWITTER_APISECRET",
"-e",
"NOTIFY_CHANNELS_TWITTER_ACCESSTOKEN",
"-e",
"NOTIFY_CHANNELS_TWITTER_ACCESSTOKENSECRET",
"-e",
"NOTIFY_CHANNELS_LINKEDIN_ACCESSTOKEN",
"-e",
"NOTIFY_CHANNELS_LINKEDIN_ORGANIZATIONID",
"-e",
"NOTIFY_CHANNELS_WHATSAPP_ACCOUNTSID",
"-e",
"NOTIFY_CHANNELS_WHATSAPP_AUTHTOKEN",
"-e",
"NOTIFY_CHANNELS_WHATSAPP_FROMNUMBER",
"-e",
"NOTIFY_CHANNELS_PUSH_FIREBASECREDENTIALS",
"-e",
"NOTIFY_CHANNELS_NOTION_APIKEY",
"-e",
"NOTIFY_CHANNELS_NOTION_DATABASEID",
"-e",
"NOTIFY_CHANNELS_TWITCH_CLIENTID",
"-e",
"NOTIFY_CHANNELS_TWITCH_CLIENTSECRET",
"-e",
"NOTIFY_CHANNELS_TWITCH_BROADCASTERID",
"-e",
"NOTIFY_CHANNELS_YOUTUBE_CLIENTID",
"-e",
"NOTIFY_CHANNELS_YOUTUBE_CLIENTSECRET",
"-e",
"NOTIFY_CHANNELS_YOUTUBE_REFRESHTOKEN",
"-e",
"NOTIFY_CHANNELS_YOUTUBE_LIVECHATID",
"-e",
"NOTIFY_CHANNELS_INSTAGRAM_ACCESSTOKEN",
"-e",
"NOTIFY_CHANNELS_INSTAGRAM_USERID",
"-e",
"NOTIFY_CHANNELS_SENDGRID_APIKEY",
"-e",
"NOTIFY_CHANNELS_SENDGRID_FROMEMAIL",
"-e",
"NOTIFY_CHANNELS_TIKTOKSHOP_APPKEY",
"-e",
"NOTIFY_CHANNELS_TIKTOKSHOP_APPSECRET",
"-e",
"NOTIFY_CHANNELS_TIKTOKSHOP_ACCESSTOKEN",
"-e",
"NOTIFY_CHANNELS_TIKTOKSHOP_SHOPID",
"-e",
"NOTIFY_CHANNELS_FACEBOOK_PAGEACCESSTOKEN",
"-e",
"NOTIFY_CHANNELS_FACEBOOK_PAGEID",
"-e",
"NOTIFY_CHANNELS_AWSSNS_ACCESSKEYID",
"-e",
"NOTIFY_CHANNELS_AWSSNS_SECRETACCESSKEY",
"-e",
"NOTIFY_CHANNELS_AWSSNS_REGION",
"-e",
"NOTIFY_CHANNELS_MAILGUN_APIKEY",
"-e",
"NOTIFY_CHANNELS_MAILGUN_DOMAIN",
"-e",
"NOTIFY_CHANNELS_MAILGUN_FROMEMAIL",
"-e",
"NOTIFY_CHANNELS_PAGERDUTY_APIKEY",
"ghcr.io/gabrielbbaldez/notify-hub:1.1.0"
],
"env": {
"NOTIFY_CHANNELS_EMAIL_HOST": "your-value",
"NOTIFY_CHANNELS_EMAIL_PORT": "your-value",
"NOTIFY_CHANNELS_EMAIL_USERNAME": "your-value",
"NOTIFY_CHANNELS_EMAIL_PASSWORD": "your-value",
"NOTIFY_CHANNELS_EMAIL_FROM": "your-value",
"NOTIFY_CHANNELS_SMS_ACCOUNTSID": "your-value",
"NOTIFY_CHANNELS_SMS_AUTHTOKEN": "your-value",
"NOTIFY_CHANNELS_SMS_FROMNUMBER": "your-value",
"NOTIFY_CHANNELS_SLACK_WEBHOOKURL": "your-value",
"NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN": "your-value",
"NOTIFY_CHANNELS_TELEGRAM_CHATID": "your-value",
"NOTIFY_CHANNELS_DISCORD_WEBHOOKURL": "your-value",
"NOTIFY_CHANNELS_TEAMS_WEBHOOKURL": "your-value",
"NOTIFY_CHANNELS_GOOGLECHAT_WEBHOOKURL": "your-value",
"NOTIFY_CHANNELS_TWITTER_APIKEY": "your-value",
"NOTIFY_CHANNELS_TWITTER_APISECRET": "your-value",
"NOTIFY_CHANNELS_TWITTER_ACCESSTOKEN": "your-value",
"NOTIFY_CHANNELS_TWITTER_ACCESSTOKENSECRET": "your-value",
"NOTIFY_CHANNELS_LINKEDIN_ACCESSTOKEN": "your-value",
"NOTIFY_CHANNELS_LINKEDIN_ORGANIZATIONID": "your-value",
"NOTIFY_CHANNELS_WHATSAPP_ACCOUNTSID": "your-value",
"NOTIFY_CHANNELS_WHATSAPP_AUTHTOKEN": "your-value",
"NOTIFY_CHANNELS_WHATSAPP_FROMNUMBER": "your-value",
"NOTIFY_CHANNELS_PUSH_FIREBASECREDENTIALS": "your-value",
"NOTIFY_CHANNELS_NOTION_APIKEY": "your-value",
"NOTIFY_CHANNELS_NOTION_DATABASEID": "your-value",
"NOTIFY_CHANNELS_TWITCH_CLIENTID": "your-value",
"NOTIFY_CHANNELS_TWITCH_CLIENTSECRET": "your-value",
"NOTIFY_CHANNELS_TWITCH_BROADCASTERID": "your-value",
"NOTIFY_CHANNELS_YOUTUBE_CLIENTID": "your-value",
"NOTIFY_CHANNELS_YOUTUBE_CLIENTSECRET": "your-value",
"NOTIFY_CHANNELS_YOUTUBE_REFRESHTOKEN": "your-value",
"NOTIFY_CHANNELS_YOUTUBE_LIVECHATID": "your-value",
"NOTIFY_CHANNELS_INSTAGRAM_ACCESSTOKEN": "your-value",
"NOTIFY_CHANNELS_INSTAGRAM_USERID": "your-value",
"NOTIFY_CHANNELS_SENDGRID_APIKEY": "your-value",
"NOTIFY_CHANNELS_SENDGRID_FROMEMAIL": "your-value",
"NOTIFY_CHANNELS_TIKTOKSHOP_APPKEY": "your-value",
"NOTIFY_CHANNELS_TIKTOKSHOP_APPSECRET": "your-value",
"NOTIFY_CHANNELS_TIKTOKSHOP_ACCESSTOKEN": "your-value",
"NOTIFY_CHANNELS_TIKTOKSHOP_SHOPID": "your-value",
"NOTIFY_CHANNELS_FACEBOOK_PAGEACCESSTOKEN": "your-value",
"NOTIFY_CHANNELS_FACEBOOK_PAGEID": "your-value",
"NOTIFY_CHANNELS_AWSSNS_ACCESSKEYID": "your-value",
"NOTIFY_CHANNELS_AWSSNS_SECRETACCESSKEY": "your-value",
"NOTIFY_CHANNELS_AWSSNS_REGION": "your-value",
"NOTIFY_CHANNELS_MAILGUN_APIKEY": "your-value",
"NOTIFY_CHANNELS_MAILGUN_DOMAIN": "your-value",
"NOTIFY_CHANNELS_MAILGUN_FROMEMAIL": "your-value",
"NOTIFY_CHANNELS_PAGERDUTY_APIKEY": "your-value"
}
}
}
}Ejecuta esto en tu terminal
claude mcp add notify-hub --env NOTIFY_CHANNELS_EMAIL_HOST=your-value --env NOTIFY_CHANNELS_EMAIL_PORT=your-value --env NOTIFY_CHANNELS_EMAIL_USERNAME=your-value --env NOTIFY_CHANNELS_EMAIL_PASSWORD=your-value --env NOTIFY_CHANNELS_EMAIL_FROM=your-value --env NOTIFY_CHANNELS_SMS_ACCOUNTSID=your-value --env NOTIFY_CHANNELS_SMS_AUTHTOKEN=your-value --env NOTIFY_CHANNELS_SMS_FROMNUMBER=your-value --env NOTIFY_CHANNELS_SLACK_WEBHOOKURL=your-value --env NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN=your-value --env NOTIFY_CHANNELS_TELEGRAM_CHATID=your-value --env NOTIFY_CHANNELS_DISCORD_WEBHOOKURL=your-value --env NOTIFY_CHANNELS_TEAMS_WEBHOOKURL=your-value --env NOTIFY_CHANNELS_GOOGLECHAT_WEBHOOKURL=your-value --env NOTIFY_CHANNELS_TWITTER_APIKEY=your-value --env NOTIFY_CHANNELS_TWITTER_APISECRET=your-value --env NOTIFY_CHANNELS_TWITTER_ACCESSTOKEN=your-value --env NOTIFY_CHANNELS_TWITTER_ACCESSTOKENSECRET=your-value --env NOTIFY_CHANNELS_LINKEDIN_ACCESSTOKEN=your-value --env NOTIFY_CHANNELS_LINKEDIN_ORGANIZATIONID=your-value --env NOTIFY_CHANNELS_WHATSAPP_ACCOUNTSID=your-value --env NOTIFY_CHANNELS_WHATSAPP_AUTHTOKEN=your-value --env NOTIFY_CHANNELS_WHATSAPP_FROMNUMBER=your-value --env NOTIFY_CHANNELS_PUSH_FIREBASECREDENTIALS=your-value --env NOTIFY_CHANNELS_NOTION_APIKEY=your-value --env NOTIFY_CHANNELS_NOTION_DATABASEID=your-value --env NOTIFY_CHANNELS_TWITCH_CLIENTID=your-value --env NOTIFY_CHANNELS_TWITCH_CLIENTSECRET=your-value --env NOTIFY_CHANNELS_TWITCH_BROADCASTERID=your-value --env NOTIFY_CHANNELS_YOUTUBE_CLIENTID=your-value --env NOTIFY_CHANNELS_YOUTUBE_CLIENTSECRET=your-value --env NOTIFY_CHANNELS_YOUTUBE_REFRESHTOKEN=your-value --env NOTIFY_CHANNELS_YOUTUBE_LIVECHATID=your-value --env NOTIFY_CHANNELS_INSTAGRAM_ACCESSTOKEN=your-value --env NOTIFY_CHANNELS_INSTAGRAM_USERID=your-value --env NOTIFY_CHANNELS_SENDGRID_APIKEY=your-value --env NOTIFY_CHANNELS_SENDGRID_FROMEMAIL=your-value --env NOTIFY_CHANNELS_TIKTOKSHOP_APPKEY=your-value --env NOTIFY_CHANNELS_TIKTOKSHOP_APPSECRET=your-value --env NOTIFY_CHANNELS_TIKTOKSHOP_ACCESSTOKEN=your-value --env NOTIFY_CHANNELS_TIKTOKSHOP_SHOPID=your-value --env NOTIFY_CHANNELS_FACEBOOK_PAGEACCESSTOKEN=your-value --env NOTIFY_CHANNELS_FACEBOOK_PAGEID=your-value --env NOTIFY_CHANNELS_AWSSNS_ACCESSKEYID=your-value --env NOTIFY_CHANNELS_AWSSNS_SECRETACCESSKEY=your-value --env NOTIFY_CHANNELS_AWSSNS_REGION=your-value --env NOTIFY_CHANNELS_MAILGUN_APIKEY=your-value --env NOTIFY_CHANNELS_MAILGUN_DOMAIN=your-value --env NOTIFY_CHANNELS_MAILGUN_FROMEMAIL=your-value --env NOTIFY_CHANNELS_PAGERDUTY_APIKEY=your-value -- docker run -i --rm -e NOTIFY_CHANNELS_EMAIL_HOST -e NOTIFY_CHANNELS_EMAIL_PORT -e NOTIFY_CHANNELS_EMAIL_USERNAME -e NOTIFY_CHANNELS_EMAIL_PASSWORD -e NOTIFY_CHANNELS_EMAIL_FROM -e NOTIFY_CHANNELS_SMS_ACCOUNTSID -e NOTIFY_CHANNELS_SMS_AUTHTOKEN -e NOTIFY_CHANNELS_SMS_FROMNUMBER -e NOTIFY_CHANNELS_SLACK_WEBHOOKURL -e NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN -e NOTIFY_CHANNELS_TELEGRAM_CHATID -e NOTIFY_CHANNELS_DISCORD_WEBHOOKURL -e NOTIFY_CHANNELS_TEAMS_WEBHOOKURL -e NOTIFY_CHANNELS_GOOGLECHAT_WEBHOOKURL -e NOTIFY_CHANNELS_TWITTER_APIKEY -e NOTIFY_CHANNELS_TWITTER_APISECRET -e NOTIFY_CHANNELS_TWITTER_ACCESSTOKEN -e NOTIFY_CHANNELS_TWITTER_ACCESSTOKENSECRET -e NOTIFY_CHANNELS_LINKEDIN_ACCESSTOKEN -e NOTIFY_CHANNELS_LINKEDIN_ORGANIZATIONID -e NOTIFY_CHANNELS_WHATSAPP_ACCOUNTSID -e NOTIFY_CHANNELS_WHATSAPP_AUTHTOKEN -e NOTIFY_CHANNELS_WHATSAPP_FROMNUMBER -e NOTIFY_CHANNELS_PUSH_FIREBASECREDENTIALS -e NOTIFY_CHANNELS_NOTION_APIKEY -e NOTIFY_CHANNELS_NOTION_DATABASEID -e NOTIFY_CHANNELS_TWITCH_CLIENTID -e NOTIFY_CHANNELS_TWITCH_CLIENTSECRET -e NOTIFY_CHANNELS_TWITCH_BROADCASTERID -e NOTIFY_CHANNELS_YOUTUBE_CLIENTID -e NOTIFY_CHANNELS_YOUTUBE_CLIENTSECRET -e NOTIFY_CHANNELS_YOUTUBE_REFRESHTOKEN -e NOTIFY_CHANNELS_YOUTUBE_LIVECHATID -e NOTIFY_CHANNELS_INSTAGRAM_ACCESSTOKEN -e NOTIFY_CHANNELS_INSTAGRAM_USERID -e NOTIFY_CHANNELS_SENDGRID_APIKEY -e NOTIFY_CHANNELS_SENDGRID_FROMEMAIL -e NOTIFY_CHANNELS_TIKTOKSHOP_APPKEY -e NOTIFY_CHANNELS_TIKTOKSHOP_APPSECRET -e NOTIFY_CHANNELS_TIKTOKSHOP_ACCESSTOKEN -e NOTIFY_CHANNELS_TIKTOKSHOP_SHOPID -e NOTIFY_CHANNELS_FACEBOOK_PAGEACCESSTOKEN -e NOTIFY_CHANNELS_FACEBOOK_PAGEID -e NOTIFY_CHANNELS_AWSSNS_ACCESSKEYID -e NOTIFY_CHANNELS_AWSSNS_SECRETACCESSKEY -e NOTIFY_CHANNELS_AWSSNS_REGION -e NOTIFY_CHANNELS_MAILGUN_APIKEY -e NOTIFY_CHANNELS_MAILGUN_DOMAIN -e NOTIFY_CHANNELS_MAILGUN_FROMEMAIL -e NOTIFY_CHANNELS_PAGERDUTY_APIKEY ghcr.io/gabrielbbaldez/notify-hub:1.1.0Completa los valores vacíos antes de ejecutarlo.
Pégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json
{
"mcpServers": {
"notify-hub": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"NOTIFY_CHANNELS_EMAIL_HOST",
"-e",
"NOTIFY_CHANNELS_EMAIL_PORT",
"-e",
"NOTIFY_CHANNELS_EMAIL_USERNAME",
"-e",
"NOTIFY_CHANNELS_EMAIL_PASSWORD",
"-e",
"NOTIFY_CHANNELS_EMAIL_FROM",
"-e",
"NOTIFY_CHANNELS_SMS_ACCOUNTSID",
"-e",
"NOTIFY_CHANNELS_SMS_AUTHTOKEN",
"-e",
"NOTIFY_CHANNELS_SMS_FROMNUMBER",
"-e",
"NOTIFY_CHANNELS_SLACK_WEBHOOKURL",
"-e",
"NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN",
"-e",
"NOTIFY_CHANNELS_TELEGRAM_CHATID",
"-e",
"NOTIFY_CHANNELS_DISCORD_WEBHOOKURL",
"-e",
"NOTIFY_CHANNELS_TEAMS_WEBHOOKURL",
"-e",
"NOTIFY_CHANNELS_GOOGLECHAT_WEBHOOKURL",
"-e",
"NOTIFY_CHANNELS_TWITTER_APIKEY",
"-e",
"NOTIFY_CHANNELS_TWITTER_APISECRET",
"-e",
"NOTIFY_CHANNELS_TWITTER_ACCESSTOKEN",
"-e",
"NOTIFY_CHANNELS_TWITTER_ACCESSTOKENSECRET",
"-e",
"NOTIFY_CHANNELS_LINKEDIN_ACCESSTOKEN",
"-e",
"NOTIFY_CHANNELS_LINKEDIN_ORGANIZATIONID",
"-e",
"NOTIFY_CHANNELS_WHATSAPP_ACCOUNTSID",
"-e",
"NOTIFY_CHANNELS_WHATSAPP_AUTHTOKEN",
"-e",
"NOTIFY_CHANNELS_WHATSAPP_FROMNUMBER",
"-e",
"NOTIFY_CHANNELS_PUSH_FIREBASECREDENTIALS",
"-e",
"NOTIFY_CHANNELS_NOTION_APIKEY",
"-e",
"NOTIFY_CHANNELS_NOTION_DATABASEID",
"-e",
"NOTIFY_CHANNELS_TWITCH_CLIENTID",
"-e",
"NOTIFY_CHANNELS_TWITCH_CLIENTSECRET",
"-e",
"NOTIFY_CHANNELS_TWITCH_BROADCASTERID",
"-e",
"NOTIFY_CHANNELS_YOUTUBE_CLIENTID",
"-e",
"NOTIFY_CHANNELS_YOUTUBE_CLIENTSECRET",
"-e",
"NOTIFY_CHANNELS_YOUTUBE_REFRESHTOKEN",
"-e",
"NOTIFY_CHANNELS_YOUTUBE_LIVECHATID",
"-e",
"NOTIFY_CHANNELS_INSTAGRAM_ACCESSTOKEN",
"-e",
"NOTIFY_CHANNELS_INSTAGRAM_USERID",
"-e",
"NOTIFY_CHANNELS_SENDGRID_APIKEY",
"-e",
"NOTIFY_CHANNELS_SENDGRID_FROMEMAIL",
"-e",
"NOTIFY_CHANNELS_TIKTOKSHOP_APPKEY",
"-e",
"NOTIFY_CHANNELS_TIKTOKSHOP_APPSECRET",
"-e",
"NOTIFY_CHANNELS_TIKTOKSHOP_ACCESSTOKEN",
"-e",
"NOTIFY_CHANNELS_TIKTOKSHOP_SHOPID",
"-e",
"NOTIFY_CHANNELS_FACEBOOK_PAGEACCESSTOKEN",
"-e",
"NOTIFY_CHANNELS_FACEBOOK_PAGEID",
"-e",
"NOTIFY_CHANNELS_AWSSNS_ACCESSKEYID",
"-e",
"NOTIFY_CHANNELS_AWSSNS_SECRETACCESSKEY",
"-e",
"NOTIFY_CHANNELS_AWSSNS_REGION",
"-e",
"NOTIFY_CHANNELS_MAILGUN_APIKEY",
"-e",
"NOTIFY_CHANNELS_MAILGUN_DOMAIN",
"-e",
"NOTIFY_CHANNELS_MAILGUN_FROMEMAIL",
"-e",
"NOTIFY_CHANNELS_PAGERDUTY_APIKEY",
"ghcr.io/gabrielbbaldez/notify-hub:1.1.0"
],
"env": {
"NOTIFY_CHANNELS_EMAIL_HOST": "your-value",
"NOTIFY_CHANNELS_EMAIL_PORT": "your-value",
"NOTIFY_CHANNELS_EMAIL_USERNAME": "your-value",
"NOTIFY_CHANNELS_EMAIL_PASSWORD": "your-value",
"NOTIFY_CHANNELS_EMAIL_FROM": "your-value",
"NOTIFY_CHANNELS_SMS_ACCOUNTSID": "your-value",
"NOTIFY_CHANNELS_SMS_AUTHTOKEN": "your-value",
"NOTIFY_CHANNELS_SMS_FROMNUMBER": "your-value",
"NOTIFY_CHANNELS_SLACK_WEBHOOKURL": "your-value",
"NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN": "your-value",
"NOTIFY_CHANNELS_TELEGRAM_CHATID": "your-value",
"NOTIFY_CHANNELS_DISCORD_WEBHOOKURL": "your-value",
"NOTIFY_CHANNELS_TEAMS_WEBHOOKURL": "your-value",
"NOTIFY_CHANNELS_GOOGLECHAT_WEBHOOKURL": "your-value",
"NOTIFY_CHANNELS_TWITTER_APIKEY": "your-value",
"NOTIFY_CHANNELS_TWITTER_APISECRET": "your-value",
"NOTIFY_CHANNELS_TWITTER_ACCESSTOKEN": "your-value",
"NOTIFY_CHANNELS_TWITTER_ACCESSTOKENSECRET": "your-value",
"NOTIFY_CHANNELS_LINKEDIN_ACCESSTOKEN": "your-value",
"NOTIFY_CHANNELS_LINKEDIN_ORGANIZATIONID": "your-value",
"NOTIFY_CHANNELS_WHATSAPP_ACCOUNTSID": "your-value",
"NOTIFY_CHANNELS_WHATSAPP_AUTHTOKEN": "your-value",
"NOTIFY_CHANNELS_WHATSAPP_FROMNUMBER": "your-value",
"NOTIFY_CHANNELS_PUSH_FIREBASECREDENTIALS": "your-value",
"NOTIFY_CHANNELS_NOTION_APIKEY": "your-value",
"NOTIFY_CHANNELS_NOTION_DATABASEID": "your-value",
"NOTIFY_CHANNELS_TWITCH_CLIENTID": "your-value",
"NOTIFY_CHANNELS_TWITCH_CLIENTSECRET": "your-value",
"NOTIFY_CHANNELS_TWITCH_BROADCASTERID": "your-value",
"NOTIFY_CHANNELS_YOUTUBE_CLIENTID": "your-value",
"NOTIFY_CHANNELS_YOUTUBE_CLIENTSECRET": "your-value",
"NOTIFY_CHANNELS_YOUTUBE_REFRESHTOKEN": "your-value",
"NOTIFY_CHANNELS_YOUTUBE_LIVECHATID": "your-value",
"NOTIFY_CHANNELS_INSTAGRAM_ACCESSTOKEN": "your-value",
"NOTIFY_CHANNELS_INSTAGRAM_USERID": "your-value",
"NOTIFY_CHANNELS_SENDGRID_APIKEY": "your-value",
"NOTIFY_CHANNELS_SENDGRID_FROMEMAIL": "your-value",
"NOTIFY_CHANNELS_TIKTOKSHOP_APPKEY": "your-value",
"NOTIFY_CHANNELS_TIKTOKSHOP_APPSECRET": "your-value",
"NOTIFY_CHANNELS_TIKTOKSHOP_ACCESSTOKEN": "your-value",
"NOTIFY_CHANNELS_TIKTOKSHOP_SHOPID": "your-value",
"NOTIFY_CHANNELS_FACEBOOK_PAGEACCESSTOKEN": "your-value",
"NOTIFY_CHANNELS_FACEBOOK_PAGEID": "your-value",
"NOTIFY_CHANNELS_AWSSNS_ACCESSKEYID": "your-value",
"NOTIFY_CHANNELS_AWSSNS_SECRETACCESSKEY": "your-value",
"NOTIFY_CHANNELS_AWSSNS_REGION": "your-value",
"NOTIFY_CHANNELS_MAILGUN_APIKEY": "your-value",
"NOTIFY_CHANNELS_MAILGUN_DOMAIN": "your-value",
"NOTIFY_CHANNELS_MAILGUN_FROMEMAIL": "your-value",
"NOTIFY_CHANNELS_PAGERDUTY_APIKEY": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Pégalo en .vscode/mcp.json de tu proyecto
{
"servers": {
"notify-hub": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"NOTIFY_CHANNELS_EMAIL_HOST",
"-e",
"NOTIFY_CHANNELS_EMAIL_PORT",
"-e",
"NOTIFY_CHANNELS_EMAIL_USERNAME",
"-e",
"NOTIFY_CHANNELS_EMAIL_PASSWORD",
"-e",
"NOTIFY_CHANNELS_EMAIL_FROM",
"-e",
"NOTIFY_CHANNELS_SMS_ACCOUNTSID",
"-e",
"NOTIFY_CHANNELS_SMS_AUTHTOKEN",
"-e",
"NOTIFY_CHANNELS_SMS_FROMNUMBER",
"-e",
"NOTIFY_CHANNELS_SLACK_WEBHOOKURL",
"-e",
"NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN",
"-e",
"NOTIFY_CHANNELS_TELEGRAM_CHATID",
"-e",
"NOTIFY_CHANNELS_DISCORD_WEBHOOKURL",
"-e",
"NOTIFY_CHANNELS_TEAMS_WEBHOOKURL",
"-e",
"NOTIFY_CHANNELS_GOOGLECHAT_WEBHOOKURL",
"-e",
"NOTIFY_CHANNELS_TWITTER_APIKEY",
"-e",
"NOTIFY_CHANNELS_TWITTER_APISECRET",
"-e",
"NOTIFY_CHANNELS_TWITTER_ACCESSTOKEN",
"-e",
"NOTIFY_CHANNELS_TWITTER_ACCESSTOKENSECRET",
"-e",
"NOTIFY_CHANNELS_LINKEDIN_ACCESSTOKEN",
"-e",
"NOTIFY_CHANNELS_LINKEDIN_ORGANIZATIONID",
"-e",
"NOTIFY_CHANNELS_WHATSAPP_ACCOUNTSID",
"-e",
"NOTIFY_CHANNELS_WHATSAPP_AUTHTOKEN",
"-e",
"NOTIFY_CHANNELS_WHATSAPP_FROMNUMBER",
"-e",
"NOTIFY_CHANNELS_PUSH_FIREBASECREDENTIALS",
"-e",
"NOTIFY_CHANNELS_NOTION_APIKEY",
"-e",
"NOTIFY_CHANNELS_NOTION_DATABASEID",
"-e",
"NOTIFY_CHANNELS_TWITCH_CLIENTID",
"-e",
"NOTIFY_CHANNELS_TWITCH_CLIENTSECRET",
"-e",
"NOTIFY_CHANNELS_TWITCH_BROADCASTERID",
"-e",
"NOTIFY_CHANNELS_YOUTUBE_CLIENTID",
"-e",
"NOTIFY_CHANNELS_YOUTUBE_CLIENTSECRET",
"-e",
"NOTIFY_CHANNELS_YOUTUBE_REFRESHTOKEN",
"-e",
"NOTIFY_CHANNELS_YOUTUBE_LIVECHATID",
"-e",
"NOTIFY_CHANNELS_INSTAGRAM_ACCESSTOKEN",
"-e",
"NOTIFY_CHANNELS_INSTAGRAM_USERID",
"-e",
"NOTIFY_CHANNELS_SENDGRID_APIKEY",
"-e",
"NOTIFY_CHANNELS_SENDGRID_FROMEMAIL",
"-e",
"NOTIFY_CHANNELS_TIKTOKSHOP_APPKEY",
"-e",
"NOTIFY_CHANNELS_TIKTOKSHOP_APPSECRET",
"-e",
"NOTIFY_CHANNELS_TIKTOKSHOP_ACCESSTOKEN",
"-e",
"NOTIFY_CHANNELS_TIKTOKSHOP_SHOPID",
"-e",
"NOTIFY_CHANNELS_FACEBOOK_PAGEACCESSTOKEN",
"-e",
"NOTIFY_CHANNELS_FACEBOOK_PAGEID",
"-e",
"NOTIFY_CHANNELS_AWSSNS_ACCESSKEYID",
"-e",
"NOTIFY_CHANNELS_AWSSNS_SECRETACCESSKEY",
"-e",
"NOTIFY_CHANNELS_AWSSNS_REGION",
"-e",
"NOTIFY_CHANNELS_MAILGUN_APIKEY",
"-e",
"NOTIFY_CHANNELS_MAILGUN_DOMAIN",
"-e",
"NOTIFY_CHANNELS_MAILGUN_FROMEMAIL",
"-e",
"NOTIFY_CHANNELS_PAGERDUTY_APIKEY",
"ghcr.io/gabrielbbaldez/notify-hub:1.1.0"
],
"env": {
"NOTIFY_CHANNELS_EMAIL_HOST": "your-value",
"NOTIFY_CHANNELS_EMAIL_PORT": "your-value",
"NOTIFY_CHANNELS_EMAIL_USERNAME": "your-value",
"NOTIFY_CHANNELS_EMAIL_PASSWORD": "your-value",
"NOTIFY_CHANNELS_EMAIL_FROM": "your-value",
"NOTIFY_CHANNELS_SMS_ACCOUNTSID": "your-value",
"NOTIFY_CHANNELS_SMS_AUTHTOKEN": "your-value",
"NOTIFY_CHANNELS_SMS_FROMNUMBER": "your-value",
"NOTIFY_CHANNELS_SLACK_WEBHOOKURL": "your-value",
"NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN": "your-value",
"NOTIFY_CHANNELS_TELEGRAM_CHATID": "your-value",
"NOTIFY_CHANNELS_DISCORD_WEBHOOKURL": "your-value",
"NOTIFY_CHANNELS_TEAMS_WEBHOOKURL": "your-value",
"NOTIFY_CHANNELS_GOOGLECHAT_WEBHOOKURL": "your-value",
"NOTIFY_CHANNELS_TWITTER_APIKEY": "your-value",
"NOTIFY_CHANNELS_TWITTER_APISECRET": "your-value",
"NOTIFY_CHANNELS_TWITTER_ACCESSTOKEN": "your-value",
"NOTIFY_CHANNELS_TWITTER_ACCESSTOKENSECRET": "your-value",
"NOTIFY_CHANNELS_LINKEDIN_ACCESSTOKEN": "your-value",
"NOTIFY_CHANNELS_LINKEDIN_ORGANIZATIONID": "your-value",
"NOTIFY_CHANNELS_WHATSAPP_ACCOUNTSID": "your-value",
"NOTIFY_CHANNELS_WHATSAPP_AUTHTOKEN": "your-value",
"NOTIFY_CHANNELS_WHATSAPP_FROMNUMBER": "your-value",
"NOTIFY_CHANNELS_PUSH_FIREBASECREDENTIALS": "your-value",
"NOTIFY_CHANNELS_NOTION_APIKEY": "your-value",
"NOTIFY_CHANNELS_NOTION_DATABASEID": "your-value",
"NOTIFY_CHANNELS_TWITCH_CLIENTID": "your-value",
"NOTIFY_CHANNELS_TWITCH_CLIENTSECRET": "your-value",
"NOTIFY_CHANNELS_TWITCH_BROADCASTERID": "your-value",
"NOTIFY_CHANNELS_YOUTUBE_CLIENTID": "your-value",
"NOTIFY_CHANNELS_YOUTUBE_CLIENTSECRET": "your-value",
"NOTIFY_CHANNELS_YOUTUBE_REFRESHTOKEN": "your-value",
"NOTIFY_CHANNELS_YOUTUBE_LIVECHATID": "your-value",
"NOTIFY_CHANNELS_INSTAGRAM_ACCESSTOKEN": "your-value",
"NOTIFY_CHANNELS_INSTAGRAM_USERID": "your-value",
"NOTIFY_CHANNELS_SENDGRID_APIKEY": "your-value",
"NOTIFY_CHANNELS_SENDGRID_FROMEMAIL": "your-value",
"NOTIFY_CHANNELS_TIKTOKSHOP_APPKEY": "your-value",
"NOTIFY_CHANNELS_TIKTOKSHOP_APPSECRET": "your-value",
"NOTIFY_CHANNELS_TIKTOKSHOP_ACCESSTOKEN": "your-value",
"NOTIFY_CHANNELS_TIKTOKSHOP_SHOPID": "your-value",
"NOTIFY_CHANNELS_FACEBOOK_PAGEACCESSTOKEN": "your-value",
"NOTIFY_CHANNELS_FACEBOOK_PAGEID": "your-value",
"NOTIFY_CHANNELS_AWSSNS_ACCESSKEYID": "your-value",
"NOTIFY_CHANNELS_AWSSNS_SECRETACCESSKEY": "your-value",
"NOTIFY_CHANNELS_AWSSNS_REGION": "your-value",
"NOTIFY_CHANNELS_MAILGUN_APIKEY": "your-value",
"NOTIFY_CHANNELS_MAILGUN_DOMAIN": "your-value",
"NOTIFY_CHANNELS_MAILGUN_FROMEMAIL": "your-value",
"NOTIFY_CHANNELS_PAGERDUTY_APIKEY": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Este se ejecuta en tu computadora, y ChatGPT solo puede conectarse a servidores en internet. Elige otra app.
Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.
NOTIFY_CHANNELS_EMAIL_HOST envNOTIFY_CHANNELS_EMAIL_PORT envNOTIFY_CHANNELS_EMAIL_FROM envNOTIFY_CHANNELS_SMS_FROMNUMBER envNOTIFY_CHANNELS_TELEGRAM_CHATID envNOTIFY_CHANNELS_LINKEDIN_ORGANIZATIONID envNOTIFY_CHANNELS_WHATSAPP_FROMNUMBER envNOTIFY_CHANNELS_NOTION_DATABASEID envNOTIFY_CHANNELS_TWITCH_BROADCASTERID envNOTIFY_CHANNELS_YOUTUBE_LIVECHATID envNOTIFY_CHANNELS_INSTAGRAM_USERID envNOTIFY_CHANNELS_SENDGRID_FROMEMAIL envNOTIFY_CHANNELS_TIKTOKSHOP_SHOPID envNOTIFY_CHANNELS_FACEBOOK_PAGEID envNOTIFY_CHANNELS_AWSSNS_REGION envNOTIFY_CHANNELS_MAILGUN_DOMAIN envNOTIFY_CHANNELS_MAILGUN_FROMEMAIL envEsta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.
Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.
Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 7 nov 2026
El nombre en el registro se verificó con la cuenta de GitHub GabrielBBaldez, dueña del repo
Todavía no hemos leído este repo en GitHub
Todavía no hemos leído este repo en GitHub
Este se ejecuta en tu computadora; no hay endpoint en internet
Se ejecuta en tu computadora y usa ajustes locales en su lugar
Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet
Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.
Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.
Debes completar: NOTIFY_CHANNELS_EMAIL_USERNAME, NOTIFY_CHANNELS_EMAIL_PASSWORD, NOTIFY_CHANNELS_SMS_ACCOUNTSID, NOTIFY_CHANNELS_SMS_AUTHTOKEN, NOTIFY_CHANNELS_SLACK_WEBHOOKURL, NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN, NOTIFY_CHANNELS_DISCORD_WEBHOOKURL, NOTIFY_CHANNELS_TEAMS_WEBHOOKURL, NOTIFY_CHANNELS_GOOGLECHAT_WEBHOOKURL, NOTIFY_CHANNELS_TWITTER_APIKEY, NOTIFY_CHANNELS_TWITTER_APISECRET, NOTIFY_CHANNELS_TWITTER_ACCESSTOKEN, NOTIFY_CHANNELS_TWITTER_ACCESSTOKENSECRET, NOTIFY_CHANNELS_LINKEDIN_ACCESSTOKEN, NOTIFY_CHANNELS_WHATSAPP_ACCOUNTSID, NOTIFY_CHANNELS_WHATSAPP_AUTHTOKEN, NOTIFY_CHANNELS_PUSH_FIREBASECREDENTIALS, NOTIFY_CHANNELS_NOTION_APIKEY, NOTIFY_CHANNELS_TWITCH_CLIENTID, NOTIFY_CHANNELS_TWITCH_CLIENTSECRET, NOTIFY_CHANNELS_YOUTUBE_CLIENTID, NOTIFY_CHANNELS_YOUTUBE_CLIENTSECRET, NOTIFY_CHANNELS_YOUTUBE_REFRESHTOKEN, NOTIFY_CHANNELS_INSTAGRAM_ACCESSTOKEN, NOTIFY_CHANNELS_SENDGRID_APIKEY, NOTIFY_CHANNELS_TIKTOKSHOP_APPKEY, NOTIFY_CHANNELS_TIKTOKSHOP_APPSECRET, NOTIFY_CHANNELS_TIKTOKSHOP_ACCESSTOKEN, NOTIFY_CHANNELS_FACEBOOK_PAGEACCESSTOKEN, NOTIFY_CHANNELS_AWSSNS_ACCESSKEYID, NOTIFY_CHANNELS_AWSSNS_SECRETACCESSKEY, NOTIFY_CHANNELS_MAILGUN_APIKEY, NOTIFY_CHANNELS_PAGERDUTY_APIKEY
Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).
El repo de GitHub cambió por última vez –, y la última versión (1.1.0) llegó al registro hace 8 meses.
Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas Docker en tu computadora.
En la misma categoría: Spec Driven Development, Remote Desktop Commander, Dialyne
Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.
Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Real phone calls in France for AI agents: dial +33 numbers, menus, hold, AI disclosure.
Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.
NotifyHub
One API. Every channel.
Unified notification library for Java and Spring Boot.
Website · Documentation · Getting Started
Stop writing different code for each notification channel. NotifyHub gives you a single fluent API to send notifications via Email, SMS, WhatsApp, Slack, Telegram, Discord, Microsoft Teams, Firebase Push, Webhooks, WebSocket, Google Chat, Twitter/X, LinkedIn, Notion, Twitch, YouTube, Instagram, SendGrid, TikTok Shop, Facebook, AWS SNS, Mailgun, PagerDuty, Kick — or any custom channel you create.
notify.to(user)
.via(EMAIL) .fallback(SMS) .priority(Priority.HIGH) .subject("Order confirmed") .template("order-confirmed") .param("orderId", order.getId()) .attach(invoicePdf) .send();
| | Problem | Without NotifyHub | With NotifyHub | |:-:|---------|------------------|----------------| | | Email | JavaMail config, MIME types, Session... | .via(EMAIL) | | 📱 | SMS | Twilio SDK, different API entirely | .via(SMS) | | | WhatsApp | Another Twilio setup, prefix logic | .via(WHATSAPP) | | | Slack | Webhook HTTP, JSON payload | .via(SLACK) | | | Telegram | Bot API, HTTP client setup | .via(TELEGRAM) | | | Discord | Webhook HTTP, JSON payload | .via(DISCORD) | | 👥 | Teams | Incoming Webhook, MessageCard JSON | .via(TEAMS) | | | Push | Firebase Admin SDK, credentials... | .via(PUSH) | | 🔗 | Webhook | Custom HTTP, payload template | .via(Channel.custom("pagerduty")) | | | WebSocket | Java WebSocket API, reconnect logic | .via(WEBSOCKET) | | | Google Chat | Webhook HTTP, JSON payload | .via(GOOGLE_CHAT) | | | Twitter/X | OAuth 1.0a, API v2 setup | .via(TWITTER) | | 💼 | LinkedIn | OAuth 2.0, REST API setup | .via(LINKEDIN) | | | Notion | Integration Token, API setup | .via(NOTION) | | | Twitch | OAuth 2.0, Twitch API setup | .via(TWITCH) | | | YouTube | YouTube Data API v3 setup | .via(YOUTUBE) | | | Instagram | Meta Graph API setup | .via(INSTAGRAM) | | 📧 | SendGrid | SendGrid API, webhook tracking | .via(Channel.custom("sendgrid")) | | | TikTok Shop | HMAC-SHA256, Shop API | .via(TIKTOK_SHOP) | | | Facebook | Graph API, Page tokens | .via(FACEBOOK) | | ☁️ | AWS SNS | AWS SDK, credentials, ARN | .via(Channel.custom("aws-sns")) | | | Mailgun | Mailgun API, domain setup | .via(Channel.custom("mailgun")) | | | PagerDuty | Events API v2, routing key | .via(Channel.custom("pagerduty")) | | | Kick | Public API, OAuth 2.1 | .via(KICK) | | | Multiple channels | Completely different code for each | Same fluent API | | Fallback | Manual try/catch chain | .fallback(SMS) | | Retry | Implement yourself | Built-in exponential backoff | | Async | Thread pools, CompletableFuture | .sendAsync() | | Scheduling | ScheduledExecutor, timer logic | .schedule(Duration.ofMinutes(30)) | | Templates | Each channel has its own engine | One template, all channels | | i18n | Manual locale resolution | .locale(Locale.PT_BR) | | Rate limiting | Token bucket from scratch | Config-driven per-channel | | Tracking | Build your own delivery log | Built-in receipts + JPA | | Dead letters | Lost in the void | Auto-captured in DLQ | | Deduplication | Track sent messages yourself | Built-in content hash / explicit key | | Template versions | Manage files manually | .templateVersion("v2") + A/B test | | Batch | Loop and pray | .toAll(users).send() | | Monitoring | Wire Micrometer yourself | Auto-configured counters | | Health checks | Write an Actuator indicator | Auto-configured | | Admin UI | Build your own dashboard | Built-in /notify-admin | | Circuit breaker | Implement yourself per channel | Built-in per-channel circuit breaker | | Orchestration | Manual escalation logic | .orchestrate().first(EMAIL).ifNoOpen(24h).then(PUSH) | | A/B testing | External service + glue code | Built-in .abTest("exp").variant(...).split(50,50) | | Testing | Mock everything | TestNotifyHub captures all sends | | New channel | Build from scratch | Implement one interface |
<dependency>
io.github.gabrielbbaldez notify-spring-boot-starter 1.0.0
Need extra channels? Add optional modules:
`xml
io.github.gabrielbbaldez
notify-sms
1.0.0
io.github.gabrielbbaldez
notify-slack
1.0.0
io.github.gabrielbbaldez
notify-websocket
1.0.0
`
application.ymlnotify:
channels: email: host: smtp.gmail.com port: 587 username: ${GMAIL_USER} password: ${GMAIL_PASS} from: noreply@myapp.com from-name: MyApp tls: true retry: max-attempts: 3 strategy: exponential tracking: enabled: true
@Service
public class OrderService {
private final NotifyHub notify;
public OrderService(NotifyHub notify) { this.notify = notify; }
public void confirmOrder(Order order) { notify.to(order.getCustomer()) .via(Channel.EMAIL) .subject("Order confirmed!") .template("order-confirmed") .param("customerName", order.getCustomer().getName()) .param("orderId", order.getId()) .param("total", order.getTotal()) .send(); } }
That's it. Three steps.
If the primary channel fails, automatically try the next one:
notify.to(user)
.via(Channel.WHATSAPP) .fallback(Channel.SMS) .fallback(Channel.EMAIL) .template("payment-reminder") .param("amount", "R$ 150,00") .send(); // Tries WhatsApp -> SMS -> Email
Send through ALL channels simultaneously:
notify.to(user)
.via(Channel.EMAIL) .via(Channel.SLACK) .via(Channel.TEAMS) .subject("Security Alert") .content("Login from a new device detected") .sendAll();
Send notifications without blocking:
// Fire and forget
notify.to(user) .via(Channel.EMAIL) .template("welcome") .sendAsync();
// Or wait for result CompletableFuture future = notify.to(user) .via(Channel.EMAIL) .via(Channel.SLACK) .content("Deploy complete!") .sendAllAsync();
future.thenRun(() -> log.info("All notifications sent!"));
Automatic retry with exponential or fixed backoff:
# application.yml (global)
notify: retry: max-attempts: 3 strategy: exponential # waits 1s, 2s, 4s...
// Or per-notification
notify.to(user) .via(Channel.EMAIL) .retry(3) .template("invoice") .send();
Create templates in src/main/resources/templates/notify/:
order-confirmed.html (auto-used for email):
<h1>Hello, {{customerName}}!</h1>
Your order #{{orderId}} has been confirmed. Total: {{total}}
order-confirmed.txt (auto-us
Solo se muestra el principio; lee el resto en el repo