天气查询工具

一个基于Model Context Protocol (MCP)的天气查询工具,提供多种接口方式,包括MCP stdio协议、HTTP/JSON API和Server-Sent Events (SSE)流式响应。

  • by jhenbertgit
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 jhenbertgit/mcp-server-template

使用说明

本地MCP服务器(气象工具)

一种模型上下文协议(MCP)服务器 get_weather 具有多个界面的工具:

  • MCP客户端的MCP stdio协议
  • HTTP/JSON API端点
  • 流式响应的服务器发送事件(SSE)

特性

  • MCP stdio服务器实现 @modelcontextprotocol/sdk
  • 具有JSON和SSE端点的HTTP服务器
  • 天气工具: get_weather 使用Open‑Meteo的当前、每小时和每日模式
  • 通过键入验证 zod
  • 长时间运行的请求的进度更新
  • 健康检查端点

需求

  • Node.js 18+(推荐LTS)
  • pnpm(项目集 packageManager: pnpm@10.x)

快速启动

pnpm install
pnpm dev

这将通过stdio启动MCP服务器。使用MCP兼容客户端(或下面的检查器)进行连接。

使用MCP检查器运行

该仓库包含一个帮助脚本,用于在MCP检查器中启动服务器:

pnpm run server:inspect

笔记:

  • 在Windows上,脚本设置 DANGEROUSLY_OMIT_AUTH=true 仅适用于检查员会议。
  • 脚本在内部运行: pnpm dlx @modelcontextprotocol/inspector pnpm dev.

工具: get_weather

检索给定城市的天气。

输入架构

  • city (字符串,必需):要查询的城市名称(例如“旧金山”)。
  • units (“公制”|“英制”,可选,默认值:“公制”)。
  • mode (“当前”|“每小时”|“每天”,可选,默认值:“当前”)。
  • days (int,可选):仅适用于 daily 模式;必须为7-10(如果省略,则默认为7)。
  • format (“json”|“text”,可选,默认:环境相关,见下文)。

响应格式

  • 默认情况下为JSON。如果 format: "text" (或设置了下面的env-var),返回一个包含字符串化JSON的单个文本blob,以实现兼容性。

例子

当前条件(公制):

{
  "name": "get_weather",
  "arguments": { "city": "Tokyo" }
}

下一小时~24小时(英制):

{
  "name": "get_weather",
  "arguments": { "city": "Seattle", "mode": "hourly", "units": "imperial" }
}

每天7-10天(公制):

{
  "name": "get_weather",
  "arguments": { "city": "Berlin", "mode": "daily", "days": 7 }
}

环境变量

  • MCP_TEXT_OUTPUT=1

    • 强制工具响应的文本输出(字符串化JSON)。适用于仅显示文本的客户端。
  • PORT=5000

    • HTTP服务器的端口(默认值:5000)
  • DANGEROUSLY_OMIT_AUTH=true

    • 仅适用于本地检查员会话(已由设置 server:inspect 在Windows上)。请勿在生产中使用。

脚本

  • pnpm dev --使用以下命令运行TypeScript服务器 tsx (src/server.ts).
  • pnpm build --类型检查并通过发送JS tsc.
  • pnpm run server:inspect --发射MCP检查员指向 pnpm dev.

HTTP端点

GET/健康

健康检查端点。退货 { "status": "ok" } 当服务器正在运行时。

GET/GET_weather

获取JSON格式的天气数据。

查询参数:

  • city (必填):城市名称
  • units:“公制”(默认)或“英制”
  • mode:“当前”(默认)、“每小时”或“每天”
  • days:天数(7-10,“每日”模式需要)
  • format:“json”(默认)或“text”

GET/stream/GET_weather

使用服务器发送事件(SSE)流式传输天气数据。参数与 /get_weather.

POST/mcp

用于编程访问的MCP协议端点。

项目结构

  • src/server.ts --MCP和HTTP服务器实现
    • 处理MCP stdio协议
    • 提供HTTP/JSON和SSE端点
    • 实施天气服务
  • package.json --脚本和依赖关系
  • .env --可选环境覆盖

实现细节

  • 地理编码使用Open‑Meteo地理编码API(无API密钥)
  • 通过检索预测数据 openmeteo 软件开发工具包
  • 通过stdio和HTTP实现MCP协议
  • 提供JSON和文本响应格式
  • 包括长时间运行的请求的进度事件
  • 实施CORS用于Web访问
  • 使用Zod验证所有输入

响应格式

当前天气

{
  "location": "City, Region, Country",
  "latitude": 0.0,
  "longitude": 0.0,
  "units": "metric",
  "mode": "current",
  "current": {
    "temperature": 20.5,
    "temperature_unit": "°C",
    "wind_speed": 15.3,
    "wind_speed_unit": "km/h"
  }
}

逐时预报

{
  "location": "City, Region, Country",
  "units": "metric",
  "mode": "hourly",
  "hourly_next_24h": [
    {
      "time_iso": "2023-01-01T00:00:00.000Z",
      "temperature": 18.5,
      "temperature_unit": "°C",
      "wind_speed": 12.3,
      "wind_speed_unit": "km/h"
    }
  ]
}

每日预报

{
  "location": "City, Region, Country",
  "units": "metric",
  "mode": "daily",
  "days": 7,
  "daily": [
    {
      "date": "2023-01-01",
      "t_max": 22.5,
      "t_min": 16.2,
      "temperature_unit": "°C",
      "precipitation_sum": 0.5,
      "precipitation_unit": "mm",
      "wind_speed_10m_max": 25.1,
      "wind_speed_unit": "km/h"
    }
  ]
}

支持的单位

  • 指标:温度为°C,风速为km/h
  • 帝国的:温度为°F,风速为mph

构建

pnpm build

许可证

麻省理工学院