
MailerSend’s public API is a single-version REST surface at api.mailersend.com/v1 with 6 official SDKs, a Go-based CLI, and, since August 2025, an official first-party MCP server at mcp.mailersend.com/mcp. That MCP coverage is unusual for a mid-market ESP: as of August 2026, MailerSend, Resend, and SendGrid are the shortlist of transactional providers shipping an official remote MCP endpoint, while Postmark, SparkPost and Amazon SES still rely on community wrappers. If you are picking an API-first ESP that AI agents can drive out of the box, MailerSend earns a serious look. If you need a mature bulk-marketing API with campaign automations, keep Brevo or Mailchimp on the shortlist instead.
The Model Context Protocol lets AI clients. Claude Desktop, Claude Code, Cursor, VSCode, Gemini CLI, ChatGPT Developer mode, call MailerSend as a first-class tool with the same auth and observability as any human integration. MailerSend was one of the first transactional ESPs to ship a first-party server; the spin-off from MailerLite in 2019 kept the developer-tooling DNA, and it shows here.
Remote MCP endpoint at mcp.mailersend.com/mcp exposing 30+ tools across email send, domains, SMTP users, templates, webhooks, suppressions, analytics, DMARC monitoring, blocklist monitoring and SMS. Launched August 5, 2025. Auth is a MailerSend API token entered during connector setup, no local install, no npx wrapper.
Four MCP entry points are usable in production today. Prefer the official server for anything sensitive; the others are useful when you need agent orchestration layers or GTM-specific workflow packaging.
First-party remote MCP endpoint with 30+ tools across email, domains, SMTP users, templates, webhooks, suppressions, analytics, DMARC and SMS. Released August 5, 2025.
Composio-hosted MCP toolkit wrapping the MailerSend API for Claude Agent SDK and other agent frameworks. Handy when you already run Composio for other tools.
GTM-focused packaging of the MailerSend MCP for outreach and campaign workflows. Adds guardrails on top of the raw API.
MailerSend actions and triggers exposed through the Zapier MCP surface. Cross-platform glue for agents that already speak Zapier.
Why buyers should care. An official MCP endpoint means an agent can verify a domain, rotate an SMTP user, inspect a bounce or send a transactional message using the same OAuth-style token you audit in the MailerSend dashboard. You do not depend on a solo maintainer keeping a wrapper current, and you do not need to ship your own tool schema. Compared with Amazon SES or SparkPost-where MCP coverage is community-only in 2026, that is a meaningful head start for agent-driven ops.
The REST surface is intentionally small: one base URL, one version prefix, JSON in and JSON out, Bearer-token auth, cursor-and-page pagination. There is no GraphQL variant and no separate marketing/transactional split, every resource lives under /v1/.
| Base URL | https://api.mailersend.com |
| Current version | v1 (path prefix, no header negotiation) |
| Response format | JSON only (application/json) |
| Auth | Bearer API token in Authorization header |
| Pagination | Cursor + page/limit query params; links.first/last/prev/next and meta.current_page in envelope |
| Bulk send endpoint | POST /v1/bulk-email · up to 500 messages per call |
| Async send response | HTTP 202 Accepted with x-message-id header |
| Request timeout | Not documented; SDKs use HTTP client defaults (typically 30s) |
Resources map cleanly to product concepts: domains, templates, webhooks, suppressions, activity, analytics, inbound, sms. If you are used to the SendGrid or Postmark shape, MailerSend feels closer to Postmark: one send endpoint per intent, no verbose personalizations DSL, envelope kept small. Compared with SendGrid’s /v3/mail/send payload, a MailerSend send body is roughly half the JSON for the same outcome.
MailerSend uses a single auth model: a Bearer API token issued from the dashboard. There is no OAuth 2.0 flow, no legacy Basic Auth on API keys, and no per-domain sub-credentials for the REST surface.
Create a token under Integrations › API tokens, scope it to a domain if you want to blast-radius it, and pass it as:
Authorization: Bearer <YOUR_API_TOKEN> Content-Type: application/json X-Requested-With: XMLHttpRequest
Tokens can be paused via PUT /v1/token/{token_id}/settings and revoked via DELETE /v1/token/{token_id}. The free plan allows 1 token, Hobby 3 tokens, Starter and above lift the cap. Tokens are shown once at creation, write them to a secrets manager immediately.
The SMTP relay uses its own username and password pair, generated per SMTP user under Domains › SMTP users. These are not the API token and cannot be regenerated from the token list, see the SMTP settings tab for the full setup.
Scope caveat. Domain-scoped tokens still see account-wide analytics endpoints, and they can read activity for other domains if the response envelope leaks a shared property. Treat “scoped” as a soft boundary, spin up a separate MailerSend workspace for hard-tenant isolation.
MailerSend publishes per-minute API limits (not per-hour) and plan-tiered daily quotas. Every rate-limited response returns 429 Too Many Requests with a Retry-After header in seconds and x-ratelimit-* response headers to inspect budget mid-flight.
| Limit | Value | Notes |
|---|---|---|
| General endpoints | 60 rpm | Domains, templates, webhooks, suppressions, activity, analytics |
POST /v1/email | 120 rpm | Same on all paid plans; accounts under review throttled to 10 rpm |
POST /v1/bulk-email | 10-60 rpm | Free/Hobby 10, Starter 15, Professional 30, Enterprise 60; under review = 1 rpm |
| Recipients per message | 50 to + 10 cc + 10 bcc | Enterprise raises cc/bcc to 50/50; trial accounts capped at 1 cc + 1 bcc |
| Max message size | 25 MB per attachment | HTML body 2 MB, plain-text body 2 MB, subject 998 chars |
| Concurrent SMTP connections | Not published | Use bulk email endpoint for high-fanout sends |
Workaround pattern for the bulk throttle: batch 500 messages into one POST /v1/bulk-email call and poll the returned bulk id via GET /v1/bulk-email/{id}. On Free/Hobby that is 5,000 messages/minute theoretical ceiling (10 bulk calls x 500 messages) versus 12,000 for single-send at 120 rpm, bulk is cheaper on your rate budget once you cross ~4 recipients per call.
MailerSend maintains six official SDKs directly on GitHub, all released under the mailersend org and covering the same endpoint surface. Compared with Postmark (7 SDKs) or SendGrid (7+), the coverage is competitive; the Go SDK doubles as the source for the official CLI.
| Language | Package | Install | Repo |
|---|---|---|---|
| Node.js | mailersend | npm install mailersend | mailersend-nodejs |
| PHP | mailersend/mailersend | composer require mailersend/mailersend | mailersend-php |
| Python | mailersend | pip install mailersend | mailersend-python |
| Go | github.com/mailersend/mailersend-go | go get github.com/mailersend/mailersend-go | mailersend-go |
| Ruby | mailersend-ruby | gem install mailersend-ruby | mailersend-ruby |
| Java | com.mailersend:java-sdk | Maven: com.mailersend/java-sdk | mailersend-java |
SDK notes. The Node SDK ships TypeScript definitions bundled, you do not need a separate @types/mailersend. The PHP SDK is PSR-18 compatible so you can swap the HTTP client (useful behind a corporate proxy). The Go package powers the official mailersend CLI shipped via Homebrew.
Community coverage is thinner than for SendGrid or Mailgun-expect to reach for the framework-native drivers first: the official Laravel driver, the Symfony Mailer transport, the Django Anymail backend, and the official Firebase extension. For .NET, Elixir and Rust there is no first-party or actively maintained community SDK as of August 2026, use the raw HTTP API.
Full API reference lives at developers.mailersend.com/api/v1. The 15 resources below cover 95%+ of production traffic; less common surfaces (identities, templates variables, activity exports) are documented in the reference but omitted here for scannability.
| Resource | Methods | Description |
|---|---|---|
| Email /v1/email | POST | Send a single transactional email; returns 202 with x-message-id. |
| Bulk email /v1/bulk-email | POST, GET | Queue up to 500 messages per call; GET /v1/bulk-email/{id} returns status. |
| Activity /v1/activity | GET | List email events (sent, delivered, opened, clicked, bounced, spam). |
| Analytics /v1/analytics | GET | Time-series and aggregate metrics by domain, tag, country or user-agent. |
| Domains /v1/domains | GET, POST, PUT, DELETE | Manage sending domains, DNS status and verification. |
| Messages /v1/messages | GET | Retrieve message metadata and delivery attempts by message_id. |
| Templates /v1/templates | GET, DELETE | List and delete drag-and-drop or HTML templates. |
| Webhooks /v1/webhooks | GET, POST, PUT, DELETE | Manage v2 webhook subscriptions with lighter payload envelope. |
| Recipients /v1/recipients | GET, DELETE | Look up recipient send history and delete a recipient. |
| Suppressions /v1/suppressions/{list} | GET, POST, DELETE | Manage blocklists, hard-bounces, spam complaints and unsubscribes. |
| SMTP users /v1/domains/{domain_id}/smtp-users | GET, POST, PUT, DELETE | CRUD for SMTP relay credentials, one per domain. |
| Tokens /v1/token | POST, PUT, DELETE | Create, pause or revoke API tokens. |
| Email verification /v1/email-verification | GET, POST | Bulk and single email-address verification jobs. |
| Inbound routes /v1/inbound | GET, POST, PUT, DELETE | Configure inbound email routing to a URL destination. |
| SMS /v1/sms | POST, GET | Send SMS (Professional/Enterprise) and inspect delivery. |
# pip install mailersend
import os
from mailersend import emails
mailer = emails.NewEmail(os.environ['MAILERSEND_API_KEY'])
body = {}
mailer.set_mail_from({'email': 'you@your-verified-domain.com', 'name': 'SMTPedia Bot'}, body)
mailer.set_mail_to([{'email': 'alaa@example.com', 'name': 'Alaa'}], body)
mailer.set_subject('Hello from MailerSend', body)
mailer.set_html_content('<p>Ping from Python SDK.</p>', body)
mailer.set_plaintext_content('Ping from Python SDK.', body)
response = mailer.send(body)
print(response) # HTTP status + x-message-id header// npm install mailersend
import { MailerSend, EmailParams, Sender, Recipient } from 'mailersend';
const mailerSend = new MailerSend({ apiKey: process.env.MAILERSEND_API_KEY });
const sentFrom = new Sender('you@your-verified-domain.com', 'SMTPedia Bot');
const recipients = [new Recipient('alaa@example.com', 'Alaa')];
const emailParams = new EmailParams()
.setFrom(sentFrom)
.setTo(recipients)
.setSubject('Hello from MailerSend')
.setHtml('<p>Ping from Node SDK.</p>')
.setText('Ping from Node SDK.');
const response = await mailerSend.email.send(emailParams);
console.log(response.statusCode, response.headers['x-message-id']);Fresh accounts stay in a trial sandbox capped at 100 emails/day and can only send to email addresses on your verified domain until MailerSend approves the account. Plan for a 24-72h manual approval window and expect to be asked for a sending-use description. Do not book a launch date the same week you sign up.
Since MailerSend switched to 2048-bit keys you must publish two DKIM CNAME records (plus SPF and Return-Path). Adding only the first one leaves the domain in unverified state and API sends will 422 with domain not verified. Verify both in your DNS host before flipping traffic.
Accounts flagged “under review” are throttled to 10 rpm on POST /v1/email and 1 rpm on POST /v1/bulk-email. Honour the Retry-After header, apply exponential backoff, and prefer the bulk endpoint (500 messages per call) until reputation is healthy.
The SMTP username/password shown once at SMTP user creation is not the same as the Bearer API token and cannot be regenerated from the token list. Store it in your secrets manager immediately. MailerSend only displays it once. Losing it means creating a new SMTP user and updating every relay client.
Since June 3, 2024 the smtp.mailersend.net relay only accepts TLS 1.2 and 1.3. Legacy libraries (old PHPMailer, .NET Framework 4.5 without SchUseStrongCrypto) will fail with connection reset. Upgrade the TLS stack before switching production traffic.
MailerSend publishes release notes at mailersend.com/changelog. Highlights that affect API and MCP integrators (most recent first):
mcp.mailersend.com/mcp with 30+ tools across email, domains, suppressions, SMS and analytics.The base URL is https://api.mailersend.com with a single version prefix, v1. Every resource lives under /v1/ and there is no header-based version negotiation. The API has been stable since the 2019 spin-off from MailerLite, no v2 has been announced as of August 2026.
Create an API token under Integrations › API tokens and pass it as a Bearer token: Authorization: Bearer <YOUR_API_TOKEN>. There is no OAuth 2.0 flow. Tokens can be scoped to a specific domain, paused via PUT /v1/token/{id}/settings, and revoked via DELETE /v1/token/{id}.
60 rpm on general endpoints, 120 rpm on POST /v1/email, and 10-60 rpm on POST /v1/bulk-email depending on plan (Free/Hobby 10, Starter 15, Professional 30, Enterprise 60). Accounts under review are throttled to 10 rpm on single-send and 1 rpm on bulk. Every 429 response returns a Retry-After header.
Six: mailersend (Node.js), mailersend/mailersend (PHP), mailersend (Python), github.com/mailersend/mailersend-go (Go), mailersend-ruby (Ruby) and com.mailersend:java-sdk (Java). All are actively maintained on GitHub under the mailersend org. The Node SDK ships TypeScript types bundled; the Go SDK also powers the official CLI.
POST an array of up to 500 message objects to /v1/bulk-email. The response is a 202 Accepted with a bulk_email_id-poll GET /v1/bulk-email/{bulk_email_id} to inspect per-message status. Bulk send has its own rate budget (10-60 rpm by plan) so batching 500 recipients per call is far cheaper than 500 single-send calls.
Yes. MailerSend runs an official remote MCP server at mcp.mailersend.com/mcp, launched August 5, 2025, with 30+ tools across email, domains, SMTP users, templates, webhooks, suppressions, analytics, DMARC monitoring and SMS. It works with Claude Desktop, Claude Code, Cursor, VSCode, Gemini CLI and ChatGPT Developer mode. Auth is a MailerSend API token entered during connector setup, no local install required.
This review follows our email infrastructure testing methodology. We disclose affiliate relationships in our editorial independence policy.