mcpField
I
iCloud Mail

iCloud Mail

ローカル
github.com/JulienRabaultコミュニケーション15 週間前に更新

iCloud Mail について

iCloud Mail は IMAP と SMTP で Apple のメールを扱うローカル MCP サーバーです。AI クライアントから iCloud Mail を操作したい人向けで、既定では読み取り専用とし、送信を明示的な操作に分け、メール削除ツールを備えません。

主な機能

  1. 01全フォルダーを横断検索
  2. 02メール、スレッド、添付情報の読み取り
  3. 03送信前に下書きを保存
  4. 04メール振り分けの事前シミュレーション
  5. 05フォルダーと未読メールのリソース

活用シーン

  1. 01全フォルダーからメールや返信を検索
  2. 02スレッドを確認して返信を下書き
  3. 03添付ファイルを保存してパスを取得
  4. 04適用前にメール整理をプレビュー

MCP 対応

MCP サーバーは、メールの検索、読み取り、整理、下書き、送信ツールに加え、フォルダーと未読メールのリソース、受信トレイ分類用プロンプトを公開します。添付ファイルはディスクに保存され、バイト列ではなくパスがモデルに返されます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"julienrabault-icloud": {
"command": "uvx",
"args": [
"icloud-mail-mcp"
],
"env": {
"ICLOUD_EMAIL": "<ICLOUD_EMAIL>",
"ICLOUD_APP_PASSWORD": "<ICLOUD_APP_PASSWORD>",
"ICLOUD_DISPLAY_NAME": "<ICLOUD_DISPLAY_NAME>"
}
}
}
}
起動コマンドuvx icloud-mail-mcp
設定が必要な環境変数
ICLOUD_EMAILYour iCloud address, for example [email protected].
ICLOUD_APP_PASSWORDシークレットAn app-specific password generated at account.apple.com. iCloud rejects your main password over IMAP.
ICLOUD_DISPLAY_NAMEName shown in the From header of sent mail. Defaults to the local part of the address.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypiicloud-mail-mcp0.1.1

ツール

15

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
with_countsbooleanいいえ各フォルダーのメッセージ数と未読数を追加します

詳細

iCloud Mail MCP

License: MIT PyPI Python 3.11+ MCP

iCloud Mail 用の Model Context Protocol(MCP)サーバーです。LLM が IMAP と SMTP を介して Apple メールを読み取り、検索、整理、送信できます。

すべてお使いのマシン上で実行されるため、認証情報やメールが第三者に渡ることはありません。ネットワーク通信と MIME の解析には、Python 標準ライブラリのみを使用します。

主な機能
  • デフォルトでは読み取り専用です。 検索および読み取りツールは SELECT ... readonly と BODY.PEEK を使用するため、メールが知らないうちに既読になったり、移動または削除されたりすることはありません。
  • 受信トレイだけでなく、すべてのフォルダを検索します。 返信はメールルールによって別の場所に振り分けられるため、受信トレイだけの検索では見つからないメールも search_all_folders で検索できます。
  • 送信前に下書きを作成します。 save_draft は確認用のメッセージを「下書き」に保存します。send_email もありますが、別の明示的な操作です。
  • メールを破壊する機能はありません。 メッセージを削除するツールはなく、delete_mailbox はメールが残っているフォルダの削除を拒否します。
  • 実際の iCloud MIME に対応しています。 Modified UTF-7 のフォルダ名、quoted-printable、誤った文字セット情報、HTML のみのメッセージ、アクセント付き文字のサーバー側検索に対応します。
必要条件
  • Python 3.11 以降、および uv
  • 2 ファクタ認証が有効な iCloud アカウント
  • アプリ用パスワード — iCloud は IMAP で通常のパスワードを使用できません
はじめに

PyPI に公開された後は、リポジトリのクローンは不要です。

