天气信息MCP服务器

一个基于Model Context Protocol (MCP)的服务器,提供美国国家气象局API的天气警报和预报功能。

  • by neehanthreddym
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 neehanthreddym/custom_mcp_server

使用说明

MCP服务器演示

模型上下文协议(MCP)服务器的基本实现,该服务器使用美国国家气象局API提供天气信息。

什么是MCP?

模型上下文协议(MCP)是一种标准,允许人工智能系统与外部工具和数据源连接。此服务器公开了MCP兼容客户端可以使用的与天气相关的工具。

特性

此MCP服务器提供两个主要工具:

  • get_alerts:检索美国任何州的活动天气警报
  • get_forecast:获取特定位置(纬度/经度)的详细天气预报

先决条件

  • Python 3.10+
  • uv 包管理器

安装

  1. 克隆或导航到项目目录:
cd custom_mcp_server
  1. 安装依赖项:
uv sync

本地运行

要在开发模式下运行MCP服务器:

uv run mcp dev server/weather.py

此命令将:

  • 启动MCP服务器
  • 启动MCP检查器(基于网络的测试界面)
  • 自动向检查器打开浏览器

MCP检验员测试

这 MCP检查员 是一个MCP主机,允许您与服务器交互并测试其工具。

MCP检查员仪表板

工具

工具响应

使用检查器

  1. 运行上述命令后,检查器将在浏览器中打开
  2. 您将在界面中看到服务器的可用工具
  3. 测试工具:

测试 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容器运行。这对于部署或隔离非常有用。

构建并运行

  1. 构建Docker镜像:

    docker build -t mcp-server .
    
  2. 在分离模式下运行容器:

    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传输模型中:

  1. 过程模型:MCP客户端将服务器作为子进程启动
  2. 消息交换:
    • 服务器通过其 标准输入
    • 服务器将响应写入其 标准输出(stdout)
  3. 消息格式:
    • 消息由换行符分隔
    • 消息 不能 包含嵌入的换行符
  4. 日志记录:
    • 服务器 可以 将UTF-8字符串写入 标准误差 用于记录目的
    • 客户端可以捕获、转发或忽略这些日志
  5. 关键规则:
    • 服务器 不能 向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。