pypi apple-mail-mcpstdioGPL-3.0updated 16d ago
The only Apple Mail MCP server with full-coverage body search — reliable on large mailboxes where AppleScript-based servers timeout. 8 tools for reading, searching, and extracting email content.
What can you do with Apple Mail MCP?
Apple Mail MCP
The only Apple Mail MCP server with full-coverage body search — reliable on large mailboxes where AppleScript-based servers timeout. 8 tools for reading, searching, and extracting email content.
Read the docs for the full guide.
Quick Start
pipx install apple-mail-mcp
Add to your MCP client:
{
"mcpServers": {
"mail": {
"command": "apple-mail-mcp"
}
}
}
Build the Search Index (Recommended)
# Requires Full Disk Access for Terminal
# System Settings → Privacy & Security → Full Disk Access → Add Terminal
apple-mail-mcp index --verbose
Configure (Optional)
apple-mail-mcp init # writes ~/.apple-mail-mcp/config.toml
Writes a commented config file you can edit to set defaults like your
primary account or mailbox. Every key has a matching APPLE_MAIL_* env
var if you prefer environment-based config. See
Configuration
for the full schema and precedence rules.
Tools
| Tool | Purpose |
|---|---|
list_accounts() |
List email accounts |
list_mailboxes(account?) |
List mailboxes |
get_emails(filter?, limit?) |
Get emails — all, unread, flagged, today, last_7_days |
get_email(message_id) |
Get single email with full content + attachments |
search(query, scope?, before?, after?, highlight?) |
Search — all, subject, sender, body, attachments |
get_email_links(message_id) |
Extract links from an email |
get_email_attachment(message_id, filename) |
Extract attachment content |
get_attachment(message_id, filename) |
Deprecated — use get_email_attachment() |
Performance
Tested against 6 other Apple Mail MCP servers on a real ~73K-message mailbox:
- Only server with full-coverage body search. Most competitors don't support body search at all; the one that does (BastianZim) live-scans only the 5000 most recent messages — silent miss on anything older. Our FTS5 index covers the entire mailbox.
- ~3ms single email fetch via disk-first
.emlxreading (no JXA round-trip). - ~1ms
list_accountsand ~5ms 50-email listing via direct Envelope-Index SQLite reads (0.4+) — same path BastianZim/rusty/pl-lyfx use, with JXA as the correctness fallback. - ~7ms subject search via FTS5 — competitive with native Rust on the same operation.
- Reliable across all 6 benchmarked operations on a 73K mailbox; AppleScript-based servers timeout, throw syntax errors, or skip operations they don't support.

Configuration
Apple Mail MCP works out of the box. To customize defaults, run
apple-mail-mcp init to generate a config.toml template — or use
the matching APPLE_MAIL_* environment variables. See the
Configuration docs
for the full schema and the CLI > env > file > default precedence.
Per-client env overrides via the MCP client's launch config also work:
{
"mcpServers": {
"mail": {
"command": "apple-mail-mcp",
"args": ["--watch"],
"env": {
"APPLE_MAIL_DEFAULT_ACCOUNT": "Work"
}
}
}
}
CLI Usage
All tools are also available as standalone CLI commands (no MCP server needed):
apple-mail-mcp search "quarterly report" --scope subject
apple-mail-mcp search "invoice" --after 2026-01-01 --limit 10
apple-mail-mcp read 12345
apple-mail-mcp emails --filter unread --limit 10
apple-mail-mcp accounts
apple-mail-mcp mailboxes --account Work
apple-mail-mcp extract 12345 invoice.pdf
All commands output JSON. Generate a Claude Code skill for CLI-based access:
apple-mail-mcp integrate claude > ~/.claude/skills/apple-mail.md
Development
git clone https://github.com/imdinu/apple-mail-mcp
cd apple-mail-mcp
uv sync
uv run ruff check src/
uv run pytest
License
GPL-3.0-or-later
Install
Add Apple Mail MCP to your client. Pick the one you use.
claude mcp add apple-mail-mcp -- uvx apple-mail-mcpcodex mcp add apple-mail-mcp -- uvx apple-mail-mcpamp mcp add apple-mail-mcp -- uvx apple-mail-mcp{
"mcpServers": {
"apple-mail-mcp": {
"command": "uvx",
"args": [
"apple-mail-mcp"
]
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"apple-mail-mcp": {
"command": "uvx",
"args": [
"apple-mail-mcp"
]
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
code --add-mcp '{"name":"apple-mail-mcp","command":"uvx","args":["apple-mail-mcp"]}'Or add the block manually to `.vscode/mcp.json` under `servers`.
{
"mcpServers": {
"apple-mail-mcp": {
"command": "uvx",
"args": [
"apple-mail-mcp"
]
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
{
"mcpServers": {
"apple-mail-mcp": {
"command": "uvx",
"args": [
"apple-mail-mcp"
]
}
}
}Add to `cline_mcp_settings.json` via the MCP Servers panel.
{
"mcpServers": {
"apple-mail-mcp": {
"command": "uvx",
"args": [
"apple-mail-mcp"
]
}
}
}Add to `~/.gemini/settings.json`.
{
"mcpServers": {
"apple-mail-mcp": {
"type": "local",
"command": "uvx",
"args": [
"apple-mail-mcp"
],
"tools": [
"*"
]
}
}
}Add to `~/.copilot/mcp-config.json`, or run `/mcp add` inside the CLI.
{
"context_servers": {
"apple-mail-mcp": {
"command": {
"path": "uvx",
"args": [
"apple-mail-mcp"
]
}
}
}
}Add to your Zed `settings.json`.
uvx apple-mail-mcpRun `goose configure`, choose **Add Extension → Command-line Extension**, and paste this command.
Score
39 / 100
Incomplete
- Documentation25/25
- Maintenance25/25
- Trust13/20
- Capability0/15
- Install experience12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 8 days ago
- Has a release history
- Repository is not archived
- Licensed GPL-3.0
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 0 tool(s) documented
- Provides prompt templates
- Provides resources
- 12 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint — no local install
Version history
| Versions | Published |
|---|---|
| 0.4.3Latest | Jul 30, 2026 |
| 0.4.2 | Jul 2, 2026 |
| 0.4.1 | Jun 12, 2026 |
| 0.1.2 | Feb 19, 2026 |