Skip to main content
ClaudeWave
CommonNinja avatar
CommonNinja

sendraven-mcp-server

View on GitHub
MCP ServersOfficial Registry0 stars0 forksTypeScriptMITUpdated today
ClaudeWave Trust Score
77/100
Trusted
Passed
  • Open-source license (MIT)
  • Actively maintained (<30d)
  • Documented (README)
Flags
  • !No description
Last scanned: 9/3/2026
Install in Claude Code / Claude Desktop
Method: NPX · @sendraven/mcp
Claude Code CLI
claude mcp add sendraven -- npx -y @sendraven/mcp
claude_desktop_config.json (Claude Desktop)
{
  "mcpServers": {
    "sendraven": {
      "command": "npx",
      "args": ["-y", "@sendraven/mcp"],
      "env": {
        "SENDRAVEN_API_KEY": "<sendraven_api_key>"
      }
    }
  }
}
1. Run the command above in your terminal (Claude Code), or paste the JSON config into claude_desktop_config.json (Claude Desktop).
2. Replace any <placeholder> values with your API keys or paths.
3. Restart Claude. The MCP server and its tools appear automatically.
Detected environment variables
SENDRAVEN_API_KEY
Use cases

MCP Servers overview

# @sendraven/mcp

The [SendRaven](https://sendraven.ai) 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.

## Install

**Claude Code**, remote server, signs in with OAuth on first use:

```bash
claude mcp add --transport http sendraven https://mcp.sendraven.ai/mcp
```

**Cursor, Claude Desktop, and other clients with a JSON config:**

```json
{
  "mcpServers": {
    "sendraven": {
      "url": "https://mcp.sendraven.ai/mcp"
    }
  }
}
```

**Any client, as a local process.** Create an API key under Developers in the
dashboard, then:

```bash
claude mcp add sendraven -e SENDRAVEN_API_KEY=sk_live_… -- npx -y @sendraven/mcp
```

```json
{
  "mcpServers": {
    "sendraven": {
      "command": "npx",
      "args": ["-y", "@sendraven/mcp"],
      "env": { "SENDRAVEN_API_KEY": "sk_live_…" }
    }
  }
}
```

**Remote server with a key instead of OAuth**, for an agent running
unattended:

```json
{
  "mcpServers": {
    "sendraven": {
      "url": "https://mcp.sendraven.ai/mcp",
      "headers": { "Authorization": "Bearer sk_live_…" }
    }
  }
}
```

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](https://sendraven.ai/docs/agents).

## Behaviour worth knowing

- **A held send is not a failure.** When a key requires approval,
  `send_email` returns `pending_approval` with an id. Report that it awaits a
  person; do not retry.
- **Out of plan is 402, not 429.** `get_usage` reports plan, usage and
  remaining, so an agent can say "you are near your limit" before a batch.
- **Two calls cannot be undone.** `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.
- A failed call returns the API's own message, so "domain not verified" comes
  back as those words rather than a bare 403.

## Tools

<!-- tools:start -->
45 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.<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 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. |
| `list_broadcasts` | List campaigns with their status and send progress. |
| `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. |
| `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. |
| `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. |
| `decide_approval` | Approve or reject a held message. Approving sends it immediately. Only use this when a human has explicitly told you which decision to make — the hold exists precisely so that an agent is not the one deciding. |
| `list_automations` | List multi-step email sequences and how many people are currently in each. Use this to find the right automation before enrolling someone. |
| `enroll_in_automation` | Put someone into a multi-step sequence. Prefer this over scheduling several emails yourself: the sequence stops on its own if they unsubscribe, reply, or hard bounce, which you would otherwise have to track and cancel by hand. Enrolling the same person twice is a no-op, so it is safe to retry a call you are unsure about. |
| `emit_event` | Emit a named event, starting every automation that waits on it — for example 'trial_started' or 'invoice_overdue'. Use this when you want the configured sequences to decide what happens, rather than naming an automation yourself. |
| `list_topics` | List subscription topics — the categories a person can opt out of individually. Pass a topic when sending marketing mail so recipients can unsubscribe from that kind alone rather than from everything. |
| `get_email_preferences` | What one person has chosen to receive. Check this before asking a human why someone isn't getting a particular kind of email — an opt-out looks identical to a delivery failure from the outside. |
| `set_email_preferences` | Set which topics a person receives. Only do this when they have actually asked — silently re-subscribing someone who opted out is what generates spam complaints. |
| `list_audiences` | List contact lists and how many contacts each holds. |
| `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 this list rather than creating a second copy. Safe to retry. |
| `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. |
| `list_segments` | List saved audience filters. Use a segment id when creating a campaign rather than describing the filter inline, so the same definition 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. Run this before building a campaign around it — a filter that matches nobody is easier to spot here than after a send. |
| `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, not an engagement one. |
| `list_scheduled_emails` | Messages queued to send later but not yet sent. Cancel one with cancel_scheduled_email. |
| `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 opted out there gets mailed again here. |
| `list_webhook_deliveries` | Recent delivery attempts for a webhook endpoint, with status codes and errors. This is how to tell 'we never sent it' from 'your endpoint returned 500'. |
| `list_broadcast_recipients` | Who a campaign reached and what happened to each message. |
| `list_api_keys` | List this workspace's API keys with their scopes and 

What people ask about sendraven-mcp-server

What is CommonNinja/sendraven-mcp-server?

+

CommonNinja/sendraven-mcp-server is mcp servers for the Claude AI ecosystem with 0 GitHub stars.

How do I install sendraven-mcp-server?

+

You can install sendraven-mcp-server by cloning the repository (https://github.com/CommonNinja/sendraven-mcp-server) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.

Is CommonNinja/sendraven-mcp-server safe to use?

+

Our security agent has analyzed CommonNinja/sendraven-mcp-server and assigned a Trust Score of 77/100 (tier: Trusted). See the full breakdown of passed checks and flags on this page.

Who maintains CommonNinja/sendraven-mcp-server?

+

CommonNinja/sendraven-mcp-server is maintained by CommonNinja. The last recorded GitHub activity is dated 2026-09-02, with 0 open issues.

Are there alternatives to sendraven-mcp-server?

+

Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.

Deploy sendraven-mcp-server to your cloud

Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.

Maintain this repo? Add a badge to your README

Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.

Featured on ClaudeWave: CommonNinja/sendraven-mcp-server
[![Featured on ClaudeWave](https://claudewave.com/api/badge/commonninja-sendraven-mcp-server)](https://claudewave.com/repo/commonninja-sendraven-mcp-server)
<a href="https://claudewave.com/repo/commonninja-sendraven-mcp-server"><img src="https://claudewave.com/api/badge/commonninja-sendraven-mcp-server" alt="Featured on ClaudeWave: CommonNinja/sendraven-mcp-server" width="320" height="64" /></a>

More MCP Servers

sendraven-mcp-server alternatives