Skip to main content
Glama
LeChabrax

Apple Mail MCP Server

by LeChabrax

create_draft

Create email drafts for new messages, replies, or forwards; save them for later or send immediately.

Instructions

Create a draft (fresh, reply, or forward). Optionally send immediately.

Mail.app's actual primitive is the draft — every outgoing message is a draft until sent. This tool lets callers create one, optionally seeded from an existing message (reply or forward), and either save it for later or send it now.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
ccNo
toNo
bccNo
bodyNoBody text. For reply/forward, a non-empty body REPLACES Mail's auto-quoted content; an empty body leaves the auto-quote intact (matches Mail.app's default reply behavior).
subjectNoSubject. Required when both seeds are None. For reply/forward, ``None`` keeps Mail's ``Re:``/``Fwd:`` prefix.
reply_toNoId of a message to reply to. Accepts either Mail.app's internal numeric id or an RFC 5322 Message-ID — pass the ``id`` field from any ``search_messages`` / ``get_messages`` row verbatim. Mutually exclusive with ``forward_of``. When set, ``to``/``cc`` recipients and ``subject`` are auto-derived from the original (override by passing them explicitly).
send_nowNo``False`` (default) saves as draft. ``True`` sends immediately and elicits user confirmation.
body_htmlNoOptional HTML body. When set, the draft is built as a multipart/alternative (HTML + a plain-text alternative taken from ``body``, or derived from the HTML when ``body`` is empty). HTML drafts are created over the clean IMAP path, so they REQUIRE IMAP credentials for the account and are limited to fresh save-as-draft: passing ``body_html`` with ``send_now`` or with ``reply_to``/``forward_of`` is rejected, and if IMAP can't engage the call fails (``error_type: "html_requires_imap"``) rather than silently downgrading to plain text. HTML is caller-trusted (not sanitized). (#251)
reply_allNoFor ``reply_to`` only — use ``reply to all``.
forward_ofNoId of a message to forward. Accepts the same id forms as ``reply_to``. Mutually exclusive with ``reply_to``. ``to`` is required (recipient of the forward).
from_accountNoMail.app account name or UUID. ``None`` uses Mail's default; on a save-as-draft with exactly one enabled account, that account is adopted so the clean (no iOS quote bug) IMAP draft path can engage.
seed_mailboxNoMailbox the reply_to/forward_of message lives in (e.g. the ``mailbox`` field from its ``search_messages`` row). Lets the clean save-as-draft path fetch the original directly so reply/forward drafts render without the iOS quote bug — supply it especially for replies to filed (non-INBOX) mail. Defaults to INBOX; a miss falls back transparently.
template_nameNoOptional template to render for ``subject`` and ``body``. Caller-supplied ``subject``/``body`` override the rendered output. ``template_vars`` override auto-fills.
template_varsNoVariables to pass to the template renderer. Requires ``template_name``.
attachment_pathsNoList of file paths to attach.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are all false (no read-only, idempotency, or destructive hints), so they carry essentially no information and the description must carry the burden. The description does disclose the key behavioral trait — that this can 'send immediately' vs. 'save it for later' — which is meaningful. However, it omits side effects like the user confirmation prompt on send, visibility of saved drafts in Mail.app, or failure modes; the actual behavioral weight is carried by the parameter docs instead.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences total — one imperative verb-first opener plus a three-sentence framing paragraph — with zero fluff. The core action is front-loaded, and the conceptual paragraph earns its place by giving an agent a mental model for a genuinely complex 15-parameter tool. Every sentence carries weight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter tool with an output schema (so return values are already documented) and a detailed schema, the description covers the essentials: the three creation modes, the seed-from-original concept, and the save-vs-send distinction. The only real gap is that it doesn't help an agent choose between this and the send_email/reply/reply_all/forward siblings, but given the high schema coverage and output schema, the description is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80%, putting this at the high-coverage baseline. The description's 'seeded from an existing message (reply or forward)' conceptually maps to reply_to/forward_of, but the schema already documents those with far more depth (including the RFC 5322 Message-ID forms and mutual exclusivity), so the description adds no syntax or format value. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb, resource, and scope: 'Create a draft (fresh, reply, or forward). Optionally send immediately.' The three modes are enumerated and the conceptual paragraph explains why a draft-creation tool is the right primitive, distinguishing it clearly from anything that just sends. This is a model of a clear operation + scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The explanation that 'every outgoing message is a draft until sent' provides clear conceptual context for when this tool is the right choice (any outbound mail), and the fresh/reply/forward modes plus the save-vs-send duality are explicit. However, it never names the overlapping siblings (send_email, reply, forward) or states when NOT to use this tool in favor of them, so it stops at clear context without explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/LeChabrax/apple-mail-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server