Skip to main content
Glama
parasxos

apple-mail-mcp

by parasxos

Reply to an email

reply_email

Send a threaded email reply with optional history, attachments, and reply-all, using the original message's ID to keep conversations linked in Apple Mail.

Instructions

Reply with correct threading, optional history, attachments, and reply-all.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
ccNoOptional comma-separated Cc recipients.
idYesEnvelope ID of the email being answered.
bccNoOptional comma-separated Bcc recipients.
bodyYesPlain-text email content; paragraph breaks are preserved.
reply_allNoAlso copy the original To and Cc recipients, excluding yourself.
attachmentsNoOptional list of local file paths, one path per item.
from_identityNoConfigured sending identity; omit it to use the default.
include_historyNoQuote the original message below the new reply.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv1.6.0
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": true,
      -    "properties": {
      -      "attachments": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "bcc": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "bootstrapped": {
      -        "type": "boolean"
      -      },
      -      "cc": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "error": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "message_id": {
      -        "type": "string"
      -      },
      -      "ok": {
      -        "type": "boolean"
      -      },
      -      "subject": {
      -        "type": "string"
      -      },
      -      "to": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "ok",
      -      "message_id",
      -      "to",
      -      "cc",
      -      "bcc",
      -      "subject",
      -      "attachments",
      -      "bootstrapped",
      -      "error"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": true,
      -    "properties": {
      -      "code": {
      -        "type": "string"
      -      },
      -      "error": {
      -        "type": "string"
      -      },
      -      "fix": {
      -        "type": "string"
      -      },
      -      "ok": {
      -        "const": false
      -      },
      -      "operation_id": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "ok",
      -      "code",
      -      "error"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": true,
      +    "properties": {
      +      "accepted": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "attachments": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "bcc": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "bootstrapped": {
      +        "type": "boolean"
      +      },
      +      "cc": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "code": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "error": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "message_id": {
      +        "type": "string"
      +      },
      +      "ok": {
      +        "type": "boolean"
      +      },
      +      "refused": {
      +        "additionalProperties": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "subject": {
      +        "type": "string"
      +      },
      +      "to": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "ok",
      +      "message_id",
      +      "to",
      +      "cc",
      +      "bcc",
      +      "subject",
      +      "attachments",
      +      "bootstrapped",
      +      "error",
      +      "accepted",
      +      "refused",
      +      "code"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": true,
      +    "properties": {
      +      "code": {
      +        "type": "string"
      +      },
      +      "error": {
      +        "type": "string"
      +      },
      +      "fix": {
      +        "type": "string"
      +      },
      +      "ok": {
      +        "const": false
      +      },
      +      "operation_id": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "ok",
      +      "code",
      +      "error"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. First observedv0.1.0

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare the mutable, non-idempotent, open-world nature of the call. The description adds the useful behavioral trait that replies are threaded correctly and history is quoted by default, but it doesn't state side effects like whether a sent reply is also filed in the mailbox or how it interacts with drafts.

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?

A single compact sentence that front-loads the core action and lists the salient options without filler. Every clause maps to a real capability of the tool.

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?

With an output schema present and full parameter documentation, the description covers the essentials an agent needs. It is only slightly thin on the reply-versus-send routing decision, which is the main remaining gap.

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 100%, so all eight parameters are already documented in the schema, including reply_all semantics and include_history default. The description adds nothing beyond what the schema states, so the baseline of 3 applies.

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

Purpose4/5

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

The description gives a specific verb (Reply) and resource (email) and enumerates the distinguishing features: threading, optional history, attachments, reply-all. It doesn't explicitly contrast with siblings like send_email or create_draft, so an agent must infer the difference, but the purpose itself is unambiguous.

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

Usage Guidelines2/5

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

No guidance on when to reply versus use send_email or create_draft, and no prerequisites such as requiring a valid envelope ID from a prior read. The agent is left to infer that this is the answer-to-existing-message path.

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