MCP Servers

A collection of Model Context Protocol servers, templates, tools and more.

Full-stack messaging for ADK-Rust Enterprise agents. Provides 20 MCP tools covering push notifications, SMS (4 regional providers), webhooks, in-app messaging with rich media, message queues, and broadcasts for ADK-Rust Enterprise AI Agents.

Created 5/27/2026
Updated about 5 hours ago
Repository documentation and setup instructions

Messaging & Notifications MCP Server

Crates.io Docs.rs License ADK-Rust Enterprise Registry Ready

Full-stack messaging for ADK-Rust Enterprise agents. Provides 20 MCP tools covering push notifications, SMS (4 regional providers), webhooks, in-app messaging with rich media, message queues, and broadcasts.

Architecture

┌─────────────────────────────────────────────────────────────────────┐
│                        mcp-messaging (20 tools)                      │
├──────────┬──────────┬──────────┬──────────────┬─────────────────────┤
│   Push   │   SMS    │ Webhooks │   In-App     │      Queues         │
├──────────┼──────────┼──────────┼──────────────┼─────────────────────┤
│ ntfy.sh  │ Twilio   │ Any URL  │ Channels     │ Priority queues     │
│ Firebase │ AT (🌍)  │          │ Rich media   │ Delayed delivery    │
│          │ Vonage(🇪🇺)│         │ Read receipts│ Dequeue/status      │
│          │ Sinch(🌏) │          │ Recall       │                     │
│          │          │          │ Formatting   │                     │
└──────────┴──────────┴──────────┴──────────────┴─────────────────────┘

Key Principles

  • Global SMS coverage — Africa's Talking, Twilio, Vonage, Sinch cover every continent.
  • Free push notifications — ntfy.sh requires zero configuration or API keys.
  • Rich messaging — HTML, images, video, audio, files, locations, reply threading.
  • Message lifecycle — send → deliver → read receipt → recall.
  • Built-in queues — priority-based message queues for async job dispatch.
  • Registry-ready — ships with mcp-server.toml for automatic ADK-Rust Enterprise onboarding.

Tools (20)

Push Notifications

| Tool | Provider | Description | |------|----------|-------------| | send_push | ntfy.sh | Send push notification (free, no auth) | | broadcast | ntfy.sh | Broadcast to multiple topics at once | | send_fcm | Firebase | Send via Google Firebase Cloud Messaging |

SMS

| Tool | Provider | Coverage | |------|----------|----------| | send_sms | Twilio | Americas, global | | send_sms_africa | Africa's Talking | Kenya, Nigeria, Uganda, Tanzania, Rwanda, Ghana, South Africa | | send_sms_europe | Vonage/Nexmo | Europe, UK, 200+ countries | | send_sms_asia | Sinch | Australia, India, Japan, Singapore, 200+ countries |

Webhooks

| Tool | Description | |------|-------------| | fire_webhook | POST JSON payload to any URL with event headers | | subscribe_webhook | Subscribe a URL to receive topic notifications |

In-App Messaging

| Tool | Description | |------|-------------| | create_channel | Create direct, group, or broadcast channel | | send_message | Send text, HTML, image, video, audio, file, or location | | get_messages | Retrieve channel message history | | get_message_status | Check sent/delivered/read/recalled status | | mark_as_read | Set read receipt for a message | | recall_message | Unsend a message (clears content) | | format_message | Generate styled HTML with fonts, colors, backgrounds |

Message Queues

| Tool | Description | |------|-------------| | enqueue | Add message to priority queue (with optional delay) | | dequeue | Remove and return oldest visible messages | | queue_status | Get queue depth and age | | set_queue_priority | Update priority of queued message |

Installation

From crates.io

cargo install mcp-messaging

Build from source

git clone https://github.com/zavora-ai/mcp-messaging
cd mcp-messaging
cargo build --release

Claude Desktop

{
  "mcpServers": {
    "messaging": {
      "command": "mcp-messaging",
      "env": {
        "AT_USERNAME": "your_username",
        "AT_API_KEY": "your_key"
      }
    }
  }
}

Kiro

Add to .kiro/settings/mcp.json:

{
  "mcpServers": {
    "messaging": {
      "command": "mcp-messaging",
      "env": {
        "FCM_SERVER_KEY": "your_firebase_key"
      }
    }
  }
}

Cursor

Add to .cursor/mcp.json:

{
  "mcpServers": {
    "messaging": { "command": "mcp-messaging" }
  }
}

Configuration

Environment Variables

