使用说明

项目简介

本项目提供了一个基于 Model Context Protocol (MCP) 的服务器端实现,用于管理和提供上下文信息给 LLM 应用。它包含一个基础的 MCP 服务器框架以及一个专门用于提供天气信息的示例服务器。该项目旨在演示如何构建 MCP 服务器,并提供上下文存储、检索和管理的基本功能。

主要功能点

  • 基础 MCP 服务器:
    • 支持会话 (session)、短期 (short-term) 和长期 (long-term) 多种上下文作用域。
    • 基于 TTL (Time-To-Live) 的上下文过期机制。
    • 提供上下文数据的 CRUD (创建、读取、更新、删除) 操作。
    • 完善的错误处理和数据验证机制。
  • 天气 MCP 服务器:
    • 扩展基础 MCP 服务器,提供天气数据获取和缓存功能。
    • 能够解析非结构化的天气文本数据为结构化数据。
    • 针对无效地点进行错误处理。
    • 对天气数据进行有效性验证。
  • MCP 客户端:
    • 客户端库,用于简化与 MCP 服务器的交互。
    • 支持注册和管理多个 MCP 服务器。
    • 提供简洁的 API 进行上下文操作。

安装步骤

  1. 克隆仓库

    git clone https://github.com/tamangill/MCP-llama3.2
    cd MCP-llama3.2
  2. 配置 API 密钥

    • 本项目中的天气服务器和股票服务器依赖于外部 API (OpenWeatherMap 和 Alpha Vantage)。
    • 你需要在 'config.json' 文件中配置 'openweather_api_key' (用于天气服务) 和 'alphavantage_api_key' (用于股票服务)。
    • 前往 OpenWeatherMapAlpha 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)。但本仓库的实现似乎主要关注本地进程内的通信,未明确支持远程连接。

基本使用方法

  1. 启动服务器 (示例) 虽然仓库中没有独立的服务器启动脚本,但 'chat_with_llama.py' 示例代码在初始化 'ChatInterface' 时会创建并注册 'WeatherMCPServer'。你可以运行 'chat_with_llama.py' 来体验包含天气服务器功能的聊天应用。

    python chat_with_llama.py

    或者,为了测试基础的 'MCPServer' 和 'MCPClient' 功能,你可以编写一个简单的脚本来实例化并运行它们(仓库中 'test_mcp.py' 提供了测试用例,可以参考)。

  2. 使用 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