notifyhub

Unified notification MCP server with 36 tools to send messages across 23 channels — Email, SMS, Slack, Telegram, Discord, Teams, WhatsApp, Firebase Push, and more.

What is NotifyHub?

NotifyHub is a unified notification library for Java and Spring Boot. Instead of integrating each channel separately (Twilio SDK for SMS, JavaMail for email, webhook calls for Slack...), you use one fluent API for everything.

šŸ“¦

Library

Add as a Maven/Gradle dependency. Spring Boot auto-configures everything. Just @Autowired NotifyHub and send.

🌐

REST API

Don't use Java? Run our Docker image and call HTTP endpoints from any language. Swagger UI included.

šŸ¤–

AI Ready

MCP Server with 33 tools. Let Claude, Cursor, or any AI assistant send notifications on your behalf.

No Code Required

Send notifications from Claude, Cursor, or any AI assistant. Just talk naturally — NotifyHub handles the rest.

1

Download

Get the NotifyHub MCP executable.
No Java, no dependencies.

2

Setup (3 min)

Run notifyhub-mcp --setup
The wizard configures everything.

3

Talk to AI

Open Claude and say:
"Send an email to [email protected]"

What you can say

"Send a Slack message to #general saying deployment is complete"

"Notify my team on Discord that the build failed"

"Email the client the project update"

"Send a Telegram message to the ops channel"

"Post on Twitter that v2.0 is live"

"Send an SMS to +1234567890 with the verification code"

Works with 10+ AI editors

Claude Desktop • Claude Code • Cursor • Windsurf • VS Code + Copilot • Cline • Roo Code • Continue.dev • Amazon Q • and more

23 Channels. Zero Friction.

Every channel uses the same API. Most use zero external SDKs — just the JDK HttpClient. Add only the channels you need.

Email

Email

SMTP (Gmail, SES, Outlook, any). HTML templates, attachments, TLS.

SMS

Twilio. Send text messages worldwide with delivery status.

WhatsApp

WhatsApp

Twilio or WhatsApp Cloud API. Media attachments supported.

Slack

Slack

Incoming Webhooks. Named channels, no SDK needed.

Telegram

Telegram

Bot API. Send to any chat ID or named alias.

Discord

Discord

Webhooks. Custom username, avatar, named servers.

Microsoft Teams

Incoming Webhooks. MessageCard format.

Google Chat

Google Chat

Webhooks. Send to any Google Chat space.

Firebase

Firebase Push

FCM. Mobile push notifications with title and body.

WebSocket

JDK WebSocket with auto-reconnect. Real-time.

Generic Webhook

Any HTTP endpoint. PagerDuty, Datadog, custom APIs.

Twitter / X

API v2. Post tweets with OAuth 1.0a. No SDK needed.

LinkedIn

REST API. Publish posts with OAuth 2.0 Bearer token.

Notion

API. Create pages in any database. Integration Token.

Twitch

Twitch

Helix API. Chat messages + polls. OAuth auto-refresh.

YouTube

YouTube

Data API v3. Live chat messages. OAuth auto-refresh.

Instagram

Instagram

Meta Graph API. DMs and feed posts. No SDK needed.

SendGrid

Email delivery tracking — opened, clicked, bounced, spam complaints.

TikTok Shop

TikTok Shop

Shop notifications with HMAC-SHA256 authentication.

Facebook

Facebook

Page posts & Messenger DMs via Graph API.

AWS SNS

Topics, push endpoints, and SMS via Amazon SNS.

Mailgun

Mailgun

Transactional email via Mailgun REST API.

PagerDuty

PagerDuty

Trigger incidents via Events API v2.

Custom

Implement one interface. Your channel, your rules.

Everything You Need

NotifyHub isn't just a message sender. It's a complete notification infrastructure with retry, tracking, templates, scheduling, and more.

āš™ Fluent API

Builder pattern with chaining. .to().via().fallback().template().send() — readable and type-safe.

šŸ”„ Fallback Chains

If WhatsApp fails, try SMS. If SMS fails, try Email. Automatic failover with no extra code.

šŸ“‹ Mustache Templates

HTML for email, plain text for chat. Template versioning for A/B tests. i18n with locale fallback.

šŸ‘„ Batch Send

toAll(recipients) and toAllNotifiable(users). Send to thousands with failure isolation.

ā³ Scheduling

Schedule, list, and cancel notifications. Use relative delays or absolute timestamps with timezone support.

šŸ” Retry & DLQ

