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
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
# Optionally set your default subscription
az account set --subscription 重要:服务器查询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代码)
- 创建一个
.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.
- 重新加载VS代码(
Ctrl+Shift+P→ “开发人员:重新加载窗口”)
- 在Copilot Chat(代理模式)中,询问以下内容:
eastus2提供了哪些GPU VM尺寸?给我看看他们的vCPU和内存规格。
副驾驶将调用 search_azure_skus 工具自动。
示例:NC和ND SKU上的缓存磁盘大小
在Copilot聊天(代理模式)中,我们问:
NC和ND SKU的缓存磁盘大小是多少?
自动副驾驶:
- 进行了两次并行的工具调用 --一个与
filter_str="Standard_NC"另一个与filter_str="Standard_ND"--一次查询两个SKU系列。 - 已提取
CachedDiskBytes能力 从每个SKU结果中提取数据,并将其从字节转换为人类可读的GB。 - 结果以表格形式呈现,按系列分组。
这演示了MCP工具如何返回原始JSON数据,人工智能如何处理所有的格式化和分析——你问一个自然语言问题,得到一个结构化的答案。
Copilot invoking the Azure SKU Explorer tool
项目结构
azure-sku-mcp/
├── server.py # MCP server with search_azure_skus tool
├── requirements.txt # Pinned dependencies
└── README.md # This file许可证
麻省理工学院
