mcpField
A
Azure MCP Server

Azure MCP Server

本地服务
github.com/Rajkumar-21云与基础设施075 周前更新

关于 Azure MCP Server

Azure MCP Server 是面向 Azure 管理与运维场景的 Python MCP 服务,可供 MCP 客户端查询资源组、存储账户和虚拟机信息,并执行虚拟机自动化操作。它支持多种 Azure 身份验证方式,并提供 stdio 与 SSE 连接方式。

主要功能

  1. 01列出资源组与存储账户
  2. 02查询存储用量及虚拟机详情
  3. 03按团队标签筛选虚拟机
  4. 04触发虚拟机电源状态 Runbook
  5. 05支持三种 Azure 身份验证方式

适用场景

  1. 01盘点订阅中的资源组与存储账户
  2. 02检查存储账户容量使用情况
  3. 03按团队标签查找虚拟机
  4. 04通过 Runbook 执行虚拟机操作

MCP 相关

作为 MCP 服务,它向 MCP 客户端提供 Azure 资源查询与管理工具,并以结构化格式返回结果。支持 stdio 和 SSE 传输。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Azure MCP 服务

用于 Azure 资源管理和探索的模型上下文协议(MCP)服务实现。此服务提供了一个结构化接口,通过模型上下文协议与 Azure 资源交互,让你能够以编程方式更轻松地管理和监控 Azure 基础设施。

概述

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

功能

  • 使用现代 Azure SDK 执行异步 Azure 操作
  • 支持多种身份验证方式(Default、Service Principal、Managed Identity)
  • 使用 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 服务:
  • 使用 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.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 Inspector(独立模式)

  • 在一个终端中保持 uv run main.py 运行。

  • 打开一个新终端,并确保其中也已激活虚拟环境。

  • 独立启动 Inspector(不使用 mcp dev):

    npx @modelcontextprotocol/inspector
    

(注意:这会使用 npx 直接运行 Inspector。这里无需传入服务器脚本。)

  • MCP Inspector 界面会显示,但初始状态下尚未连接。
  • 在顶部的“Server Connection”面板中:
    • 在“Transport”下拉菜单中选择 SSE。
    • 输入服务器运行的 URL:http://127.0.0.1:8000/sse(如果更改了主机或端口,请使用相应的 URL)。
    • 点击 “Connect” 按钮(它可能显示为插头图标或类似图标)。
  • 检查连接:界面应显示连接成功。运行 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 Agent)

如果你使用 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:打开聊天视图(通常是活动栏中的一个图标)。
  • 检查连接:你可能会在“Output”面板中看到 MCP 服务正在连接的消息(从下拉菜单中选择“GitHub Copilot Chat”或“MCP”)。
  • 使用工具:在 Copilot Chat 输入框中输入 @workspace /tools list,查看是否列出了 Azure 工具。然后尝试调用其中一个,例如 @workspace /invoke 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(必需)
获取特定帐户的存储容量使用情况包含已用容量(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":使用托管标识身份验证

身份验证方法

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

  1. 默认 Azure 凭据(默认)

    • 使用 Azure Identity 库中的 DefaultAzureCredential
    • 适用于本地开发和测试
  2. 服务主体(spn)

    • 使用 ClientSecretCredential
    • 需要 AZURE_TENANT_ID、AZURE_CLIENT_ID 和 AZURE_CLIENT_SECRET
  3. 托管标识(identity)

    • 使用 ManagedIdentityCredential
    • 适用于托管在 Azure 上的部署
    • 可选接受 AZURE_MANAGED_IDENTITY_CLIENT_ID

错误处理

服务实现了全面的错误处理,涵盖:

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

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

日志记录

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

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

贡献

  1. Fork 此仓库
  2. 创建功能分支
  3. 提交更改
  4. 推送到该分支
  5. 创建 Pull Request

许可证

详情请参阅 LICENSE 文件。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。