Minerva MCP — Microsoft 365 & Azure について
Minerva MCP は、Graph、ARM、Search、PowerShell コマンドレットを通じて Microsoft 365 と Azure の照会・管理を AI アシスタントに提供します。書き込み操作をリスク分類し、自動実行の範囲を超える操作には確認を求めます。
主な機能
- 01Microsoft Graph と Azure ARM の呼び出し
- 02Microsoft Search とテナント情報の照会
- 03Exchange、SharePoint、Teams、Purview のコマンドレット実行
- 04書き込み操作のリスク分類
- 05自動実行以外の書き込みに確認を要求
- 06ツールの制限または読み取り専用モード
活用シーン
- 01テナントのセキュリティ状況とポリシーを調査
- 02Graph で扱えない Exchange 設定を管理
- 03SharePoint、Teams、Purview を確認・管理
- 04テナント変更前に承認を求める
MCP 対応
MCP サーバーは、Graph、ARM、PowerShell 操作を含む Microsoft 365 と Azure の管理ツールを MCP クライアントに公開します。自動実行の範囲を超える書き込みには、MCP の `input_required` フローで確認を求めます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y minerva-mcpAZURE_TENANT_IDEntra tenant id. Only needed for unattended app-only sign-in; omit it to sign in interactively with a device code.AZURE_CLIENT_IDApplication (client) id. Defaults to the public Microsoft Graph PowerShell client, so it is optional for trying the server out.AZURE_CLIENT_SECRETシークレットClient secret for app-only authentication. Leave unset to sign in interactively instead.MINERVA_SHAREPOINT_URLSharePoint root URL, e.g. https://contoso.sharepoint.com. Required only by the SharePoint/PnP tool when PowerShell runs locally.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Minerva MCP
AI アシスタント向けの Microsoft 365 と Azure の管理 — Microsoft Graph では対応できない領域も含みます。
Claude、Copilot、VS Code、または任意の MCP クライアントが、自然言語で Microsoft 365 テナントを照会・管理できるMCPサーバーです。
新たな Microsoft 365 MCP サーバーが必要な理由
すでに優れたものがあり、このサーバーはそれらに取って代わろうとするものではありません。
| Lokka | ms-365-mcp-server | Minerva MCP | |
|---|---|---|---|
| Microsoft Graph | ✅ | ✅ 300+ ツール | ✅ 汎用呼び出し |
| Azure Resource Manager | ✅ | — | ✅ |
| Exchange Online コマンドレット | — | — | ✅ |
| SharePoint / PnP コマンドレット | — | — | ✅ |
| Teams Admin コマンドレット | — | — | ✅ |
| Purview / コンプライアンス コマンドレット | — | — | ✅ |
| アクションごとのリスク分類 | — | — | ✅ |
| 書き込み前の人による承認 | — | 読み取り専用スイッチ | ✅ プロトコルに標準搭載 |
| MCP 2026-07-28(ステートレス) | — | — | ✅ |
Graph だけが必要なら、Lokka または ms-365-mcp-server をお使いください。 どちらも非常に優れており、より成熟していて、広く利用されています。特に Lokka は Microsoft Entra のプロダクトマネージャーが開発しています。
誰もがいずれ直面する壁にぶつかったときは、このサーバーをご利用ください。Microsoft 365 管理の大部分には Graph API がありません。 メールボックスのアクセス許可、トランスポートルール、メッセージ追跡、保持ポリシー、秘密度ラベル、Teams の通話ポリシー、SharePoint の用語ストア、テナント全体の Exchange 設定 — これらは PowerShell にしかありません。このサーバーは、それらを公開し、リスク分類を行い、書き込みを伴う操作の前に確認ステップを設けています。
仕組み
flowchart LR
A["AI client<br/>Claude · VS Code · Copilot Studio"]
B["minerva-mcp"]
C{"Risk<br/>classifier"}
D["Human<br/>confirmation"]
G["Microsoft Graph<br/>Azure ARM · Search"]
P["PowerShell 7<br/>Exchange · PnP · Teams · Purview"]
M["Microsoft<br/>authorizes the token"]
A -->|"stdio or HTTP"| B
B --> C
C -->|"read"| G
C -->|"write"| D
D -->|"signed mandate"| G
D -->|"signed mandate"| P
C -->|"read"| P
G --> M
P --> M
読み取りはそのまま実行されます。書き込みは分類器で停止し、アクションとその影響を説明するinput_requiredとして戻され、確認後にのみ実行されます。最終的な判断は引き続き Microsoft が行います。サーバーはトークンを転送するだけで、アクセスを許可することはありません。
インストール
クローンする必要はありません。クライアントに追加し、初回利用時にサインインしてください。
Claude Desktop
claude_desktop_config.json:
{
"mcpServers": {
"minerva": {
"command": "npx",
"args": ["-y", "minerva-mcp", "--stdio"]
}
}
}
VS Code
.vscode/mcp.json:
{
"servers": {
"minerva": {
"type": "stdio",
"command": "npx",
"args": ["-y", "minerva-mcp", "--stdio"]
}
}
}
読み取り専用やアプリ専用の設定を含む詳細は、examples/をご覧ください。
初回のツール呼び出し時に、サーバーはデバイスコードのプロンプトをstderr に出力します。リンクを開いてコードを入力すれば完了です。試すのにアプリの登録は不要です。既定では Microsoft Graph PowerShell のパブリッククライアントを使用します。
要件: Node.js 20 以降。PowerShell ツールを使用する場合は、PowerShell 7 以降と、使用するモジュール(ExchangeOnlineManagement、PnP.PowerShell、MicrosoftTeams)が必要です。
質問できること
「部署外のユーザーにフルアクセスが委任されているメールボックスはどれですか?」 →
Get-MailboxPermissionを使うexecute_exchange_online。同等の Graph 機能はありません。
「MFA を必須としていない条件付きアクセス ポリシーをすべて表示し、Secure Score も教えてください。」 →
generate_security_report+microsoft_graph_call。
「請求用の共有メールボックスを作成し、財務チームにアクセス権を付与してください。」 → 書き込みとして分類されます。サーバーはアクションとその影響を説明し、 実行前に確認を待ちます。
ツール
| ツール | 機能 | Graph 相当? |
|---|---|---|
microsoft_graph_call | Microsoft Graph のあらゆる呼び出し(v1.0 または beta) | — |
azure_arm_call | Azure Resource Manager のあらゆる呼び出し | — |
microsoft_search | 統合 Microsoft Search | — |
get_tenant_context | 組織、ライセンス、Secure Score | — |
generate_security_report | テナントのセキュリティ態勢 | — |
execute_exchange_online | Exchange Online のコマンドレット | ❌ なし |
execute_pnp_sharepoint | PnP PowerShell(SharePoint)のコマンドレット | ❌ なし |
execute_teams_admin | Teams Admin のコマンドレット | ❌ なし |
execute_purview_compliance | Purview/コンプライアンスのコマンドレット | ❌ なし |
--tools=microsoft_graph_call,get_tenant_context で利用範囲を制限するか、
--read-only ですべての書き込みを禁止します。
承認が必要な理由、そして省略できない理由
モデルは信頼できないコンテンツ(メールの件名、サイト名、ドキュメントなど)を読み、呼び出すツールを決定します。プロンプトインジェクションは仮定上の話ではなく、ここで扱うツールはメールボックスを削除することもできます。
そのため、書き込みはそのまま実行されません。各アクションは、HTTP メソッドとパス(または PowerShell の動詞)に基づいて auto、confirmed、critical に分類されます。auto を超えるアクションがあると、サーバーは
MCP の Multi Round-Trip Requests に従って input_required を返します。クライアントには実行内容とその影響が表示され、確認後に初めて実行されます。
確認は、呼び出し元、メソッド、引数のダイジェストに紐づく署名付きの許可証(HMAC)で、有効期間は 5 分です。/users/1 を削除するために取得した許可証を /users/999 に流用することはできず、他のユーザーが提示することもできません。
クライアントがエリシテーションに対応していない場合、何も暗黙に実行されません。サーバーは、アクションに確認が必要であることを示すエラーを返します。
オプション
すべてのフラグには、対応する環境変数があります。
トランスポート
| フラグ | 環境変数 | デフォルト | |
|---|---|---|---|
--stdio | MINERVA_TRANSPORT=stdio | HTTP | stdin/stdout を介した JSON-RPC |
--port=<n> | MCP_SERVER_PORT | 3001 | HTTP のリッスンポート |
stdio モードでは、すべてのログが stderr に出力されます。stdout はプロトコル専用です。
認証
| フラグ | 環境変数 | |
|---|---|---|
--auth=<mode> | MINERVA_AUTH_MODE | bearer、device-code、client-secret |
--tenant=<id> | MINERVA_TENANT_ID、AZURE_TENANT_ID | Entra テナント |
--client-id=<id> | MINERVA_CLIENT_ID、AZURE_CLIENT_ID | アプリケーション |
--client-secret=<s> | AZURE_CLIENT_SECRET | アプリ専用シークレット |
デフォルトは、HTTP では bearer(呼び出し元がトークンを渡します)、stdio では
device-code です。シークレットが設定されている場合は client-secret になります。リソースごとに個別のトークンが必要です。Graph、ARM、Exchange、Purview、SharePoint、Teams でオーディエンスを共有することはありません。
スコープ
| フラグ | 環境変数 | |
|---|---|---|
--read-only | MINERVA_READ_ONLY | すべての書き込みを拒否 |
--tools=<a,b,c> | MINERVA_TOOLS | 指定したツールのみを登録 |
--ps=<mode> | MINERVA_PS_EXECUTOR | auto、redis、local、none |
--sharepoint-url=<url> | MINERVA_SHAREPOINT_URL | ローカルで PnP ツールを使用する際に必須 |
--allowed-origins=<a,b> | MINERVA_ALLOWED_ORIGINS | /mcp で許可するブラウザーのオリジン |
--redis-url=<url> | REDIS_URL | 外部 PowerShell ランナー用のキュー |
| — | MINERVA_MRTR_SECRET | 承認許可証の署名キー |
| — | MINERVA_PWSH_PATH | pwsh のパス |
| — | MINERVA_REQUIRE_VERIFIED_TOKENS | 署名を検証できないトークンを拒否 |
--read-only は承認ゲートと同じリスク分類器を使用するため、HTTP メソッドだけでなく PowerShell コマンドレットも対象になります。
プロトコルのサポート
MCP 2026-07-28 をサポートし、ハンドシェイク時代のクライアントにも 2027-07-28 まで対応します。
ステートレスなコア(リクエストごとの _meta、initialize なし、Mcp-Session-Id なし) | ✅ |
server/discover | ✅ |
複数のラウンドトリップを伴うリクエスト(input_required) | ✅ — これが承認の仕組みです |
MCP-Protocol-Version / Mcp-Method / Mcp-Name ヘッダー、base64 センチネル | ✅ 本文と照合して検証 |
リストの ttlMs / cacheScope | ✅ 常に private |
バージョンネゴシエーション(対応バージョンを示す -32022) | ✅ |
Origin の検証(DNS リバインディング対策) | ✅ |
| MCP エンドポイントへの GET / DELETE | ✅ 405。このリビジョンで削除 |
ハンドシェイク時代(initialize) | ✅ 2027-07-28 まで |
1 つのエンドポイントで両世代に対応し、リクエスト本文によってどちらかを判定します。どちらも 同じツールレジストリを読み込み、テストで固定されたコントラクトと照合するため、 互いに乖離することはありません。
セキュリティ
デプロイする前に SECURITY.md をお読みください。重要なのは次の 3 点です。
- このサーバーは権限を付与しません。 Microsoft のトークンを転送し、認可するのは Microsoft です。制限付きトークンを使えば、サーバーの権限も制限されます。
- Graph のトークンは第三者が検証できません — Graph だけが確認できる
nonceヘッダーを含むためです。そのため、tid/oidクレームは 自己申告となります。サーバーは構造を検証し、verified: falseのフラグを付け、 承認要件をクレームだけではなくトークン自体のフィンガープリントに 関連付けます。検証されるべきトークンが検証されなかった場合は、拒否されます。 - ローカル PowerShell モードでは何も分離されません。 コマンドレットは現在のユーザーの権限で実行されます。信頼できない呼び出し元に公開しないでください。
コマンドレット名とパラメーターがコードとしてスクリプトに渡されることはありません。環境変数を介して渡され、名前は厳格な
Verb-Noun パターンに照らして検証された後、Get-Command と呼び出し演算子を介して実行されます。
脆弱性は非公開で報告してください — SECURITY.md をご覧ください。
このプロジェクトが行わないこと
- ローカルモードでのプロセス分離はありません。
- マルチテナントの仲介はありません — 1 つのサーバー、1 つの ID です。
- 署名付き監査台帳はありません。 監査イベントは stderr に出力される JSON であり、署名付きでオフライン検証可能な記録ではありません。
この 3 点は、このサーバーの抽出元である商用プラットフォーム Minerva-IA が担います。このリポジトリのすべての機能は、それがなくても動作します。
開発
npm install
npm run dev:stdio # stdio, hot reload
npm run verify # typecheck + tests + secret scan
npm run build && node scripts/smoke-stdio.mjs
テストに認証情報は不要で、ネットワークにも接続しません。
プルリクエストは 2027-07-31 まで受け付けていません — 理由と、その間に歓迎するもの(バグ報告は大歓迎です)については CONTRIBUTING.md をご覧ください。
ライセンス
MIT — LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。