{"serverId":"mcp-registry/ma.envoisms/envoisms","tools":[{"name":"create_topup","fixed":{"name":"create_topup","description":"Create a balance top-up checkout link (Stripe card or crypto USDC) for the authenticated account.","inputSchema":{"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."},"currency":{"enum":["mad","eur"],"type":"string","description":"Payment presentation currency for card checkout ('mad' or 'eur'). Default 'mad'."},"amount_mad":{"type":"number","description":"Custom recharge amount in MAD (minimum 300 MAD). Optional if pack_id is provided."},"payment_method":{"enum":["stripe","crypto"],"type":"string","description":"Payment method ('stripe' for card or 'crypto' for USDC). Default 'stripe'."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":220,"tokensAfter":220},{"name":"get_analytics","fixed":{"name":"get_analytics","description":"Get SMS & WhatsApp message delivery metrics, success rates, and volume statistics.","inputSchema":{"type":"object","properties":{"days":{"type":"number","description":"Lookback window in days (1-365, default 30)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":71,"tokensAfter":71},{"name":"get_balance","fixed":{"name":"get_balance","description":"Check remaining SMS credit balance in MAD and account status.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":42,"tokensAfter":42},{"name":"get_message_status","fixed":{"name":"get_message_status","description":"Check the real-time delivery status, segments, and cost of a sent message by ID.","inputSchema":{"type":"object","required":["message_id"],"properties":{"message_id":{"type":"string","description":"Message ID returned by send_sms"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":78,"tokensAfter":78},{"name":"get_pricing","fixed":{"name":"get_pricing","description":"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.","inputSchema":{"type":"object","properties":{"to":{"type":"string","description":"Destination phone number in E.164 format, e.g. +2348012345678. Optional."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":110,"tokensAfter":110},{"name":"list_campaigns","fixed":{"name":"list_campaigns","description":"List SMS marketing campaigns created on the account.","inputSchema":{"type":"object","properties":{"limit":{"type":"number","description":"Number of campaigns to retrieve (1-50, default 20)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":65,"tokensAfter":65},{"name":"list_contacts","fixed":{"name":"list_contacts","description":"List saved contacts or search contacts by name, phone, or email.","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"Search query matching phone, name, or email"},"limit":{"type":"number","description":"Number of contacts to retrieve (1-100, default 20)"},"list_id":{"type":"string","description":"Filter contacts by contact list ID"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":113,"tokensAfter":113},{"name":"list_messages","fixed":{"name":"list_messages","description":"List recent outbound messages for the authenticated account with optional filters.","inputSchema":{"type":"object","properties":{"limit":{"type":"number","description":"Number of messages to retrieve (1-50, default 20)"},"status":{"enum":["queued","sent","delivered","failed","undeliverable"],"type":"string","description":"Filter by delivery status"},"channel":{"enum":["sms","whatsapp"],"type":"string","description":"Filter by communication channel"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":138,"tokensAfter":138},{"name":"list_sender_ids","fixed":{"name":"list_sender_ids","description":"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.","inputSchema":{"type":"object","properties":{"status":{"enum":["approved","pending","rejected","all"],"type":"string","description":"Filter sender IDs by status (approved, pending, rejected, all). Defaults to all."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":120,"tokensAfter":120},{"name":"lookup_number","fixed":{"name":"lookup_number","description":"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.","inputSchema":{"type":"object","required":["to"],"properties":{"to":{"type":"string","description":"Phone number to lookup in national (06...) or E.164 (+212...) format."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":114,"tokensAfter":114},{"name":"send_bulk_sms","fixed":{"name":"send_bulk_sms","description":"Send an SMS message to multiple recipients in E.164 format at once (up to 100 recipients).","inputSchema":{"type":"object","required":["recipients","message"],"properties":{"message":{"type":"string","description":"Text content of the SMS"},"sender_id":{"type":"string","description":"Optional approved custom Sender ID"},"recipients":{"type":"array","items":{"type":"string"},"description":"Array of recipient phone numbers in E.164 format (+212600000000)"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":139,"tokensAfter":139},{"name":"send_otp","fixed":{"name":"send_otp","description":"Send a 6-digit OTP verification code via SMS or WhatsApp.","inputSchema":{"type":"object","required":["to"],"properties":{"to":{"type":"string","description":"Recipient phone number in E.164 format"},"brand":{"type":"string","description":"Brand name shown in the OTP message"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":88,"tokensAfter":88},{"name":"send_sms","fixed":{"name":"send_sms","description":"Send a single SMS message to a phone number in E.164 format (+212600000000).","inputSchema":{"type":"object","required":["to","message"],"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"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":120,"tokensAfter":120},{"name":"send_whatsapp_message","fixed":{"name":"send_whatsapp_message","description":"Send a direct freeform text message to a recipient on WhatsApp within an active 24-hour customer service window.","inputSchema":{"type":"object","required":["to","message"],"properties":{"to":{"type":"string","description":"Recipient phone number in E.164 format (+212600000000)"},"message":{"type":"string","description":"Text content of the WhatsApp message"},"phone_number_id":{"type":"string","description":"Optional: which connected WhatsApp number sends (defaults to the account's default number)"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":154,"tokensAfter":154},{"name":"send_whatsapp_template","fixed":{"name":"send_whatsapp_template","description":"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.","inputSchema":{"type":"object","required":["to","template_name"],"properties":{"to":{"type":"string","description":"Recipient phone number in E.164 format (+212600000000)"},"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"},"template_name":{"type":"string","description":"Name of an approved WhatsApp template on the account"},"phone_number_id":{"type":"string","description":"Optional: which connected WhatsApp number sends (defaults to the account's default number)"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":265,"tokensAfter":265}],"toolsChanged":15,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}