AI Chat Application with RAG and MCP Servers について
この.NET Aspireサンプルは、カスタムPDFデータの検索とMCPによるコンテキスト拡張をAIチャットに組み合わせています。RAGとMCPを試す開発者向けで、GitLabグループ検索ツールを備え、GitHub ModelsとOpenAIエンドポイントに対応します。
主な機能
- 01アップロードしたPDFの内容に基づくチャット
- 02MarkdownからPDFを作成
- 03MCPツールによるGitLabグループ検索
- 04GitHub ModelsまたはOpenAIエンドポイントの利用
活用シーン
- 01アップロードしたPDFに基づく質問
- 02MarkdownをPDFの資料に変換
- 03検索パターンによるGitLabグループの検索
- 04.NET AspireでのRAGとMCP構成の検証
MCP 対応
WhoIsツールとGitLab SearchGroupsツールを公開するHTTP MCPサーバーを含みます。チャットアプリはこれらをコンテキスト拡張として利用します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
RAG と MCP サーバーを使用した AI チャットアプリケーション
.NET Aspire の AI チャットアプリケーションです。AI 言語モデルとベクトルストアとしての Qdrant を使用して、カスタムデータ(RAG - イベント駆動)やコンテキスト拡張(MCP サーバー)とチャットする方法を紹介します。
メモ
このバージョンでは、まだ Azure にデプロイできません。この作業が完了すると、Web アプリケーション(Chat と Admin)、MCP サーバー、Functions アプリはすべて Azure Container Apps になります。.NET Aspire による Functions アプリの統合はまだ
Previewであり、現時点でサポートされているデプロイ先は ACA(Azure Container App)のみです。
目次
プロジェクト概要
AI Chat with Custom Data を使用すると、ユーザーは独自のデータソース(RAG と MCP サーバー)を使って AI モデルとやり取りできます。GitHub Models や OpenAI エンドポイントなど、複数のプロバイダーに対応しています。
機能
- テンプレートで提供される 2 つの PDF を使用して AI モデルとやり取りできます(Microsoft.Extensions.AI.Templates に標準搭載)
- MCP サーバーの WhoIs ツール
new - MCP サーバーの GitLab SearchGroups ツール(ユーザーシークレットが 2 つ必要です)
new - AI モデルとのやり取りに使用する既存の PDF をアップロードできます
new - Markdown から PDF を動的に作成し、それを AI モデルとのやり取りに使用できます
new
HLD

ソリューション構成
MyChatApp.sln
├── MyAdminApp.Web/
├── MyChatApp.AppHost/
├── MyChatApp.ServiceDefaults/
├── MyChatApp.Web/
├── MyFunctionApp/
└── MyMcpServerHttpApi/
前提条件
-
Visual Studio 2022+ または Visual Studio Code
-
GitHub アカウント(Copilot が有効であること)
-
Azurite を実行するための Docker(Azure Blob Storage、Queues、Azure Functions のエミュレーションに必要)
-
(任意。MCP Inspector を使用する場合)NodeJS
-
(任意。MCP SearchGroup ツールを使用する場合)GitLab アカウント
-
(任意)VS Code 用の C# Dev Kit 拡張機能
-
(任意。独自のプロジェクトを作成する場合).NET AI Template をインストールします:
dotnet new install Microsoft.Extensions.AI.Templates -
(任意。MCP サーバーツールのデバッグとテスト用)
npx @modelcontextprotocol/inspector dotnet run -
(任意。Blob のアップロードとキューを確認する場合)Microsoft Azure Storage Explore をインストールします
インストール
- リポジトリをクローンします:
git clone <your-repo-url> cd MyChatApp - 依存関係を復元します:
dotnet restore
構成とシークレット
実行する前に、使用するプロバイダーの API キーとエンドポイントを構成してください。
GitHub Models を使用する場合
- スコープや権限を指定せずに GitHub 個人アクセストークン(PAT)を作成します。ガイド
- シークレットを設定します:
dotnet user-secrets set "GitHubModels:Token" "<your-token-value>"
OpenAI を使用する場合(Azure 経由)
- 接続文字列を設定します:
dotnet user-secrets set "ConnectionStrings:openai" "Endpoint=https://models.inference.ai.azure.com;Key=<your-token-value>"
MyMcpServerHttpApi(GitLab)
- GitLab PAT を設定します:
dotnet user-secrets set "GitLab:Token" "<your-token-value>" - GitLab ドメインを設定します:
dotnet user-secrets set "GitLab:Domain" "<your-domain-value>"
注: ユーザーシークレットはソース管理の対象外に保存されます。Visual Studio でプロジェクトを右クリックし、「Manage User Secrets」を選択すると、シークレットを直接編集できます。
使用方法
アプリケーションの実行
- Visual Studio:
.slnファイルを開きます。Ctrl+F5を押すか、「Start」をクリックします。
- Visual Studio Code:
- フォルダーを開きます。
- C# Dev Kit 拡張機能をインストールします。
MyChatApp.AppHostのProgram.csを開きます。- Debug ビューの「Run」をクリックします。
ローカルホスト証明書を信頼する
初めて実行する場合は、自己署名の開発用証明書を信頼します:
dotnet dev-certs https --trust
.NET Aspire で信頼されていないローカルホスト証明書をトラブルシューティングするを参照してください。
プロンプトの例
-
Markdown テーブル
GitLab グループの一覧を、名前、web_url(「クリックして開く」と表示)、parent_id、has_subgroups の有無を示す絵文字を含む Markdown テーブルで取得します。parent_id でグループ化します。名前の後に角括弧でグループ ID を含めます。

