使用说明
Azure助理MCP
使用Azure资源图(ARG)探索Azure的最小、快速的MCP服务器。它生成并运行KQL来回答有关Azure环境的问题,具有清晰、明确的范围和可选的管理组覆盖范围。
免责声明
使用此项目的风险由您自行承担。它“按原样”提供,不提供任何形式的保证或担保。您全权负责如何使用它,包括配置、访问控制和遵守组织的策略。作者和贡献者对使用本软件造成的任何损害、数据丢失、安全事件、费用或违反政策不承担责任。没有雇主或组织暗示支持或支持这个项目。
为什么存在
- 使直接检查和运行ARG KQL变得简单。
- 避免重量级依赖;运送一个基于stdio的小型MCP服务器。
亮点
- 自然语言→ KQL用于常见任务;始终显示查询。
- 使用分页上限直接对ARG执行KQL(
top). - 响应中的显式范围:租户+订阅或管理组。
- 在管理组范围内自动发现订阅或查询。
- 用于快速范围调试的可选诊断模式。
需求
- Python 3.10+
- Azure SPN 读者 在您想要查询的范围内:
- 订阅: 读者 在每个目标订阅上
- 管理组: 读者 关于MG(和基础资源)
安装
- 从repo根目录:
pip install -e .- 或者使用包装器:
./azure-assistant-mcp.sh(更喜欢.venv如果存在)
- 使用包装器命令在客户端中添加为MCP stdio服务器。
-
确保包装器可执行:
chmod +x ./azure-assistant-mcp.sh -
示例(Claude桌面CLI):
claude mcp add azure-assistant-mcp \ /your/path/Azure-Assistant-MCP/azure-assistant-mcp.sh \ --env AZURE_ASSISTANT_CONFIG=/your/path/Azure-Assistant-MCP/azure-config.json \ --scope user \ --transport stdio
-
配置
- 把你的秘密放进去
azure-config.json(被git忽略)。看azure-config-example.json对于结构。 - 启动脚本导出
AZURE_ASSISTANT_CONFIG到回购azure-config.json以避免意外的交叉回购配置。 - 您还可以通过以下方式指向自定义位置
AZURE_ASSISTANT_CONFIG.
模式
- 最高级
debug(可选):启用诊断工具tenants:已配置租户列表
- 每位租户
id:租户guidname:友好名称service_principal.client_id/service_principal.client_secretdefault_subscription_id(可选回退)management_group_id(可选;短名称如contoso-root或完整资源id)。服务器将标准化为短名称。
范围规则
- 如果
subscription_ids提供:使用这些订阅。 - 否则,如果
use_all_subscriptions这是真的management_group_id已配置:在ARG的MG范围内运行。 - 否则,尝试通过ARM枚举订阅并使用该列表。
- 否则,请返回
default_subscription_id. - 响应始终打印
Tenant并且要么Scope: managementGroup=...或Subscriptions used: N.
工具
-
ask-azure:- 输入:
{ "question": string, "tenant_name?": string, "subscription_ids?": string[], "use_all_subscriptions?": boolean, "auto_execute?": boolean } - 为您的问题生成KQL。如果
auto_execute如果为true(默认),则使用范围界定规则执行它。如果tenant_name如果省略,服务器将从文本中启发式推断它(匹配名称和首字母缩写)。
- 输入:
-
list-tenants:- 输入:
{} - 列出已配置的租户
azure-config.json带有他们的ID,可选management_group_id,以及default_subscription_id以帮助您选择范围和SPN。
- 输入:
-
run-arg-kql:- 输入:
{ "kql_query": string, "tenant_name?": string, "subscription_ids?": string[], "use_all_subscriptions?": boolean, "top?": integer } - 使用范围界定规则执行提供的KQL。增加
Rows,Tenant,并将作用域行添加到标题。
- 输入:
-
run-kql-template:- 输入:
{ "template_name": string, "params?": object, "tenant_name?": string, "subscription_ids?": string[], "use_all_subscriptions?": boolean, "top?": integer } - 负载
src/azure_assistant_mcp/kql/<template_name>.md(带围栏的kql)或.kql,应用简单{{key}}替换自params,并按照范围界定规则执行。
- 输入:
-
list-subscriptions:- 输入:
{ "tenant_name?": string } - 列出订阅。尽可能使用ARM枚举,用ARG丰富;如果配置为返回完整列表,则更喜欢MG作用域。
- 输入:
-
vm-count-by-tenant:- 输入:
{ "tenant_names?": string[], "use_all_subscriptions?": boolean } - 使用范围界定规则对每个租户运行一个简单的VM计数。
- 输入:
-
diagnostics(仅在以下情况下显示debug是真的):- 输入:
{ "tenant_name?": string } - 打印配置路径、解析的租户、标准化的MG id、ARM枚举样本和计数、ARG MG覆盖率样本和计数以及默认范围决定。
- 输入:
-
arg-tables:- 输入:
{} - 打印常见Azure资源图表(资源容器、资源、资源更改、建议资源、健康资源、策略资源)的概述,包括目的和典型用例。
- 输入:
-
arg-examples:- 输入:
{ "topic?": string }主题可以在哪里subscriptions,resourcegroups,changes,containerchanges,advisor,health,或policy. - 返回ARG表中常见场景的示例KQL代码段。
- 输入:
KQL模板(自定义查询)
- 您可以编辑内置工具和示例使用的KQL,而无需接触Python代码。
- 模板位于
src/azure_assistant_mcp/kql/作为.md带有带围栏的kql块的文件(或普通文件.kql文件)。 - 在运行时,服务器加载这些模板。没有回退:如果缺少所需的模板,服务器会引发错误,以便您修复它。
- 通过设置覆盖模板目录
AZURE_ASSISTANT_KQL_PATH转到另一个文件夹。 - 示例:
list_subscriptions.mdlist_resource_groups.mduntagged_resource_groups.mdmanual_changes.mdresource_changes_recent.mdstopped_vms.mdgeneric_list_resources.md- 创建自己的,例如。
kubernetes_inventory.md,然后运行:run-kql-template { "template_name": "kubernetes_inventory", "params": { ... } }.
使用示例
- 按MG列出租户中的订阅:
- 工具:
list-subscriptions - 输入:
{ "tenant_name": "Contoso" }
- 工具:
- 统计租户中所有子服务器的虚拟机数量:
- 工具:
ask-azure - 输入:
{ "tenant_name": "Contoso", "question": "How many virtual machines exist?" }
- 工具:
- 直接在MG范围内的所有子系统上运行KQL:
- 工具:
run-arg-kql - 输入:
{ "tenant_name": "Contoso", "kql_query": "resourcecontainers | where type =~ 'microsoft.resources/subscriptions' | project name, subscriptionId | order by name asc" }
- 工具:
安全
- 不要提交真实的凭据。
azure-config.json被git忽略;使用示例文件作为模板。 - 考虑将机密存储在安全存储中,并对配置进行模板化。
- 确保服务主体对您查询的范围具有最低权限。
故障排除
- 只看到一个订阅:
- 添加a
management_group_id包含所有目标订阅或传递subscription_ids明确地。
- 添加a
BadRequest来自ARG:- 检查KQL语法和所选范围。从开始
run-arg-kql使用一个小查询和top.
- 检查KQL语法和所选范围。从开始
- 快速验证范围:
- 启用
debug: true并运行diagnostics租户的工具。
- 启用
发展
- 代码存在于
src/azure_assistant_mcp/.入口点是azure_assistant_mcp:main. - 包装脚本:
azure-assistant-mcp.sh(套PYTHONPATH和引脚AZURE_ASSISTANT_CONFIG). - 向后兼容性别名:
azure-assistant.sh(已弃用)。 - 依赖关系:
mcp,python-dotenv,azure-identity,azure-mgmt-resourcegraph,azure-mgmt-subscription.
克劳德代码
- 建议的分代理:
Claude_Agents/azure-cloud-architect.md--一个Azure云架构助手,您可以在Claude Code中与此MCP服务器一起加载。 - 开始:
- 复制
Claude_Agents/azure-cloud-architect.md进入你的.claude/agents文件夹
- 复制
贡献
- 欢迎发布问题和PR。请在示例和日志中省略真实的租户ID、机密或组织名称。
许可证
- 根据Apache-2.0许可。看
LICENSE完整条款。 - 归因:该项目包括
NOTICE文件。根据Apache-2.0§4(d),再分发者必须在NOTICE在任何源代码发行版、文档或通常出现此类通知的对话框中。
商业用途和赞助
- 鼓励企业用户在文档或相关页面中对项目进行归因。
- 如果您的组织从该项目中受益,请考虑赞助或商业支持协议。
- 选项:
- 商业支持/许可证查询:打开问题或联系维护人员。