项目简介

这是一个示例 MCP (Model Context Protocol) 服务器实现,使用 FastMCP 库构建。它是 Azure-Samples/semantic-kernel-workshop 研讨会的一部分,用于演示如何将 Semantic Kernel 代理连接到 MCP 服务器,从而让代理能够调用外部系统提供的功能。

该服务器模拟了一套“Contoso”虚构公司的内部 API,通过 MCP 协议将这些 API 功能(如获取客户信息、处理账单、搜索知识库等)暴露给 LLM 客户端。

主要功能点

该 MCP 服务器通过标准化的 MCP 工具接口,向连接的 LLM 客户端提供以下核心功能:

  • 客户信息查询: 获取客户列表或详细档案。
  • 订阅管理: 查看订阅详情,包括关联的账单和历史服务事件。
  • 账单与支付: 获取发票支付记录,或记录新的支付。
  • 数据使用查询: 获取订阅的数据使用报告。
  • 促销信息: 获取所有促销列表或针对特定客户的可用促销。
  • 知识库搜索: 对内部文档进行语义搜索。
  • 安全日志: 查询客户相关的安全事件记录。
  • 订单查询: 查看客户的订单历史。
  • 支持工单: 获取客户的支持工单,或创建新的工单。
  • 产品目录: 查看或搜索可用的产品信息。
  • 订阅更新: 修改现有订阅的配置。
  • 账户解锁: 执行账户解锁操作。

这些功能被抽象为 LLM 可以理解和调用的“工具”,使得 LLM 能够通过与 MCP 服务器交互来执行复杂的任务。

安装步骤

请按照以下步骤设置并运行 MCP 服务器:

  1. 克隆仓库:

    git clone https://github.com/Azure-Samples/semantic-kernel-workshop.git
    cd semantic-kernel-workshop
  2. 设置Python虚拟环境:

    Linux/macOS:

    python -m venv venv
    source venv/bin/activate

    Windows:

    python -m venv venv
    venv\Scripts\activate
  3. 安装依赖: 项目使用 'uv' 包管理器。请先安装 'uv' (参考 uv 安装文档),然后运行:

    uv sync --prerelease=allow

    注意:该项目可能依赖 Semantic Kernel 的预发布版本。

  4. 配置环境变量: 复制 '.env.example' 文件为 '.env',并填写 Azure OpenAI 相关的凭据。这些凭据用于知识库搜索中的 embedding 功能。

    cp .env.example .env

    编辑 '.env' 文件,填入你的 Azure OpenAI 端点、API 密钥和部署名称:

    AZURE_OPENAI_ENDPOINT=https://your-openai-endpoint.openai.azure.com/
    AZURE_OPENAI_CHAT_DEPLOYMENT_NAME=your-chat-deployment-name # e.g., gpt-4o
    AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME=your-embedding-deployment-name # e.g., text-embedding-ada-002
    AZURE_OPENAI_API_KEY=your-api-key
    AZURE_OPENAI_API_VERSION=2025-03-01-preview # Check compatibility

    其他可选的 Azure Search 变量在此 MCP 服务器中未使用,但需要保留。

  5. 运行 MCP 服务器: 在已激活虚拟环境的终端中,导航到 '03-semantic-kernel-mcp' 目录并运行服务器脚本:

    cd 03-semantic-kernel-mcp
    python mcp_server.py

    服务器将在本地启动,默认监听 'http://0.0.0.0:8000' 使用 SSE 协议。

服务器配置 (供 MCP 客户端使用)

启动服务器后,MCP 客户端(如配置为 MCP 客户端的 Semantic Kernel 代理)需要知道如何连接。客户端需要配置服务器的启动方式、监听地址和通信协议。

配置信息通常是一个 JSON 结构,包含以下关键信息:

  • 'server_name': 服务器的标识名称,例如 "Contoso Customer API as Tools"。
  • 'command': 启动服务器所需的命令行程序及其路径,例如 '["python", "03-semantic-kernel-mcp/mcp_server.py"]'。
  • 'args': 启动命令所需的参数列表,例如 '["--host", "0.0.0.0", "--port", "8000", "--protocol", "sse"]'。这些参数告诉服务器监听哪个地址和端口,使用何种协议。

客户端会使用这些信息在需要时启动服务器(如果尚未运行)并通过指定的地址和协议进行通信。

基本使用方法

MCP 服务器启动后,它将等待 MCP 客户端连接。要实际使用这些功能,你需要一个支持 MCP 协议的 LLM 客户端。

研讨会仓库中的 '03-semantic-kernel-mcp/03.1-sk-with-mcp.ipynb' 笔记本提供了使用 Semantic Kernel 代理作为 MCP 客户端连接到此服务器并调用其工具的示例。通过运行该笔记本,你可以看到 LLM 代理如何接收用户请求,识别需要调用的 MCP 工具,向 MCP 服务器发送请求,并根据服务器返回的结果生成回复。

例如,当用户向 SK 代理提问“约翰的客户 ID 是多少?”时,如果代理被配置为 MCP 客户端并连接到此服务器,它可能会识别出需要调用 'get_customer_detail' 或 'get_all_customers' 工具,向 MCP 服务器发起请求,服务器执行相应的数据库查询,并将结果返回给代理,最终代理将提取相关信息回复用户。

信息

分类

AI与计算