Azure资源管理服务器

Azure MCP Server是一个基于Python实现的模型上下文协议服务器,用于通过结构化接口管理和监控Azure资源,支持多种认证方法和异步操作。

  • by Rajkumar-21
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 rajkumar-21/azure-mcp-server

使用说明

Azure MCP服务器

用于Azure资源管理和探索的模型上下文协议(MCP)服务器实现。此服务器提供了一个结构化接口,可以使用模型上下文协议与Azure资源进行交互,从而更容易以编程方式管理和监视Azure基础架构。

概述

Azure MCP Server是一个基于Python的实现,充当MCP客户端和Azure服务之间的桥梁。它提供了一组工具和端点来管理各种Azure资源,如资源组和存储帐户,具有内置的身份验证处理和结构化响应格式。

特性

  • 使用现代Azure SDK的异步Azure操作
  • 支持多种身份验证方法(默认、服务主体、托管身份)
  • 使用MCP协议的结构化响应格式
  • 全面的错误处理和记录
  • 环境变量配置支持

先决条件

  • Python 3.13或更高版本
  • Azure订阅
  • Azure CLI(建议用于本地开发)

设置和安装

  1. 克隆存储库:
git clone <repository-url>
cd azure-mcp-server
  1. 安装uv(通用虚拟环境):
curl -LsSf https://astral.sh/uv/install.ps1 | powershell
  1. 创建虚拟环境并安装依赖关系:
# 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",
]
  1. 配置环境变量: 创建一个 .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

运行服务器

  1. 启动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_ID auth_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":使用托管身份验证

身份验证方法

服务器支持三种身份验证方法:

  1. 默认Azure凭据 (默认)

    • 用途 DefaultAzureCredential 来自Azure身份库
    • 适合本地开发和测试
  2. 服务主体 (spn)

    • 用途 ClientSecretCredential
    • 需要AZURE_TENANT_ID、AZURE_CLIENT_ID和AZURE_CLEENT_CRET
  3. 管理身份 (身份)

    • 用途 ManagedIdentityCredential
    • 适用于Azure托管部署
    • 可选接受AZURE_MANAGED_IDENTIT_LIENT_ID

错误处理

服务器为以下对象实现了全面的错误处理:

  • Azure API错误
  • 身份验证失败
  • 无效请求
  • 未找到资源场景

所有错误都会按照MCP协议以结构化格式记录和返回。

日志记录

服务器使用Python的内置日志模块,具有以下功能:

  • 可配置的日志级别(默认值:INFO)
  • 详细的操作日志
  • 身份验证尝试日志记录
  • 错误和异常日志记录

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 提交您的更改
  4. 推到分支
  5. 创建拉取请求

许可证

请参阅 许可证 文件以获取详细信息。