Terminal-based Chat Client with MCP Server Integration
MCP 客户端和服务器实验
alan-meigs
README
基于终端的聊天客户端,集成 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. 项目设置
- 初始化一个新项目:
uv init
- 创建并激活一个虚拟环境:
uv venv
source .venv/bin/activate # 在 Unix/macOS 上
# 或
.venv\Scripts\activate # 在 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 功能
-
MCPClient 类 主客户端类处理:
- 连接到 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 请求
-
辅助函数
make_nws_request()
: 处理 API 请求,并进行适当的错误处理format_alert()
: 将天气警报格式化为可读文本
-
MCP 工具 实现了两个主要工具:
a.
get_alerts(state)
:- 获取美国州当前的有效天气警报
- 返回格式化的警报信息
b.
get_forecast(latitude, longitude)
:- 检索某个位置的天气预报
- 返回详细的预报信息
-
服务器执行
if __name__ == "__main__": mcp.run(transport="stdio")
- 使用 stdio 传输运行 MCP 服务器
- 启用与聊天客户端的通信
用法
- 创建一个包含您的 OpenAI API 密钥的
.env
文件:
OPENAI_API_KEY=your_api_key_here
- 启动 MCP 服务器:
python weather.py
- 在单独的终端中,运行聊天客户端:
python client.py weather.py
- 与聊天界面交互:
- 提出一般问题以与 AI 聊天
- 使用与天气相关的查询来获取天气信息
- 示例:“加利福尼亚的天气怎么样?” 或 “纽约有什么警报吗?”
与 Cursor 的 Agent 模式一起使用
此 MCP 服务器可以直接与 Cursor 的 Agent 模式集成(注意:这与 Cursor 的 Ask 功能不同,仅在 Agent 模式下有效)。 以下是设置方法:
将 MCP 服务器添加到 Cursor
- 打开 Cursor 设置
- 导航到
Features
>MCP
- 点击
+ Add New MCP Server
- 填写表格:
- Type: 选择
stdio
- Name: "Weather Service"(或您喜欢的任何名称)
- Command: 输入运行天气服务器的完整路径:
python /full/path/to/your/weather.py
- Type: 选择
替代方案:项目特定的配置
您还可以通过创建 .cursor/mcp.json
文件来为您的项目配置 MCP 服务器:
- 在您的项目根目录中创建
.cursor
目录:
mkdir .cursor
- 创建包含以下内容的
mcp.json
:
{
"mcpServers": {
"weather": {
"command": "python",
"args": [
"/full/path/to/your/weather.py"
]
}
}
}
使用天气工具
- 打开 Cursor 的 Composer(Agent 模式)
- Agent 将自动检测何时需要天气信息
- 示例查询:
- "旧金山当前的天气怎么样?"
- "加利福尼亚有什么天气警报吗?"
- "给我纽约市的预报"
重要提示
- 工具仅在 Cursor 的 Agent 模式(Composer)中可用,而不在 Ask 模式中可用
- 默认情况下,Cursor 会在使用 MCP 工具之前请求批准
- 您可能需要单击 MCP 设置中的刷新按钮才能看到新添加的工具
- 服务器必须在您的本地计算机上运行(远程服务器需要 SSE 传输)
特点
- 具有 OpenAI 集成的实时聊天界面
- 用于可扩展功能的 MCP 服务器集成
- 具有警报和预报的天气服务
- 异步操作以获得更好的性能
- 正确的错误处理和资源清理
- 用于 API 密钥的环境变量配置
贡献
欢迎提交问题和增强请求!
推荐服务器
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Apple MCP Server
通过 MCP 协议与 Apple 应用(如“信息”、“备忘录”和“通讯录”)进行交互,从而使用自然语言发送消息、搜索和打开应用内容。
MCP Server Trello
通过 Trello API 促进与 Trello 看板的交互,提供速率限制、类型安全、输入验证和错误处理等功能,以实现对卡片、列表和看板活动的无缝管理。
@kazuph/mcp-gmail-gas
用于 Gmail 集成的模型上下文协议 (Model Context Protocol, MCP) 服务器。它允许 Claude Desktop(或任何 MCP 客户端)通过 Google Apps Script 与您的 Gmail 帐户进行交互。

Linear MCP Server
一个模型上下文协议(Model Context Protocol)服务器,它与 Linear 的问题跟踪系统集成,允许大型语言模型(LLM)通过自然语言交互来创建、更新、搜索和评论 Linear 问题。
Composio MCP Server
一个服务器实现,提供与 MCP 兼容的 Composio 应用(如 Gmail 和 Linear)的访问,允许通过结构化的接口与语言模型进行交互。

Folderr
一个模型上下文协议 (MCP) 服务器,它提供与 Folderr API 交互的工具,专门用于管理 Folderr 助手并与之通信。

mcp-google
一个专门的模型上下文协议(MCP)服务器,它将 Google 服务(Gmail、日历等)集成到您的 AI 工作流程中。该服务器通过 MCP 实现对 Google 服务的无缝访问,从而允许 AI 代理与 Gmail、Google 日历和其他 Google 服务进行交互。
MCP-JIRA-Python Server
一个基于 Python 的服务器,允许与 JIRA 无缝集成,通过自定义 API 管理和交互项目。
Email sending MCP 💌
使用此电子邮件发送 MCP 服务器,直接从 Cursor 发送电子邮件