MCP server for Meta Business WhatsApp messaging, compliance checking, template management, and campaign delivery orchestration
Meta Business MCP has 21 well-named tools with consistent verb_noun patterns (check_, get_, list_, send_, create_, pause_, resume_, cancel_). All tools have descriptions (avg ~120 chars, within 10-1024 range). Input schemas are present with typed parameters and descriptions. However, output schemas are NOT documented in the source code, critical for LLM planning. Parameter descriptions lack format constraints (e.g., phone number regex, ISO 8601 format for timestamps). Error handling is basic; no recovery guidance or actionable error messages visible. Missing tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications in the spec. Composition is strong, tools are single-responsibility and chainable (e.g., create_campaign → get_campaign_status → pause_campaign). No secrets exposed as parameters.
Cancel a campaign permanently. Stops all sends and marks the campaign as cancelled. Cannot be resumed.
Evaluate if a message is compliant with Meta Business rules and policy regulations
Query the conversation state for a customer: 24-hour window status, time remaining, conversation type, and last interaction timestamps.
Check whether a customer is currently under Meta's frequency cap for marketing messages. Returns cap status, reset timing, and reason if capped.
Create a new broadcast campaign targeting a customer segment. Validates segment, message type, and compliance rules. Returns campaign ID for tracking.
Translate Meta Cloud API error codes into human-friendly explanations and actionable steps
Output schemas not documented in source code. LLMs cannot plan downstream tool calls or extract required fields (e.g., campaign_id from create_campaign response). Critical for tool chaining.
Parameter descriptions lack format constraints. Phone numbers should specify '+<country><number>' format; timestamps should declare ISO 8601; enums (status_filter, message_type) should list valid values in description, not rely on schema alone.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications in spec. LLMs cannot distinguish safe reads from irreversible deletes without explicit hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Retrieve the current status of a campaign: total recipients, sent count, delivered count, read count, failed count, and estimated completion time.
Return the full communication profile of a customer: opt-in/opt-out status, interaction timeline, segment tags, and eligibility summary for marketing, utility, and service messages.
Return the current delivery status of a message: sent, delivered, read, or failed. Includes error code and explanation if failed.
Return the current state of the rate limiter: messages per second capacity, tokens consumed in the current window, tokens remaining, and last update timestamp.
List all campaigns with optional filtering by status. Results are paginated.
Return a paginated list of conversations with their current state. Filter by status: 'open', 'closed', or 'expiring_soon' (window closes within 2 hours).
List WhatsApp message templates with optional filters for status, category, and locale. Results are paginated.
Pause an active campaign. Stops new message sends but preserves the campaign state for resumption.
Send a free-form reply within an active conversation context. Requires an open 24-hour care window. Returns a clear error directing to send_template if the window is closed.
Resume a paused campaign. Resumes sending to remaining recipients in the segment.
Trigger manual retry for one or more failed messages. Validates each message is failed and retryable. Non-retryable permanent failures are skipped with an explanation.
Schedule a single message for future delivery. Compliance check runs at scheduling time (opt-out) and again at delivery time (full pipeline).
Send a free-form text message to a customer (requires an active 24-hour customer care window)
Send a pre-approved Meta message template to a customer
Syncs the approval status of a specific template from Meta's API. Pulls the latest status from Meta and updates the local database. Does not grant or expedite approval — template approval is Meta's decision. Use this when webhook delivery may have been missed or delayed.
Error handling lacks recovery guidance. No visible error messages that tell LLMs 'retry this' vs 'ask the user' vs 'unrecoverable'. Pattern requires actionable error classification.
Pagination parameters (limit, offset) lack bounds. No min/max specified. LLMs could pass limit=999999 or offset=-1, causing API errors or timeouts.