Azure

Azure Cosmos DB MCPサーバーの使い方|Azure MCP ServerとMCP Toolkitの接続・権限設計

Azure Cosmos DB MCPサーバーの使い方|Azure MCP ServerとMCP Toolkitの接続・権限設計

Azure Cosmos DBをAIエージェントから自然言語で検索したい場合、MCP(Model Context Protocol)サーバーを自分でゼロから書く必要はありません。この記事では、Microsoftが公開している実装のうち、Azure全体を扱うAzure MCP Serverに含まれるcosmosツールと、Cosmos DB専用のAzure Cosmos DB MCP Toolkitの2つを比較します。両者の違いと選び方、VS CodeやClaude Desktopからの接続手順、見落とされやすいデータプレーンRBACの設定までを、各リポジトリのソースコードと公式ドキュメント(2026-09-27時点)に基づいて解説します。

まとめ:Azure MCP ServerとMCP Toolkitの選び分けと権限の要点

  • 手元のエディタから試すならAzure MCP Server。npx -y @azure/[email protected] server startで起動でき、cosmosツールは7種です(2.0.5時点)。認証は資格情報チェーンで行い、az loginの資格情報もその候補の1つです。
  • チームで共有するなら、利用者ごとの権限で読むか、共有IDで読むかで選びます。Azure MCP Server 2.0はリモート(HTTP)でも動き、既定のOn-Behalf-Ofで利用者本人の権限を引き継ぎます。MCP ToolkitはContainer AppsのマネージドIDという共有IDで読み、Microsoft Foundryのカタログから選べます。
  • どちらも書き込み用のツールは持っていません。作成・更新・削除をエージェントにさせたい場合は自作が必要です。
  • 権限はデータプレーンRBACで付与します。Azure Portalの「アクセス制御(IAM)」で付けるReader等では、ドキュメントを読めません。
  • @azure/mcp@latestはベータ版を取得します。npmのlatestタグは3.0.0-beta.47を指しているため、安定版を使うなら版番号を固定します。

以下では、選び方、ツールの中身、接続手順、権限設計、よくあるエラーの順に説明します。

Cosmos DB用MCPサーバーの2系統と選び方

「Cosmos DB MCP」で検索すると、GitHub上に個人の実装も多数見つかります。Microsoft Learnには、Azure Cosmos DB ShellのMCPサーバー機能(手元のShellとVS Code拡張で動かす方式)も載っています。この記事で比較するのは、Azure上のアカウントにエージェントを直接つなぐ次の2つです。Azure MCP Serverは2.0の安定版が2026-04-10に発表されました。MCP Toolkitは2025-11-18にパブリックプレビューとして公開され、2026-06-02(Microsoft Build 2026)に一般提供(GA)になっています。MCP自体の仕組みについてはMCP(Model Context Protocol)の仕組みの解説を参照してください。

比較項目 Azure MCP Server(cosmosツール) Azure Cosmos DB MCP Toolkit
リポジトリ microsoft/mcp AzureCosmosDB/MCPToolKit
安定版(2026-09-27時点) 2.0.5(2026-07-10) v1.1.2(2026-05-29)
実行場所 ローカル(stdio)/リモート(HTTP) Azure Container Apps(HTTP)
実装言語 .NET(npm・PyPI・NuGetで配布) .NET 9.0
Cosmos DBへの認証 資格情報チェーン/OBO/ホストのID マネージドID
クライアント側の認証 ローカルは不要/リモートはEntra ID Entra IDのJWT
Cosmos DB用ツール数 7 8
書き込み用ツール なし なし
ライセンス MIT MIT

判断の分かれ目は、誰の権限でデータを読むかです。ローカルのAzure MCP Serverは、資格情報チェーンで最初に見つかったIDの権限で動きます。az loginだけを済ませた環境なら本人のIDですが、AZURE_CLIENT_IDなどの環境変数が設定されていれば、そちらのサービスプリンシパルが優先されます。リモートで動かす場合は、--outgoing-auth-strategyの既定値UseOnBehalfOfにより、利用者のトークンを交換して本人の権限でCosmos DBを読みます。Cosmos DBへのアクセスも利用者本人のIDで行われるため、診断設定でリソースログを収集しておけば、利用者単位で追跡できます。

一方のMCP Toolkitは、サーバーに割り当てたマネージドIDの権限で動きます。Toolkitを呼び出せる人は全員、マネージドIDと同じ範囲のデータを読めることになります。利用者ごとにアクセス範囲を変えたいならAzure MCP ServerのOBO構成を選びます。全員に同じ範囲を見せてよく、ハイブリッド検索を含むCosmos DB専用のツールをFoundryから手早く使いたいならToolkitが向いています。

