🚀 OWA Exchange MCP Server
このMCP (Model Context Protocol) サーバーは、任意のMicrosoft Exchange / OWA (Outlook Web Access) デプロイメントに対応しています。30のツールを通じて、LLMエージェントが電子メール、カレンダー、ディレクトリ検索、フォルダ、空き状況、および会議分析にアクセスできるようにします。
OWAを公開している任意のオンプレミスまたはホスト型のExchangeサーバーで動作します。
🚀 クイックスタート
cp .mcp.json.example .mcp.json
python3 login.py --setup
python3 login.py
pip install -e .
📦 インストール
MCPクライアント設定に追加してください。https://owa.example.com をあなたのOWA URLに置き換えてください。
Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"exchange": {
"command": "uvx",
"args": ["exchange-mcp-server"],
"env": {
"EXCHANGE_OWA_URL": "https://owa.example.com"
}
}
}
}
Cursor (.cursor/mcp.json):
{
"mcpServers": {
"exchange": {
"command": "uvx",
"args": ["exchange-mcp-server"],
"env": {
"EXCHANGE_OWA_URL": "https://owa.example.com"
}
}
}
}
Claude Code (.mcp.json):
{
"mcpServers": {
"exchange": {
"command": "uvx",
"args": ["exchange-mcp-server"],
"env": {
"EXCHANGE_OWA_URL": "https://owa.example.com"
}
}
}
}
📚 詳細ドキュメント
設定
| 変数 |
必須 |
説明 |
EXCHANGE_OWA_URL |
はい |
OWAインスタンスのベースURL |
EXCHANGE_COOKIE_FILE |
いいえ |
セッションクッキーファイルのパス (デフォルト: session-cookies.txt) |
ログイン
オプションA: MCPツールを使用する (推奨)
login ツールは、MCPセッション内で資格情報の設定と認証を処理します — 別のターミナルは必要ありません。
初回 (設定 + ログイン):
login(master_password="...", username="user@example.com", password="...")
それ以降のログイン (保存された資格情報を復号化):
login(master_password="...")
オプションB: CLIを使用する
python3 login.py --setup
python3 login.py
どちらの方法も以下の手順を行います:
- ヘッドレスブラウザでOWA URLを開きます
- 資格情報を送信します
- 2FA承認を待ちます (最大90秒)
- 暗号化されたセッションクッキーを
session-cookies.txt に保存します
資格情報とセッションクッキーは、AES-256 (PBKDF2キー導出、480,000回の反復) で静止状態で暗号化されています。
ツール (30)
メール (10)
| ツール |
説明 |
get_emails |
フォルダからフィルタリングしたメールを一覧表示します |
get_email |
IDでメールの完全な内容を取得します |
send_email |
新しいメールを送信します |
reply_email |
メールに返信します |
forward_email |
メールを転送します |
delete_email |
メールを削除します |
move_email |
メールを別のフォルダに移動します |
mark_email_read |
メールを既読/未読にマークします |
download_attachments |
メールからファイル添付をダウンロードします |
get_email_links |
メール本文からハイパーリンクを抽出します |
カレンダー (7)
| ツール |
説明 |
get_calendar_events |
日付範囲内のイベントを取得します (繰り返しイベントの展開に対応) |
create_meeting |
参加者との会議を作成します |
update_meeting |
既存の会議を更新します |
cancel_meeting |
会議をキャンセルし、参加者に通知します |
respond_to_meeting |
承認、拒否、または仮承認します |
download_event_attachments |
カレンダーイベントからファイル添付をダウンロードします |
get_event_links |
イベント説明からハイパーリンクを抽出します |
ディレクトリ (1)
| ツール |
説明 |
find_person |
Active Directory内のユーザーを検索します |
フォルダ (7)
| ツール |
説明 |
get_folders |
未読カウント付きでメールフォルダを一覧表示します |
create_folder |
新しいメールフォルダを作成します |
rename_folder |
既存のフォルダを名前変更します |
empty_folder |
フォルダ内のすべてのアイテムを削除します |
delete_folder |
メールフォルダを削除します |
move_folder |
フォルダを別の親フォルダに移動します |
check_session |
OWAセッションが認証されているか確認します |
空き状況 (2)
| ツール |
説明 |
find_free_time |
カレンダー内の空き時間を見つけます |
find_meeting_time |
複数のユーザーの共通の空き時間を見つけます |
分析 (2)
| ツール |
説明 |
get_meeting_stats |
複数のユーザーの会議件数統計を取得します |
get_meeting_contacts |
誰と最も会っているかの接続マトリックスを取得します |
認証 (1)
| ツール |
説明 |
login |
OWAに認証します (資格情報の設定 + 2FAログイン) |
ファイル構成
login.py # ブラウザベースの2FAログイン (スタンドアロンCLI)
exchange_mcp/
server.py # FastMCPサーバーのエントリーポイント
owa_client.py # OWA HTTPクライアント
auth.py # 非同期ログインロジック (MCPツールで共有)
tools/
email.py # メールツール
calendar.py # カレンダーツール
people.py # ディレクトリ検索
folders.py # フォルダ管理とセッションチェック
availability.py # 空き時間 / 会議時間
analytics.py # 会議統計と連絡先
auth.py # ログインツール
pyproject.toml # パッケージ設定
⚠️ 注意事項
すべてのExchange / OWAデプロイメントは独自の認証設定を持っています — 一部は2FA (プッシュ通知、TOTP、SMS) を必要とし、他のものは単一要素ログインまたはSSOを使用します。このプロジェクトのログインロジック (login.py と exchange_mcp/auth.py) は、特定の2FAフロー (モバイルプッシュ承認) 用に作成されています。あなたのOWAサーバーが異なる2FA方法を使用している場合、または全く2FAを使用していない場合は、環境に合わせてログインロジックを変更または削除する必要があります。
🔒 セキュリティ
- 資格情報とセッションクッキーはAES-256-Fernetで暗号化されています
- マスターパスワードは保存されません
- キー導出には480,000回の反復を伴うPBKDF2が使用されます
- 資格情報とクッキーファイルは
0600 の権限を持っています
- クッキーはメモリ内でのみ復号化され、平文でディスクに書き込まれることはありません (MCPツール経由)
- セッションクッキーはあなたのOWAサーバーにのみ送信されます