Outlook Personal MCP について
Outlook Personal MCP は、Microsoft Graph を通じて個人の Outlook.com メールボックスとカレンダーを操作する MCP サーバーです。ローカルのデバイスコード OAuth と stdio を使い、第三者の中継を経由しません。
主な機能
- 01メールの検索・読み取り・送信・管理
- 02下書きと添付ファイルの管理
- 03カレンダーイベントと空き状況の管理
- 04ローカルのデバイスコード OAuth
- 05添付ファイルのローカルパス制限
活用シーン
- 01個人メールボックスの検索と整理
- 02メールの作成・送信・返信
- 03カレンダーイベントや招待の管理
- 04参加者の空き時間の確認
MCP 対応
Microsoft Graph を介して、個人の Outlook.com メールとカレンダーを操作するツールを MCP クライアントに公開します。stdio で通信し、OAuth トークンをローカルに保存します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx mcp-outlook-personalOUTLOOK_MCP_CLIENT_IDAzure App Registration client ID (Application ID). Required. Create a free app at https://portal.azure.com — see README for the three-minute setup.OUTLOOK_MCP_AUTHORITYシークレットAzure AD authority URL. Defaults to https://login.microsoftonline.com/consumers which covers personal Microsoft accounts (Outlook.com, Hotmail, Live). Change only if you target a different tenant.OUTLOOK_MCP_FILE_ROOTOnly files under this directory can be read by add_attachment or written by download_attachment. Defaults to ~/.local/share/outlook-personal-mcp/files.OUTLOOK_MCP_MAX_FILE_BYTESMaximum bytes allowed for local attachment reads and attachment downloads. Defaults to 3145728.OUTLOOK_MCP_ALLOW_PERMANENT_DELETESet to 'true' to enable the permanent_delete tool which irrecoverably erases messages (bypasses Deleted Items). Disabled by default for safety.OUTLOOK_MCP_DEBUGSet to 'true' to enable debug-level logging for Graph API requests and responses.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
outlook-personal-mcp
Microsoft Graph API を介して、Claude Code と Codex に個人用 Outlook.com メールボックスとカレンダーの完全な操作権限を提供する MCP サーバーです。Python で記述され、MCP の stdio トランスポートを使用します。ユーザーごとのデバイスコード OAuth を利用するため、認証情報が端末の外に出ることはありません。MIT ライセンスです。
機能
- メール — 一覧表示、検索、読み取り、送信、返信、転送、移動、コピー、フラグ設定、既読/未読の設定、削除(論理削除または完全削除)
- 下書き — 作成、更新、ローカルファイルの添付、送信
- フォルダー — 一覧表示、作成、名前の変更、削除
- カレンダー — カレンダーの一覧表示、予定の一覧表示/検索/取得/作成/更新/削除、招待への応答(承諾/辞退/仮承諾)、空き時間/予定ありの確認
- ユーザーごとの OAuth — 無料の Azure アプリを自分で登録します。サーバーは Microsoft アカウントで認証し、トークンをローカルにキャッシュします
- ローカル stdio — MCP ホストの子プロセスとして実行されます。メールボックスのデータが第三者を経由することはありません
前提条件
- Python 3.10 以降
uv(高速な Python パッケージおよびツールランナー)— 実行時に必須です。サーバーはuvx経由で起動され、MCP ホスト(Claude Desktop を含む)には同梱されていません。curl -LsSf https://astral.sh/uv/install.sh | sh(macOS/Linux)またはpowershell -c "irm https://astral.sh/uv/install.ps1 | iex"(Windows)でインストールしてください。- 個人用 Microsoft アカウント(Outlook.com、Hotmail、Live など)
- 無料の Azure アプリ登録(以下を参照。所要時間は約3分)
Azure アプリの登録
-
https://portal.azure.com にアクセスし、Microsoft Entra ID → アプリの登録 → 新規登録を選択します。
-
任意の名前(例:
outlook-personal-mcp)を付けます。サポートされているアカウントの種類で、個人用 Microsoft アカウントのみを選択します。リダイレクト URI は不要です。登録をクリックします。 -
アプリを開き、認証 → 詳細設定 → パブリック クライアント フローを許可するを選択し、はいに設定してから保存します。(この設定は、このサーバーが使用するデバイスコードのログインフローに必要です。)
-
API のアクセス許可 → アクセス許可の追加 → Microsoft Graph → 委任されたアクセス許可に移動し、以下を追加します。
Mail.ReadWriteMail.SendCalendars.ReadWrite
(
User.Readは既定で含まれています。offline_accessは実行時に自動的に要求されるため、追加する必要はありません。) -
概要ページからアプリケーション(クライアント)IDをコピーします。これが
OUTLOOK_MCP_CLIENT_IDです。
代替方法:Azure CLI でアプリを作成する
az CLI があれば、登録全体を1つのコマンドで実行できます。
az login --use-device-code --allow-no-subscriptions # sign in with your personal account
az ad app create \
--display-name "outlook-personal-mcp" \
--sign-in-audience PersonalMicrosoftAccount \
--is-fallback-public-client true \
--required-resource-accesses '[{"resourceAppId":"00000003-0000-0000-c000-000000000000","resourceAccess":[{"id":"024d486e-b451-40bb-833d-3e66d98c5c73","type":"Scope"},{"id":"e383f46e-2787-4529-855e-0e479a3ffac0","type":"Scope"},{"id":"1ec239c2-d7c9-4623-a91a-a9775856bb36","type":"Scope"}]}]' \
--query appId -o tsv
表示された appId が OUTLOOK_MCP_CLIENT_ID です。(GUID は、Microsoft Graph の委任されたアクセス許可 Mail.ReadWrite、Mail.Send、Calendars.ReadWrite に対応します。)注: 新しくアプリを登録した場合、Microsoft のコンシューマー向けログインエンドポイントに反映されるまで数分かかります。初回のログインで AADSTS700016(「アプリケーション…が見つかりません」)が発生した場合は、数分待ってから再試行してください。
インストールと初回ログイン
1回限りの対話型ログインを実行します。短い URL とコードが表示されるので、任意のブラウザーで URL を開き、コードを入力してアクセス許可を承認すれば完了です。トークンは ~/.config/outlook-personal-mcp/token_cache.bin(モード 600)にキャッシュされ、以降の実行時に自動更新されます。更新トークンの有効期限が切れるか、取り消されない限り、再度プロンプトが表示されることはありません。
OUTLOOK_MCP_CLIENT_ID=<your-app-client-id> uvx mcp-outlook-personal login
PyPI リリースではなく、リリース前の最新コードをソースから実行するには、
mcp-outlook-personalを--from git+https://github.com/salahawad/outlook-personal-mcp mcp-outlook-personalに置き換えてください。
Claude Code の設定
サーバーをプロジェクトの .mcp.json(すべてのプロジェクトに設定する場合は ~/.claude/.mcp.json)に追加します。
{
"mcpServers": {
"outlook": {
"command": "uvx",
"args": ["mcp-outlook-personal"],
"env": { "OUTLOOK_MCP_CLIENT_ID": "<your-app-client-id>" }
}
}
}
または、CLI で claude mcp add を使用します。
Codex の設定
サーバーを ~/.codex/config.toml に追加します。
[mcp_servers.outlook]
command = "uvx"
args = ["mcp-outlook-personal"]
env = { OUTLOOK_MCP_CLIENT_ID = "<your-app-client-id>" }
Claude Desktop 拡張機能(.mcpb)としてインストールする
このサーバーは Claude Desktop 拡張機能(.mcpb)としてもパッケージ化されています。チェックアウトしたリポジトリからバンドルをビルドします。
npx @anthropic-ai/mcpb pack . dist/mcp-outlook-personal.mcpb
その後、Claude Desktop で Settings → Extensions を開き、dist/mcp-outlook-personal.mcpb ファイルをインストールして、求められたら Azure App Client ID(および任意の設定)を入力します。
**要件:**拡張機能は
uvx mcp-outlook-personalでサーバーを起動するため、uvをインストールし、PATHに追加しておく必要があります。Claude Desktop には同梱されていません(前提条件を参照)。Codex やその他の stdio ホストでは、.mcpbではなく上記の設定を使用してください。
設定(環境変数)
| 変数 | 必須 | デフォルト | 説明 |
|---|---|---|---|
OUTLOOK_MCP_CLIENT_ID | はい | — | Azure アプリの Application(client)ID |
OUTLOOK_MCP_AUTHORITY | いいえ | https://login.microsoftonline.com/consumers | MSAL authority URL(職場または学校のテナントに移行する場合のみ変更してください) |
OUTLOOK_MCP_TOKEN_CACHE | いいえ | ~/.config/outlook-personal-mcp/token_cache.bin | MSAL トークンキャッシュファイルのパス |
OUTLOOK_MCP_FILE_ROOT | いいえ | ~/.local/share/outlook-personal-mcp/files | add_attachment による読み取り、または download_attachment による書き込みが可能なのは、このディレクトリ内のファイルのみです |
OUTLOOK_MCP_MAX_FILE_BYTES | いいえ | 3145728 | ローカル添付ファイルの読み取りと添付ファイルのダウンロードで許可される最大バイト数 |
OUTLOOK_MCP_ALLOW_PERMANENT_DELETE | いいえ | false | true に設定すると、permanent_delete ツールが有効になります(取り消しできません。詳細は下記を参照) |
OUTLOOK_MCP_DEBUG | いいえ | false | true に設定すると、各 Graph リクエストのメソッド、URL、HTTP ステータスコードを stderr に記録します。トークンやメッセージ内容は記録されません。 |
ツール
アカウント
| ツール | 説明 |
|---|---|
whoami | サインイン中のユーザーの Microsoft アカウントプロフィールを返します |
メール
| ツール | 説明 |
|---|---|
list_messages | メッセージを一覧表示します(新しい順)。フォルダーまたは未読のみで絞り込むこともできます |
search_messages | メールボックス全体を全文検索します(Graph $search) |
get_message | 1 件のメッセージを取得します。本文全体を含めることもできます |
list_attachments | メッセージの添付ファイルを一覧表示します(ID、名前、サイズ、コンテンツタイプ) |
download_attachment | OUTLOOK_MCP_FILE_ROOT 配下のパスに添付ファイルをダウンロードします(既存のファイルへの上書きは拒否します) |
send_mail | メールを送信します |
reply | メッセージに返信します(全員に返信するには reply_all を指定します) |
forward | 任意のコメントを添えて、メッセージを宛先に転送します |
move_message | メッセージを別のフォルダーに移動します |
copy_message | メッセージを別のフォルダーにコピーします |
mark_read | メッセージを既読または未読にします |
flag_message | メッセージにフラグを設定または解除します |
delete_message | メッセージを削除します(削除済みアイテムに移動します。元に戻せます) |
permanent_delete | メッセージを完全に削除します(元に戻せません)。OUTLOOK_MCP_ALLOW_PERMANENT_DELETE=true の場合のみ使用できます |
フォルダー
| ツール | 説明 |
|---|---|
list_folders | 未読およびメッセージの合計数とともに、メールフォルダーを一覧表示します |
create_folder | メールフォルダーを作成します。親フォルダーの下に作成することもできます |
rename_folder | メールフォルダーの名前を変更します |
delete_folder | メールフォルダーを削除します(削除済みアイテムに移動します) |
下書き
| ツール | 説明 |
|---|---|
create_draft | 下書きメッセージを作成します(送信されません) |
update_draft | 下書きの件名や本文を更新します |
add_attachment | ローカルファイル(OUTLOOK_MCP_FILE_ROOT 配下にある、通常のシンボリックリンクではないファイル)を下書きに添付します |
send_draft | 既存の下書きを送信します |
カレンダー
| ツール | 説明 |
|---|---|
list_calendars | ユーザーのカレンダーを一覧表示します |
list_events | イベントを一覧表示します。start/end(ISO 8601)が指定されている場合は、その時間帯のイベントを返します |
search_events | フリーテキストでイベントを検索します |
get_event | 本文、参加者、オンライン会議リンクを含むイベントを1件取得します |
create_event | 参加者やオンライン会議を任意で指定して、カレンダーイベントを作成します |
update_event | 既存のイベントのフィールドを更新します(指定したフィールドのみ変更されます) |
delete_event | カレンダーイベントを削除/キャンセルします |
respond_event | 会議への招待に accept、decline、tentative のいずれかで回答します |
find_availability | 指定した時間帯における、複数の人の予定の空き状況を取得します |
完全削除
permanent_delete ツールは「削除済みアイテム」フォルダーを経由せず、メッセージを復元できない状態で削除します。デフォルトでは無効です。OUTLOOK_MCP_ALLOW_PERMANENT_DELETE が設定されていない場合(または false の場合)、このツールは MCP サーバーに登録されず、ツール一覧にも表示されません。
有効にするには、.mcp.json/config.toml のサーバーの環境ブロックで OUTLOOK_MCP_ALLOW_PERMANENT_DELETE=true を設定します。結果を理解している場合にのみ有効にしてください。元に戻す方法はなく、個人アカウントには「回復可能なアイテム」から復元する手段もありません。
セキュリティ
- トークンキャッシュは認証情報です。
~/.config/outlook-personal-mcp/token_cache.binのファイルには、有効期間の長い更新トークンが含まれています。モード600で書き込まれますが、パスワードと同様に扱ってください。コミットや共有はせず、暗号化されたボリュームに保存してください。 - データはローカルにとどまります。 サーバーは Claude Code/Codex の子プロセスとして、stdio 経由で実行されます。メールボックスの内容は MCP ホストと Microsoft Graph API の間で直接受け渡され、サードパーティのリレーは介在しません。
- アクセスの取り消し。 アクセスを取り消すには、トークンキャッシュファイルを削除するか、https://account.microsoft.com/permissions にアクセスして Azure アプリへの同意を削除します。ポータルから Azure アプリの登録自体を削除することもできます。
- ファイルパス。
download_attachmentはOUTLOOK_MCP_FILE_ROOT配下にのみ書き込み、既存ファイルの上書きを拒否します。add_attachmentはOUTLOOK_MCP_FILE_ROOT配下の通常ファイル(シンボリックリンクを除く)のみを読み込みます。相対パスはそのルート配下として解決されます。ルート外の絶対パスと、シンボリックリンクをたどるパスは拒否されます。どちらのツールもOUTLOOK_MCP_MAX_FILE_BYTESを適用します。ファイルシステムにアクセスするツール呼び出しを確定する前に、これらのパスを確認してください。
開発
git clone https://github.com/salahawad/outlook-personal-mcp
cd outlook-personal-mcp
uv venv && uv pip install -e ".[dev]"
uv run pytest
uv run ruff check .
プライバシーポリシー
このサーバーはすべてお使いのマシン上で実行され、データはお使いのマシンと Microsoft Graph API の間でのみ送信されます。サードパーティのリレーやテレメトリはなく、メンテナーがデータを受け取ることもありません。OAuth トークンはローカルの ~/.config/outlook-personal-mcp/token_cache.bin にキャッシュされます(モード 600)。プライバシーポリシーの全文は PRIVACY.md をご覧ください。
ライセンス
MIT — LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。