Claude Media
Azure MCPサーバーでAzureリソースをClaudeから操作する

Azure MCPサーバーでAzureリソースをClaudeから操作する

Microsoft公式のAzure MCPサーバーをClaude Codeに入れる手順と、ツール数の絞り込み・401と403の切り分け・認証アカウントの固定を解説します。

Azure MCPサーバーとは

Azure MCPサーバーは、Microsoft公式のModel Context Protocol実装で、45以上のAzureサービス領域を単一のMCPサーバーに集約しています。Storage・Key Vault・AKS・Cosmos DB・SQL Database・Terraform・Bicepなどを、個別にサーバーを立てずに1本の接続から自然言語で操作できます。

認証はAzure Identityライブラリを介したMicrosoft Entra IDに一本化されています。アクセス範囲はAzureのRBAC(ロールベースのアクセス制御)にそのまま従うので、AIエージェントの操作は接続したユーザーやマネージドIDが元々持つ権限を超えません。

位置付けはローカル開発者向けのツールです。外部向けアプリケーションや、承認された開発環境の外での利用は想定されていません。

「Advisorの推奨事項を要約して」「ストレージアカウントの一覧を見せて」「Log AnalyticsにKQLクエリを投げて」のように、サービスをまたぐ依頼を同じ会話で続けられます。KQLで不審ログインを探す具体例はEntra IDのサインインログのKQL検証にあります。

もともとのリポジトリはAzure/azure-mcpでしたが、2025年8月25日にmicrosoft/mcpへ移管されアーカイブされました。検索結果や生成AIの回答に古い名前が出ても、ソースとissueの登録先はmicrosoft/mcpです。

Claude Codeに入れる2つの経路

Claude Codeへの導入経路は、公式プラグインとmcp.jsonの手書きの2つです。READMEが案内しているのは公式プラグインです。

手順

導入の流れ(1か2のどちらかを選び、3でサインイン)

  1. 1

    プラグインで入れる(公式案内の経路)

    Claude Code上で次を実行します。MCPサーバー本体に加え、Azure関連のエージェントとSkillsが同梱されます。

    /plugin install azure@claude-plugins-official
  2. 2

    サーバー設定を自分で書く(絞り込みたいとき)

    claude mcp addで.mcp.jsonに登録します。起動オプションを自分で選べるのは、この経路です。

  3. 3

    Azureにサインインする

    az loginで、ローカルのセッションの認証情報をMCPサーバーに使わせます。

Learnのoverviewは、これとは別にAzure Skills Pluginを紹介しています。azure-prepare・azure-deploy・azure-diagnosticsなど26以上のSkillsをまとめたものです。Azure MCPサーバーとFoundry MCPサーバーと組み合わせて使う設計です。

プラグインでなくサーバー設定を自分で持ちたい場合は、Node.js(LTS)が入っていればnpxで足ります。Python(uvx)・.NET(dnx)・Dockerでも起動できます。

v2.1.287のclaude mcp addをプロジェクトスコープで実行すると、作業ディレクトリに次の.mcp.jsonが生成されました。サーバー設定は~/.claude.jsonには書かれず、チームでリポジトリに入れて共有できる形です。

claude mcp add -s project azure-mcp-server -- npx -y @azure/mcp@latest server start
{
  "mcpServers": {
    "azure-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@azure/mcp@latest", "server", "start"],
      "env": {}
    }
  }
}

--より前がclaude mcp add自身のオプション、後ろがサーバーに渡るコマンドです。Azure MCPサーバーの--modeや--namespaceは--の後ろに書きます。--を忘れると、claude mcp add側のオプションとして解釈される恐れがあります。

Microsoftのドキュメントは、Visual Studio Codeなど別のエディタでは設定のルートがmcpServersではなくserversになると注記しています。Claude CodeはmcpServersです。エディタ向けの設定例をそのままコピーすると、キー名の違いで読み込まれません。

Claude Codeの経路ではありませんが、Claude Desktopでは.mcpbファイルをアプリのウィンドウへドラッグ&ドロップするのが最も簡単な方法とされています。

Dockerで動かす場合はmcr.microsoft.com/azure-sdk/azure-mcpイメージを使い、サービスプリンシパルの資格情報を.envファイルで渡します。

{
  "mcpServers": {
    "azure-mcp-server": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "--env-file", "/full/path/to/.env", "mcr.microsoft.com/azure-sdk/azure-mcp:latest"]
    }
  }
}

ツールが多すぎるときの絞り込み

Azure MCPサーバーの絞り込みは、起動オプションで決まります。既定はnamespaceプロキシモードで、Azureのサービス領域ごとに1つのツールを公開します。

くらべる

起動モードの違い

少ないツールで広く

既定・consolidated

既定(azmcp server start)はサービス領域ごとに1ツールです。--mode consolidatedは、関連する操作をまとめた、AIエージェント向けの厳選ツール群になります。

両極端

all・single

--mode allは約800以上の個別ツールをそのまま出します。--mode singleはazureという1つのツールだけを出し、内部で呼び先を選ばせます。

特定のサービスだけで足りるなら、--namespaceが手軽です。--toolはツール名を1つずつ指定でき、指定すると自動的にallモードへ切り替わります。--namespaceと--toolは同時に使えません。--namespace storage --namespace keyvaultのように、--namespaceを並べて複数の領域を指定できます。

claude mcp add -s project azure-storage -- npx -y @azure/mcp@latest server start --namespace storage

