Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
Send notifications across 23 channels with 36 AI-ready tools. One API, zero boilerplate.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
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_APIKEY「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、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"
}
}
}
}ターミナルでこれを実行します
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.0動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.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"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"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"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
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 envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント GabrielBBaldez で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの: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
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(1.1.0)がレジストリに届いたのは8 か月前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにDockerも必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, LexPact UK Contracts
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
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.
Generate UK-law contracts: NDA, service, freelance, recruiter terms of business, IR35.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
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
冒頭だけを表示しています。続きはリポジトリで読めます