Skip to main content
Glama
kerodkibatu

email-mcp

by kerodkibatu

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.com

MCP

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 がパッケージを解決するため遅くなりますが、以降はキャッシュが使われます。

ツール

ツール

目的

list_accounts

設定済みの Outlook アカウントを一覧表示

query_emails

すべてのフォルダーを MongoDB スタイルでクエリ(has_attachments、unread など)

read_email

EntryID でメールの本文全体を読む

send_email

新しいメールを送信(特定のアカウントから、ファイル添付付きで送信可能)

draft_email

新しいメールを作成し、送信せずに下書きとして保存

reply_email

メールに返信 / 全員に返信

forward_email

メールを転送

download_attachments

実際の添付ファイルを ~/Downloads/email-attachments/YYYY-MM-DD_<sender>_<subject>/ に保存

force_sync

送受信をトリガーし、同期グループが進むのを少し待つ

mark_as_read

既読/未読状態を切り替える

list_calendar

今後の予定を一覧表示

送信アカウントの選択

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 を参照してください。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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 PyPI
    32
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Turns 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
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server that connects to Windows Classic Outlook to automate email organization, search, and reply draft creation without sending emails.
    121 npm
    MIT