终端聊天客户端

一个基于终端的聊天客户端,集成MCP服务器和OpenAI API,提供天气服务等功能。

  • by alan-meigs
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 alan-meigs/mcp_exp

使用说明

基于终端的聊天客户端与MCP服务器集成

该项目演示了如何构建一个基于终端的聊天客户端接口,该接口连接到MCP服务器并与OpenAI的API集成。它包括一个简单的天气服务,作为MCP功能的一个例子。

先决条件

  • Python 3.8或更高版本
  • UV包管理器(一个快速、可靠的Python包安装程序和解析器)

安装

1.安装UV

UV是一个现代的Python包管理器,与pip等传统工具相比,它提供了显著的性能改进。它是用Rust编写的,并提供:

  • 更快的软件包安装
  • 可靠的依赖关系解决
  • 内置虚拟环境管理
  • 与现有的Python工具兼容

要安装UV,请运行:

curl -LsSf https://astral.sh/uv/install.sh | sh

2.项目设置

  1. 初始化新项目:
uv init
  1. 创建并激活虚拟环境:
uv venv
source .venv/bin/activate  # On Unix/macOS
# or
.venv\Scripts\activate  # On Windows
  1. 安装所需的软件包:
uv pip install httpx mcp[cli] openai python-dotenv

项目结构和实施指南

该项目由两个主要部分组成:聊天客户端(client.py)以及气象服务(weather.py).让我们来了解一下每个组件是如何构建的,以及每个部分的作用。

构建聊天客户端(Client.py)

聊天客户端构建为一个异步Python应用程序,连接到MCP服务器和OpenAI的API。以下是它的构造方式:

  1. 导入和设置

    import asyncio
    import os
    import sys
    from typing import Optional
    from contextlib import AsyncExitStack
    from dotenv import load_dotenv
    import openai
    from mcp import ClientSession, StdioServerParameters
    from mcp.client.stdio import stdio_client
    
    • asyncio:用于异步编程
    • AsyncExitStack:管理异步资源的清理
    • dotenv:从.env文件加载环境变量
    • mcp:服务器通信的核心MCP功能
  2. MCP客户端类 主客户端类处理:

    • 与MCP服务器的连接
    • OpenAI API集成
    • 消息处理
    • 工具执行

    关键方法:

    • connect_to_server():建立与MCP服务器的连接
    • process_query():处理用户查询和工具执行
    • chat_loop():管理交互式聊天会话
    • cleanup():确保适当的资源清理
  3. 主函数

    async def main():
        client = MCPClient()
        try:
            await client.connect_to_server(sys.argv[1])
            await client.chat_loop()
        finally:
            await client.cleanup()
    
    • 初始化客户端的入口点
    • 连接到指定的服务器
    • 运行聊天循环
    • 确保适当的清理

建立气象服务(Weather.py)

天气服务构建为MCP服务器,通过国家气象局API提供天气信息:

  1. 服务初始化

    from mcp.server.fastmcp import FastMCP
    mcp = FastMCP("weather")
    
    • 创建名为“weather”的MCP服务器实例
    • 设置服务器基础架构
  2. API集成

    NWS_API_BASE = "https://api.weather.gov"
    USER_AGENT = "weather-app/1.0"
    
    • 为美国国家气象局API定义常量
    • 为API请求设置正确的用户代理
  3. Helper函数

    • make_nws_request():通过正确的错误处理来处理API请求
    • format_alert():将天气警报格式化为可读文本
  4. MCP工具 实施了两个主要工具:

    一 get_alerts(state):

    • 获取美国某州的活跃天气警报
    • 返回格式化的警报信息

    b get_forecast(latitude, longitude):

    • 检索某个位置的天气预报
    • 返回详细的预测信息
  5. 服务器执行

    if __name__ == "__main__":
        mcp.run(transport="stdio")
    
    • 使用stdio传输运行MCP服务器
    • 启用与聊天客户端的通信

用法

  1. 创建一个 .env 使用您的OpenAI API密钥文件:
OPENAI_API_KEY=your_api_key_here
  1. 启动MCP服务器:
python weather.py
  1. 在单独的终端中,运行聊天客户端:
python client.py weather.py
  1. 与聊天界面交互:
    • 提出一般性问题与人工智能聊天
    • 使用与天气相关的查询来获取天气信息
    • 例如:“加利福尼亚州的天气怎么样?”或“纽约有警报吗?”

与Cursor的代理模式一起使用

此MCP服务器可以直接与Cursor的代理模式集成(注意:这与Cursors的询问功能不同,仅在代理模式下工作)。以下是如何设置它:

将MCP服务器添加到游标

  1. 打开光标设置
  2. 引导到 Features > MCP
  3. 点击 + Add New MCP Server
  4. 填写表格:
    • 类型:选择 stdio
    • 名字:“天气服务”(或您喜欢的任何名称)
    • 命令:输入运行天气服务器的完整路径:
      python /full/path/to/your/weather.py
      

备选方案:项目特定配置

您还可以通过创建一个 .cursor/mcp.json 文件:

  1. 创建 .cursor 项目根目录中的目录:
mkdir .cursor
  1. 创建 mcp.json 内容如下:
{
  "mcpServers": {
    "weather": {
      "command": "python",
      "args": [
        "/full/path/to/your/weather.py"
      ]
    }
  }
}

使用天气工具

  1. 打开光标编辑器(代理模式)
  2. 代理将自动检测何时需要天气信息
  3. 示例查询:
    • “旧金山现在的天气怎么样?”
    • “加州有天气警报吗?”
    • “给我纽约市的天气预报”

重要提示

  • 工具仅在Cursor的代理模式(Composer)下可用,在询问模式下不可用
  • 默认情况下,Cursor在使用MCP工具之前会请求批准
  • 您可能需要单击MCP设置中的刷新按钮来查看新添加的工具
  • 服务器必须在本地计算机上运行(远程服务器需要SSE传输)

特性

  • 与OpenAI集成的实时聊天界面
  • MCP服务器集成,实现可扩展功能
  • 提供警报和预报的天气服务
  • 异步操作以获得更好的性能
  • 正确的错误处理和资源清理
  • API密钥的环境变量配置

贡献

请随时提交问题和增强请求!