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-mcp-server is an MCP project maintained in the commonninja/sendraven-mcp-server repository. The maintainer describes its purpose as “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…”. Read the project documentation for the complete scope.
The maintainer’s configuration uses https://mcp.sendraven.ai/mcp. Check the project’s account and authentication instructions when adding the endpoint to your client.
Project documentation · Repository · Discovery listing. This profile records the public documentation checked on 2026-10-08.
Check the linked publisher documentation and your connected client's tool list. Names and availability can vary with the server version and account permissions.
| Tool | What it does |
|---|---|
| send_email | Send a transactional email, immediately or scheduled. scheduled_at takes a relative phrase like 'in 3 days' or an ISO timestamp. The From domain must already… |
| list_emails | List messages newest first with their delivery status, including held, scheduled, skipped and failed ones and the mail campaigns and automations sent. Filter… |
| get_email | Fetch one message with its full event timeline (send, delivery, bounce, complaint, open, click). The timeline shows why an email didn't arrive. |
| cancel_scheduled_email | Cancel a scheduled email before it sends. Only works while status is 'scheduled': a message that has already started sending, or is in any other state, answers |
| 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… |
| add_sending_domain | Register a sending domain and get back the DNS records to publish. It takes the domain mail is sent from — mail. and news. are provisioned beneath it and the… |
| verify_sending_domain | Re-check a domain's DNS records now instead of waiting for the background monitor. Also restarts bounce-path (mail_from) verification when SES gave up before… |
| list_suppressions | List addresses we refuse to mail and why (hard_bounce, complaint, unsubscribe, manual, list_hygiene), newest first, each with its scope. When someone reports… |
| add_suppression | Stop sending to an address. Scope 'marketing' leaves transactional mail working; the default is 'all'. Reason 'unsubscribe' is a real opt-out: it also… |
| remove_suppression | Remove a suppression so the address can be mailed again. A hard bounce means the address was rejected by the receiving server, and re-sending raises the bounce |
| create_broadcast | Create a campaign as a draft. Nothing is sent: preview_broadcast reports its reach and send_broadcast sends it. identity_id must be a marketing sending… |
| 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… |
| list_broadcasts | List campaigns, newest first, with their status. Paged: at most 100 per call; while has_more is true, next_cursor passed back as cursor returns the next… |
| preview_broadcast | How many contacts a campaign would reach, and whether the reputation gate would allow it. It is the only way to see the size of a campaign without starting it. |
| send_broadcast | Send a draft or scheduled campaign now, or schedule it with scheduled_at. This mails every contact in the segment and cannot be undone once started… |
| pick_broadcast_winner | Decide an A/B test now instead of waiting for decide_at. 'variant' names the winning key; without it the metric decides on the figures so far. The rest of… |
| resume_broadcast | Continue a paused campaign now. It mails only the addresses still pending — the audience was frozen when the campaign started and everyone already reached is… |
| list_threads | List email conversations. awaiting_reply=true returns only the threads where someone has written in and no answer has been sent, which is what needs a… |
| get_thread | Read a conversation as a chronological transcript of outbound and inbound messages. Inbound text already has quoted history and signatures stripped; raw_text… |
| 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… |
| mark_thread_handled | Clear a conversation's awaiting_reply flag without sending anything, for when the last inbound message needs no answer — a "thanks, all sorted" — so it stops… |
| list_templates | List stored email templates and the variables each one needs. Unlike HTML composed at send time, templates carry the workspace's reviewed subject, copy and… |
| render_template | Render a template with values, without sending, showing how the copy reads before it mails a real person. A missing variable answers 422 missing_variables with |
| 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. Nothing is sent |
| 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. A send… |
| decide_approval | Approve or reject a held message. Approving releases it: it sends now, or at its scheduled_at when the draft was scheduled for later. If every recipient… |
| list_automations | List multi-step email sequences and how many people are currently in each, with the id each one is enrolled by. Newest first, at most 100 per call; while… |
| get_automation | Fetch one automation: its status, trigger, steps, exit rules and how many people are in each state. The same object list_automations returns, for a caller that |
| list_automation_enrollments | The people in one automation, newest enrolment first: each row has the email, status, current_step, next_due_at and, for a cancelled one, cancel_reason. It… |
| create_automation | Define a multi-step sequence as a draft; nothing is sent until it is activated, from the dashboard or with set_automation_status. Unlike several separately… |
| update_automation | Change the rules that take someone out of a sequence (topic_key, exit_tags, required_tags, exit_on_reply), its reply_to, its reenrollment, or its… |
| set_automation_status | Activate, pause or return an automation to draft. A new automation is a draft and sends nothing until it is set to 'active'. Pausing ('paused' or 'draft')… |
| enroll_in_automation | Put someone into a multi-step sequence. Unlike several separately scheduled emails, the sequence stops on its own if they unsubscribe (from everything or… |
| emit_event | Emit a named event, starting every automation that waits on it — for example 'trial_started' or 'invoice_overdue'. The configured sequences decide what… |
| list_topics | List subscription topics — the categories a person can opt out of individually. Marketing mail sent under a topic lets recipients unsubscribe from that kind… |
| get_email_preferences | What one person has chosen to receive. It shows whether someone who isn't getting a particular kind of email opted out of it — an opt-out looks identical to… |
| set_email_preferences | Set which topics a person receives, recording what they asked for — silently re-subscribing someone who opted out is what generates spam complaints. Every… |
| list_audiences | List contact lists, newest first, with each one's id and contact_count. Paged: at most 100 per call; while has_more is true, more lists are on later pages… |
| add_contact | Add someone to an audience. A contact exists once per workspace and can be on any number of audiences, so adding an address that already exists joins them to… |
| import_contacts | Import up to 5,000 contacts into an audience in one call, with names, tags, custom properties and subscription status. This is the migration tool: the previous |
| get_contact | Fetch one contact by id, with their audience memberships, custom properties and engagement dates. |
| update_contact | Update a contact. Attributes are merged, so sending one field does not clear the rest. unsubscribed: true is a real opt-out: it suppresses the address for… |
| list_segments | List saved audience filters. A campaign created with a segment id, rather than a filter described inline, shares one definition that can be reused and counted. |
| list_tags | Every tag in use in the workspace, with how many contacts carry each. Tags are free-form, so this is the only way to know what exists before applying one. |
| count_segment | How many contacts a segment currently matches. A filter that matches nobody shows up here as 0, before any campaign is built around it or sent. |
| get_email_metrics | Delivery and engagement over a window. Open and click rates are over delivered, not sent — a low open rate with a high bounce rate is a deliverability problem, |
| list_scheduled_emails | Messages queued to send later but not yet sent, newest first; cancel_scheduled_email cancels one. At most 100 per call; while has_more is true, next_cursor… |
| suppress_many | Stop sending to many addresses at once — the path for importing another provider's unsubscribe list before a first campaign. Without it, everyone who already… |
| list_webhook_deliveries | Recent delivery attempts for a webhook endpoint: each with event, status, attempts, last_status_code, last_error and delivered_at (null until it succeeds).… |
| list_broadcast_recipients | Who a campaign reached and what happened to each message, with the A/B variant when there is one. At most 200 per call; while has_more is true, next_cursor… |
| get_usage | This workspace's plan, what it has sent this billing period, what the period costs so far, and — the fields worth branching on — sending_locked and… |
| find_contact | Find a contact by address across every audience, without knowing which list they are on, or list the workspace's contacts by tag or subscription. email matches |
| remove_from_audience | Take a contact off one audience. They stay in the workspace and keep every other audience, their suppression and their engagement history. delete_contact… |
| delete_contact | Remove a person from the workspace entirely, along with every audience membership. Their suppression and topic preferences are kept on purpose — an opt-out has |
| tag_contact | Add or remove tags on a contact. Tags are flat labels — vip, beta, churned — as opposed to custom properties, which are declared fields with a value. They… |
{
"mcpServers": {
"sendraven": {
"url": "https://mcp.sendraven.ai/mcp"
}
}
}From the project documentation. Replace placeholders and example paths before connecting.
Your assistant inside the workspace — read channels, search history, post messages and tame the noise.
Build a programmable telecommunications stack for connecting telephony services with the Internet via a cloud-based utility.
Inbox intelligence — search, read, draft and send Gmail through your assistant with OAuth auto-setup.
Read and write Jira, Confluence, Bitbucket, JSM and Compass from your AI client — with your own permissions.
Read and send Telegram messages through your assistant — chats, channels and history via the client API.
Enables Discord bot integration with Model Context Protocol (MCP) compatible applications like Claude Desktop.