NotifyHub — Unified Notification MCP Server for VS Code
io.github.gabrielbbaldez/notify-hub
Send notifications across 23 channels with 36 AI-ready tools. One API, zero boilerplate.
client:VS Code
transport:stdio
runtime:oci
Install NotifyHub — Unified Notification MCP Server in VS Code
.vscode/mcp.json
{
"inputs": [
{
"type": "promptString",
"id": "notify-channels-email-host",
"description": "NOTIFY_CHANNELS_EMAIL_HOST",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-email-port",
"description": "NOTIFY_CHANNELS_EMAIL_PORT",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-email-username",
"description": "NOTIFY_CHANNELS_EMAIL_USERNAME",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-email-password",
"description": "NOTIFY_CHANNELS_EMAIL_PASSWORD",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-email-from",
"description": "NOTIFY_CHANNELS_EMAIL_FROM",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-sms-accountsid",
"description": "NOTIFY_CHANNELS_SMS_ACCOUNTSID",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-sms-authtoken",
"description": "NOTIFY_CHANNELS_SMS_AUTHTOKEN",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-sms-fromnumber",
"description": "NOTIFY_CHANNELS_SMS_FROMNUMBER",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-slack-webhookurl",
"description": "NOTIFY_CHANNELS_SLACK_WEBHOOKURL",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-telegram-bottoken",
"description": "NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-telegram-chatid",
"description": "NOTIFY_CHANNELS_TELEGRAM_CHATID",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-discord-webhookurl",
"description": "NOTIFY_CHANNELS_DISCORD_WEBHOOKURL",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-teams-webhookurl",
"description": "NOTIFY_CHANNELS_TEAMS_WEBHOOKURL",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-googlechat-webhookurl",
"description": "NOTIFY_CHANNELS_GOOGLECHAT_WEBHOOKURL",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-twitter-apikey",
"description": "NOTIFY_CHANNELS_TWITTER_APIKEY",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-twitter-apisecret",
"description": "NOTIFY_CHANNELS_TWITTER_APISECRET",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-twitter-accesstoken",
"description": "NOTIFY_CHANNELS_TWITTER_ACCESSTOKEN",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-twitter-accesstokensecret",
"description": "NOTIFY_CHANNELS_TWITTER_ACCESSTOKENSECRET",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-linkedin-accesstoken",
"description": "NOTIFY_CHANNELS_LINKEDIN_ACCESSTOKEN",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-linkedin-organizationid",
"description": "NOTIFY_CHANNELS_LINKEDIN_ORGANIZATIONID",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-whatsapp-accountsid",
"description": "NOTIFY_CHANNELS_WHATSAPP_ACCOUNTSID",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-whatsapp-authtoken",
"description": "NOTIFY_CHANNELS_WHATSAPP_AUTHTOKEN",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-whatsapp-fromnumber",
"description": "NOTIFY_CHANNELS_WHATSAPP_FROMNUMBER",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-push-firebasecredentials",
"description": "NOTIFY_CHANNELS_PUSH_FIREBASECREDENTIALS",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-notion-apikey",
"description": "NOTIFY_CHANNELS_NOTION_APIKEY",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-notion-databaseid",
"description": "NOTIFY_CHANNELS_NOTION_DATABASEID",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-twitch-clientid",
"description": "NOTIFY_CHANNELS_TWITCH_CLIENTID",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-twitch-clientsecret",
"description": "NOTIFY_CHANNELS_TWITCH_CLIENTSECRET",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-twitch-broadcasterid",
"description": "NOTIFY_CHANNELS_TWITCH_BROADCASTERID",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-youtube-clientid",
"description": "NOTIFY_CHANNELS_YOUTUBE_CLIENTID",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-youtube-clientsecret",
"description": "NOTIFY_CHANNELS_YOUTUBE_CLIENTSECRET",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-youtube-refreshtoken",
"description": "NOTIFY_CHANNELS_YOUTUBE_REFRESHTOKEN",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-youtube-livechatid",
"description": "NOTIFY_CHANNELS_YOUTUBE_LIVECHATID",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-instagram-accesstoken",
"description": "NOTIFY_CHANNELS_INSTAGRAM_ACCESSTOKEN",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-instagram-userid",
"description": "NOTIFY_CHANNELS_INSTAGRAM_USERID",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-sendgrid-apikey",
"description": "NOTIFY_CHANNELS_SENDGRID_APIKEY",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-sendgrid-fromemail",
"description": "NOTIFY_CHANNELS_SENDGRID_FROMEMAIL",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-tiktokshop-appkey",
"description": "NOTIFY_CHANNELS_TIKTOKSHOP_APPKEY",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-tiktokshop-appsecret",
"description": "NOTIFY_CHANNELS_TIKTOKSHOP_APPSECRET",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-tiktokshop-accesstoken",
"description": "NOTIFY_CHANNELS_TIKTOKSHOP_ACCESSTOKEN",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-tiktokshop-shopid",
"description": "NOTIFY_CHANNELS_TIKTOKSHOP_SHOPID",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-facebook-pageaccesstoken",
"description": "NOTIFY_CHANNELS_FACEBOOK_PAGEACCESSTOKEN",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-facebook-pageid",
"description": "NOTIFY_CHANNELS_FACEBOOK_PAGEID",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-awssns-accesskeyid",
"description": "NOTIFY_CHANNELS_AWSSNS_ACCESSKEYID",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-awssns-secretaccesskey",
"description": "NOTIFY_CHANNELS_AWSSNS_SECRETACCESSKEY",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-awssns-region",
"description": "NOTIFY_CHANNELS_AWSSNS_REGION",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-mailgun-apikey",
"description": "NOTIFY_CHANNELS_MAILGUN_APIKEY",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-mailgun-domain",
"description": "NOTIFY_CHANNELS_MAILGUN_DOMAIN",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-mailgun-fromemail",
"description": "NOTIFY_CHANNELS_MAILGUN_FROMEMAIL",
"password": true
},
{
"type": "promptString",
"id": "notify-channels-pagerduty-apikey",
"description": "NOTIFY_CHANNELS_PAGERDUTY_APIKEY",
"password": true
}
],
"servers": {
"notify-hub": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/gabrielbbaldez/notify-hub:1.1.0"
],
"env": {
"NOTIFY_CHANNELS_EMAIL_HOST": "${input:notify-channels-email-host}",
"NOTIFY_CHANNELS_EMAIL_PORT": "${input:notify-channels-email-port}",
"NOTIFY_CHANNELS_EMAIL_USERNAME": "${input:notify-channels-email-username}",
"NOTIFY_CHANNELS_EMAIL_PASSWORD": "${input:notify-channels-email-password}",
"NOTIFY_CHANNELS_EMAIL_FROM": "${input:notify-channels-email-from}",
"NOTIFY_CHANNELS_SMS_ACCOUNTSID": "${input:notify-channels-sms-accountsid}",
"NOTIFY_CHANNELS_SMS_AUTHTOKEN": "${input:notify-channels-sms-authtoken}",
"NOTIFY_CHANNELS_SMS_FROMNUMBER": "${input:notify-channels-sms-fromnumber}",
"NOTIFY_CHANNELS_SLACK_WEBHOOKURL": "${input:notify-channels-slack-webhookurl}",
"NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN": "${input:notify-channels-telegram-bottoken}",
"NOTIFY_CHANNELS_TELEGRAM_CHATID": "${input:notify-channels-telegram-chatid}",
"NOTIFY_CHANNELS_DISCORD_WEBHOOKURL": "${input:notify-channels-discord-webhookurl}",
"NOTIFY_CHANNELS_TEAMS_WEBHOOKURL": "${input:notify-channels-teams-webhookurl}",
"NOTIFY_CHANNELS_GOOGLECHAT_WEBHOOKURL": "${input:notify-channels-googlechat-webhookurl}",
"NOTIFY_CHANNELS_TWITTER_APIKEY": "${input:notify-channels-twitter-apikey}",
"NOTIFY_CHANNELS_TWITTER_APISECRET": "${input:notify-channels-twitter-apisecret}",
"NOTIFY_CHANNELS_TWITTER_ACCESSTOKEN": "${input:notify-channels-twitter-accesstoken}",
"NOTIFY_CHANNELS_TWITTER_ACCESSTOKENSECRET": "${input:notify-channels-twitter-accesstokensecret}",
"NOTIFY_CHANNELS_LINKEDIN_ACCESSTOKEN": "${input:notify-channels-linkedin-accesstoken}",
"NOTIFY_CHANNELS_LINKEDIN_ORGANIZATIONID": "${input:notify-channels-linkedin-organizationid}",
"NOTIFY_CHANNELS_WHATSAPP_ACCOUNTSID": "${input:notify-channels-whatsapp-accountsid}",
"NOTIFY_CHANNELS_WHATSAPP_AUTHTOKEN": "${input:notify-channels-whatsapp-authtoken}",
"NOTIFY_CHANNELS_WHATSAPP_FROMNUMBER": "${input:notify-channels-whatsapp-fromnumber}",
"NOTIFY_CHANNELS_PUSH_FIREBASECREDENTIALS": "${input:notify-channels-push-firebasecredentials}",
"NOTIFY_CHANNELS_NOTION_APIKEY": "${input:notify-channels-notion-apikey}",
"NOTIFY_CHANNELS_NOTION_DATABASEID": "${input:notify-channels-notion-databaseid}",
"NOTIFY_CHANNELS_TWITCH_CLIENTID": "${input:notify-channels-twitch-clientid}",
"NOTIFY_CHANNELS_TWITCH_CLIENTSECRET": "${input:notify-channels-twitch-clientsecret}",
"NOTIFY_CHANNELS_TWITCH_BROADCASTERID": "${input:notify-channels-twitch-broadcasterid}",
"NOTIFY_CHANNELS_YOUTUBE_CLIENTID": "${input:notify-channels-youtube-clientid}",
"NOTIFY_CHANNELS_YOUTUBE_CLIENTSECRET": "${input:notify-channels-youtube-clientsecret}",
"NOTIFY_CHANNELS_YOUTUBE_REFRESHTOKEN": "${input:notify-channels-youtube-refreshtoken}",
"NOTIFY_CHANNELS_YOUTUBE_LIVECHATID": "${input:notify-channels-youtube-livechatid}",
"NOTIFY_CHANNELS_INSTAGRAM_ACCESSTOKEN": "${input:notify-channels-instagram-accesstoken}",
"NOTIFY_CHANNELS_INSTAGRAM_USERID": "${input:notify-channels-instagram-userid}",
"NOTIFY_CHANNELS_SENDGRID_APIKEY": "${input:notify-channels-sendgrid-apikey}",
"NOTIFY_CHANNELS_SENDGRID_FROMEMAIL": "${input:notify-channels-sendgrid-fromemail}",
"NOTIFY_CHANNELS_TIKTOKSHOP_APPKEY": "${input:notify-channels-tiktokshop-appkey}",
"NOTIFY_CHANNELS_TIKTOKSHOP_APPSECRET": "${input:notify-channels-tiktokshop-appsecret}",
"NOTIFY_CHANNELS_TIKTOKSHOP_ACCESSTOKEN": "${input:notify-channels-tiktokshop-accesstoken}",
"NOTIFY_CHANNELS_TIKTOKSHOP_SHOPID": "${input:notify-channels-tiktokshop-shopid}",
"NOTIFY_CHANNELS_FACEBOOK_PAGEACCESSTOKEN": "${input:notify-channels-facebook-pageaccesstoken}",
"NOTIFY_CHANNELS_FACEBOOK_PAGEID": "${input:notify-channels-facebook-pageid}",
"NOTIFY_CHANNELS_AWSSNS_ACCESSKEYID": "${input:notify-channels-awssns-accesskeyid}",
"NOTIFY_CHANNELS_AWSSNS_SECRETACCESSKEY": "${input:notify-channels-awssns-secretaccesskey}",
"NOTIFY_CHANNELS_AWSSNS_REGION": "${input:notify-channels-awssns-region}",
"NOTIFY_CHANNELS_MAILGUN_APIKEY": "${input:notify-channels-mailgun-apikey}",
"NOTIFY_CHANNELS_MAILGUN_DOMAIN": "${input:notify-channels-mailgun-domain}",
"NOTIFY_CHANNELS_MAILGUN_FROMEMAIL": "${input:notify-channels-mailgun-fromemail}",
"NOTIFY_CHANNELS_PAGERDUTY_APIKEY": "${input:notify-channels-pagerduty-apikey}"
}
}
}
}
VS Code prompts for each input the first time the server starts, so no secret is written to the file. VS Code docs