EnvoiSMS

Send SMS/WhatsApp and verify OTP codes in Morocco (+212) and worldwide. Direct carrier routing.

Should I use this

Quality & Safety

A
Description quality
98%
Schema completeness
87%
Naming quality
96%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,710Tokens (tool definitions)
~702 BTypical response size
Moderate attention impact (1.34% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "envoisms": {
      "url": "https://api.envoisms.ma/v1/mcp"
    }
  }
}

Remote endpoints

https://api.envoisms.ma/v1/mcpstreamable-http

What it can do

Tool inventory

Tools (18)

🟒 Read-only🟑 WriteπŸ”΄ Deleteβšͺ Unknown
🟑send_sms(to, message, sender_id)

Send a single SMS message to a phone number in E.164 format (+212600000000).

Input Schema

{
  "type": "object",
  "properties": {
    "to": {
      "type": "string",
      "description": "Recipient phone number in E.164 format (+212600000000)"
    },
    "message": {
      "type": "string",
      "description": "Text content of the SMS"
    },
    "sender_id": {
      "type": "string",
      "description": "Optional approved custom Sender ID"
    }
  },
  "required": [
    "to",
    "message"
  ]
}
🟑send_bulk_sms(recipients, message, sender_id)

Send an SMS message to multiple recipients in E.164 format at once (up to 100 recipients).

Input Schema

{
  "type": "object",
  "properties": {
    "recipients": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Array of recipient phone numbers in E.164 format (+212600000000)"
    },
    "message": {
      "type": "string",
      "description": "Text content of the SMS"
    },
    "sender_id": {
      "type": "string",
      "description": "Optional approved custom Sender ID"
    }
  },
  "required": [
    "recipients",
    "message"
  ]
}
🟑send_whatsapp_template(to, template_name, language, variables, phone_number_id)

Send an approved WhatsApp template message from the account's connected WhatsApp Business number. Templates may open a conversation at any time (no 24-hour window). Billed like the same send on POST /v1/messages.

Input Schema

{
  "type": "object",
  "properties": {
    "to": {
      "type": "string",
      "description": "Recipient phone number in E.164 format (+212600000000)"
    },
    "template_name": {
      "type": "string",
      "description": "Name of an approved WhatsApp template on the account"
    },
    "language": {
      "type": "string",
      "description": "Template language code (e.g. fr, en_US, ar). Defaults to the template's own language."
    },
    "variables": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Values for the template body placeholders {{1}}, {{2}}, … in order"
    },
    "phone_number_id": {
      "type": "string",
      "description": "Optional: which connected WhatsApp number sends (defaults to the account's default number)"
    }
  },
  "required": [
    "to",
    "template_name"
  ]
}
🟒get_message_status(message_id)

Check the real-time delivery status, segments, and cost of a sent message by ID.

Input Schema

{
  "type": "object",
  "properties": {
    "message_id": {
      "type": "string",
      "description": "Message ID returned by send_sms"
    }
  },
  "required": [
    "message_id"
  ]
}
🟒list_messages(limit, status, channel)

List recent outbound messages for the authenticated account with optional filters.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "number",
      "description": "Number of messages to retrieve (1-50, default 20)"
    },
    "status": {
      "type": "string",
      "enum": [
        "queued",
        "sent",
        "delivered",
        "failed",
        "undeliverable"
      ],
      "description": "Filter by delivery status"
    },
    "channel": {
      "type": "string",
      "enum": [
        "sms",
        "whatsapp"
      ],
      "description": "Filter by communication channel"
    }
  }
}
🟒get_balance

Check remaining SMS credit balance in MAD and account status.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟑create_topup(pack_id, amount_mad, currency, payment_method)

Create a balance top-up checkout link (Stripe card or crypto USDC) for the authenticated account.

Input Schema

{
  "type": "object",
  "properties": {
    "pack_id": {
      "type": "string",
      "description": "SMS top-up pack ID (e.g. 'sms-300' for 300 MAD, 'sms-1000' for 1000 MAD, 'sms-5000' for 5000 MAD). Optional if amount_mad is provided."
    },
    "amount_mad": {
      "type": "number",
      "description": "Custom recharge amount in MAD (minimum 300 MAD). Optional if pack_id is provided."
    },
    "currency": {
      "type": "string",
      "enum": [
        "mad",
        "eur"
      ],
      "description": "Payment presentation currency for card checkout ('mad' or 'eur'). Default 'mad'."
    },
    "payment_method": {
      "type": "string",
      "enum": [
        "stripe",
        "crypto"
      ],
      "description": "Payment method ('stripe' for card or 'crypto' for USDC). Default 'stripe'."
    }
  }
}
🟑send_otp(to, brand)

