@cyanheads/nws-weather-mcp-server (英语)
通过国家气象局API获取美国天气预报,主动警报和当前观测. (原始内容存档于2012-10-12). STIO or Streamable HTTP.
概览
美国国家气象局的实时天气:预报、主动警报、当前情况、50个州和美国领土任何地点的预报员讨论,加上区域预报、沿海和海洋警报,以及一周的台站历史。 不需要 API 密钥 .
工具
| 工具 | 说明 |
|---|---|
nws_get_forecast | 坐标预报7天或小时。 内部决定核子系统网格. |
nws_search_alerts | 主动天气警报按区域,分点,分地,事件,严重程度,急迫性,确定性,状态等进行过滤. |
nws_get_alert | 由当前或被替换的ID发送一个提醒消息(~7天保留). |
nws_get_alert_counts | 全国范围内、每个州/领土或海洋地区以及每个海洋地区都有积极的警报. |
nws_get_observations | 以坐标(最近站)或站名ID表示的当前条件. |
nws_get_observation_history | 一个台站最近的观测结果,最新的第一,通过NWS保存的~7天回呼. |
nws_find_stations | 近地观测站以相距相接方式排序. |
nws_list_alert_types | 所有用于过滤器发现的有效提醒事件类型名称 . |
nws_get_office_discussion | 天气预报办公室的最新叙事产品(AFD、HWO、ZFP、SPS、FWF);一个过于庞大而内含的产品作为分节大纲回来. |
nws_get_zone_forecast | 核武器国家预报区的文字预测期. |
资源
| 资源 | 说明 |
|---|---|
nws://alert-types | 所有有效的 NSS 提醒事件类型名称的静态列表 . |
skill://nws-weather-guide/SKILL.md | 将预报、警报、站台趋势和预报员讨论结合起来的决定大门. |
警报类型也可通过 nws_list_alert_types。天气指南可通过 MCP 技能扩展和插件提供 skills/ 目录.
能力参考
nws_get_forecast 工具
latitude+ 键longitude; 默认返回14个命名的12小时周期(~7天),或与hourly: true有露点和湿度的一小时,上游为~156页,每页48个nextCursor搭载其模式,所以每小时步行一次继续每小时不续发hourly: trueinclude_amounts: true添加每个本地人quantitativePrecipitation, (中文(简体) ),snowfallAmount,以及iceAccumulation间隔为precipitationAmounts(单位:千美元)layer, (中文(简体) ),uom, (中文(简体) ),values与validTime财务报告和审定财务报表value),加上单独的amountsUpdateTime。默认虚假;在任何需要金额的光标页面上重新发送。 中间字符串、单位、零和无值保持不变。 缺少的分层和无法提供的数额在以下表格中说明:notice; 现为空地层values: []。缺勤单位或更新时间无效。 无法获取的量信息留下了主要预测.- 回返
updateTime,当电网的预测数据最后一次更新时,除此之外generatedAt页:1notice标记一个在24小时内未更新的网格 - 返回
forecastZone财务报告和审定财务报表county连接到nws_search_alerts - 海洋坐标失败
marine_forecast_unsupported,而陆地点 NSS 则没有预测网格的故障no_forecast_grid
nws_search_alerts 工具
- 最多一个位置过滤器( E)
area, (中文(简体) ),point, (中文(简体) ),zone, (中文(简体) ),region_type,或region),或无国家搜索;event以不敏感和部分方式匹配;status默认为Actual(另见:Exercise, (中文(简体) ),System, (中文(简体) ),Test, (中文(简体) ),Draft(中文(简体) ) limit(违约25)上限为25;较大的限制为25并报告通过requestedLimit编号 :effectiveLimitnextCursor带有查询的过滤器和页面大小,所以将其递回cursor自己; 随同发送的过滤器被忽略- 每个
affectedZones条目带有其区域type(单位:千美元)forecast编号 :county编号 :fire(三);references列表先由sent页:1point在无核子系统覆盖范围之外失败invalid_point - 每一个警报都携带着
office(为nws_get_office_discussion,比如说.RIW),原样vtec字符串,该nwsHeadline,以及hazard标记, 如maxHailSize财务报告和审定财务报表maxWindGust逐字记录
nws_get_alert 工具
alert_id: 警报id从nws_search_alerts,或一个references[].identifier从任何提示;返回{ alert }形状与nws_search_alerts,包括被替换的信息- 一个错误的ID,一个未知的ID, 一个过去NWS的~7天的保留都失败了
alert_not_found
nws_get_alert_counts 工具
- 无输入; 返回国家
totalAlerts(单位:千美元)landAlerts+ 键marineAlerts),加 (中文(简体) )areas按国家/领土或海洋区域代码和regions按海洋区域计数AL, (中文(简体) ),AT, (中文(简体) ),GL, (中文(简体) ),GM, (中文(简体) ),PA, (中文(简体) ),PI),每个代码只列出带有主动提醒的代码 - 计数涵盖每个消息状态,包括测试和练习,所以
totalAlerts超过国民nws_search_alertstotalCount(单位:千美元)status: Actual警告在每一个地区都会发生一次,所以areas可相加过去totalAlerts
nws_get_observations 工具
- 以坐标(最近的站点溶解)向上看或
station_id直接 - 每一次测量(F/C、mph/km/h、inHg/hPa、mi/km、in/mm)均显示双单位温度至小数点;每小时报告1至3至6小时降水量
0追踪和null没有报告数量;超过2小时的观测结果带有呆滞状态通知,一个没有大多数测量数据的台站另有警示标志
nws_get_observation_history 工具
station_id(从)nws_find_stations; 可选start(包括)和end(排他性)作为 ISO 8601 有秒和相抵的日期; 最新的第一, 通过 ~ 7 天 的 NWS 保存limit(默认24)上限为100;较大的上限为100并报告通过requestedLimit编号 :effectiveLimit- 每个观察都带有
nws_get_observations测量字段,null站台没有报告;未知站台失效station_not_found窗口或start之前没有end与invalid_time_window nextCursor仅当旧的观测结果仍然存在时才会出现;没有totalCount,因为核武器国家没有报告窗口
nws_find_stations 工具
latitude+ 键longitude; 可选limit(违约10)的上限为50;较大的上限为50,并通过requestedLimit编号 :effectiveLimit- 首先,每个结果都带有站名
nws_get_observations、相距(公里)、轴承、区码、高地和时区
nws_list_alert_types 工具
- 返回 NWS API 所识别的全部事件类型( 如 “ Tornado 警告 ” 、 “ 热咨询 ” )
- 用于发现有效值
event过滤器进入nws_search_alerts
nws_get_office_discussion 工具
office:通常3个字母的WFO代码(如"SEW"为西雅图所取)作为回取office字段为nws_get_forecast· ;product_type数字 :AFD(违约),HWO, (中文(简体) ),ZFP, (中文(简体) ),SPS,或FWF(火灾天气规划预报)- 回返
productText加号issuanceTime, (中文(简体) ),issuingOffice, (中文(简体) ),productName, (中文(简体) ),productCode, (中文(简体) ),wmoCollectiveId· ;content[]将产品文本带入 atext代码块, 所以固定宽的表格保留了它们的列; 一个未知的办公室, 或一个没有当前所请求类型的产品的办公室, 失败no_products - 一个产品太大,不能内含(大多数ZFP和FWF)返回一个
outline改为productText; 通过sections(AFD 区域名称,或 ZFP/HWO/SPS/FWF 的区域代码) 获取匹配区域,未知名称失败unknown_section - 已输入警告区
fire获得FWF的预测:office从警报office字段,product_type: "FWF", (中文(简体) ),sections: [<zone code>]
nws_get_zone_forecast 工具
zone_id:预报区号(如"WAZ315")——由nws_get_forecast(单位:千美元)forecastZone, (中文(简体) ),nws_find_stations(单位:千美元)forecastZone栏),以及nws_search_alerts(单位:千美元)code一、导 言affectedZones条目type: "forecast"(中文(简体) )- 以本地预测器的叙述文本返回命名的时段( 如“ 今天”、“ 今天晚上”、“ 星期一 ”)
- 县 (
XXC###)和未知区域代码失败zone_not_found,大多数消防区代码也一样, 其预测是FWF办公室的部分nws_get_office_discussion; 火警代码也是公共区号返回公共区的预测; 没有文本预测的海洋区失败marine_forecast_unsupported,和无zone_forecast_unavailable
nws://alert-types 资源
- 所有有效的 NSW 提醒事件类型名称的静态列表, 返回为
application/json - 无参数; 公开缓存1小时
特征
建造在 @cyanheads/mcp-ts-core: stdio和可流式的 HTTP 传输器,可插接式(none 编号 : jwt 编号 : oauth),可互换存储(in-memory, (中文(简体) ), filesystem, (中文(简体) ), Supabase, (中文(简体) ), Cloudflare KV/R2/D1),结构化记录,可选择的OpenTeleometry tracking.
特定核武器国家:
- 发送所需
User-Agent自动页眉( 可配置通过NWS_USER_AGENT()——无核子系统返回403 - 自动坐标对网格分辨率通过
/points,缓存为 1h,因为网格单元格很少改变 - 请求超时加重试/ 后退, 用于瞬时的 NAWS API 失败
- 零自动访问——不需要 API 密钥
- 页面结果——通过返回
nextCursor恢复为cursor用于下一页(在最后一页录入)
方便代理输出 :
- 证明——反应回放办公室代码,时区和区码,使特工可以连锁进入
nws_get_office_discussion, (中文(简体) ),nws_get_zone_forecast,以及nws_search_alerts - 对沉默的指导——空的、短的或光标后端的结果带有:
notice命名原因和下一步 - 输入出错的原因( E)
invalid_area_code, (中文(简体) ),no_products, (中文(简体) ),zone_not_found,.)因此调用数据分支,而不是字符串解析 - 双单位计量(F/C、 mph/km/h、inHg/hPa、mi/km、in/mm),四舍五入,与文本输出相匹配
开始
连接到主机实例, 没有安装 :
claude mcp add --transport http nws-weather-mcp-server https://nws.caseyjhand.com/mcp
或者在当地运行它:
claude mcp add nws-weather-mcp-server -- npx -y @cyanheads/nws-weather-mcp-server
对于其他客户端,请将此添加到 MCP 配置文件中 :
{
"mcpServers": {
"nws-weather-mcp-server": {
"command": "npx",
"args": ["-y", "@cyanheads/nws-weather-mcp-server"]
}
}
}
NWS_USER_AGENT 可选择设置发送给核武器国家的联系人标识符。 对于 Docker 或源构建,请参见 运行服务器。 。 。 .
配置
| 变量 | 说明 | 默认 |
|---|---|---|
NWS_USER_AGENT | NWS API请求的用户代理. API需要这个头. | (nws-weather-mcp-server, ...) |
MCP_TRANSPORT_TYPE | 运输: stdio 或者说 http。 。 。 . | stdio |
MCP_HTTP_PORT | HTTP 服务器端口 . | 3010 |
MCP_HTTP_HOST | HTTP 服务器的主机名 . | 127.0.0.1 |
MCP_SESSION_MODE | HTTP 会话模式 : stateful, (中文(简体) ), stateless,或 auto。 。 。 . | stateless |
MCP_LOG_LEVEL | 日志级别 : debug, (中文(简体) ), info, (中文(简体) ), notice, (中文(简体) ), warning, (中文(简体) ), error。 。 。 . | info |
见 .env.example 用于完整列表,包括认证、存储和OpenTeleometry选项.
运行服务器
地方发展
资源开发需要 Bun v1.4 + 设备。已发布的可执行文件也运行在 节点.js v24+。 。 。 .
git clone https://github.com/cyanheads/nws-weather-mcp-server.git
cd nws-weather-mcp-server && bun install
cp .env.example .env
-
构建并运行制作版本 :
# One-time build bun run rebuild # Run the built server bun run start:http # or bun run start:stdio -
运行检查和测试 :
bun run devcheck # Lints, formats, type-checks bun run test # Runs test suite
夹克
docker run --rm -p 3010:3010 ghcr.io/cyanheads/nws-weather-mcp-server:latest
图像默认为 HTTP 传输、 无国籍会话模式和日志到 /var/log/nws-weather-mcp-server运行到一个 MCP 客户端的 stdio,使用 "command": "docker" 与 "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/nws-weather-mcp-server:latest"]为了在当地建设, docker build -t nws-weather-mcp-server .; OpenTeleometry 等同器默认安装——用 --build-arg OTEL_ENABLED=false 以略去它们.
项目结构
| 目录 | 目的 |
|---|---|
src/index.ts | createApp() 入场点——注册工具,警示型资源,并发布技能. |
skills/ | 出版的代理技能,也服务于MCP. |
src/mcp-server/tools/definitions/ | 工具定义*.tool.ts) (中文(简体) ). |
src/mcp-server/resources/definitions/ | 资源定义*.resource.ts) (中文(简体) ). |
src/services/nws/ | NWS API客户端和响应类型. |
src/config/ | 环境变量解析与验证与Zod. |
tests/ | 单位和综合测试镜像 src/。 。 。 . |
发展指南
见 CLAUDE.md 发展准则和建筑规则。 简本:
- 搬运工投掷,框架渔获量——否
try/catch在工具逻辑中 - 使用
ctx.log用于特定域的伐木,ctx.state用于存储 - 在枪管出口和出口中增加新的工具/资源
createApp()数组在src/index.ts - 环绕 NSS API 调用: 验证原始 JSON → 规范域类型 → 返回输出计划; 永远不编织缺失的字段
捐款
问题值得欢迎。 提交前运行检查 :
bun run devcheck
bun run test
许可证
阿帕奇-2.0 — 见 自由主义 详细情况.