本项目'mcphost-demo'提供了一个基于 Model Context Protocol (MCP) 实现的应用后端(即MCP服务器)的示例,同时包含一个配套的MCP客户端。该示例服务器展示了如何注册和使用工具(Tools),为大型语言模型(LLM)客户端提供外部功能调用能力。

项目简介

这是一个演示如何构建和使用MCP服务器的仓库。它包含一个基于'FastMCP'库实现的简单MCP服务器,提供了天气查询和地理位置(距离计算)的功能作为工具。配套的客户端通过MCP协议与服务器通信,并结合一个兼容OpenAI API的LLM(如DeepSeek)来决定何时调用这些工具。

主要功能点

  • MCP服务器实现: 演示了如何使用'FastMCP'库创建一个符合MCP协议规范的服务器。
  • 工具注册与调用: 示例服务器注册了'get_alerts'(获取天气警报)和'get_forecast'(获取天气预报)、'maps_geo'(地理位置距离计算)等工具,客户端通过MCP协议向服务器发起工具调用请求并获取结果。
  • 支持多种传输协议: 示例服务器支持通过标准输入输出(Stdio)进行通信,客户端也演示了通过Stdio和SSE(Server-Sent Events)连接服务器。
  • LLM与工具结合: 配套的客户端展示了如何使用LLM理解用户意图,并根据LLM的工具调用指令,通过MCP协议调用后端服务器提供的工具,然后将工具结果返回给LLM进行处理和生成最终回复。

安装步骤

  1. 克隆仓库到本地。
  2. 确保已安装Python和'uv'(一个快速的Python包管理器和执行器)。
  3. 创建'.env'文件,添加你的API密钥(例如DeepSeek和高德地图的密钥,具体变量名参考示例或客户端代码)。
    echo "DEEPSEEK_API_KEY=你的DeepSeek密钥" >> .env
    echo "AMAP_KEY=你的高德地图密钥" >> .env
  4. 使用'uv'创建虚拟环境并激活。
    uv venv
    source .venv/bin/activate
  5. 安装项目依赖。
    uv pip install -r requirements.txt # 项目中没有requirements.txt,uv会根据lock文件或自动查找依赖安装
    # 或者直接安装 client.py 和 mcpserver-weather.py 中的依赖
    uv pip install mcp openai httpx python-dotenv

服务器配置

MCP服务器配置通常由使用该服务器的MCP客户端负责管理。客户端需要知道如何启动服务器进程(对于Stdio传输)或连接到服务器地址(对于SSE/WebSocket传输)。

对于本项目示例,客户端配置服务器的方式如下:

  • 通过Stdio连接本地服务器脚本 ('mcpserver-weather.py'): 客户端需要提供启动服务器进程的命令及其参数。
    • 命令 (command): 启动服务器脚本的可执行文件路径,例如 'python'。
    • 参数 (args): 传递给命令的参数列表,包括服务器脚本的文件名,例如 '["mcpserver-weather.py"]'。 客户端框架会使用这些信息在新的进程中启动服务器,并通过标准输入输出进行通信。
  • 通过SSE连接远程服务器: 客户端需要提供服务器的SSE端点URL。
    • URL (url): 服务器的SSE接口地址,例如 '"https://mcp.amap.com/sse?key=amap_key"'。 客户端框架会连接到这个URL,并通过SSE协议通信。

基本使用方法

确保你已经完成了安装步骤并激活了虚拟环境。

  1. 运行MCP客户端(自动连接默认配置的SSE服务器,或指定本地服务器脚本)

    • 连接远程SSE服务器 (默认方式):
      uv run client.py
      客户端将尝试连接到客户端代码中硬编码的SSE URL。
    • 连接本地Stdio服务器脚本 ('mcpserver-weather.py'):
      uv run client.py mcpserver-weather.py
      客户端将启动'mcpserver-weather.py'脚本作为一个子进程,并通过Stdio与其通信。
  2. 与客户端交互 客户端启动后,会提示你输入查询。你可以输入例如 README 中提供的示例查询:

    • 'ca forecast' (调用天气工具查询加州天气预报)
    • '北京到武汉有多远' (调用地理位置工具计算距离)

    输入查询后,客户端会将其发送给配置的LLM。LLM可能会决定调用MCP服务器提供的工具。客户端接收到LLM的工具调用指令后,会通过MCP协议向服务器发起工具调用请求。服务器执行工具功能(例如调用外部API),并将结果返回给客户端。客户端再将工具结果提供给LLM,LLM最终生成回复并显示给你。

  3. 退出 在客户端提示输入查询时,输入 'quit' 并回车即可退出程序。

信息

分类

AI与计算