Hollerpost MCP server
Connect the AI assistant you already use to your Hollerpost workspace. The remote URL is https://mcp.hollerpost.com/mcp.
What it is
MCP (Model Context Protocol) is how AI assistants like Claude, ChatGPT and Cursor use outside tools. Our MCP server gives your assistant a set of Hollerpost tools: read your brand, add contacts who said yes, draft a campaign in one of your templates, preview it, send you a test, and report on how it did. Your assistant does the writing and the thinking. Hollerpost renders the email with your header, footer and unsubscribe link, and sends it from your own domain. Everything goes through the same Hollerpost API and the same API key, so it has the same limits and the same consent rules. It’s included on every plan and the free trial.
Set up your whole account from chat
The server comes with a prompt called setup_workspace. Pick it from your assistant’s list of prompts (or just ask it to set up your Hollerpost account) and it walks through the whole thing: checks your account, adds your sending domain, hands you the DNS records, checks them, saves notes on how you like to sound, adds the first contacts you paste in (once you confirm they agreed), and drafts a welcome email. It stops before anything sends.
If your assistant also has a tool for your DNS provider (Cloudflare has one, for example), it can offer to add the records for you. Otherwise it shows them as a table you copy over. Here’s roughly how the domain part goes:
- You
Set up my Hollerpost account. I want to send from mail.sunnyside.example.
- Your assistant
You’re on the free trial for Sunny Side Salon. I added mail.sunnyside.example. Your DNS is at Cloudflare, so add the records in this table there. I’ll check them when you say they’re in.
- You
Done.
- Your assistant
Most of them are found. One DKIM record isn’t: its name should end in
._domainkey.mail.sunnyside.example, and the one I see ends in.sunnyside.exampletwice. Cloudflare adds your domain for you, so paste only the first part. - You
Fixed it.
- Your assistant
All records found. mail.sunnyside.example is verified, so you can send from it. Next: want to tell me how you like your emails to sound?
Connect
First, make an API key in your dashboard under Settings, Developer API. It starts with hp_live_ (or uc_live_ if your workspace came from Utopian Creations; both work) and is shown once. Make a separate key for your AI so you can revoke it on its own. Then pick your assistant below.
There are two ways to run the server:
- Remote:
https://mcp.hollerpost.com/mcp. Your assistant sends your key as a header:Authorization: Bearer hp_live_your_key_here. Nothing to install. - Local:
npx -y hollerpost-mcp, with your key in theHOLLERPOST_KEYenvironment variable. Runs on your computer and needs Node.js.
Claude (claude.ai)
- Go to Customize, then Connectors. Click + Add, then Add custom connector.
- Name it Hollerpost and paste the remote URL:
https://mcp.hollerpost.com/mcp. - Under Request headers, add a header named
Authorizationwith the valueBearer hp_live_your_key_here.
On Team and Enterprise plans, an owner has to add the connector for the organization first. Connectors you add on claude.ai also show up in the Claude desktop app.
Claude Desktop (local)
In Claude Desktop, open Settings from the Claude menu, go to Developer and click Edit Config. That opens claude_desktop_config.json. Add this, with your key, then quit Claude Desktop completely and open it again:
{
"mcpServers": {
"hollerpost": {
"command": "npx",
"args": ["-y", "hollerpost-mcp"],
"env": {
"HOLLERPOST_KEY": "hp_live_your_key_here"
}
}
}
}
If you already have other servers in that file, add the "hollerpost" block next to them inside "mcpServers".
Cursor
Add this to .cursor/mcp.json in your project (or ~/.cursor/mcp.json for every project). It reads your key from the HOLLERPOST_KEY environment variable, so the key stays out of the file:
{
"mcpServers": {
"hollerpost": {
"url": "https://mcp.hollerpost.com/mcp",
"headers": {
"Authorization": "Bearer ${env:HOLLERPOST_KEY}"
}
}
}
}
Rather run it locally? The same block from the Claude Desktop section works in Cursor’s mcp.json too.
ChatGPT
ChatGPT connects to remote MCP servers in developer mode (on paid plans, on the web). Turn on Developer mode in ChatGPT’s settings, then add a new app with the plus button and give it the remote URL.
ChatGPT can’t send a custom header, so put your key in the URL instead and choose no authentication:
https://mcp.hollerpost.com/mcp?key=hp_live_your_key_here
The server never writes keys to its logs, but anyone who sees that URL can use the key, and a URL is easier to leak than a header. So make a key just for ChatGPT, leave Send unchecked unless you need it, and revoke it if you stop using it. Any other assistant that can’t send headers can use this too, or run the local npx setup instead.
Scopes
Each API key has scopes that decide what it can do. A new key starts with read, contacts, draft and account. That’s enough to set up your account and draft campaigns, and none of it can send to your list or spend money. Change them when you make the key.
| Scope | Lets the key | On by default |
|---|---|---|
read | See your workspace, brand, templates, tags, contacts, campaigns, stats and events. | Yes |
contacts | Add contacts (with consent). | Yes |
draft | Draft and edit campaigns, preview them, send tests to your team, and save brand voice notes. | Yes |
send | Schedule and cancel campaigns, and send one-off emails. | No |
webhooks | Add, list and remove webhooks. | No |
account | Change your workspace name, from name, reply-to and footer address; add, check and remove sending domains; get a billing portal link. | Yes |
About send
It lets the key schedule campaigns to your whole list. Only turn it on for tools you trust. Without it, your assistant can draft and test as much as it likes, and you schedule the send yourself in the dashboard.
If a tool needs a scope the key doesn’t have, it gets 403 insufficient_scope and your assistant tells you which scope was missing. Nothing happens.
Tools
These are the tools your assistant sees. “Uses sends” means it counts toward your plan’s monthly emails.
| Tool | What it does | Uses sends | Can you undo it |
|---|---|---|---|
workspace_info | Who you are: workspace, plan, trial, scopes and brand, in one call. | No | Read only |
brand_get | Your logo, colors, from name, footer, voice notes and sending domain. | No | Read only |
brand_set_voice | Saves notes on how your emails should sound. | No | Yes, save new notes |
templates_list | Your templates and what each one needs filled in. | No | Read only |
segments_list | Your tags and how many subscribed people have each. | No | Read only |
contacts_search | Finds contacts by email, status or tag. | No | Read only |
contacts_add | Adds or updates one contact. Only works when the person agreed to hear from you. | No | Not from chat. Edit them in your dashboard |
campaign_draft | Makes a new draft campaign from a template, with a subject, content and audience. | No | Nothing is sent. Drafts can be edited |
campaign_update | Edits a draft. | No | Yes, edit it again |
campaign_preview | Shows the finished email, how many people it goes to, what that leaves of your sends, and any warnings. | No | Read only |
campaign_send_test | Sends a test to up to 3 people on your workspace. | Yes, one per test email | No, it’s sent |
campaign_schedule | Schedules a draft to send now or later. Needs the send scope. | Yes, one per person | Yes, with campaign_cancel, until it starts sending |
campaign_cancel | Cancels a scheduled campaign before it sends. | No | Yes, schedule it again |
campaigns_list | Lists your campaigns, by status. | No | Read only |
campaign_stats | Sent, delivered, bounced, opened, clicked, unsubscribed, and the top links. | No | Read only |
email_send | Sends one email to one person, like a receipt or a reply. Needs the send scope. | Yes, one | No, it’s sent |
events_recent | Recent events: signups, unsubscribes, bounces, complaints. | No | Read only |
account_get | Your plan, sends used this month, trial and billing date. | No | Read only |
account_update | Changes your workspace name, from name, reply-to or footer address. | No | Yes, change it back |
domain_add | Adds a sending domain and returns the DNS records to put in. | No | Yes, with domain_remove |
domain_list | Your sending domains and whether each is verified. | No | Read only |
domain_verify | Checks your DNS records now and says which ones are right and which are wrong. | No | Read only |
domain_remove | Removes a sending domain. Asks for confirmation, and won’t remove one a scheduled campaign is using. | No | No. Add it again and redo the DNS records |
billing_portal_link | Gives you a link to your billing page. You open it and make any changes there. | No | Nothing changes from chat |
Safety
The point is that an assistant can do the busy work without being able to surprise you. These rules are in the server and the API, not just in the tool descriptions:
- Preview before schedule. Your assistant is told to preview a campaign and show you the audience count and the sends it uses before it schedules anything. Scheduling needs an explicit confirmation and that audience count. If your list changed by more than 5% since the preview, the schedule is refused and your assistant gets the new count to show you.
- A person reviews your first campaign. The first campaign from a new workspace is reviewed by a person before it sends. An assistant can’t skip that; it’s told the review is pending.
- Consent to add contacts. Adding a contact requires confirming the person agreed to hear from you. Anyone who unsubscribed or bounced stays that way.
- Tests go to your team. Test sends only go to people on your workspace, never to an address the assistant picks.
- No billing changes. No tool can change your plan, buy a send pack or touch a card. The only billing tool hands back a link to your billing page, and a person opens it.
- One destructive tool.
domain_removeis the only tool that deletes anything, and it needs confirmation. There’s no tool to delete contacts, campaigns or webhooks.
Limits
Each key can make 600 requests a minute, the same as the API. If your assistant goes over, the server waits and tries once more, then tells it to slow down.
Emails sent through the MCP server count toward your plan’s monthly sends, the same as campaigns you send from the dashboard. During the free trial they count toward the trial’s 1,000 emails, and the trial lasts 7 days. The MCP server itself costs nothing extra.
Stuck? Email support@hollerpost.com. It comes to me.
Sources
The setup steps above were checked against each app’s own docs. Apps move their menus now and then; if a button has moved, these pages will have the current name.
- Claude Help Center, Getting started with custom connectors using remote MCP, https://support.claude.com/en/articles/11175166-getting-started-with-custom-connectors-using-remote-mcp, checked 2026-10-04.
- Model Context Protocol, Connect to local MCP servers (Claude Desktop), https://modelcontextprotocol.io/docs/develop/connect-local-servers, checked 2026-10-04.
- Cursor Docs, Model Context Protocol, https://cursor.com/docs/context/mcp, checked 2026-10-04.
- OpenAI, ChatGPT developer mode, https://developers.openai.com/api/docs/guides/developer-mode, checked 2026-10-04.