--toolで指定する名前はazmcp_storage_account_getのような形です。読み取り用のツールだけを--toolで並べておけば、書き込み系のツールはそもそも公開されません。権限の上限をRBACで決めたうえで、見える範囲も絞る二重の構えになります。

Microsoftのドキュメントには、VS Code Copilotが1リクエストあたり128ツールまでという制限に当たる例も載っています。GitHubのMCPサーバーとAzureのallを重ねると超えるという説明です。この制限はVS Code Copilot側の話で、モード選びの目安になります。

認証と権限の考え方

Azure MCPサーバー自体はトークンを保管しません。Azure Identityが認証方式を判定し、都度トークンを取得します。ローカル起動ならaz login(またはAzure PowerShellのConnect-AzAccount)の済んだ状態が使われます。

権限はAzure側のロール割り当てで決まるので、変更はそのまま反映されます。読み取り専用ロールのアカウントで接続すれば、AIエージェントも読み取りしかできません。MCPサーバーに権限設定の項目はなく、ツールが使えるかどうかはAzureサブスクリプションの権限に連動します。

Learnのoverviewが対応ホストとして挙げるのは、VS CodeやVisual StudioなどのCopilot環境です。そこではツールが既定で無効で、GitHub Copilotのサブスクリプションが前提になります。一度有効にすると、セッションをまたいで有効のままです。この一覧にClaude Codeは含まれていません。

Azureの運用で、最小権限のロールを用意しておくと、書き込み系を試したくない場面の安全装置になります。サインイン済みアカウントの権限が広い人ほど、先に--namespaceで見える範囲を絞っておく価値があります。

主権クラウドを使う組織向けには、--cloudオプションかAZURE_CLOUD環境変数があります。Azure China CloudはAzureChinaCloud・China、Azure US GovernmentはAzureUSGovernment・USGovなどのエイリアスで指定します(大文字小文字は区別されません)。接続前にaz cloud set --name AzureChinaCloudでaz側のクラウドを切り替え、そのあとでaz loginします。

azmcp server start --cloud AzureChinaCloud

つまずいたときの切り分け

認証まわりの失敗は、エラーコードで原因の層が分かれます。Microsoftのトラブルシューティングが挙げる2つの代表例です。

くらべる

401と403の読み分け

Local authorization is disabled

401 Unauthorized

対象リソースがアクセスキーによる認証を禁じています。Cosmos DBやStorageは、アクセスキー・SAS・キー入りの接続文字列を無効にして、Entra IDだけを許可する構成にできます。Azure MCPサーバーが一部のシナリオでアクセスキー認証を使うので、この構成だと401になります。データプレーンのロール(StorageならStorage Blob Data Readerなど)の付与と、リソース管理者への確認が次の手です。

トークンの権限が足りない

403 Forbidden

トークンは通っていますが、操作に必要な権限がありません。ロールの付与スコープ(リソースグループ・サブスクリプション・リソース)と、使っているサブスクリプションとテナントが想定どおりかを確かめます。プロンプトにサブスクリプションIDとテナントを明記すると、取り違えを避けられます。

複数のAzureアカウントでサインインしていて、意図しないアカウントの権限で動いている場合は、環境変数AZURE_MCP_ONLY_USE_BROKER_CREDENTIALをtrueにします。ホストとMCPサーバーを再起動すると、使うアカウントを選ぶ画面が出る、とMicrosoftは説明しています。

ローカル機とCIランナーで同じ設定ファイルを使い回す場合は、Azure Identityが自動判定する認証方式がそれぞれ違い得ます。AZURE_TOKEN_CREDENTIALSを設定すると、使う資格情報の種類を固定できます。

VS Code内で動かすと、環境変数VSCODE_PIDが子プロセスに渡ります。これを検出したAzure MCPサーバーは、VS Codeにサインイン中のアカウントを優先します。az loginでサービスプリンシパルに入っていても、VS Codeのアカウントのトークンが使われ、権限が足りなければ403になります。AZURE_TOKEN_CREDENTIALSでAzureCliCredentialを指定すると、この優先を避けられます。

Dockerでは、.envにAZURE_TENANT_ID・AZURE_CLIENT_ID・AZURE_CLIENT_SECRETを置きます。

az loginの資格情報を使うなら、--env-fileの代わりに--volume ~/.azure:/root/.azureで渡す方法もあります。Windowsでは動かないので、WSLで回避します。

テレメトリは既定で送られる

テレメトリは既定で有効です。流れは2系統あり、自分のApplication Insightsへ送る分(接続文字列をAPPLICATIONINSIGHTS_CONNECTION_STRINGで渡した場合)と、Microsoftへ送る分です。

AZURE_MCP_COLLECT_TELEMETRYをfalseにすると両方が止まります。AZURE_MCP_COLLECT_TELEMETRY_MICROSOFTをfalseにすると、Microsoft向けだけが止まり、自分のApplication Insightsへの送信は続きます。

使い始める前の判断

複数のクラウドMCPサーバーを並べる場合の考え方はgcloudのMCPサーバーでGoogle Cloudを自然言語操作するが参考になります。Entra IDでの認証設計はWIFをMicrosoft Entra ID(Azure)と連携するにあります。

IaC寄りの使い方はTerraform MCPサーバーの使い方、Key Vault単体の設定はClaude CMEKをAzure Key Vaultで設定する手順にまとめています。Claude Code自体の導入はClaude Code完全ガイドから追えます。

まとめ

導入は1コマンドですが、運用で効くのは、見える範囲(--namespace・--mode)と権限(RBAC)を別々に絞ることです。

この記事を共有:XはてブLinkedIn