项目简介

该仓库包含 Model Context Protocol (MCP) 服务端的示例实现,展示了如何构建能够提供特定能力(如天气查询、车辆控制)的后端服务,并通过 MCP 协议将其暴露为可供大型语言模型 (LLM) 调用的“工具”。同时,仓库还提供了一个 MCP 客户端中心应用,该应用能够连接、管理多个 MCP 服务端,聚合其提供的工具,并利用 LLM 理解用户请求,智能调用相应的工具服务。

主要功能点

  • 示例 MCP 服务端: 包含独立的后端服务,实现了特定的功能(如天气查询、车辆控制)。
  • 工具暴露: 将后端功能封装为 MCP 工具,通过标准化的方式对外声明其能力(工具名称、描述、参数)。
  • SSE 通信: 通过 Server-Sent Events (SSE) 协议与 MCP 客户端进行异步通信。
  • 健康检查: 提供 HTTP '/health' 接口,供客户端或监控系统检查服务状态。
  • MCP 客户端中心: 一个独立的应用程序,连接多个 MCP 服务端。
  • 工具聚合与路由: 自动发现所有已连接服务提供的工具,并将 LLM 的工具调用请求路由到正确的服务端。
  • 服务注册与管理: 提供 API 用于注册新的 MCP 服务端,并监控已连接服务的健康状态。

安装步骤

  1. 克隆仓库:

    git clone https://github.com/tianyaXs/mcp-hub.git
    cd mcp-hub

    (注意:README中克隆地址为Gitee,但分析的仓库是GitHub,此处使用GitHub地址)

  2. 创建并激活虚拟环境:

    uv venv
    source .venv/bin/activate  # macOS/Linux
    # 或者 .venv\Scripts\activate.bat  # Windows
  3. 安装依赖:

    uv pip install "mcp[cli]" fastapi uvicorn pydantic pandas openai zhipuai httpx toml starlette requests

服务器配置

本仓库中的 MCP 服务端(如 vehicle_command_server, weather_server)是独立的后台进程。MCP 客户端中心需要知道这些服务运行的 网络地址 (URL) 才能连接。

您需要先启动各个 MCP 服务端进程,然后将它们的 SSE URL (例如 'http://localhost:18080/sse') 注册到运行中的 MCP 客户端中心。

要启动 MCP 服务端,请使用以下命令:

  • 启动车辆控制服务:

    python mcp-server/vehicle_command/command_server.py --port 18080

    (此服务会监听 'http://localhost:18080',其 MCP SSE 入口为 'http://localhost:18080/sse')

  • 启动天气查询服务:

    python mcp-server/weather/weather_server.py --port 18081

    (此服务会监听 'http://localhost:18081',其 MCP SSE 入口为 'http://localhost:18081/sse')

MCP 客户端中心的配置主要在其 'pyproject.toml' 文件中,用于设置 LLM API Key 和一些运行时参数(如心跳间隔、超时时间)。客户端中心会通过 HTTP 接口('/register')接收 MCP 服务端的注册信息,或者在 demo 中硬编码连接地址。

基本使用方法

  1. 启动 MCP 服务端: 按照上述“服务器配置”中的命令,分别启动车辆控制服务和天气查询服务。
  2. 启动 MCP 客户端中心:
    python mcp-client/main.py
    (客户端中心默认运行在 'http://localhost:8000')
  3. 注册服务: 客户端中心启动后,需要将 MCP 服务端注册进来。您可以通过客户端中心的 '/register' API 进行,或者运行提供的 Web Demo,Demo 会自动尝试注册。 例如,手动注册天气服务,向客户端中心 ('http://localhost:8000/register') 发送 POST 请求,Body 为 '{"url": "http://localhost:18081/sse"}'。
  4. 与客户端中心交互: 服务注册成功后,可以通过客户端中心的 '/query' API 发送自然语言查询,客户端中心会调用 LLM 并根据需要路由到相应的工具服务。 例如,向客户端中心 ('http://localhost:8000/query') 发送 POST 请求,Body 为 '{"query": "北京今天天气怎么样?"}'。
  5. 使用 Web Demo: 运行 'python mcp-client/demo/web_demo.py' 启动图形化界面,通过界面与客户端中心进行交互并查看服务状态。

信息

分类

AI与计算