Skip to main content
Glama

Get Pilot Reports (PIREPs)

aviation_get_pireps
Read-onlyIdempotent

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, 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. min_intensity restricts the result to reports carrying a turbulence or icing layer at that intensity or above. limit bounds how many reports come back without changing what is searched, keeping the most recent. Coverage is US-centric; PIREPs are sparse and absence of reports does not imply smooth conditions.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
bboxNoGeographic bounding box for area PIREP search.
hoursNoHow many hours of history to return. Default 3.
limitNoMaximum 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 bounds the response without changing what is searched, which every other parameter does. Distinct from the 400-row upstream cap: a limited result examined every report it counted and withheld some, while a capped one never drew the rest. Selection is by recency alone, so pair it with min_intensity to bound a result by severity. Omit to return every match. Optional.
station_idNoICAO station ID as center point for radial search — 4 uppercase letters or digits (e.g., KSEA, K0S9). Use with distance_nm.
distance_nmNoSearch 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.
min_intensityNoReturn 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 result may include NEG, TRC, or LGT entries alongside the layer that matched. Optional.
altitude_max_ftNoFilter 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 pilot report carries. Reports with an unknown altitude (altitude_ft null) cannot be shown to satisfy a bound and are dropped whenever either bound is set. Optional.
altitude_min_ftNoFilter 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 pilot report carries. Reports with an unknown altitude (altitude_ft null) cannot be shown to satisfy a bound and are dropped whenever either bound is set. Optional.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
capNoThe upstream row maximum that was applied to the page. Present only on a truncated result.
errorNoPresent when the call failed. Absent on success.
shownNoReports in this result, counted after any altitude filter and after any limit.
noticeNoGuidance for whichever disclosures fired: the levers that narrow the query before the cap applies, what a requested limit withheld, and — on a result of more than 50 reports from a call that set no limit — that limit bounds the response without changing what is searched, keeping the most recent. The cap and either limit statement can fire on one result, and the text keeps them apart.
pirepsNoPilot reports matching the search criteria, ordered by observation time descending.
limitedNoTrue when the requested limit withheld reports that matched — the caller asked to see fewer of them. False affirms the limit did not bite, so every matching report is here. Present only when the call supplied a limit. It never states anything about the upstream cap: a limited result examined every report it counted, while a truncated one never drew the rest.
matchedNoReports that matched this query before the limit selected from them. Present only on a limited result. Where the result is also truncated this counts the capped page and not the search area — the reports the cap dropped were never examined, so no count can include them.
truncatedNoTrue when the upstream page hit the AWC row cap, so reports inside the search area and time window are missing from this result. False affirms the whole window was searched, which a count alone cannot establish.
upstreamRowsNoReports AWC returned before the altitude filter ran. Present only on a truncated result the filter then narrowed, where the remaining count sits below the cap and so cannot reveal the truncation on its own.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changed
    • changedOutput schema / properties / notice / description
      Previous value: -"Guidance for whichever disclosures fired: the levers that narrow the query before the cap applies, and what a requested limit withheld. Both can fire on one result, and the text keeps them apart."New value: +"Guidance for whichever disclosures fired: the levers that narrow the query before the cap applies, what a requested limit withheld, and — on a result of more than 50 reports from a call that set no limit — that limit bounds the response without changing what is searched, keeping the most recent. The cap and either limit statement can fire on one result, and the text keeps them apart."
    • changedOutput schema / properties / pireps / items / properties / clouds / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "additionalProperties": false,
      -      "description": "A cloud layer, whose base and top are each present only if reported.",
      -      "properties": {
      -        "base_ft": {
      -          "description": "Cloud base altitude in feet MSL, or null if the pilot reported no base.",
      -          "type": [
      -            "number",
      -            "null"
      -          ]
      -        },
      -        "cover": {
      -          "description": "Cloud cover code: FEW, SCT, BKN, OVC, SKC, or CLR. The field also carries the flight-condition markers VMC and IMC, which describe the flight environment rather than a cloud layer and arrive with no base or top.",
      -          "type": "string"
      -        },
      -        "top_ft": {
      -          "description": "Cloud top altitude in feet MSL, or null if the pilot reported no top.",
      -          "type": [
      -            "number",
      -            "null"
      -          ]
      -        }
      -      },
      -      "required": [
      -        "cover",
      -        "base_ft",
      -        "top_ft"
      -      ],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "additionalProperties": false,
      +      "description": "A cloud layer, whose base and top are each present only if reported.",
      +      "properties": {
      +        "base_ft": {
      +          "description": "Cloud base altitude in feet MSL, or null if the pilot reported no base.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "cover": {
      +          "description": "Cloud cover code: FEW, SCT, BKN, OVC, SKC, or CLR. SKC and CLR state a clear sky and never carry a base or top. The field also carries the flight-condition markers VMC and IMC, which describe the flight environment rather than a cloud layer and arrive with no base or top.",
      +          "type": "string"
      +        },
      +        "top_ft": {
      +          "description": "Cloud top altitude in feet MSL, or null if the pilot reported no top.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        }
      +      },
      +      "required": [
      +        "cover",
      +        "base_ft",
      +        "top_ft"
      +      ],
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / pireps / items / properties / remarks
      Removed value: -{
      -  "description": "Weather remarks or additional conditions, or null if none.",
      -  "type": [
      -    "string",
      -    "null"
      -  ]
      -}
    • addedOutput schema / properties / pireps / items / properties / temp_c
      Added value: +{
      +  "description": "Outside air temperature in degrees Celsius at the report altitude, as AWC decoded it — the /TA group on a PIREP, the MS or PS temperature group on an AIREP. 0 is a real reading; null means the report carried none or gave it as unknown (/TA UNKN).",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / pireps / items / properties / weather
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "decoded": {
      +          "description": "Plain-English reading of each group, joined with \"; \" (e.g., \"heavy rain\", \"fog; light rain\"). A group the decoder does not recognize is carried through as its own raw token, so compare against raw when a reading still looks coded.",
      +          "type": "string"
      +        },
      +        "raw": {
      +          "description": "Weather groups exactly as encoded, space-delimited (e.g., \"+RA\", \"FG -RA\").",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "raw",
      +        "decoded"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Flight weather AWC decoded from the /WX group, or null when it decoded no weather phenomena from it. A flight visibility AWC can read (FV07SM, 10SM) lands in visibility_sm instead. /WX text AWC cannot decode is dropped or trimmed — CEILING 017 returns null and RA FL300 AOB returns RA alone — so raw_pirep is the only source for it. This is not the /RM remarks text, which AWC does not decode either — raw_pirep carries it."
      +}
    • addedOutput schema / properties / pireps / items / properties / wind
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "direction_deg": {
      +          "description": "Wind direction aloft in degrees, as reported and not converted. A PIREP /WV group is referenced to magnetic north (AIM TBL 7-1-18), unlike the true-north METAR and TAF winds, so apply the local magnetic variation before combining a PIREP's direction with a true track; an AIREP's reference is not stated here.",
      +          "type": "number"
      +        },
      +        "speed_kt": {
      +          "description": "Wind speed aloft in knots. 0 is a reported calm.",
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "direction_deg",
      +        "speed_kt"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Wind aloft at the report altitude, as AWC decoded it — the /WV group on a PIREP, the direction/speed group (e.g., 291/035KT) on an AIREP. Null unless AWC decoded both direction and speed. AWC leaves some forms undecoded — a gust suffix (/WV 03020G30), a single-digit AIREP speed (252/9 KT), a variation (/WV +/- 5KT) — and those return null here, with raw_pirep as the only source."
      +}
    • changedOutput schema / properties / pireps / items / required
      Previous value: -[
      -  "observed_at",
      -  "lat",
      -  "lon",
      -  "altitude_ft",
      -  "aircraft_type",
      -  "pirep_type",
      -  "turbulence",
      -  "icing",
      -  "clouds",
      -  "visibility_sm",
      -  "remarks",
      -  "raw_pirep"
      -]New value: +[
      +  "observed_at",
      +  "lat",
      +  "lon",
      +  "altitude_ft",
      +  "aircraft_type",
      +  "pirep_type",
      +  "turbulence",
      +  "icing",
      +  "clouds",
      +  "visibility_sm",
      +  "temp_c",
      +  "wind",
      +  "weather",
      +  "raw_pirep"
      +]
  2. Changed10 schema fields changed
    • changedInput schema / properties / altitude_max_ft / description
      Previous value: -"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."New value: +"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 pilot report carries. Reports with an unknown altitude (altitude_ft null) cannot be shown to satisfy a bound and are dropped whenever either bound is set. Optional."
    • changedInput schema / properties / altitude_max_ft / maximum
      Previous value: -9007199254740991New value: +60000
    • changedInput schema / properties / altitude_max_ft / minimum
      Previous value: --9007199254740991New value: +0
    • changedInput schema / properties / altitude_min_ft / description
      Previous value: -"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."New value: +"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 pilot report carries. Reports with an unknown altitude (altitude_ft null) cannot be shown to satisfy a bound and are dropped whenever either bound is set. Optional."
    • changedInput schema / properties / altitude_min_ft / maximum
      Previous value: -9007199254740991New value: +60000
    • changedInput schema / properties / altitude_min_ft / minimum
      Previous value: --9007199254740991New value: +0
    • changedInput schema / properties / station_id / description
      Previous value: -"ICAO station ID as center point for radial search (e.g., KSEA). Use with distance_nm."New value: +"ICAO station ID as center point for radial search — 4 uppercase letters or digits (e.g., KSEA, K0S9). Use with distance_nm."
    • changedInput schema / properties / station_id / pattern
      Previous value: -"^[A-Z]{4}$"New value: +"^[A-Z0-9]{4}$"
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `no_pireps_found`: No pilot reports found in the search area and time window. `missing_location`: Neither station_id nor bbox was provided. `conflicting_location`: Both station_id and bbox were provided. `invalid_bbox`: The bounding box is inverted — minLat > maxLat or minLon > maxLon. `conflicting_distance`: distance_nm was provided together with bbox, where a search radius has no meaning. `invalid_altitude_range`: altitude_min_ft is greater than altitude_max_ft, so no report can match both bounds. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_pireps_found`: No pilot reports found in the search area and time window. `station_not_recognized`: AWC does not recognize station_id as a PIREP search center — a closed or retired airport, for example — and rejects the request. `missing_location`: Neither station_id nor bbox was provided. `conflicting_location`: Both station_id and bbox were provided. `invalid_bbox`: The bounding box is inverted — minLat > maxLat or minLon > maxLon. `conflicting_distance`: distance_nm was provided together with bbox, where a search radius has no meaning. `invalid_altitude_range`: altitude_min_ft is greater than altitude_max_ft, so no report can match both bounds. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "no_pireps_found",
      -  "missing_location",
      -  "conflicting_location",
      -  "invalid_bbox",
      -  "conflicting_distance",
      -  "invalid_altitude_range"
      -]New value: +[
      +  "no_pireps_found",
      +  "station_not_recognized",
      +  "missing_location",
      +  "conflicting_location",
      +  "invalid_bbox",
      +  "conflicting_distance",
      +  "invalid_altitude_range"
      +]
  3. Changed5 schema fields changed
    • addedInput schema / properties / limit
      Added value: +{
      +  "description": "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 bounds the response without changing what is searched, which every other parameter does. Distinct from the 400-row upstream cap: a limited result examined every report it counted and withheld some, while a capped one never drew the rest. Selection is by recency alone, so pair it with min_intensity to bound a result by severity. Omit to return every match. Optional.",
      +  "maximum": 400,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / limited
      Added value: +{
      +  "description": "True when the requested limit withheld reports that matched — the caller asked to see fewer of them. False affirms the limit did not bite, so every matching report is here. Present only when the call supplied a limit. It never states anything about the upstream cap: a limited result examined every report it counted, while a truncated one never drew the rest.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / matched
      Added value: +{
      +  "description": "Reports that matched this query before the limit selected from them. Present only on a limited result. Where the result is also truncated this counts the capped page and not the search area — the reports the cap dropped were never examined, so no count can include them.",
      +  "type": "number"
      +}
    • changedOutput schema / properties / notice / description
      Previous value: -"Guidance naming the levers that narrow the query before the cap applies. Present only on a truncated result."New value: +"Guidance for whichever disclosures fired: the levers that narrow the query before the cap applies, and what a requested limit withheld. Both can fire on one result, and the text keeps them apart."
    • changedOutput schema / properties / shown / description
      Previous value: -"Reports in this result, counted after any altitude filter."New value: +"Reports in this result, counted after any altitude filter and after any limit."
  4. Changed26 schema fields changed
    • addedInput schema / properties / min_intensity
      Added value: +{
      +  "description": "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 result may include NEG, TRC, or LGT entries alongside the layer that matched. Optional.",
      +  "enum": [
      +    "lgt",
      +    "mod",
      +    "sev"
      +  ],
      +  "type": "string"
      +}
    • removedOutput schema / properties / pireps / items / properties / aircraft_type / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / pireps / items / properties / aircraft_type / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / pireps / items / properties / altitude_ft / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedOutput schema / properties / pireps / items / properties / altitude_ft / description
      Previous value: -"Reported altitude in feet MSL, or null when the pilot gave no flight level (raw /FLUNKN/, /FLDURC/, or /FLDURD/). A raw /FL000/ is a reported flight level of zero and returns 0."New value: +"Reported altitude in feet MSL, or null when the raw flight-level group carries no usable altitude. That covers /FLUNKN/ and the during-climb and during-descent markers, and equally any other group AWC could not read — including one made only of digits, such as /FL2130/. A raw /FL000/ is a reported flight level of zero and returns 0."
    • addedOutput schema / properties / pireps / items / properties / altitude_ft / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / pireps / items / properties / clouds / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "additionalProperties": false,
      -      "description": "A cloud layer, whose base and top are each present only if reported.",
      -      "properties": {
      -        "base_ft": {
      -          "anyOf": [
      -            {
      -              "type": "number"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "description": "Cloud base altitude in feet MSL, or null if the pilot reported no base."
      -        },
      -        "cover": {
      -          "description": "Cloud cover code: FEW, SCT, BKN, OVC, SKC, or CLR. The field also carries the flight-condition markers VMC and IMC, which describe the flight environment rather than a cloud layer and arrive with no base or top.",
      -          "type": "string"
      -        },
      -        "top_ft": {
      -          "anyOf": [
      -            {
      -              "type": "number"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "description": "Cloud top altitude in feet MSL, or null if the pilot reported no top."
      -        }
      -      },
      -      "required": [
      -        "cover",
      -        "base_ft",
      -        "top_ft"
      -      ],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "additionalProperties": false,
      +      "description": "A cloud layer, whose base and top are each present only if reported.",
      +      "properties": {
      +        "base_ft": {
      +          "description": "Cloud base altitude in feet MSL, or null if the pilot reported no base.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "cover": {
      +          "description": "Cloud cover code: FEW, SCT, BKN, OVC, SKC, or CLR. The field also carries the flight-condition markers VMC and IMC, which describe the flight environment rather than a cloud layer and arrive with no base or top.",
      +          "type": "string"
      +        },
      +        "top_ft": {
      +          "description": "Cloud top altitude in feet MSL, or null if the pilot reported no top.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        }
      +      },
      +      "required": [
      +        "cover",
      +        "base_ft",
      +        "top_ft"
      +      ],
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / pireps / items / properties / icing / description
      Previous value: -"Icing layers reported. An explicit negative report is a layer with intensity NEG; an empty array means the PIREP carried no icing group, so the pilot said nothing either way."New value: +"Icing layers the raw report carried. An explicit negative report is a layer with intensity NEG; an empty array means the PIREP carried no icing group, so the pilot said nothing either way. Layers AWC synthesized for a report that never mentioned ice are omitted rather than published."
    • removedOutput schema / properties / pireps / items / properties / icing / items / properties / base_ft / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / pireps / items / properties / icing / items / properties / base_ft / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / pireps / items / properties / icing / items / properties / top_ft / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / pireps / items / properties / icing / items / properties / top_ft / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / pireps / items / properties / icing / items / properties / type / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / pireps / items / properties / icing / items / properties / type / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / pireps / items / properties / remarks / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / pireps / items / properties / remarks / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / pireps / items / properties / turbulence / items / properties / base_ft / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / pireps / items / properties / turbulence / items / properties / base_ft / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / pireps / items / properties / turbulence / items / properties / frequency / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / pireps / items / properties / turbulence / items / properties / frequency / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / pireps / items / properties / turbulence / items / properties / top_ft / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / pireps / items / properties / turbulence / items / properties / top_ft / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / pireps / items / properties / turbulence / items / properties / type / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / pireps / items / properties / turbulence / items / properties / type / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / pireps / items / properties / visibility_sm / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / pireps / items / properties / visibility_sm / type
      Added value: +[
      +  "number",
      +  "null"
      +]
  5. Changed6 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "pireps",
      +      "truncated",
      +      "shown"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "description": "Machine-readable failure mode. Declared by this tool: `no_pireps_found`: No pilot reports found in the search area and time window. `missing_location`: Neither station_id nor bbox was provided. `conflicting_location`: Both station_id and bbox were provided. `invalid_bbox`: The bounding box is inverted — minLat > maxLat or minLon > maxLon. `conflicting_distance`: distance_nm was provided together with bbox, where a search radius has no meaning. `invalid_altitude_range`: altitude_min_ft is greater than altitude_max_ft, so no report can match both bounds. Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "no_pireps_found",
      +            "missing_location",
      +            "conflicting_location",
      +            "invalid_bbox",
      +            "conflicting_distance",
      +            "invalid_altitude_range"
      +          ],
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "pireps",
      -  "truncated",
      -  "shown"
      -]
  6. Changed6 schema fields changed
    • addedOutput schema / properties / cap
      Added value: +{
      +  "description": "The upstream row maximum that was applied to the page. Present only on a truncated result.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "Guidance naming the levers that narrow the query before the cap applies. Present only on a truncated result.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / shown
      Added value: +{
      +  "description": "Reports in this result, counted after any altitude filter.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / truncated
      Added value: +{
      +  "description": "True when the upstream page hit the AWC row cap, so reports inside the search area and time window are missing from this result. False affirms the whole window was searched, which a count alone cannot establish.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / upstreamRows
      Added value: +{
      +  "description": "Reports AWC returned before the altitude filter ran. Present only on a truncated result the filter then narrowed, where the remaining count sits below the cap and so cannot reveal the truncation on its own.",
      +  "type": "number"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "pireps"
      -]New value: +[
      +  "pireps",
      +  "truncated",
      +  "shown"
      +]
  7. Changed9 schema fields changed
    • changedInput schema / properties / altitude_max_ft / description
      Previous value: -"Filter by maximum altitude in feet MSL (e.g., 35000 for FL350). Optional."New value: +"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."
    • changedInput schema / properties / altitude_min_ft / description
      Previous value: -"Filter by minimum altitude in feet MSL (e.g., 18000 for FL180). Optional."New value: +"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."
    • addedOutput schema / properties / pireps / items / properties / altitude_ft / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / pireps / items / properties / altitude_ft / description
      Previous value: -"Reported altitude in feet MSL."New value: +"Reported altitude in feet MSL, or null when the pilot gave no flight level (raw /FLUNKN/, /FLDURC/, or /FLDURD/). A raw /FL000/ is a reported flight level of zero and returns 0."
    • removedOutput schema / properties / pireps / items / properties / altitude_ft / type
      Removed value: -"number"
    • changedOutput schema / properties / pireps / items / properties / clouds / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "additionalProperties": false,
      -      "description": "A cloud layer with base and top altitudes.",
      -      "properties": {
      -        "base_ft": {
      -          "description": "Cloud base altitude in feet MSL.",
      -          "type": "number"
      -        },
      -        "cover": {
      -          "description": "Cloud cover code (e.g., FEW, SCT, BKN, OVC).",
      -          "type": "string"
      -        },
      -        "top_ft": {
      -          "description": "Cloud top altitude in feet MSL.",
      -          "type": "number"
      -        }
      -      },
      -      "required": [
      -        "cover",
      -        "base_ft",
      -        "top_ft"
      -      ],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "additionalProperties": false,
      +      "description": "A cloud layer, whose base and top are each present only if reported.",
      +      "properties": {
      +        "base_ft": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Cloud base altitude in feet MSL, or null if the pilot reported no base."
      +        },
      +        "cover": {
      +          "description": "Cloud cover code: FEW, SCT, BKN, OVC, SKC, or CLR. The field also carries the flight-condition markers VMC and IMC, which describe the flight environment rather than a cloud layer and arrive with no base or top.",
      +          "type": "string"
      +        },
      +        "top_ft": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Cloud top altitude in feet MSL, or null if the pilot reported no top."
      +        }
      +      },
      +      "required": [
      +        "cover",
      +        "base_ft",
      +        "top_ft"
      +      ],
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / pireps / items / properties / clouds / description
      Previous value: -"Cloud layers with base and top altitudes, or null if not reported."New value: +"Cloud layers, or null if the PIREP carried no sky-condition group."
    • changedOutput schema / properties / pireps / items / properties / icing / description
      Previous value: -"Icing layers reported. Empty array if no icing encountered (NEG)."New value: +"Icing layers reported. An explicit negative report is a layer with intensity NEG; an empty array means the PIREP carried no icing group, so the pilot said nothing either way."
    • changedOutput schema / properties / pireps / items / properties / turbulence / description
      Previous value: -"Turbulence layers reported. Empty array if no turbulence encountered (NEG)."New value: +"Turbulence layers reported. An explicit negative report is a layer with intensity NEG; an empty array means the PIREP carried no turbulence group, so the pilot said nothing either way."
  8. Changed2 schema fields changed
    • removedInput schema / properties / distance_nm / default
      Removed value: -100
    • changedInput schema / properties / distance_nm / description
      Previous value: -"Search radius in nautical miles around station_id. Only used when station_id is provided. Default 100."New value: +"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."
  9. First observed

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnly/openWorld/idempotent, and the description does not contradict them. It adds non-obvious behavioral details: limit is applied last after recency ordering, min_intensity filters reports rather than layers, and absence of reports does not imply smooth conditions. These go well beyond what annotations alone convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Compact but information-dense; front-loads purpose, then covers return contents, parameter constraints, limit behavior, and data caveats in logical order. No filler, repetition, or restatement of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all non-obvious selection constraints, output contents, and real-world caveats. Since an output schema exists, return format need not be duplicated. The only unmentioned parameter, hours, is fully documented in the schema with a default, so nothing necessary is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds essential inter-parameter semantics: altitude_min_ft must not exceed altitude_max_ft, distance_nm with bbox is rejected, min_intensity selects reports not layers, and limit preserves recency without changing the search. This substantially enriches the raw schema definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and resource ('recent Pilot Reports (PIREPs)') with geographic scope ('near an airport or within a bounding box'). The resource type is unique among sibling tools like aviation_get_metar and aviation_get_taf, so an agent can immediately distinguish it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit conditional usage rules: 'Requires either station_id or bbox — not both' and 'distance_nm belongs to the station_id search only.' Adds a coverage caveat about US-centric sparse PIREPs that informs interpretation, though it does not explicitly name alternative tools or when-not-to-use conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.