本文で扱う版固有の仕様は、Azure MCP Server 2.0.5のコマンド一覧、MCP Toolkit v1.1.2のツール実装とデプロイスクリプト、Microsoft Learnのデータプレーンのセキュリティ解説で確認できます。

検索・参照だけで要件を満たせるなら、VMを立てて自作のMCPサーバーを動かし、.envに接続文字列を書くような構成を選ぶ必要はありません。どちらの公式実装も、キーを設定ファイルに置かずにEntra IDで接続できます。

Azure MCP ServerのCosmos DBツール7種と制約

Azure MCP Server 2.0.5のコマンド一覧(azmcp-commands.md)には、Cosmos DB関連のコマンドが7つあります。すべてに「ReadOnly」「Destructiveではない」という注記が付いています。このうち5つ(schema infer以下)は、3.0.0-beta.14(2026-05-28)で追加されたものです。

コマンド できること
cosmos list アカウント・DB・コンテナーの一覧
cosmos database container item query SELECT文でアイテムを検索
cosmos database container schema infer サンプルからスキーマを推定
cosmos database container item list-recent 更新が新しい順に取得
cosmos database container item get idで1件取得
cosmos database container item text-search FullTextContainsで全文検索
cosmos database container item vector-search VectorDistanceでベクトル検索

