mcpField
M
MCP Desktop - Microsoft Cloud Platform Desktop Client

MCP Desktop - Microsoft Cloud Platform Desktop Client

ローカル
github.com/Aanerud生産性5530 週間前に更新

MCP Desktop - Microsoft Cloud Platform Desktop Client について

Microsoft Graph 経由で Microsoft 365 に接続するローカル実行型の MCP サーバーです。メール、カレンダー、ファイル、Teams を扱えます。モックではなく実際のテナントで AI エージェントに操作させたいチーム向けです。

主な機能

  1. 0112 モジュールにまたがる 117 のツール
  2. 02Excel、Word、PowerPoint のファイル操作
  3. 03ユーザーごとに分離されたマルチユーザー対応
  4. 04保存時に暗号化されたトークン

活用シーン

  1. 01テストテナントでのメール送信と会議設定
  2. 02Excel による予算表の作成
  3. 03Teams チャネルのメッセージと会議記録の取得

MCP 対応

Microsoft 365 の操作を MCP ツールとして公開します。ローカルの MCP アダプターがクライアントとサーバーを接続し、サーバーが Microsoft Graph API を呼び出します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

MseeP.ai Security Assessment Badge

MCP Microsoft Office

1 つの MCP サーバー。複数ユーザー。テストテナント上で実際の Microsoft 365 トラフィックを利用できます。


課題

テストテナントは空のままです。静的なテストデータでは、実際のワークフローを検証できません。実際のメール送信、会議のスケジュール設定、Teams チャネルでの共同作業を行うエージェントが必要な場合、モックやスタブでは不十分です。

このプロジェクトで解決できること

このプロジェクトは、Graph API を通じて、MCP 互換の AI クライアントを Microsoft 365 に接続します。各エージェントは別々のテナントユーザーとして認証し、実際のデータに対して実際の操作を行います。

  • 117 個のツールを 12 のモジュールに搭載:Mail、Calendar、Files、Excel、Word、PowerPoint、Teams、Contacts、To-Do、Groups、People、Search
  • マルチユーザー対応:1 つのサーバーでチーム全体をサポートし、各ユーザーのデータは分離されます
  • 実際の Graph API 呼び出し:すべての操作でモックではなく、実際のテナントにアクセスします
  • 安全:トークンは保存時に暗号化され、サードパーティのサーバーに認証情報は保存されません

アーキテクチャ

                    ┌──────────────────┐
                    │  MCP Client      │
                    │  (Claude, etc.)  │
                    └────────┬─────────┘
                             │ JSON-RPC (stdin/stdout)
                    ┌────────▼─────────┐
                    │  MCP Adapter     │
                    │  (runs locally)  │
                    └────────┬─────────┘
                             │ HTTP + Bearer Token
                    ┌────────▼─────────┐
                    │  MCP Server      │
                    │  (local or       │
                    │   remote)        │
                    └────────┬─────────┘
                             │ Microsoft Graph API
                    ┌────────▼─────────┐
                    │  Microsoft 365   │
                    │  (your tenant)   │
                    └──────────────────┘

3 つの要素:

  1. MCP クライアント -- 操作する AI
  2. MCP アダプター -- MCP プロトコルを HTTP リクエストに変換する Node.js プロセス(クライアントと同じマシン上で動作します)
  3. MCP サーバー -- 認証を処理し、Microsoft Graph API を呼び出します(ローカルまたはリモートサーバー上で動作します)

アクセス許可

サーバーには、Microsoft Graph の委任アクセス許可が 18 個必要です。このうち 12 個は管理者の同意なしで利用できます。残り 6 個はテナント管理者による同意が必要です。

