使用说明
Azure MCP服务器
用于Azure资源管理和探索的模型上下文协议(MCP)服务器实现。此服务器提供了一个结构化接口,可以使用模型上下文协议与Azure资源进行交互,从而更容易以编程方式管理和监视Azure基础架构。
概述
Azure MCP Server是一个基于Python的实现,充当MCP客户端和Azure服务之间的桥梁。它提供了一组工具和端点来管理各种Azure资源,如资源组和存储帐户,具有内置的身份验证处理和结构化响应格式。
特性
- 使用现代Azure SDK的异步Azure操作
- 支持多种身份验证方法(默认、服务主体、托管身份)
- 使用MCP协议的结构化响应格式
- 全面的错误处理和记录
- 环境变量配置支持
先决条件
- Python 3.13或更高版本
- Azure订阅
- Azure CLI(建议用于本地开发)
设置和安装
- 克隆存储库:
git clone <repository-url>
cd azure-mcp-server
- 安装uv(通用虚拟环境):
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服务器:
-
使用标准传输
uv run server.py -
使用SSE传输
如果您想将mcp服务器作为SSE注释公开在以下部分中 服务器.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.py它应该开始Uvicorn,继续听
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连接
由于服务器现在独立运行,并在HTTP上侦听SSE连接,因此您无法使用 mcp dev server.py (这迫使stdio)。
您需要一个配置为通过SSE连接的客户端。
以下是几种方法:
方法A:MCP检查器(独立模式)
-
保持uv run-main.py在一个终端中运行。
-
打开一个新的终端。确保虚拟环境也处于活动状态。
-
独立启动Inspector(不带mcp-dev):
npx @modelcontextprotocol/inspector
(注意:这使用npx直接运行检查器。您不需要在此处传递服务器脚本。)
- MCP检查器UI将出现,但最初不会连接。
- 在顶部的“服务器连接”窗格中:
- 选择
SSE从“运输”下拉列表中。 - 输入服务器运行的URL:
http://127.0.0.1:8000/sse(如果您更改了主机/端口,请提供相应的URL)。 - 点击 “连接” 按钮(它可能看起来像插头图标或类似图标)。
- 选择
- 检查连接:UI应指示连接成功。您还应该在运行uv run main.py的终端中看到日志消息,指示客户端已连接(如GET请求)。
- 测试工具:现在导航到检查器中的“工具”选项卡,选择您的Azure工具(list_resource_groups、list_storage_accounts等),输入参数(如subscription_id、auth_type),然后单击“调用工具”。结果应显示在输出窗格中。
方法B:VS代码(使用GitHub Copilot聊天代理)
如果你使用VS Code,GitHub Copilot Chat扩展可以充当MCP主机/客户端。
- 保持uv运行main.py。
- 打开VS代码。
- 打开VS代码设置(JSON):按Ctrl+Shift+P(或Cmd+Shift+P),键入“首选项:打开用户设置(JSON”)”,然后选择它。
- 添加MCP服务器配置:在settings.json中添加或修改MCP.servers部分。至关重要的是,指定url和传输:
"mcp": {
"servers": {
"azure-mcp-server": {
"url": "http://127.0.0.1:8080/sse", // replace hostname based on the host
"type": "sse"
}
}
}
- 保存settings.json。
- 重新加载VS代码:按Ctrl+Shift+P,键入“开发人员:重新加载窗口”,然后选择它。
- 打开副驾驶聊天:打开聊天视图(通常是活动栏中的图标)。
- 检查连接:您可能会在输出面板中看到有关MCP服务器连接的消息(从下拉列表中选择“GitHub Copilot Chat”或“MCP”)。
- 与工具交互:在副驾驶聊天输入中,键入@workspace/Tools list查看是否列出了您的Azure工具。然后,尝试调用一个,例如@workspace/inquire 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(必填) |
获取特定帐户的存储容量使用情况 | JSON对象,已用容量单位为GB/TiB |
| list_storage_account_usage_all | •subscription_id(必填) •auth_type(必填) |
获取特定帐户的存储容量使用情况 | JSON对象,已用容量单位为GB/TiB |
| get_vm_detail_by_name | •vm_name(必填)•subscription_id(必填) •auth_type(必填) |
获取订阅的vm详细信息 | 包含vm详细信息的JSON对象 |
| get_vms_by_teag_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":使用托管身份验证
身份验证方法
服务器支持三种身份验证方法:
-
默认Azure凭据 (默认)
- 用途
DefaultAzureCredential来自Azure身份库 - 适合本地开发和测试
- 用途
-
服务主体 (spn)
- 用途
ClientSecretCredential - 需要AZURE_TENANT_ID、AZURE_CLIENT_ID和AZURE_CLEENT_CRET
- 用途
-
管理身份 (身份)
- 用途
ManagedIdentityCredential - 适用于Azure托管部署
- 可选接受AZURE_MANAGED_IDENTIT_LIENT_ID
- 用途
错误处理
服务器为以下对象实现了全面的错误处理:
- Azure API错误
- 身份验证失败
- 无效请求
- 未找到资源场景
所有错误都会按照MCP协议以结构化格式记录和返回。
日志记录
服务器使用Python的内置日志模块,具有以下功能:
- 可配置的日志级别(默认值:INFO)
- 详细的操作日志
- 身份验证尝试日志记录
- 错误和异常日志记录
贡献
- 分叉存储库
- 创建要素分支
- 提交您的更改
- 推到分支
- 创建拉取请求
许可证
请参阅 许可证 文件以获取详细信息。
