Skip to content
All tools

reply_email

Email · macOS

Effect: send (strongest supported action). Status: gated.

Gated means the tool requires an installed app, a connected account, permission, or runtime availability. Check those requirements on the listed platform before using it.

macOS

Purpose

Use this when the user wants to reply to an email that lives in the Mac's Apple Mail (message ID from list_emails/search_emails). Previews before sending. The reply that is sent holds your text followed by a plain-text quote of the original ("On <date>, <sender> wrote:" and the original's lines prefixed with `> `), in the same thread; `html_body` is converted to plain text. If the original has no readable text the reply is sent with your text only and the response says so (`quoted_original: false` and a warning to relay). To leave the reply in Drafts WITHOUT sending, pass `save_as_draft: true`: the draft is in the right thread with the Reply/Reply-All recipients and holds the same content (not Mail's styled quote), and `send` is never called. On either path, if Mail does not keep the text or the quote, the call fails and nothing is sent or saved. `create_draft` with `reply_to_message_id` leaves the same kind of draft. For a Microsoft 365 message ID from m365_list_emails, use m365_reply_email. Pass `account` (from list_emails/search_emails results) to skip scanning other accounts and avoid timeouts on multi-account Macs.

Required inputs

Permissions and confirmation

Explicit confirmation parameter: inspect the schema and tool description before any real call. The documentation example keeps confirm false. Obtain user authorization before performing the action.

Full input schema — macOS
{
  "properties": {
    "account": {
      "description": "Account (from the listing) the message is in — pass it to skip scanning other accounts and avoid multi-account timeouts.",
      "type": "string"
    },
    "body": {
      "description": "Plain-text reply body.",
      "type": "string"
    },
    "confirm": {
      "default": "false",
      "description": "Consent gate: the first call previews the reply; call again with confirm=true to actually SEND it — or to save it when save_as_draft is set.",
      "type": "boolean"
    },
    "html_body": {
      "description": "HTML reply body. Takes precedence over `body` when both are given. It is converted to plain text: a reply is sent, or saved, as text with a plain-text quote of the original.",
      "type": "string"
    },
    "message_id": {
      "description": "Id of the message to reply to (from list_emails/search_emails).",
      "type": "string"
    },
    "reply_all": {
      "default": "false",
      "description": "Reply to all original recipients instead of just the sender.",
      "type": "boolean"
    },
    "save_as_draft": {
      "default": "false",
      "description": "Save the reply in Drafts instead of sending it: your text followed by a plain-text quote of the original, in the right thread, with the Reply/Reply-All recipients. Nothing is sent on this path.",
      "type": "boolean"
    }
  },
  "required": [
    "message_id"
  ],
  "type": "object"
}

Documentation example

Do not execute this example. These concrete inputs refer to a fictional demonstration dataset. Resolve real handles and obtain user authorization before any real call.

{
  "body": "Can we review the launch checklist on Tuesday?",
  "confirm": false,
  "message_id": "demo-message-001"
}