mailmcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MAILMCP_KEY | Yes | The master encryption key for tokens. Must be 32 random bytes as base64url. Changing it invalidates every token. | |
| MAILMCP_LICENSE | No | Your licence key. Leave empty for the free tier. | |
| MAILMCP_PUBLIC_URL | No | Public URL of the server when running behind a reverse proxy. | |
| MAILMCP_TRUST_PROXY | No | Set to 1 to trust the reverse proxy. | 0 |
| MAILMCP_ALLOW_PRIVATE_MAIL_HOSTS | No | Set to 1 to allow connecting to mail servers on private IP addresses. | 0 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_accountsA | Lists configured mailboxes with their ids, addresses and what operations are permitted on each. |
| list_foldersA | Lists folders (labels on Gmail) of one account with message and unseen counts. |
| search_messagesA | Searches one account (or all accounts with account="all"). On Gmail, |
| get_messageA | Returns headers, sanitized text body and the attachment list of one message. Body is truncated to the configured limit. |
| get_threadA | Lists all messages belonging to the same conversation as the given message (Gmail thread id, or References headers elsewhere). |
| get_attachmentA | Downloads one attachment (max 2097152 bytes). Text-like types are returned as text, others as embedded binary. |
| create_draftA | Saves a draft into the Drafts folder of the account. Nothing is sent; the owner reviews and sends it from their mail client (or asks you to send_draft). Attachments: existing mailbox attachments, files from upload_attachment/request_upload, or inline content. This is the preferred way to prepare replies. |
| get_signatureA | Returns the signature mailmcp appends under replies: the newest message in the mailbox folder "mailmcp-signature" (HTML with inline images) when the account uses it, otherwise the plain-text signature from the token. |
| set_signatureA | Stores the signature as a message in the mailbox folder "mailmcp-signature" (HTML and/or text). Use it when the owner pastes or dictates their signature. For a signature with a photo or logo the owner instead sends themselves an e-mail from their usual mail client and moves it into that folder; images are then embedded from there. Requires the account to use the mailbox signature (setup page) and the draft capability. |
| reply_draftA | Saves a reply to a specific message into Drafts, in the same thread: In-Reply-To/References, "Re:" subject, recipients (sender, or everyone with reply_all) and the quoted original are set by the server. Use this whenever the owner says "reply / answer / write a draft" ("odpověz", "napiš koncept"). Nothing is sent. |
| reply_sendA | Sends a reply to a specific message in the same thread (threading headers, "Re:" subject, recipients and the quoted original are set by the server). Only when the owner enabled sending for the account AND every recipient matches send_allowlist; otherwise use reply_draft. Use this only when the owner says "send" ("pošli", "odešli"). |
| send_messageA | Sends an email via SMTP, optionally with attachments (existing mailbox attachments, uploaded files, inline content). Only allowed when the owner enabled sending for the account AND every recipient matches send_allowlist. Otherwise use create_draft. |
| send_draftA | Sends a draft exactly as stored in the Drafts folder (including its attachments) and removes it from Drafts. Recipients are taken from the draft and must match send_allowlist. |
| forward_messageA | Forwards a message including all its attachments, without the files passing through the chat. Optional comment goes above the forwarded text. Recipients must match send_allowlist; with as_draft the forward is saved to Drafts instead. |
| upload_attachmentA | Stores a file you have (text, or base64 for binary, up to policy.max_upload_bytes) in the mailbox folder "mailmcp-uploads" so it can be attached to a draft or a sent message. Returns {folder, uid, part} to use in the attachments parameter. The file is removed once attached. For large files or files on the user's disk use request_upload. |
| request_uploadA | Returns a one-hour HTTPS upload link for an account. Anyone with the link can PUT/POST a file to it (curl -T file , or open it in a browser and drop the file); the file lands in "mailmcp-uploads" and appears in list_uploads. Use it for files on the user's disk or files too big for upload_attachment. If you can run commands, upload the file yourself; otherwise give the link to the user. |
| list_uploadsA | Files waiting in "mailmcp-uploads" of an account (from upload_attachment or an upload link), newest first, with the {folder, uid, part} needed to attach them. |
| modify_messageB | Mark read/unread, star/unstar, add/remove Gmail labels, move to a folder or archive. |
| trash_messageA | Moves a message to the Trash folder. Never deletes permanently. |
| searchA | Searches all readable mailboxes with one query string and returns documents with ids for |
| fetchA | Returns the full sanitized text of one email by the id returned from |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| triage_inbox | Summarize what needs attention across accounts |
| draft_reply | Prepare a reply draft to a specific message |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| accounts |
TDQS
Scored across 21 tools
Most tools are clearly separated by action and resource, but `search`/`fetch` duplicate the purpose of `search_messages`/`get_message` with different ID schemes, which can confuse an agent about which pair to use. `trash_message` also overlaps with `modify_message`'s move-to-folder capability, though descriptions mostly clarify boundaries.
The large majority follow a clean verb_noun snake_case pattern (`list_accounts`, `send_message`, `create_draft`, `upload_attachment`). The bare `search` and `fetch` break this pattern and are especially problematic because they visually resemble general verbs rather than specific mail operations alongside `search_messages` and `get_message`.
21 tools is at the heavy end, but the email domain genuinely spans search, threads, drafts, sending, replies, forwarding, attachments, signatures, and message modification. The redundant `search`/`fetch` pair makes the count feel slightly larger than necessary, but the scope is still reasonable.
The surface covers the full email workflow: find, read, thread, reply, forward, draft, send, attach, sign, and modify messages. Minor gaps exist, such as no explicit draft-update tool or folder management beyond moving messages, but these can be worked around with existing tools.