An MCP (Model Context Protocol) server that lets AI assistants manage temporary email addresses via the mail.tm API. Create disposable inboxes, read messages, and manage accounts — all from your AI chat.
| Tool | Description |
|---|---|
list_domains |
List available domains for creating temp addresses |
create_temp_email |
Create a new disposable email account (random or custom) |
login |
Log in to an existing mail.tm account |
get_inbox |
List messages in the current inbox (paginated) |
read_email |
Read the full content of an email by ID |
mark_as_read |
Mark a message as read |
delete_email |
Permanently delete a message |
get_account_info |
Get current account details and storage usage |
delete_account |
Permanently delete the account and all its messages |
logout |
Clear the current session without deleting the account |
The server runs as a streamable-http MCP server on port 8000, endpoint /mcp.
Compatible with:
- mcpjungle
- Claude Desktop (HTTP mode)
- Any MCP client that supports
streamable-http
curl -O https://raw.githubusercontent.com/opastorello/mailtm-mcp-server/master/docker-compose.yml
docker compose up -dServer available at http://localhost:8000/mcp.
docker pull ghcr.io/opastorello/mailtm-mcp-server:latest
docker run -d -p 8000:8000 -v mailtm-session:/tmp --name mailtm ghcr.io/opastorello/mailtm-mcp-server:latestpip install -r requirements.txt
python mailtm_server.pyRequires Python 3.11+.
cat > /tmp/mailtm.json << 'EOF'
{
"name": "mailtm",
"transport": "streamable_http",
"url": "http://localhost:8000/mcp"
}
EOF
mcpjungle register -c /tmp/mailtm.jsonWhen mcpjungle runs inside Docker, localhost doesn't resolve to the host. You need both containers on the same Docker network.
The included docker-compose.yml handles this automatically — it joins the opt_default network (mcpjungle's default network) and sets a fixed container name mailtm so the hostname never changes across restarts.
# Download and start
curl -O https://raw.githubusercontent.com/opastorello/mailtm-mcp-server/master/docker-compose.yml
docker compose up -d
# Register using the container hostname
cat > /tmp/mailtm.json << 'EOF'
{
"name": "mailtm",
"transport": "streamable_http",
"url": "http://mailtm:8000/mcp"
}
EOF
mcpjungle register -c /tmp/mailtm.jsonNote: The transport value is
streamable_http(underscore), nothttp— this is mcpjungle-specific.
Note:
host.docker.internaldoes not work on Linux. Use the container name or a fixed IP instead.
To re-register after changes:
mcpjungle deregister mailtm
mcpjungle register -c /tmp/mailtm.jsonmcpjungle invoke mailtm__create_temp_email
mcpjungle invoke mailtm__get_inbox
mcpjungle invoke mailtm__list_domainsPointing to a running instance:
{
"mcpServers": {
"mailtm": {
"url": "http://localhost:8000/mcp"
}
}
}The server stores the active session in /tmp/mailtm_session.json:
- Session persists between tool calls automatically within the same run.
- Mount
/tmpas a Docker volume to survive container restarts. logout()clears the session without deleting the account.delete_account()deletes the account and clears the session.
1. create_temp_email() → generates a random address like abc123@dollicons.com
2. get_inbox() → check for new messages
3. read_email(message_id="...") → read the content
4. delete_account() → clean up when done
MIT — Nícolas Pastorello