Skip to main content
Glama

Apple Mail MCP Server

License: MIT PyPI Python 3.10+ MCP GitHub stars

Star History

An MCP server that gives AI assistants full access to Apple Mail -- read, search, compose, organize, and analyze emails via natural language. Built with FastMCP.

Related MCP server: apple-mail-mcp

Quick Install

Prerequisites: macOS with Apple Mail configured, Python 3.10+

Two commands — gets you the MCP server, /email-management slash command, and the Email Management Expert skill:

claude plugin marketplace add patrickfreyer/apple-mail-mcp
claude plugin install apple-mail@apple-mail-mcp

Then restart Claude Code.

Other Install Methods

claude mcp add apple-mail -- uvx mcp-apple-mail

Or for Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "apple-mail": {
      "command": "uvx",
      "args": ["mcp-apple-mail"]
    }
  }
}
pip install mcp-apple-mail
claude mcp add apple-mail -- mcp-apple-mail
  1. Download the latest apple-mail-mcp-vX.Y.Z.mcpb from Releases

  2. Open Claude Desktop → Settings → Developer → MCP Servers → Install from file

  3. Select the .mcpb file and grant Mail.app permissions

git clone https://github.com/patrickfreyer/apple-mail-mcp.git
cd apple-mail-mcp/plugin
python3 -m venv venv
venv/bin/pip install -r requirements.txt

claude mcp add apple-mail -- /bin/bash $(pwd)/start_mcp.sh

Tools (22)

Tool

Description

get_inbox_overview

Dashboard with unread counts, folders, and recent emails

list_inbox_emails

List emails with account/read-status filtering and optional content preview

get_mailbox_unread_counts

Unread counts per mailbox or per-account summary

list_accounts

List all configured Mail accounts

search_emails

Unified search — subject, sender, body text, dates, attachments, flag status/color, cross-account

get_email_thread

Conversation thread view

Organization

Tool

Description

list_mailboxes

Folder hierarchy with message counts

create_mailbox

Create new mailboxes (supports nested paths)

move_email

Move/archive emails with filters (subject, sender, date, read status, dry-run)

update_email_status

Mark read/unread, flag/unflag (optional flag color) — by filters or message IDs

manage_trash

Soft delete, permanent delete, empty trash (with dry-run)

Composition

Tool

Description

compose_email

Send new emails (plain text or HTML body)

reply_to_email

Reply or reply-all with optional HTML body

forward_email

Forward with optional message, CC/BCC

manage_drafts

Create, list, send, and delete drafts

create_rich_email_draft

Build a rich HTML .eml draft, open it in Mail, and optionally save it to Drafts

Attachments

Tool

Description

list_email_attachments

List attachments with names and sizes

save_email_attachment

Save attachments to disk

Smart Inbox

Tool

Description

get_awaiting_reply

Find sent emails that haven't received a reply

get_needs_response

Identify emails that likely need your response

get_top_senders

Analyse most frequent senders by count or domain

Analytics & Export

Tool

Description

get_statistics

Email analytics (volume, top senders, read ratios)

export_emails

Export single emails or mailboxes to TXT/HTML

inbox_dashboard

Interactive UI dashboard (requires mcp-ui-server)

Configuration

Read-Only Mode

Pass --read-only to disable tools that send email (compose_email, reply_to_email, forward_email). Draft management remains available (list, create, delete) but sending a draft via manage_drafts is blocked.

{
  "mcpServers": {
    "apple-mail": {
      "command": "/path/to/venv/bin/python3",
      "args": ["/path/to/apple_mail_mcp.py", "--read-only"]
    }
  }
}

User Preferences (Optional)

Set the USER_EMAIL_PREFERENCES environment variable to give the assistant context about your workflow:

{
  "mcpServers": {
    "apple-mail": {
      "command": "/path/to/venv/bin/python3",
      "args": ["/path/to/apple_mail_mcp.py"],
      "env": {
        "USER_EMAIL_PREFERENCES": "Default to BCG account, show max 50 emails, prefer Archive and Projects folders"
      }
    }
  }
}

For .mcpb installs, configure this in Claude Desktop under Developer > MCP Servers > Apple Mail MCP.

Safety Limits

Batch operations have conservative defaults to prevent accidental bulk actions:

Operation

Default Limit

update_email_status

10 emails

manage_trash

5 emails

move_email

1 email

Override via function parameters when needed.

Usage Examples

Show me an overview of my inbox
Search for emails about "project update" in my Gmail
Reply to the email about "Domain name" with "Thanks for the update!"
Move emails with "invoice" in the subject to my Archive folder
Show me email statistics for the last 30 days
Create a rich HTML draft for a weekly update and open it in Mail

Rich HTML Drafts

Use create_rich_email_draft when you need a visually formatted email, newsletter, or leadership update.

  • It generates an unsent .eml file with multipart plain-text + HTML bodies

  • It can open the draft directly in Mail for editing

  • It can optionally ask Mail to save the opened compose window into Drafts

  • It accepts partial details, so you can start with just an account and subject and fill in the rest later

This is more reliable than injecting raw HTML into AppleScript content, which Mail often stores as literal markup.

Email Management Skill

A companion Claude Code Skill is included that teaches Claude expert email workflows (Inbox Zero, daily triage, folder organization). When installed as a plugin, the skill is loaded automatically. For standalone MCP installs, copy it manually:

cp -r plugin/skills/email-management ~/.claude/skills/email-management

Requirements

  • macOS with Apple Mail configured

  • Python 3.7+

  • fastmcp (+ optional mcp-ui-server for dashboard)

  • Claude Desktop or any MCP-compatible client

  • Mail.app permissions: Automation + Mail Data Access (grant in System Settings > Privacy & Security > Automation)

Troubleshooting

Issue

Fix

Mail.app not responding

Ensure Mail.app is running; check Automation permissions in System Settings

Slow searches

Set include_content: false and lower max_results

Mailbox not found

Use exact folder names; nested folders use / separator (e.g., Projects/Alpha)

Permission errors

Grant access in System Settings > Privacy & Security > Automation

Rich draft shows raw HTML

Use create_rich_email_draft instead of pasting HTML into manage_drafts or AppleScript content

Project Structure

apple-mail-mcp/
├── .claude-plugin/
│   └── marketplace.json       # Marketplace manifest (for plugin distribution)
├── plugin/                    # Claude Code plugin
│   ├── .claude-plugin/
│   │   └── plugin.json        # Plugin manifest
│   ├── skills/                # Email Management Expert skill (also invocable as /email-management)
│   ├── apple_mail_mcp/        # Python MCP server package (24 tools)
│   ├── apple_mail_mcp.py      # Entry point
│   ├── start_mcp.sh           # Startup wrapper (auto-creates venv)
│   └── requirements.txt
├── apple-mail-mcpb/           # MCPB build files (Claude Desktop)
├── LICENSE
└── README.md

Contributing

  1. Fork the repository

  2. Create a feature branch (git checkout -b feature/my-feature)

  3. Commit and push

  4. Open a Pull Request

Releasing

