项目简介

本项目提供了一系列使用 'fastmcp' 库开发的示例MCP服务器实现,展示了如何构建功能丰富的LLM后端服务。这些示例包括天气查询、简单的数学计算、文件系统操作以及图像缩略图生成等功能,并通过MCP协议暴露给LLM客户端。

主要功能点

  • 工具注册与执行: 将Python函数包装为LLM可调用的“工具”,例如查询天气、执行数学运算、读写文件等。LLM客户端可以通过MCP协议调用这些工具来完成特定任务。
  • 资源托管: 演示如何通过特定URI格式暴露动态数据或资源(如本项目中的问候语资源),供LLM按需访问。
  • 多传输协议支持: 示例代码展示了如何通过 Stdio、SSE (Server-Sent Events) 或 Streamable HTTP 等多种方式运行MCP服务器,适应不同的部署和通信需求。
  • 多服务集成: 提供了将多个独立的MCP服务集成到一个统一的HTTP服务器(如基于Starlette/Uvicorn)中运行的示例。
  • 文件系统安全访问: 文件系统服务示例演示了如何在MCP服务器中实现对本地文件系统的安全访问控制,限制LLM只能操作指定目录。

安装步骤

  1. 安装 Python: 确保你的系统中安装了Python 3.8 或更高版本。
  2. 安装 uv (推荐) 或 pip: 推荐使用 'uv' 来管理项目环境和依赖。安装 'uv':
    pip install uv
    如果你选择使用 'pip',请跳过此步。
  3. 克隆仓库: 将本项目的代码克隆到本地。
    git clone https://github.com/hfhfn/mcp_server.git
    cd mcp_server
  4. 安装依赖:
    • 使用 uv:
      uv sync
    • 使用 pip:
      pip install -r requirements.txt # (假设存在或手动安装 mcp[cli], fastmcp, uvicorn, starlette, httpx, python-dotenv, Pillow, requests)
  5. 配置 OpenWeather API (可选): 如果你需要运行天气查询服务,请在项目根目录创建 '.env' 文件,并添加你的 OpenWeather API Key:
    OPENWEATHER_API_KEY="你的OpenWeather API Key"

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

这些MCP服务器是为MCP客户端(如某些LLM应用或平台)提供服务的。LLM客户端需要知道如何连接到你的MCP服务器。以下是MCP客户端可能需要配置的一些连接信息示例,根据你实际运行服务器的方式选择:

  • 通过 Stdio 模式运行 WeatherServer 的客户端配置:

    {
      "name": "weather-server",
      "transport": "stdio",
      "command": "python",
      "args": ["path/to/your/cloned/repo/weather_mcp.py"],
      "description": "通过标准IO与天气MCP服务器通信"
    }

    说明: 'command' 是启动服务器进程的命令,'args' 是传递给命令的参数。这里的 'path/to/your/cloned/repo/weather_mcp.py' 需要替换为你本地克隆的项目中 'weather_mcp.py' 文件的实际路径。

  • 通过 SSE 模式运行集成服务器 (main.py) 的客户端配置 (例如连接到 Weather 功能):

    {
      "name": "integrated-mcp-server",
      "transport": "sse",
      "url": "http://127.0.0.1:8888/weather",
      "description": "通过SSE连接到集成MCP服务器上的天气功能"
    }

    说明: 'transport' 指定传输协议(这里是 SSE),'url' 是运行集成服务器的主机地址和端口,以及该特定功能模块被挂载的路径 ('/weather')。如果服务器运行在其他机器或端口,请相应修改 'url'。文件系统功能路径可能是 '/file',数学功能路径可能是 '/math',缩略图功能路径可能是 '/thumbnail'。

  • 通过 Streamable HTTP 模式运行集成服务器 (main.py) 的客户端配置 (如果配置为支持):

    {
      "name": "integrated-mcp-server-http",
      "transport": "streamable_http",
      "url": "http://127.0.0.1:8888/math",
       "description": "通过Streamable HTTP连接到集成MCP服务器上的数学功能"
    }

    说明: 配置方式与 SSE 类似,只是 'transport' 不同,且 'url' 指向 Streamable HTTP 的接口路径。本项目的 'main.py' 示例默认挂载的是 SSE 接口,若要使用 Streamable HTTP 可能需要修改 'main.py' 中的挂载方式。

基本使用方法

  1. 启动服务器:

    • 运行单个服务 (Stdio): 打开终端,导航到项目目录,执行:
      uv run --with mcp[cli] python weather_mcp.py
      # 或 uv run --with mcp[cli] python math_mcp.py
      # 或 uv run --with mcp[cli] python filesystem_mcp.py
      (Stdio模式通常用于与本地运行的MCP客户端集成,服务器会通过标准输入/输出与客户端通信)
    • 运行单个服务 (SSE/HTTP): 对于 'math_mcp.py' 或 'filesystem_mcp.py',它们内部有 'run' 方法可以直接启动HTTP服务:
      uv run --with mcp[cli] python math_mcp.py # 默认端口 8880, SSE
      uv run --with mcp[cli] python filesystem_mcp.py # 默认端口 8888, SSE
    • 运行集成服务 (推荐用于HTTP): 运行 'main.py' 将启动一个Uvicorn服务器,在端口8888上提供所有示例功能的SSE接口。
      uv run --with mcp[cli] --with uvicorn python main.py
      # 或者直接使用 uvicorn 运行 app (确保uv安装了uvicorn):
      # uv run main:app --reload --port 8888
      服务器启动后,你将在终端看到Uvicorn的日志,表明服务器正在监听指定端口。
  2. 配置LLM客户端: 在你的LLM客户端平台(如Dify、OpenAI Assistants等支持MCP集成的平台)中,按照平台提供的界面,使用上面“服务器配置”中对应的JSON格式信息来添加和配置本MCP服务器连接。

  3. 在LLM中使用: 配置完成后,LLM客户端将能够发现并调用你服务器暴露的工具和资源。例如,如果配置了天气服务,LLM在处理用户关于天气的问题时,可以自动调用 'query_weather' 工具来获取实时信息。

信息

分类

AI与计算