add_domain
Add a sending domain and return the DNS records to publish. The domain cannot send until those records are live and verify_domain succeeds.
Send transactional mail, run campaigns and drip sequences, and work out why the last send landed in spam — without leaving the assistant.
LABSCO SUMMARY
create_campaign only drafts, create_automation starts paused, and the irreversible steps are annotated so a client can prompt before running them — which matters when the failure mode is a real send to a real list. Sandbox mode is the other half of that: it captures messages instead of delivering them while you get a template or a drip sequence right. If mail is already going astray, start at get_deliverability_score for the grade and the reasons behind it, then let check_dmarc hand you the exact DNS record to publish.
MisarMail's MCP server, covering the whole platform: transactional sending, a unified inbox, marketing campaigns, contacts, templates, automations, A/B tests, analytics and deliverability tooling. Alongside the tools it ships prompts your client shows as slash-commands and read-only resources an agent can attach without spending a call. It runs locally over stdio or as a remote streamable-HTTP endpoint at https://api.misar.io/mail/mcp.
Runs over stdio as npx -y @misarmail/mcp@latest, or as a remote server at https://api.misar.io/mail/mcp with Authorization: Bearer msk_…. Two ways in: set MISARMAIL_API_KEY from mail.misar.io/developers, or start with no key and call the login tool, which opens the consent screen and saves the returned key to ~/.misarmail/config.json. MISARMAIL_BASE_URL points the client at a self-hosted instance. Discovery works without credentials; every action needs them. MIT.
One command — npx -y @smithery/cli install misar/misarmail-mcp --client claude
USE CASES
Check which sender domains are verified, validate the recipient address before you spend reputation on it, and send. An unverified sender is the usual cause of a rejected send.
Draft it, read back the audience and content, then send as a separate call. Nothing leaves until that second step, and a schedule is just an argument on it.
Start with the account score and the factors behind it, run the full audit across authentication, reputation, hygiene and blocklists, then check what the DNS actually resolves to today.
Find the unsubscribed and bounced addresses, score the rest for engagement and churn risk, and mark the ones that should stop receiving mail.
Create the workflow with its trigger and step delays, preview the rendered template with sample variables, and let sandbox mode capture the sends until the sequence reads right.
Generate variants, run them against a sample of the audience, and release the winner to everyone who was held back once the results are in.
Delivery and engagement grouped by period, a structured report over a date range, and revenue attributed per campaign and per contact from tracked conversions.
Counted once with only startup setup. Other versions, modes or optional credentials may expose a different list.
add_domainAdd a sending domain and return the DNS records to publish. The domain cannot send until those records are live and verify_domain succeeds.
archive_emailMove an email to the archive folder. Reversible — the message is not deleted.
auth_statusCheck whether this client is authenticated, which MisarMail account the stored key belongs to, and which API base URL it targets. Run this first when a tool reports an auth error.
categorize_inbox_emailsRun AI categorisation over a batch of inbox emails to label intent and priority. Consumes AI credits — pass only the emails you actually need triaged.
check_dmarcCheck live SPF, DKIM, and DMARC DNS records for a domain and report alignment problems with the exact record to publish. Works for any domain, not only your own.
clear_sandboxDelete every captured sandbox email. Affects only intercepted test messages, never real sent mail.
configure_inbound_domainConfigure inbound email routing for a subdomain so replies land in the MisarMail unified inbox. Returns the MX record to publish.
create_ab_testCreate an A/B test on a campaign with two or more variants. A sample percentage is sent first; the winner goes to the remainder once selected.
create_automationCreate an automation workflow from a trigger and an ordered list of steps. Created paused by default — call toggle_automation to activate once the steps are reviewed.
create_campaignCreate a new email marketing campaign as a draft. Creating never sends — call send_campaign separately once the content and audience are confirmed.
create_contactAdd a single contact. Adding a contact records consent to email them — only add addresses that opted in, or the send will damage sender reputation and may breach CAN-SPAM/GDPR.
create_landing_pageCreate a hosted landing page with an email capture form. Returns the public URL; subscribers flow straight into your contact list.
create_templateCreate a reusable email template. Use {{variable}} placeholders for personalisation — they are substituted at send time and previewable via render_template.
generate_reportGenerate a structured analytics report over a date range. Report types: campaign_performance, engagement_funnel, cohort_analysis, and send_time_heatmap (best hour/day to send).
generate_subject_linesGenerate AI subject-line variants for a campaign topic, optionally tuned to a tone and audience. Good input for create_ab_test.
get_analyticsGet delivery and engagement analytics — sent, delivered, opened, clicked, bounced, and complained — for the account or one campaign, grouped by day/week/month.
get_automationGet one automation workflow in full: trigger, every step with its delay, and per-step completion stats.
get_campaignGet full details for one campaign: content, audience segment, schedule, and delivery statistics (sent, opened, clicked, bounced, complained).
get_contact_scoreGet engagement score, engagement tier, and churn risk for one contact — or the lowest-engagement contacts across the list when contact_id is omitted. Use before a re-engagement campaign.
get_deliverability_scoreGet the account deliverability score (0–100) and letter grade (A–F) with the factors dragging it down. Start here when asked why emails are landing in spam.
get_emailRead the full content of a single email by ID, including headers, body, and attachments metadata. Side effect: marks the email as read.
get_formGet one signup form including its fields, embed code, and redirect behaviour.
get_form_submissionsList submissions for a signup form, including the submitted field values and timestamps.
get_inbox_conversation_messagesGet every message in one inbox conversation, oldest first, with sender and timestamps.
get_integrationGet one integration's configuration, scopes, and last sync result.
get_marketplace_itemGet one marketplace listing with its full preview, author, and install count.
get_monetization_statsGet newsletter monetization stats: paid subscribers, MRR, churn, and sponsorship revenue for the period.
get_revenue_attributionAttribute ecommerce revenue to email — revenue per campaign, per contact, and average order value from tracked conversions.
get_warmup_statusGet IP/domain warm-up progress and today's remaining send capacity. Exceeding warm-up capacity on a new domain is the fastest way to get throttled or blocklisted.
import_contactsBulk-import up to 5,000 contacts in one call. Existing addresses are updated rather than duplicated. Returns per-row results so you can see which rows were rejected and why.
list_ab_testsList A/B tests with per-variant results and whether a winner has been selected yet.
list_api_keysList API keys on the account with their scopes and last-used time. Key secrets are never returned — only metadata.
list_automationsList automation workflows (welcome series, re-engagement, drip sequences) with their trigger type and active state.
list_campaignsList email marketing campaigns with their status, audience size, and headline metrics. Filter by status to find drafts ready to send or campaigns still sending.
list_contactsList contacts with their subscription status and engagement metrics. Filter by status to find unsubscribed or bounced addresses that should be excluded from sends.
list_domainsList sending domains with verification status and their DKIM/SPF/DMARC records. Check here first when a send fails with an unverified-sender error.
list_emailsList emails from a mailbox folder with optional full-text search across subject and body. Use this for reading the unified inbox; use list_campaigns for marketing sends.
list_formsList signup forms with their embed status and conversion counts.
list_inbox_conversationsList unified-inbox conversations (threads) with their status and detected intent. Use this for triage; use list_emails for individual messages in a folder.
list_integrationsList connected third-party integrations and their sync status.
list_marketplace_itemsBrowse the MisarMail template marketplace for ready-made email and automation templates.
list_sandbox_sendsList emails captured by sandbox mode. Sandbox intercepts sends instead of delivering them — use it to verify templates and automations without emailing anyone.
list_templatesList saved email templates with their variable placeholders, so you can pick one for a campaign or transactional send.
loginAuthenticate with your MisarMail account via browser — no API key copy-paste needed. Opens the MisarMail authorization page where you review the requested permissions and click 'Authorize'. The API key is delivered straight back to this client and saved to ~/.misarmail/config.json.
logoutForget the locally stored MisarMail API key (~/.misarmail/config.json). Does not revoke the key server-side — delete it from mail.misar.io/developers to do that.
render_templateRender a template with sample variables and return the resulting HTML and subject. Use this to preview personalisation before sending anything.
reply_to_emailReply to an existing email thread. The sender address and threading headers are derived from the original message, so only the body is required.
run_deliverability_auditRun a full deliverability audit across authentication (SPF/DKIM/DMARC), domain reputation, list hygiene, content signals, and blocklist status. Returns prioritized findings.
select_ab_test_winnerSelect the winning variant and send it to the remaining audience. This triggers a real send to everyone who was held back — it cannot be undone.
send_campaignSend a campaign now, or schedule it for a future time by passing scheduled_at. This delivers real email to real recipients and cannot be undone once sending starts — confirm the audience with get_campaign first.
send_emailSend a transactional email from a verified MisarMail account. from.email must match an email account you have already verified — use list_domains to check which sender domains are available. Returns the message ID and queue status.
toggle_automationActivate or pause an automation. Activating starts enrolling contacts and sending on the configured schedule.
toggle_integrationEnable or disable an integration. Disabling stops all syncing but preserves the stored credentials.
update_contactUpdate an existing contact by email address, including changing subscription status. Setting status to unsubscribed immediately excludes them from every future campaign.
upgradeShow the current MisarMail plan, how much of each quota is left, and what upgrading unlocks. Call it any time — not only after hitting a limit. Set open=true to open the checkout page in the default browser.
validate_emailValidate an email address before sending: syntax, MX records, disposable-domain and role-account detection. Use this to protect sender reputation on imported lists.
verify_domainRe-check a domain's DNS records and mark it verified if they resolve. Safe to retry — DNS propagation can take up to 48 hours.
BEFORE YOU INSTALL
57 tools when we connected. login, logout and auth_status handle authentication; the other 54 are product tools. Every tool lists without credentials, but none works without a key or a browser login.
npx on PATH
MISARMAIL_API_KEY in your environment
CONTEXT COST
Rated by the size of the 57 tool definitions that ride along on every turn, not by how many there are
INSTALLATION
npx -y @smithery/cli install misar/misarmail-mcp --client claudehttps://api.misar.io/mail/mcpAdd this hosted endpoint to your MCP client.
claude mcp add misarmail -- npx -y @misarmail/mcp@latest{
"mcpServers": {
"misarmail": {
"command": "npx",
"args": [
"-y",
"@misarmail/mcp@latest"
],
"env": {
"MISARMAIL_API_KEY": "<YOUR_MISARMAIL_API_KEY>"
}
}
}
}{
"mcpServers": {
"misarmail": {
"type": "streamable-http",
"url": "https://api.misar.io/mail/mcp",
"headers": {
"Authorization": "Bearer <YOUR_MISARMAIL_API_KEY>"
}
}
}
}Clients spell the "type" value differently: Claude Code and VS Code use "http", Cline uses "streamableHttp", and Roo Code uses "streamable-http". Claude Desktop does not accept a URL entry in its config file; remote servers go under Settings → Connectors.