item queryには任意のSQLを渡せますが、ソースのCosmosQueryValidatorがSELECT以外を拒否します。具体的には、SELECTで始まらない文、--や/*を含むコメント、セミコロンで連結した複数文、OR 1=1型のトートロジーを弾き、exec・sproc・trigger等の語も通しません。クエリ長の上限は5,000文字です。LLMが書いたクエリをそのまま渡しても、ストアドプロシージャの呼び出しにはならない作りになっています。

残りのツールには前提条件や注意点があります。text-searchについて、Azure MCP Serverのコマンド一覧は全文インデックスを要件としています。一方、Cosmos DBのドキュメントによると、全文ポリシーやインデックスがなくても全文検索クエリ自体は実行できます。ただしインデックスを使わないため、RU消費が増え、実行時間も長くなります。実運用では全文インデックスを設定しておくべきです。vector-searchはベクトルインデックスに加えて、--openai-endpointと--embedding-deploymentでAzure OpenAIの埋め込みモデルを指定する必要があります。schema inferが返すのはトップレベルのプロパティだけで、入れ子の中身はobjectやarrayとしか表示されません。ベクトル検索の仕組みやインデックス設定はCosmos DB for NoSQLのAPI選定とベクトル検索の記事で扱っています。

ローカル接続手順:VS Code・Claude Desktop・Claude Code

前準備:az loginとデータプレーンのロール付与

Azure MCP Serverは、資格情報を次の順に探します。環境変数(EnvironmentCredential)、Visual Studio、VS Code、Azure CLI、Azure PowerShell、Azure Developer CLI、最後にブラウザでの対話ログインです。最初に成功したものが使われます。npxで起動する場合はNode.jsも必要です。READMEには「20 LTS以降」と書かれていますが、Node.js 20はすでにサポートが終了しているため、現行のLTS(2026年9月時点ではNode.js 24)を使ってください。az loginはこのチェーンにIDを渡すための操作で、Cosmos DBの権限そのものは次に説明するロールで別途付与します。探索順を固定したい場合は、AZURE_TOKEN_CREDENTIALS=AzureCliCredentialのように環境変数で指定します。

ここで最もつまずきやすいのがロールの付与です。Cosmos DBのドキュメントを読むには、Azure RBACのReaderやContributorとは別の、データプレーン用の組み込みロールが必要です。読み取りだけなら「Cosmos DB Built-in Data Reader」(ロールID 00000000-0000-0000-0000-000000000001)を、サインインしているユーザーに付与します。

PRINCIPAL_ID=$(az ad signed-in-user show --query id -o tsv)

az cosmosdb sql role assignment create \
  --account-name <cosmos-account> \
  --resource-group <resource-group> \
  --role-definition-id 00000000-0000-0000-0000-000000000001 \
  --principal-id $PRINCIPAL_ID \
  --scope "/dbs/<database>/colls/<container>"

--scopeに/を指定するとアカウント全体が対象になります。エージェントに見せてよいコンテナーが決まっているなら、上の例のようにコンテナー単位まで絞ってください。なお、このコマンドを実行する人には、データを読む権限とは別に、管理プレーンでロール割り当てを作成する権限(Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write。アカウントのOwnerなどが持つ)が必要です。

VS Codeのmcp.jsonとcosmosツールだけを公開する起動オプション

公式READMEの設定例は@azure/mcp@latestを指定しています。しかし2026-09-27時点で、npmのlatestタグは3.0.0-beta.47を指しています。この例をそのまま使うと、ベータ版が毎回取得されます。安定版を使うなら、次の例のように版番号を固定してください。

{
  "servers": {
    "azure-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y", "@azure/[email protected]",
        "server", "start",
        "--namespace", "cosmos",
        "--read-only"
      ],
      "env": {
        "AZURE_MCP_COLLECT_TELEMETRY": "false"
      }
    }
  }
}

これはワークスペースの.vscode/mcp.jsonに置く例です。--namespace cosmosを付けないと、Storage・Key Vault・Monitorなど他のサービスのツールもエージェントに公開されます。既定の起動モードはnamespaceモードで、サービスごとに1つのツールへまとめて公開する方式です。VS Codeでは1回のチャット要求で有効にできるツールが最大128個なので、それを超えないようにこの方式が既定になっています。--read-onlyはサーバー全体で書き込み系ツールを無効にするオプションです。cosmosツールはもともと読み取り専用ですが、ほかのnamespaceを追加したときの安全策として付けておきます。テレメトリは既定でMicrosoftに送信されます。AZURE_MCP_COLLECT_TELEMETRY=falseで送信を止められます。

Claude DesktopとClaude Codeへの登録

Claude Desktopでは、リリースページで配布されている.mcpbファイル(例:Azure.Mcp.Server-osx-arm64.mcpb)をアプリのウィンドウにドラッグするとインストールできます。Node.jsや.NETを別途用意する必要はありません。起動オプションを指定したい場合は、設定ファイルclaude_desktop_config.jsonのmcpServersに上と同じcommand・argsを書きます。設定ファイルの場所は、macOSでは~/Library/Application Support/Claude/、Windowsでは%APPDATA%\Claude\です。Azure MCP ServerのREADMEの一覧表にはmacOSの場所が~/.claude/と書かれていますが、Claude Desktop側の案内とは一致しません。

Claude Codeでは、公式プラグインマーケットプレイスの/plugin install azure@claude-plugins-officialでAzure MCP Serverを導入できます。cosmosツールだけに絞りたい場合は、claude mcp addでnpxの起動コマンドを直接登録します。

claude mcp add azure-cosmos -- npx -y @azure/[email protected] server start --namespace cosmos --read-only

登録できたら、「myaccountアカウントのshopdbデータベースにあるordersコンテナーのスキーマを推定して」のように、アカウント・データベース・コンテナーを特定できる形で話しかけてみます。動作確認では、エージェントの返答文ではなく、ツール呼び出しの履歴を見てください。cosmosのツールが実行され、推定したスキーマ(プロパティ名と型)が結果に返っていれば接続は成功しています。Claude Codeでは/mcpで接続状態も確認できます。

MCP ToolkitのContainer AppsデプロイとFoundry接続

MCP Toolkitのデプロイ手順と提供ツール8種

MCP Toolkitのデプロイは2段階です。まず「Deploy to Azure」ボタンかazd upで、インフラ一式(Container Apps環境、Container Registry、マネージドIDとロール割り当て)を作成します。次にPowerShell 7以降で.\scripts\Deploy-Cosmos-MCP-Toolkit.ps1 -ResourceGroup <RG>を実行し、コンテナーイメージのビルドとEntra IDアプリの登録を行います。前提として、Azure CLI、Docker Desktop、.NET 9.0 SDKが必要です。ベクトル検索を使う場合は、埋め込みモデル(Azure AI Services、Microsoft Foundry、OpenAI APIのいずれか)も用意します。

公開されるツールはlist_databases、list_collections、get_approximate_schema、get_recent_documents、find_document_by_id、text_search、vector_search、hybrid_searchの8種です。hybrid_searchはv1.1.2で追加され、ベクトル類似度と全文検索の結果をRRF(Reciprocal Rank Fusion)で統合します。ソースを見ると、get_recent_documentsとtext_searchの取得件数は1〜20件の範囲外だとエラーになります。get_approximate_schemaは先頭10件だけを見てスキーマを推定します。

VS CodeやFoundryからの接続とトークンの期限

Microsoft Foundryから使う場合は、先に.\scripts\Setup-AIFoundry-Connection.ps1を実行します(-AIFoundryProjectResourceId、または-AIFoundryProjectNameと-AIFoundryAccountNameを指定)。このスクリプトが、FoundryのプロジェクトからMCPサーバーを呼び出すためのロールを割り当てます。Microsoft LearnのToolkitページにはSetup-AIFoundry-RoleAssignment.ps1という名前が載っていますが、v1.1.2のリポジトリにあるのはSetup-AIFoundry-Connection.ps1です。そのうえで、エージェントのツール追加画面で「Catalog」から「Azure Cosmos DB」を選びます。認証方式にはMicrosoft Entraの「Project Managed Identity」を選び、audienceにはデプロイ時に出力されたENTRA_APP_CLIENT_IDを入力します。VS CodeなどのMCPクライアントから使う場合は、az account get-access-token --resource <ENTRA_APP_CLIENT_ID>で取得したトークンを、Authorization: Bearer <トークン>というヘッダーに設定します。接続先はContainer AppのURLそのものではなく、末尾に/mcpを付けたhttps://<アプリ名>.<環境>.<リージョン>.azurecontainerapps.io/mcpです。READMEにあるとおり、このトークンは通常1時間で期限が切れます。長時間使い続ける場合は、定期的にトークンを取り直す運用が必要です。

利用者に割り当てるアプリロールはMcp.Tool.Executorです。デプロイスクリプトは実行者自身への割り当てを試みます。ただし、Microsoft GraphのAppRoleAssignment.ReadWrite.All権限がないと割り当てに失敗します。その場合はAssign-Role-To-Current-User.ps1を実行するか、Enterprise Applicationsの画面から手動で割り当てます。

権限設計:読み取り専用の範囲指定と書き込みサーバーの分離

MCP ToolkitのREADMEは、「What You Get」の節で「Full CRUD operations」と説明しています。しかし、v1.1.2のツール実装(CosmosDbToolsService.cs)にある公開メソッドは上の8つだけで、作成・更新・削除のメソッドは存在しません。デプロイスクリプトがマネージドIDに付与するロールも「Cosmos DB Built-in Data Reader」だけです。同じREADMEのSecurity節には、付与後はアカウント内のすべてのデータベースとコンテナーを読めるようになる、と注意書きがあります。READMEの売り文句を読んで、エージェントにデータを書き込ませる設計を立てないようにしてください。

問題になりやすいのは、この読み取り権限がアカウント全体に付く点です。スクリプトはロールをスコープ/(アカウント全体)に割り当てています。個人情報を含むコンテナーが同じアカウントにある場合は、デプロイ後にその割り当てを削除し、/dbs/<db>/colls/<container>単位で付け直してください。そのうえでEntra IDのアプリロール(Mcp.Tool.Executor)で利用者を限定します。この2段構えにしないと、エージェントに話しかけられる人は全員、アカウント内の全データを読めることになります。

Azure MCP Serverにも同じ種類の落とし穴があります。--auth-method keyを指定すると、サーバーはAzure Resource Manager経由でプライマリキーを取得して接続します(CosmosService.csのGetKeysAsync)。アカウントキーは書き込みも含めた全権限を持つため、読み取り専用のツールを使っていても、手元のプロセスは全権限の資格情報を保持することになります。既定のcredentialのまま使い、データプレーンRBACで権限を絞るのが安全です。アカウントのローカル認証を無効(disableLocalAuth)にしている環境では、そもそもキー認証は使えません。

エージェントにデータを書き込ませたい場合は、公式実装に書き込みツールを足すのではなく、書き込み専用のMCPサーバーを別に作ることをおすすめします。そのサーバーには、書き込み先のコンテナーに限定した「Cosmos DB Built-in Data Contributor」(ロールID 00000000-0000-0000-0000-000000000002)を付けます。土台には、Microsoftのサンプル集AzureCosmosDB/azure-cosmos-mcp-server-samplesが使えます。JavaScript・Go・Java・Pythonの4言語の実装があり、たとえばJava版はPut Item(挿入または置換)とUpdate Item(部分更新)を持っています。ただしこれはサンプル集で、リポジトリの最終コミットは2025-11-25です。JavaScript版はCOSMOSDB_KEYによるキー認証を前提にしているため、Entra IDの認証に書き換えてから使ってください。読み取りと書き込みを別のサーバーに分けておけば、エージェントに与える権限をサーバーの単位で切り替えられます。AWS側の同種の設計はAWS MCP Serverの全ツールと権限設計、Terraformの場合はTerraform MCP Serverのtoolset権限設計が参考になります。

接続エラーの切り分け:403・401・検索結果が空の場合

  • Azure MCP Serverで403(Forbidden):権限とネットワークの両方を確認します。権限はaz cosmosdb sql role assignment list --account-name <account> --resource-group <RG>で、自分のプリンシパルIDとスコープを見ます。IAMでOwnerになっていても、データプレーンのロールがなければ読めません。ネットワークは、IPファイアウォールで手元のIPが許可されているか、プライベートエンドポイント構成でDNSがプライベートIPに解決されているかを確認します。
  • MCP Toolkitで401:トークンの期限切れ、audienceの不一致、Mcp.Tool.Executorが未割り当て、のいずれかが原因です。READMEのトラブルシューティングもこの3つを挙げています。
  • text-searchが空になる、またはエラーになる:まずエラー本文と、指定したプロパティ名(大文字小文字を含む)を確認します。照合は部分文字列ではなく単語単位で、全文ポリシーの言語設定に従って語幹処理がかかります。ストップワードの除外は現時点では英語(en-US)だけの機能で、「the」のような語では一致しません。
  • アカウントが見つからない:Azure MCP Serverのcosmos listはサブスクリプション単位で探索します。--resource-groupを指定すれば、探索範囲をリソースグループに絞れます。複数のテナントに所属している場合は--tenantも指定します。

なお、Azure MCP Serverは手元のAzure Cosmos DBエミュレーターには接続できません。アカウントをAzure Resource Manager経由でサブスクリプションから探し、接続先をhttps://<account>.documents.azure.com:443/の形で組み立てる実装だからです(CosmosService.csのGetCosmosBaseUri)。動作を試す場合も、Azure上に検証用のアカウントを用意してください。

よくある質問

Azure Cosmos DB MCPサーバーは無料で使えますか?

Azure MCP ServerとMCP Toolkitは、どちらもMITライセンスのOSSです。ソフトウェア自体は無料で使えます。ただし、ツールが実行するクエリにはCosmos DBのRU(要求ユニット)が消費されます。MCP ToolkitではContainer AppsとContainer Registryの料金もかかります。

Cosmos DB MCPサーバーでデータの登録や更新はできますか?

2026年9月時点では、Azure MCP ServerにもMCP Toolkitにも書き込み用のツールはありません。Azure MCP Serverのitem queryもSELECT以外を拒否します。書き込みが必要な場合は、Microsoftのサンプル集(azure-cosmos-mcp-server-samples)を土台にして、書き込み先を限定したロールを持つMCPサーバーを別に用意してください。

MongoDB用APIのCosmos DBでも使えますか?

両実装のツールは、NoSQL用APIのSQLクエリ(SELECT文、FullTextContains、VectorDistance)を前提に作られています。MongoDB用API(RUベース)やAzure DocumentDB(旧vCore)のデータは、この2つの実装の対象外と考えてください。Cosmos DBのAPI種別の違いはAzure Cosmos DBの仕組みと採用判断の記事で整理しています。

Claude DesktopとVS Codeで設定ファイルの書き方は違いますか?

最上位のキー名が異なります。Claude Desktopのclaude_desktop_config.jsonはmcpServers、VS Codeの.vscode/mcp.jsonはserversを使います。commandとargsの中身は共通です。

Microsoft Learn MCP Serverとは何が違いますか?

Microsoft Learn MCP Serverが検索するのはMicrosoftの公式ドキュメントで、利用者のAzureリソースにはアクセスしません。Cosmos DBのデータそのものを検索したい場合は、この記事で紹介した2つの実装を使います。Learn MCP ServerについてはMicrosoft Docs MCP Serverの機能と接続方法を参照してください。

関連記事

お気に入りに入れた記事の一覧

この記事は以下の記事からリンクされています

資料請求

今日のトレンド記事 直近 24 時間で、いつもより多く読まれている記事

  1. 2026.10.15 テックブログ リゾートトラスト不正アクセス:会員2.6万件・カハラ横浜3.6万件の対象確認と窓口
  2. 2025.09.03 コラム ストループ効果とは?原典1935年の実測値と年齢別の平均・テストのやり方
  3. 2026.10.16 テックブログ バーガーキング情報漏洩どうしたらいい?約1,118万件の対象確認・補償・退会とメールの真偽
  4. 2026.01.20 テックブログ PineDramaとは?TikTokショートドラマアプリの料金・安全性とTikTok内ミニドラマの課金
  5. 2026.04.13 コラム ゴルフ賞金の税金はいくら?1,000万円で源泉194万円・確定申告での精算と副賞の車、海外賞金【令和8年分】

RELATED POSTS 関連記事

目次