-
ツリー構造
parent_id と group id に基づいてグループを入れ子にしたツリー構造を作成します。

-
動的な PDF の作成
元のリクエストでは何も返ってきませんでした。

ここでは、PDF に変換してアップロードした Markdown を入力しました。

上記の Markdown をアップロードした後の応答です。

-
PDF のアップロード
ドゥルパート
ドゥルパートに関する事実をいくつか紹介します。このリストには、ドゥルパートとは関係のない事実も含まれているかもしれません。
- ドゥルパートは架空の生き物です
- スリーパートは、授業中に眠らせるためのものです
- チキン・ジョッキー!
- ドゥルパートは気をそらすためのものです
- ドゥルパートの唯一の目的は、あなたを笑わせることです
- 授業中に誰かがドゥルパートを描いて、あなたが笑うと、先生に叱られる可能性が高いです
-
面白い物語のプロンプト
ドゥルパートが登場する面白い物語を作ってください。5 文以内にしてください。最後は、改行してハグしている顔の絵文字で終えてください。引用も含めてください
デプロイ
- 標準的な .NET のデプロイ方法が適用されます。クラウドまたはコンテナーにデプロイする場合は、環境変数またはセキュアストアを使ってシークレットを設定してください。
トラブルシューティング
- 信頼されていない証明書: トラブルシューティングガイドを参照してください。
- シークレットが見つからない: 上記の説明に従って、各プロジェクトのユーザーシークレットを設定してください。
- Microsoft Azure Storage Explorer Blob と Queue を表示するには、インストールしてください:

- MCP Explorer MCP サーバーのデバッグとテストに実行してください:

FAQ
Q: 他の AI プロバイダーを使用できますか? A: はい。必要に応じて、構成とサービスを拡張してください。
Q: シークレットはどこに保存されますか? A: ユーザーシークレットは、ソース管理の対象外であるローカルの secrets.json ファイルに保存されます。
コントリビューション
コントリビューションを歓迎します。Issue を作成するか、プルリクエストを送信してください。大きな変更を行う場合は、まず Issue を作成して提案内容について話し合ってください。
ライセンス
このプロジェクトは MIT License の下でライセンスされています。詳細については、LICENSE を参照してください。
謝辞
- .NET Aspire
- .NET 開発者向け AI
- プロジェクト内で参照されているサードパーティライブラリ
お問い合わせ
サポートやお問い合わせについては、Issue を作成するか、GitHub 経由でメンテナーにご連絡ください。
参考資料
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。