{"serverId":"mcp-registry/tools.wha/whatsapp-tools","tools":[{"name":"estimate_whatsapp_api_cost","fixed":{"name":"estimate_whatsapp_api_cost","description":"Estimate the monthly WhatsApp Business (Cloud) API cost under Meta's per-message pricing (in effect since 1 July 2025). Given a country/market and monthly volumes of marketing, utility, authentication and (optionally) service messages, returns an itemized breakdown and total in USD. Marketing is always billed; utility and authentication are billed with volume-tier discounts in many markets. As of 1 October 2026 utility is billed even inside the customer-service window (previously free there), an","inputSchema":{"type":"object","required":["market"],"properties":{"market":{"enum":["AR","BD","BR","CL","CO","EG","FR","DE","HK","HU","IN","ID","IQ","IL","IT","KZ","KW","MY","MX","MA","NP","NL","NG","OM","PK","PE","PL","QA","RO","RU","SA","SG","ZA","ES","LK","TR","UA","AE","GB","NA","AFRICA","APAC","CEE","LATAM","MIDEAST","WEUROPE","OTHER"],"type":"string","description":"Recipient market as a 2-letter code (e.g. \"US\", \"IN\", \"BR\", \"GB\", \"DE\"), or \"ROW\" for rest of world. Rates vary widely by market."},"service":{"type":"number","description":"Monthly count of service messages (free-form replies inside a customer-opened window). Optional. When given, the first 1,000 per phone number each month are free and the rest bill at the market's utility rate; omit to leave service out of the estimate."},"utility":{"type":"number","description":"Monthly count of utility template messages (order updates, receipts, reminders)."},"marketing":{"type":"number","description":"Monthly count of marketing template messages (promotions, offers)."},"authentication":{"type":"number","description":"Monthly count of authentication template messages (one-time passcodes)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":490,"tokensAfter":490},{"name":"get_whatsapp_limits","fixed":{"name":"get_whatsapp_limits","description":"Look up WhatsApp's current limits and rules from the site's dated reference table: group and community size, broadcast lists, message and media/file sizes, character counts, forwarding, calls, Channels, linked devices, and WhatsApp Business app and Business API limits. Each value is single-sourced and dated. Returns the limits (optionally filtered to one area), the last-verified date, the source and the CC BY licence. Prefer this over recalling limits from memory. They change over time. Runs loc","inputSchema":{"type":"object","required":[],"properties":{"area":{"enum":["groups","messages","status","calls","channels","account","business","api"],"type":"string","description":"Restrict the result to one area (e.g. \"groups\", \"messages\", \"calls\", \"channels\", \"account\", \"business\", \"api\"). Optional; omit for every area."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":256,"tokensAfter":256},{"name":"get_whatsapp_rates","fixed":{"name":"get_whatsapp_rates","description":"Look up Meta's official WhatsApp Business (Cloud) API per-message rates from the site's dated rate card, the same figures the pricing calculator uses, so prefer this over recalling or guessing prices. Give a market to get one row, or omit it for every market in the chosen currency. Returns the current list price per template category (marketing, utility, authentication, and authentication-international where a market has one), the currency, the effective and last-verified dates, the source link ","inputSchema":{"type":"object","required":[],"properties":{"market":{"enum":["AR","BD","BR","CL","CO","EG","FR","DE","HK","HU","IN","ID","IQ","IL","IT","KZ","KW","MY","MX","MA","NP","NL","NG","OM","PK","PE","PL","QA","RO","RU","SA","SG","ZA","ES","LK","TR","UA","AE","GB","NA","AFRICA","APAC","CEE","LATAM","MIDEAST","WEUROPE","OTHER"],"type":"string","description":"Recipient market as a 2-letter code (e.g. \"US\"/\"NA\", \"IN\", \"BR\", \"GB\", \"DE\") or a \"Rest of\" region id. Omit to return the whole rate card for the chosen currency."},"currency":{"enum":["USD","EUR","GBP","INR","IDR","BRL","MXN","ARS","COP","AED","SAR","AUD","MYR","PEN","CLP","SGD"],"type":"string","description":"One of the 16 currencies Meta publishes a card in (USD, EUR, GBP, INR, IDR, BRL, MXN, ARS, COP, AED, SAR, AUD, MYR, PEN, CLP, SGD). Rates are stored per currency exactly as Meta prints them, never converted. Optional, default USD."},"include_tiers":{"type":"boolean","description":"When a single market is given, also return that market's published volume-tier thresholds and per-band rates for utility and authentication. Ignored when no market is given. Optional, default false."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":488,"tokensAfter":488},{"name":"validate_phone_number","fixed":{"name":"validate_phone_number","description":"Validate and inspect a phone number with libphonenumber: whether it is valid (a real, allocated number) and/or possible (right length), its country, calling code, line type (mobile / landline / VoIP / toll-free / …) and every standard format (E.164, international, national) plus a wa.me link. Runs locally and offline. Does NOT check whether the number is registered on WhatsApp. There is no such API here.","inputSchema":{"type":"object","required":["phone"],"properties":{"phone":{"type":"string","description":"The phone number to validate. International format with a leading \"+\" is best; otherwise also pass `country`."},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code (e.g. \"GB\", \"US\") assumed when the number has no country code. Optional."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":239,"tokensAfter":239}],"toolsChanged":4,"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."}