Skip to main content

MailFlat — MCP server

Native Model Context Protocol server for MailFlat. Gives Claude Desktop, Cursor, or any MCP client real inbox tooling: create inboxes, wait for OTP codes, send DKIM-signed mail, and clean up when the task is done. Each address is permanent and stays until you delete it; only the messages inside expire, on a retention window you choose. Built on the mailflat Python SDK.

Run

# zero-install, isolated (recommended)
MAILFLAT_API_KEY=mf_live_… uvx mailflat-mcp

# or install it
pipx install mailflat-mcp
MAILFLAT_API_KEY=mf_live_… mailflat-mcp

Claude Desktop / Cursor config

Add to claude_desktop_config.json (or your client's MCP config):

{
  "mcpServers": {
    "mailflat": {
      "command": "uvx",
      "args": ["mailflat-mcp"],
      "env": { "MAILFLAT_API_KEY": "mf_live_..." }
    }
  }
}

Get your API key from the MailFlat dashboard → Agents.

Tools (19)

Tool What it does
create_inbox(prefix?, label?, retention_hours?, subdomain?, domain?) Open an inbox; retention_hours capped by your plan. domain opens it on one of your verified custom domains (bot@acme.com)
list_inboxes() All inboxes this key can see
read_messages(address, direction="in") Read messages; received mail by default (out / all for the rest)
wait_for_otp(address, timeout=30) Poll until an OTP arrives, then return it
wait_for_message(address, timeout=30) Poll until a new message arrives; ignores mail you sent
send_email(address, to, subject?, body?, html?) Send a DKIM-signed mail from the inbox
reply(address, message_id, body?, html?) Answer a message in the same conversation (threading headers filled in)
wait_until_sent(address, message_id, timeout=60) Did that mail actually go out? A timeout means still queued, not lost: do not send again
mark_read(address, message_id) Mark one message read so later polls skip it
burn_inbox(address) Delete every message but KEEP the address
delete_inbox(address) Delete the inbox and its messages
delete_message(address, message_id) Delete one message; the inbox itself stays
list_calendar_events(address, include_cancelled=False) Meetings from calendar invitations the inbox received, with this inbox's answer (my_status)
rsvp_to_invite(address, event_id, response, comment?) Accept, decline or tentatively accept; the organizer's calendar shows the answer
create_calendar_event(address, title, start, attendees, ...) Schedule a meeting from the inbox and email the invitations (Yes / No / Maybe in the attendees' calendars)
update_calendar_event(address, event_id, ...) Move or edit a meeting the inbox organized; the same event updates in every calendar
cancel_calendar_event(address, event_id, message?) Cancel a meeting the inbox organized
get_calendar_feed(address) Read-only subscribe link for the inbox's calendar, to hand to a person (Google, Apple, Outlook). The same link on every call
rotate_calendar_feed(address) Replace the subscribe link; the old one stops working at once

Reads return received mail by default. Without that, sending to a peer and then waiting for the reply would immediately match your own outgoing message.

Configuration

  • MAILFLAT_API_KEY — your account API key (required).
  • MAILFLAT_API_URL — override the API base (default https://mailflat.net; for self-hosted / BYOD).

Registry

mcp-name: io.github.MailFlat/mailflat-mcp

This line is the ownership marker the official MCP Registry looks for in a PyPI package's README. It proves the same owner controls both the GitHub namespace and the published package, so the registry entry cannot be claimed by someone else. Keep it in sync with the name field in server.json; a test asserts the two match.

License

MIT

Metadata

Release files for mailflat-mcp 0.13.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mailflat-mcp 0.13.0
File Size Uploaded
mailflat_mcp-0.13.0.tar.gz 12.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mailflat-mcp 0.13.0
File Interpreter ABI Platform
mailflat_mcp-0.13.0-py3-none-any.whl Python 3 none any Details

Total release size: 26.3 kB

Release files / mailflat_mcp-0.13.0.tar.gz

Download URL mailflat_mcp-0.13.0.tar.gz
Size 12.6 kB
Tags Source
SHA-256 checksum
How to use checksums
6080cbe84c09e3ab230247644857a9153528d31ae3c75f51463b8a50d3853ca5
BLAKE2b-256 checksum
How to use checksums
91eb9e4685f124dc7f8d2f77ec506d1fbb14b43efcaecc5c9c7162a030aca710
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.9

Release files / mailflat_mcp-0.13.0-py3-none-any.whl

Download URL mailflat_mcp-0.13.0-py3-none-any.whl
Size 13.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2ec6a83c78fcae371ccd3f477be6c3d974413db9ba0f30f1ebb995ea8c91a301
BLAKE2b-256 checksum
How to use checksums
64a06ef60d46b307eedeba3106c22c32ec6aa92678200d8d6a252622806b473e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.9

Release history Release notifications | RSS feed

This release

0.13.0 This release

2 release files

0.12.0

2 release files

0.11.0

2 release files

0.10.0

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.3

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page