Skip to main content
Glama
MNotify MCP Server

MNotify MCP Server

by Nanayeb34

MNotify MCP Server

Bring MNotify to your AI IDE in one command.

This package exposes the MNotify SMS API as an MCP server so tools like Cursor can securely call real MNotify actions (send SMS, manage contacts/groups/templates, delivery reports) via stdio. This repo also includes a simple interactive MNotify Agent for CLI use. It is based on Mnotify API v2.0

Check out the PyPI MCP package here

Requirements

  • Python 3.10+

  • Environment variable: MNOTIFY_API_KEY

Setup

  • Using uv (recommended):

    curl -LsSf https://astral.sh/uv/install.sh | sh  # install uv if needed
    uv venv                                          
    uv pip install -r requirements.txt               
  • Using any virtualenv manager + pip:

    python -m venv .venv && source .venv/bin/activate
    pip install -r requirements.txt

Quick start — install and run the MCP server

pip install mnotify_mcp_server
export MNOTIFY_API_KEY=sk_mnotify_...

# Start the server (preferred)
mnotify_mcp server

# Alternatives
mnotify-mcp
python -m mnotify_mcp.server

Connect to Cursor

  • Option A: Project config .cursor/mcp.json (recommended)

{
  "mcpServers": {
    "mnotify": {
      "command": "mnotify_mcp",
      "args": ["server"]
    }
  }
}

Relaunch cursor from the same environment as the virtual environment

  • Option B: Manual add in Cursor (Settings → MCP → Add Custom Server → Process)

    • Command: mnotify_mcp

    • Args: server

    • Ensure MNOTIFY_API_KEY is set in the environment where Cursor launches the process

MNotify Agent (interactive CLI)

A local chat agent that can call all MNotify tools directly.

MNotify CLI Agent

Setup

  • Create a virtual environment and install dependencies with uv or pip (see above).

  • Add a .env file with:

OPENROUTER_API_KEY=sk-or-v1-...
MNOTIFY_API_KEY=...
AGNO_API_KEY=ag-...   # optional, if monitoring is set.

Start the agent

uv run mnotify_agent.py

CLI commands

  • help: list commands

  • history: show recent messages

  • tools: list available tools

  • test: run a quick tool-call test

  • clear: clear conversation context

Tools exposed

  • SMS: send_quick_bulk_sms, send_bulk_group_sms, update_scheduled_sms

  • Reports: sms_delivery_report, specific_sms_delivery_report, periodic_sms_delivery_report

  • Contacts: add_contact, update_contact, delete_contact, get_contact_details, get_contact_list, get_group_contacts

  • Groups: add_group, update_group, delete_group, get_group_details, get_group_list

  • Templates: get_template_list, get_message_template, add_message_template, update_message_template, delete_message_template

  • Utilities: register_sender_id, check_sender_id, check_sms_balance

  • Helpers: get_context_snapshot, resolve_group_name

Validation & guardrails

  • message length ≤ 460; sender_id length ≤ 11.

  • schedule=true requires schedule_time (YYYY-MM-DD HH:MM).

  • Optional: verify_sender=true performs a best‑effort sender status check before sending.

Security

  • Never pass secrets as tool arguments. The server reads MNOTIFY_API_KEY from the environment.

  • The server does not log secrets.

Available Tools

27 tools
add_contactB

Add a contact to a group. Requires group_id and phone.

Inputs: phone (required), group_id (required), dob, email, +2 more. Returns: result

add_groupC

Create a new contact group with group_name.

Inputs: group_name (required). Returns: result

add_message_templateC

Create a message template with title and content.

Inputs: title (required), content (required). Returns: result

check_sender_idC

Check the status of a registered sender ID.

Inputs: sender_id (required). Returns: result

check_sms_balanceA

Get your current SMS balance and wallet summary.

Inputs: no named parameters. Returns: result

delete_contactA

Delete a contact by contact_id.

Inputs: contact_id (required). Returns: result

delete_groupB

Delete a contact group by group_id.

Inputs: group_id (required). Returns: result

delete_message_templateC

Delete a message template by template_id.

Inputs: template_id (required). Returns: result

get_contact_detailsB

Fetch contact details by contact_id.

Inputs: contact_id (required). Returns: result

get_contact_listC

List contacts (first page as returned by the API).

Inputs: no named parameters. Returns: result

get_context_snapshotA

Return a compact snapshot of known entities (names → IDs) gathered so far.