Follow these steps when cutting a new release to keep all version strings in sync:

  1. Bump __version__ in plugin/apple_mail_mcp/__init__.py to the new version.

  2. Update apple-mail-mcpb/manifest.json ("version" field) to match.

  3. Update pyproject.toml (version = ... under [project]) to match.

  4. Update both version fields in server.json ("version" and "packages"[0]["version"]) to match.

  5. Run python3 scripts/check_versions.py — it must print OK before you proceed.

  6. Commit, tag, and push: git tag vX.Y.Z && git push origin vX.Y.Z.

  7. Create a GitHub release from the tag.

  8. Build and publish to PyPI: python -m build && twine upload dist/* (requires PyPI credentials).

The test suite also enforces version consistency (tests/test_version_consistency.py), so any CI run on a branch with mismatched versions will fail fast.

License

MIT -- see LICENSE.

Available Tools

26 tools
compose_emailA

Compose and send a new email from a specific account.

Args: account: Account name to send from (e.g., "Gmail", "Work", "Personal") to: Recipient email address(es), comma-separated for multiple subject: Email subject line body: Email body text (used as plain-text fallback when body_html is provided) cc: Optional CC recipients, comma-separated for multiple bcc: Optional BCC recipients, comma-separated for multiple attachments: Optional file paths to attach, comma-separated for multiple (e.g., "/path/to/file1.png,/path/to/file2.pdf") mode: Delivery mode — "send" (send immediately, default), "draft" (save silently to Drafts), or "open" (open compose window for review before sending) body_html: Optional HTML body for rich formatting (bold, headings, links, colors). When provided, the email is sent as HTML. The plain 'body' field is still required as fallback text. from_address: Optional sender address to use for this message. Must be one of the account's configured email addresses. When omitted, Mail uses the account's default "Send new messages from" setting.

Returns: Confirmation message with details of the email

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNo
toYes
bccNo
bodyYes
modeNosend
accountYes
subjectYes
body_htmlNo
attachmentsNo
from_addressNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Discloses key behaviors: mode options (send/draft/open), body_html fallback requirement, attachments as file paths, and from_address constraints. Lacks error handling or rate limit info, but given no annotations, this is adequate.

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

Conciseness3/5

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

Description is long but well-structured with bullet-style parameter explanations. The purpose is front-loaded. Some redundancy could be trimmed, but the length is justified by 10 parameters.

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?

Covers all parameters and basic return value, but lacks context on when to prefer sibling tools like create_rich_email_draft or prerequisites like account configuration. With output schema present, return details are acceptable.

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

Parameters5/5

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

Schema has 0% description coverage, but the description adds extensive meaning: examples for account, comma-separated for recipients, plain-text fallback, mode descriptions, file paths for attachments, and from_address must be configured.

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?

Clearly states 'Compose and send a new email from a specific account.' This distinguishes it from sibling tools like forward_email or reply_to_email.

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?

Provides no explicit guidance on when to use this tool versus alternatives such as create_rich_email_draft or manage_drafts. The mode parameter implies different uses but no direct comparisons.

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

create_mailboxA

Create a new mailbox (folder) in the specified account.

Supports nested paths via the parent_mailbox parameter (e.g., parent_mailbox="Projects" + name="2024" creates Projects/2024). You can also pass a full slash-separated path as name (e.g., "Projects/2024/ClientName") and omit parent_mailbox.

Args: account: Account name (e.g., "Gmail", "Work") name: Name for the new mailbox. May contain "/" to create a nested path in one call (each segment is created if needed). parent_mailbox: Optional existing parent folder for nesting.

Returns: Confirmation with the new mailbox path.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
accountYes
parent_mailboxNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description must disclose behavior. It explains nesting creates intermediate segments if needed, but does not mention error handling for duplicate names, permissions, or scope of the operation.

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?

Concise with clear structure: main purpose, nesting explanation, Args list, Returns. Minor redundancy in the nesting examples but overall well-organized and front-loaded.

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?

Covers basic usage and returns confirmation path, but lacks details on error states, permission requirements, or behavior when mailbox name conflicts. Output schema is present but minimal; description could be more complete.

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

Parameters5/5

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

Schema description coverage is 0%, but the description explains each parameter: account (account name), name (can include slashes for nesting), parent_mailbox (optional existing folder). Adds significant meaning beyond the bare schema.

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?

Clearly states 'Create a new mailbox (folder)' with specific verb and resource. Explains nested path creation via parent_mailbox or slash-separated name, differentiating it from sibling tools that list or manage emails.

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?

Provides two alternative usage patterns for nesting (parent_mailbox vs. slash-separated name). Lacks explicit conditions for when not to use (e.g., if mailbox already exists) or comparison with sibling tools, but the given guidance is clear.

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

create_rich_email_draftA

Create a rich-text email draft by generating an unsent .eml message and optionally opening it in Mail.

This is the preferred path for HTML or richly formatted emails because Mail reliably renders .eml content, while setting raw HTML through AppleScript often stores the literal markup instead.

Args: account: Account name to use for the sender identity (e.g., "Work", "Oracle") subject: Subject line for the draft (optional; defaults to empty) to: Optional recipient email address(es), comma-separated for multiple text_body: Optional plain-text body. If omitted but html_body is provided, a fallback plain body is generated. html_body: Optional HTML body. If omitted but text_body is provided, a basic HTML wrapper is generated. cc: Optional CC recipients, comma-separated for multiple bcc: Optional BCC recipients, comma-separated for multiple output_path: Optional path for the generated .eml file open_in_mail: If True, open the generated .eml in Mail (default: True) save_as_draft: If True, ask Mail to save the opened compose window into Drafts (default: False) from_address: Optional sender address to stamp into the .eml From: header. Must be one of the account's configured email addresses. When omitted, Mail fills the account's default "Send new messages from" address on open.

Returns: Confirmation with the generated .eml path, missing details, and Mail-open/save status

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNo
toNo
bccNo
accountYes
subjectNo
html_bodyNo
text_bodyNo
output_pathNo
from_addressNo
open_in_mailNo
save_as_draftNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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

Even without annotations, the description thoroughly discloses behavioral traits: it generates an unsent .eml, optionally opens in Mail, handles fallback between text_body and html_body, and explains from_address requirements with default behavior. It also warns about the AppleScript limitation, adding transparency beyond the schema.

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?

The description is well-structured with a clear summary, rationale, parameter list, and return info. It is comprehensive but slightly lengthy due to the 11 parameters. Every sentence adds value, making it efficient for its complexity; a 4 is appropriate for being thorough without excessive redundancy.

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?

Given the tool's complexity (11 parameters, interdependencies, output schema), the description covers most aspects: fallback between text and HTML, from_address constraints, and Mail open/save behavior. However, it could clarify behavior when both bodies are omitted and the exact meaning of 'missing details' in the return. Still, it is largely complete.

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

Parameters5/5

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

With 0% schema coverage, the description fully compensates by explaining each of the 11 parameters in detail. It provides examples (e.g., account 'Work' or 'Oracle'), specifies defaults (e.g., subject defaults to empty), and clarifies conditional logic (e.g., fallback generation when one body is omitted). This adds significant meaning beyond the plain schema.

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?

The description clearly states the tool creates a rich-text email draft by generating an unsent .eml file and optionally opening it in Mail. It distinguishes itself from alternatives like compose_email by noting that .eml is preferred for HTML emails due to reliable rendering, which prevents the AppleScript HTML injection issue.

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 description provides strong usage guidance by stating it is the preferred path for HTML or richly formatted emails, implying a distinction from plain-text email tools. However, it does not explicitly name alternative sibling tools like compose_email for plain text, missing an opportunity for clearer when-to-use vs when-not-to-use.

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

export_emailsA

Export emails to files for backup or analysis.

Args: account: Account name (e.g., "Gmail", "Work") scope: Export scope: "single_email" (requires subject_keyword) or "entire_mailbox" subject_keyword: Keyword to find email (required for single_email) mailbox: Mailbox to export from (default: "INBOX") save_directory: Directory to save exports (default: "~/Desktop") format: Export format: "txt", "html" (default: "txt") max_emails: Maximum number of emails to export for entire_mailbox (default: 1000, safety cap)

Returns: Confirmation message with export location

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeYes
formatNotxt
accountYes
mailboxNoINBOX
max_emailsNo
save_directoryNo~/Desktop
subject_keywordNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It explains the scope options, default values, safety cap on max_emails, and return type. However, it does not mention authentication or whether the tool modifies any state.

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?

The description is concise and well-structured, with a clear parameter list. Every sentence adds value; no wasted words.

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

Completeness5/5

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

Given the tool's complexity (7 parameters, output schema exists), the description covers all parameters and mentions the return type. It is complete for an export tool, addressing backup and analysis needs.

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

Parameters5/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 add meaning. It explains all 7 parameters, providing examples, defaults, roles, and constraints (e.g., subject_keyword required for single_email). This adds significant value beyond the schema.

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?

The description clearly states 'Export emails to files for backup or analysis,' using a specific verb (export) and resource (emails to files). It distinguishes this tool from sibling tools like compose or search by focusing on file export.

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?

The description provides parameter details that imply usage (e.g., single_email vs entire_mailbox), but does not explicitly state when to use this tool versus alternatives or when not to use it. There is no mention of sibling tools.

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

forward_emailA

Forward an email to one or more recipients.

Args: account: Account name (e.g., "Gmail", "Work") subject_keyword: Keyword to search for in email subjects to: Recipient email address(es), comma-separated for multiple message: Optional message to add before forwarded content mailbox: Mailbox to search in (default: "INBOX") cc: Optional CC recipients, comma-separated for multiple bcc: Optional BCC recipients, comma-separated for multiple from_address: Optional sender address to use when forwarding. Must be one of the account's configured email addresses. When omitted, Mail uses the account's default "Send new messages from" setting.

Returns: Confirmation message with details of forwarded email

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNo
toYes
bccNo
accountYes
mailboxNoINBOX
messageNo
from_addressNo
subject_keywordYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

The description adds behavioral context for the 'from_address' parameter (must be configured address, defaults to account setting) and mentions a return confirmation. However, it does not disclose sending behavior (immediate or draft), nor any side effects like being non-destructive.

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?

The description is front-loaded with a one-sentence purpose, followed by a structured Args list. It is adequately concise for 8 parameters, though the list is somewhat lengthy but necessary.

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?

Given the tool has 8 parameters with 3 required, an output schema, and no annotations, the description covers all parameters and the return format. It is fairly complete for the complexity level, though lacks behavioral warnings.

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

Parameters5/5

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

Despite schema coverage being 0%, the description provides detailed explanations for all 8 parameters, including types (comma-separated), defaults, and constraints for 'from_address'. This adds significant value beyond the bare schema.

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 clearly states 'Forward an email to one or more recipients,' which is a specific verb+resource combination. However, it does not differentiate from siblings like 'compose_email' or 'reply_to_email' which are similar send actions.

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 explicit guidance on when to use this tool versus alternatives (e.g., when to forward vs reply or compose). The description only lists parameters without contextual usage advice.

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

get_awaiting_replyA

Find sent emails that haven't received a reply yet.

Scans the Sent mailbox for outgoing emails and cross-references with the Inbox to see if a reply (matching subject) was received from the same recipient. Useful for follow-up tracking.

Args: account: Account name (e.g., "Gmail", "Work", "Personal") days_back: How many days back to check sent emails (default: 7) exclude_noreply: Skip emails sent to noreply/no-reply addresses (default: True) max_results: Maximum results to return (default: 20)

Returns: List of sent emails still awaiting a reply with subject, recipient, and date sent

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYes
days_backNo
max_resultsNo
exclude_noreplyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

Discloses scanning the Sent mailbox and cross-referencing subject and recipient, but lacks details on edge cases (e.g., replies with different subjects), performance, or error behavior. Annotations are absent, so description carries full burden but is only moderately thorough.

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?

The description is well-structured with a one-line summary, a paragraph explaining logic, and bullet-like Args/Returns sections. Every sentence is informative and concise.

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?

The description covers the main behavior, parameters, and return format, and is sufficient for understanding tool use. However, it omits potential error conditions (e.g., invalid account) and does not leverage the output schema visibility (if any).

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

Parameters4/5

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

All four parameters are explained in the Args section (account, days_back, exclude_noreply, max_results) with clear defaults and purpose, compensating for the 0% schema coverage. The descriptions add meaningful context beyond the schema titles.

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?

The description states 'Find sent emails that haven't received a reply yet' with specific verb and resource, and it distinguishes from tools like 'get_needs_response' by focusing on cross-referencing sent items with inbox replies.

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?

The description implies usage for follow-up tracking but does not explicitly compare to siblings like 'get_needs_response' or state when not to use. No exclusions or alternative suggestions are provided.

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

get_email_threadA

Get an email conversation thread - all messages with the same or similar subject.

Args: account: Account name (e.g., "Gmail", "Work") subject_keyword: Keyword to identify the thread (e.g., "Re: Project Update") mailbox: Mailbox to search in (default: "INBOX", use "All" for all mailboxes) max_messages: Maximum number of thread messages to return (default: 50)

Returns: Formatted thread view with all related messages sorted by date

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYes
mailboxNoINBOX
max_messagesNo
subject_keywordYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

No annotations provided, so description carries full burden; it discloses that thread identification uses subject similarity, returns sorted messages, and has a default max of 50, but does not mention permissions or potential side effects (though read-only).

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?

Well-structured with Args and Returns sections; each sentence is informative and there is no redundant information.

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?

Description covers purpose, inputs, and output format; with an output schema present and a clear description of the return, it is sufficiently complete, though missing error handling details.

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

Parameters5/5

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

Despite 0% schema description coverage, the description provides detailed explanations for all 4 parameters including examples, defaults, and usage context, adding significant value beyond the schema.

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?

Description clearly states it gets an email conversation thread by grouping messages with same or similar subject, which distinguishes it from siblings like search_emails or list_inbox_emails.

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?

Description explains when to use (to retrieve a thread) and what inputs are needed, but does not explicitly mention when not to use or suggest alternatives.

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

get_inbox_overviewA

Get a comprehensive overview of your email inbox status across all accounts.

Returns: Comprehensive overview including: - Unread email counts by account - List of available mailboxes/folders - AI suggestions for actions (move emails, respond to messages, highlight action items, etc.)

This tool is designed to give you a complete picture of your inbox and prompt the assistant to suggest relevant actions based on the current state.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It discloses output structure and AI suggestion capability, but lacks information on performance, rate limits, or auth requirements. Being a read-only tool, the disclosure is adequate but not exhaustive.

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?

The description is concise and front-loaded with purpose, followed by a bullet-like list of outputs. Every sentence adds value without redundancy.

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

Completeness5/5

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

Given no parameters and the presence of an output schema (context signal), the description fully covers what the tool does and returns, making it complete for an agent to decide when to use it.

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

Parameters4/5

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

The tool has zero parameters, so no parameter explanation is needed. The description compensates by detailing the return values, which adds value beyond the empty input schema.

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?

The description clearly states the tool provides a comprehensive overview of inbox status across all accounts, listing specific outputs like unread counts, mailboxes, and AI suggestions. This distinguishes it from siblings like get_mailbox_unread_counts or get_needs_response.

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 description implies using this tool for a high-level inbox overview with AI-driven action suggestions. It does not explicitly exclude alternatives or provide when-not-to-use guidance, leaving some ambiguity.

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

get_mailbox_unread_countsA

Get unread counts per mailbox for one account or all accounts.

When summary_only=True, returns only per-account inbox unread totals (replaces the former get_unread_count tool).

Args: account: Optional account name filter include_zero: Whether to include mailboxes with zero unread messages summary_only: If True, return only per-account inbox unread totals (flat dict of account name -> unread count)

Returns: If summary_only=False: nested dict keyed by account name then mailbox path If summary_only=True: flat dict mapping account names to inbox unread counts

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNo
include_zeroNo
summary_onlyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

The description explains the return structure and behavior of the summary_only flag, but without annotations, it fails to mention that this is a read-only operation, any idempotency, or potential rate limits.

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?

The description is brief and well-structured with Args/Returns sections. Every sentence adds value, and there is no redundancy.

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?

Given the moderate complexity (3 optional params, no required) and presence of output schema, the description covers the core behavior and return types. Missing details like error handling or account name format, but adequate for a simple read tool.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates well by explaining each parameter's purpose (account as filter, include_zero for zero-count inclusion, summary_only for aggregation). It adds context beyond the schema's type and default.

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?

The description clearly states the tool gets unread counts per mailbox, with optional account filtering and summary mode. It distinguishes itself by mentioning it replaces the former get_unread_count tool.

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?

It provides context for when to use summary_only mode but does not explain when to use this tool over siblings like get_inbox_overview or get_statistics. No explicit exclusions or alternatives are given.

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

get_needs_responseA

Identify unread emails that likely need a response from you.

Filters out newsletters, automated emails, and noreply senders. Prioritises direct emails (To: you) with question marks as likely needing a reply.

Args: account: Account name (e.g., "Gmail", "Work", "Personal") mailbox: Mailbox to scan (default: "INBOX") days_back: How many days back to look (default: 7) max_results: Maximum results to return (default: 20)

Returns: Ranked list of emails likely needing a response, with priority hints

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYes
mailboxNoINBOX
days_backNo
max_resultsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description provides substantial behavioral details: it filters out newsletters and automated emails, prioritizes direct emails with question marks, and returns a ranked list with priority hints. This adequately informs the agent about the tool's behavior, though it does not explicitly state read-only nature.

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?

The description is concise and well-structured: a brief purpose paragraph followed by a clear Args listing. No superfluous information, though the purpose statement could be slightly more front-loaded.

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?

Given the presence of an output schema (not shown but referenced), the description appropriately summarizes the return type. It covers the filtering logic and all parameters. Minor gap: no mention of whether emails are marked as read, but overall sufficient for a retrieval tool.

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

Parameters5/5

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

The input schema has 0% description coverage, but the description compensates fully with a clear 'Args' section explaining each parameter's purpose and defaults (e.g., account as the email account name, mailbox defaulting to 'INBOX'). This adds significant meaning beyond the schema structure.

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 clearly states the tool's purpose: identifying unread emails that likely need a response. It specifies filtering and prioritization criteria, making the action clear. However, it does not differentiate from sibling tools like 'get_awaiting_reply', which may have overlapping functionality.

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?

The description implies when to use (when you need to find actionable emails), but it lacks explicit guidance on when not to use this tool or which alternatives to consider. No mention of siblings or exclusions, leaving the agent to infer usage context.

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

get_statisticsA

Get comprehensive email statistics and analytics.

Args: account: Account name (e.g., "Gmail", "Work") scope: Analysis scope: "account_overview", "sender_stats", "mailbox_breakdown" sender: Specific sender for "sender_stats" scope mailbox: Specific mailbox for "mailbox_breakdown" scope days_back: Number of days to analyze (default: 30, 0 = all time)

Returns: Formatted statistics report with metrics and insights

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoaccount_overview
senderNo
accountYes
mailboxNo
days_backNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description must disclose behavioral traits. It explains parameters and return type, but lacks details on side effects (none expected), rate limits, or data freshness. The 'get' verb implies read-only, but it is not explicit.

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?

Well-structured with a clear intro, Args list, and Returns line. It is not overly verbose, though the Returns line may be redundant given the output schema. Could be slightly more concise.

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?

Coverage of parameters is good, but missing broader context like prerequisites (e.g., account must be set up), data latency, or potential performance impact. The output schema likely fills return structure details, but behavioral context is lacking.

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

Parameters5/5

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

The description provides detailed explanations for all 5 parameters in the Args section, including examples (e.g., account names, scope options). The input schema has no descriptions (0% coverage), so the description fully compensates.

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 states 'Get comprehensive email statistics and analytics,' which clearly indicates the verb and resource. However, it does not explicitly differentiate from sibling tools like get_inbox_overview or get_top_senders, which are more specific.

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 use this tool versus alternatives. The scope parameter hints at use cases, but there is no explicit when-to-use or when-not-to-use information.

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

get_top_sendersA

Analyse a mailbox to find the most frequent senders.

Useful for identifying key contacts, high-volume senders to filter, or newsletter sources to unsubscribe from.

Args: account: Account name (e.g., "Gmail", "Work", "Personal") mailbox: Mailbox to analyse (default: "INBOX") days_back: How many days back to look (default: 30, 0 = all time) top_n: Number of top senders to return (default: 10) group_by_domain: Group results by domain instead of individual sender (default: False)

Returns: Ranked list of senders (or domains) with email counts

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
accountYes
mailboxNoINBOX
days_backNo
group_by_domainNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It describes the tool's behavior (analysis, ranking, grouping) and parameter effects (defaults, grouping). No side effects are noted, but none are expected for a read-only analysis tool.

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?

The description is concise, well-structured with a purpose sentence, bulleted use cases, and a parameter list. Every part adds value without redundancy.

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

Completeness5/5

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

The description covers all necessary aspects: purpose, parameters, return value (ranked list with counts). It is complete for the tool's complexity, especially given the presence of an output schema.

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

Parameters5/5

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

With 0% schema description coverage, the description compensates by providing clear explanations for each parameter (account, mailbox, days_back, top_n, group_by_domain) with defaults and intended use, adding significant meaning beyond the schema.

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?

The description clearly states the tool's action: 'Analyse a mailbox to find the most frequent senders.' It provides specific use cases (identifying key contacts, high-volume senders, newsletter sources) and distinguishes itself from sibling tools by focusing on sender frequency analysis.

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 description includes explicit use cases ('Useful for...'), guiding when to use the tool. However, it lacks explicit when-not-to-use guidance or direct comparisons to alternative sibling tools, though the unique purpose is clear.

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

inbox_dashboardA

Get an interactive dashboard view of your email inbox.

Returns an interactive UI dashboard resource that displays:

  • Unread email counts by account (visual cards with badges)

  • Recent emails across all accounts (filterable list)

  • Quick action buttons for common operations (Mark Read, Archive, Delete)

  • Search functionality to filter emails

This tool returns a UIResource that can be rendered by compatible MCP clients (like Claude Desktop with MCP Apps support) to provide an interactive dashboard experience.

Note: Requires mcp-ui-server package and a compatible MCP client.

Returns: UIResource with uri "ui://apple-mail/inbox-dashboard" containing an interactive HTML dashboard, or error message if UI is unavailable.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so description carries the burden. Clearly states it returns a UIResource with an interactive HTML dashboard, and that it's read-only (no side effects mentioned). Also notes the dependency on mcp-ui-server. Could explicitly confirm non-destructive behavior, but is sufficient.

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?

Concise and well-structured: opening sentence, bulleted list of features, note about requirements, and a clear return description. Every sentence adds information, no redundancy.

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 tool with no parameters and no output schema, the description explains the interactive UI, its components, and the required client support. Could address error handling or what happens if UI is unavailable, but returns an error message as noted. Adequate for context.

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

Parameters4/5

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

No parameters exist; schema coverage is 100%. Description adds value by explaining what the tool does without needing to clarify parameters. Baseline 4 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?

Description clearly states it 'Get an interactive dashboard view of your email inbox' and enumerates specific UI components (unread counts, recent emails, quick actions). Distinguishes from data-retrieving siblings like list_inbox_emails by emphasizing the interactive UIResource nature.

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?

Describes the tool's purpose as providing an interactive UI dashboard, implying it should be used when a visual/actionable interface is desired over raw data. Notes that a compatible MCP client is required, giving a precondition. Does not explicitly contrast with alternatives, but context from siblings provides some differentiation.

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

list_account_addressesA

List all configured email addresses for each Mail account.

Useful for mapping a Mail.app account name (e.g. "Gmail", "Work") to the actual email address(es) it receives mail at — handy when an integration needs to know which inbox a message landed in by address rather than by Mail.app's display name.

Returns: Dict mapping account name -> list of email addresses configured on that account. Accounts with no addresses configured map to [].

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It clearly states the return format (dict mapping account name to list of addresses, with accounts having no addresses mapping to []). While it implies a read-only operation, it could explicitly note the lack of side effects or auth requirements.

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?

The description is concise at 3 paragraphs: purpose, use case, return format. No redundant information, and sentences are well-structured and front-loaded.

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?

Given the simplicity (no parameters, output schema exists, many siblings), the description covers the necessary aspects. It could be slightly more complete by specifying whether it lists all accounts or only configured ones, but it is sufficient for its intended use.

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

Parameters4/5

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

There are no parameters, so schema coverage is 100%. The description adds no parameter-specific information, but the baseline for 0 parameters is 4. It does provide context about the output, which indirectly helps understand the tool's usage.

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?

The description explicitly states the verb 'list' and the resource 'configured email addresses for each Mail account'. It distinguishes itself from sibling tools like list_accounts by specifying the mapping from account name to addresses, and provides a concrete use case.

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 description gives a specific scenario ('handy when an integration needs to know which inbox a message landed in by address rather than by Mail.app's display name'), which helps the agent decide when to use it. However, it does not explicitly state when not to use or mention alternatives.

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

list_accountsA

List all available Mail accounts.

Returns: List of account names

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

Description implies a non-destructive read operation, but does not explicitly state behavioral traits like read-only or absence of side effects; annotations are absent, so description carries burden but is minimally adequate.

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?

Extremely concise with two sentences, front-loading the purpose and return value with no wasted words.

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?

Description adequately covers purpose and return value for a simple list tool; could be slightly more explicit about scope (e.g., 'all accounts associated with the user'), but sufficient.

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

Parameters4/5

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

No parameters exist, so schema coverage is 100% trivially; baseline for 0 params is 4, and description adds no further parameter semantics, which is acceptable.

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?

Description clearly states 'List all available Mail accounts' with a specific verb and resource, and it distinguishes itself from sibling tools like list_account_addresses and list_mailboxes by focusing on accounts.

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 use or not use this tool compared to alternatives; no mention of prerequisites or context.

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

list_email_attachmentsA

List attachments for emails matching a subject keyword.

Args: account: Account name (e.g., "Gmail", "Work", "Personal") subject_keyword: Keyword to search for in email subjects max_results: Maximum number of matching emails to check (default: 1)

Returns: List of attachments with their names and sizes

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYes
max_resultsNo
subject_keywordYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

Without annotations, the description partially carries the burden. It states it lists attachments and checks up to 'max_results' emails, but does not disclose whether it modifies data, requires specific permissions, or searches all mailboxes versus inbox. The read-only nature is implied but not explicit.

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?

The description is concise and front-loaded with purpose. The 'Args:' section is structured but somewhat redundant with the schema; however, it provides examples. Every sentence contributes, though some verbosity exists.

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 three parameters, no annotations, and an output schema (not shown), the description covers the main functionality and return value. It could mention limitations like only checking first matching emails, but remains adequate for a relatively simple tool.

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

Parameters4/5

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

Schema description coverage is 0%, so the description adds essential meaning. It explains 'account' with examples, 'subject_keyword' as keyword search, and 'max_results' with default behavior. This adds value beyond the raw schema.

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?

The description clearly states 'List attachments for emails matching a subject keyword,' specifying the verb (list) and resource (attachments) with a clear condition. It distinguishes itself from sibling tools like 'save_email_attachment' which has a different purpose.

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?

The description implies usage for retrieving attachment details based on subject keyword, but lacks explicit guidance on when to use this tool versus alternatives like 'save_email_attachment' or 'search_emails'. No when-not-to-use or prerequisite information is provided.

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

list_inbox_emailsA

List all emails from inbox across all accounts or a specific account.

Replaces the former get_recent_emails tool — use account + max_emails to get recent emails from a single account.

Args: account: Optional account name to filter (e.g., "Gmail", "Work"). If None, shows all accounts. max_emails: Maximum number of emails to return per account (0 = all) include_read: Whether to include read emails (default: True) include_content: Whether to include a content preview for each email (slower, default: False) output_format: "text" (default, human-readable) or "json" (structured list of email dicts)

Returns: Formatted list of emails with subject, sender, date, and read status

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNo
max_emailsNo
include_readNo
output_formatNotext
include_contentNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

No annotations provided, but description discloses that include_content makes it slower, account=None shows all accounts, and returns formatted list. Good transparency for a read tool.

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?

Well-structured with Args and Returns sections. Could be slightly more concise by integrating the replacement note, but overall efficient and front-loaded with purpose.

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

Completeness5/5

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

Given output schema exists, description covers return format, all parameters, behavioral notes, and usage hints. Comprehensive for a list tool.

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

Parameters5/5

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

Schema coverage is 0%, but description fully explains each parameter: account filtering, max_emails=0 meaning all, include_read default, include_content being slower, output_format options. Adds significant value beyond schema.

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?

Clearly states 'List all emails from inbox across all accounts or a specific account.' Uses specific verb and resource, distinguishes from sibling by noting replacement of get_recent_emails and optional filters.

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?

Provides guidance on using account and max_emails for recent emails from single account. Doesn't explicitly compare to other list/search tools, but context is clear.

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

list_mailboxesA

List all mailboxes (folders) for a specific account or all accounts.

Args: account: Optional account name to filter (e.g., "Gmail", "Work"). If None, shows all accounts. include_counts: Whether to include message counts for each mailbox (default: True)

Returns: Formatted list of mailboxes with optional message counts. For nested mailboxes, shows both indented format and path format (e.g., "Projects/Amplify Impact")

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNo
include_countsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses behavior such as optional account filtering, default include_counts=True, and return format details including nested mailbox representation. However, it does not mention permissions or side effects, which is acceptable for a read operation.

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?

The description is brief yet complete, using a clear Args/Returns structure without any unnecessary words. Every sentence adds value.

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

Completeness5/5

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

All parameters are explained, the return format is described, and the tool's purpose is fully covered. No gaps remain despite lack of annotations.

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

Parameters5/5

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

With 0% schema coverage, the description fully explains both parameters: account as optional filter, include_counts as boolean with default True. This adds significant meaning beyond the schema's minimal titles.

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?

The description clearly states the tool lists mailboxes (folders) for a specific account or all accounts, distinguishing it from sibling tools like list_accounts or list_inbox_emails by explicitly naming the resource 'mailboxes'.

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 description explains when to use the tool (list mailboxes) and how the account parameter filters, but it does not explicitly state when not to use it or mention alternatives like get_mailbox_unread_counts for count-only needs.

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

manage_draftsA

Manage draft emails - list, create, send, open, or delete drafts.

Args: account: Account name (e.g., "Gmail", "Work") action: Action to perform: "list", "create", "send", "open", "delete". Use "open" to open a draft in a visible compose window for review before sending. subject: Email subject (required for create) to: Recipient email(s) for create (comma-separated) body: Email body (required for create) cc: Optional CC recipients for create bcc: Optional BCC recipients for create draft_subject: Subject keyword to find draft (required for send/open/delete) from_address: Optional sender address for new drafts (action="create"). Must be one of the account's configured email addresses. When omitted, Mail uses the account's default "Send new messages from" setting.

Returns: Formatted output based on action

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNo
toNo
bccNo
bodyNo
actionYes
accountYes
subjectNo
from_addressNo
draft_subjectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

No annotations provided, so description must compensate. It explains actions but omits side effects (e.g., 'send' will actually transmit email), auth requirements, rate limits, or error conditions. 'Returns: Formatted output based on action' is vague.

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?

Description is well-structured with bullet points for arguments. Front-loaded with purpose and action list. Each sentence adds value, though could trim the 'Args' list slightly without losing clarity.

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?

Tool is complex (9 params, 5 actions). Description covers parameter roles but lacks specifics: e.g., 'list' output format, 'open' behavior, or error handling. Output schema exists but description doesn't reference it. Some gaps remain.

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

Parameters4/5

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

Schema description coverage is 0%, forcing description to explain all 9 parameters. It adds meaning beyond schema: required fields for actions (subject, to, body for create), comma-separated recipients, and details on from_address including default behavior.

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?

Description clearly states it manages draft emails and enumerates specific actions (list, create, send, open, delete). The verb 'manage' combined with resource 'drafts' and explicit action list leaves no ambiguity about scope.

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?

No explicit guidance on when to use this tool versus siblings like compose_email or create_rich_email_draft. The description implies usage for draft operations but doesn't offer alternative recommendations or exclusions.

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

manage_trashA

Manage trash operations - delete emails or empty trash.

When dry_run=True (default) and action is "move_to_trash", previews what would be deleted without acting. Set dry_run=False to actually move to trash.

Args: account: Account name (e.g., "Gmail", "Work") action: Action to perform: "move_to_trash", "delete_permanent", "empty_trash" subject_keyword: Optional keyword to filter emails (not used for empty_trash) subject_keywords: Optional list of subject keywords; matches any keyword sender: Optional sender to filter emails (not used for empty_trash) mailbox: Source mailbox (default: "INBOX", not used for empty_trash or delete_permanent) max_deletes: Maximum number of emails to delete (safety limit, default: 5) confirm_empty: Must be True to execute "empty_trash" action (safety confirmation) apply_to_all: Must be True to allow operations without subject_keyword or sender filter older_than_days: Optional age filter - only affect emails older than N days dry_run: If True (default), preview what would be affected without acting

Returns: Confirmation message with details of deleted emails

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
senderNo
accountYes
dry_runNo
mailboxNoINBOX
max_deletesNo
apply_to_allNo
confirm_emptyNo
older_than_daysNo
subject_keywordNo
subject_keywordsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Since no annotations are provided, the description fully shoulders behavioral disclosure. It details dry run previews, safety limits, required confirmations, and filters. However, it does not mention reversibility of actions (e.g., whether permanent deletion is irreversible).

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?

The description is logically structured with a brief overview followed by a parameter list. While it is somewhat lengthy due to 11 parameters, it avoids redundancy and each sentence adds value. Could be slightly more concise, but the length is warranted.

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

Completeness5/5

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

Given the tool complexity (11 parameters, no annotations, output schema present), the description fully covers usage, safety, and edge cases. It explains actions, filters, and safety flags. The return value is mentioned as a confirmation message, which is sufficient when an output schema exists.

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

Parameters5/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 explain all 11 parameters. It does so thoroughly: each parameter is described with default values, usage notes (e.g., subject_keywords matches any, not used for empty_trash), and safety constraints (e.g., max_deletes default 5). This adds significant meaning beyond the schema.

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?

The description clearly states it manages trash operations (delete emails or empty trash), which is distinct from all sibling tools. No other tool handles trash management, making the purpose unambiguous.

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 description explains when to use dry_run vs actual deletion, safety confirmations like confirm_empty, and filtering parameters. It lacks explicit 'when not to use' but the context is clear given the action-focused behavior.

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

move_emailA

Move email(s) matching filters from one mailbox to another.

Supports subject, sender, and date filters. Use dry_run=True to preview matches without moving. Set only_read=True to skip unread emails (useful for archiving). For archiving to "Archive", just set to_mailbox="Archive". Pass message_ids to move specific messages by exact id (ignores other filters; same fast path as update_email_status).

Args: account: Account name (e.g., "Gmail", "Work") to_mailbox: Destination mailbox name. For nested mailboxes, use "/" separator (e.g., "Projects/Amplify Impact") subject_keyword: Optional keyword to search for in email subjects from_mailbox: Source mailbox name (default: "INBOX") max_moves: Maximum number of emails to move (default: 50, safety limit) subject_keywords: Optional list of keywords to match in subjects; matches any keyword sender: Optional sender to filter emails by older_than_days: Optional age filter - only move emails older than N days dry_run: If True, preview what would be moved without acting (default: False) only_read: If True, only move emails that have been read (default: False) message_ids: Optional list of exact Mail message ids for precise targeting. When set, all other filters are ignored.

Returns: Confirmation message with details of moved emails

ParametersJSON Schema
NameRequiredDescriptionDefault
senderNo
accountYes
dry_runNo
max_movesNo
only_readNo
to_mailboxYes
message_idsNo
from_mailboxNoINBOX
older_than_daysNo
subject_keywordNo
subject_keywordsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

Discloses key behaviors like dry_run preview, only_read skipping unread, and message_ids overriding filters. Mentions a safety limit (max_moves=50). However, with no annotations, it lacks details on irreversibility, permissions, or error states that a mutation tool should declare.

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?

Front-loaded with a one-line purpose, followed by useful usage tips and a well-organized parameter list. Slightly long but every part adds value, with no wasted sentences.

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?

Given 11 parameters and no annotations, the description covers most aspects: filtering, preview, archiving, exact IDs. Mentions return value briefly. Lacks clarification on overlap between subject_keyword and subject_keywords, but otherwise complete.

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

Parameters5/5

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

Schema coverage is 0%, so description fully documents all 11 parameters. The Args section adds clear purpose, defaults, and usage examples (e.g., nested mailboxes with '/'), going well beyond schema names and types.

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?

The description clearly states 'Move email(s) matching filters from one mailbox to another', using specific verbs and resources. It distinguishes from siblings by mentioning a special path similar to update_email_status and providing archiving guidance.

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?

Provides usage tips (dry_run, only_read, archiving) and explains message_ids for precise targeting. However, it does not explicitly state when to use this tool versus siblings like search_emails or export_emails, nor does it list exclusions or prerequisites.

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

reply_to_emailA

Reply to an email matching a subject keyword.

Args: account: Account name (e.g., "Gmail", "Work") subject_keyword: Keyword to search for in email subjects reply_body: The body text of the reply reply_to_all: If True, reply to all recipients; if False, reply only to sender (default: False) cc: Optional CC recipients, comma-separated for multiple bcc: Optional BCC recipients, comma-separated for multiple send: If True (default), send immediately; if False, save as draft. Ignored if mode is set. mode: Delivery mode — "send" (send immediately), "draft" (save silently), or "open" (open compose window for review). Overrides send parameter when set. attachments: Optional file paths to attach, comma-separated for multiple (e.g., "/path/to/file1.png,/path/to/file2.pdf") body_html: Optional HTML body for rich formatting (bold, headings, links, colors). When provided, the reply is pasted as HTML. The plain 'reply_body' field is still required as fallback text. from_address: Optional sender address to use for this reply. Must be one of the account's configured email addresses. When omitted, Mail uses the account's default "Send new messages from" setting.

Returns: Confirmation message with details of the reply sent, saved draft, or opened draft

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNo
bccNo
modeNo
sendNo
accountYes
body_htmlNo
reply_bodyYes
attachmentsNo
from_addressNo
reply_to_allNo
subject_keywordYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Despite no annotations, the description details key behaviors: mode overrides send parameter, reply_to_all toggles recipients, body_html allows rich formatting requiring fallback text, and from_address specifies sender selection. It also notes the return of a confirmation message. This sufficiently covers behavioral traits.

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?

The description is structured as a clear bulleted list with parameter descriptions, making it easy to scan. While it is lengthy due to many parameters, each sentence serves a purpose. A slight reduction in verbosity could improve conciseness.

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?

The description covers all parameters and return value (confirmation message), given the presence of an output schema. It lacks explicit mention of error conditions or prerequisites (e.g., account validity), but for a straightforward reply tool, it is sufficiently complete.

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

Parameters5/5

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

Schema description coverage is 0%, but the description provides thorough explanations for all 11 parameters in the Args section, adding meaning to names like 'cc', 'bcc', 'attachments', and clarifying default values and interactions (e.g., mode overrides send). This fully compensates for the schema gaps.

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?

The description clearly states 'Reply to an email matching a subject keyword,' which specifies the action (reply), resource (email), and selection method (subject keyword). This distinguishes it from siblings like 'compose_email' (create new) and 'forward_email' (forward).

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?

The description implicitly indicates when to use this tool (to reply to an identified email), but it doesn't explicitly state when not to use it or suggest alternatives like 'compose_email' for new messages. Given many siblings, clearer guidance would improve this.

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

save_email_attachmentA

Save a specific attachment from an email to disk.

Args: account: Account name (e.g., "Gmail", "Work", "Personal") subject_keyword: Keyword to search for in email subjects attachment_name: Name of the attachment to save save_path: Full path where to save the attachment

Returns: Confirmation message with save location

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYes
save_pathYes
attachment_nameYes
subject_keywordYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose behavioral traits such as error handling (e.g., if attachment is not found), permission requirements, whether files are overwritten, or the search mechanism for subject_keyword. This is insufficient for a mutation action.

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?

The description is brief and well-structured: a concise purpose sentence followed by a labeled bullet list of arguments and a return statement. Every sentence is useful, with no filler.

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?

The description covers purpose, parameters, and return value, which is adequate for a tool with 4 required string parameters and an output schema. However, it lacks details on error behavior, search matching logic, and prerequisites (e.g., account must be synchronized), leaving gaps for the agent.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates by providing a clear one-line explanation for each parameter (e.g., 'Account name (e.g., "Gmail", "Work", "Personal")'). This adds meaning beyond the schema's type and title.

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?

The description clearly states 'Save a specific attachment from an email to disk,' specifying the verb (save), resource (attachment from email), and destination (to disk). It distinguishes from sibling tools like list_email_attachments, which only list attachments.

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 is provided on when to use this tool versus alternatives such as list_email_attachments or other email manipulation tools. The description only lists parameters without context for tool selection.

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

search_emailsA

Unified search tool with JSON output, pagination, and real date filtering.

Consolidates subject search, sender search, body content search, and cross-account search into a single tool.

Args: account: Account name to search in (e.g., "Gmail", "Work"). If None, searches ALL accounts (slower). mailbox: Mailbox to search (default: "INBOX", use "All" for all mailboxes, or specific folder name) subject_keyword: Optional keyword to search in subject subject_keywords: Optional list of subject keywords; matches any keyword sender: Optional sender email or name to filter by has_attachments: Optional filter for emails with attachments (True/False/None) flagged: Optional filter for flagged emails (True/False/None) flag_color: Optional filter for a specific flag color: "red", "orange", "yellow", "green", "blue", "purple", or "gray". Implies flagged=True. read_status: Filter by read status: "all", "read", "unread" (default: "all") date_from: Optional start date filter (format: "YYYY-MM-DD") date_to: Optional end date filter (format: "YYYY-MM-DD") include_content: Whether to include email content preview (slower) max_content_length: Maximum content length in characters when include_content=True (default: 500, 0 = unlimited) body_text: Optional text to search for in email body content (case-insensitive). WARNING: body search is significantly slower as it reads each message body. max_results: Backward-compatible alias for limit output_format: Output format: "text" or "json" (default: "text") offset: Number of matching results to skip before returning data limit: Maximum number of results to return per page sort: Result sort order: "date_desc" or "date_asc"

Returns: Formatted list of matching emails or JSON payload with stable message metadata

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNodate_desc
limitNo
offsetNo
senderNo
accountNo
date_toNo
flaggedNo
mailboxNoINBOX
body_textNo
date_fromNo
flag_colorNo
max_resultsNo
read_statusNoall
output_formatNotext
has_attachmentsNo
include_contentNo
subject_keywordNo
subject_keywordsNo
max_content_lengthNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Since no annotations are provided, the description carries the full burden. It discloses performance traits (body_text slower, account=None slower), pagination via offset/limit, and output format options. It does not mention authentication, rate limits, or read-only nature, but as a search tool those are less critical. The warnings are valuable.

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?

The description is well-structured with a summary line followed by a detailed parameter list. It is verbose due to the many parameters, but each line is necessary. The front-loaded summary quickly communicates the tool's purpose. Could be slightly more concise, but overall effective.

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

Completeness5/5

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

Given the tool's complexity (19 parameters, many optional filters) and the existence of an output schema, the description covers everything needed: what the tool does, how to use parameters, performance implications, and return types. It is comprehensive and leaves little ambiguity for an AI agent.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates. Every parameter is documented with purpose, default, and sometimes special values (e.g., mailbox: 'INBOX', 'All'; flag_color lists colors). This exceeds the baseline and provides rich context beyond the schema's property titles.

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?

The description clearly identifies the tool as a unified email search tool, consolidating subject, sender, body, and cross-account searches. It distinguishes itself from siblings like list_inbox_emails by emphasizing filtering capabilities and advanced search features.

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?

The description provides some usage guidance (e.g., warning that body_text is slower, account=None searches all accounts), but it does not explicitly tell when to use this tool versus alternatives like list_inbox_emails or get_email_thread. The context is implied but not direct.

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

synchronize_accountA

Force Mail.app to synchronize an account (or every account) with its IMAP / Exchange server right now. Equivalent to clicking the refresh button next to the account or selecting Mailbox → Synchronize.

Use after move_email, update_email_status, or manage_trash when downstream clients (iPhone, web mail, etc.) need to see the change immediately. Mail.app's natural sync cadence is "automatic" which can be several minutes — this collapses that to one IMAP push.

Implementation note:

Uses the synchronize with <account> AppleScript verb (per Mail.sdef: "Command to trigger synchronizing of an IMAP account with the server") rather than check for new mail. The latter is receive-only — it pulls new messages but does NOT push pending IMAP commands like queued moves / archives / flag changes. With check for new mail, archives done via move_email could sit in Mail.app's local cache for several minutes before reaching the IMAP server, leaving iPhone Mail (which reads IMAP directly) showing already-archived messages still in INBOX. synchronize with is the bidirectional verb that drains pending IMAP commands AND fetches new mail.

Mail.app's synchronize is potentially long-running. We wrap each invocation in with timeout of N seconds so the AppleScript returns promptly. When the timeout fires (error -1712) Mail.app keeps the sync running in the background — exactly the fire-and-forget semantics callers expect.

Args: account: Account name (e.g., "Gmail", "Work"). Omit to sync every configured account.

Returns: Confirmation string with the account(s) synced or queued.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description discloses that sync is potentially long-running, uses a timeout for fire-and-forget semantics, and explains the implementation detail about synchronize vs check for new mail. It does not mention network activity or UI impact, but overall is transparent.

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?

The description is well-structured with distinct sections but slightly verbose; still every sentence serves a purpose and it front-loads the core purpose.

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?

Given one parameter, no annotations, and the presence of an output schema (stated but not shown), the description adequately covers return value and usage context within the sibling tools suite.

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

Parameters4/5

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

The only parameter 'account' is explained: account name (e.g., 'Gmail', 'Work') and that omitting it syncs every account, which adds meaning beyond the schema's anyOf/null/default.

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?

The description clearly states the tool forces Mail.app to synchronize an account with the server immediately, distinguishing it from related operations like move_email and check for new mail by explaining the AppleScript verb difference and use cases.

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

Usage Guidelines5/5

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

Explicitly advises to use after move_email, update_email_status, or manage_trash for immediate push to downstream clients, and contrasts with the passive check for new mail, providing clear when-to-use guidance.

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

update_email_statusA

Update email status - mark as read/unread or flag/unflag emails.

When message_ids is provided, uses exact ID matching (ignores other filters). Otherwise filters by subject, sender, and/or age.

Args: account: Account name (e.g., "Gmail", "Work") action: Action to perform: "mark_read", "mark_unread", "flag", "unflag" subject_keyword: Optional keyword to filter emails by subject subject_keywords: Optional list of subject keywords; matches any keyword sender: Optional sender to filter emails by mailbox: Mailbox to search in (default: "INBOX") max_updates: Maximum number of emails to update (safety limit, default: 10) apply_to_all: Must be True to allow updates without any filter message_ids: Optional list of exact Mail message ids for precise targeting older_than_days: Optional age filter - only update emails older than N days flag_color: Optional flag color for the "flag" action: "red", "orange", "yellow", "green", "blue", "purple", or "gray". Omit to flag without setting a color — Mail shows its default (red), or the message's previous color if one remains from an earlier flag. Re-colors messages that are already flagged.

Returns: Confirmation message with details of updated emails

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
senderNo
accountYes
mailboxNoINBOX
flag_colorNo
max_updatesNo
message_idsNo
apply_to_allNo
older_than_daysNo
subject_keywordNo
subject_keywordsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description fully carries the burden. It explains critical behaviors: exact ID matching vs. filtering, apply_to_all requirement, flag_color re-coloring, and the max_updates safety limit. This provides a complete picture of the tool's actions.

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?

The description is well-structured with a summary line, behavioral notes, Args list, and returns section. It is not overly verbose for 11 parameters, but could be slightly more concise without losing clarity.

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

Completeness5/5

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

Given the complexity (11 params, no annotations, output schema exists), the description covers all necessary aspects: parameter semantics, interactions, safety limits, and return values. It is complete and ready for an AI agent to use.

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

Parameters5/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 compensate. It does so thoroughly with a detailed Args list explaining each parameter, including action options, flag_color values and behavior, and the interaction between parameters. This adds substantial meaning beyond the schema.

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?

The description clearly states the tool's function: 'Update email status - mark as read/unread or flag/unflag emails.' This is a specific verb+resource combination that distinguishes it from sibling tools like move_email or reply_to_email.

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?

The description does not explicitly state when to use this tool versus alternatives. It provides interaction guidelines (e.g., message_ids overrides other filters) but lacks direct comparison with sibling tools like search_emails or move_email.

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

TDQS

A4.1/5.0
Disambiguation4/5

Tools are largely distinct, but there is some overlap between overview tools (get_inbox_overview, get_mailbox_unread_counts, inbox_dashboard) and between draft creation methods (compose_email, create_rich_email_draft, manage_drafts). Descriptions help disambiguate.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with underscores (e.g., create_mailbox, forward_email, search_emails). No mixed conventions or camelCase.

Tool Count4/5

26 tools is high for email management, but each tool serves a distinct purpose and the count reflects comprehensive coverage. Slightly above the ideal range but justified.

Completeness5/5

The tool surface covers the full email lifecycle: create, read, update, delete, search, export, manage drafts, trash, and synchronization. No obvious gaps for a mail client server.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    Enables AI assistants to read, search, compose, and send emails by connecting to any IMAP/SMTP provider. It supports comprehensive mailbox management, including draft handling and message deletion, directly through natural language.
    10
    407
    10
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Connects AI assistants to email accounts via IMAP/SMTP, enabling reading, searching, sending, and organizing emails with features like smart drafts, scheduling, and attachment handling.
    271
    2
    MIT

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/patrickfreyer/apple-mail-mcp'

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