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 分