Skip to content

MailPoet

New in 3.19.0 (Pro). Two dispatcher tools work with MailPoet 5.x (the free edition is enough):

ToolDefaultPurpose
mailpoet-readOnThe setup, subscribers, lists, tags, custom fields, newsletters, recipient counts, automations and forms (12 operations)
mailpoet-writeOffSubscribers and statuses, imports and tagging, lists, tags and custom fields, newsletters and sending, automation status (25 operations)

Enable the write tool under Tools > Plugins > MailPoet. EMCP drives MailPoet’s own code in-process: its public API for lists, tags, custom fields and memberships, its save controller for subscribers, its endpoints for newsletters and sending, and its REST routes for automations. Every operation checks MailPoet’s own capability for its domain (mailpoet_manage_subscribers, _segments, _emails, _automations, _forms).

  • get-setup: version, double opt-in, the sending method, sender and reply-to, the subscriber limit, the system lists, the active automations, and the write operations you may run.
  • list-subscribers, get-subscriber (by id or email, any case): profile, status, custom fields as cf_{id}, lists with the membership status, tags, emails sent, automation runs.
  • list-lists, list-tags, list-custom-fields, list-newsletters, get-newsletter, get-recipient-count, list-automations, get-automation, list-forms.

Every subscriber, list, tag, newsletter, automation and the custom field definitions answer a version; pass it to every write. A different version is a conflict; force: true writes anyway.

  • create-subscriber with email, names, custom_fields, list_ids, tag_ids. An email that exists in any case is subscriber_exists.
  • update-subscriber changes only the fields you pass; "" or null clears a name or custom field. add_lists, remove_lists, add_tags, remove_tags change memberships one by one.
  • MailPoet’s consent record (source, IPs, confirmation dates, tracking consent) is never written.
  • Subscribers that mirror a WordPress user or a WooCommerce customer keep their email and names from WordPress (synced_subscriber) and cannot be deleted here.
  • create-subscriber with send_confirmation: true, or send-confirmation-email later, sends MailPoet’s double opt-in email.
  • Adding a list never changes anyone’s consent: it is refused with consent_required for anyone who unsubscribed, bounced or went inactive, or is unconfirmed while double opt-in is off, and with subscriber_trashed for someone in MailPoet’s trash.
  • set-subscriber-status: unsubscribed runs MailPoet’s own unsubscribe and cannot be undone. subscribed works only from unconfirmed, with confirm: true.

Every write that can subscribe, tag or change a status takes run_automations (default false). While false, EMCP holds MailPoet’s automation triggers, schedules no welcome email and sends no new-subscriber notice. Every answer carries emails: {sent, queued} and the automation runs started.

import-subscribers and tag-subscribers take up to 200 subscribers per call (dry_run: true counts first). List and tag deletes take up to 500 members. Over a cap the answer is too_many_subscribers and nothing is written.

  • create-newsletter and update-newsletter write standard newsletters in MailPoet’s block email editor, drafts only. name is the campaign name MailPoet lists it by (it defaults to the subject); undo restores it. duplicate-newsletter, delete-newsletter.
  • send-test-email (confirm) sends a preview to your own address only.
  • send-newsletter (confirm): now, or at scheduled_at in the site’s local time. MailPoet stores the time in UTC and answers give it in site time with scheduled_at_utc. expected_recipients must equal get-recipient-count, or the answer is recipients_mismatch and nothing is queued. A newsletter to a dynamic segment or with a segment filter answers recipients_uncountable: send it from MailPoet.
  • unschedule-newsletter takes a scheduled send back to draft, refused within two minutes of the send (sending_imminent): pause it instead. pause-newsletter, resume-newsletter.

set-automation-status to active needs confirm: true, and MailPoet checks every step first (automation_invalid). Undoing an activation puts it back to draft. deactivating and draft cannot be undone.

From our test run with the fictional Larkspur Kitchen School, recorded over a real MCP connection with MailPoet’s free edition. The MailPoet integration page shows every call the assistant made.

MailPoet block email editor with the newsletter: a photo of fresh tagliatelle, the heading This month in the kitchen, two paragraphs and a Book your autumn class button.

The newsletter in MailPoet’s own email editor, ready to review.

MailPoet Emails list with the newsletter Kitchen notes: October scheduled for October 15, 2026 at 8 am to the Kitchen notes list.

The newsletter while it was scheduled.

delete-subscriber (confirm) erases a subscriber with their memberships, custom field values and tags, and removes their data from every earlier History entry; a delete in MailPoet’s admin or a WordPress privacy erasure does too.

Most writes can be undone in History. Undo never makes a subscriber sendable or subscribed again, never deletes or changes a membership that says unsubscribed, never undoes the creation of someone who has been emailed, confirmed or opted out since, and never touches a newsletter that started sending, force or not.