| Variable | Provider | Required | |----------|----------|:--------:| | NTFY_SERVER | ntfy.sh (default: https://ntfy.sh) | No | | FCM_SERVER_KEY | Firebase Cloud Messaging | No | | TWILIO_ACCOUNT_SID | Twilio | No | | TWILIO_AUTH_TOKEN | Twilio | No | | TWILIO_FROM_NUMBER | Twilio | No | | AT_USERNAME | Africa's Talking | No | | AT_API_KEY | Africa's Talking | No | | VONAGE_API_KEY | Vonage/Nexmo | No | | VONAGE_API_SECRET | Vonage/Nexmo | No | | SINCH_SERVICE_PLAN_ID | Sinch | No | | SINCH_API_TOKEN | Sinch | No |

All providers are optional. The server starts with zero configuration — push notifications via ntfy.sh and in-app messaging work immediately. SMS providers activate when their env vars are set.

Quick Start

Send a push notification (zero config)

{
  "name": "send_push",
  "arguments": {
    "topic": "rider-james-4521",
    "title": "Ride Accepted",
    "message": "Driver John is 3 minutes away. Toyota Vitz, KBZ 123A",
    "priority": 4,
    "tags": ["car", "white_check_mark"]
  }
}

Send rich media message

{
  "name": "send_message",
  "arguments": {
    "channel": "trip-4521",
    "sender": "driver_john",
    "text": "Voice note",
    "msg_type": "audio",
    "media_url": "https://cdn.example.com/voice/msg123.ogg",
    "mime_type": "audio/ogg",
    "duration_seconds": 12
  }
}

Format a styled message

{
  "name": "format_message",
  "arguments": {
    "text": "Your ride is confirmed!",
    "font": "Georgia",
    "font_size": 18,
    "color": "#FFFFFF",
    "background": "#4CAF50",
    "bold": true,
    "align": "center"
  }
}

Output:

<div style="font-family:'Georgia';font-size:18px;color:#FFFFFF;background-color:#4CAF50;font-weight:bold;text-align:center;padding:8px">Your ride is confirmed!</div>

Send SMS to Africa

{
  "name": "send_sms_africa",
  "arguments": {
    "to": "+254712345678",
    "message": "Your ride is arriving in 2 minutes. Driver: John, KBZ 123A"
  }
}

Enqueue a job

{
  "name": "enqueue",
  "arguments": {
    "queue": "ride_requests",
    "payload": {
      "rider": "james",
      "pickup": [-1.2921, 36.8219],
      "dropoff": [-1.1631, 36.9519]
    },
    "priority": 5
  }
}

Mark message as read

{
  "name": "mark_as_read",
  "arguments": {
    "message_id": "msg_a0e4fa8c",
    "channel": "trip-4521",
    "reader": "rider_james"
  }
}

Recall a message

{
  "name": "recall_message",
  "arguments": {
    "message_id": "msg_a0e4fa8c",
    "channel": "trip-4521"
  }
}

Message Types

| Type | Required Fields | Optional Fields | |------|----------------|-----------------| | text | text | reply_to | | html | text (HTML content) | reply_to | | image | text, media_url | mime_type, thumbnail_url | | video | text, media_url | mime_type, thumbnail_url, duration_seconds | | audio | text, media_url | mime_type, duration_seconds | | file | text, media_url | mime_type, file_name, file_size | | location | text, lat, lon | metadata | | contact | text | metadata (phone, email) | | system | text | — |

Message Lifecycle

send_message → delivered → mark_as_read → [recall_message]
     │              │            │                │
     ▼              ▼            ▼                ▼
  msg_id      get_messages   read_by[]     "[Message recalled]"
              get_status     timestamps     content cleared

SMS Coverage Map

| Region | Provider | Countries | |--------|----------|-----------| | 🌍 Africa | Africa's Talking | KE, NG, UG, TZ, RW, GH, ZA, ET, CI, SN, CM, MW, ZM, BJ, BF | | 🇺🇸 Americas | Twilio | US, CA, BR, MX, AR, CO, CL, PE | | 🇪🇺 Europe | Vonage | UK, DE, FR, ES, IT, NL, SE, NO, PL, 200+ | | 🌏 Asia-Pacific | Sinch | AU, IN, JP, SG, KR, TH, PH, ID, MY, 200+ |

Use Cases

Ride-Hailing App

Ride accepted → send_push (rider) + send_fcm (mobile app)
Driver arriving → send_sms_africa (fallback for no internet)
In-trip chat → create_channel + send_message (voice notes, location)
Trip complete → format_message (receipt HTML) + fire_webhook (billing)

E-Commerce

Order placed → enqueue (fulfillment queue)
Shipped → send_push + send_sms
Delivered → mark_as_read (delivery confirmation)
Support chat → create_channel + send_message (images of damaged item)

Team Communication

Announcement → broadcast (all team topics)
Direct message → create_channel (direct) + send_message
Read tracking → mark_as_read
Mistake → recall_message

MCP Server Manifest

server_id = "mcp_messaging"
display_name = "Messaging"
version = "1.4.0"
domain = "messaging"
risk_level = "medium"
writes_allowed = "gated"
governance_gates = ["rate_limit_required"]

Documentation

| Document | Description | |----------|-------------| | mcp-server.toml | ADK-Rust Enterprise registry manifest | | Rust Docs | Generated API documentation |

Contributing

Contributions welcome. Priority areas:

  • Apple Push Notification Service (APNs) support
  • Message encryption (end-to-end)
  • Typing indicators
  • Message reactions/emoji
  • Read receipt aggregation (group chats)
  • Persistent storage backend (Redis, PostgreSQL)

Contributors

| jkmaina - MCP Messaging by zavora-ai
James Karanja Maina
| |:---:|

License

Apache-2.0 — see LICENSE for details.


Part of the ADK-Rust Enterprise MCP server ecosystem.

Built with ❤️ by Zavora AI

Registry Compliance

This server implements the ADK MCP SDK contract:

  • HealthCheck — async health probe for registry monitoring
  • mcp-server.toml — manifest declaring tools, risk classes, and credentials
  • Structured tracingRUST_LOG env-filter for observability
Quick Setup
Installation guide for this server

Installation Command (package not published)

git clone https://github.com/zavora-ai/mcp-messaging
Manual Installation: Please check the README for detailed setup instructions and any additional dependencies required.

Cursor configuration (mcp.json)

{ "mcpServers": { "zavora-ai-mcp-messaging": { "command": "git", "args": [ "clone", "https://github.com/zavora-ai/mcp-messaging" ] } } }