66 MCP tools
for email marketing from Claude

NewsletterMCP exposes 66 MCP tools for email marketing from Claude, ChatGPT & Cursor: migrate off Brevo/Mailchimp, manage subscribers, send campaigns, build automation flows, verify domains, DOI double opt-in, analytics — all via the Model Context Protocol, no dashboard.

Live catalogue — auto-synced from the running MCP server.

Onboarding & Tenant 6

onboarding_complete

Complete onboarding

Mark the current tenant's billing as active (simulates the post-payment confirmation in stub-billing mode). Requires owner/admin role.

onboarding_invite_user

Invite a teammate

Add a user to the current tenant with a role (owner | admin | editor). Returns their userId and a fresh apiToken. Requires owner/admin role.

onboarding_start

Start onboarding

MCP-first signup: create a new tenant with you as owner. Returns the tenantId, an apiToken for authenticated (HTTP) access and a payment link to add a card. Works WITHOUT authentication — this is the entry point.

onboarding_statusread-only

Onboarding status

Check the current tenant's billing status (trial | active | past_due) and payment link.

tenant_getread-only

Get tenant

Fetch the current tenant: name, billing status and member list with roles.

tenant_settings_update

Update tenant settings

Update tenant mail settings: mailFrom, replyTo, footerHtml (Impressum/postal address), baseUrl (public link host) and doiEnabled (double opt-in). Only the fields you pass are changed.

Migration 8

migrate_campaigns

Migrate / import past campaigns / newsletters (Brevo → drafts)

Execute the migration/import of your PAST CAMPAIGNS — sent newsletters / broadcasts — from another email service provider (Brevo; Mailchimp/Kit not yet supported) into this workspace as DRAFTS. Each campaign's subject and HTML are preserved exactly (stored as a complete document — not re-wrapped), with provenance recorded (imported_from, source_kind, source_ref). Imported campaigns land as inert DRAFTS (status draft) — they are NEVER re-sent; no email is delivered by this import. Idempotent: safe to re-run — already-imported campaigns are skipped and create 0 new drafts. Returns per-batch counts and the number of drafts created. Run migrate_campaigns_preview first.

migrate_campaigns_previewread-only

Preview a campaign / newsletter migration (dry-run, writes nothing)

Dry-run preview of migrating/importing your PAST CAMPAIGNS — sent newsletters / broadcasts — from another email service provider (ESP migration) — Brevo (Mailchimp/Kit not yet supported) — into this workspace's drafts. Fetches your past campaigns and shows how many would be imported, how many are skipped as already-imported duplicates or intra-batch duplicates, how many are invalid, plus sample rows (name, subject, HTML size). The imported subject and HTML are PRESERVED exactly. Campaigns are imported as DRAFTS (status draft) — they are NOT re-sent. WRITES NOTHING — the trust gate before migrate_campaigns. Idempotent: previewing/importing the same campaigns twice is safe.

migrate_flowsread-only

Migrate automations/flows (not supported — rebuild guidance)

Migrate/import your AUTOMATIONS — flows / workflows / drip sequences — from another email service provider (Brevo). This is HONESTLY NOT SUPPORTED: Brevo's public API does not expose automations/workflows (the automation endpoints return HTTP 404), so flows CANNOT be migrated automatically off Brevo (and are not supported for other sources either). Instead, REBUILD your automations natively with flow_create (triggers: tag_added / subscribe / date) and flow_add_step (wait / send / add_tag / remove_tag), reusing your imported templates and past campaigns (migrate_templates / migrate_campaigns) as the 'send' steps. Read-only: this reports the limitation + rebuild guidance and writes nothing. Credentials are optional (never used here).

migrate_previewread-only

Preview an ESP migration (dry-run, writes nothing)