Exponential or fixed backoff. Failed after all retries? Goes to Dead Letter Queue for manual reprocessing.

šŸ“ˆ Rate Limiting

Token bucket per channel. Configurable limits. URGENT priority bypasses the limiter.

šŸ” Delivery Tracking

Every send returns a DeliveryReceipt. Email tracking via SendGrid: opened, clicked, bounced, spam complaints.

šŸ”’ Deduplication

Content-hash or explicit key. Same message won't be sent twice within the TTL window.

⚔ Async

sendAsync() and sendAllAsync() return CompletableFuture. Non-blocking sends.

šŸ‘¤ Named Recipients

Define aliases like "alerts", "devops". Send to a name, resolve to webhook URL or chat ID.

šŸ“¦ Message Queues

RabbitMQ and Kafka modules. Enqueue notifications for async, distributed processing.

šŸ‘ OpenTelemetry

Auto-configured tracing via Micrometer Observation API. Export spans to Jaeger, Tempo, or any OTLP collector.

šŸ›” Circuit Breaker

Per-channel circuit breaker with sliding failure window. Prevents cascading failures with CLOSED → OPEN → HALF_OPEN states.

šŸ“‹ Orchestration

Multi-step escalation: first(EMAIL).ifNoOpen(24h).then(PUSH). Promote through channels if users don't engage.

šŸ”¬ A/B Testing

Built-in deterministic variant selection via SHA-256 hashing. Split traffic across template variants with weighted percentages.

šŸ”§ TestNotifyHub

Test utility with capturing channels. Assert on sent notifications without mocking. Zero test infrastructure needed.

For Developers

One fluent Java API. 23 channels. 3 lines of code. Spring Boot auto-configured.

Java — That's it. Really.

notify.to("[email protected]")
    .via(EMAIL)
    .fallback(SLACK)
    .subject("Order Confirmed")
    .content("Your order #123 has shipped!")
    .send();

Developer Docs Maven Central

See It In Action

A few lines of code. That's all it takes.

Send an email with fallback to SMS

Java

notify.to("[email protected]")
    .via(Channel.EMAIL)
    .fallback(Channel.SMS)
    .subject("Order Confirmed")
    .template("order-confirmed")
    .param("orderId", "ORD-2024")
    .send();

Send to multiple channels at once

Java

notify.to(user)
    .via(Channel.EMAIL)
    .via(Channel.SLACK)
    .via(Channel.DISCORD)
    .subject("Security Alert")
    .content("Login from a new device detected")
    .sendAll();

Batch send to thousands

Java

notify.toAll(List.of("[email protected]", "[email protected]", "[email protected]"))
    .via(Channel.EMAIL)
    .subject("System Maintenance")
    .template("maintenance-notice")
    .param("date", "2025-03-01")
    .send();

Schedule for later + track delivery

Java

DeliveryReceipt receipt = notify.to(user)
    .via(Channel.EMAIL)
    .subject("Reminder")
    .content("Don't forget your appointment!")
    .sendTracked();

receipt.getStatus();    // SENT
receipt.getId();        // uuid
receipt.getTimestamp(); // 2025-01-15T10:30:00Z

Quick Start

Add the dependency, configure your channels, and start sending.

1

Add the dependency

pom.xml

<dependency>
    <groupId>io.github.gabrielbbaldez</groupId>
    <artifactId>notify-spring-boot-starter</artifactId>
    <version>1.0.0</version>
</dependency>
<!-- Add the channels you need -->
<dependency>
    <groupId>io.github.gabrielbbaldez</groupId>
    <artifactId>notify-email</artifactId>
    <version>1.0.0</version>
</dependency>

2

Configure in application.yml

application.yml

notify:
  channels:
    email:
      host: smtp.gmail.com
      port: 587
      username: ${GMAIL_USER}
      password: ${GMAIL_PASS}
      from: [email protected]
      tls: true
    slack:
      webhook-url: ${SLACK_WEBHOOK}
    discord:
      webhook-url: ${DISCORD_WEBHOOK}
  retry:
    max-attempts: 3
    strategy: exponential
  tracking:
    enabled: true

3

Send notifications

Java

@Autowired NotifyHub notify;

notify.to("[email protected]")
    .via(Channel.EMAIL)
    .fallback(Channel.SMS)
    .subject("Welcome!")
    .template("welcome")
    .param("name", "Gabriel")
    .send();

Docker

Don't use Java? No problem. Run NotifyHub as a REST API or MCP Server with Docker. Just set environment variables for the channels you want.

