Softeria/ms-365-mcp-server
A Model Context Protocol (MCP) server for interacting with Microsoft 365 and Microsoft Office services through the Graph API
概要
ms‑365‑mcp‑server は、Microsoft 365 向けの Model Context Protocol (MCP) を実装する Node‑JS サーバーです。Microsoft Graph API と通信し、Graph の機能を、LLM を搭載したアシスタント(Claude Desktop、Open WebUI など)が呼び出せる「ツール」のセットとして公開します。実際には、npx @softeria/ms-365-mcp-server でパッケージを実行すると、サーバーがシンプルな JSON(または実験的な TOON)リクエストを Graph 呼び出しに変換し、同じ軽量フォーマットで Graph のレスポンスを返します。
想定ユーザー
- LLM ベースのアシスタント – ユーザーの Outlook メール、カレンダー、OneDrive ファイル、Teams チャット、SharePoint サイトなどを読み取り・操作する必要があるもの。
- 企業 – 許可する OAuth スコープを制限しながら、Microsoft 365 の機能の管理されたサブセットを AI エージェントに公開したい場合。
- 開発者 – 低レベルの HTTP コードを書かずに、Graph への安定した宣言的インターフェースを必要とするカスタムエージェントやボットを構築する場合。
主な機能(README に記載の内容)
| 機能 | 説明 |
|---|---|
| 認証 | Microsoft Authentication Library (MSAL) を使用して OAuth トークンを取得します。スコープは有効なツールから自動的に導出されますが、--allowed‑scopes で絞り込んだり、--extra‑scopes で拡張したりできます。 |
| ツールサーフェス | 300 以上のツールがあり、それぞれが Graph エンドポイントに 1 対 1 で対応しています。ツールは src/endpoints.json で定義されています。個人アカウント用ツール(メール、カレンダー、OneDrive など)はデフォルトで有効で、組織モード用ツール(Teams、SharePoint、ユーザー管理など)は --org‑mode で有効になります。 |
| プリセットと動的検出 | プリセット(例: mail)と正規表現ベースの --enabled‑tools を使用してツールセットを縮小でき、トークン使用量を削減し、プライバシーを向上させます。 |
| 読み取り専用モード | 書き込み操作を防ぎ、安全なサンドボックス環境での展開に役立ちます。 |
| 出力形式 | デフォルトは JSON。実験的な TOON(Token‑Oriented Object Notation)は、均一なリストデータでトークン数を 30‑60% 削減します。 |
| スコープフィルタリング | --allowed‑scopes(または MS365_MCP_ALLOWED_SCOPES)がホワイトリストとして機能し、必要な Graph スコープがカバーされていないツールは非表示になります。 |
| ユーザーフィールドフィルタリング | --user‑fields は、返されるユーザープロファイルプロパティを制限し、データ最小化の追加レイヤーを提供します。 |
| プロキシサポート | MS365_MCP_GRAPH_BASE_URL を設定すると、Graph トラフィックをカスタムプロキシ経由でルーティングできます。 |
| 展開オプション | CLI でローカル実行、HTTP サーバー(--http)、Docker、リバースプロキシの背後(--public‑url)で実行できます。OAuth の動的クライアント登録をサポートします。 |
| 統合例 | Claude Desktop、Claude Code CLI、Open WebUI の詳細なスニペットがあり、MCP サーバーをツールソースとして追加する方法を示しています。 |
仕組み(高レベルのフロー)
- サーバーを起動 –
npx @softeria/ms-365-mcp-server(必要に応じて--org-mode、--http、--toonなどのフラグを追加)。 - 認証 – MSAL がブラウザを開き(または OBO を使用)、有効なツールに必要なスコープのアクセストークンを取得します。
- ツールリクエスト – LLM クライアントがツール名とパラメータ(例:
list-mail-messages)を指定してリクエストを送信します。 - サーバーが変換 – サーバーは
endpoints.jsonで対応する Graph エンドポイントを検索し、HTTP リクエストを構築し、$select/$filterルール(ユーザーフィールド制限を含む)を適用して、Microsoft Graph に転送します。 - レスポンス – Graph の JSON は必要に応じて投影/フィルタリングされ、JSON または TOON でクライアントに返されます。
不要な場合
- 数回の Graph 呼び出しだけであれば、SDK で直接記述する方が簡単な場合があります。
- バンドル済みツールを超える本格的な Graph SDK 機能(バッチ処理、デルタクエリなど)が必要なプロジェクト。
- Node 20 をインストールできない、または別の MCP プロセスを実行できない環境。
クイックスタートチェックリスト
- Node 20+ をインストールします。
npx @softeria/ms-365-mcp-serverを実行します(仕事・学校向け機能には--org-modeを追加)。- Claude Desktop または Open WebUI の統合手順に従って、アシスタントを
http://localhost:3000/mcp(または Docker で公開されたポート)に向けます。 --list-permissionsを使用して、要求される Graph スコープを確認し、必要に応じて--allowed-scopesで調整します。- (オプション)トークン効率の良い出力のために
--toonで TOON を有効にします。
上記の情報はすべてリポジトリの README から直接取得したものであり、追加の機能は推測されていません。
関連
- プロジェクト
- プロジェクト
- Dispatch
- プロジェクト
- プロジェクト