本项目'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进行处理和生成最终回复。
安装步骤
- 克隆仓库到本地。
- 确保已安装Python和'uv'(一个快速的Python包管理器和执行器)。
- 创建'.env'文件,添加你的API密钥(例如DeepSeek和高德地图的密钥,具体变量名参考示例或客户端代码)。
echo "DEEPSEEK_API_KEY=你的DeepSeek密钥" >> .env echo "AMAP_KEY=你的高德地图密钥" >> .env - 使用'uv'创建虚拟环境并激活。
uv venv source .venv/bin/activate - 安装项目依赖。
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协议通信。
基本使用方法
确保你已经完成了安装步骤并激活了虚拟环境。
-
运行MCP客户端(自动连接默认配置的SSE服务器,或指定本地服务器脚本)
- 连接远程SSE服务器 (默认方式):
客户端将尝试连接到客户端代码中硬编码的SSE URL。uv run client.py - 连接本地Stdio服务器脚本 ('mcpserver-weather.py'):
客户端将启动'mcpserver-weather.py'脚本作为一个子进程,并通过Stdio与其通信。uv run client.py mcpserver-weather.py
- 连接远程SSE服务器 (默认方式):
-
与客户端交互 客户端启动后,会提示你输入查询。你可以输入例如 README 中提供的示例查询:
- 'ca forecast' (调用天气工具查询加州天气预报)
- '北京到武汉有多远' (调用地理位置工具计算距离)
输入查询后,客户端会将其发送给配置的LLM。LLM可能会决定调用MCP服务器提供的工具。客户端接收到LLM的工具调用指令后,会通过MCP协议向服务器发起工具调用请求。服务器执行工具功能(例如调用外部API),并将结果返回给客户端。客户端再将工具结果提供给LLM,LLM最终生成回复并显示给你。
-
退出 在客户端提示输入查询时,输入 'quit' 并回车即可退出程序。
信息
分类
AI与计算