Skip to main content
Glama
apple-mail-mcp

apple-mail-mcp

by redpop

get_message

Read-onlyIdempotent

Retrieve a single Apple Mail message with its headers, attachment names, and body text as plain text. Optionally strip quoted replies and cap the returned characters to keep context concise.

Instructions

Returns one message with its headers, attachment names and body text, as plain text with quoted replies optionally removed. Changes nothing.

Input Schema

NameRequiredDescriptionDefault
idYes
maxCharsNo
stripQuotedNo

Output Schema

NameRequiredDescriptionDefault
ccYes
idYes
toYes
bodyYes
dateYes
fromYes
linkYes
noteNo
unreadYes
flaggedYes
replyToYes
subjectYes
categoryYes
dateSentYes
reminderYes
threadIdYes
bodyLocalYes
importantYes
mailboxesYes
attachmentsYes
bodyAvailableYes
recipientCountYes
attachmentCountYes
attachmentNamesYes
subjectRedactedNo
bodyUnavailableReasonYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv0.3.0
    • addedOutput schema / properties / reminder
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "id",
      -  "link",
      -  "subject",
      -  "from",
      -  "to",
      -  "cc",
      -  "recipientCount",
      -  "date",
      -  "mailboxes",
      -  "unread",
      -  "flagged",
      -  "attachmentNames",
      -  "attachmentCount",
      -  "threadId",
      -  "bodyLocal",
      -  "category",
      -  "important",
      -  "replyTo",
      -  "dateSent",
      -  "body",
      -  "bodyAvailable",
      -  "bodyUnavailableReason",
      -  "attachments"
      -]New value: +[
      +  "id",
      +  "link",
      +  "subject",
      +  "from",
      +  "to",
      +  "cc",
      +  "recipientCount",
      +  "date",
      +  "mailboxes",
      +  "unread",
      +  "flagged",
      +  "attachmentNames",
      +  "attachmentCount",
      +  "threadId",
      +  "bodyLocal",
      +  "category",
      +  "important",
      +  "reminder",
      +  "replyTo",
      +  "dateSent",
      +  "body",
      +  "bodyAvailable",
      +  "bodyUnavailableReason",
      +  "attachments"
      +]
  2. First observedv0.2.0

TDQS

B3.2/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true and idempotentHint=true, so "Changes nothing" is largely redundant. The description does add real behavioral context beyond the structured fields: output is plain text, attachments are represented by names rather than content, and quoted replies can be stripped — useful for anticipating output shape even though an output schema exists.

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

Conciseness4/5

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

A single dense sentence that front-loads what is returned and what the caller controls. Every clause earns its place; only the slightly tangled "plain text with quoted replies optionally removed" construction costs it a point.

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

Completeness3/5

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

With an output schema and full annotations, the description needn't explain return values or safety, and it covers the read semantics well. It falls short on the maxChars truncation contract, which is exactly the kind of silent behavior an agent needs to know to avoid misreading a truncated body as complete.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry parameter meaning and largely does not. It explains stripQuoted ("quoted replies optionally removed") but says nothing about maxChars or that output is truncated at a character cap, nor about the numeric-only id format — the truncation point is the biggest silent gap.

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 uses a specific verb and resource ("Returns one message") and enumerates what comes back: headers, attachment names, and body text. It is distinguishable from search_messages and get_thread by being the single-message, single-id fetch, though it never names those siblings to make the contrast explicit.

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

Usage Guidelines3/5

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

There is no explicit when-to-use statement, no prerequisites, and no named alternative such as search_messages or get_thread. Usage is only implied by the phrase "Returns one message," which lets an agent infer single-message retrieval but leaves the choice against siblings to inference.

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

Deploy Server

Other Tools