Smarter Weather

io.github.smarterweather由 GitHub 账号 smarterweather 发布v0.1.1更新于 Oct 24, 2026

更智能的天气MCP:预报、警报、展望、观测、AQI、网格和地图影像。

AI 翻译由 AI 模型根据下方的原文描述翻译,可能有误。

原文描述

Smarter Weather MCP: forecasts, alerts, outlooks, observations, AQI, grids, and map imagery.

已验证Streamable HTTP可网页运行位置与生活

概览

Smarter Weather 的托管 MCP 服务(mcp.smarterweather.com);无需登录;Streamable HTTP;13 个工具。

暂无 AI 概览:以下信息来自注册中心条目和服务本身。

端点
mcp.smarterweather.com
最近检查

安装

在 SourceWeft 中

  1. 打开 控制台中的 Smarter Weather,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.smarterweather%2Fweather/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "smarter-weather": {
      "type": "http",
      "url": "https://mcp.smarterweather.com/"
    }
  }
}

README

@smarterweather/mcp-weather

A stdio-to-Streamable-HTTP bridge for the Smarter Weather hosted MCP server at https://mcp.smarterweather.com. It lets local-only MCP clients (Claude Desktop, Claude Code, Cursor, MCP Inspector, etc.) reach sw-mcp over the network with your API key.

Requires Node.js 22 or later.

The package is a thin wrapper around mcp-remote: no weather logic ships here, and the protocol implementation is not forked. All tools, schemas, rate limiting and metering live server-side in sw-mcp.

Get an API key

Run one of these in your project directory:

bash
# A human is present: device sign-in in the browser (free account, no card)npx -y @smarterweather/mcp-onboarding@latest login
# No human present: mint a trial key you can claim into a free account laternpx -y @smarterweather/mcp-onboarding@latest trial

Both write SMARTERWEATHER_API_KEY to ./.env (mode 0600, gitignored) and print only a key prefix, never the key.

The bridge resolves the key from:

  1. SMARTERWEATHER_API_KEY in the process environment
  2. the file named by SMARTERWEATHER_ENV_FILE
  3. .env in the working directory (skipped when the working directory is / or $HOME)

Unexpanded ${…} placeholders count as unset. The bridge passes the key to mcp-remote as Authorization:${SMARTERWEATHER_AUTH_HEADER}, with the bearer only in the child process environment, never on argv.

Without a key the bridge still connects, and discovery tools such as find_places and search_data stay free. Other tool calls return x402 payment requirements (USDC on Base) with next_steps that point back to login and trial. OAuth sign-in through the bridge is not available yet; use an API key.

Install

bash
npx -y @smarterweather/mcp-weather --version

Claude Desktop

Add to claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json):

json
{  "mcpServers": {    "smarterweather": {      "command": "npx",      "args": ["-y", "@smarterweather/mcp-weather"],      "env": {        "SMARTERWEATHER_ENV_FILE": "/absolute/path/to/your/project/.env"      }    }  }}

Claude Desktop does not interpolate env placeholders, so point the bridge at the .env that login / trial wrote, by absolute path. Never paste the key into this file. The bridge sends Authorization: Bearer <key> on every proxied request.

Cursor

Use envFile in the project .cursor/mcp.json (envFile requires "type": "stdio"):

json
{  "mcpServers": {    "smarterweather": {      "type": "stdio",      "command": "npx",      "args": ["-y", "@smarterweather/mcp-weather"],      "envFile": "${workspaceFolder}/.env"    }  }}

Or ${env:NAME} from the process environment:

json
{  "mcpServers": {    "smarterweather": {      "type": "stdio",      "command": "npx",      "args": ["-y", "@smarterweather/mcp-weather"],      "env": {        "SMARTERWEATHER_API_KEY": "${env:SMARTERWEATHER_API_KEY}"      }    }  }}

Environment variables

VariablePurposeDefault
SMARTERWEATHER_API_KEYAPI key. Takes precedence when set; an unexpanded ${…} falls through.unset (then SMARTERWEATHER_ENV_FILE, then .env)
SMARTERWEATHER_ENV_FILEAbsolute .env path, read when the process env key is unset.unset → cwd/.env (not / or $HOME)
SMARTERWEATHER_MCP_URLOverride the target MCP endpoint. A positional URL argument wins over it.https://mcp.smarterweather.com

Any mcp-remote flag passes through unchanged. Examples:

  • --debug: verbose logs at ~/.mcp-auth/{server_hash}_debug.log.
  • --transport http-only: force Streamable HTTP (skip the SSE fallback).
  • --header "X-Custom:value": add a header. Use the no-space form for cross-platform argument escaping.
jsonc
"args": [  "-y", "@smarterweather/mcp-weather",  "--debug",  "--transport", "http-only"]