Dry-run preview of migrating/importing your list from another email service provider (ESP migration) — Brevo, Mailchimp or Kit/ConvertKit — into this workspace. Fetches your contacts and shows the MAPPING SUMMARY: how many land confirmed / pending / unsubscribed / bounced, how many get suppressed, how many would still need double-opt-in, plus skipped duplicates and invalid emails, with sample rows. WRITES NOTHING — this is the trust gate before migrate_run. Confirmed contacts keep their consent, so there is no forced re-confirmation.

migrate_run

Run an ESP migration / import (Brevo, Mailchimp, Kit)

Execute the migration/import from another email service provider (Brevo, Mailchimp or Kit/ConvertKit) into this workspace. Confirmed contacts land CONFIRMED with their original opt-in preserved — NO re-confirmation, NO double-opt-in email blast. Unsubscribed / bounced / complained contacts go straight onto the suppression list, and the full GDPR consent trail (source status, consent time, imported_from) is kept. Idempotent: safe to re-run — already-imported contacts are skipped. Returns per-status counts, suppressions added and tags created. Run migrate_preview first.

migrate_statusread-only

Migration/import run status (history)

Read the migration/import history (import_runs ledger) for this workspace. Pass a runId to fetch one run's stored counts, status (completed/failed) and timestamps; omit it to list recent runs (newest first) with pagination. Read-only.

migrate_templates

Migrate / import email templates (Brevo → drafts)

Execute the migration/import of your email TEMPLATES from another email service provider (Brevo; Mailchimp/Kit not yet supported) into this workspace as drafts. Each template's subject and HTML are preserved exactly (stored as a complete document — not re-wrapped), with provenance recorded (imported_from, source_kind, source_ref). Idempotent: safe to re-run — already-imported templates are skipped and create 0 new drafts. Returns per-batch counts and the number of drafts created. Run migrate_templates_preview first.

migrate_templates_previewread-only

Preview a template migration (dry-run, writes nothing)

Dry-run preview of migrating/importing your email TEMPLATES from another email service provider (ESP migration) — Brevo (Mailchimp/Kit not yet supported) — into this workspace's drafts. Fetches your templates and shows how many would be imported, how many are skipped as already-imported duplicates or intra-batch duplicates, how many are invalid, plus sample rows (name, subject, HTML size). The imported subject and HTML are PRESERVED exactly. WRITES NOTHING — the trust gate before migrate_templates. Idempotent: previewing/importing the same templates twice is safe.

Subscribers 11

segment_create

Create segment

Create a named audience segment: subscribers matching ALL given tagIds and the status (when omitted, querying defaults to the sendable statuses 'active'/'confirmed').

segment_queryread-only

Query segment

Resolve a segment to its current matching subscribers.

subscriber_add

Add subscriber

Add a subscriber, optionally attaching existing tags. With double-opt-in enabled (tenant default) they start 'pending' and receive a confirmation email — subscribe-triggered flows enroll on confirmation. Pass preconfirmed for imports with proven consent (status 'active' immediately, no DOI email).

subscriber_getread-only

Get subscriber

Fetch a single subscriber including their tags.

subscriber_listread-only

List subscribers

List subscribers with optional status/tag filter and pagination. Returns items + total.

subscriber_remove

Remove subscriber

Permanently delete a subscriber (their tags and flow runs go with them).

subscriber_tag_add

Tag subscriber

Attach a tag to a subscriber (idempotent). May enroll them into tag-triggered flows.

subscriber_tag_remove

Untag subscriber

Detach a tag from a subscriber.

subscriber_update

Update subscriber

Update a subscriber's email, name and/or status (pending | active | confirmed | unsubscribed | bounced). Note: the double-opt-in confirmation flow is the /c/<token> link, not this tool.

tag_create

Create tag

Create a tag (unique per tenant) for organizing subscribers.

tag_listread-only

List tags

List all tags with their subscriber counts.

Compose & Templates 6

draft_create

Create draft

Create an email draft. Provide html and/or text (each is derived from the other when missing). Placeholders: {{name}}, {{email}}, {{unsubscribe_url}}. Template 'basic' wraps the body in a clean email shell; 'plain' sends the body as-is.

