Apple Mail, Calendar & Notes について
macOS 向けのローカル MCP サーバーで、Mac にある Mail、Calendar、Notes を MCP クライアントから操作できます。標準搭載の JavaScript for Automation を使い、依存関係やネットワーク通信がなく、読み取り専用モードも設定できます。
主な機能
- 01メールの仕分け、検索、スレッド表示
- 02メールの送信、返信、整理
- 03カレンダーイベントの作成と管理
- 04メモの閲覧、検索、編集
- 05読み取り専用モード、プレビュー、重複操作の防止
活用シーン
- 01返信が必要なメールや未返信の送信メールを確認
- 02メールを検索して添付ファイルを保存
- 03Calendar の予定を登録または削除
- 04Notes を検索してメモを作成または更新
MCP 対応
MCP サーバーとして、Mail、Calendar、Notes の読み取り・書き込みツールを stdio 経由で MCP クライアントに提供します。初回アクセス時に macOS の許可が必要で、読み取り専用にも設定できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Apple Mail、Calendar、Notes MCP
Mac にすでにインストールされている Mail、Calendar、Notes アプリを使って、AI アシスタントがメールの閲覧、検索、仕分け、送信、カレンダーの管理、メモの保存を行えるようにします。
あらゆる MCP クライアントで動作します。
最新リリースをダウンロード · インストール · できること · よくある質問
これが作られた理由
多くの AI メール連携ツールはクラウド上で動作し、Gmail または Outlook でしか使えません。メールが Apple Mail(セルフホストの IMAP サーバー、iCloud、会社のアカウントなど)にある場合、アシスタントにアクセスさせる簡単な方法がありませんでした。
この MCP サーバーは、Mac 上のアプリと直接通信します。つまり、次のことができます。
- あらゆる MCP クライアントに対応。 デスクトップチャットアプリ、ローカルモデルアプリ、コーディングエージェントなど、stdio 経由で MCP サーバーを起動できるものなら何でも使えます。
- Apple Mail で開けるアカウントなら何でも使えます。 セルフホスト、iCloud、Exchange、IMAP 経由の Gmail など、Mail.app に表示されるアカウントなら、アシスタントから確認できます。
- インストール不要。 Node、Python、Homebrew は必要ありません。すべての Mac に付属する JavaScript for Automation 上で動作します。
- メールは Mac 上に保管されます。 サーバーにネットワーク関連のコードはありません。アシスタントには要求した内容だけが表示されます。その後の送信先はモデルによって異なります(ローカルモデルならすべて Mac 上に保管されます)。
- 権限確認は 30 回ではなく 2 回です。 すべての操作は
readツールとwriteツールにまとめられています。readを一度承認すれば、あとは気にする必要はありません。 - 小型のローカルモデルでも動作します。 引数の指定には柔軟に対応し(
"true"、"3 days ago"、mailboxの代わりにfolder)、間違いがあれば行き詰まるのではなく、修正方法を平易な言葉で示します。
できること
自然な言葉で、「返信が必要なメールはある?」「プリンターの請求書を経理に転送して」「火曜日の午後 1 時に Sam との通話を予定して」「契約メールの PDF を保存して」のように頼めます。内部では、次の操作を行います。
📥 仕分け — 「対応が必要なものは?」
| 返信が必要 | まだ返信していない、実際の人物からのメールです。自動返信不可の送信者や通知は無視します。 |
| 返信待ち | 送信したメールのうち、宛先の誰からも返信がないものです。フォローアップに便利です。 |
| 会話表示 | すべてのフォルダー(送信済みを含む)から、相手のメッセージと自分の返信を順番に表示したスレッド全体です。件名と相手の両方が一致した場合にのみ、メッセージは同じ会話として扱われます。 |
| 返信済み/転送済み/フラグ付き | リスト内の各メッセージに、すでに返信したかどうかが表示されるため、アシスタントが同じメールについて何度も催促することはありません。 |
🔎 閲覧と検索
| 受信トレイとフォルダー | すべてのアカウントについて、任意のフォルダー内の最新メッセージと未読件数を確認できます。 |
| 検索 | 件名、送信者、メッセージ本文、日付範囲、未読、フラグ付き、添付ファイルの有無で検索できます。特定のフォルダー内または全体を検索できます。 |
| メッセージを読む | ヘッダー、宛先、プレーンテキストの本文(長い場合はページ単位)、添付ファイルの一覧を確認できます。 |
| 添付ファイル | 名前、サイズ、種類を確認し、添付ファイル用フォルダーに保存できます。 |
✉️ 作成
| 送信 | 任意のメールアドレスから、To/Cc/Bcc を指定し、ファイルを添付して新しいメールを送信できます。 |
| 返信/全員に返信 | 元のメールを引用して下に表示します。下書きとして開き、確認してから送信できます。 |
| 転送 | 添付ファイルと任意のメモを付けて転送できます。これも下書きとして開きます。 |
| 下書きモード | 返信と転送は、宛先と引用文を Mail 自体が設定するため、デフォルトで Mail 内に開きます。新しいメールも下書きとして開けます。 |
🗂 整理
| フォルダー | 入れ子になったフォルダー(Alerts/Kubernetes など)を含めて作成します。 |
| 移動と削除 | メッセージをフォルダー間、またはアカウントのゴミ箱に移動します。変更内容を事前に確認できるドライランも利用できます。 |
| フラグと既読状態 | 色を選んでフラグを付けたり、1件または一括で既読・未読にしたりできます。 |
| ルール | メールのルールを作成、一覧表示、有効化、無効化、削除して、新着メールを自動で振り分けられます。 |
📅 カレンダー
| イベント | 繰り返しイベントを含め、すべてのカレンダーの任意の日付範囲の予定を確認できます。イベントの作成と削除もできます。日付だけを指定すると終日イベントになります。 |
📝 メモ
| 閲覧と検索 | フォルダー、最近のメモ、タイトルまたは本文での検索に対応しています。最近削除した項目は、指定しない限り表示されません。 |
| 書き込み | メモを作成し、追記または書き換えできます。削除すると「最近削除した項目」に移動します。 |
インストール
macOS 14 以降(それ以前のバージョンでも動作する可能性がありますが、テストはしていません)と MCP クライアントが必要です。
すべての MCP クライアント
コードを取得し、git clone https://github.com/ipsupport-llc/apple-mail-mcp を実行するか、最新リリースから .mcpb を解凍して、クライアントの設定にサーバーを追加します。Mac 自体の osascript 上で実行されます。
{
"mcpServers": {
"apple-mail": {
"command": "/usr/bin/osascript",
"args": ["-l", "JavaScript", "/path/to/apple-mail-mcp/server/apple-mail-mcp.js"]
}
}
}
./install.sh --print を実行すると、適切なパスを含むこのブロックが出力されます。このサーバーは、MCP Registry(https://registry.modelcontextprotocol.io)にも io.github.ipsupport-llc/apple-mail-mcp として登録されています。
アシスタントが初めて Mail、Calendar、または Notes を操作するとき、macOS からクライアントによる操作を許可するかどうか確認されます。許可をクリックしてください。
Claude Desktop(ワンクリック)
- 最新リリースから
apple-mail-mcp.mcpbをダウンロードします。 - ダブルクリックして、インストールをクリックします。
アップデート、設定、削除は 設定 → 機能拡張 から行えます。
設定
サーバーの env に環境変数として設定します(Claude Desktop の場合:設定 → 機能拡張 → Apple Mail, Calendar & Notes → 設定)。
| 変数 | 説明 |
|---|---|
APPLE_MAIL_READ_ONLY=true | write ツールを完全に無効にします。アシスタントは読み取りと検索はできますが、送信、移動、削除、作成はできません。共有マシンや業務用マシンでの既定値として適しています。 |
APPLE_MAIL_DEFAULT_ACCOUNT | アシスタントがアカウント名を指定しない場合に使用されます(例:Work)。 |
APPLE_MAIL_SAVE_DIR | 添付ファイルの保存先です。既定値は ~/Downloads です。~ と ${HOME} は展開されます。 |
APPLE_MAIL_TIMEOUT | 呼び出しが停止されるまでの時間(秒)です(既定値は 25)。 |
ツールの権限
ほとんどのクライアントでは、ツールの使用前に確認を求められます。read は一度許可し、write は毎回承認することをおすすめします。これにより、何が送信、移動、削除されるかを常に確認できます。
安全性
- メールやメモが完全に削除されることはありません。 メールはアカウントのゴミ箱へ、メモは「最近削除した項目」へ移動します。それができない場合(ゴミ箱のないアカウント、「最近削除した項目」のないメモアカウント(Exchange など)、すでにゴミ箱にある項目、ロックされたメモ)は、拡張機能が操作を拒否し、その理由を伝えます。メールを削除するルールは、すべてのアカウントで削除したメールがゴミ箱に残る場合に限り許可されます。
- macOS ではカレンダーのイベントやルールにゴミ箱がありません。 削除すると完全なコピーが返されるため、要求に応じて再作成できます。
- 返信と転送は、デフォルトでは下書きになります。 Mail で実物を確認してから、ご自身で 送信 を押します。
dry_run: trueを指定すると、送信される内容(宛先(Reply-To と全員に返信を含む)、件名、全文)が正確に表示されます。また、Mail の宛先設定が異なる場合、返信は送信されません。送信結果には、Mail が実際に送信した内容が記載されます。 - 処理がハングすることはありません。 Mail、Calendar、Notes は独立したワーカープロセスから操作します。タイムアウトを超えた呼び出しは明確なエラーとともに停止し、
pingとtools/listは常に応答し、キャンセルした呼び出しは実際に停止します。タイムアウトした書き込みをむやみに再実行することはありません。各呼び出しは、アプリ名と所要時間とともに stderr に記録されます。 - 権限の説明。 Automation 権限がない場合、アプリが起動していない場合、または接続が失われた場合は、エラーコードではなく、わかりやすい対処方法が表示されます。
- 誤って繰り返し実行することはありません。 同じ送信、返信、削除、作成の呼び出しが 15 分以内に 2 回行われると、拒否されます。応答しなくなったモデルがメールを 5 回送信することはありません。
- 繰り返しイベントは、明示的に指定した場合にのみ削除されます。 1 つ削除するとシリーズ全体が削除されるため、拡張機能は
whole_series: trueを要求します。 - ドライラン。 一括移動や一括削除は、実行前にプレビューできます。
- 添付ファイルの保存場所は 1 か所に限定されます。 設定で指定した添付ファイルフォルダー内にのみ保存され、既存のファイルが上書きされることはありません。既存のファイルがある場合は
(1)、(2)…が追加されます。送信メールに添付するファイルも、そのフォルダーからのみ選択できます。そのため、「attach ~/.ssh/id_rsa」のような操作は拒否されます。他のツール(たとえば Seafile のダウンロード)からのファイルは、まずそのフォルダーに保存してください。 - 添付ファイルは確認されます。 Mail がすべてのファイルを受け取らなかった場合、メッセージは送信されず、代わりに下書きとして開きます。
- メールに隠された指示に注意してください。 アシスタントが読み取る内容はすべてコンテキストの一部となるため、悪意のあるメールが何かを実行するよう指示してくる可能性があります。気になる場合は、
writeを手動承認のままにするか、読み取り専用モードを有効にしてください。 - 読みやすいファイルは 1 つだけです。 サーバー全体は
server/apple-mail-mcp.jsにあり、依存関係もネットワーク呼び出しもありません。
よくある質問
Mac がスリープ中でも Mail のルールは実行されますか? いいえ。Apple Mail のルールは、Mail が開いている間に新着メールに対してのみ実行されます。古いメールを整理するには、アシスタントに移動を依頼してください。メールサーバーが Sieve をサポートしている場合は、サーバー側のフィルターのほうがデバイス間で安定して動作します。
アシスタントがメモを読み取れません。 おそらくロックされています。まず Notes でロックを解除してください。ロックされたメモは非公開のままです。
検索が遅いです。 Apple Mail のスクリプト処理は、非常に大きなフォルダーでは遅く、メッセージ本文の検索が最も遅くなります。アカウント、フォルダー、または日付範囲を絞り込んでください。
ツールが表示されません。
クライアントでサーバーが有効になっていることを確認してから、クライアントを再起動してください。./test.sh はクライアントを介さず、サーバーに直接接続します。(Claude Desktop:Settings → Extensions、ログの場所:~/Library/Logs/Claude/。)
「Not authorized to send Apple events」と表示されます。 System Settings → Privacy & Security → Automation を開き、MCP クライアント(サーバーを起動するアプリ)に Mail、Calendar、Notes の操作を許可してください。
ツールリファレンス(詳しく知りたい方向け)
2 つのツールがあり、それぞれ { "action": "...", "args": { ... } } を受け取ります。引数の一覧は各ツールの説明に記載されています。
read — 何も変更しません
| アクション | 用途 |
|---|---|
needs_response | 返信を待っている人からのメール |
awaiting_reply | 返信がない送信済みメール |
get_thread | 会話全体(古い順) |
list_messages | フォルダー内の最新メッセージ(返信済み/転送済み/フラグ付きの情報を含む) |
search_messages | テキスト(件名、送信者、本文)、日付、未読、フラグ付き、添付ファイル、全フォルダーを検索 |
read_message | メッセージ1件の全文 |
list_attachments | メッセージの添付ファイル |
list_accounts | メールアカウントとアドレス |
list_mailboxes | 未読件数付きのフォルダー |
list_rules | 条件とアクションを含むメールルール |
list_calendars | カレンダー |
list_events | 期間内のイベント(繰り返しイベントは展開) |
list_note_folders | メモのアカウントとフォルダー |
list_notes | 最近のメモ |
search_notes | メモを検索 |
read_note | メモ1件の全文 |
write — 内容を変更します(読み取り専用モードでは非表示)
| アクション | 用途 |
|---|---|
send_email | 新規メール。添付ファイルフォルダーのファイルを attachments で指定します(draft: true の場合は下書きとして開きます) |
reply_message | 返信/全員に返信 — デフォルトでは Mail で下書きとして開きます。draft: false の場合は送信します |
forward_message | 添付ファイル付きで転送 — デフォルトでは下書きとして保存します。draft: false の場合は送信します |
set_read | 1件または複数件を既読/未読に設定 |
set_flag | 色を指定してフラグを付ける/解除する |
move_messages | 別のフォルダーに移動(dry_run を利用できます) |
delete_messages | アカウントのゴミ箱に移動(dry_run を利用できます) |
save_attachments | 添付ファイルを添付ファイルフォルダーに保存 |
create_mailbox | 新しいフォルダー |
create_rule · set_rule_enabled · delete_rule | メールルール(削除したルールはコピーとして戻ります) |
create_event · delete_event | カレンダーイベント(繰り返しイベントを削除する場合は whole_series: true を指定します。削除したイベントはコピーとして戻ります) |
create_note · update_note · delete_note | メモ |
メッセージ ID は一覧表示と検索結果から取得できます。同じ行の account と mailbox を渡してください。フォルダーが間違っていても、メッセージは ID によって見つかります。
小型モデルをサポートしています。引数名は柔軟に照合され(folder → mailbox、messageId → id)、値は変換され("false"、"1,2,3"、"tomorrow")、短いアクション名も使用できます(reply、search)。また、すべての結果の notes には、呼び出しがどのように解釈されたかが説明されます。送信、削除、作成を伴う操作では、推測は一切行いません。不明瞭な入力がある場合は、ヒント付きのエラーになります。
手動インストールと開発
.mcpb の代わりに、チェックアウトしたソースからサーバーを直接実行します。
git clone https://github.com/ipsupport-llc/apple-mail-mcp.git ~/code/apple-mail-mcp
cd ~/code/apple-mail-mcp
./install.sh --print # any client: prints the config block to paste
./install.sh # Claude Desktop: adds an "apple-mail" entry to claude_desktop_config.json (backs it up first)
./test.sh # talks to the server directly and prints your accounts and calendars
./uninstall.sh # removes the entry
install.sh では、拡張機能と同じ設定を指定できます。--read-only / --no-read-only、--account Work、--save-dir ~/Documents/Attachments などです。再度実行しても、設定を変更しない限り以前の設定は維持されます(--reset で設定を消去します)。
install.sh の実行後、Claude Desktop を再起動してください。手動インストールと .mcpb を同時に使用しないでください。
テストがメールに触れることはありません。ユニットテストでは、Mail、Calendar、Notes の偽アプリに対してサーバーを実行します。プロトコルテストでは JSON-RPC のみを使用します。CI では、すべてのプルリクエストに対して macOS 上で両方のテストを実行します。
/usr/bin/osascript -l JavaScript tests/unit.js server/apple-mail-mcp.js
python3 tests/protocol.py
リリース: タグをプッシュすると、GitHub Actions がテストを実行し、.mcpb をビルドしてリリースに添付し、MCP Registry に掲載します。
git tag v1.4.0 && git push origin v1.4.0
ライセンス
MIT © IPSupport LLC。一部の機能のアイデアは patrickfreyer/apple-mail-mcp(MIT)から着想を得ています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。