Troubleshooting

  • Tool calls return "Payment required": the bridge found no key. Its stderr names every place it checked. Run login or trial in the project directory, or set SMARTERWEATHER_ENV_FILE to the .env path, then restart the MCP client.
  • "Incompatible auth server: does not support dynamic client registration": the server rejected the key (unknown, revoked or expired), and the bridge has no sign-in fallback. Mint a new key with login or trial and restart the client. The bridge passes the key verbatim.
  • "Connection error: fetch failed": check that the endpoint is reachable from your machine. curl -i https://mcp.smarterweather.com should return HTTP 405 with Method not allowed. Use POST. (the endpoint accepts POST only).
  • Cursor doesn't see the server: make sure .cursor/mcp.json is valid JSON, then restart Cursor. The MCP panel logs the spawned process's stderr.

How it works

The bin is a small Node script. It resolves the URL (positional arg → SMARTERWEATHER_MCP_URL → default) and the API key (see above), sets SMARTERWEATHER_AUTH_HEADER in the child environment, appends --header "Authorization:${SMARTERWEATHER_AUTH_HEADER}" when a key was found, then spawn()s mcp-remote's dist/proxy.js. mcp-remote reads JSON-RPC over stdio and proxies each message to the hosted Streamable HTTP endpoint. Signals (SIGINT/SIGTERM/SIGHUP) are forwarded and exit codes propagate. The wrapper does not transform or inspect MCP traffic.

License

MIT

来源:packages/mcp-weather/README.md,提交 8b8d503

工具

13

find_places

Find places

Find places: a name, ZIP, venue or address to ranked candidates with lat/lon, or coordinates to the place and timezone. Pass `query` (fuzzy=true for partial input) or `lat`+`lon`; rows carry `type` place|zip|address|poi, `matched_via: "autosuggest"` marks fallback rows and `partial` a timed-out section. Weather tools take `location`; use this to disambiguate or name a point. Example: {"lat": 39.74, "lon": -104.99} -> Denver, Colorado, America/Denver.

输入参数latlonfuzzylimitquerynear_latnear_lon

get_forecast

Get forecast

Forecast for a US place: current conditions, daily forecast with sunrise and sunset, active alerts and outlooks in one call, and hour by hour with include=hourly. Blended across NBM, HRRR, GFS, RTMA and SPC and unit-converted server-side; times are UTC ISO 8601, quote daily[].astro.local as local, and if forecast.location.timezone_resolved is false state times as UTC. For hours set `hours` (next N, default 48) or `start`+`end` for one stretch hour by hour, and check hourly_coverage (first_time, last_time, sample_interval_hours, truncated) before answering about a specific hour; past last_time say the forecast does not reach that far. Example: {"location": "Portland, OR", "include": "hourly", "hours": 24}.

输入参数endlatlondaysviewhoursstartunitsincludelocation

get_current_conditions

Get current conditions

Current weather right now at a location from two independent sources in one call: the RTMA gridded analysis (exact-point values, updated sub-hourly) and the nearest METAR station observation (ground truth with raw METAR, flight category). Use the analysis for point-accurate values and the station for verification. Analysis fields: temperature_2m, dew_point_2m, relative_humidity_2m (derived here from temperature and dew point; listed in analysis.derived), wind_speed_10m, wind_direction_10m, wind_gusts_10m, surface_pressure (station pressure at ground level, not sea-level pressure), visibility, cloud_cover, cloud_ceiling, in units (labels in analysis.unit_labels). nearest_station is the station's own report, unconverted. For a forecast, use get_forecast. Example: {"location": "Pella, IA"}.

输入参数latlonunitslocation

get_alerts

Get NWS alerts

NWS watches, warnings, advisories. Point (city/ZIP/lat+lon): containing polygons. BBox or US state/DC/CONUS (codes, full names, US/national): intersecting polygons. A city miss is not a statewide all-clear — query the state or a bbox; never say regional inventory is impossible. NY/WA and "New York State"/"Washington State" are states; "New York"/"Washington" stay cities. Omit at for now; at (ISO-8601 UTC) is the snapshot then. Empty = all-clear or purged (~24h). alert_id = detail+geometry, ignores at. Ex: {"location":"WI","events":["Tornado Warning"]}.

输入参数atlatlonbboxeventsalert_idlocation

get_observed_precipitation

Observed precipitation

How much rain fell: observed precipitation totals at a location. Use for "did it rain", "how much rain fell", "rain in the last 24 hours / since yesterday". Source: MRMS MultiSensor QPE Pass2 (radar bias-corrected to rain gauges) over 1/3/6/24/48/72 h windows (CONUS; 1 h only in Alaska and Hawaii). Values have about 2 mm (0.08 in) resolution, so 0 means under about 1 mm; data runs about an hour behind real time. Pass `at` (within 33 h) for totals ending at a past time (newest frame up to 3 h before it). With include_nowcast (default) it also returns a next-hour radar nowcast (CONUS): peak intensity (light/moderate/heavy), type and start time, not an amount. Forecast totals past the next hour: get_period_totals (planning); station reports: get_observations (observed).

输入参数atlatlonunitswindowslocationinclude_nowcast

get_forecast_distribution

Get forecast distribution

