How to build and schedule an email campaign from Claude using MCP
Connect Brew to Claude over MCP, then brief, design, test and schedule a campaign in chat. Every step, the tools Claude calls, and where you approve.

You already use Claude to draft the campaign plan and the copy for the monthly update. Then you paste it into the email editor and rebuild the layout around it. Every time a line needs rewriting, you switch back to the chat.
With Brew connected over MCP, you can plan and schedule the campaign in the same Claude chat without opening an email editor. Claude has Brew design the email from your brand, sends you a test, picks the audience and schedules the send. On an OAuth connection, Brew requires confirmation before a live send. Review the final audience, content, and schedule before approving.
This walkthrough uses Claude Desktop or claude.ai. Claude Code works the same way after a one-line setup, shown in step 1.
Key takeaways
- Add
https://brew.new/api/mcpas a custom connector in Claude, sign in, and choose a brand. - Claude calls Brew tools in a set order:
create_email,edit_email,send_emailwithtest: true, thensend_emailwithscheduledAt. - The scheduled send pauses for your confirmation. Treat that confirmation as your final review.
- Live sends need a verified sending domain in Brew. Test sends do not.
Before you start
You need a Brew account with your brand set up, a verified sending domain for the live send, and an audience of contacts who opted in. If you do not have an audience yet, Claude can build one from filters in step 6.
Step 1: Connect Brew to Claude
In Claude Desktop or claude.ai, open Customize → Connectors → + Add → Add custom connector. Enter:
https://brew.new/api/mcp
Complete the connector setup, select Connect, sign in to Brew, and choose the brand Claude should work in. The connection is scoped to that brand, so Claude cannot see other brands' data unless you connect at the organization level. Steps for other clients are in Connect your client.
In Claude Code, add the configuration first:
claude mcp add --transport http brew "https://brew.new/api/mcp"This saves the server in this project's local configuration. Add --scope user to make it available in every project. Then run claude mcp login brew, or open /mcp and authenticate Brew.
Step 2: Check the connection
Start a new chat and ask "What can you do with Brew?" Claude calls get_brew_capabilities and lists the tools available on your connection. If you see the email, audience and send tools, you are ready.
Step 3: Brief the campaign
Give Claude a specific brief. For example:
Create this month's product update for our customers.
Three sections: the new CSV import, faster search, and the pricing page redesign.
Use only the details in the changelog I'm pasting below. No statistics or quotes.
One CTA to example.com/changelog. Keep it under 200 words.
[paste changelog]Claude calls create_email. Brew generates the design from your brand's email-design.md, and Claude shows a preview image with an Open in Brew link. Generation takes a moment, and Claude checks progress with get_email.
Step 4: Revise in chat
Ask for changes as you would with a designer:
- "Shorten the intro to two sentences."
- "Make the CTA say Read the changelog."
- "Swap the order of the second and third sections."
Each change is an edit_email call, which creates a new version you can go back to. To change only the subject line or the email's name, Claude uses update_email_metadata, which is free and does not create a version.
Step 5: Test before you target anyone
Ask Claude to run the checks:
- "Send me a test." Claude calls
send_emailwithtest: trueto your address. - "Check rendering in Gmail, Outlook and iOS dark mode." Claude calls
test_email_rendering. Review the current credit costs before running paid checks. - "Audit the email." Claude calls
audit_emailand summarizes the findings. Resolve actionable findings before scheduling.
Open the test in your own inbox. Click every link and read the footer.
Step 6: Choose the audience
Ask "Which audiences do I have?" and Claude calls list_audiences. To build a new one, describe it:
"Create an audience of contacts on the Pro plan who signed up before July 1."
Claude checks your contact fields with list_contact_fields, then calls create_audience with filters and reports how many people match. If the count looks wrong, fix the filter before going further.
Step 7: Schedule the send
Now ask for the schedule:
"Schedule it to the Pro customers audience for Tuesday at 9:00 America/New_York, from our marketing domain."
Claude calls list_domains to find a verified domain with a marketing sending purpose. It then prepares send_email with the email, subject, audience, domain, an idempotency key and scheduledAt. Always state the time zone in your request.
Brew treats a send as irreversible, so on OAuth and organization connections the call stops for your confirmation. Claude shows what will be sent, to whom and when. Approve only after checking all three.
Step 8: Adjust or monitor
After scheduling:
- "Pause the send" uses
pause_email_sendfor a gradual send. "Resume the send" usesresume_email_send. "Cancel the send" usescancel_email_sendto permanently stop remaining deliveries. - "How did the product update do?" calls
get_email_analyticswith a sends report, which covers delivered, opens, clicks and bounces.
Common problems
| Problem | Likely cause | Fix |
|---|---|---|
| Claude cannot find a sendable domain | The domain is not verified, or its purpose is transactional | Verify the domain, or add a marketing-purpose domain |
| The audience count is zero | The filter does not match your field values | Ask Claude to list the field's values, then rebuild the filter |
| The send reports no eligible recipients | Everyone in the audience is unsubscribed, suppressed or undeliverable | Check the audience's eligible count, and import subscription status with your contacts |
| The brand looks wrong | The brand document is thin | Upload your brand guide and regenerate |
Frequently asked questions
Can Claude send without my approval?
On OAuth and organization connections, send_email returns a confirmation step before a live send. Your Claude client may also ask before each tool call. Brand API-key connections need their own client approval policy. Keep review enabled for live sends.
Does this work with ChatGPT or Cursor?
Yes. ChatGPT web uses a plugin; ChatGPT desktop and Codex share MCP configuration. Cursor, VS Code, and other clients use the same server URL with their own setup and authentication steps. The client setup guide covers each client.
Does an agent-scheduled campaign follow the same rules as any other?
Yes. It goes out from your domain under your sender reputation, and CAN-SPAM and Gmail's sender requirements apply. What still applies when an agent sends covers the details.
Can Claude build automations too?
Yes. save_trigger, save_automation and test_automation create and test event-triggered flows, and publishing is a separate, explicit step.
Next step
To try it, add the connector, then ask Claude to send you a test of your next campaign before you schedule anything.

