项目简介
本项目(azd-azure-mcp)提供了一个基于 Model Context Protocol (MCP) 的统一服务器实现,旨在通过标准的 MCP 接口,为大型语言模型(LLM)客户端提供对 Azure 资源和服务进行自动化和管理的动态能力。
该服务器的核心特点在于其模块化和可扩展的架构。它本身作为根 MCP 服务器运行,但并不直接实现所有 Azure 功能。相反,它通过动态发现、按需安装和调用更小的、特定于服务(如存储、密钥保险库、资源组等)的 MCP 扩展服务器来提供功能。根服务器充当客户端与这些扩展服务器之间的协调者和路由器。这种设计使得 Azure 团队可以独立开发、发布和更新 MCP 扩展,而无需修改或重新部署根服务器。
主要功能点
- 统一访问入口: 根服务器提供一个单一的入口点(通过 'azure' 工具),LLM 客户端只需连接到这一个服务器即可访问多种 Azure 能力。
- 动态工具发现: 服务器能够动态发现已安装和可用的 Azure MCP 扩展,并将它们作为子工具暴露给 LLM 客户端。
- 按需加载与执行: MCP 扩展在首次需要时才会被动态安装和启动,优化了资源使用和启动速度。
- 模块化与可扩展性: 新的 Azure 服务能力可以通过开发新的 MCP 扩展来轻松添加,而无需修改现有服务器代码。
- 集成 Azure CLI ('azd'): 利用 Azure Developer CLI ('azd') 的扩展机制来管理和调用底层的 Azure MCP 扩展。
- 支持核心 MCP 功能: 实现 MCP 协议中工具(Tools)相关的能力声明和调用处理。
安装步骤
- 安装 Azure Developer CLI ('azd'): 确保您的系统上已安装 'azd' CLI 工具。可以从 Azure 官方文档获取安装指南。
- 克隆仓库: 将 azd-azure-mcp 仓库克隆到本地。
- 构建 Go 项目: 项目由多个 Go 模块组成(mcp.azure, mcp.azd, 等)。您需要分别构建这些模块以生成可执行文件。进入每个模块的目录(例如 'mcp.azure'),使用 Go 命令进行构建。
对所有需要的模块(mcp.azure, mcp.azd, mcp.resource, mcp.keyvault, mcp.storage 等)重复此步骤。cd azd-azure-mcp/mcp.azure go build . - 确保 'azd' 可执行文件在 PATH 中: 构建完成后,确保生成的 'mcp.azure' 可执行文件(以及其他扩展模块的可执行文件,虽然它们通常由 'azd' 调用)可以在系统的 PATH 环境变量中找到,或者在调用命令时提供完整路径。
服务器配置
MCP 客户端需要以下信息来连接到 'azd-azure-mcp' 根服务器('mcp.azure' 组件):
- 服务器名称 (Server Name): Azure
- 说明:客户端用于识别此 MCP 服务器的友好名称。
- 传输协议 (Transport): Stdio
- 说明:服务器通过标准输入/输出来与客户端通信。
- 启动命令 (Command): azd
- 说明:用于启动服务器进程的可执行文件或命令。
- 命令参数 (Args):
- mcp
- azure
- server
- start
- 说明:传递给启动命令的参数,用于指示 'azd' 运行 'mcp.azure' 模块的 'server start' 子命令。
客户端配置通常会包含类似以下结构的 JSON 片段:
{ "servers": [ { "name": "Azure", "mode": "stdio", "command": "azd", "args": ["mcp", "azure", "server", "start"], "description": "MCP server for Azure resource management and automation via azd extensions." } // 可能还有其他外部 MCP 服务器的配置 ] }
(请注意:此处的 JSON 结构仅为示例,实际客户端配置格式可能有所不同。)
基本使用方法
与此 MCP 服务器交互主要通过 MCP 的 'CallTool' 请求来使用其唯一暴露的根工具:"azure"。
- 发现子工具 ("Learn" Pattern): 要了解此服务器通过其扩展提供了哪些具体的 Azure 能力(如存储、密钥保险库、资源组等),LLM 客户端应向 "azure" 工具发送 'CallTool' 请求,并在参数中包含 '"learn": true'。服务器将返回一个包含可用子工具列表及其基本描述的响应。
{ "method": "tool/call", "params": { "name": "azure", "arguments": { "learn": true } } } - 发现特定子工具的命令和参数: 如果需要深入了解某个特定的 Azure 领域(例如存储)支持哪些操作和参数,LLM 客户端应向 "azure" 工具发送 'CallTool' 请求,包含 '"learn": true' 和 '"tool": "storage"' (或任何其他发现的子工具名称)。服务器将按需启动相应的扩展服务器,并调用其 'ListTools' 方法,然后返回该扩展服务器支持的详细工具(命令)列表及其参数 schema。
{ "method": "tool/call", "params": { "name": "azure", "arguments": { "learn": true, "tool": "storage" } } } - 执行具体操作: 当 LLM 客户端确定要执行的 Azure 操作(子工具名称、命令名称和所需参数)后,应向 "azure" 工具发送 'CallTool' 请求,包含 '"tool": "..."','"command": "..."',以及将操作所需参数放入 '"parameters": {...}' 对象中。根服务器将把此请求路由到相应的子 MCP 服务器进行处理。
{ "method": "tool/call", "params": { "name": "azure", "arguments": { "tool": "storage", "command": "list-containers", "parameters": { "storageAccountName": "myaccountname" } } } }
服务器的响应将包含操作结果(通常是文本或 JSON 格式的输出),以及可能的后续步骤建议。
信息
分类
AI与计算