cyanheads avatar

Aviation Weather Mcp Server

cyanheads/aviation-weather-mcp-server

Taps the public NWS Aviation Weather Center API to pull METARs, TAFs, PIREPs, and SIGMETs/AIRMETs without requiring any API keys. Five tools cover station lookup by ICAO or bounding box, current observations with decoded flight categories, terminal forecasts with change groups, pilot reports filtered by altitude or radius, and active advisories with hazard types. Includes a preflight brief prompt that chains the calls in the right sequence. Built on the author's mcp-ts-core framework, so you get structured errors and dual transport support (stdio or streamable HTTP). The hosted instance at aviation-weather.caseyjhand.com means you can skip local setup entirely. Surfaces both raw coded strings and decoded fields, which is helpful when you need the agent to reason about weather without losing the original METAR text.

GitHub stars
3
tools
5
transport
STDIO, HTTP
env vars
8
last updated
Nov 1, 2026

Install

From registry metadata
$ npx add-mcp https://aviation-weather.caseyjhand.com/mcp --name aviation-weather

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http aviation-weather https://aviation-weather.caseyjhand.com/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 5 tools

Verified live against the running server on Nov 6, 2026.

aviation_find_stationsResolve an airport or weather reporting station by its identifier, or discover stations within a bounding box or US state. Returns all identifier variants (ICAO/IATA/FAA), coordinates, elevation, and available data types (METAR, TAF, SYNOP, etc.). A lookup matches the registry...4 params

Resolve an airport or weather reporting station by its identifier, or discover stations within a bounding box or US state. Returns all identifier variants (ICAO/IATA/FAA), coordinates, elevation, and available data types (METAR, TAF, SYNOP, etc.). A lookup matches the registry...