管理者の同意が不要
アクセス許可利用可能になるツール
User.Read認証、ユーザープロファイル
Mail.ReadWritereadMail、readMailDetails、markEmailRead、flagMail、getMailAttachments、addMailAttachment、removeMailAttachment
Mail.SendsendMail、replyToMail
Calendars.ReadWritegetEvents、createEvent、updateEvent、cancelEvent、acceptEvent、tentativelyAcceptEvent、declineEvent、getAvailability、findMeetingTimes、getRooms、getCalendars、addAttachment、removeAttachment
Files.ReadWrite.AlllistFiles、uploadFile、downloadFile、getFileMetadata、getFileContent、setFileContent、updateFileContent、createSharingLink、getSharingLinks、removeSharingPermission、listChannelFiles、uploadFileToChannel、readChannelFile、すべての Excel ワークブックツール、すべての Word/PowerPoint ツール
Contacts.ReadWritelistContacts、getContact、createContact、updateContact、deleteContact、searchContacts
Tasks.ReadWritelistTaskLists、getTaskList、createTaskList、updateTaskList、deleteTaskList、listTasks、getTask、createTask、updateTask、deleteTask、completeTask
Chat.ReadWritelistChats、createChat、getChatMessages、sendChatMessage
Channel.ReadBasic.AlllistTeamChannels、getChannelMessages
ChannelMessage.SendsendChannelMessage、replyToMessage
Channel.CreatecreateTeamChannel
OnlineMeetings.ReadWritecreateOnlineMeeting、getOnlineMeeting、listOnlineMeetings、getMeetingByJoinUrl
管理者の同意が必要
アクセス許可追加で利用可能になるツール
User.Read.AllTeams 全体でのユーザー ID の解決、People 検索
People.Read.AllfindPeople、getRelevantPeople、getPersonById
Group.Read.AlllistGroups、getGroup、listGroupMembers、listMyGroups
ChannelMember.ReadWrite.AlladdChannelMember
ChannelMessage.Read.Allチャネルのメッセージ履歴の読み取り
OnlineMeetingTranscript.Read.AllgetMeetingTranscripts、getMeetingTranscriptContent

管理者の同意がない場合は、Mail、Calendar、Files、Excel ワークブック、Word ドキュメント、PowerPoint プレゼンテーション、Contacts、To-Do、Chat、および Teams チャネルの基本操作を利用できます。管理者の同意がある場合は、People ディレクトリ検索、Groups、チャネルメンバー管理、会議のトランスクリプトが追加されます。


クイックスタート

前提条件
  • Node.js 18+(ダウンロード)
  • Claude Desktop(ダウンロード)またはその他の MCP クライアント
  • Microsoft 365 アカウント(職場、学校、または個人用)
手順 1:Azure アプリの登録
  1. Azure Portal > Microsoft Entra ID > App registrations > New registration に移動します
  2. MCP-Microsoft-Office という名前を付け、ご希望のアカウントの種類で登録します
  3. Application (client) ID と Directory (tenant) ID をコピーします
  4. API permissions > Add a permission > Microsoft Graph > Delegated permissions に移動します
  5. 上記の 18 個のアクセス許可を追加します
  6. テナント管理者の場合は、Grant admin consent をクリックします
  7. Authentication > Add a platform > Web に移動します
    • リダイレクト URI:http://localhost:3000/api/auth/callback
    • Allow public client flows を有効にします
手順 2:クローンと設定
git clone https://github.com/Aanerud/MCP-Microsoft-Office.git
cd MCP-Microsoft-Office
npm install

.env.example を .env にコピーし、Azure アプリの詳細を入力します:

MICROSOFT_CLIENT_ID=your-client-id
MICROSOFT_TENANT_ID=your-tenant-id
手順 3:サーバーを起動して認証
npm run dev:web

ブラウザーで http://localhost:3000 を開きます。Login with Microsoft をクリックしてサインインし、アクセス許可を付与します。次に、Generate MCP Token をクリックしてトークンをコピーします。

手順 4:Claude Desktop を設定

Claude Desktop の設定を編集します:

macOS:~/Library/Application Support/Claude/claude_desktop_config.json Windows:%APPDATA%\Claude\claude_desktop_config.json

Claude Desktop では、MCP サーバーごとのツール数に実用上の上限があり、約 55 個です。このプロジェクトでは 117 個のツールを公開しているため、同じアダプターとバックエンドを共有する 3 つのサーバーに分けています:

{
  "mcpServers": {
    "microsoft-365": {
      "command": "node",
      "args": ["/path/to/MCP-Microsoft-Office/mcp-adapter.cjs"],
      "env": {
        "MCP_SERVER_URL": "http://localhost:3000",
        "MCP_BEARER_TOKEN": "paste-your-token-here",
        "MCP_MODULES": "search,mail,calendar,files,people,contacts,groups,query"
      }
    },
    "microsoft-365-teams": {
      "command": "node",
      "args": ["/path/to/MCP-Microsoft-Office/mcp-adapter.cjs"],
      "env": {
        "MCP_SERVER_URL": "http://localhost:3000",
        "MCP_BEARER_TOKEN": "paste-your-token-here",
        "MCP_MODULES": "teams,todo"
      }
    },
    "microsoft-365-office": {
      "command": "node",
      "args": ["/path/to/MCP-Microsoft-Office/mcp-adapter.cjs"],
      "env": {
        "MCP_SERVER_URL": "http://localhost:3000",
        "MCP_BEARER_TOKEN": "paste-your-token-here",
        "MCP_MODULES": "excel,word,powerpoint,files"
      }
    }
  }
}