NBM probabilistic guidance for one weather aspect: percentiles (p10-p90), exceedance probabilities and ensemble spread. Use this for any question about odds, ranges, potential or confidence ("how much could we get", "range of possible highs", "how sure is this") -- a deterministic forecast value cannot answer one. Reading the percentiles: p50 is the most likely outcome, p90 is the reasonable worst case when the risk is the high end (snow totals, wind, rainfall), and p10 when the risk is the low end (cold, visibility, ceiling). A single percentile is not the forecast -- report the likely value with the tail that matters, and label which is which. Aspects: precip (PoP, QPF + percentiles), snow (accumulation percentiles, >1/2/4in probabilities, snow level, snow-type probability), ice (ice accretion, freezing-rain / ice-pellet probabilities), temperature (`daily` high/low p10/p50/p90: the NBM value -/+ 1.28 stddev; hourly temp + stddev), wind (speed/gust percentiles), severe (thunderstorm probability plus NBM CWASP, a severe-environment index, both in percent: severe_weather_prob_p50 is the median CWASP value and severe_weather_prob_above_75 the probability CWASP exceeds 75; NBM has no tornado, hail or damaging-wind odds; SPC's: get_outlooks (guidance) hazard=severe), aviation (LIFR/IFR/MVFR visibility + ceiling odds), confidence (ensemble stddev; low = settled, high = details still in play). Labels in unit_labels. Example: {"location": "Denver, CO", "aspect": "snow", "hours": 72}.

输入参数latlonhoursunitsaspect必填location

search_data

Search data

Search the data catalog: which dataset's values answer a weather question, or what data exists at a point. With `query` it ranks grids, radar, satellite, outlooks and observations and returns hits with variable, units, cadence, why and the exact `call` to run next (ready for "now"; `time_start`/`time_end` or `at` for a past time); without it, it lists datasets at the place with freshness, or every public one. A place (`location` or lat/lon) or `domain` keeps datasets covering it; variables come from describe_data. Example: {"location": "Anchorage, AK"}.

输入参数latlonkindlimitquerydomainfamilylocation

find_tools

Find tools

Lists the weather tools this connection does not show (best times, comparisons, forecast totals, air quality; station observations, soundings, hurricane recon; lightning, storm cells, storm reports; outlooks, forecaster text, hurricanes; climate records and normals; forecast accuracy; maps and charts; people at risk; crop heat units), with when to use each and its required arguments. Run one with call_tool, in this session, no reconnect. With `tools`, returns their full input schemas. Free; no network call.

输入参数tools

call_tool

Call tool

Runs a tool find_tools lists, by name: same price, limits and result as calling it directly. Tools already in your list are called directly, not through this. `arguments` follows that tool's input schema.

输入参数tool必填arguments

describe_data

Describe data

A dataset's variables (standard names, units, display units, categories, bands), horizon, step, cadence, freshness, cost class and an example_query to read its values. Free; call it after search_data, before query_dataset. Example: {"dataset_id": "nbm_conus"}.

输入参数dataset_id必填

get_status

Get status

Data freshness of the weather platform (no inputs needed; refreshed about every 5 minutes): overall state, per-source states (ok / degraded / outage / no_signal), open incidents with their cause (provider outage vs internal processing delay) and active provider advisories. Use it when asked whether data is current, when other tools return stale-looking data, or before presenting time-critical weather. If a source is degraded or in outage, say the data may be stale rather than presenting it as live. Example: {}.

输入参数include_ok

get_time_context

Get time context

Complete temporal context for a location: local time, timezone, 14-day calendar with day names and Today/Tomorrow offsets, sunrise/sunset/solar times (from the weather pipeline's astro product), and moon phase. Use whenever you need to reason about dates, times, or daylight for a location -- including "what time is sunset?", "is it dark there now?", or "what day of the week is the 4th-day forecast?". If current_time.timezone_resolved is false, zone unknown: state times as UTC, never as local. Accepts a place name directly. Example: {"location": "Seattle, WA"}.

输入参数latlonlocation

query_dataset

Query dataset

Raw time series of one dataset's variables at a point, with unit labels: any gridded product (NBM, HRRR, RRFS, GFS, RTMA, MRMS, air quality, ...). Time modes: hours (default 24), time_start+time_end (ISO 8601), or latest=true (newest value). Up to 168 frames: when truncated, send next_cursor as cursor with the same arguments. reference_time pins a model run; each series reports its run (reference_time, or reference_times when runs mix); runs older than about 48 h may be gone. For blended forecasts use get_forecast. Examples: {"location": "Denver, CO", "dataset_id": "rrfs_surface", "variables": ["temperature_2m"], "hours": 18} or {"lat": 41.4, "lon": -92.9, "dataset_id": "rtma_conus", "variables": ["temperature_2m"], "latest": true}.

输入参数latlonhoursunitscursorlatestlocationtime_endvariables必填dataset_idtime_startreference_time

版本历史

2
  1. v0.1.1最新Oct 20, 2026
  2. v0.0.1Sep 16, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分