@cyanheads/aviation-weather-mcp-server

v0.1.3 pre-1.0

Fetch METARs, TAFs, PIREPs, and SIGMETs/AIRMETs from the NWS Aviation Weather Center via MCP. STDIO or Streamable HTTP.

@cyanheads/aviation-weather-mcp-server
claude mcp add --transport http aviation-weather-mcp-server https://aviation-weather.caseyjhand.com/mcp
codex mcp add aviation-weather-mcp-server --url https://aviation-weather.caseyjhand.com/mcp
{
  "mcpServers": {
    "aviation-weather-mcp-server": {
      "url": "https://aviation-weather.caseyjhand.com/mcp"
    }
  }
}
gemini mcp add --transport http aviation-weather-mcp-server https://aviation-weather.caseyjhand.com/mcp
{
  "mcpServers": {
    "aviation-weather-mcp-server": {
      "command": "bunx",
      "args": [
        "@cyanheads/aviation-weather-mcp-server@latest"
      ]
    }
  }
}
{
  "mcpServers": {
    "aviation-weather-mcp-server": {
      "type": "http",
      "url": "https://aviation-weather.caseyjhand.com/mcp"
    }
  }
}
curl -X POST https://aviation-weather.caseyjhand.com/mcp \
  -H "Content-Type: application/json" \
  -H "MCP-Protocol-Version: 2025-11-25" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"1.0.0"}}}'

Tools

5

aviation_find_stations

Resolve an airport or weather reporting station by ICAO 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.). Station IDs must be 4-letter ICAO format (e.g., KSEA, KJFK). At least one of station_ids, bbox, or state is required.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "aviation_find_stations",
    "arguments": {}
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "station_ids": {
      "description": "One or more 4-letter ICAO station IDs (e.g., KSEA, KJFK). The upstream API only accepts ICAO format — 3-letter IATA codes (e.g., SEA) will return no results. Use bbox or state to discover ICAO IDs by location.",
      "minItems": 1,
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "string",
        "description": "A 4-letter ICAO station identifier (e.g., KSEA)."
      }
    },
    "bbox": {
      "type": "object",
      "properties": {
        "minLat": {
          "type": "number",
          "minimum": -90,
          "maximum": 90,
          "description": "Southern boundary latitude in decimal degrees."
        },
        "minLon": {
          "type": "number",
          "minimum": -180,
          "maximum": 180,
          "description": "Western boundary longitude in decimal degrees."
        },
        "maxLat": {
          "type": "number",
          "minimum": -90,
          "maximum": 90,
          "description": "Northern boundary latitude in decimal degrees."
        },
        "maxLon": {
          "type": "number",
          "minimum": -180,
          "maximum": 180,
          "description": "Eastern boundary longitude in decimal degrees."
        }
      },
      "required": [
        "minLat",
        "minLon",
        "maxLat",
        "maxLon"
      ],
      "additionalProperties": false,
      "description": "Geographic bounding box for spatial queries."
    },
    "state": {
      "description": "Two-letter US state abbreviation (e.g., \"WA\") to list all stations in that state.",
      "type": "string",
      "minLength": 2,
      "maxLength": 2
    }
  },
  "additionalProperties": false
}
view source ↗

aviation_get_metar

open-world

Get current weather observations (METARs) for one or more airports. Returns decoded fields — wind direction/speed/gusts, visibility, ceiling, temperature, dewpoint, altimeter, cloud layers — plus the computed flight category (VFR/MVFR/IFR/LIFR) and the raw METAR string. Accepts 1–10 ICAO station IDs (e.g., KSEA, KJFK). Use aviation_find_stations to resolve or verify an ICAO ID, or to discover nearby stations.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "aviation_get_metar",
    "arguments": {
      "station_ids": "<station_ids>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "station_ids": {
      "minItems": 1,
      "maxItems": 10,
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[A-Z]{4}$",
        "description": "4-letter ICAO station ID (e.g., KSEA, KJFK)."
      },
      "description": "ICAO station IDs to query. 1–10 stations per call."
    },
    "hours": {
      "default": 1,
      "description": "Hours of observation history to return (1–12). Default 1 returns only the most recent observation per station.",
      "type": "integer",
      "minimum": 1,
      "maximum": 12
    }
  },
  "required": [
    "station_ids",
    "hours"
  ],
  "additionalProperties": false
}
view source ↗

aviation_get_taf

open-world

Get the Terminal Aerodrome Forecast (TAF) for one or more airports. Returns each forecast period with valid times, wind, visibility, decoded weather conditions, and cloud layers, plus the raw TAF string. TAFs cover the next 24–30 hours and are issued only for airports with scheduled commercial service; check data_types from aviation_find_stations to confirm TAF availability. Accepts 1–4 ICAO station IDs (e.g., KSEA, KJFK).

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "aviation_get_taf",
    "arguments": {
      "station_ids": "<station_ids>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "station_ids": {
      "minItems": 1,
      "maxItems": 4,
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[A-Z]{4}$",
        "description": "4-letter ICAO station ID (e.g., KSEA, KJFK)."
      },
      "description": "ICAO station IDs to query. 1–4 stations per call."
    }
  },
  "required": [
    "station_ids"
  ],
  "additionalProperties": false
}
view source ↗

aviation_get_pireps