MCP_MODULES は、アダプターが公開するモジュールを絞り込みます。省略すると、117 個すべてのツールが公開されます(ツール数の上限がないクライアントで利用できます)。

env ブロックに MCP_DEBUG=1 を設定すると、診断ログが stderr に出力されます。ツールのディスパッチに関する問題のトラブルシューティングに役立ちます。

Claude Desktop を再起動します。「今日のカレンダーには何がありますか?」や「予算表を含む Excel ブックを作成して」と尋ねてみてください。


ツール(117)

メール(9)
ツール説明
readMail受信トレイのメッセージを読み取る
sendMailメールを送信する
replyToMailメールに返信する
readMailDetailsメールの全文を取得する
markEmailReadメールを既読または未読にする
flagMailメールにフラグを付ける、または解除する
getMailAttachmentsメールの添付ファイルを一覧表示する
addMailAttachmentメールに添付ファイルを追加する
removeMailAttachmentメールから添付ファイルを削除する
カレンダー(13)
ツール説明
getEventsカレンダーの予定を取得する
createEvent会議または予定を作成する
updateEvent既存の予定を変更する
cancelEvent予定をキャンセルする
acceptEvent会議への招待を承諾する
tentativelyAcceptEvent仮承諾する
declineEvent会議への招待を辞退する
getAvailability予定あり/なしの時間を確認する
findMeetingTimes最適な会議の時間帯を探す
getRooms会議室を探す
getCalendarsすべてのカレンダーを一覧表示する
addAttachment予定に添付ファイルを追加する
removeAttachment予定の添付ファイルを削除する
ファイル(10)
ツール説明
listFilesOneDrive のファイルを一覧表示する
uploadFileファイルをアップロードする
downloadFileファイルをダウンロードする
getFileMetadataファイル情報を取得する
getFileContentファイルの内容を読み取る
setFileContentファイルの内容を書き込む
updateFileContent既存のファイルを更新する
createSharingLink共有リンクを作成する
getSharingLinks共有リンクを一覧表示する
removeSharingPermission共有アクセス権を削除する
Excel (30)

OneDrive または SharePoint に保存されている Excel ブックを、ファイルをダウンロードせずに直接操作できます。すべての操作は、透過的なセッション管理により Microsoft Graph のブック API を通じて行われます。

ツール説明
createWorkbookSessionブックのセッションを開きます(永続または一時)
closeWorkbookSessionアクティブなブックのセッションを閉じます
listWorksheetsブック内のすべてのワークシートを一覧表示します
addWorksheet新しいワークシートを追加します
getWorksheet名前または ID でワークシートを取得します
updateWorksheetワークシートの名前変更、位置変更、または非表示化を行います
deleteWorksheetワークシートを削除します
getRangeセルの値、数式、書式を読み取ります
updateRangeセル範囲に値を書き込みます
getRangeFormat書式(フォント、塗りつぶし、罫線)を取得します
updateRangeFormat書式(太字、色、数値形式)を設定します
sortRange範囲内のセルを並べ替えます
mergeRangeセルを結合します
unmergeRangeセルの結合を解除します
listTablesワークシート内のすべてのテーブルを一覧表示します
createTable範囲からテーブルを作成します
updateTableテーブルの名前変更またはスタイル変更を行います
deleteTableテーブルを削除します
listTableRowsテーブル内のすべての行を一覧表示します
addTableRowテーブルに行を追加します
deleteTableRowインデックスを指定して行を削除します
listTableColumnsテーブル内のすべての列を一覧表示します
addTableColumnテーブルに列を追加します
deleteTableColumn列を削除します
sortTable列を指定してテーブルを並べ替えます
filterTableテーブルの列にフィルターを適用します
clearTableFilter列のフィルターを解除します
convertTableToRangeテーブルを通常の範囲に戻します
callWorkbookFunction300 種類以上の Excel 関数(SUM、VLOOKUP、PMT など)を呼び出します
calculateWorkbookすべての数式を再計算します
Word (5)

