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?) Open an inbox; retention_hours capped by your plan
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.12.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.12.0
File Size Uploaded
mailflat_mcp-0.12.0.tar.gz 12.3 kB Details

Built distribution (wheel)

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

Total release size: 25.9 kB

Release files / mailflat_mcp-0.12.0.tar.gz

Download URL mailflat_mcp-0.12.0.tar.gz
Size 12.3 kB
Tags Source
SHA-256 checksum
How to use checksums
e1ce3ef13bc0704a4ed399a5d4d4d129c1d990068252e70f13b5258368f47218
BLAKE2b-256 checksum
How to use checksums
a18b3ad91270ea5601cf63e8c6d3efc676587b056220b5346415e15140eec9b3
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.12.0-py3-none-any.whl

Download URL mailflat_mcp-0.12.0-py3-none-any.whl
Size 13.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
df83d1361654f844073c5094a4d3b9a405e759b747331eeb497996df5d09efd5
BLAKE2b-256 checksum
How to use checksums
57cda5d8a773e6b9eaa01f4729586a9bfd9770756d3072b5e20049b81a7e26e7
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.12.0 This release

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