REST API gabrielbbal10/notifyhub-api

Full REST API with Swagger UI on port 8080. Send notifications via HTTP from Python, Node.js, Go, cURL, or any language.

Docker Hub Docs

Run it

docker run -d -p 8080:8080 \
  -e [email protected] \
  -e NOTIFY_CHANNELS_EMAIL_PASSWORD=your-app-password \
  -e [email protected] \
  -e NOTIFY_CHANNELS_DISCORD_WEBHOOK_URL="https://discord.com/..." \
  gabrielbbal10/notifyhub-api:latest

Call the API

# Send email
curl -X POST "localhost:8080/send/[email protected]&subject=Hi&body=Hello!"

# Send Discord
curl -X POST "localhost:8080/send/discord?message=Deploy done!"

# Swagger UI
open http://localhost:8080/swagger-ui.html

MCP Server gabrielbbal10/notifyhub-mcp

Model Context Protocol server with 33 tools for AI assistants. Connect to Claude Desktop, Claude Code, or Cursor.

Docker Hub Docs

claude_desktop_config.json

{
  "mcpServers": {
    "notify-hub": {
      "command": "docker",
      "args": ["run", "-i", "--rm",
        "-e", "NOTIFY_CHANNELS_DISCORD_WEBHOOK_URL=...",
        "-e", "[email protected]",
        "-e", "NOTIFY_CHANNELS_EMAIL_PASSWORD=app-password",
        "-e", "[email protected]",
        "gabrielbbal10/notifyhub-mcp"
      ]
    }
  }
}

Environment Variables

Both Docker images use the same NOTIFY_CHANNELS_* variables. Only set the channels you need.

Email (SMTP)
  • NOTIFY_CHANNELS_EMAIL_HOST smtp.gmail.com
  • NOTIFY_CHANNELS_EMAIL_PORT 587
  • NOTIFY_CHANNELS_EMAIL_USERNAME [email protected]
  • NOTIFY_CHANNELS_EMAIL_PASSWORD app-password
  • NOTIFY_CHANNELS_EMAIL_FROM [email protected]
Discord
  • NOTIFY_CHANNELS_DISCORD_WEBHOOK_URL https://discord.com/...
  • NOTIFY_CHANNELS_DISCORD_USERNAME NotifyHub
Slack
Telegram
  • NOTIFY_CHANNELS_TELEGRAM_BOT_TOKEN 123456:ABC...
  • NOTIFY_CHANNELS_TELEGRAM_CHAT_ID 123456789
Teams
SMS (Twilio)
  • NOTIFY_CHANNELS_SMS_ACCOUNT_SID AC...
  • NOTIFY_CHANNELS_SMS_AUTH_TOKEN token
  • NOTIFY_CHANNELS_SMS_FROM_NUMBER +15551234567
Google Chat

Built for AI

NotifyHub includes an MCP Server (Model Context Protocol) that exposes 33 tools. Connect it to Claude Desktop, Claude Code, Cursor, or any MCP-compatible AI client.

36 MCP Tools

send_email send_sms send_whatsapp send_slack send_telegram send_discord send_teams send_google_chat send_push send_twitter send_linkedin send_notion send_twitch send_youtube send_instagram send_tiktok_shop send_facebook send_aws_sns send_mailgun send_pagerduty send_notification send_multi_channel send_batch send_to_audience create_contact list_contacts create_audience list_audiences list_channels list_delivery_receipts list_dead_letters get_analytics check_email_status schedule_notification list_scheduled_notifications cancel_scheduled_notification

What you can say to your AI

"Send an email to [email protected] saying the deploy is complete"

"Create a VIP audience with tags 'premium' and 'active', then send them a promo email"

"Send an SMS to +5548999999999 with the verification code"

"Notify the team on Slack and Telegram that the build passed"

"Show me the delivery analytics — how many sent vs failed?"

"Schedule an email reminder for tomorrow at 9am"

"Check if the last email was opened or bounced"

Claude

Claude Code Skill

AI-powered development assistant — knows the entire NotifyHub API

NotifyHub ships a SKILL.md file (925 lines) that teaches AI coding assistants the full library API. Install it as a Claude Code plugin and your AI knows every channel config, fluent builder method, Spring Boot property, template pattern, retry policy, rate limit preset, and MCP tool — no need to search docs.

šŸ“š

Full API Reference 23 channels, fluent builder, all execution methods, Priority, DeliveryReceipt

āš™ļø

Every Config & Property Java builder + complete application.yml for all channels including OAuth refresh

