Microsoft が提供するLearn記事の情報を提供するMCPサーバーがあります。

https://learn.microsoft.com/api/mcp
このエンドポイントを叩くことで、MCP Serverと接続し、Learn情報を基に公式回答できるチャットボットを作りたいと思います。
本記事は失敗の手順を記載していますので、参考にされる方は気を付けてください。
アーキテクチャ
アーキテクチャはざっとこんな感じです。

フロントはOpen WebUIというオープンソースのDocker Imageを使います。
ストレージ領域にAzure Files、LLMはMicrosoft Foundry内で使えるAOAIで提供されているGPT-4o(暫定的に)を利用します。
環境の構成
Azure Files
まずはAzure Filesを作成します。

名前入ってたので消してます。
あと最近Firewallと打つ機会が多かったのか、fileじゃなくてfireになってますね。
Microsoft Foundry
Azure Portal上からそのままAOAIのデプロイもできたのですが、FoundryというサービスがAzureのAIサービスを包括したものっぽいので、触ってみたさもありこちらを使います。

AOAIもFoundryの中で使えます。

作成を押して

このあたりの情報を入れていきます。
リージョンはJapan Eastにしましたが、ここでデプロイされるリージョンによって使えるモデルが変わったりする気がします。
作成完了したら、以下のような画面が出るので、Foundry ポータルに移動します。

モデル+エンドポイントでモデルのデプロイを押して利用するLLMのモデルを選びます。

色々ありますが、「確認」がグレーアウトしているものは選べません。

GPT-5,5.1,5.2は全滅で、あとは差分がよくわからないのでとりあえずGPT-4oを選びました。
デプロイするとこんな感じで一覧に出てくるので、名前を選択して詳細なパラメータを確認します。

使うパラメーターには以下のものがあるので、この値をコピーできるようにしておきます。
- ターゲットURI
- キー
- モデル名
- モデルバージョン
Azure Contariner Apps
コンテナーアプリ
コンテナーアプリと検索して作成をしていきます。
コンテナアプリを作成するには、そのコンテナを立ち上げる基盤(?)となるContainer Apps 環境というものが必要です。
基本的にはAKS的に一つのワークロードを束ねるものなので、新規作成してください。

コンテナの指定は以下の様に行います。

今回利用するコンテナイメージはghco.io/open-webui/open-webui:mainで提供されているので、これを指定します。
環境変数には以下の値を入れました。
Geminiの指示に従って入れましたが、実際使われてない値もあります。

どの環境変数がどういう動作をするかですが、ざっくり以下のような解釈でOKだと思います。
OPENAI_API_BASE_URL # OpenAIのエンドポイントを指定している。アプリ側で書き換えできる
OPENAI_API_KEY # Foundryで抑えたキーの値。
ENABLE_SIGNUP # 他のユーザーがアカウント作ることができるようにするか
MCP_ENABLED # MCPを利用可能にするか
OPENAI_API_TYPE # なんかAzureに向けるための変数らしいがよくわからない
OPENAI_API_VERSION # LLM(GPT-4o)のバージョン指定
OPENAI_API_MODEL_IDS # モデルの指定(GPT-4o)
ENABLE_OPENAI_API # OpenAIのAPIを叩けるようにするかどうか
これらの設定が完了すればデプロイを行います。
ボリュームのマウント
Azure Filesをデータ格納領域として利用するために、コンテナーアプリにマウントする必要があります。
Azure Container Apps 環境へのマウント
コンテナーアプリにマウントするためには、Container Apps 環境に先にAzure Filesを追加する必要があります。
Container Apps 環境→設定→Volume mountsを選び、追加を押します。

Azure FilesなのでSMBでストレージアカウント名やキーを入力し、「読み取り/書き込み」のアクセスモードで追加します。

コンテナーアプリ
環境の方に追加が完了したら、コンテナアプリ側で追加します。
対象のコンテナアプリからアプリケーション→ボリューム→追加を押します。


環境に追加したボリュームを選択し、追加します。
追加したら、アプリケーション→コンテナー→ボリュームマウントのところで追加されたボリュームを確認できます。

アプリケーションの設定
概要からアプリのURLをクリックし立ち上げます。

やたら応答が遅いことがありますが、以下のような画面で最初の管理者アカウントを追加します。


Azure OpenAIとの連携
サインアップしたら以下のような画面が出るので、管理者パネルを開きます。

接続設定を開いて、OpenAI APIを編集します。

設定値はこんな感じで入れます。

以下注意点です。
- URLはFoundryから直接コピーしたものを貼ると接続できません。何度か試行錯誤をした感じだと、.comまでだけ記述することで接続ができました。
- BearerはFoundryでコピーした「キー」を貼ります。
- Provider TypeはAzure OpenAIを選択します。
- モデルIDはgpt-4oと入力します。
- APIバージョンは2025-01-01-previewを選択すると動きました。
- 環境変数に入れてた値が多いですが、なぜか反映されてないので手動で入力が必要です
すべて入力した後、URL横のボタンを押して「サーバー接続が確認されました」と出ればOKだと思います。

チャット画面に戻ってAIと対話ができるかチェックします。


回答が返ってきたので処理は成功してそうです。
MCPサーバーの設定
OpenAI APIの設定をした時と同様に管理者パネルを開いて設定→External Toolsを開きます。

以下の様に設定を入れます。

ここでの設定値は以下の通り(わかってる範囲)です
- 種類をMCP Steamable HTTPに変更します
- URLはMicrosoftから提供されているURLをそのまま入れます。
- 認証はなし(None)
- IDはよくわかりませんが、この内容でいけました
- 名前は任意で付けれます
- 可視性はこのポータルで全員が使えるように公開とします。
こちらも同様に接続確認してOKであれば利用可能です。
実際に試してみる

使い方ですが、チャット画面のツールでMicrosoft Learnを選択できるようになります。

これをONにした状態で、Microsoft Learnを見ないと難しい質問をしてみます。

FoundryでGPT-5.2をデプロイできるリージョンはどこか聞いてみます。
このLearnの通りであれば、eastus2、southcentral、swedencentralが返ってくるはずです。

はい、失敗です。
回答の横に参照したっぽいserchが出ているので見てみます。


クエリで検索しているみたいで、検索結果としては正常にとれているようにも見えます。(GPT-5.2の列があって、eastus2やsouthcentralの一列目に✅が付いている)
MCPの返答の構造に問題があるのか、GPT-4oだからダメなのかはわかりませんが、今のままではMCPを使った動作はできるものの回答が正確ではないという何の意味もない状況です。
あと、Azure Filesとの連携もうまくできていないのか、設定値などが保持されません。
今後、モデルを変えたりしてみて改善を試してみます。

コメント