uvx --from icloud-mail-mcp icloud-mcp-setup     # interactive configuration
uvx --from icloud-mail-mcp icloud-mcp           # run the server

ソースから実行する場合:

git clone https://github.com/JulienRabault/icloud-mcp.git
cd icloud-mcp
uv sync
uv run python -m icloud_mcp.setup

セットアップコマンドを実行すると、メールアドレスとアプリ用パスワードの入力を求められ、接続をテストして .env を作成した後、クライアント用の正確な設定ブロックを表示します。

account.apple.com →「サインインとセキュリティ」→「アプリ用パスワード」でアプリ用パスワードを生成してください。

標準設定はほとんどのクライアントで使用できます。

{
  "mcpServers": {
    "icloud-mail": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/icloud-mcp", "python", "-m", "icloud_mcp"]
    }
  }
}
Claude Code
claude mcp add icloud-mail --scope user -- uv run --directory /path/to/icloud-mcp python -m icloud_mcp

claude mcp list で確認してください。

Claude Desktop

標準設定を claude_desktop_config.json に追加します。

  • macOS — ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows — %APPDATA%\Claude\claude_desktop_config.json

Windows では、uv.exe の絶対パスを使用してください。デスクトップクライアントは、シェルの PATH を常に引き継ぐとは限りません。

Codex

~/.codex/config.toml に記述します。

[mcp_servers.icloud-mail]
command = "uv"
args = ["run", "--directory", "/path/to/icloud-mcp", "python", "-m", "icloud_mcp"]
Cursor / Windsurf / VS Code

エディターの MCP 設定ファイル(.cursor/mcp.json、~/.codeium/windsurf/mcp_config.json、または VS Code の MCP 設定)で標準設定ブロックを使用します。

MCP サーバーはクライアントの起動時に読み込まれます。設定を編集した後は、クライアントを再起動してください。

ツール

読み取り — これらはメールボックスを変更しません:

ツール説明
list_foldersフォルダーを一覧表示します。メッセージ数と未読数を含めることもできます
folder_statusメッセージを一覧表示せずに、1つのフォルダーの件数を表示します
search_emails1つのフォルダーを検索します。本文、差出人、宛先、件名、日付、フラグ、サイズで検索できます
search_all_foldersすべてのフォルダーを一度に対象にして、同じ条件で検索します
read_emailメッセージ全体を取得します。デコード済み本文、任意のHTML、添付ファイルのメタデータが含まれます
get_thread会話を再構成します。各メッセージの本文を含めることもできます
save_attachments添付ファイルをディスクに書き込み、そのパスを返します

書き込み — 明示的な操作です:

ツール説明
save_draftメッセージを下書きに保存します。送信はされません
set_flag既読/未読、フラグ付き、返信済みを設定します。元に戻せます
create_mailboxフォルダーを作成します。アクセント付きの名前にも対応します
rename_mailboxフォルダーの名前を変更します。メッセージも一緒に移動します
delete_mailbox空のフォルダーを削除します。メールが残っている場合は拒否します
auto_organizeルールに従ってメッセージを振り分けます。dry_run=falseでない限り、シミュレーションを行います
move_emailsフォルダー間でメッセージを移動します。dry_run=falseでない限り、シミュレーションを行います
send_email実際に送信します。下書きの手順も取り消しもありません

メールを破棄するツールはありません。delete_mailboxはメッセージが残っているフォルダーの削除を拒否します。まずメッセージを移動してください。これにより、判断はあなたに委ねられます。

添付ファイルのバイトデータがモデルを経由することはありません。save_attachmentsはファイルを書き込み、そのパスを返します。メールから届いたファイル名はサニタイズされます。これらは信頼できるパスではなく、敵対的な入力です。