draft_getread-only

Get draft

Fetch a draft by id.

draft_listread-only

List drafts

List drafts (newest first) with pagination. Returns items + total.

draft_previewread-only

Preview draft

Visually render a draft as the recipient would see it. Renders the fully substituted email inline via MCP Apps (a sandboxed iframe in capable hosts); a text fallback with the subject and rendered HTML source is always included. Optionally personalize with a sample name/email.

draft_update

Update draft

Update a draft's subject, html, text and/or template.

template_galleryread-only

Template gallery

Show a visual, selectable grid of email templates (the built-in 'basic'/'plain' shells plus ready-to-edit starter layouts) via MCP Apps. Selecting a template prefills a new draft (calls draft_create) in capable hosts; a text fallback lists every template so any client can pick one and call draft_create manually.

Campaigns 7

campaign_cancel

Cancel campaign

Cancel a scheduled campaign before it sends.

campaign_getread-only

Get campaign

Fetch a campaign by id (status, schedule, draft/segment refs).

campaign_listread-only

List campaigns

List campaigns (newest first) with pagination. Returns items + total.

campaign_previewread-only

Preview campaign

Read-only review of a campaign before you send it: shows the deliverable audience size, the send time, the segment label, and the rendered email inline via MCP Apps. Does NOT create or send a campaign. A text fallback carries subject, audience, send time and the rendered HTML source.

campaign_schedule

Schedule campaign

Schedule a campaign for a future time. Accepts an ISO-8601 date string (e.g. '2026-07-05T09:00:00Z') or a unix-ms timestamp. The worker sends it when due.

campaign_send_now

Send campaign now