Parameters* required
bboxobject
Geographic bounding box for spatial queries.
limitinteger
Maximum stations to return, applied after ordering by ICAO identifier ascending with identifier-less stations last — so the same query with the same limit returns the same stations, and airports ra...
statestring
Two-letter USPS code for one of the 50 US states or DC (e.g., "WA") to list all stations in that jurisdiction. US territories are not supported — use bbox for those.
station_idsarray
One or more station identifiers (e.g., KSEA, KJFK), with 1–20 identifiers after splitting commas and trimming each token. Empty tokens are rejected. A lookup matches the registry's own identifier:...
aviation_get_metarGet current weather observations (METARs) for named airports, or survey every reporting station inside a geographic area. Returns decoded fields — wind direction/speed/gusts, visibility, ceiling with its kind (measured, or indefinite for vertical visibility into an obscuration...5 params

Get current weather observations (METARs) for named airports, or survey every reporting station inside a geographic area. Returns decoded fields — wind direction/speed/gusts, visibility, ceiling with its kind (measured, or indefinite for vertical visibility into an obscuration...

Parameters* required
bboxobject
Geographic bounding box for an area observation survey.
flight_categoryarray
Return only the stations whose flight category is one of these (e.g., ["IFR", "LIFR"] to find where conditions are poor). Applied in the tool after the draw is reduced to the latest observation per...
hoursinteger
Lookback window in hours (1–12), not a row limit. With station_ids every observation inside the window is returned, so a station reporting more often than hourly yields more than one row per hour:...default: 1
limitinteger
Maximum stations to return, applied after the draw is reduced to the latest observation per station, after any flight_category filter, and ordered by station ID ascending — so the same query with t...
station_idsarray
ICAO station IDs to query. 1–10 stations per call, and every observation inside the hours window is returned for each. Supplying it alongside bbox is rejected — use bbox to ask about an area rather...
aviation_get_tafGet the Terminal Aerodrome Forecast (TAF) for one or more airports. Returns each forecast period with valid times, surface wind, low-level wind shear, visibility, decoded weather conditions, cloud layers, and the vertical visibility into a forecast obscuration, plus the raw TA...1 params

Get the Terminal Aerodrome Forecast (TAF) for one or more airports. Returns each forecast period with valid times, surface wind, low-level wind shear, visibility, decoded weather conditions, cloud layers, and the vertical visibility into a forecast obscuration, plus the raw TA...

Parameters* required
station_ids*array
ICAO station IDs to query. 1–4 stations per call.
aviation_get_pirepsGet recent Pilot Reports (PIREPs) near an airport or within a bounding box. Returns decoded turbulence, icing, and cloud reports with altitude, aircraft type, intensity, outside air temperature, wind aloft, flight weather, braking action, and the raw PIREP string. Requires eit...8 params

Get recent Pilot Reports (PIREPs) near an airport or within a bounding box. Returns decoded turbulence, icing, and cloud reports with altitude, aircraft type, intensity, outside air temperature, wind aloft, flight weather, braking action, and the raw PIREP string. Requires eit...

Parameters* required
altitude_max_ftinteger
Filter by maximum altitude in feet MSL (e.g., 35000 for FL350), from 0 to 60000 ft — AWC searches no band below sea level, and none centred above FL600, which is already above the altitude any pilo...
altitude_min_ftinteger
Filter by minimum altitude in feet MSL (e.g., 18000 for FL180), from 0 to 60000 ft — AWC searches no band below sea level, and none centred above FL600, which is already above the altitude any pilo...
bboxobject
Geographic bounding box for area PIREP search.
distance_nminteger
Search radius in nautical miles around station_id, defaulting to 100 when omitted. Belongs to the station_id search only — supplying it alongside bbox is rejected. When station coordinates are unav...
hoursinteger
How many hours of history to return. Default 3.default: 3
limitinteger
Maximum reports to return, applied last — after every filter and after ordering by observation time descending, so a limited result is the most recent reports rather than an arbitrary slice. It bou...
min_intensitystring
Return only reports carrying at least one turbulence or icing layer at this intensity or above. The filter selects reports, not layers — a matching report still carries its lighter layers, so a res...one of lgt · mod · sev
station_idstring
ICAO station ID as center point for radial search — 4 ASCII letters or digits, case-insensitive and normalized to uppercase (e.g., KSEA, K0S9). Use with distance_nm.
aviation_get_advisoriesGet active domestic SIGMETs, international SIGMETs (including oceanic products), and Center Weather Advisories from the NWS Aviation Weather Center. Filter by advisory_type, hazard, optional altitude_ft, or ordered bbox. Returns source coverage, decoded hazards/altitudes/movem...5 params

Get active domestic SIGMETs, international SIGMETs (including oceanic products), and Center Weather Advisories from the NWS Aviation Weather Center. Filter by advisory_type, hazard, optional altitude_ft, or ordered bbox. Returns source coverage, decoded hazards/altitudes/movem...

Parameters* required
advisory_typestring
Product selection: sigmet is domestic SIGMETs, isigmet is international SIGMETs, cwa is Center Weather Advisories, and all reads all three independently. airmet is rejected with guidance to separat...one of sigmet · isigmet · cwa · airmet · alldefault: all
altitude_ftnumber
Optional finite altitude in feet MSL, rounded to the nearest 100 ft (half steps round upward). SIGMET sources use documented level filtering within ±3000 ft; CWA uses inclusive overlap with that ba...
bboxobject
Ordered geographic bounding box. Matches each geometry part by its bounding envelope, not exact polygon intersection; date-line-crossing source geometry is unwrapped.
hazardstring
Upstream hazard filter. TS and CONVECTIVE are thunderstorm aliases across every product, retaining source-native output hazards. Domestic also supports TURBULENCE, ICING, IFR. International also su...one of CONVECTIVE · TURBULENCE · ICING · IFR · TS · MTW
limitinteger
Optional maximum matches to return, without a default or automatic cap. Sorts by source, issuer, series and validity; omit or raise it to retrieve withheld matches.

Sponsors

Configuration

MCP_LOG_LEVELdefault: info

Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').

AWC_BASE_URLdefault: https://aviationweather.gov/api/data

Base URL for the AWC Data API. Useful for testing against a mock or staging instance.

AWC_TIMEOUT_MSdefault: 10000

Per-request timeout in milliseconds (1000–60000).

MCP_TRANSPORT_TYPEdefault: http

Selects the HTTP transport.

MCP_HTTP_HOSTdefault: 127.0.0.1

The hostname for the HTTP server.

MCP_HTTP_PORTdefault: 3010

The port to run the HTTP server on.

MCP_HTTP_ENDPOINT_PATHdefault: /mcp

The endpoint path for the MCP server.

MCP_AUTH_MODEdefault: none

Authentication mode to use: 'none', 'jwt', or 'oauth'.

Readme

@cyanheads/aviation-weather-mcp-server

Fetch METARs, TAFs, PIREPs, domestic/international SIGMETs and CWAs from NWS AWC via MCP. AIRMETs not served. STDIO or Streamable HTTP.

5 Tools • 1 Resource • 1 Prompt

Details

Repository
github.com/cyanheads/aviation-weather-mcp-server
Package
@cyanheads/aviation-weather-mcp-server
Transport
STDIO, HTTP
Registry
MCP registry, active
Resources
1
Prompts
1
Tools verified
Nov 6, 2026

More from cyanheads