基于终端的聊天客户端与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 | sh2.项目设置
- 初始化新项目:
uv init- 创建并激活虚拟环境:
uv venv
source .venv/bin/activate # On Unix/macOS
# or
.venv\Scripts\activate # On Windows- 安装所需的软件包:
uv pip install httpx mcp[cli] openai python-dotenv项目结构和实施指南
该项目由两个主要部分组成:聊天客户端(client.py)以及气象服务(weather.py).让我们来了解一下每个组件是如何构建的,以及每个部分的作用。
构建聊天客户端(Client.py)
聊天客户端构建为一个异步Python应用程序,连接到MCP服务器和OpenAI的API。以下是它的构造方式:
- 导入和设置
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功能
- MCP客户端类
主客户端类处理:
- 与MCP服务器的连接 - OpenAI API集成 - 消息处理 - 工具执行
关键方法:
- connect_to_server():建立与MCP服务器的连接 - process_query():处理用户查询和工具执行 - chat_loop():管理交互式聊天会话 - cleanup():确保适当的资源清理
- 主函数
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提供天气信息:
- 服务初始化
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("weather")- 创建名为“weather”的MCP服务器实例 - 设置服务器基础架构
- API集成
NWS_API_BASE = "https://api.weather.gov"
USER_AGENT = "weather-app/1.0"- 为美国国家气象局API定义常量 - 为API请求设置正确的用户代理
- Helper函数
- make_nws_request():通过正确的错误处理来处理API请求 - format_alert():将天气警报格式化为可读文本
- MCP工具
实施了两个主要工具:
一 get_alerts(state):
- 获取美国某州的活跃天气警报 - 返回格式化的警报信息
b get_forecast(latitude, longitude):
- 检索某个位置的天气预报 - 返回详细的预测信息
- 服务器执行
if __name__ == "__main__":
mcp.run(transport="stdio")- 使用stdio传输运行MCP服务器 - 启用与聊天客户端的通信
用法
- 创建一个
.env使用您的OpenAI API密钥文件:
OPENAI_API_KEY=your_api_key_here- 启动MCP服务器:
python weather.py- 在单独的终端中,运行聊天客户端:
python client.py weather.py- 与聊天界面交互:
- 提出一般性问题与人工智能聊天 - 使用与天气相关的查询来获取天气信息 - 例如:“加利福尼亚州的天气怎么样?”或“纽约有警报吗?”
与Cursor的代理模式一起使用
此MCP服务器可以直接与Cursor的代理模式集成(注意:这与Cursors的询问功能不同,仅在代理模式下工作)。以下是如何设置它:
将MCP服务器添加到游标
- 打开光标设置
- 引导到
Features>MCP - 点击
+ Add New MCP Server - 填写表格:
- 类型:选择 stdio - 名字:“天气服务”(或您喜欢的任何名称) - 命令:输入运行天气服务器的完整路径:
python /full/path/to/your/weather.py备选方案:项目特定配置
您还可以通过创建一个 .cursor/mcp.json 文件:
- 创建
.cursor项目根目录中的目录:
mkdir .cursor- 创建
mcp.json内容如下:
{
"mcpServers": {
"weather": {
"command": "python",
"args": [
"/full/path/to/your/weather.py"
]
}
}
}使用天气工具
- 打开光标编辑器(代理模式)
- 代理将自动检测何时需要天气信息
- 示例查询:
- “旧金山现在的天气怎么样?” - “加州有天气警报吗?” - “给我纽约市的天气预报”
重要提示
- 工具仅在Cursor的代理模式(Composer)下可用,在询问模式下不可用
- 默认情况下,Cursor在使用MCP工具之前会请求批准
- 您可能需要单击MCP设置中的刷新按钮来查看新添加的工具
- 服务器必须在本地计算机上运行(远程服务器需要SSE传输)
特性
- 与OpenAI集成的实时聊天界面
- MCP服务器集成,实现可扩展功能
- 提供警报和预报的天气服务
- 异步操作以获得更好的性能
- 正确的错误处理和资源清理
- API密钥的环境变量配置
贡献
请随时提交问题和增强请求!