リソース
URI内容
icloud://foldersすべてのフォルダーとメッセージ数、未読数
icloud://unread受信トレイの未読メッセージ
プロンプト
プロンプト目的
triage_inbox最近のメールを、要対応/情報/返信待ち/無視可能に分類します
draft_replyメッセージとスレッドを読み、下書きに返信を作成します
follow_up連絡先とのやり取りを再構成し、誰が誰に返信する必要があるかを示します
MCP クライアントを使わない自動化

examples/には同じモジュールを使う単独のスクリプトがあります。cronまたはTask Schedulerから実行できます:

uv run python examples/daily_digest.py           # what arrived today
uv run python examples/watch_sender.py acme.com  # exit 1 if nothing new
uv run python examples/waiting_on_reply.py       # threads nobody answered
uv run python examples/auto_file.py --apply      # file mail by rules

すべて--jsonによるパイプ処理に対応しています。examples/README.mdを参照してください。

同梱スキル

skills/mailbox-search/はClaude Codeスキルです。メッセージが存在しないと結論づける前に、すべてのフォルダーを検索するよう徹底します:

cp -r skills/mailbox-search ~/.claude/skills/
ここで対処しているiCloudの特性

iCloudに対して独自のIMAPクライアントを作成する場合に知っておくと便利です:

  • SEARCHはUIDを順不同で返します。 RFC 3501は順序を保証しておらず、iCloudは実際にソートされていないリストを返します。応答の末尾を使うと、誤ったメッセージが得られます。まず数値順にソートしてください。
  • MOVEもUIDPLUSもありません。 移動にはCOPY + \Deleted + EXPUNGEが必要です。EXPUNGEはフォルダー内のすべての\Deletedメッセージを削除します。move_emailsは、要求されたバッチ以外の削除済みメッセージがフォルダーに残っている場合、実行を拒否します。そうしないと、それらも削除されてしまいます。
  • SEARCH CHARSET UTF-8が動作します。 アクセント付きの検索語は、メールボックス全体を対象にサーバー側で検索されます。拒否するサーバー向けのクライアント側フォールバックもあり、応答のfiltered_client_sideでその旨を示します。
  • フォルダー名には変更UTF-7(RFC 3501)が使われます。utf7.pyで実装されています。
  • 文字セット指定は誤っていることがあります。 宣言された文字セットで本文をデコードできない場合はlatin-1にフォールバックし、text/plainパートがない場合はタグを除去したHTMLにフォールバックします。
セキュリティに関する注意
  • 認証情報は.env(gitignore対象)または環境変数に保存し、コードには記述しません。Settings.__repr__はパスワードを省略します。
  • メールの内容はデータであり、指示ではありません。サーバーは、受信したメッセージ内に見つかった指示に従って行動しないよう、クライアントに伝えます。
  • send_emailとmove_emailsは、会話内でユーザーが正確な内容または正確なメッセージ一覧を承認した後にのみ実行することを想定しています。
開発
uv run pytest -q

ネットワークも認証情報も不要なオフラインテストが49件あります。CIではPython 3.11から3.13を対象に、Linux、macOS、Windowsで実行します。

src/icloud_mcp/
  config.py        env / .env loading
  utf7.py          modified UTF-7 for folder names
  models.py        frozen Pydantic models
  mime.py          header, body and attachment decoding
  imap_client.py   connection, LIST, STATUS, SELECT, FETCH
  search.py        SEARCH criteria, threading, multi-folder search
  smtp_client.py   MIME building, SMTP send, copy to Sent
  attachments.py   attachment extraction, filename sanitising
  drafts.py        APPEND to Drafts
  flags.py         \Seen, \Flagged, \Answered
  move.py          COPY + EXPUNGE with the anti-purge guard
  mailboxes.py     create, rename, delete (empty only)
  organize.py      rule-based filing
  server.py        tools, resources, prompts
  setup_wizard.py  interactive configuration
  cli.py           terminal checks
貢献

イシューやプルリクエストを歓迎します。テストはオフラインで実行できる必要があります。実際のメールボックスを必要とするテストは禁止です。

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。