项目简介

本项目(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)相关的能力声明和调用处理。

安装步骤

  1. 安装 Azure Developer CLI ('azd'): 确保您的系统上已安装 'azd' CLI 工具。可以从 Azure 官方文档获取安装指南。
  2. 克隆仓库: 将 azd-azure-mcp 仓库克隆到本地。
  3. 构建 Go 项目: 项目由多个 Go 模块组成(mcp.azure, mcp.azd, 等)。您需要分别构建这些模块以生成可执行文件。进入每个模块的目录(例如 'mcp.azure'),使用 Go 命令进行构建。
    cd azd-azure-mcp/mcp.azure
    go build .
    对所有需要的模块(mcp.azure, mcp.azd, mcp.resource, mcp.keyvault, mcp.storage 等)重复此步骤。
  4. 确保 '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"。

  1. 发现子工具 ("Learn" Pattern): 要了解此服务器通过其扩展提供了哪些具体的 Azure 能力(如存储、密钥保险库、资源组等),LLM 客户端应向 "azure" 工具发送 'CallTool' 请求,并在参数中包含 '"learn": true'。服务器将返回一个包含可用子工具列表及其基本描述的响应。
    {
      "method": "tool/call",
      "params": {
        "name": "azure",
        "arguments": {
          "learn": true
        }
      }
    }
  2. 发现特定子工具的命令和参数: 如果需要深入了解某个特定的 Azure 领域(例如存储)支持哪些操作和参数,LLM 客户端应向 "azure" 工具发送 'CallTool' 请求,包含 '"learn": true' 和 '"tool": "storage"' (或任何其他发现的子工具名称)。服务器将按需启动相应的扩展服务器,并调用其 'ListTools' 方法,然后返回该扩展服务器支持的详细工具(命令)列表及其参数 schema。
    {
      "method": "tool/call",
      "params": {
        "name": "azure",
        "arguments": {
          "learn": true,
          "tool": "storage"
        }
      }
    }
  3. 执行具体操作: 当 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与计算