email-mcp
email-mcp
クラシック Outlook on Windows をネイティブ COM (pywin32) で操作する、メール+カレンダー連携ツールです。単一の email コマンドとして提供され、CLI と stdio MCP サーバー の両方の役割を果たします。Azure アプリ登録も OAuth も PowerShell も不要で、すでにサインインしている Outlook デスクトップクライアントをそのまま操作します。
要件
Windows 10/11
クラシック Outlook デスクトップ が、少なくとも1つのアカウントで設定されていること
Python 3.10+ と
uv
「新しい」Outlook for Windows は COM を公開していません。新しい Outlook を使用していてクラシックに戻せない場合、このツールは動作しません。
COM は Outlook デスクトップクライアント経由でのみアクセスされ、個別の認証はありません。Outlook にサインインしているアカウントがそのままツールから見えるアカウントとなり、送信メールは手動で送信した場合とまったく同じように実際の [送信済み] フォルダーに保存されます。
Related MCP server: outlook-classic-mcp
インストール / 実行
uvx を使って GitHub から直接実行できます(クローンも手動インストールも不要)。
uvx --from git+https://github.com/kerodkibatu/email-mcp email --help初回実行時に uv がパッケージを解決してキャッシュするため、2回目以降の起動は高速です。
CLI
すべてのツールは email のサブコマンドです。出力は stdout に JSON で出力されます。
# List configured Outlook accounts
uvx --from git+https://github.com/kerodkibatu/email-mcp email list-accounts
# Query across all mail folders with a MongoDB-style filter (JSON string)
uvx --from git+https://github.com/kerodkibatu/email-mcp email query \
--filter '{"$and":[{"from":{"$contains":"@kyros.com"}},{"unread":true}]}' \
--limit 20 --order-by received_desc
# Read one email by EntryID
uvx --from git+https://github.com/kerodkibatu/email-mcp email read --entry-id "0000000..."
# Send a new mail (account is REQUIRED — see below)
uvx --from git+https://github.com/kerodkibatu/email-mcp email send \
--to client@example.com \
--subject "Status update" \
--body "Heads up — ..." \
--account kerod@towlydigital.com
# Save a new mail as a draft instead of sending (same flags as send, no --send-as)
uvx --from git+https://github.com/kerodkibatu/email-mcp email draft \
--to client@example.com \
--subject "Status update" \
--body "Heads up — ..." \
--account kerod@towlydigital.comMCP
email mcp は、11 個すべてのツールを公開する stdio MCP サーバーを起動します。.mcp.json(または claude_desktop_config.json)に追加してください:
{
"mcpServers": {
"email": {
"command": "uvx",
"args": ["--from", "git+https://github.com/kerodkibatu/email-mcp", "email", "mcp"]
}
}
}初回起動は uv がパッケージを解決するため遅くなりますが、以降はキャッシュが使われます。
ツール
ツール | 目的 |
| 設定済みの Outlook アカウントを一覧表示 |
| すべてのフォルダーを MongoDB スタイルでクエリ( |
| EntryID でメールの本文全体を読む |
| 新しいメールを送信(特定のアカウントから、ファイル添付付きで送信可能) |
| 新しいメールを作成し、送信せずに下書きとして保存 |
| メールに返信 / 全員に返信 |
| メールを転送 |
| 実際の添付ファイルを |
| 送受信をトリガーし、同期グループが進むのを少し待つ |
| 既読/未読状態を切り替える |
| 今後の予定を一覧表示 |
送信アカウントの選択
send_email、reply_email、forward_email は account パラメータが必須です。これは設定済みの Outlook アカウント名(通常は SMTP アドレス)の部分文字列です。これは意図的な仕様です。複数のアカウント(例: 個人用 + 仕事用)が設定されている場合、Outlook のプライマリアカウントをデフォルトにすると、個人メールが仕事用アカウントから漏れたり、その逆が起こる危険があります。呼び出し側にアカウントを明示させることで、送信を明確にします。
指定された account が設定済みのアカウント(大文字小文字を区別しない部分文字列)と一致しない場合、ツールはエラーを返し、利用可能なアカウントを一覧表示します。名前が不明な場合は、先に list_accounts を実行してください。トランスポートアカウントは、Outlook アイテムの SendUsingAccount プロパティに直接設定されます。
{
"to": "client@example.com",
"subject": "Status update",
"body": "Heads up — ...",
"account": "kerod@towlydigital.com"
}別名送信(実験的 — Exchange の「別名で送信」権限が必要)
実験的。 これは pywin32 COM 経由でクラシック Outlook を操作するだけで、Azure/OAuth のパスはありません。動作はテナントポリシーに依存し、バウンス、サイレントなダウングレード、または [送信トレイ] に残る可能性があります。ベストエフォートとして扱ってください。
send_email、reply_email、forward_email はオプションの send_as パラメータ(送信元として使用する SMTP アドレス)を受け付けます。受信者にはそのアドレスが差出人として表示され、「代理送信」の開示は一切表示されません。これは真の Exchange の「別名で送信」であり、「代理で送信」とは異なります。
仕組みとしては、ツールは SendUsingAccount を指定された account(トランスポートメールボックス)に設定し、次に send_as を Exchange に対して解決し、送信前にアイテムの PropertyAccessor を介して PR_SENT_REPRESENTING_* と PR_SENDER_* の両方の MAPI プロパティをそのアドレスに上書きします。送信者プロパティ(representing プロパティだけでなく)を上書きすることで、「代理送信」が純粋な「別名で送信」に変換されます。Exchange は送信時に権限を検証します。
要件:
accountユーザーには、Exchange 管理者がサーバー側で付与したsend_asメールボックスに対する別名で送信権限が必要です。ツールはこれを付与または確認できません。送信を試みるだけです。send_asアドレスは Exchange で解決可能である必要があります。通常は同じテナント内のメールボックスです。外部アドレス(gmail.com など)は解決時にエラーになります。権限がない場合の動作はテナントポリシーに依存します。Exchange はメッセージをバウンスするか、「代理送信」にサイレントにダウングレードするか、[送信トレイ] に残す可能性があります。
この機能は、明示的に許可した Exchange 組織内でのみ機能します。外部送信者を偽装するために使用することはできません。
{
"to": "client@example.com",
"subject": "Status update",
"body": "Heads up — ...",
"account": "admin@custom.com",
"send_as": "contact@custom.com"
}send_as を使用した場合、レスポンスには sent_as フィールドが含まれ、そのアドレスがエコーされます。
添付ファイルの送信
send_email はオプションの attachments 配列(絶対ファイルパス)を受け付けます。各パスは存在し、通常のファイルを指している必要があります。いずれかのパスが無効な場合、ツールは問題のあるパスを列挙したエラーを返し、送信は行われません。Windows ではフォワードスラッシュとバックスラッシュの両方が受け入れられます。~ や環境変数は展開されません。完全に解決されたパスを渡してください。
{
"to": "kerod@example.com",
"subject": "Signed contract",
"body": "See attached.",
"account": "kerod@towlydigital.com",
"attachments": [
"C:\\Users\\Kerod\\Desktop\\contract.pdf",
"C:/Users/Kerod/Desktop/cover-letter.pdf"
]
}添付ファイルのダウンロード
download_attachments ツールは、メールからファイルを抽出してローカルに保存し、絶対フォルダーパスを返します。
保存場所: ファイルはユーザーのダウンロードフォルダー配下の
~/Downloads/email-attachments/YYYY-MM-DD_sender-slug_subject-slug/に保存されます。インライン画像: ロゴや署名画像は、デフォルトではノイズを避けるために除外されます。どうしても必要な場合は
include_inline: trueを設定してください。冪等性: 同じメールに対してツールを再実行すると、フォルダーを安全に再利用し(
.entry_idマーカーで追跡)、2つの異なるメールが同じスラッグ名になった場合には曖昧さを解消します。
仕組み
email コマンドは、COM 経由で実行中の Outlook インスタンスに接続し(実行中のものがない場合は起動)、MAPI 名前空間を操作してメールの読み書きを行います。すべての COM アクセスは単一の Outlook セッションを経由し、PowerShell を起動することはありません。
つまり:
Outlook がインストールされている必要があります(開いている必要はありません。最初の呼び出しで起動されます)
Outlook にサインインしているアカウントがそのままツールから見えるアカウントです。個別の認証はありません
送信メールは、手動で送信した場合とまったく同じようにユーザーの [送信済み] フォルダーに表示されます
ライセンス
MIT — LICENSE を参照してください。
This server cannot be deployed
Maintenance
Related MCP Connectors
Hosted email MCP for your own Gmail, Outlook.com, Microsoft 365, iCloud or IMAP inbox: read, search, draft, reply in thread, forward and file mail. It moves or flags up to 500 messages in one call, and a send leaves exactly one copy in Sent. A calendar is a separate connection, and connecting one adds diary and scheduling tools.
MCP server for Nylas — read email, calendars, events and contacts, and send email or create events.
Hosted MCP server with managed OAuth for 15+ toolkits: Google Workspace, Fitbit, Oura, Kalshi, etc.
MCP server for Cronofy — read calendars, events and free/busy, and create, update or delete events.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceMCP server for Outlook — enables AI assistants to access email, contacts, and calendars via Windows COM interface.28 PyPI1MIT
- AlicenseNot gradedqualityBmaintenanceEnables MCP-aware agents to interact with the classic Outlook desktop client for mail, calendar, contacts, tasks, and Out-of-Office settings via the COM API, without Azure or OAuth.187 PyPI32MIT
- AlicenseNot gradedqualityBmaintenanceTurns your running Outlook Desktop into an MCP server, enabling email, calendar, tasks, and attachment management through your existing Outlook session without any cloud APIs.AGPL 3.0
- AlicenseNot gradedqualityBmaintenanceMCP server that connects to Windows Classic Outlook to automate email organization, search, and reply draft creation without sending emails.121 npmMIT