项目简介
本项目提供了一系列使用 '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只能操作指定目录。
安装步骤
- 安装 Python: 确保你的系统中安装了Python 3.8 或更高版本。
- 安装 uv (推荐) 或 pip: 推荐使用 'uv' 来管理项目环境和依赖。安装 'uv':
如果你选择使用 'pip',请跳过此步。pip install uv - 克隆仓库: 将本项目的代码克隆到本地。
git clone https://github.com/hfhfn/mcp_server.git cd mcp_server - 安装依赖:
- 使用 uv:
uv sync - 使用 pip:
pip install -r requirements.txt # (假设存在或手动安装 mcp[cli], fastmcp, uvicorn, starlette, httpx, python-dotenv, Pillow, requests)
- 使用 uv:
- 配置 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' 中的挂载方式。
基本使用方法
-
启动服务器:
- 运行单个服务 (Stdio): 打开终端,导航到项目目录,执行:
(Stdio模式通常用于与本地运行的MCP客户端集成,服务器会通过标准输入/输出与客户端通信)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 - 运行单个服务 (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接口。
服务器启动后,你将在终端看到Uvicorn的日志,表明服务器正在监听指定端口。uv run --with mcp[cli] --with uvicorn python main.py # 或者直接使用 uvicorn 运行 app (确保uv安装了uvicorn): # uv run main:app --reload --port 8888
- 运行单个服务 (Stdio): 打开终端,导航到项目目录,执行:
-
配置LLM客户端: 在你的LLM客户端平台(如Dify、OpenAI Assistants等支持MCP集成的平台)中,按照平台提供的界面,使用上面“服务器配置”中对应的JSON格式信息来添加和配置本MCP服务器连接。
-
在LLM中使用: 配置完成后,LLM客户端将能够发现并调用你服务器暴露的工具和资源。例如,如果配置了天气服务,LLM在处理用户关于天气的问题时,可以自动调用 'query_weather' 工具来获取实时信息。
信息
分类
AI与计算