Azure MCP Server について
Azure MCP Serverは、Azureリソースの管理と調査に使うPython製MCPサーバーです。リソースグループ、ストレージアカウント、仮想マシンを照会でき、複数の認証方式とstdio・SSE接続に対応しています。
主な機能
- 01リソースグループとストレージアカウントの一覧
- 02ストレージ使用量とVM詳細の照会
- 03チームタグによるVM絞り込み
- 04VM電源状態Runbookの実行
- 053種類のAzure認証方式
活用シーン
- 01サブスクリプション内のリソースとストレージの確認
- 02ストレージアカウントの容量使用状況の確認
- 03チームタグを使った仮想マシンの検索
- 04Runbook経由でのVM操作
MCP 対応
MCPサーバーとして、Azureリソースの照会・管理ツールをMCPクライアントに提供し、構造化した結果を返します。stdioとSSEのトランスポートに対応しています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Azure MCP Server
Azure リソースの管理と探索を行うための、Model Context Protocol(MCP)サーバー実装です。このサーバーは、Model Context Protocol を使用して Azure リソースとやり取りするための構造化されたインターフェースを提供し、Azure インフラストラクチャをプログラムから簡単に管理および監視できるようにします。
概要
Azure MCP Server は、MCP クライアントと Azure サービスをつなぐ、Python ベースの実装です。認証処理と構造化されたレスポンス形式を備え、リソースグループやストレージアカウントなど、さまざまな Azure リソースを管理するためのツールとエンドポイントを提供します。
機能
- 最新の Azure SDK を使用した非同期 Azure 操作
- 複数の認証方式をサポート(Default、Service Principal、Managed Identity)
- MCP プロトコルを使用した構造化レスポンス形式
- 包括的なエラー処理とログ記録
- 環境変数による設定をサポート
前提条件
- Python 3.13 以降
- Azure サブスクリプション
- Azure CLI(ローカル開発では推奨)
セットアップとインストール
- リポジトリをクローンします:
git clone <repository-url>
cd azure-mcp-server
- uv(Universal Virtualenv)をインストールします:
curl -LsSf https://astral.sh/uv/install.ps1 | powershell
- 仮想環境を作成し、依存関係をインストールします:
# Create and activate virtual environment
uv venv
.\.venv\Scripts\Activate.ps1
# Install dependencies from pyproject.toml
uv pip sync pyproject.toml
このプロジェクトでは、以下の主要な依存関係を使用します:
[project]
name = "azure-mcp-server"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.13"
dependencies = [
"aiohttp>=3.11.18",
"azure-identity>=1.21.0",
"azure-mgmt-monitor>=6.0.2",
"azure-mgmt-resource>=23.3.0",
"azure-mgmt-storage>=22.2.0",
"httpx>=0.28.1",
"mcp[cli]>=1.6.0",
"python-dotenv>=1.1.0",
"starlette>=0.46.2",
"uvicorn>=0.34.2",
]
- 環境変数を設定します:
ルートディレクトリに
.envファイルを作成し、以下の変数を設定します(必要なauth_typeに合わせて置き換えてください):
AZURE_SUBSCRIPTION_ID=your-subscription-id
AZURE_TENANT_ID=your-tenant-id
AZURE_CLIENT_ID=your-client-id
AZURE_CLIENT_SECRET=your-client-secret
AZURE_MANAGED_IDENTITY_CLIENT_ID=your-managed-identity-client-id # Optional
サーバーの実行
- MCP サーバーを起動します:
-
Stdio トランスポートを使用する場合
uv run server.py -
SSE トランスポートを使用する場合
MCP サーバーを SSE として公開するには、server.py の以下のセクションをコメントアウトします。
# Keep this commented out or remove if running via main.py/Uvicorn if __name__ == "__main__": logger.info("Starting Azure Explorer MCP Server for stdio...") mcp.run()次に、以下のコマンドを実行して起動します:
uv run main.pyUvicorn が起動し、
http://127.0.0.1:8000でリッスンします。
INFO:__main__:Starting Uvicorn ASGI server on 127.0.0.1:8000
INFO: Started server process [your_pid]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
このサーバーは起動し、SSE トランスポート経由の MCP 接続を受け付ける準備ができました。stdio はもう使用していません。
SSE 接続のテスト方法
サーバーは独立して実行され、SSE 接続用に HTTP でリッスンしているため、(stdio を強制する)mcp dev server.py は使用できません。
SSE 経由で接続するように設定されたクライアントが必要です。
以下にいくつかの方法を紹介します。
方法 A:MCP Inspector(スタンドアロンモード)
-
1 つ目のターミナルで
uv run main.pyを実行したままにします。 -
新しいターミナルを開きます。こちらでも仮想環境が有効になっていることを確認してください。
-
Inspector をスタンドアロンで起動します(mcp dev は使用しません)。
npx @modelcontextprotocol/inspector
(注:npx を使って Inspector を直接実行します。ここではサーバースクリプトを指定しません。)
- MCP Inspector の UI が表示されますが、最初は接続されていません。
- 上部の「Server Connection」ペインで、次の操作を行います。
- 「Transport」ドロップダウンから
SSEを選択します。 - サーバーが実行されている URL を入力します:
http://127.0.0.1:8000/sse(ホスト/ポートを変更した場合は、適切な URL を指定します)。 - 「Connect」 ボタン(プラグのアイコンなど)をクリックします。
- 「Transport」ドロップダウンから
- 接続の確認:UI に接続成功と表示されます。また、
uv run main.pyを実行しているターミナルに、クライアントが接続したことを示すログメッセージ(GET リクエストなど)が表示されます。 - ツールのテスト:Inspector の「Tools」タブを開き、Azure ツール(list_resource_groups、list_storage_accounts など)を選択して、引数(subscription_id、auth_type など)を入力し、「Call Tool」をクリックします。結果が出力ペインに表示されます。
方法 B:VS Code(GitHub Copilot Chat エージェントを使用)
VS Code を使用している場合、GitHub Copilot Chat 拡張機能を MCP ホスト/クライアントとして利用できます。
uv run main.pyを実行したままにします。- VS Code を開きます。
- VS Code の設定(JSON)を開きます:Ctrl+Shift+P(または Cmd+Shift+P)を押し、「Preferences: Open User Settings (JSON)」と入力して選択します。
- MCP サーバーの設定を追加します:settings.json の mcp.servers セクションを追加または変更します。特に、url と transport を指定してください。
"mcp": {
"servers": {
"azure-mcp-server": {
"url": "http://127.0.0.1:8080/sse", // replace hostname based on the host
"type": "sse"
}
}
}
- settings.json を保存します。
- VS Code を再読み込みします:Ctrl+Shift+P を押し、「Developer: Reload Window」と入力して選択します。
- Copilot Chat を開きます:チャットビューを開きます(通常はアクティビティバーにアイコンがあります)。
- 接続を確認します:出力パネルに MCP サーバーの接続に関するメッセージが表示されることがあります(ドロップダウンから「GitHub Copilot Chat」または「MCP」を選択します)。
- ツールを使用します:Copilot Chat の入力欄に @workspace /tools list と入力し、Azure ツールが一覧に表示されることを確認します。次に、たとえば @workspace /invoke list_resource_groups
subscription_id=YOUR_SUB_IDauth_type=defaultのように入力して、ツールを呼び出してみます。
利用可能な MCP ツール
MCP サーバーは、Azure リソース管理用に次のツールを公開しています。
| ツール名 | 入力パラメーター | 説明 | 戻り値の形式 |
|---|---|---|---|
| list_resource_groups | • subscription_id(必須) • auth_type(必須) | サブスクリプション内のすべてのリソースグループを一覧表示します | 詳細情報を含むリソースグループの JSON 配列 |
| list_storage_accounts | • subscription_id(必須) • auth_type(必須) | サブスクリプション内のすべてのストレージアカウントを一覧表示します | 構成情報を含むストレージアカウントの JSON 配列 |
| list_storage_account_usage | • subscription_id(必須) • resource_group_name(必須) • storage_account_name(必須) • auth_type(必須) | 特定のアカウントのストレージ容量の使用状況を取得します | 使用済み容量(GB/TiB)を含む JSON オブジェクト |
| list_storage_account_usage_all | • subscription_id(必須) • auth_type(必須) | 特定のアカウントのストレージ容量の使用状況を取得します | 使用済み容量(GB/TiB)を含む JSON オブジェクト |
| get_vm_detail_by_name | • vm_name(必須) •subscription_id(必須) • auth_type(必須) | サブスクリプションの VM の詳細を取得します | VM の詳細を含む JSON オブジェクト |
| get_vms_by_team_tag | • team_value(必須) •subscription_id(必須) • auth_type(必須) | タグ値に基づいて、サブスクリプション内のすべての VM の詳細を取得します | 指定されたタグ値を持つ VM の詳細を含む JSON オブジェクト |
| trigger_vm_power_status_runbook | • vm_name_parameter(必須 - runbook パラメーターに基づきます) • subscription_id(必須) • auth_type(必須) •automation_resource_group_name(必須) • automation_account_name(必須) •runbook_name(必須) | タグ値に基づいて、サブスクリプション内のすべての VM の詳細を取得します | 指定されたタグ値を持つ VM の詳細を含む JSON オブジェクト |
注:すべてのツールで、auth_type パラメーターは次の値を受け付けます。
"default":DefaultAzureCredential を使用します(デフォルト)"spn":サービスプリンシパル認証を使用します"identity":マネージド ID 認証を使用します
認証方法
サーバーは、次の 3 つの認証方法をサポートしています。
-
Default Azure Credential(デフォルト)
- Azure Identity ライブラリの
DefaultAzureCredentialを使用します - ローカルでの開発とテストに適しています
- Azure Identity ライブラリの
-
サービスプリンシパル(spn)
ClientSecretCredentialを使用します- AZURE_TENANT_ID、AZURE_CLIENT_ID、AZURE_CLIENT_SECRET が必要です
-
マネージド ID(identity)
ManagedIdentityCredentialを使用します- Azure でホストされるデプロイに適しています
- AZURE_MANAGED_IDENTITY_CLIENT_ID を任意で指定できます
エラー処理
サーバーは、次のエラーを包括的に処理します。
- Azure API エラー
- 認証の失敗
- 無効なリクエスト
- リソースが見つからない場合
すべてのエラーはログに記録され、MCP プロトコルに準拠した構造化形式で返されます。
ロギング
サーバーは Python 標準の logging モジュールを使用し、次の機能を提供します。
- 設定可能なログレベル(デフォルト:INFO)
- 詳細な操作ログ
- 認証試行のログ
- エラーと例外のログ
コントリビューション
- リポジトリをフォークします
- フィーチャーブランチを作成します
- 変更をコミットします
- ブランチにプッシュします
- プルリクエストを作成します
ライセンス
詳細は LICENSE ファイルを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。