项目简介

本项目是一个基于Model Context Protocol (MCP) 的服务演示示例。它旨在展示如何构建和使用符合MCP标准的工具服务,以及如何让大型语言模型(LLM)客户端通过这些服务调用外部工具,实现更复杂的交互和功能。

主要功能点

  • 支持多种通信方式: 示例包含了通过标准输入输出(stdio)和Server-Sent Events(SSE)两种协议与客户端通信的MCP服务器实现。
  • 提供基础工具服务: 内置了简单的计算工具服务示例,可执行加减乘除运算。
  • LLM工具调用集成: 演示了一个LLM客户端如何发现、连接MCP服务器,获取可用工具列表,并根据用户输入由LLM决定调用哪个工具及传递参数。
  • 工具编排演示: LLM客户端能够处理需要连续调用工具或结合工具结果才能得出最终答案的场景。
  • 可扩展性: 项目结构清晰,方便用户在此基础上开发和注册自己的MCP工具服务。

安装步骤

  1. 克隆仓库:
    git clone https://github.com/xiaosl-cell/mcp-demo.git
    cd mcp-demo
  2. 安装依赖:
    pip install -r requirements.txt

服务器配置

LLM客户端(例如 'src/demo/llm/host.py')通过一个名为 'server_config.json' 的配置文件来查找和连接MCP服务器。该文件定义了可用的MCP服务及其连接方式。

以下是配置文件的基本结构及关键配置项说明:

{
  "mcpServers": {
    "服务器名称1": {
      "type": "stdio",
      "command": "启动命令",
      "args": ["命令参数1", "命令参数2", "..."]
    },
    "服务器名称2": {
      "type": "sse",
      "url": "http://服务器地址:端口/sse"
    }
    // 可以添加更多服务器配置
  }
}
  • '"mcpServers"': 这是一个对象,其中每个键值对定义了一个MCP服务器的连接信息。键(例如 '"服务器名称1"')是您给该服务器实例起的名字,用于在客户端代码中引用。
  • 服务器配置对象:
    • '"type"': 指定服务器的传输协议,可以是 '"stdio"'(标准输入输出)或 '"sse"'(Server-Sent Events)。
    • 如果 '"type"' 是 '"stdio"':
      • '"command"': 启动该MCP服务器进程的命令(例如 '"python"')。
      • '"args"': 启动命令的参数列表。通常包括服务器脚本的路径(例如 '["src/demo/llm/mcp_server/stdio_server.py"]')。脚本路径一般是相对于项目根目录的相对路径。
    • 如果 '"type"' 是 '"sse"':
      • '"url"': SSE服务器的完整网络地址(例如 '"http://localhost:9000/sse"')。

请根据您实际运行的服务器配置修改或创建 'server_config.json' 文件。项目已提供一个包含示例配置的 'server_config.json' 文件。

基本使用方法

  1. 配置LLM: 在项目根目录创建 '.env' 文件,并配置您的LLM服务连接信息。例如:
    LLM_API_KEY=your_api_key_here
    LLM_BASE_URL=your_proxy_url_here # 可选
    MODEL=gpt-4o # 或您使用的模型名称
  2. 确保MCP服务器运行:
    • 如果您配置的MCP服务器类型是 'stdio',通常LLM客户端 ('host.py') 在启动时会自动根据配置启动服务器进程。
    • 如果您配置的MCP服务器类型是 'sse',您需要先手动启动SSE服务器。例如,要运行示例中的SSE服务器,可以执行:
      python src/demo/2-sse/sse_server.py
      确保服务器已成功启动并监听配置的端口。
  3. 运行LLM集成示例: 执行以下命令运行LLM客户端程序,它将加载配置、连接MCP服务器,并尝试通过LLM调用工具来回答预设的问题:
    python src/demo/llm/host.py
    程序输出将展示连接状态、发现的工具以及LLM调用工具的过程和最终结果。
  4. 运行独立的客户端示例: 项目还提供了独立的Stdio和SSE客户端示例,用于直接测试与MCP服务器的连接和工具调用,不涉及LLM。
    • Stdio客户端: 'python src/demo/1-stdio/stdio_client.py' (会自动启动配套的stdio服务器)
    • SSE客户端: 'python src/demo/2-sse/sse_client.py' (需要先手动启动 'src/demo/2-sse/sse_server.py')

信息

分类

AI与计算