项目简介

该项目是 Microsoft Model Context Protocol (MCP) 服务器的核心框架和参考实现。MCP 协议旨在标准化人工智能应用(特别是大型语言模型 LLM)与外部数据源和工具的集成方式。这个框架使得 LLM 能够以结构化的方式访问上下文信息并调用外部功能,从而提升其任务执行能力和灵活性。它主要用于构建提供 Azure 服务上下文和自动化能力的 MCP 服务器。

主要功能点

  • 灵活的工具管理: 动态发现、加载和管理各种工具,这些工具可以代表特定的 Azure 服务(如存储、Key Vault)或开发者操作,并支持通过命名空间进行分组。
  • 多种操作模式: 提供三种服务器运行模式,以适应不同粒度的 LLM 交互需求:
    • “单工具代理” (Single Proxy) 模式: 暴露一个名为 "azure" 的总括工具,LLM 通过它来路由对所有 Azure MCP 工具的调用。
    • “命名空间代理” (Namespace Proxy) 模式: 针对每个服务命名空间(例如 "storage", "keyvault")暴露一个独立的工具,该工具负责处理其命名空间下的所有命令。
    • “全工具” (All) 模式: 将所有可用的 Azure MCP 命令作为独立的工具暴露,提供最细粒度的控制。
  • 上下文感知: 允许 LLM 通过调用工具获取实时的 Azure 订阅列表、资源组信息以及特定服务的配置和状态等上下文数据。
  • 可扩展性架构: 设计为高度模块化和可扩展的框架,便于开发者集成新的 Azure 服务、自定义工具或第三方功能。
  • 安全与合规: 支持只读模式,在此模式下服务器将仅暴露不涉及写入操作的工具,确保数据安全。同时,集成了遥测服务,有助于收集匿名数据以优化服务性能和用户体验。
  • 协议兼容性: 完全遵循 MCP 协议标准,通过 JSON-RPC 协议与客户端通信,并支持标准输入/输出 (StdIo) 等多种传输机制。

安装步骤

该项目是用于构建 MCP 服务器的 .NET 核心框架。要运行一个基于此框架的 MCP 服务器实例,您通常需要先编译生成可执行文件。

  1. 克隆仓库:
    git clone https://github.com/microsoft/mcp.git
    cd mcp/core/Azure.Mcp.Core
  2. 构建项目:
    dotnet publish -c Release -o ./bin/Release/publish
    这将在 'mcp/core/Azure.Mcp.Core/bin/Release/publish' 目录下生成名为 'azmcp'(Linux/macOS)或 'azmcp.exe'(Windows)的可执行文件。
  3. 运行 MCP 服务器: 进入发布目录并执行服务器启动命令。例如,以“命名空间代理”模式启动,并只暴露“存储”和“Key Vault”服务:
    ./bin/Release/publish/azmcp server start --mode namespace --namespace storage --namespace keyvault
    (在 Windows 上请使用 '.\bin\Release\publish\azmcp.exe')

服务器配置

MCP 服务器启动后,MCP 客户端(如 AI 助手或 IDE 插件)需要配置连接信息才能与其通信。以下是 MCP 客户端配置该服务器时需要填写的关键参数的说明,请根据您的实际需求选择合适的模式和命名空间:

  1. 'name'(服务器名称):
    • 描述: 客户端中显示该 MCP 服务器的用户友好名称。
    • 示例值: "Azure MCP Server", "Azure Storage Tool"
  2. 'command'(可执行命令):
    • 描述: 启动 MCP 服务器进程的完整命令或可执行文件路径。
    • 示例值: 'azmcp' (如果 'azmcp' 在系统 PATH 中), 或 './bin/Release/publish/azmcp' (具体路径)
  3. 'args'(命令行参数):
    • 描述: 传递给 'command' 的一系列参数,用于配置 MCP 服务器的运行模式和暴露的功能。
    • 常用参数组合示例及注释:
      • 基本启动(命名空间模式,暴露所有命令组):
        • 'server'
        • 'start'
        • '--mode' 'namespace' (默认模式,每个服务领域作为一个工具)
      • 单工具代理模式(所有命令通过一个 "azure" 工具路由):
        • 'server'
        • 'start'
        • '--mode' 'single'
      • 全工具模式(所有命令作为单独的工具暴露):
        • 'server'
        • 'start'
        • '--mode' 'all'
      • 过滤特定服务命名空间(仅暴露 "storage" 和 "keyvault"):
        • 'server'
        • 'start'
        • '--mode' 'namespace'
        • '--namespace' 'storage'
        • '--namespace' 'keyvault'
      • 只读模式(仅暴露查询操作的工具):
        • 'server'
        • 'start'
        • '--read-only'
      • 启用不安全传输(用于本地开发或测试,需配合环境变量 'AZURE_MCP_INCLUDE_PRODUCTION_CREDENTIALS'):
        • 'server'
        • 'start'
        • '--enable-insecure-transports'

基本使用方法

当 MCP 服务器成功启动并被 MCP 客户端连接后,LLM 即可通过客户端与服务器进行交互。

  1. 列出可用工具: LLM 可以向 MCP 服务器发送请求,获取所有可用工具的列表及其描述和输入 Schema。例如,在“全工具”模式下,可以列出所有 Azure 订阅、资源组相关的命令。

    LLM提示示例: "列出我可以通过这个 MCP 服务器使用的所有工具。"

  2. 调用工具执行操作: LLM 结合用户的意图,选择合适的工具和命令,并根据其输入 Schema 提供参数,然后调用工具执行相应的 Azure 操作。

    LLM提示示例(在“命名空间代理”模式下): "我想列出我的 Azure 订阅。" (服务器将可能调用 'subscription' 工具下的 'list' 命令)

    LLM提示示例(在“全工具”模式下): "获取我订阅 'MyAzureSubscription' 下的所有资源组。" (服务器将可能调用 'azmcp_group_list' 命令,并传递 'subscription' 参数)

    LLM提示示例(在“单工具代理”模式下): "使用 Azure 工具,列出我的存储账户。" (服务器将通过 "azure" 代理工具路由到相应的内部命令)

通过这些交互,LLM 可以在无需直接编写代码的情况下,理解和执行复杂的 Azure 管理和查询任务。

信息

分类

AI与计算