Send a 6-digit OTP verification code via SMS or WhatsApp.

Input Schema

{
  "type": "object",
  "properties": {
    "to": {
      "type": "string",
      "description": "Recipient phone number in E.164 format"
    },
    "brand": {
      "type": "string",
      "description": "Brand name shown in the OTP message"
    }
  },
  "required": [
    "to"
  ]
}
βšͺverify_otp(session_id, code)

Verify an OTP passcode against a previously sent code.

Input Schema

{
  "type": "object",
  "properties": {
    "session_id": {
      "type": "string",
      "description": "Session ID from send_otp"
    },
    "code": {
      "type": "string",
      "description": "6-digit OTP code to verify"
    }
  },
  "required": [
    "session_id",
    "code"
  ]
}
🟒list_campaigns(limit)

List SMS marketing campaigns created on the account.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "number",
      "description": "Number of campaigns to retrieve (1-50, default 20)"
    }
  }
}
🟒list_contacts(limit, q, list_id)

List saved contacts or search contacts by name, phone, or email.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "number",
      "description": "Number of contacts to retrieve (1-100, default 20)"
    },
    "q": {
      "type": "string",
      "description": "Search query matching phone, name, or email"
    },
    "list_id": {
      "type": "string",
      "description": "Filter contacts by contact list ID"
    }
  }
}
🟒get_analytics(days)

Get SMS & WhatsApp message delivery metrics, success rates, and volume statistics.

Input Schema

{
  "type": "object",
  "properties": {
    "days": {
      "type": "number",
      "description": "Lookback window in days (1-365, default 30)"
    }
  }
}
βšͺops_pulse(days)

Admin only. Business health snapshot: margin, cash collected, customer float (liability), solvency ratio, active accounts, and money stuck in the refund-review queue.

Input Schema

{
  "type": "object",
  "properties": {
    "days": {
      "type": "number",
      "description": "Lookback window in days (1-365). Default 30."
    }
  }
}
βšͺops_route_quality(days)

Admin only. Delivery quality per carrier/provider/channel, failure codes, DLR plausibility (whether delivery reports can be trusted), and ported-number routing hints. The data behind any provider-routing decision.

Input Schema

{
  "type": "object",
  "properties": {
    "days": {
      "type": "number",
      "description": "Lookback window in days (1-365). Default 30."
    }
  }
}
βšͺops_monitoring

Admin only. Current operational state: open ops alerts by severity, upstream gateway balance, and known issues that need attention right now.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟒lookup_number(to)

Inspect a phone number: validate format, identify Moroccan operator (IAM / Maroc Telecom, Orange, Inwi) or international country, and view applicable rate. Public β€” no authentication required.

Input Schema

{
  "type": "object",
  "properties": {
    "to": {
      "type": "string",
      "description": "Phone number to lookup in national (06...) or E.164 (+212...) format."
    }
  },
  "required": [
    "to"
  ]
}
🟒list_sender_ids(status)

Consultation des noms d'expΓ©diteurs alphanumΓ©riques validΓ©s par l'ANRT. List approved and pending custom alphanumeric Sender IDs registered on the authenticated account.

Input Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "approved",
        "pending",
        "rejected",
        "all"
      ],
      "description": "Filter sender IDs by status (approved, pending, rejected, all). Defaults to all."
    }
  }
}
🟒get_pricing(to)

Get EnvoiSMS pricing. Pass `to` (a phone number in E.164, e.g. +2348012345678) for that destination's per-SMS rate; omit it for Moroccan rates and credit packs. Public β€” no authentication required.

Input Schema

{
  "type": "object",
  "properties": {
    "to": {
      "type": "string",
      "description": "Destination phone number in E.164 format, e.g. +2348012345678. Optional."
    }
  }
}

Recommended Prompts

retrieve_data
Get details about [item] from EnvoiSMS
Expected tools: get_message_status
fetch_info
Fetch [information type] using EnvoiSMS
Expected tools: get_message_status
list_items
List all [items] available in EnvoiSMS
Expected tools: list_messages
browse_collection
Show me the [collection] from EnvoiSMS
Expected tools: list_messages
explore_workflow
List available [items], then get details for each one using EnvoiSMS
Expected tools: list_messagesget_message_status

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded18 tools
verifiedversion not recorded18 tools