Word 文書の作成、読み取り、変換を行います。文書は構造化された JSON から作成され、OneDrive に保存されます。読み取りでは、複数のライブラリを順に試すフォールバックチェーンを使用します。mammoth(.docx に最適な HTML)→ word-extractor(.doc と .docx の両方に対応)→ webUrl フォールバックの順です。バイナリのダウンロードには Graph beta の /contentStream エンドポイントを使用し、信頼性の高いバイナリ転送を実現します。

ツール説明
createWordDocument構造化コンテンツ(見出し、段落、テーブル、リスト、画像)から .docx を作成します
readWordDocument文書を HTML とプレーンテキストで読み取ります
getWordDocumentMetadataタイトル、作成者、日付、キーワードを取得します
getWordDocumentAsHtml文書の内容を HTML に変換します
convertDocumentToPdfWord 文書を PDF に変換します

注記: 一部の SharePoint テナントでは、アップロードされた .docx ファイルがアップロードから数秒以内に OLE2 バイナリ形式に変換されます。この場合、クライアント側の解析ライブラリではファイルを読み取れません。サーバーは適切にフォールバックし、ユーザーがブラウザーで文書を開けるよう webUrl を返します。

PowerPoint (4)

PowerPoint プレゼンテーションの作成、読み取り、変換を行います。プレゼンテーションは構造化されたスライドデータから作成され、OneDrive に保存されます。読み取りでは Graph の HTML 変換を使用し、スライド単位でテキストを抽出する際は jszip にフォールバックします。

ツール説明
createPresentationタイトル、コンテンツ、空白のスライドを含む .pptx を作成します
readPresentationスライドの内容(各スライドのテキスト要素)を読み取ります
getPresentationMetadataタイトル、作成者、スライド数、日付を取得します
convertPresentationToPdfプレゼンテーションを PDF に変換します
Teams(21)
ツール説明
listChatsTeams のチャットを一覧表示します
createChat新しいチャットを作成します
getChatMessagesチャットメッセージを読み取ります
sendChatMessageチャットメッセージを送信します
listJoinedTeams自分のチームを一覧表示します
listTeamChannelsチームのチャネルを一覧表示します
createTeamChannelチャネルを作成します
addChannelMemberチャネルにメンバーを追加します
getChannelMessagesチャネルのメッセージを読み取ります
sendChannelMessageチャネルに投稿します
replyToMessageチャネルのメッセージに返信します
listChannelFilesチャネル内のファイルを一覧表示します
uploadFileToChannelチャネルにファイルをアップロードします
readChannelFileチャネルのファイルを読み取ります
createOnlineMeetingTeams 会議を作成します
getOnlineMeeting会議の詳細を取得します
listOnlineMeetingsオンライン会議を一覧表示します
getMeetingByJoinUrl参加 URL から会議を検索します
getMeetingTranscripts会議の文字起こしを取得します
getMeetingTranscriptContent文字起こしの内容を読み取ります

(注:addChannelMember はプライベートチャネルにのみ適用されます。標準チャネルには、チームの全メンバーが自動的に含まれます。)

連絡先(6)
ツール説明
listContacts連絡先を一覧表示します
getContact連絡先の詳細を取得します
createContact連絡先を作成します
updateContact連絡先情報を更新します
deleteContact連絡先を削除します
searchContacts連絡先を検索します
To-Do(11)
ツール説明
listTaskListsタスクリストを一覧表示します
getTaskListタスクリストを取得します
createTaskListタスクリストを作成します
updateTaskListタスクリストの名前を変更します
deleteTaskListタスクリストを削除します
listTasksタスクを一覧表示します
getTaskタスクの詳細を取得します
createTaskタスクを作成します
updateTaskタスクを更新します
deleteTaskタスクを削除します
completeTaskタスクを完了としてマークします
グループ(4)
ツール説明
listGroupsMicrosoft 365 グループを一覧表示します
getGroupグループの詳細を取得します
listGroupMembersグループのメンバーを一覧表示します
listMyGroups自分のグループを一覧表示します
People(3)
ツール説明
findPeopleディレクトリを検索します
getRelevantPeopleよく連絡する相手を取得します
getPersonById人物の詳細を取得します
検索(1)
ツール説明
searchメール、ファイル、イベント、チャットメッセージを横断して統合検索します

マルチユーザー

各ユーザーは個別に認証します。サーバーはユーザー ID に基づいて、すべてのデータを分離します。

  Alice ([email protected])          Bob ([email protected])
  ├─ Her own Microsoft tokens        ├─ His own Microsoft tokens
  ├─ Her own session                  ├─ His own session
  └─ Claude Desktop (her laptop)     └─ Claude Desktop (his PC)

              Complete data isolation.
         Alice never sees Bob's data.

