使用说明
MCP服务器演示
模型上下文协议(MCP)服务器的基本实现,该服务器使用美国国家气象局API提供天气信息。
什么是MCP?
模型上下文协议(MCP)是一种标准,允许人工智能系统与外部工具和数据源连接。此服务器公开了MCP兼容客户端可以使用的与天气相关的工具。
特性
此MCP服务器提供两个主要工具:
get_alerts:检索美国任何州的活动天气警报get_forecast:获取特定位置(纬度/经度)的详细天气预报
先决条件
- Python 3.10+
uv包管理器
安装
- 克隆或导航到项目目录:
cd custom_mcp_server
- 安装依赖项:
uv sync
本地运行
要在开发模式下运行MCP服务器:
uv run mcp dev server/weather.py
此命令将:
- 启动MCP服务器
- 启动MCP检查器(基于网络的测试界面)
- 自动向检查器打开浏览器
MCP检验员测试
这 MCP检查员 是一个MCP主机,允许您与服务器交互并测试其工具。
MCP检查员仪表板
工具
工具响应
使用检查器
- 运行上述命令后,检查器将在浏览器中打开
- 您将在界面中看到服务器的可用工具
- 测试工具:
测试 get_alerts:
- 选择
get_alerts工具 - 输入两个字母的美国州代码(例如。,
CA对于加利福尼亚州,NY纽约) - 点击“运行”查看活动天气警报
测试 get_forecast:
- 选择
get_forecast工具 - 输入纬度值(例如。,
39.7456) - 输入经度值(例如。,
-97.0892) - 点击“运行”查看详细预测
输出示例
获取警报 返回格式化的警报,其中包含:
- 事件类型
- 受影响区域
- 严重程度
- 详细描述
- 安全说明
获取预测 返回5个周期的预测,其中包含:
- 时段名称(例如“今晚”、“明天”)
- 温度
- 风速与风向
- 详细预测说明
与MCP主机(克劳德桌面、反重力、光标等)一起使用
一旦您使用MCP Inspector测试了服务器,您就可以将其用于生产MCP主机。
安装
要在Claude桌面应用程序中安装服务器:
uv run mcp install server/weather.py
配置
通过将以下内容添加到MCP工具配置文件来配置MCP主机:
配置位置:
- 克劳德桌面版:文件->设置->开发人员
- 反重力:切换代理->附加选项(右上角3点)->MCP服务器->管理MCP服务器->查看原始配置
- 光标:文件->首选项->光标设置->MCP
JSON配置:
{
"mcpServers": {
"weather": {
"command": "uv",
"args": [
"run",
"--with",
"mcp[cli]",
"mcp",
"run",
".../custom_mcp_server/server/weather.py"
]
}
}
}
重要:更新中的绝对路径
args阵列以匹配您的本地安装路径。
使用MCP主机进行测试
配置后,重新启动MCP主机应用程序,并使用以下查询进行测试:
- “加利福尼亚州目前的天气警报是什么?”
- “给我旧金山的天气预报。”
示例:使用具有反重力功能的天气MCP服务器
与聊天机器人CLI一起使用
您还可以使用以下命令将MCP服务器工具直接集成到自定义聊天机器人CLI中 mcp-use 图书馆。这种方法允许您构建可以利用MCP工具的会话界面。
运行聊天机器人CLI
使用以下命令运行交互式聊天机器人:
uv run server/client.py
聊天机器人提供:
- 支持内存的对话:跨多个查询维护上下文
- 交互式命令:
- 类型
exit,quit,或q退出 - 类型
clear或cls清除对话历史记录
- 类型
- 工具集成:相关时自动使用MCP天气工具
实施概述
聊天机器人(server/client.py)展示柜:
- MCP客户端集成:从加载服务器配置
server/weather.json - LangChain集成:使用ChatGroq LLM和MCP代理
- 内存管理:启用对话历史记录跟踪
- 错误处理:优雅的错误处理和日志记录
交互示例
交互式CLI界面
工具使用辅助响应
运输方式
此MCP服务器支持两种传输模式: 工作室 (默认)和 上海证券交易所.
1.STDIO模式(默认)
在这种模式下,客户端生成服务器进程,并通过标准输入/输出进行通信。这是在本地运行的最简单方法。
运行STDIO客户端:
这 client-stdio.py 脚本自动管理服务器生命周期。
uv run mcpserver/client-stdio.py
2.SSE模式(服务器发送事件)
在这种模式下,服务器作为独立的HTTP服务器运行,客户端连接到它。这对于远程连接或多个客户端很有用。
步骤1:启动服务器
您必须先启动服务器。将运输设置为 sse 使用环境变量或修改中的默认值 server.py.
# Start server in SSE mode (listening on port 8000)
MCP_TRANSPORT=sse uv run mcpserver/server.py
步骤2:运行SSE客户端 在单独的终端中,运行客户端:
uv run mcpserver/client-sse.py
服务器配置
服务器已在中配置 mcpserver/server.py:
- 名字:
weather - 主机:
0.0.0.0(仅限苏格兰和南方能源公司运输) - 端口:
8000(仅限苏格兰和南方能源公司运输)
使用Docker运行
您可以将MCP服务器作为Docker容器运行。这对于部署或隔离非常有用。
构建并运行
-
构建Docker镜像:
docker build -t mcp-server . -
在分离模式下运行容器:
docker run -d -p 8000:8000 --name mcp-container mcp-server这将在端口8000上以SSE模式启动服务器。
在Docker中运行客户端
要在正在运行的容器中运行客户端脚本,请执行以下操作:
docker exec -it mcp-container uv run client-sse.py
传输协议:STDIO
此MCP服务器使用 STDIO(标准输入/输出)传输协议 用于客户端和服务器之间的通信。
STDIO传输如何工作
在STDIO传输模型中:
- 过程模型:MCP客户端将服务器作为子进程启动
- 消息交换:
- 服务器通过其 标准输入
- 服务器将响应写入其 标准输出(stdout)
- 消息格式:
- 消息由换行符分隔
- 消息 不能 包含嵌入的换行符
- 日志记录:
- 服务器 可以 将UTF-8字符串写入 标准误差 用于记录目的
- 客户端可以捕获、转发或忽略这些日志
- 关键规则:
- 服务器 不能 向stdout写入任何不是有效MCP消息的内容
- 客户 不能 向服务器的stdin写入任何不是有效MCP消息的内容
为什么是STDIO?
STDIO传输非常适合:
- 本地开发和测试
- 直接子流程沟通
- 无网络开销的简单客户端-服务器架构
- 使用MCP检查器轻松调试
实现细节
- 内置于 FastMCP 框架
- 使用美国国家气象局(NWS)API
- 异步/等待高效的API请求
- 正确的错误处理和超时
- 用于客户端-服务器通信的STDIO传输
项目结构
custom_mcp_server/
├── mcpserver/
│ ├── server.py # MCP server implementation
│ ├── client-sse.py # SSE client
│ └── client-stdio.py # STDIO client
├── logger.py # Logging configuration
├── Dockerfile # Docker configuration
├── .dockerignore # Docker ignore file
├── README.md # This file
├── pyproject.toml # Project dependencies
└── requirements.txt # Python requirements
备注
- NWS API仅提供美国地区的天气数据
- 预测数据需要有效的美国坐标
- 服务器包含NWS API指南要求的User-Agent标头
参考文献
该实施基于 模型上下文协议Python SDK 通过Anthropic。
