aviation-weather-mcp-server

v0.4.1 pre-1.0

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

aviation-weather.caseyjhand.com/mcp
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": [
        "mcp-remote",
        "https://aviation-weather.caseyjhand.com/mcp"
      ]
    }
  }
}
{
  "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: 2026-07-28" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2026-07-28","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 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.",
      "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 with its kind (measured, or indefinite for vertical visibility into an obscuration), present weather, 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, surface wind, low-level wind shear, visibility, decoded weather conditions, cloud layers, and the vertical visibility into a forecast obscuration, 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. distance_nm belongs to the station_id search only, and altitude_min_ft must not exceed altitude_max_ft. 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": {
      "description": "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.",
      "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). Reports with an unknown altitude (altitude_ft null) cannot be shown to satisfy a bound and are dropped whenever either bound is set. Optional.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "altitude_max_ft": {
      "description": "Filter by maximum altitude in feet MSL (e.g., 35000 for FL350). Reports with an unknown altitude (altitude_ft null) cannot be shown to satisfy a bound and are dropped whenever either bound is set. Optional.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "hours"
  ],
  "additionalProperties": false
}
view source ↗

aviation_get_advisories

open-world

Get active domestic SIGMETs for a region. Returns each advisory with hazard type (CONVECTIVE, TURBULENCE, ICING, IFR), severity, altitude range, valid period, polygon coordinates, and raw text. Coverage is US-centric (NWS Aviation Weather Center). This tool reads the domestic SIGMET feed only and cannot return an AIRMET; requests for one are rejected rather than answered with SIGMETs. 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\" and \"all\" both return the active domestic SIGMET set, which is everything this tool serves. \"airmet\" is rejected with guidance: the upstream feed cannot return an AIRMET, so answering it would mean presenting SIGMETs as AIRMET matches.",
      "type": "string",
      "enum": [
        "sigmet",
        "airmet",
        "all"
      ]
    },
    "hazard": {
      "description": "Optional hazard filter. CONVECTIVE, TURBULENCE, ICING, and IFR match the four hazard classes the domestic SIGMET feed carries. MTN OBSCN, SURFACE WIND, and LLWS are AIRMET-family phenomena with no upstream counterpart here and are rejected rather than returning an empty result.",
      "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").