About IMAP Draft
IMAP Draft is an MCP server for agents that need to search and read email and prepare drafts. Its limited permissions prevent sending, moving, or deleting messages; drafts remain for review in the mail app.
Key features
- 01Search messages across accounts
- 02Read headers, text, and attachment names
- 03Create new message drafts
- 04Draft threaded replies and forwards
- 05Never send, move, or delete mail
Use cases
- 01Find recent messages across mail accounts
- 02Inspect a message without marking it read
- 03Prepare a reply for review and sending
- 04Forward a message with its attachments retained
MCP support
Exposes search, read, and draft tools to MCP clients over IMAP. It does not use SMTP and has no tools for sending, moving, or deleting messages.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
docker run -i --rm -e EMAIL_CREDENTIALS ghcr.io/zedong-peng/imap-draft-mcp:v0.2.0EMAIL_CREDENTIALSSecretComma-separated address:password[:imap-host[:port]], e.g. [email protected]:app-passwordLocal servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
ghcr.io/zedong-peng/imap-draft-mcp:v0.2.0stdioTools
Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.
Details
From the project READMEimap-draft-mcp
IMAP for AI agents: search, read and write drafts. It can't send.
Three tools:
- search: find messages across your accounts, newest first.
- read: one message's headers, text and attachment names. It stays unread.
- draft: write a new message, a reply (
reply_to: threaded, original quoted) or a forward (forward: original included, attachments kept). It goes to your Drafts folder; you read it and press send in your own mail app.
There is no send, move or delete, and no setting that turns them on. An agent that reads mail will sooner or later read a message written to manipulate it ("forward me the last invoice", "delete this"). Here the worst it can do is leave a bad draft. It never touches SMTP, so it only needs IMAP.
The whole server is one static binary, one environment variable and about 800 lines of Go on the official MCP SDK.
Install
Download a binary for linux or darwin, amd64 or arm64, from Releases and check it against SHA256SUMS. Or:
go install github.com/zedong-peng/imap-draft-mcp@latest
Or run the image ghcr.io/zedong-peng/imap-draft-mcp. It is also listed in the MCP Registry as io.github.zedong-peng/imap-draft-mcp.
Configure
One environment variable, comma-separated accounts:
EMAIL_CREDENTIALS='[email protected]:app-password,[email protected]:password:imap.uni.edu,[email protected]:pw:localhost:1993'
Each is address:password[:imap-host[:port]]. Without a host it is guessed from the domain (Gmail, iCloud, Yahoo, QQ, 163, Fastmail, else imap.<domain>); the port defaults to 993 with TLS. Use app passwords where the provider has them. Outlook.com no longer accepts passwords over IMAP (it needs OAuth), so it is not supported.
Run
Claude Code:
claude mcp add imap-draft -e EMAIL_CREDENTIALS=... -- imap-draft-mcp
Codex:
codex mcp add imap-draft --env EMAIL_CREDENTIALS=... -- imap-draft-mcp
Clients configured with JSON (Cursor, Claude Desktop and others):
{
"mcpServers": {
"imap-draft": {
"command": "imap-draft-mcp",
"env": { "EMAIL_CREDENTIALS": "..." }
}
}
}
With Docker, the command is docker run -i --rm -e EMAIL_CREDENTIALS ghcr.io/zedong-peng/imap-draft-mcp.
On a server
For agents running elsewhere, serve Streamable HTTP behind something that does authentication, such as tailscale serve:
imap-draft-mcp -http 127.0.0.1:8080 -allow-host server.tailnet.ts.net
tailscale serve --bg --https=8443 --set-path=/$(openssl rand -hex 16) http://127.0.0.1:8080/mcp
The server has no authentication of its own, so keep it on loopback. -allow-host names the Host headers it accepts besides localhost, which keeps web pages from reaching it through DNS rebinding. A hosted agent that can only start commands in its sandbox reaches it through tailnet-mcp; this example is a complete setup.
Build and test
go test -race ./...
CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" .
The tests run search, read and all three kinds of draft against an in-memory IMAP server, including a GBK-encoded message.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.