One API. Every channel. Unified notification library for Java and Spring Boot.
Setup
Choose your client, copy the config, then fill in any required environment variables.
claude mcp add notifyhub-unified-notification --env NOTIFY_CHANNELS_EMAIL_USERNAME='<NOTIFY_CHANNELS_EMAIL_USERNAME>' --env NOTIFY_CHANNELS_EMAIL_PASSWORD='<NOTIFY_CHANNELS_EMAIL_PASSWORD>' --env NOTIFY_CHANNELS_SMS_ACCOUNTSID='<NOTIFY_CHANNELS_SMS_ACCOUNTSID>' --env NOTIFY_CHANNELS_SMS_AUTHTOKEN='<NOTIFY_CHANNELS_SMS_AUTHTOKEN>' --env NOTIFY_CHANNELS_SLACK_WEBHOOKURL='<NOTIFY_CHANNELS_SLACK_WEBHOOKURL>' --env NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN='<NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN>' --env NOTIFY_CHANNELS_DISCORD_WEBHOOKURL='<NOTIFY_CHANNELS_DISCORD_WEBHOOKURL>' --env NOTIFY_CHANNELS_TEAMS_WEBHOOKURL='<NOTIFY_CHANNELS_TEAMS_WEBHOOKURL>' -- docker run -i --rm -e NOTIFY_CHANNELS_EMAIL_USERNAME -e NOTIFY_CHANNELS_EMAIL_PASSWORD -e NOTIFY_CHANNELS_SMS_ACCOUNTSID -e NOTIFY_CHANNELS_SMS_AUTHTOKEN -e NOTIFY_CHANNELS_SLACK_WEBHOOKURL -e NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN -e NOTIFY_CHANNELS_DISCORD_WEBHOOKURL -e NOTIFY_CHANNELS_TEAMS_WEBHOOKURL ghcr.io/gabrielbbaldez/notify-hub:1.1.0~/.codex/config.toml
[mcp_servers.notifyhub-unified-notification]
command = "docker"
args = ["run", "-i", "--rm", "-e", "NOTIFY_CHANNELS_EMAIL_USERNAME", "-e", "NOTIFY_CHANNELS_EMAIL_PASSWORD", "-e", "NOTIFY_CHANNELS_SMS_ACCOUNTSID", "-e", "NOTIFY_CHANNELS_SMS_AUTHTOKEN", "-e", "NOTIFY_CHANNELS_SLACK_WEBHOOKURL", "-e", "NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN", "-e", "NOTIFY_CHANNELS_DISCORD_WEBHOOKURL", "-e", "NOTIFY_CHANNELS_TEAMS_WEBHOOKURL", "ghcr.io/gabrielbbaldez/notify-hub:1.1.0"]
env = { NOTIFY_CHANNELS_EMAIL_USERNAME = "<NOTIFY_CHANNELS_EMAIL_USERNAME>", NOTIFY_CHANNELS_EMAIL_PASSWORD = "<NOTIFY_CHANNELS_EMAIL_PASSWORD>", NOTIFY_CHANNELS_SMS_ACCOUNTSID = "<NOTIFY_CHANNELS_SMS_ACCOUNTSID>", NOTIFY_CHANNELS_SMS_AUTHTOKEN = "<NOTIFY_CHANNELS_SMS_AUTHTOKEN>", NOTIFY_CHANNELS_SLACK_WEBHOOKURL = "<NOTIFY_CHANNELS_SLACK_WEBHOOKURL>", NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN = "<NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN>", NOTIFY_CHANNELS_DISCORD_WEBHOOKURL = "<NOTIFY_CHANNELS_DISCORD_WEBHOOKURL>", NOTIFY_CHANNELS_TEAMS_WEBHOOKURL = "<NOTIFY_CHANNELS_TEAMS_WEBHOOKURL>" }
# codex mcp add notifyhub-unified-notification --env NOTIFY_CHANNELS_EMAIL_USERNAME='<NOTIFY_CHANNELS_EMAIL_USERNAME>' --env NOTIFY_CHANNELS_EMAIL_PASSWORD='<NOTIFY_CHANNELS_EMAIL_PASSWORD>' --env NOTIFY_CHANNELS_SMS_ACCOUNTSID='<NOTIFY_CHANNELS_SMS_ACCOUNTSID>' --env NOTIFY_CHANNELS_SMS_AUTHTOKEN='<NOTIFY_CHANNELS_SMS_AUTHTOKEN>' --env NOTIFY_CHANNELS_SLACK_WEBHOOKURL='<NOTIFY_CHANNELS_SLACK_WEBHOOKURL>' --env NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN='<NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN>' --env NOTIFY_CHANNELS_DISCORD_WEBHOOKURL='<NOTIFY_CHANNELS_DISCORD_WEBHOOKURL>' --env NOTIFY_CHANNELS_TEAMS_WEBHOOKURL='<NOTIFY_CHANNELS_TEAMS_WEBHOOKURL>' -- docker run -i --rm -e NOTIFY_CHANNELS_EMAIL_USERNAME -e NOTIFY_CHANNELS_EMAIL_PASSWORD -e NOTIFY_CHANNELS_SMS_ACCOUNTSID -e NOTIFY_CHANNELS_SMS_AUTHTOKEN -e NOTIFY_CHANNELS_SLACK_WEBHOOKURL -e NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN -e NOTIFY_CHANNELS_DISCORD_WEBHOOKURL -e NOTIFY_CHANNELS_TEAMS_WEBHOOKURL ghcr.io/gabrielbbaldez/notify-hub:1.1.0~/.cursor/mcp.json
{
"mcpServers": {
"notifyhub-unified-notification": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"NOTIFY_CHANNELS_EMAIL_USERNAME",
"-e",
"NOTIFY_CHANNELS_EMAIL_PASSWORD",
"-e",
"NOTIFY_CHANNELS_SMS_ACCOUNTSID",
"-e",
"NOTIFY_CHANNELS_SMS_AUTHTOKEN",
"-e",
"NOTIFY_CHANNELS_SLACK_WEBHOOKURL",
"-e",
"NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN",
"-e",
"NOTIFY_CHANNELS_DISCORD_WEBHOOKURL",
"-e",
"NOTIFY_CHANNELS_TEAMS_WEBHOOKURL",
"ghcr.io/gabrielbbaldez/notify-hub:1.1.0"
],
"env": {
"NOTIFY_CHANNELS_EMAIL_USERNAME": "<NOTIFY_CHANNELS_EMAIL_USERNAME>",
"NOTIFY_CHANNELS_EMAIL_PASSWORD": "<NOTIFY_CHANNELS_EMAIL_PASSWORD>",
"NOTIFY_CHANNELS_SMS_ACCOUNTSID": "<NOTIFY_CHANNELS_SMS_ACCOUNTSID>",
"NOTIFY_CHANNELS_SMS_AUTHTOKEN": "<NOTIFY_CHANNELS_SMS_AUTHTOKEN>",
"NOTIFY_CHANNELS_SLACK_WEBHOOKURL": "<NOTIFY_CHANNELS_SLACK_WEBHOOKURL>",
"NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN": "<NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN>",
"NOTIFY_CHANNELS_DISCORD_WEBHOOKURL": "<NOTIFY_CHANNELS_DISCORD_WEBHOOKURL>",
"NOTIFY_CHANNELS_TEAMS_WEBHOOKURL": "<NOTIFY_CHANNELS_TEAMS_WEBHOOKURL>"
}
}
}
}.vscode/mcp.json
{
"servers": {
"notifyhub-unified-notification": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"NOTIFY_CHANNELS_EMAIL_USERNAME",
"-e",
"NOTIFY_CHANNELS_EMAIL_PASSWORD",
"-e",
"NOTIFY_CHANNELS_SMS_ACCOUNTSID",
"-e",
"NOTIFY_CHANNELS_SMS_AUTHTOKEN",
"-e",
"NOTIFY_CHANNELS_SLACK_WEBHOOKURL",
"-e",
"NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN",
"-e",
"NOTIFY_CHANNELS_DISCORD_WEBHOOKURL",
"-e",
"NOTIFY_CHANNELS_TEAMS_WEBHOOKURL",
"ghcr.io/gabrielbbaldez/notify-hub:1.1.0"
],
"env": {
"NOTIFY_CHANNELS_EMAIL_USERNAME": "<NOTIFY_CHANNELS_EMAIL_USERNAME>",
"NOTIFY_CHANNELS_EMAIL_PASSWORD": "<NOTIFY_CHANNELS_EMAIL_PASSWORD>",
"NOTIFY_CHANNELS_SMS_ACCOUNTSID": "<NOTIFY_CHANNELS_SMS_ACCOUNTSID>",
"NOTIFY_CHANNELS_SMS_AUTHTOKEN": "<NOTIFY_CHANNELS_SMS_AUTHTOKEN>",
"NOTIFY_CHANNELS_SLACK_WEBHOOKURL": "<NOTIFY_CHANNELS_SLACK_WEBHOOKURL>",
"NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN": "<NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN>",
"NOTIFY_CHANNELS_DISCORD_WEBHOOKURL": "<NOTIFY_CHANNELS_DISCORD_WEBHOOKURL>",
"NOTIFY_CHANNELS_TEAMS_WEBHOOKURL": "<NOTIFY_CHANNELS_TEAMS_WEBHOOKURL>"
}
}
}
}~/.gemini/settings.json
{
"mcpServers": {
"notifyhub-unified-notification": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"NOTIFY_CHANNELS_EMAIL_USERNAME",
"-e",
"NOTIFY_CHANNELS_EMAIL_PASSWORD",
"-e",
"NOTIFY_CHANNELS_SMS_ACCOUNTSID",
"-e",
"NOTIFY_CHANNELS_SMS_AUTHTOKEN",
"-e",
"NOTIFY_CHANNELS_SLACK_WEBHOOKURL",
"-e",
"NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN",
"-e",
"NOTIFY_CHANNELS_DISCORD_WEBHOOKURL",
"-e",
"NOTIFY_CHANNELS_TEAMS_WEBHOOKURL",
"ghcr.io/gabrielbbaldez/notify-hub:1.1.0"
],
"env": {
"NOTIFY_CHANNELS_EMAIL_USERNAME": "<NOTIFY_CHANNELS_EMAIL_USERNAME>",
"NOTIFY_CHANNELS_EMAIL_PASSWORD": "<NOTIFY_CHANNELS_EMAIL_PASSWORD>",
"NOTIFY_CHANNELS_SMS_ACCOUNTSID": "<NOTIFY_CHANNELS_SMS_ACCOUNTSID>",
"NOTIFY_CHANNELS_SMS_AUTHTOKEN": "<NOTIFY_CHANNELS_SMS_AUTHTOKEN>",
"NOTIFY_CHANNELS_SLACK_WEBHOOKURL": "<NOTIFY_CHANNELS_SLACK_WEBHOOKURL>",
"NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN": "<NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN>",
"NOTIFY_CHANNELS_DISCORD_WEBHOOKURL": "<NOTIFY_CHANNELS_DISCORD_WEBHOOKURL>",
"NOTIFY_CHANNELS_TEAMS_WEBHOOKURL": "<NOTIFY_CHANNELS_TEAMS_WEBHOOKURL>"
}
}
}
}claude_desktop_config.json
{
"mcpServers": {
"notifyhub-unified-notification": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"NOTIFY_CHANNELS_EMAIL_USERNAME",
"-e",
"NOTIFY_CHANNELS_EMAIL_PASSWORD",
"-e",
"NOTIFY_CHANNELS_SMS_ACCOUNTSID",
"-e",
"NOTIFY_CHANNELS_SMS_AUTHTOKEN",
"-e",
"NOTIFY_CHANNELS_SLACK_WEBHOOKURL",
"-e",
"NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN",
"-e",
"NOTIFY_CHANNELS_DISCORD_WEBHOOKURL",
"-e",
"NOTIFY_CHANNELS_TEAMS_WEBHOOKURL",
"ghcr.io/gabrielbbaldez/notify-hub:1.1.0"
],
"env": {
"NOTIFY_CHANNELS_EMAIL_USERNAME": "<NOTIFY_CHANNELS_EMAIL_USERNAME>",
"NOTIFY_CHANNELS_EMAIL_PASSWORD": "<NOTIFY_CHANNELS_EMAIL_PASSWORD>",
"NOTIFY_CHANNELS_SMS_ACCOUNTSID": "<NOTIFY_CHANNELS_SMS_ACCOUNTSID>",
"NOTIFY_CHANNELS_SMS_AUTHTOKEN": "<NOTIFY_CHANNELS_SMS_AUTHTOKEN>",
"NOTIFY_CHANNELS_SLACK_WEBHOOKURL": "<NOTIFY_CHANNELS_SLACK_WEBHOOKURL>",
"NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN": "<NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN>",
"NOTIFY_CHANNELS_DISCORD_WEBHOOKURL": "<NOTIFY_CHANNELS_DISCORD_WEBHOOKURL>",
"NOTIFY_CHANNELS_TEAMS_WEBHOOKURL": "<NOTIFY_CHANNELS_TEAMS_WEBHOOKURL>"
}
}
}
}.trae/mcp.json
{
"mcpServers": {
"notifyhub-unified-notification": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"NOTIFY_CHANNELS_EMAIL_USERNAME",
"-e",
"NOTIFY_CHANNELS_EMAIL_PASSWORD",
"-e",
"NOTIFY_CHANNELS_SMS_ACCOUNTSID",
"-e",
"NOTIFY_CHANNELS_SMS_AUTHTOKEN",
"-e",
"NOTIFY_CHANNELS_SLACK_WEBHOOKURL",
"-e",
"NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN",
"-e",
"NOTIFY_CHANNELS_DISCORD_WEBHOOKURL",
"-e",
"NOTIFY_CHANNELS_TEAMS_WEBHOOKURL",
"ghcr.io/gabrielbbaldez/notify-hub:1.1.0"
],
"env": {
"NOTIFY_CHANNELS_EMAIL_USERNAME": "<NOTIFY_CHANNELS_EMAIL_USERNAME>",
"NOTIFY_CHANNELS_EMAIL_PASSWORD": "<NOTIFY_CHANNELS_EMAIL_PASSWORD>",
"NOTIFY_CHANNELS_SMS_ACCOUNTSID": "<NOTIFY_CHANNELS_SMS_ACCOUNTSID>",
"NOTIFY_CHANNELS_SMS_AUTHTOKEN": "<NOTIFY_CHANNELS_SMS_AUTHTOKEN>",
"NOTIFY_CHANNELS_SLACK_WEBHOOKURL": "<NOTIFY_CHANNELS_SLACK_WEBHOOKURL>",
"NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN": "<NOTIFY_CHANNELS_TELEGRAM_BOTTOKEN>",
"NOTIFY_CHANNELS_DISCORD_WEBHOOKURL": "<NOTIFY_CHANNELS_DISCORD_WEBHOOKURL>",
"NOTIFY_CHANNELS_TEAMS_WEBHOOKURL": "<NOTIFY_CHANNELS_TEAMS_WEBHOOKURL>"
}
}
}
}Environment variables
NOTIFY_CHANNELS_EMAIL_USERNAMENOTIFY_CHANNELS_EMAIL_PASSWORDNOTIFY_CHANNELS_SMS_ACCOUNTSIDNOTIFY_CHANNELS_SMS_AUTHTOKENNOTIFY_CHANNELS_SLACK_WEBHOOKURLNOTIFY_CHANNELS_TELEGRAM_BOTTOKENNOTIFY_CHANNELS_DISCORD_WEBHOOKURLNOTIFY_CHANNELS_TEAMS_WEBHOOKURL
Replace the placeholders with your own credentials and keep them out of version control.