MCP Graph API Demo について
MCP Graph API Demoは、AIチャット画面からAzureテナントのアプリ登録を照会するBlazor WebAssemblyとASP.NET Coreのサンプルです。クライアント側のLLM処理とサーバー側のMicrosoft Graph呼び出しを分離しています。
主な機能
- 01チャットによるAzureテナント照会
- 02Microsoft Graphのアプリ登録アクセス
- 03Azure AD認証
- 04Semantic Kernelによる関数の調整
活用シーン
- 01テナントのアプリ登録一覧表示
- 02アプリ登録の詳細確認
- 03アプリの権限確認
MCP 対応
ASP.NET CoreサーバーがMCPを実装し、Microsoft Graphの関数をクライアントに公開します。クライアント側のLLMが関数を検出して呼び出し、LLMの認証情報はクライアント側に保持されます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP Graph API デモ
このプロジェクトでは、Azure テナントのアプリケーション登録を照会するために、Azure Graph API と Model Context Protocol(MCP)を使用する方法を紹介します。
このアプリケーションでは、MCP プロトコルを実装した ASP.NET Core サーバーと通信する Blazor WebAssembly クライアントを使用します。サーバーは Microsoft Graph API に接続してアプリケーション登録データを取得し、そのデータは AI アシスタント付きのチャットインターフェースを通じて処理、表示されます。
アーキテクチャの概要
+---------------------+ +---------------------+
| MCP Client | | MCP Server |
| | | |
| +---------------+ | MCP API | +--------------+ |
| | LLM | | Requests & | | Graph API | |
| | Integration |<-+-->Functions | | Functions |<--+--> Microsoft Graph API
| | (SK + OpenAI) | | | | | |
| +---------------+ | | +--------------+ |
| | | |
| +---------------+ | | +--------------+ |
| | UI/UX | | | | Azure AD | |
| | (Blazor WASM)| | | | Integration |<--+--> Azure Active Directory
| +---------------+ | | +--------------+ |
+---------------------+ +---------------------+
Client handles: Server handles:
- User Interface - Function Definitions
- Prompt Engineering - Graph API Integration
- LLM Integration - Azure AD Authentication
- Function Orchestration - Data Processing
このアーキテクチャは、以下の MCP の原則に厳密に従っています。
- MCP クライアントが、すべての LLM とのやり取りとユーザーエクスペリエンスを担当します
- MCP サーバーが、関数の定義を提供し、実際の Graph API 呼び出しを処理します
- 標準化された MCP プロトコルを介して通信します
プロジェクト構成
-
MCP.Client:MCP サーバーと連携する Blazor WebAssembly クライアント
- ユーザーインターフェースとチャットエクスペリエンスを処理します
- Azure OpenAI または OpenAI API と連携します
- Semantic Kernel を使用して、LLM とのやり取りと関数呼び出しを調整します
-
MCP.Server:Azure Graph API 向けに MCP プロトコルを実装する ASP.NET Core サーバー
- Graph API の操作に関する関数定義を提供します
- Azure AD による認証を処理します
- クライアントから要求されたときに Graph API の呼び出しを実行します
- 構造化データをクライアントに返します
-
MCP.Shared:クライアントとサーバーで共有するモデルとインターフェース
- MCP プロトコルの構造を定義します
- 共有データモデルとインターフェースを含みます
Model Context Protocol(MCP)とは?
Model Context Protocol(MCP)は、LLM を活用するアプリケーションで、以下を分離するためのアーキテクチャパターンです。
- LLM 連携(クライアント側):ユーザーインターフェース、プロンプトエンジニアリング、LLM 呼び出し
- ツール/関数連携(サーバー側):LLM が使用できる機能
MCP により、責務が明確に分離されます。
- クライアントが、すべての LLM とのやり取りとユーザーエクスペリエンスを処理します
- サーバーは、関数定義の提供と、呼び出し時の実行に専念します
- この分離により、セキュリティ、モジュール性、スケーラビリティが向上します
このプロジェクトでは、以下の方法で MCP を実装しています。
- サーバー上の関数として Graph API の機能を公開します
- クライアントの LLM がこれらの関数を検出して呼び出せるようにします
- LLM のキーをサーバーに公開せず、関数の実装詳細をクライアントに公開しません
前提条件
- .NET 9.0
- アプリケーション登録のアクセス許可がある Azure サブスクリプション
- Azure OpenAI リソースまたは OpenAI API キー
構成
アプリケーションを実行する前に、お使いの Azure 認証情報を設定する必要があります。
MCP サーバーの構成
MCP.Server/appsettings.json を編集し、以下の設定を更新します。
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "<YOUR_TENANT_ID>",
"ClientId": "<YOUR_CLIENT_ID>",
"ClientSecret": "<YOUR_CLIENT_SECRET>",
"Scopes": ["User.Read", "Application.Read.All"]
}
MCP クライアントの構成
MCP.Client/wwwroot/appsettings.json を編集し、以下の設定を更新します。
"AzureAd": {
"Authority": "https://login.microsoftonline.com/<YOUR_TENANT_ID>",
"ClientId": "<YOUR_CLIENT_ID>",
"ValidateAuthority": true
},
"ApiBaseUrl": "http://localhost:5197",
"AzureOpenAI": {
"Endpoint": "https://your-resource.openai.azure.com/",
"ApiKey": "<YOUR_AZURE_OPENAI_API_KEY>",
"DeploymentName": "gpt-35-turbo"
}
注:MCP サーバーは LLM と直接やり取りしないため、OpenAI の構成は不要になりました。LLM との連携はすべてクライアントが処理します。
セットアップ手順
-
前提条件:
- .NET 9.0 SDK をインストールします
- アプリ登録を作成する権限がある Azure サブスクリプションを用意します
- Azure OpenAI または OpenAI API にアクセスできるようにします
-
Azure AD にアプリケーションを登録する:
- Azure Portal > Azure Active Directory > App registrations に移動します
- 新しい登録を作成します
- クライアントシークレットを設定します
- 以下の API アクセス許可を付与します。
- Microsoft Graph API > Application.Read.All
- 管理者の同意を必ず付与してください
- アクセス許可の詳細なトラブルシューティングについては、GraphApiPermissionFix.md を参照してください
-
Azure OpenAI を構成する:
- Azure OpenAI リソースを作成するか、OpenAI を直接使用します
- GPT モデル用のデプロイを作成します(例:gpt-35-turbo または gpt-4)
- API キーとエンドポイントを取得します
-
構成ファイルを更新する:
- 上記の「構成」セクションの説明に従って、サーバーとクライアントの構成ファイルを更新します
アプリケーションの実行
-
MCP サーバーを起動します:
cd MCP.Server dotnet run -
MCP クライアントを起動します(新しいターミナルで):
cd MCP.Client dotnet run -
ブラウザーを開き、次の URL にアクセスします:
-
チャットインターフェイスで、Azure アプリの登録について質問します:
- 「テナント内のすべてのアプリの登録を一覧表示してください」
- 「ID が [app-id] のアプリの登録の詳細を取得してください」
- 「[app-name] にはどのようなアクセス許可がありますか?」
MCP を使用した開発
このアプリケーションを新しい Graph API 機能で拡張するには:
MCP.Server/Services/McpGraphService.csに新しい関数宣言を追加します- 同じファイルに関数のロジックを実装します
- 新しい関数を処理するように
ExecuteFunctionAsyncメソッドを更新します - クライアントの LLM は、適切な場合に新しい関数を自動的に検出して使用します
関数宣言の例:
new McpFunctionDeclaration
{
Name = "get_user_details",
Description = "Get details for a specific user in the tenant",
Parameters = new McpFunctionParameters
{
Type = "object",
Properties = new Dictionary<string, McpParameterProperty>
{
["user_id"] = new McpParameterProperty
{
Type = "string",
Description = "The ID of the user"
}
},
Required = new List<string> { "user_id" }
}
}
GitHub への公開準備
このプロジェクトをパブリックな GitHub リポジトリにプッシュする前に:
-
同梱のクリーニングスクリプトを実行して、設定ファイル内の情報を安全な状態にします:
.\clean-for-github.ps1 -
機密データが含まれていないことを確認します:
- すべての
appsettings.jsonファイルでプレースホルダー(<YOUR_*>)を使用してください - 実際の API キーや認証情報を含めないでください
.bakファイルや.privateファイルをコミットしないでください
- すべての
-
公開前のチェックリストについては、GITHUB-CHECKLIST.md ファイルを確認してください
セキュリティに関する考慮事項
- 実際の API キーやシークレットを GitHub にコミットしないでください
- MCP アーキテクチャでは LLM キーをクライアント側のみに保持することで、セキュリティを強化します
- サーバーが必要とするのは Graph API へのアクセスのみで、LLM サービスへのアクセスは不要です
- 本番環境へのデプロイでは、API キーを安全に保管するために Azure Key Vault を使用してください
- セキュリティのベストプラクティスについては、CONTRIBUTING.md を参照してください
ライセンス
このプロジェクトは MIT ライセンスのもとでライセンスされています。詳細については、LICENSE ファイルを参照してください。
- 「設定」セクションに従って設定ファイルを更新します
アプリケーションの実行
-
サーバーを起動します:
cd MCP.Server dotnet run --launch-profile https -
クライアントを起動します:
cd MCP.Client dotnet run -
アプリケーションにアクセスします: ブラウザーを開き、
https://localhost:7030/chatにアクセスします
トラブルシューティング
アクセス許可に関する問題が発生した場合は、次の点を確認してください:
-
API のアクセス許可を確認する:アプリの登録に必要な Microsoft Graph のアクセス許可が設定され、管理者の同意が付与されていることを確認してください。
-
認証を確認する:設定ファイル内の Azure AD 認証情報が正しいことを確認してください。
-
テストスクリプトを実行する:付属の PowerShell スクリプトを使用して、Graph API のアクセス許可をテストします:
./TestGraphPermissions.ps1
機能
- Azure テナントの情報を問い合わせるチャットインターフェイス
- MCP を介した Graph API 関数へのアクセス
- LLM 関数向けの Semantic Kernel 統合
GitHub への公開準備
このプロジェクトをパブリックリポジトリにプッシュする前に、クリーニングスクリプトを実行して機密情報を削除してください:
./clean-for-github.ps1
このスクリプトは次の処理を行います:
- 不要なファイル(bin、obj フォルダー)を削除します
- Azure ストレージエミュレーターのファイルを削除します
- 機密データをプレースホルダーに置き換えて、設定ファイルを安全な状態にします
- 元のファイルのバックアップを
.private.bak拡張子で作成します
貢献
このプロジェクトへの貢献を希望される場合は、行動規範とプルリクエストの提出手順について、貢献ガイドラインをお読みください。
ライセンス
このプロジェクトは MIT ライセンスのもとでライセンスされています。詳細については、LICENSE ファイルを参照してください。
謝辞
- Model Context Protocol (MCP) - AI モデルとのやり取りのためのフレームワークを提供
- Microsoft Graph API - Azure AD データへのアクセスを提供
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。