šŸ¤–

33 MCP Tools Documented Send, batch, audience, contacts, analytics, scheduling, email tracking, DLQ — all tool signatures

šŸ› ļø

Patterns & Architecture Create new channels, custom templates, retry, rate limiting, thread safety

Install as Claude Code Plugin

# Copy SKILL.md to your Claude Code plugins directory
mkdir -p ~/.claude/plugins/notifyhub/skills/notifyhub
cp SKILL.md ~/.claude/plugins/notifyhub/skills/notifyhub/

Once installed, Claude Code automatically uses the skill whenever you work with NotifyHub — generating correct configs, writing channel implementations, debugging send failures, and more.

Message Queues

For high-throughput or distributed systems, enqueue notifications to RabbitMQ or Kafka. A consumer picks them up and sends via NotifyHub automatically.

RabbitMQ

notify-queue-rabbitmq

application.yml

notify.queue.rabbitmq:
  enabled: true
  queue-name: notifyhub-notifications
  exchange-name: notifyhub-exchange
  routing-key: notification

Apache Kafka

notify-queue-kafka

application.yml

notify.queue.kafka:
  enabled: true
  topic: notifyhub-notifications
  consumer:
    group-id: notifyhub-group

Admin Dashboard

Built-in web UI at /notify-admin with 8 pages. Dark/light theme toggle, responsive design, shared CSS architecture.

šŸ“ˆ Dashboard

Metric cards, recent activity feed, system status, channel overview.

šŸ“Š Analytics

Chart.js charts: volume, distribution, success rate, hourly heatmap.

šŸ” Tracking

Every delivery receipt. Filter by channel, status, recipient.

šŸ—‘ Dead Letter Queue

Failed after all retries. Inspect error, remove from queue.

šŸ“” Channels

All registered channels with health indicators and type info.

šŸ“ Audit Log

Complete event history with type filter. Sent, failed, scheduled, cancelled.

šŸ‘„ Audiences

Manage contacts and segments with tag-based filtering.

šŸ”— Status Webhook

HTTP callback config, recent deliveries, payload inspection.

28 Modules. Pick What You Need.

NotifyHub is modular. The core has zero Spring dependency. Add only the channels and features you use.

ModuleWhat it does
notify-coreFluent API, templates, retry, DLQ, rate limiting, tracking. Zero Spring dependency.
notify-spring-boot-starterAuto-configures everything for Spring Boot. The main entry point.
notify-emailSMTP email with Jakarta Mail. HTML, attachments, TLS/SSL.
notify-smsSMS + WhatsApp via Twilio or WhatsApp Cloud API.
notify-slackSlack via Incoming Webhooks. No SDK.
notify-telegramTelegram via Bot API. No SDK.
notify-discordDiscord via Webhooks. No SDK.
notify-teamsMicrosoft Teams via Webhooks. No SDK.
notify-google-chatGoogle Chat via Webhooks. No SDK.
notify-push-firebaseFirebase Cloud Messaging push notifications.
notify-webhookGeneric HTTP webhooks. Configurable payload templates.
notify-websocketJDK WebSocket with auto-reconnect.
notify-twitterTwitter/X via API v2 with OAuth 1.0a. No SDK.
notify-linkedinLinkedIn via REST API with OAuth 2.0. No SDK.
notify-notionNotion via API. Create pages in any database.
notify-twitchTwitch via Helix API. Chat messages + polls.
notify-youtubeYouTube via Data API v3. Live chat messages.
notify-instagramInstagram via Meta Graph API. DMs and feed posts.
notify-sendgridSendGrid email with delivery tracking (opened, clicked, bounced, spam).
notify-tiktok-shopTikTok Shop API with HMAC-SHA256 authentication.
notify-facebookFacebook Graph API. Page posts and Messenger DMs.
notify-aws-snsAmazon SNS. Topics, push endpoints, and direct SMS.
notify-mailgunMailgun REST API. Transactional email with US/EU regions.
notify-pagerdutyPagerDuty Events API v2. Incident triggering with severity.
notify-tracker-jpaJPA-backed delivery tracking. Persist receipts to any database.
notify-audit-jpaJPA-backed audit logging. Persist events to any database.
notify-adminWeb dashboard for monitoring and DLQ management.
notify-mcpMCP Server for AI assistants (36 tools).
notify-queue-rabbitmqRabbitMQ producer/consumer for async notifications.
notify-queue-kafkaApache Kafka producer/consumer for async notifications.

Related Servers