项目简介

本项目是微软Azure示例项目的一部分,旨在演示如何在Azure容器应用(ACA)上部署基于Model Context Protocol (MCP) 的AI后端服务。它包含了一个MCP服务器实现和一个简单的MCP客户端(Host)应用,通过TODO列表Agent展示了MCP协议的核心功能之一:工具(Tools)的使用。

主要功能点

  • MCP服务器实现: 提供了基于HTTP Streamable和Server-Sent Events (SSE) 两种传输协议的MCP服务器。
  • 工具注册与执行: 服务器注册了一组TODO列表相关的工具(添加、列出、完成、删除TODO项),并能接收客户端的调用请求并执行这些工具。
  • 数据持久化: 服务器通过Postgres数据库存储TODO列表的数据,使得工具具备状态管理能力。
  • MCP客户端 (Host): 提供了一个示例终端应用,作为MCP客户端连接到MCP服务器,并与LLMProvider(OpenAI, Azure OpenAI, GitHub Models)和MCP服务器交互,模拟AI Agent的工作流程。
  • LLM集成: 客户端(Host)集成了多种LLM提供商,可以利用从MCP服务器获取的工具来增强LLM的能力。

该项目目前主要实现了MCP协议的**工具(Tools)**部分,**资源(Resources)Prompt模板(Prompts)**功能在计划中但尚未完全实现。

安装步骤

  1. 克隆本项目仓库:
    git clone https://github.com/Azure-Samples/azure-container-apps-ai-mcp.git
    cd azure-container-apps-ai-mcp
  2. 安装项目依赖:
    npm install --prefix mcp-host
    npm install --prefix mcp-server-http
    npm install --prefix mcp-server-sse
  3. 根据需要配置LLM提供商(OpenAI, Azure OpenAI, 或 GitHub Models)。在项目根目录创建'.env'文件,并根据README中的说明添加相应的API Key或Endpoint信息。
  4. 准备一个PostgreSQL数据库实例。可以使用Docker运行一个本地Postgres容器。

服务器配置 (供MCP客户端连接时参考)

该项目提供了HTTP和SSE两种MCP服务器实现。MCP客户端需要知晓服务器的地址才能连接并获取能力(如工具列表)。对于此示例项目,服务器启动后将运行在特定的网络地址上。示例中的MCP客户端(Host)通过配置服务器的URL来连接。

典型的MCP客户端配置(非本项目Host的代码示例,仅为说明客户端如何配置服务器连接):

{
  "servers": {
    "mcp-todo-http": {
      "type": "http",
      "url": "http://localhost:3000/mcp" // MCP HTTP服务器监听的地址和路径
    },
    "mcp-todo-sse": {
      "type": "sse",
      "url": "http://localhost:3001/sse" // MCP SSE服务器监听的地址和路径
    }
  }
}

注释:

  • 'mcp-todo-http', 'mcp-todo-sse': 服务器的逻辑名称,用于在客户端区分不同的服务器。
  • 'type': 服务器使用的传输协议类型,可以是 "http" 或 "sse"。
  • 'url': 服务器监听的网络地址,客户端将连接到此URL与服务器通信。在实际部署中,此地址会是部署MCP服务器的机器或容器的网络地址。

本项目示例中的MCP客户端(Host)会自动尝试连接上述默认地址的MCP服务器。

基本使用方法

  1. 启动MCP服务器和数据库:

    • 推荐使用Docker Compose: 在项目根目录运行 'docker compose up -d --build'。这将启动Postgres数据库容器以及HTTP和SSE的MCP服务器容器。
    • 手动启动:
      • 确保Postgres数据库已运行并可访问。
      • 在单独的终端中运行HTTP服务器: 'npm start --prefix mcp-server-http'
      • 在单独的终端中运行SSE服务器: 'npm start --prefix mcp-server-sse'
  2. 启动MCP客户端 (Host):

    • 使用Docker Compose: 如果使用了Docker Compose启动服务器,可以通过 'docker exec -it mcp-host bash' 进入host容器,然后在容器内运行 'npm start'。
    • 手动启动: 在新的终端中运行: 'npm start --prefix mcp-host'
  3. 与Agent交互: MCP Host启动后,会在终端显示欢迎信息和可用的工具列表。现在你可以在终端输入指令与TODO列表Agent交互,例如:

    • 输入 'add buy groceries' 来添加一个TODO项。
    • 输入 'list todos' 来查看所有TODO项。
    • 输入 'complete todo with id 1' 来完成某个TODO项(假设ID为1)。
    • 输入 'delete todo with id 1' 来删除某个TODO项(假设ID为1)。

Agent会根据你的输入,判断是否需要调用MCP服务器提供的工具来完成任务,并将工具执行结果返回给你。

许可证

本项目采用MIT许可证。详情请参阅仓库中的LICENSE文件。

信息

分类

AI与计算