Azure架构MCP服务器
一个MCP(模型上下文协议)服务器,为人工智能助手提供发现Azure日志分析表模式和Microsoft Graph API结构的能力。通过允许AI直接查询实际的列名和数据类型,这消除了编写KQL查询或调用API时的猜测。
特性
- 表架构发现:发现任何日志分析表的列名和类型
- 查询测试:执行测试KQL查询以查看示例结果
- 表列表:列出工作区中的所有可用表
- 图表API反思:发现Microsoft Graph API终结点的属性
- 智能高速缓存:两层缓存(内存+磁盘)用于快速响应
- Azure CLI身份验证:使用现有的Azure CLI凭据(或其他DefaultAzureCredentials源)
先决条件
- Node.js 18或更高版本
- 带有日志分析工作区的Azure订阅
- Azure Active Directory租户
- Azure CLI已安装并通过身份验证 (
az login)
安装
- 克隆或下载 将此存储库迁移到全局位置:
cd C:\Users\YourName\Development
git clone azure-schema-mcp
cd azure-schema-mcp- 安装依赖项:
npm install- 构建TypeScript代码:
npm run build- 配置环境变量:
复制 .env.example 到 .env:
cp .env.example .env编辑 .env 并填写您的Azure详细信息:
# Your Azure Active Directory tenant ID (GUID)
AZURE_TENANT_ID=12345678-1234-1234-1234-123456789abc
# Your Log Analytics workspace ID (GUID)
AZURE_WORKSPACE_ID=87654321-4321-4321-4321-cba987654321
# Optional: Cache directories (defaults shown below)
TOKEN_CACHE_DIR=./.cache
SCHEMA_CACHE_DIR=./.cache/schemas身份验证设置
此MCP服务器使用 DefaultAzureCredential 其按顺序自动尝试多种身份验证方法:
- 环境变量 (服务负责人)
- Azure命令行界面 (
az login) - 推荐用于当地发展 - Visual Studio Code (如果已登录)
- 管理身份 (在Azure中运行时)
快速入门-Azure CLI(推荐)
最简单的身份验证方法是使用Azure CLI:
# Install Azure CLI if not already installed
# Download from: https://aka.ms/installazurecliwindows
# Login to Azure
az login
# Verify your login
az account show登录后,MCP服务器将自动使用您的Azure CLI凭据。无需设备代码流!
备选方案-服务负责人(生产)
对于生产或CI/CD场景,设置环境变量:
$env:AZURE_CLIENT_ID="your-client-id"
$env:AZURE_CLIENT_SECRET="your-client-secret"
$env:AZURE_TENANT_ID="your-tenant-id"VS代码集成
要在VS代码中将此MCP服务器与GitHub Copilot一起使用:
- 创建或编辑
.vscode/mcp.json在任何工作空间中:
{
"servers": {
"azure-schema-mcp": {
"type": "stdio",
"command": "node",
"args": ["C:\\Users\\YourName\\Development\\azure-schema-mcp\\build\\index.js"],
"env": {
"NODE_ENV": "production"
}
}
}
}- 重新启动VS Code或重新加载窗口
- AI助手现在可以使用以下工具:
可用的MCP工具
1. get_kql_table_schema
发现日志分析表的架构。
参数:
tableName(string):表的名称(例如,“QualysHostDetectionV3_CL”)
例子:
User: "What columns are in the SecurityAlert table?"
AI calls: get_kql_table_schema({ tableName: "SecurityAlert" })退货:
{
"tableName": "SecurityAlert",
"columns": [
{ "name": "TimeGenerated", "type": "datetime", "ordinal": 0 },
{ "name": "AlertName", "type": "string", "ordinal": 1 },
{ "name": "Severity", "type": "string", "ordinal": 2 }
],
"discoveredAt": "2025-11-19T10:30:00.000Z",
"cached": false
}2. test_kql_query
执行KQL查询并返回示例结果。
参数:
query(string):要执行的KQL查询maxRows(数字,可选):要返回的最大行数(默认值:10)
例子:
User: "Show me sample data from SecurityAlert"
AI calls: test_kql_query({
query: "SecurityAlert | project TimeGenerated, AlertName, Severity",
maxRows: 5
})3. list_tables
列出日志分析工作区中的所有可用表。
例子:
User: "What tables are available?"
AI calls: list_tables({})退货:
{
"tables": [
"SecurityAlert",
"SecurityEvent",
"QualysHostDetectionV3_CL",
"Heartbeat"
],
"count": 4
}4. get_graph_api_schema
通过获取示例数据来发现Microsoft Graph API端点的结构。
参数:
endpoint(字符串):图形API端点路径(例如,“/security/alerts”)sampleSize(number,可选):要获取的样本记录数(默认值:2)
例子:
User: "What fields does the /security/alerts endpoint return?"
AI calls: get_graph_api_schema({
endpoint: "/security/alerts",
sampleSize: 2
})5. refresh_schema
强制刷新表或终结点的缓存架构。
参数:
source(字符串):要刷新的表名或API终结点
例子:
User: "Refresh the schema cache for SecurityAlert"
AI calls: refresh_schema({ source: "SecurityAlert" })6. generate_sdk_code
生成用于查询表的工作Types/JavaScript代码模式。
参数:
tableName(string):表的名称(例如,“QualysHostDetectionV3_CL”)framework(字符串,可选):“反应”、“节点”或“内联”(默认值:“内联”)authType(字符串,可选):“msal浏览器”或“默认凭据”(默认值:“msal-browser”)
例子:
User: "Generate React code to query SecurityAlert"
AI calls: generate_sdk_code({
tableName: "SecurityAlert",
framework: "react",
authType: "msal-browser"
})退货: 完整的工作代码,包括导入、身份验证设置、查询执行和错误处理。
7. generate_example_query
根据表模式和操作类型生成KQL查询示例。
参数:
tableName(string):表的名称operation(字符串):“simple_select”、“filter”、“aggregation”、“parse_json”或“mv_expand”timeRange(字符串,可选):KQL格式的时间范围(默认值:“30d”)
例子:
User: "Show me how to parse JSON in QualysHostDetectionV3_CL"
AI calls: generate_example_query({
tableName: "QualysHostDetectionV3_CL",
operation: "parse_json"
})退货: 使用带有注释的KQL查询来解释每个运算符。
8. detect_table_workspace
测试哪个工作区包含表并返回元数据。
参数:
tableName(string):要搜索的表的名称workspaceIds(array,可选):要检查的工作区ID数组
例子:
User: "Which workspace has QualysHostDetectionV3_CL?"
AI calls: detect_table_workspace({
tableName: "QualysHostDetectionV3_CL"
})退货:
{
"tableName": "QualysHostDetectionV3_CL",
"foundIn": [
{
"workspaceId": "6f6d3595-d0ef-4469-bc55-1ee067c3cc13",
"workspaceName": "secondary",
"hasData": true,
"rowCount": 27,
"dateRange": {
"earliest": "2025-10-20T00:00:00Z",
"latest": "2025-11-19T10:23:45Z"
}
}
],
"notFoundIn": []
}9. find_working_query_examples
在代码库中搜索现有的工作查询(需要文件系统访问权限)。
参数:
tableName(string):要查找示例的表的名称
注: 此工具当前返回一条占位符消息,指示需要访问文件系统。未来的版本可能会与VS Code的工作空间API集成。
代币管理的工作原理
MCP服务器使用自动管理Azure身份验证令牌 DefaultAzureCredential:
- 认证:使用Azure CLI凭据(来自
az login)或其他凭证来源 - 令牌缓存:令牌被缓存到
.cache/azure-token.json - 自动刷新:每次请求前都会检查令牌,如果在5分钟内到期,则会刷新令牌
- 无用户交互:在后台默默工作-非常适合MCP服务器!
缓存目录
模式缓存在两层中:
- 内存缓存:在当前会话期间快速访问
- 磁盘缓存:在服务器重新启动之间持续
.cache/schemas/
缓存文件的名称如下:
table_SecurityAlert.json(用于表模式)api_security_alerts.json(适用于API架构)
您可以安全地删除 .cache 目录以清除所有缓存。
发展
在开发模式下运行并自动重新加载:
npm run dev清理构建工件:
npm run clean故障排除
身份验证错误
如果您看到身份验证错误:
- 请确保您已使用Azure CLI登录:
az login - 验证您是否有权访问工作区:
az monitor log-analytics workspace show --workspace-name --resource-group - 删除
.cache/azure-token.json清除缓存的令牌 - 重新启动MCP服务器
“找不到表”错误
确保:
- 您的工作区ID在中正确
.env - 表名拼写正确(区分大小写)
- 您具有工作区的读取权限
构建过程中的类型错误
当前版本可能会显示有关索引签名的TypeScript警告。如果服务器正常运行,这些都是不重要的。
用例
此MCP服务器解决了人工智能辅助Azure开发中的常见痛点:
❌ 之前:
User: "Query SecurityAlert for high severity alerts"
AI: "SecurityAlert | where SeverityLevel == 'High'" // Wrong column name!
Result: Error - column 'SeverityLevel' not found✅ 之后:
User: "Query SecurityAlert for high severity alerts"
AI: [calls get_kql_table_schema("SecurityAlert")]
AI: "SecurityAlert | where AlertSeverity == 'High'" // Correct column name!
Result: Success!许可证
麻省理工学院
贡献
问题和拉取请求欢迎!
