MailDev 3.0

The local email inbox
for developers

A local SMTP server and modern web UI that catches every email your app sends during development. Now readable by your AI agent via the Model Context Protocol.

Free & open source (MIT) · npm i -g maildev

MailDev 3.0 web interface showing a caught email rendered as HTML, with a list of received emails MailDev 3.0 web interface in dark mode

Hover the screenshot to preview dark mode · ships with light & dark themes

New in 3.0

Your dev inbox, readable by your AI agent

MailDev ships a built-in Model Context Protocol (MCP) server, so AI agents can search your inbox, pull verification links, and check that email actually went out — in plain language. Works with any MCP client, including Claude, Cursor, and Codex.

Turn it on with a single flag:

maildev --mcp
# MCP endpoint now live at http://localhost:1080/mcp

Or run the standalone maildev-mcp stdio server for desktop AI tools.

  • 5 tools
  • 3 resources
  • 4 prompts

Read the MCP integration guide →

AI agent + MailDev
Get me the verification link from the signup email to user@test.com
Found the signup email sent 12s ago. The verification link is:
https://app.test/verify?token=a1b2c3
Did the password reset email actually go out?
Yes — a “Reset your password” email was delivered to user@test.com 4s ago with a valid reset link. ✅

Everything you need to test email locally

Catch mail on a local SMTP port and inspect it in a fast, modern interface.

MailDev showing the raw source of an email with HTML, Plain Text, Headers and Source tabs

Every format

Switch between rendered HTML, plain text, headers, and raw source for any message.

MailDev previewing an HTML email at a 425px mobile viewport width

Responsive preview

Resize the preview to any viewport to check how your emails render on mobile.

MailDev command palette open, showing email actions and keyboard shortcuts, launched with Command-K

Command palette ⌘K

Hit ⌘K to jump anywhere, run actions, and search your inbox — without leaving the keyboard.

Built for modern development

A complete TypeScript rewrite — same zero-config workflow, brand-new foundation.

SMTP catch-all

Point your app at localhost:1025 and every outgoing email lands in MailDev instead of a real inbox.

REST API

A full JSON API under /api to list, read, search, download, and delete mail from your tests.

Real-time

New mail appears instantly over WebSockets — no refresh, no polling.

Attachments

Receive, preview, and download attachments exactly as they were sent.

Relay & auto-relay

Selectively forward a message to a real SMTP server, or auto-relay with allow/deny rules.

Notifications

Optional browser notifications the moment a new email is received.

Light & dark

A polished interface that follows your theme, easy on the eyes at 2am.

TypeScript & embeddable

Fully typed. Use the CLI, Docker, or embed the programmatic API in your own Node app.

Runs anywhere

One npm install or a single Docker command. Also serves over HTTPS when you need it.

Get started in seconds

Install, point your mail transport at port 1025, and open the inbox.

Install with npm

npm install -g maildev
maildev

…or with Docker

docker run -p 1080:1080 -p 1025:1025 maildev/maildev

Send mail to it

Configure your app to send over SMTP on localhost:1025, then open http://localhost:1080. For example, with Nodemailer:

// Nodemailer — no auth needed in development
const transport = nodemailer.createTransport({
  host: 'localhost',
  port: 1025,
})

See setup for Django, Rails, Spring & more →