複数のエージェントを使った自動テストでは、ROPC(リソースオーナーパスワード資格情報)フローを使用して、プログラムから認証します。

# Start the server
npm run dev:web

# Run the E2E test suite (authenticates 3 users via ROPC)
node tests/run-all.cjs

テストスイートは複数のユーザーを認証してから、12 個のモジュールにまたがる 117 個すべてのツールと、5 個のモジュール横断ワークフローを実行します。実装の全容については tests/ を参照してください。


E2E テストスイート

このプロジェクトには、117 個すべてのツールを網羅する包括的なテストスイートが含まれています。

# Run all tests (requires server running)
node tests/run-all.cjs

# Run a single module
node tests/run-all.cjs --bucket mail --buckets-only

# Run only workflows
node tests/run-all.cjs --workflows-only

テスト構成:

tests/
  lib/           Shared auth, HTTP client, reporter
  buckets/       One file per module (12 files, 117 tools)
  workflows/     Cross-module tests (5 files)
  run-all.cjs    Master runner

テストは ROPC を使用して認証するため、手動でトークンを管理する必要がなく、約 100 秒で実行されます。


環境変数

.env.example を .env にコピーし、次の設定を行います。

変数必須説明
MICROSOFT_CLIENT_IDはいAzure アプリのクライアント ID
MICROSOFT_TENANT_IDはいAzure テナント ID
MICROSOFT_REDIRECT_URIいいえOAuth コールバック URL(デフォルト:http://localhost:3000/api/auth/callback)
DEVICE_REGISTRY_ENCRYPTION_KEY本番環境トークン保存用の 32 バイト暗号化キー
JWT_SECRET本番環境JWT トークンの署名に使用するシークレット
CORS_ALLOWED_ORIGINS本番環境カンマ区切りの許可オリジン
PORTいいえサーバーポート(デフォルト:3000)
NODE_ENVいいえdevelopment または production

デプロイ

ローカル(利用開始時に推奨)
npm install
npm run dev:web
Azure App Service

GitHub Actions を使った CI/CD デプロイについては、docs/azure-deployment.md を参照してください。


セキュリティ

  • 暗号化ストレージ:すべての Microsoft トークンは、保存時に AES-256 で暗号化されます
  • クライアントシークレットなし:デスクトップ認証にはパブリッククライアントフロー(PKCE)を使用します
  • トークンの分離:各ユーザーのトークンは、異なる暗号化キーを使用して個別に保存されます
  • レート制限:組み込みのレート制限により、不正利用を防止します
  • CORS 保護:本番環境ではオリジンの許可リストを使用します
  • セッションの有効期限:セッションは24時間後に期限切れになります
本番環境のチェックリスト
  • NODE_ENV=production を設定します
  • DEVICE_REGISTRY_ENCRYPTION_KEY(32バイト)を設定します
  • JWT_SECRET(強力なランダム文字列)を設定します
  • CORS_ALLOWED_ORIGINS を設定します
  • 有効な証明書を使用して HTTPS を設定します

プロジェクト構成

MCP-Microsoft-Office/
├── mcp-adapter.cjs          MCP protocol adapter (runs locally with Claude Desktop)
├── src/
│   ├── api/                 Express routes and controllers
│   ├── auth/                MSAL authentication (OAuth2, ROPC, token exchange)
│   ├── core/                Services (cache, storage, tools, error handling)
│   ├── graph/               Microsoft Graph API services
│   │   ├── graph-client.cjs   HTTP client with retry, binary support, sessions
│   │   ├── files-service.cjs  OneDrive file operations
│   │   ├── excel-service.cjs  Workbook API (sessions, ranges, tables, functions)
│   │   ├── word-service.cjs   Word create/read (docx + mammoth + word-extractor)
│   │   └── powerpoint-service.cjs  PPT create/read (pptxgenjs + jszip)
│   └── modules/             Feature modules (mail, calendar, excel, word, powerpoint, etc.)
├── public/                  Web UI for authentication
└── tests/                   E2E test suite (gitignored)

コントリビューション

  1. リポジトリをフォークします
  2. 機能ブランチを作成します
  3. 変更を加えます
  4. プルリクエストを送信します

ライセンス

MIT ライセンス -- 詳しくは LICENSE ファイルをご覧ください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。