使用说明
项目简介
本项目提供了一个基于 Model Context Protocol (MCP) 的服务器端实现,用于管理和提供上下文信息给 LLM 应用。它包含一个基础的 MCP 服务器框架以及一个专门用于提供天气信息的示例服务器。该项目旨在演示如何构建 MCP 服务器,并提供上下文存储、检索和管理的基本功能。
主要功能点
- 基础 MCP 服务器:
- 支持会话 (session)、短期 (short-term) 和长期 (long-term) 多种上下文作用域。
- 基于 TTL (Time-To-Live) 的上下文过期机制。
- 提供上下文数据的 CRUD (创建、读取、更新、删除) 操作。
- 完善的错误处理和数据验证机制。
- 天气 MCP 服务器:
- 扩展基础 MCP 服务器,提供天气数据获取和缓存功能。
- 能够解析非结构化的天气文本数据为结构化数据。
- 针对无效地点进行错误处理。
- 对天气数据进行有效性验证。
- MCP 客户端:
- 客户端库,用于简化与 MCP 服务器的交互。
- 支持注册和管理多个 MCP 服务器。
- 提供简洁的 API 进行上下文操作。
安装步骤
-
克隆仓库
git clone https://github.com/tamangill/MCP-llama3.2 cd MCP-llama3.2 -
配置 API 密钥
- 本项目中的天气服务器和股票服务器依赖于外部 API (OpenWeatherMap 和 Alpha Vantage)。
- 你需要在 'config.json' 文件中配置 'openweather_api_key' (用于天气服务) 和 'alphavantage_api_key' (用于股票服务)。
- 前往 OpenWeatherMap 和 Alpha Vantage 注册并获取免费 API 密钥。
- 修改 'config.json' 文件,将 'YOUR_OPENWEATHER_API_KEY' 和 'YOUR_ALPHA_VANTAGE_API_KEY' 替换为你自己的 API 密钥。
{ "openweather_api_key": "YOUR_OPENWEATHER_API_KEY", "alphavantage_api_key": "YOUR_ALPHA_VANTAGE_API_KEY" }
服务器配置
MCP 服务器需要与 MCP 客户端配合使用。以下是 MCP 客户端连接服务器所需的配置信息示例 (JSON 格式)。
[ { "server_name": "weather_server", "command": "python", "args": ["weather_mcp_server.py"] }, { "server_name": "base_mcp_server", "command": "python", "args": ["mcp_server.py"] } ]
配置参数说明:
- 'server_name': 服务器的名称,客户端使用此名称来识别和调用服务器,例如 "weather_server"。
- 'command': 启动服务器的命令,通常是 Python 解释器路径 ('python' 或 'python3')。
- 'args': 传递给启动命令的参数列表,这里指定了服务器脚本的文件名,例如 'weather_mcp_server.py'。
注意:
- 上述配置仅为示例,实际使用时,你需要根据你的环境和需求调整 'command' 和 'args'。
- 配置文件中可以包含多个服务器的配置信息,客户端可以根据 'server_name' 选择连接哪个服务器。
- 确保 MCP 服务器脚本 ('weather_mcp_server.py', 'mcp_server.py' 等) 与 MCP 客户端在可访问的文件路径下,或者在 'args' 中使用正确的相对或绝对路径指向服务器脚本。
- 本示例配置假设服务器和客户端运行在同一台机器上。如果服务器运行在远程机器上,则需要配置网络连接和相应的通信协议 (例如 WebSocket 或 HTTP)。但本仓库的实现似乎主要关注本地进程内的通信,未明确支持远程连接。
基本使用方法
-
启动服务器 (示例) 虽然仓库中没有独立的服务器启动脚本,但 'chat_with_llama.py' 示例代码在初始化 'ChatInterface' 时会创建并注册 'WeatherMCPServer'。你可以运行 'chat_with_llama.py' 来体验包含天气服务器功能的聊天应用。
python chat_with_llama.py或者,为了测试基础的 'MCPServer' 和 'MCPClient' 功能,你可以编写一个简单的脚本来实例化并运行它们(仓库中 'test_mcp.py' 提供了测试用例,可以参考)。
-
使用 MCP 客户端 'mcp_client.py' 提供了 'MCPClient' 类,你可以使用它来与 MCP 服务器进行交互。以下是基本操作示例:
from mcp_client import MCPClient from weather_mcp_server import WeatherMCPServer from mcp_server import MCPServer, ContextScope # 初始化 MCP 客户端 client = MCPClient() # 初始化并注册基础 MCP 服务器 (示例) base_server = MCPServer("base") client.register_server("base", base_server) # 初始化并注册天气 MCP 服务器 (需要 API 密钥) # 假设你已经从 config.json 加载了 api_key # (实际使用中 api_key 应该从更安全的方式获取,而不是硬编码) import json with open('config.json', 'r') as f: config = json.load(f) api_key = config.get('openweather_api_key') weather_server = WeatherMCPServer(api_key) client.register_server("weather", weather_server) # 存储上下文数据到基础服务器 client.store_context("base", "user_id", "12345", scope=ContextScope.SESSION.value) # 从天气服务器查询天气信息 weather_data = client.query_context("weather", "Seattle") if weather_data: print(f"西雅图天气: 温度 {weather_data['temperature']}°C, 湿度 {weather_data['humidity']}%") else: print("无法获取西雅图天气信息") # 从基础服务器检索用户ID user_id = client.query_context("base", "user_id") if user_id: print(f"用户ID: {user_id}") # 删除上下文数据 client.delete_context("base", "user_id", scope=ContextScope.SESSION.value)请参考 'test_mcp.py', 'test_weather_mcp_server.py' 和 'chat_with_llama.py' 等文件获取更详细的使用示例和 API 调用方法。
信息
分类
网页与API