Inputs: no named parameters. Returns: result

get_group_contactsB

List contacts in a given group by group_id.

Inputs: group_id (required). Returns: result

get_group_detailsC

Fetch details for a group by group_id.

Inputs: group_id (required). Returns: result

get_group_listA

List all groups.

Inputs: no named parameters. Returns: result

get_message_templateB

Fetch a message template by template_id.

Inputs: template_id (required). Returns: result

get_template_listC

List message templates.

Inputs: no named parameters. Returns: result

periodic_sms_delivery_reportB

Get delivery reports for campaigns within a date range (YYYY-MM-DD).

Inputs: to_date (required), from_date (required). Returns: result

register_sender_idC

Register a sender ID (≤ 11 chars) with a purpose.

Inputs: purpose (required), sender_id (required). Returns: result

resolve_group_nameA

Resolve a group name (case-insensitive, substring) to known IDs from this session.

This uses the MCP server's in-memory cache populated by prior tool calls.

Inputs: group_name (required), fetch. Returns: result

send_bulk_group_smsB

Send an SMS to all contacts in one or more groups.

Provide group_id list and a message (≤ 460 chars). For scheduling, set schedule=true and supply schedule_time (YYYY-MM-DD HH:MM).

Inputs: groups, message, group_id, schedule, +4 more. Returns: result

send_quick_bulk_smsA

Send SMS to explicit phone numbers.

Parameters

  • recipient: string (comma-separated) or array of phone numbers

  • recipients: alias of recipient

  • sender_id: string, max 11 chars

  • message: string, max 460 chars

  • schedule: boolean (default false)

  • schedule_time: string 'YYYY-MM-DD HH:MM' if schedule is true

  • verify_sender: boolean, best-effort status check before sending

Returns

  • API response payload; indexes campaign id in session cache

Inputs: message, schedule, recipient, sender_id, +3 more. Returns: result

sms_delivery_reportC

Get the delivery report for a specific SMS campaign by its ID.

Inputs: id (required). Returns: result

specific_sms_delivery_reportB

Get the delivery status for a specific message within a campaign by campaign_id.

Inputs: campaign_id (required). Returns: result

update_contactB

Update a contact by contact_id. Requires phone; other fields optional.

Inputs: phone (required), contact_id (required), dob, email, +3 more. Returns: result

update_groupA

Rename a contact group by group_id to group_name.

Inputs: group_id (required), group_name (required). Returns: result

update_message_templateA

Update a template by template_id. title and/or content optional.

Inputs: template_id (required), title, content. Returns: result

update_scheduled_smsB

Update a scheduled SMS campaign.

Supply id, sender_id, schedule_time, and optional message (≤ 460 chars).

Inputs: id (required), sender_id (required), schedule_time (required), message. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 27 tools

    Disambiguation4/5

    Most tools have clearly distinct purposes (contacts, groups, templates, sender IDs, sending, reports). The three delivery report tools could be confused but descriptions specify different filters. Overall minimal ambiguity.

    Naming Consistency4/5

    Predominantly verb_noun pattern (add_contact, delete_group, get_contact_details). Some variation: get_contact_list vs get_group_list vs get_template_list; get_context_snapshot and resolve_group_name are outliers but not chaotic.

    Tool Count4/5

    27 tools is on the high side but justified by CRUD operations for contacts, groups, templates, plus sending and delivery reports. Slightly over the ideal range but not excessive.

    Completeness4/5

    Covers core SMS management: contacts, groups, templates, sender IDs, sending, scheduling, delivery reports. Minor omissions like campaign listing or deletion, but no critical dead ends.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      Manage your entire notification infrastructure using natural language. Trigger workflows, create users, manage preferences, update tenant branding, and access docs — all from Cursor, Claude Desktop, or Windsurf. 24 tools covering email, SMS, push, WhatsApp, Slack, MS Teams, and in-app notifications.
      22
      12
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      Enables AI assistants to send SMS, manage contacts, verify numbers, and query campaigns via SMS Masivos platform using natural language.
      30
      255 npm
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables sending SMS messages, managing contacts, campaigns, and inbox from AI assistants like Claude and ClickUp.
      33 npm
      MIT
    • A
      license
      B
      quality
      D
      maintenance
      Enables AI assistants to send SMS and manage messaging workflows through ClickSend, including pricing estimates, contact lists, templates, history, and statistics.
      6
      63 npm
      3
      MIT