Create a campaign from a draft and send it immediately to the audience (all active subscribers, or a segment's members when segmentId is given).

campaign_test_send

Test-send draft

Send ONE rendered copy of a draft to a single address (no campaign row, no events). Use this to check the real email before sending to the list.

Automation Flows 7

flow_activate

Activate flow

Activate a flow so its trigger enrolls subscribers and the worker advances runs. Requires at least one step.

flow_add_step

Add flow step

Append a step to a flow. Step types: wait {days/hours/minutes}, send {draftId}, add_tag {tagId}, remove_tag {tagId}. Steps execute in the order they were added.

flow_create

Create automation flow

Create an automation flow (status 'draft'). Triggers: tag_added {tagId}, subscribe, or date {date}. Add steps with flow_add_step, then flow_activate.

flow_enroll

Enroll subscriber in flow

Manually enroll a subscriber into an active flow (idempotent — a subscriber runs a given flow at most once). The worker advances the run on its next tick.

flow_getread-only

Get flow

Fetch a flow with its steps and enrollment counts.

flow_listread-only

List flows

List all automation flows with trigger and status.

flow_pause

Pause flow

Pause a flow: no new enrollments, queued runs hold until reactivation.

Sending (BYO server) 6

domain_add

Add sending domain

Register a sending domain for this tenant and get back the exact DNS records to publish (SPF/DKIM/DMARC + ownership or SES return-path, depending on the connected provider). Re-adding an existing domain returns the same records. Sends from an unverified registered domain are blocked until domain_verify passes.

domain_listread-only

List sending domains

List this tenant's sending domains with mode (manual/ses), verification status and timestamps.

domain_verify

Verify sending domain

Poll DNS for the records domain_add asked for. Returns a per-record check list and the resulting status: all present → 'verified' (sends unblock), otherwise 'pending' — publish the missing records, wait for propagation and run again.

provider_connect

Connect mail provider

Connect the tenant's own email server: type 'smtp' (host/port/user/pass) or 'ses' (AWS SESv2 keys, default region eu-central-1). Credentials are stored encrypted at rest and are never returned by any tool. Optionally sets mailFrom/replyTo in the same call.

provider_statusread-only

Provider status

Show the tenant's mail settings: connected provider (credentials masked), mailFrom/replyTo, footer, base URL and double-opt-in flag.

provider_test

Test mail provider

Send one test email through the tenant's connected provider (or the platform fallback when none is connected). Returns messageId/previewUrl.

Deliverability 6

abuse_config

Configure signup-abuse protection

Configure the guards on the public double-opt-in signup route (POST /s/<tenant>): per-IP and per-tenant signup rate limits and an optional CAPTCHA challenge (Cloudflare Turnstile / hCaptcha). Rate limits are counts per window; 0 disables a limit. Pass challengeProvider=null to disable the challenge. The challenge secret is stored encrypted and is NEVER returned — the response reports challengeConfigured only.

suppression_add

Suppress an email

Add an email to the tenant's suppression list — it will never be mailed again (campaigns and flows skip it) until suppression_remove. Use it to import an existing suppression/blocklist, e.g. from Brevo: call once per blocked address with reason 'manual' and source 'brevo-import'. Idempotent.

suppression_listread-only

List suppressions

List the tenant's suppressed emails (newest first) with optional reason filter and pagination. Returns items + total.

suppression_remove

Remove a suppression

Remove an email from the suppression list so it can be mailed again. Use with care for 'bounce'/'complaint' entries — re-mailing them hurts deliverability.

warmup_start

Start SES warmup

Begin (or resume) the SES reputation warmup ramp for the tenant's sending identity: a daily send cap that climbs over ~8 days (50 → 50k/day). During warmup the audience is ordered engaged-first and any recipients over the day's cap are deferred to the next day. Idempotent: an existing ramp is never reset. Pass engagedFirst to also toggle always-engaged-first ordering for this tenant.

warmup_statusread-only

SES warmup status

Report the current SES warmup ramp for the tenant's sending identity: active flag, display day, today's cap, sent-today count and remaining slots. Returns { active: false } when no warmup is running.

Analytics 6

analytics_campaignread-only

Campaign analytics

Per-campaign stats: sent/delivered/opens/clicks/bounces/unsubscribes, unique opens/clicks and derived rates (open, click, click-through, bounce, unsubscribe, delivery). Set visual:true for an MCP Apps inline-SVG bar chart of the headline metrics (with a JSON text fallback).

analytics_flowread-only

Flow analytics

Per-flow performance: enrollments/active/completed/cancelled runs and sends per step.

analytics_growthread-only

List growth

List growth per UTC day for the last N days (zero-filled): added, unsubscribed, net and cumulative.

analytics_linksread-only

Link click breakdown

Per-link click counts (total + unique) for a campaign, sorted by clicks.

analytics_overviewread-only

Analytics overview

Tenant-wide headline numbers: subscriber counts by status, all-time event totals, campaign and flow counts, and last-30-days activity. Set visual:true for an MCP Apps inline-SVG bar chart of the subscriber breakdown + last-30-days activity (with a JSON text fallback).

analytics_subscriber_activityread-only

Subscriber activity

Per-subscriber engagement history (recent events, newest first) plus a sent/opens/clicks/bounces summary.

Billing 3

billing_simulate_paid

Simulate successful payment (demo/stub)

DEMO/STUB TOOL — only available while Stripe is NOT configured: marks the current workspace as paid (billing status 'active') as if the checkout had completed. With STRIPE_TEST_SECRET_KEY set this tool refuses; pay via the real billing_start_checkout URL instead.

billing_start_checkout

Start subscription checkout (Stripe)

Create a Stripe test-mode subscription checkout session for the current workspace and return the payment link. Open the URL in a browser and pay with a Stripe test card (e.g. 4242 4242 4242 4242); the webhook then flips the workspace to 'active'. Without Stripe configured a deterministic stub link is returned (use billing_simulate_paid to complete it).

billing_statusread-only

Billing status

Read-only: the current workspace's billing status ('trial' | 'active' | 'past_due'), which billing provider is active (stripe when STRIPE_TEST_SECRET_KEY is set, stub otherwise) and whether Stripe is configured.