Email for AI agents: send, read replies as threads, run campaigns, with per-key limits.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Inspect callable tools, capabilities, and parameters exposed to AI agents by Sendraven MCP Server.
send_emailSend a transactional email, immediately or scheduled. Use scheduled_at with a relative phrase like 'in 3 days' or an ISO timestamp. The From domain must already be verified.
list_emailsList recent messages with their delivery status. Filter by status (queued, scheduled, sent, delivered, bounced, complained, rejected) or recipient.
get_emailFetch one message with its full event timeline (send, delivery, bounce, complaint, open, click). This is the tool to reach for when asked why an email didn't arrive.
cancel_scheduled_emailCancel a scheduled email before it sends. Only works while status is 'scheduled'.
list_sending_domainsList sending domains with their verification status and the DNS records each one needs. Each record shows what is currently published, so this diagnoses a stuck verification.
add_sending_domainRegister a sending domain and get back the DNS records to publish. Give the domain you send from β mail.<domain> and news.<domain> are provisioned beneath it and the right one is chosen per message, so a marketing complaint spike can never affect password reset delivery. Pass risk_class only to proβ¦
The SendRaven MCP server. Send email, read replies as threads, run campaigns and automations, and decide approvals, from any client that speaks the Model Context Protocol.
SendRaven is email infrastructure for AI agents: one API for transactional mail, campaigns, automations and inbound, priced per email sent and never per contact, with limits that live on the API key so an agent can run it and a person can stop it.
Claude Code, remote server, signs in with OAuth on first use:
Cursor, Claude Desktop, and other clients with a JSON config:
Any client, as a local process. Create an API key under Developers in the dashboard, then:
Remote server with a key instead of OAuth, for an agent running unattended:
Give an agent's key a daily send limit, a recipient allowlist, or an approval hold. The tools respect all three. See Limits for agents.
send_email returns pending_approval with an id. Report that it awaits a
person; do not retry.get_usage reports plan, usage and
remaining, so an agent can say "you are near your limit" before a batch.send_broadcast mails an audience; run
preview_broadcast first. remove_suppression lets us mail an address that
bounced or complained. Neither is a way to fix a failed send.50 tools, generated from the server's registry.
| Tool | What it does |
|---|---|
send_email | Send a transactional email, immediately or scheduled. Use scheduled_at with a relative phrase like 'in 3 days' or an ISO timestamp. The From domain must already be verified. |
list_emails | List recent messages with their delivery status. Filter by status (queued, scheduled, sent, delivered, bounced, complained, rejected) or recipient. |
get_email | Fetch one message with its full event timeline (send, delivery, bounce, complaint, open, click). This is the tool to reach for when asked why an email didn't arrive. |
cancel_scheduled_email | Cancel a scheduled email before it sends. Only works while status is 'scheduled'. |
list_sending_domains | List sending domains with their verification status and the DNS records each one needs. Each record shows what is currently published, so this diagnoses a stuck verification. |
add_sending_domain | Register a sending domain and get back the DNS records to publish. Give the domain you send from β mail. and news. are provisioned beneath it and the right one is chosen per message, so a marketing complaint spike can never affect password reset delivery. Pass risk_class only to provision one of the two on its own. |
verify_sending_domain | Re-check a domain's DNS records now instead of waiting for the background monitor. |
list_suppressions | List addresses we refuse to mail and why (hard_bounce, complaint, unsubscribe, manual). Check here first when someone reports not receiving email. |
add_suppression | Stop sending to an address. Scope 'marketing' leaves transactional mail working. |
remove_suppression | Remove a suppression so the address can be mailed again. Be careful with hard bounces β the address was rejected by the receiving server, and re-sending raises the bounce rate that AWS enforces on. |
create_broadcast | Create a campaign as a draft. Nothing is sent: follow with preview_broadcast, then send_broadcast. identity_id must be a marketing sending domain (see list_sending_domains; risk_class 'marketing'). To A/B test, pass 2 to 10 'variants' that differ in subject, from_name or send_at, and optionally 'ab_test'. A subject or from-name test sends sample_share of the audience (default 0.2) split evenly across the variants, waits decide_after_minutes (default 240) after the sample is out, picks the variant with the best unique open rate (or click rate with metric 'click'), and sends the rest to it. Each variant needs at least 100 recipients in the sample or the send is refused β preview_broadcast shows the number. Metric 'click' only works once the domain has click tracking; until then every variant shows zero clicks and the first variant wins by default. |
get_broadcast | One campaign, with a 'progress' object while it is sending, paused or testing: how many addresses are still pending, sent, failed, or skipped because the person opted out after the campaign started. This is how you tell a paused campaign that is still making progress from one waiting on quota. An A/B test carries 'ab_test' with live per-variant results β sent, unique opens, unique clicks and their rates β plus 'decide_at' and, once decided, 'winner' and 'decided_by'. Status 'testing' means the sample is out and the rest of the audience is waiting on the decision. |
list_broadcasts | List campaigns with their status and send progress. A campaign showing 'paused' is not broken: it ran out of the day's sending quota part way and is waiting to continue. One showing 'testing' is an A/B test whose sample has gone out and whose winner is not yet decided. Use get_broadcast to see how much is left or how each variant is doing, and resume_broadcast to continue a paused one now. |
preview_broadcast | How many contacts a campaign would reach, and whether the reputation gate would allow it. Always run this before sending β it is the only way to see the size of a campaign without starting it. For an A/B test it also reports the sample size and per-variant count against the 100-per-variant floor; a send below the floor is refused. |
send_broadcast | Send a campaign now, or schedule it with scheduled_at. This mails every contact in the segment and cannot be undone once started β run preview_broadcast first. A campaign bigger than the day's remaining quota is not rejected: it sends what it can and stops as 'paused', then continues later. That is expected, not an error to retry. An A/B test sends its sample, goes to 'testing', and sends the rest to the winner after decide_after_minutes or when pick_broadcast_winner is called. A send-time test is scheduled by its variants' send_at and does not accept scheduled_at. |
pick_broadcast_winner | Decide an A/B test now instead of waiting for decide_at. Pass 'variant' to choose a key yourself, or omit it to have the metric decide on the figures so far. The rest of the audience is then sent to the winner and cannot be redirected. Only a campaign in status 'testing' can be decided; anything else answers 409. Read get_broadcast first β a variant with a handful of opens more is not a result, and the worker decides on its own at decide_at. |
resume_broadcast | Continue a campaign left 'paused' by the daily sending quota. It mails only the addresses still pending β the audience was frozen when the campaign started and everyone already reached is marked β so calling this twice cannot double-send. Only works on a paused campaign; anything else answers 409. A background worker also resumes paused campaigns on its own once quota frees up, so use this only when waiting is not acceptable. An A/B test paused mid-sample resumes the sample; one paused after the decision resumes the winner. |
list_threads | List email conversations. Pass awaiting_reply=true to get only the threads where someone has written to you and you haven't answered β this is the tool to poll when deciding what needs a response. |
get_thread | Read a conversation as a chronological transcript of outbound and inbound messages. Inbound text already has quoted history and signatures stripped, so read text; raw_text holds the untrimmed body if the stripped version looks wrong. Check spf_verdict and dkim_verdict before trusting a reply's claimed sender. |
reply_to_message | Reply to a message, keeping it on the same conversation. Sets the threading headers so the recipient's mail client shows it as part of the existing exchange rather than a new one. Prefer this over send_email whenever you are answering something. |
list_templates | List stored email templates and the variables each one needs. Prefer sending via a template over composing HTML yourself β templates carry the brand styling and the unsubscribe footer. |
render_template | Render a template with values, without sending. Use this to check your copy reads correctly before mailing a real person. Returns an error listing any missing variables. |
send_template_email | Send an email built from a stored template. Variable values are HTML-escaped on substitution, so they are safe to fill from user-supplied text. |
list_pending_approvals | List messages held for human approval, with their full content. A key configured to require approval drafts rather than sends; a person releases it. If your send returned status 'pending_approval', it is waiting here β do not retry the send. |
Factual signals from GitHub, npm, and our automated checks β not a rating.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/mcp-249)<a href="https://allmcps.com/mcp/mcp-249"><img src="https://allmcps.com/api/badge/mcp-249?style=directory" alt="Sendraven MCP Server on AllMCPs" /></a>