Azure SKU查询工具

一个通过Model Context Protocol (MCP)服务器提供Azure计算SKU信息查询的工具,适用于AI助手。

  • by edwardsp
  • Python
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 edwardsp/azure-sku-mcp

使用说明

Azure SKU资源管理器MCP服务器

A. 模型上下文协议(MCP) 将Azure Compute SKU信息作为AI助手的工具公开的服务器。建于 FastMCP.

它做什么

提供单一工具-- search_azure_skus -查询Azure Resource SKU API并返回任何Azure区域的VM大小、功能(vCPU、内存、GPU、加速网络等)和限制信息。结果可以通过搜索字符串进行筛选。

先决条件

  • Python 3.10+
  • 已配置凭据的Azure订阅(Azure CLI、托管身份、环境变量等)

设置

# Clone the repo
git clone <repo-url>
cd azure-sku-mcp

# Create and activate a virtual environment
python3 -m venv .venv
source .venv/bin/activate

# Install dependencies
pip install fastmcp azure-identity azure-mgmt-subscription azure-mgmt-compute

通过Azure身份验证

服务器使用 AzureCliCredential 用于身份验证。您必须通过Azure CLI登录:

az login --tenant <tenant-id>
# Optionally set your default subscription
az account set --subscription <subscription-id>

重要:服务器查询Azure资源SKU API,这需要:

  • Azure订阅ID (AZURE_SUBSCRIPTION_ID 环境变量)
  • Azure租户ID (AZURE_TENANT_ID 环境变量)

运行服务器

# Stdio transport (default — used by MCP clients like GitHub Copilot)
python server.py

测试

验证服务器负载和工具是否已注册:

source .venv/bin/activate

python -c "
import asyncio
from server import mcp

async def main():
    tools = await mcp.list_tools()
    for t in tools:
        print(f'Tool: {t.name}')
    print('Server OK')

asyncio.run(main())
"

使用实时Azure查询测试该工具(需要 az login):

python -c "
import asyncio, json
from server import mcp

async def main():
    result = await mcp.call_tool('search_azure_skus', {
        'location': 'eastus',
        'filter_str': 'Standard_NC'
    })
    # result.content contains TextContent with JSON
    for item in result.content:
        data = json.loads(item.text)
        for sku in data[:3]:
            print(f\"{sku['name']:30s} vCPUs={sku['capabilities'].get('vCPUs','?'):>3s}  Mem={sku['capabilities'].get('MemoryGB','?'):>5s} GB\")
        print(f'... {len(data)} SKUs matched')

asyncio.run(main())
"

预期输出(示例):

Standard_NC12s_v3              vCPUs= 12  Mem=  224 GB
Standard_NC16as_T4_v3          vCPUs= 16  Mem=  110 GB
Standard_NC24ads_A100_v4       vCPUs= 24  Mem=  220 GB
... 13 SKUs matched

添加到GitHub副本(VS代码)

  1. 创建一个 .vscode/mcp.json 项目根目录中的文件:
{
    "mcp": {
        "servers": {
            "azure-sku-explorer": {
                "command": "/absolute/path/to/azure-sku-mcp/.venv/bin/python",
                "args": ["/absolute/path/to/azure-sku-mcp/server.py"],
                "env": {
                    // Required: Your Azure subscription ID
                    "AZURE_SUBSCRIPTION_ID": "your-subscription-id-here",
                    // Required: Your Azure tenant ID
                    "AZURE_TENANT_ID": "your-tenant-id-here"
                }
            }
        }
    }
}

替换 /absolute/path/to/ 根据实际路径(例如。, /home/paul/Microsoft/)并设置您的 AZURE_SUBSCRIPTION_ID.

  1. 重新加载VS代码(Ctrl+Shift+P → “开发人员:重新加载窗口”)

  2. 在Copilot Chat(代理模式)中,询问以下内容:

eastus2提供了哪些GPU VM尺寸?给我看看他们的vCPU和内存规格。

副驾驶将调用 search_azure_skus 工具自动。

示例:NC和ND SKU上的缓存磁盘大小

在Copilot聊天(代理模式)中,我们问:

NC和ND SKU的缓存磁盘大小是多少?

自动副驾驶:

  1. 进行了两次并行的工具调用 --一个与 filter_str="Standard_NC" 另一个与 filter_str="Standard_ND" --一次查询两个SKU系列。
  2. 已提取 CachedDiskBytes 能力 从每个SKU结果中提取数据,并将其从字节转换为人类可读的GB。
  3. 结果以表格形式呈现,按系列分组。

这演示了MCP工具如何返回原始JSON数据,人工智能如何处理所有的格式化和分析——你问一个自然语言问题,得到一个结构化的答案。

项目结构

azure-sku-mcp/
├── server.py          # MCP server with search_azure_skus tool
├── requirements.txt   # Pinned dependencies
└── README.md          # This file

许可证

麻省理工学院