Azure CosmosDB MCPサーバ を使って、自然言語でデータ取得してみよう!
はじめに
この頃、MCP(Model Context Protocol)の展開が非常に盛んになっています。
MCPとは、アプリケーションがLLMにコンテキストを提供する方法を標準化するオープンプロトコルです。つまり、LLMが他のツールを呼び出しデータ取得やツール実行を行うためのプロトコルです。
詳しくはこちらの記事を参考にしてください!
とくにこちらの記事が非常に詳細に、例とともに解説されているので分かりやすいです。
この記事では、CosmosDB MCP Server を試してどのような利用シーンがあるのか探ってみます。
GitHubリポジトリで、Azure CosmosDBをMCPサーバとする実装が公開されています。
PoC🚀
それでは試してみましょう。
利用シナリオ
CosmosDB にクルマへのお客様からのフィードバック情報が登録されているとします。PoCシナリオとしては、このフィードバックデータを自然言語で取得しながら分析するシーンを想定してみましょう。
前提
- Node.js 14以上 インストール済み
- Claude Desktop インストール済み
- Azure サブスクリプションを持っていること
CosmosDB の準備
CosmosDBアカウントとコンテナの作成
アカウントの作成
データベースとコンテナの作成
以下のような、ユーザからのフィードバック情報が登録されているコンテナーを想定します。
※Copilotに生成してもらったデータなので、実際のデータではありません。
- database名:feedback
- container名:customer-feedback
- partition key:/carModel
[
{
"id": "1",
"carModel": "プリウス",
"manufacturer": "Toyota",
"rating": 5,
"reviewText": "燃費が非常に良く、環境にも優しい。運転もしやすく、家族全員におすすめです。",
"reviewDate": "2025-03-25T09:15:00Z",
"location": "東京",
"tags": ["燃費", "環境", "運転のしやすさ"],
"sentimentScore": 0.95
},
{
"id": "2",
"carModel": "プリウス",
"manufacturer": "Toyota",
"rating": 4,
"reviewText": "コンパクトで取り回しが良いが、加速性能がもう少し欲しかった。",
"reviewDate": "2025-03-28T14:30:00Z",
"location": "大阪",
"tags": ["操作性", "加速性能"],
"sentimentScore": 0.75
},
{
"id": "3",
"carModel": "フィット",
"manufacturer": "Honda",
"rating": 4,
"reviewText": "小回りが利く点が魅力。室内空間も広く感じられ、普段使いに最適です。",
"reviewDate": "2025-04-01T11:00:00Z",
"location": "名古屋",
"tags": ["取り回し", "室内空間", "燃費"],
"sentimentScore": 0.80
}
]
MCPサーバの準備
こちらのGitHubリポジトリをCloneします。
Cloneしたプロジェクトのルートフォルダに.envファイルを作成し、接続するCosmosDBの情報を記載します。
GitHubを見ていたら、miyake-sanがIssueを出して環境変数化してくださっていました。ありがたし....!!
COSMOSDB_URI="Azure Cosmos DB の URI"
COSMOSDB_KEY="Azure Cosmos DB の APIキー"
COSMOS_DATABASE_ID="データベース名(feedback)"
COSMOS_CONTAINER_ID="コンテナ名(customer-feedback)"
Cloneしたプロジェクトのルートフォルダで以下のコマンドを実行して、必要なライブラリをインストールします。
npm install
プロジェクトをコンパイルします。distフォルダにコンパイルされたファイルが生成されます。
npm run build
もし、MCPサーバを手動で立てたい場合は、コンパイルしたファイルでサーバーを起動します。
MCPサーバ手動起動
distフォルダに移動し、サーバーを起動します。
cd dist
npm start
サーバーが起動したら、以下のようなメッセージが表示されます。
Azure Cosmos DB Server running on stdio
Claude Desktop で稼働確認しましょう
Claude Desktop で MCPサーバを起動する設定をする必要があります。
そのあと、チャットしてみましょう!
Claude Desktop の設定
Claude Desktop 起動時に、コンパイルしたファイルでMCPサーバを起動するように設定します。
Claude Desktop の「ファイル」->「設定」の画面へ。
開発者タブで、「構成を編集」すると、設定ファイルの場所が表示されます。
このclaude_desktop_config.jsonファイルを以下のように編集します。
{
"mcpServers": {
"cosmosdb": {
"command": "node",
"args": [ "C:/Users/AdmUser/Documents/mcp-azure-cosmosdb/azure-cosmos-mcp-server/dist/index.js" ],
"env": {
"COSMOSDB_URI": "Azure Cosmos DB の URI",
"COSMOSDB_KEY": "Azure Cosmos DB の APIキー",
"COSMOS_DATABASE_ID": "feedback",
"COSMOS_CONTAINER_ID": "customer-feedback"
}
}
}
}
Claude Desktopを再起動します。一度終了しましょう。
※Desktopを閉じるだけでは再起動にならず、設定ファイルが読み込まれません。
Claude Desktop を起動しなおすと、MCPサーバが起動され、利用可能なMCPツールにCosmosDBツールが追加されています。
それでは、試してみましょう。
プリウスのフィードバックデータを見たいです。
以下のような結果となりました。
- まず最初に、'Prius'というキーワードでフィルターしたため、検索結果が0件でした。
- そのため次に、'Toyota Prius'または'プリウス'でフィルターするようにCosmosDBのクエリが生成されました。
ですが、フィールド名が'carModel'であるにもかかわらず、'model'でクエリが生成されていますね。。もちろん検索結果は0件のままです、 - そのため、次はプリウスのフィルターが無くなり、'トヨタ'または'Toyota'で製造元をフィルターするクエリが生成されました。これでトヨタのフィードバックデータが取得されています。
- そして最後に、取得したデータからプリウスのユーザフィードバックデータをもとに推論しています。
本来は、carModelフィールドでフィルターしてほしいのですが、MCPサーバの実装に改善の余地がありそうですね!
まとめ
MCPサーバを利用して、自然言語でデータ取得することができました。
MCPサーバを利用することで、自然言語でデータ取得することができるようになります。これにより、ユーザはデータベースのクエリを意識せずに、自然な言葉で情報を取得できるようになります。
データベースのクエリを自然言語で行うことができるため、データベースの専門知識がないユーザでも簡単に情報を取得できることがメリットかと思います。
データの分析では、BIツールを使いVisualizeすることが多いと思います。BIで見える化しつつ、補足ツールとしてMCPサーバを利用することで、分析の幅が広がるかもしれませんね。
Discussion