天气数据服务

一个基于Model Context Protocol (MCP)的天气数据服务器,提供美国地区的天气预报和警报信息。

  • by nitvob
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 nitvob/nws-mcp-server

使用说明

气象MCP服务器

一种模型上下文协议(MCP)服务器,使用美国国家气象局API提供天气信息。此服务器公开了用于获取美国各地天气预报和警报的工具。

特性

  • 🌤️ 天气预报:使用纬度/经度坐标获取美国任何地点的详细天气预报
  • 🚨 天气警报:检索美国任何州的活动天气警报
  • 🔌 MCP集成:与Claude无缝协作,适用于桌面和其他MCP兼容客户端
  • 📡 实时数据:从美国国家气象局API获取实时数据

可用工具

get-forecast

获取特定位置的天气预报。

参数:

  • latitude (浮动):位置的纬度(-90到90)
  • longitude (浮动):位置的经度(-180到180)

示例用法:

  • “旧金山的天气预报是什么?”(克劳德将使用坐标约37.7749,-122.4194)
  • “给我纬度47.6062,经度-122.3321的天气预报”(西雅图)

get-alerts

获取美国某个州的活跃天气警报。

参数:

  • state (string):两个字母的美国州代码(例如,“CA”、“NY”、“TX”)

示例用法:

  • “加利福尼亚州的活跃天气警报是什么?”
  • “得克萨斯州有天气预警吗?”

先决条件

  • Python 3.10或更高版本
  • uv 包管理器
  • 访问互联网(用于NWS API调用)

安装

  1. 安装uv (如果尚未安装):

    # macOS/Linux
    curl -LsSf https://astral.sh/uv/install.sh | sh
    
    # Windows
    powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
    
  2. 克隆或导航到项目目录:

    cd weather
    
  3. 安装依赖项:

    uv sync
    

运行服务器

独立测试

要直接测试服务器,请执行以下操作:

uv run weather.py

服务器将启动并监听标准输入/输出。您可以使用MCP检查器或其他MCP客户端对其进行测试。

Claude桌面版

  1. 安装桌面版Claude 从 claude.ai/下载

  2. 为桌面配置Claude 通过编辑配置文件:

    macOS/Linux:

    code ~/Library/Application\ Support/Claude/claude_desktop_config.json
    

    窗户:

    code $env:AppData\Claude\claude_desktop_config.json
    
  3. 添加天气服务器配置:

    macOS/Linux:

    {
      "mcpServers": {
        "weather": {
          "command": "uv",
          "args": [
            "--directory",
            "/ABSOLUTE/PATH/TO/YOUR/weather",
            "run",
            "weather.py"
          ]
        }
      }
    }
    

    窗户:

    {
      "mcpServers": {
        "weather": {
          "command": "uv",
          "args": [
            "--directory",
            "C:\\ABSOLUTE\\PATH\\TO\\YOUR\\weather",
            "run",
            "weather.py"
          ]
        }
      }
    }
    
  4. 重新启动桌面版的Claude 完全

  5. 验证集成 在Claude for Desktop中查找“搜索和工具”图标

使用示例

一旦配置了Claude for Desktop,您可以提出以下问题:

  • “萨克拉门托的天气预报是什么?”
  • “给我纽约市的天气预报”
  • “佛罗里达州的活跃天气警报是什么?”
  • “得克萨斯州有任何恶劣天气预警吗?”
  • “坐标40.7128,-74.0060处的天气怎么样?”(纽约市)

API详细信息

此服务器使用美国国家气象局API(API.weither.gov),该API:

  • 提供免费访问美国天气数据
  • 不需要API密钥
  • 以JSON格式返回数据
  • 仅覆盖美国地区

项目结构

weather/
├── main.py          # Entry point (if needed)
├── weather.py       # Main MCP server implementation
├── pyproject.toml   # Project configuration and dependencies
├── uv.lock         # Dependency lock file
└── README.md       # This file

故障排除

服务器未在Claude中显示

  1. 检查配置文件语法 -确保JSON有效

  2. 验证绝对路径 -使用完整路径,而不是相对路径

  3. 检查克劳德的日志:

    # macOS/Linux
    tail -f ~/Library/Logs/Claude/mcp*.log
    
    # Windows
    # Check logs in %AppData%\Claude\logs\
    
  4. 重新启动桌面版的Claude 完全

工具调用失败

  1. 验证服务器是否独立运行:
    uv run weather.py
    
  2. 检查速率限制 -NWS API有费率限制
  3. 确保坐标为美国位置 -NWS API仅适用于美国
  4. 检查互联网连接 -服务器需要访问api.weather.gov

常见错误消息

  • “检索网格点数据失败”:通常意味着坐标在美国境外
  • “此状态没有活动警报”:不是错误-只是表示没有当前警报
  • “无法获取预测数据”:网络问题或坐标无效

发展

添加新工具

要添加新的天气相关工具,请执行以下操作:

  1. 使用添加工具 @mcp.tool() 装饰器
  2. 使用适当的类型提示实现async函数
  3. 添加错误处理和验证
  4. 测试用 uv run weather.py

依赖项

关键依赖关系(由管理 uv):

  • mcp:模型上下文协议SDK
  • httpx:API请求的HTTP客户端
  • fastmcp:简化的MCP服务器框架

许可证

该项目是模型上下文协议生态系统的一部分。检查其许可证的各个依赖关系。

贡献

请随时提交问题和拉取请求以改进天气服务器功能。

相关资源