Skip to content
VS Code

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

NotifyHub — Unified Notification MCP Server in other clients