天气数据服务

一个通过MCP协议提供美国国家气象局API数据访问的天气信息服务器,支持获取实时天气警报和详细天气预报。

  • by romeritomendes
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 romeritomendes/mcp-weather

使用说明

气象MCP服务器

模型上下文协议 (MCP) 服务器,提供工具,使用国家气象服务 (NWS) API 获取美国的气象信息。

这个项目做什么

这是一个MCP服务器,允许通过两个主要工具访问美国天气数据:

可用工具

  1. get_alerts - 获取一个状态的活动天气警报

    • 参数 : state (两个字母的州代码,例如:“CA”、“NY”)
    • 返回风暴、洪水等警报。
  2. get_forecast - 获取特定坐标的天气预报

    • 参数 : latitude (-90 a 90), longitude (-180 a 180)
    • 返回包含温度、风力和条件的详细预报

MCP/Cline/LLM流程如何工作

───────────────────────────────┐
                               │
1. Você: "Qual clima San Francisco?"
                               │ 
                               ↓
───────────────────────────────┘
           Cline Core
                              ┌─────────────────────────────────────┐
                              │                                     │
2. Cline adiciona contexto:   │"Ferramentas disponíveis:            │
                              │ - weather.get_forecast(lat, long)   │
                              │ - weather.get_alerts(state)         │
                              │ - google_drive.read_file(path)      │
                              │ - slack.send_message(...)           │
                              │ [...]"                              │
                              │                                     │
                              │ → passa para Claude (LLM)           │
                              └─────────────────────────────────────┘
                                      │
                                      ↓
───────────────────────────────┐
                               │
3. Claude (LLM) analisa:       │"Esta é pergunta meteorológica
                               │ Vou usar weather.get_forecast
                               │ Precisa converter 'San Francisco' <== a LLM faz essa conversão
                               │ para coordenadas (37.7749°N, 122.4194°W)"
                               │
                               ↓ Chama função MCP
───────────────────────────────┘
        MCP Execution Flow
                              ┌─────────────────────────────────────┐
                              │ 4. Cline executa servidor MCP:      │
                              │    `./build/index.js` (weather)     │
                              └─────────────────────────────────────┘
                                      │
                                      ↓
                              ┌─────────────────────────────────────┐
                              │ 5. Cline chama função MCP:          │
                              │    weather.get_forecast(            │
                              │        latitude: 37.7749,           │
                              │        longitude: -122.4194         │
                              │    )                                │
                              └─────────────────────────────────────┘
                                      │
                                      ↓
                            Weather MCP Server
                              ┌──────────────────────────────────────┐
                              │ 6. MCP server:                       │
                              │  - Faz requisição para Points API    │
                              │  - Obtém dados de pontos geográficos │
                              │  - Faz requisição para Forecast API  │
                              │  - Processa dados JSON               │
                              │  - Formata resposta textual          │
                              └──────────────────────────────────────┘
                                      │
                                      ↓
───────────────────────────────┐
                               │
7. MCP retorna dados:          │"Forecast for 37.77, -122.41:
                               │
                               │Today: 72°F, Partly Cloudy     │
                               │Tonight: 58°F, Clear           │
                               │Tomorrow: 75°F, Sunny          │
                               │[...]"                         │
                               │
                               ↓ Formata resposta final
───────────────────────────────┘
         Final Response
                              ┌─────────────────────────────────────┐
                              │ 8. Cline → LLM:                     │
                              │    "Recebi resposta técnica. Preciso│
                              │     apresenta-la? Avalie clareza,   │
                              │     idioma, unidades apropriadas?"  │
                              └─────────────────────────────────────┘
                                      │
                                      ↓
                              ┌─────────────────────────────────────┐
                              │ 9. LLM processa se necessário:      │
                              │    "Converte °F→°C, inglês→português│
                              │     formata de forma natural"       │
                              └─────────────────────────────────────┘
                                      │
                                      ↓ Apresenta resultado
───────────────────────────────┐
                               │
         Final Response        │
                              ┌─────────────────────────────────────┐
                              │ 10. Cline apresenta para você:      │
                              │                                     │
                              │ **Previsão para San Francisco:**    │
                              │                                     │
                              │ **Hoje:** 22°C, Parcial. Nublado    │
                              │ **Esta noite:** 14°C, Limpo         │
                              │ **Amanhã:** 24°C, Ensolarado        │
                              │ [...]                               │
                              └─────────────────────────────────────┘

进程关键点 :

  • 决定: LLM使用智能将关键字(“天气”,“预报”,“天气”)与可用的MCP工具相关联
  • 执行 : Cline 在后台编排 MCP 进程的运行
  • 通讯: 所有通过MCP协议 - Cline调用,服务器响应
  • 演示文稿 : LLM将技术答案格式化为可读文本

使用的技术

  • TypeScript 发展语言
  • Node.js -运行时JavaScript
  • @模型上下文协议/sdk -MCP框架
  • 动物圈 - 输入验证
  • 美国国家气象局API 气象数据来源

安装和使用

先决条件

  • Node.js 18+
  • npm

1. 克隆和安装依赖关系

git clone <repository-url>
cd weather-mcp
npm install

2. 构建项目

npm run build

此命令 :

  • JavaScript的舒适或打字
  • 转换文件 build/index.js 可执行
  • 从 MCP 服务器生成最终二进制文件

3. 手动运行(可选)

./build/index.js

4. 在Cline中设置(VS代码)

要在 Cline 中使用此 MCP 服务器,请在 cline_mcp_settings.json:

{
  "mcpServers": {
    "weather": {
      "command": "node",
      "args": ["/caminho/para/weather/build/index.js"]
    }
  }
}

* Ajuste o caminho 到项目被克隆的实际位置 。

5.美国没有克林顿

设置后,您可以使用以下短语:

  • “今天天气怎么样?”
  • “加州有警报吗?”
  • “纽约的预报”
  • “芝加哥的气温是多少?”

Cline 会自动检测到您需要使用此 MCP 服务器。

使用的API

  • 美国国家气象局API (https://api.weather.gov)
    • /alerts -按状态分类的警报
    • /points/{lat},{lon} - 获取预测 URL
    • /gridpoints/...forecast - 有关预测的详细数据

限制

  • 仅限美国: 仅适用于美国地区
  • 帝国格式: 温度 °F, 风速 mph
  • API 要求: 遵守速率限制并且需要有效的用户代理

代码架构

src/index.ts

  • 主MCP服务器
  • 记录两个工具(get_alerts, get_forecast)
  • 使用 Zod 校验
  • 通过stdio进行通信

src/helper.ts

  • 实用功能
  • NWS API 的 HTTP 客户端
  • 数据格式
  • 接口TypeScript对位API

构建

  • TypeScript→ JavaScript
  • JavaScript 可执行文件 build/
  • 二进制 CLI 通过 package.json