mcp-outlook
mcp-outlook
セルフホスト可能な EWS 経由のオンプレミス Microsoft Exchange 向け MCP サーバー(Exchange Web Services)です。エアギャップ / クラウド非接続環境向けに作られており、内部の Exchange サーバーと直接通信し、Microsoft Graph、Azure AD、デスクトップ版 Outlook クライアントには一切触れません。
バックエンド:
exchangelib(EWS クライアント)フレームワーク: FastMCP
トランスポート: streamable-http(他の内部ホストが接続するスタンドアロン HTTP サーバー)
Exchange への認証: basic また は NTLM(設定で選択可能)
2 つのモード
モード | 対象 | 認証方法 |
| 1 つのメールボックス | そのアカウント(自分の資格情報)として接続 — ローカルでのベータテストに最適 |
| 多数のユーザー | 各呼び出し元のユーザー JWT を検証し、サービスアカウント + EWS Impersonation を介してそのユーザーのメールボックスに対して操作を行う |
jwt モードが ID を橋渡しする仕組み。 Exchange は会社の JWT を消費できません(Outlook は PKINIT/Kerberos ベースのため)。そこで MCP は、混ざることのない 2 つの 独立した 認証を行います:
User --(JWT)--> MCP validates the token, reads the user's email
MCP --(service account, NTLM)--> Exchange
MCP --(impersonation header = user's email)--> acts on the user's mailboxユーザーの JWT が Exchange に送信されることは決してなく、ユーザーのパスワードやスマートカードが MCP に触れることも一切ありません。MCP に渡るのは、唯一のサービス資格情報だけです。jwt モードで管理者が設定すべき内容については TODO.md を参照してください。
Related MCP server: OWA Exchange MCP Server
ツール
ツール | 目的 |
| 最近のメッセージを新しい順に取得 |
| テキスト + 日付範囲 + 送信者/受信者による検索 |
| メッセージ全体:本文、受信者、添付ファイル名 |
| インタラクティブな作成ウィジェット (MCP Apps) を開く。ユーザーが編集して送信する |
| 返信として事前入力された作成ウィジェットを開く |
| 転送として事前入力された作成ウィジェットを開く |
| 送信 — ウィジェットからのみ呼び出し可能 (アプリのみ表示) |
| 連絡先を検索 — ウィジェットからのみ呼び出し可能 (アプリのみ) |
| 既読/未読ステータスの切り替え |
| 削除済みアイテムへ移動、または完全に削除 |
| Outlook の重要度 (高/標準) を設定 |
| メッセージを別のフォルダーへ移動 |
| 利用可能なメールフォルダー名の一覧(サブフォルダーを含む) |
| 指定した日付範囲のカレンダー予定 |
| 予定の全詳細:本文、参加者、場所 |
| スケジュール アシスタント — 参加者の空き状況に応じて候補時間枠をランク付け |
| インタラクティブな予定下書きウィジェットを開く |
| 予定を作成 — ウィジェットからのみ呼び出し可能 (アプリのみ) |
| 会議の出席依頼に応答する |
list_emails と search_emails は、未読メッセージのみを返すために unread_only=true も受け付けます。
セットアップ
Python 3.11+ と uv が必要です。
uv sync # create venv + install deps
cp .env.example .env # then edit .env with your Exchange details
uv run python -m mcp_outlookサーバーは MCP_HOST:MCP_PORT(デフォルトは 127.0.0.1:8000)にバインドし、/mcp で streamable-htp の MCP エンドポイントを提供します。
ローカルでのベータテスト(管理者のセットアップは不要)
自分自身のメールボックスに対して、自分のユーザー名/パスワードで実行します — JWT なし、偽装なし、サービスアカウントなし、スマートカードなし:
# in .env:
OUTLOOK_AUTH_MODE=static # the default
OUTLOOK_EWS_ENDPOINT=https://mail.corp.local/EWS/Exchange.asmx
OUTLOOK_USERNAME=CORP\you
OUTLOOK_PASSWORD=...
uv run python -m mcp_outlook設定
すべての設定は環境変数(または .env ファイル)から読み込まれます。完全な一覧は .env.example を参照してください。主なものは次のとおりです:
変数 | 備考 |
|
|
| 完全な asmx UR。例: |
| ホスト名のみの代替(エンドポイントは |
| 接続アカウント — 自分自身 (static) またはサービスアカウント (jwt)。NTLM の場合は |
| 開くメールボックス (static モード)。省略可能 — |
| アカウントのパスワード。 |
|
|
| jwt モードで必須 — 要求するトークンの発行者 (issuer) とオーディエンス |
| jwt モード — 署名鍵(JWKS URI、またはエアギャップ環境向けの静的 PEM) |
| jwt モード — ユーザーの SMTP アドレスを保持するクレーム(デフォルトは |
| 内部 CA の |
|
|
| HTTP バインド(デフォルト |
EWS エンドポイントの探し方
EWS の URL は OWA(Web メール)の URL とは異なります。Exchange サーバー上で:
Get-WebServicesVirtualDirectory | fl Name,InternalUrl,ExternalUrlエアギャップ環境では、ほとんどの場合 InternalUrl を使用します。
テスト
ユニットテストは Exchange サーバーを必要としません(設定の解析とシリアライズのみ):
uv run pytestライブのスモークテスト(実際の .env を使用):サーバーを起動し、MCP クライアントまた は MCP Inspector を接続してから、list_folders → list_emails → send_emai(自分宛て)を呼び出し、受信を確認します。OUTLOOK_AUTH_TYPE を ntlm と basic の間で切リ替えて、Exchange 管理者が有効にしている方式を確認してください。
作成 UI (MCP Apps)
draft_emai はインタラクティブな MCP Apps ウィジットを開きます — 単一の自己完結型 HTML ファイル(src/mcp_outlook/widgets/compose.html)に組み込まれた React 製の作成エデイターです。MCP Apps 対応のホストは、チャットスレッド内にインラインで描画します。
ウィジットの機能:
To フィールドとインラインの連絡先検索 — 最後のカンマの後に入力すると連絡先を検索します。候補を選ぶとクエリがチップに置き換わり、有効なアドレスはラベル付きチップとして表示されます。
送信 / 破棄 — 送信はウィジットから直接
send_emailを実行します(アプリのみ — モデルは呼び出せません)。破棄はカードを折り畳みます。後継 (Supersession) — 新しい下書きを開くと、開いている古い下書きウィジェットがグレーアウトされます。
署名 — すべての下書きにはあらかじめ「Airchat で作成」と入力されています(編集可能)。
エアギャップ保証: ビルド済み HTML(React + ブリッジ JS をインライン化)は Python パッケージに同梱されます。実行時に外部アセットへのリクエストは一切発生しません。Node.js が必要なのはウィジェットを再ビルドするときだけです。
ウィジェットの再ビルド(開発時のみ)
cd frontend
npm ci
npm run build # tsc + vite build + artifact copy → src/mcp_outlook/widgets/compose.htmlビルドスクリプトは、コピー前に外部 URL が HTML に混入していないことを検証します。
視覚的に試す(スタンドアロンの開発プレビュー)
cd frontend && npm run dev
# Opens http://localhost:5173 with a mock host — no Exchange needed.
# Type in To, see chips form, contact results appear, Send/Discard collapse the card.注意点
最近の Exchange では Basic 認証が無効になっていることがよくあります — 安全なデフォルトは NTLM です。
内部/自己署名証明書を使用する場合は
OUTLOOK_CA_BUNDLEが必要です。指定しないと TLS 検証で接続が失敗します。マルチユーザー (
jwt) モードには Exchange の 1 つの権限付与が必要です — サービスアカウントがApplicationImpersonationRBAC ロールを保持している必要があります。TODO.mdを参照してください。staticモードではそのような権限付与は不要です。.envには平文のパスワードが保存されます。 このファイルは gitignore の対象ですが、ホスト上でファイルのアクセス権限も厳格に設定してください(chmod 600 .env)。
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Read, search, send, organize, draft and schedule email across your inboxes from any MCP client.
Microsoft Exchange MCP server - hosted, multi-user, incl. Exchange on-prem & hybrid (EWS)
Manage Microsoft 365 email, calendar, contacts and inbox rules via the Graph API with OAuth 2.0.
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
Related MCP Servers
- AlicenseCqualityAmaintenanceSecure MCP server for on-prem Microsoft Exchange (EWS) with tools for email, calendar, contacts, folders, attachments, and free/busy availability.314MIT
- AlicenseAqualityDmaintenanceMCP server for any Microsoft Exchange / OWA deployment. Gives LLM agents access to email, calendar, directory search, folders, availability, and meeting analytics via 30 tools.307MIT
- AlicenseNot gradedqualityCmaintenanceEnables reading, sending, and managing Microsoft 365/Outlook emails through MCP tools with OAuth 2.1 authentication.114MIT
- FlicenseAqualityBmaintenanceMCP server for corporate Exchange that provides access to email, calendar, and people directory via OWA JSON API.20
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ItayElizur/mcp-outlook'
If you have feedback or need assistance with the MCP directory API, please join our Discord server