open-world

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, and the raw PIREP string. Requires either station_id (ICAO center point for radial search, e.g., KSEA) or bbox (area search) — not both. Coverage is US-centric; PIREPs are sparse and absence of reports does not imply smooth conditions.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "aviation_get_pireps",
    "arguments": {}
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "station_id": {
      "description": "ICAO station ID as center point for radial search (e.g., KSEA). Use with distance_nm.",
      "type": "string",
      "pattern": "^[A-Z]{4}$"
    },
    "bbox": {
      "type": "object",
      "properties": {
        "minLat": {
          "type": "number",
          "minimum": -90,
          "maximum": 90,
          "description": "Southern boundary latitude in decimal degrees."
        },
        "minLon": {
          "type": "number",
          "minimum": -180,
          "maximum": 180,
          "description": "Western boundary longitude in decimal degrees."
        },
        "maxLat": {
          "type": "number",
          "minimum": -90,
          "maximum": 90,
          "description": "Northern boundary latitude in decimal degrees."
        },
        "maxLon": {
          "type": "number",
          "minimum": -180,
          "maximum": 180,
          "description": "Eastern boundary longitude in decimal degrees."
        }
      },
      "required": [
        "minLat",
        "minLon",
        "maxLat",
        "maxLon"
      ],
      "additionalProperties": false,
      "description": "Geographic bounding box for area PIREP search."
    },
    "distance_nm": {
      "default": 100,
      "description": "Search radius in nautical miles around station_id. Only used when station_id is provided. Default 100.",
      "type": "integer",
      "minimum": 10,
      "maximum": 500
    },
    "hours": {
      "default": 3,
      "description": "How many hours of history to return. Default 3.",
      "type": "integer",
      "minimum": 1,
      "maximum": 12
    },
    "altitude_min_ft": {
      "description": "Filter by minimum altitude in feet MSL (e.g., 18000 for FL180). Optional.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "altitude_max_ft": {
      "description": "Filter by maximum altitude in feet MSL (e.g., 35000 for FL350). Optional.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "distance_nm",
    "hours"
  ],
  "additionalProperties": false
}
view source ↗

aviation_get_advisories

open-world

Get active SIGMETs and AIRMETs for a region. Returns each advisory with hazard type (CONVECTIVE, TURBULENCE, ICING, IFR, MTN OBSCN, etc.), severity, altitude range, valid period, polygon coordinates, and raw text. Coverage is US-centric (NWS Aviation Weather Center). During fair-weather periods no advisories may be active — an empty result is normal, not an error. Filter by advisory_type, hazard, or bbox.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "aviation_get_advisories",
    "arguments": {}
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "advisory_type": {
      "default": "all",
      "description": "Filter by advisory type. \"sigmet\" includes convective SIGMETs. \"airmet\" includes AIRMET Sierra (IFR/mountain obscuration), Tango (turbulence), and Zulu (icing). \"all\" returns both.",
      "type": "string",
      "enum": [
        "sigmet",
        "airmet",
        "all"
      ]
    },
    "hazard": {
      "description": "Optional hazard filter. CONVECTIVE = convective SIGMETs; TURBULENCE = AIRMET Tango; ICING = AIRMET Zulu; IFR = AIRMET Sierra (IFR conditions); MTN OBSCN = AIRMET Sierra (mountain obscuration); SURFACE WIND = sustained strong surface winds (typically >30 kt); LLWS = low-level wind shear below 2,000 ft AGL.",
      "type": "string",
      "enum": [
        "CONVECTIVE",
        "TURBULENCE",
        "ICING",
        "IFR",
        "MTN OBSCN",
        "SURFACE WIND",
        "LLWS"
      ]
    },
    "bbox": {
      "type": "object",
      "properties": {
        "minLat": {
          "type": "number",
          "minimum": -90,
          "maximum": 90,
          "description": "Southern boundary latitude in decimal degrees."
        },
        "minLon": {
          "type": "number",
          "minimum": -180,
          "maximum": 180,
          "description": "Western boundary longitude in decimal degrees."
        },
        "maxLat": {
          "type": "number",
          "minimum": -90,
          "maximum": 90,
          "description": "Northern boundary latitude in decimal degrees."
        },
        "maxLon": {
          "type": "number",
          "minimum": -180,
          "maximum": 180,
          "description": "Eastern boundary longitude in decimal degrees."
        }
      },
      "required": [
        "minLat",
        "minLon",
        "maxLat",
        "maxLon"
      ],
      "additionalProperties": false,
      "description": "Geographic bounding box to filter advisories by polygon overlap."
    }
  },
  "required": [
    "advisory_type"
  ],
  "additionalProperties": false
}
view source ↗

Prompts

1

Build a complete preflight weather briefing for a flight. Calls aviation_get_metar, aviation_get_taf, aviation_get_pireps, and aviation_get_advisories in sequence and synthesizes a go/no-go picture with flight categories and active hazards. Provide departure and destination ICAO IDs (e.g., KSEA, KJFK); alternates are optional.

  • departure_icaorequired — Departure airport ICAO identifier (e.g., KSEA).
  • destination_icaorequired — Destination airport ICAO identifier (e.g., KJFK).
  • alternates — Optional comma-separated alternate airport ICAO IDs (e.g., "KBFI,KBOS").