Skip to main content
Glama

Server Details

METARs, TAFs, PIREPs, domestic/international SIGMETs and CWAs via NWS AWC. AIRMETs not served.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
99.9% over 77 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
cyanheads/aviation-weather-mcp-server
GitHub Stars
2
Server Listing
@cyanheads/aviation-weather-mcp-server

TDQS

A4.4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool maps to a distinct aviation-weather product or station-resolution task: station lookup, advisories, METARs, PIREPs, and TAFs. Although several tools support station or bbox queries, their descriptions clearly separate station discovery from weather-product retrieval.

Naming Consistency5/5

All tool names use a consistent aviation_ prefix with snake_case verb_noun structure, e.g. aviation_find_stations and aviation_get_metar. The use of find for station resolution and get for data retrieval remains predictable and readable.

Tool Count5/5

Five tools is well-scoped for a focused aviation-weather server. Each tool corresponds to a core product or lookup operation and does not feel redundant or excessively narrow.

Completeness4/5

The surface covers station lookup plus the core observation, forecast, pilot-report, and advisory products. The notable gap is AIRMETs, which the advisories tool explicitly rejects, so agents needing that product have no path within this server.

Available Tools

5 tools
aviation_find_stationsFind Aviation Weather StationsA
Read-onlyIdempotent
Inspect

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's own identifier, which for an airport is its 4-character ICAO ID (e.g., KSEA, KJFK, K0S9); buoys and mesonet sites carry identifiers of other shapes and resolve by those. At least one of station_ids, bbox, or state is required. limit bounds how many stations an area search returns without changing the area searched, and belongs to the bbox and state modes only.

NameRequiredDescriptionDefault
bboxNoGeographic bounding box for spatial queries.
limitNoMaximum 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 rather than unidentified sites lead the first page. It bounds the response without changing the area searched, which a smaller bbox or a different state would. Distinct from the 400-row upstream cap: a limited result examined every station it counted and withheld some, while a capped one never drew the rest. Belongs to the bbox and state modes; supplying it alongside station_ids is rejected, since that mode already names the set. Omit to return every match. Optional.
stateNoTwo-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_idsNoOne 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: a 4-character ICAO ID for an airport (e.g., KSEA, K0S9), and other shapes for buoys and mesonet sites. A 3-letter IATA code (e.g., SEA) never resolves. Use bbox or state to discover identifiers by location.

Output Schema

NameRequiredDescription
capNoThe upstream row maximum that was applied to the draw. Present only on a truncated result.
errorNoPresent when the call failed. Absent on success.
shownNoStations in this result, counted after any client-side state filter and after any limit.
noticeNoGuidance for bbox row caps, requested limits, area results above 110 stations with no limit, unresolved identifiers, or unavailable supplementary magnetic variation. State snapshots are complete and never reach the stationinfo row cap. A failed airport lookup does not invalidate station identity.
limitedNoTrue when the requested limit withheld stations that matched — the caller asked to see fewer of them. False affirms the limit did not bite, so every matching station is here. Present only when the call supplied a limit. It never states anything about the upstream cap: a limited result examined every station it counted, while a truncated one never drew the rest.
matchedNoStations 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 draw and not the search area — the stations the cap dropped were never examined, so no count can include them.
missingNoRequested identifiers absent from the result. Deduplicated the way returned is: a repeated or differently-cased identifier appears once, under its first spelling. Absent when none are missing.
partialNoTrue when a requested identifier resolved to nothing. False affirms every requested identifier resolved, which a count cannot establish — upstream case-folds and deduplicates, so a shorter list is not itself a gap. Present only on a station_ids lookup.
returnedNoRequested identifiers that resolved, spelled as the caller wrote them rather than as upstream returned them. Deduplicated the way upstream deduplicates: a repeated or differently-cased identifier appears once, under its first spelling. Present only on a station_ids lookup.
stationsNoMatching stations.
requestedNoStation identifiers this call asked for, spelled as the caller wrote them and in the order given. Present only on a station_ids lookup — the bbox and state modes ask for an area, not a list.
truncatedNoTrue when the upstream draw hit the AWC row cap, so stations inside the search area are missing from this result. False affirms the area was drawn in full, which a count alone cannot establish.
upstreamRowsNoRows AWC returned before the client-side state filter ran. Present only on a truncated state query the filter then narrowed, where the post-filter count sits below the cap and so cannot reveal the truncation on its own.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/closed-world, so the safety profile is covered; the description goes further by disclosing a deterministic ordering (ICAO ascending, identifier-less last), a 400-row upstream cap distinct from limit, and the fact that limit bounds the response without shrinking the searched area. That cap-vs-limit distinction is exactly the kind of hidden behavior an agent could otherwise misread.

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

Conciseness4/5

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

Front-loaded with the two modes, then return shape, then the required-argument rule, then limit semantics — a sensible ordering with no filler. It is somewhat long and echoes schema text (the limit and identifier-shape explanations repeat what the properties already say), costing a point.

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?

For a 4-parameter, nested-bbox, multi-mode discovery tool with an output schema, the description covers modes, the required-argument invariant, identifier shapes across station types, limit semantics, and the upstream cap. An agent can pick the right mode and arguments without consulting the schema.

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

Parameters4/5

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

Schema coverage is 100%, so 3 is the floor, and the description adds cross-parameter meaning the per-property schema cannot easily convey: limit is mode-scoped and rejected alongside station_ids. It also reinforces the identifier-resolution rule (4-char ICAO resolves, 3-letter IATA never does) — though that is largely duplicated from the station_ids schema text, keeping it from a 5.

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 and resource: 'Resolve an airport or weather reporting station by its identifier, or discover stations within a bounding box or US state.' The two modes (ID lookup vs. area discovery) are spelled out, which cleanly separates it from the weather-data siblings (metar/taf/pireps/advisories) that consume rather than produce station identifiers.

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?

Explicit preconditions: 'At least one of station_ids, bbox, or state is required,' plus the mode coupling rule that limit belongs only to bbox/state and is rejected with station_ids. It even routes within the tool ('Use bbox or state to discover identifiers by location'), though it never names a sibling tool or states when to prefer a sibling over this one, which keeps it from a 5.

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

aviation_get_advisoriesGet Active Aviation AdvisoriesA
Read-onlyIdempotent
Inspect

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/movement, multipart geometry, and original bulletins; missing facts stay null. CWA cancellations are excluded and counted. Independent source failures retain healthy results with partial coverage. AIRMET requests are rejected; this tool does not retrieve AIRMETs. Omit limit to return every available match; an explicit limit sorts results and discloses withheld matches.

NameRequiredDescriptionDefault
bboxNoOrdered geographic bounding box. Matches each geometry part by its bounding envelope, not exact polygon intersection; date-line-crossing source geometry is unwrapped.
limitNoOptional 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.
hazardNoUpstream hazard filter. TS and CONVECTIVE are thunderstorm aliases across every product, retaining source-native output hazards. Domestic also supports TURBULENCE, ICING, IFR. International also supports TURBULENCE, ICING, MTW (mountain wave), DS (duststorm), SS (sandstorm), TC (tropical cyclone), VA (volcanic ash). CWA also supports TURBULENCE, ICING, IFR, PCPN (precipitation), UNK (unknown). Incompatible sources are not_applicable; wholly incompatible selections are rejected. MTN OBSCN, SURFACE WIND and LLWS are not served and are rejected. A hazard-scoped zero says nothing about other hazards.
altitude_ftNoOptional 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 band, lower edge clamped to zero. Unknown CWA bounds are retained and disclosed.
advisory_typeNoProduct 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 separate AIRMET products.all

Output Schema

NameRequiredDescription
drawnNoWith bbox: decoded active rows after cancellation removal and product/hazard/altitude selection, before geographic filtering; successful sources only.
errorNoPresent when the call failed. Absent on success.
totalNoWith explicit limit: all available matches before limiting.
noticeNoCoverage-scoped empty, bbox-removal or explicit-limit explanation and recovery. Failed sources never establish zero coverage.
matchedNoWith bbox: rows intersecting any geometry part, before limit.
partialNoTrue when a source failed or unreadable rows were skipped; no complete-coverage claim is possible.
coverageNoCoverage of selected sources, independent of bbox and limit.
returnedNoWith bbox or explicit limit: rows returned after limit.
truncatedNoWith explicit limit: whether matches were withheld. Omit or raise limit to retrieve them.
unlocatedNoWith bbox: drawn rows lacking decoded geometry; not known to be outside the box.
advisoriesNoActive advisories matching the filter criteria. May be empty during fair weather periods.
altitude_selectionNoApplied altitude selection; absent when altitude_ft was omitted.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already cover read-only/idempotent/open-world, and the description goes well beyond them: CWA cancellations are excluded and counted, per-source failures degrade to partial coverage while healthy results are retained, and missing facts stay null rather than being fabricated. That failure-mode and data-quality disclosure is exactly the context annotations cannot express.

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

Conciseness4/5

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

Purpose and scope are front-loaded, and the paragraph is dense with useful content rather than filler. There is mild redundancy — 'AIRMET requests are rejected; this tool does not retrieve AIRMETs' says the same thing twice, and the filter enumeration duplicates the schema.

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?

For a five-parameter, nested-bbox, multi-source tool with an output schema, the description covers sources, exclusions, filtering, degradation behavior, null handling, and limit semantics. An agent has everything needed to call it correctly and interpret partial results.

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

Parameters3/5

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

Schema description coverage is 100% and the parameter docs are already unusually detailed (hazard aliases, ±3000 ft level band, bbox envelope matching), so the schema carries the load. The description mostly restates the filter set and limit behavior rather than adding new semantics, making the baseline 3 appropriate.

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 and resource (active domestic SIGMETs, international SIGMETs incl. oceanic, and Center Weather Advisories from the NWS Aviation Weather Center) plus the filtering axes. It also explicitly excludes AIRMETs, which sharply separates it from any weather-product sibling such as aviation_get_metar or aviation_get_taf.

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?

Gives concrete when-not guidance ('AIRMET requests are rejected; this tool does not retrieve AIRMETs') and limit semantics ('omit limit to return every available match'). It stops short of naming an alternative tool for the excluded AIRMET case, but no sibling covers that product, so the routing gap is minor.

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

aviation_get_metarGet METAR Weather ObservationsA
Read-onlyIdempotent
Inspect

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), present weather, temperature, dewpoint, altimeter, cloud layers — plus the computed flight category (VFR/MVFR/IFR/LIFR) and the raw METAR string. Requires either station_ids (1–10 ICAO IDs, e.g., KSEA, KJFK, K0S9) or bbox (area survey) — not both. station_ids returns every observation inside the hours window; bbox returns the latest observation per station in the box, with flight_category keeping only the stations in the categories named (e.g., IFR and LIFR) and limit bounding how many stations come back. Use aviation_find_stations to resolve or verify an ICAO ID, or to discover nearby stations.

NameRequiredDescriptionDefault
bboxNoGeographic bounding box for an area observation survey.
hoursNoLookback 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: at the default of 1, half-hourly stations return two observations and SPECI-issuing stations can return more, so budget rows by the station reporting interval, never one per station. With bbox the result is reduced to the latest observation per station, but the window still shapes the draw the upstream row cap applies to — a wide window spends that cap on repeat readings from busy stations instead of on more stations, so lower it before narrowing the box.
limitNoMaximum 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 the same limit returns the same stations. It bounds the response without changing the area searched, which a smaller bbox would, and it keeps an alphabetical slice rather than a region or a condition. Distinct from the 400-row upstream cap: a limited result examined every station it counted and withheld some, while a capped one never drew the rest. Belongs to the bbox mode; supplying it alongside station_ids is rejected, since that mode already names the set. Omit to return every station in the box. Optional.
station_idsNoICAO 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 than a named set.
flight_categoryNoReturn 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 station and before limit, so it changes which stations come back, not what AWC draws or the upstream row cap. A station AWC could not rate (flight_category "unknown") never matches. Belongs to the bbox mode; supplying it alongside station_ids is rejected, since each named station already reports its own category. Optional.

Output Schema

NameRequiredDescription
capNoThe upstream row maximum that was applied to the draw. Present only on a truncated result.
errorNoPresent when the call failed. Absent on success.
shownNoStations in this result, counted after the reduction to one observation per station, after any flight_category filter, and after any limit. Present only on a bbox survey.
noticeNoGuidance for whichever disclosures fired, in this order: the levers that narrow a truncated draw; what the flight_category filter kept of the stations surveyed, or that it emptied the result; what a requested limit withheld; and — on a survey of more than 40 stations from a call that set no limit — that limit bounds the response but keeps an alphabetical slice, not a region. Or, on a station_ids lookup, the station IDs that returned nothing. The survey statements share one notice and the text keeps them apart; the reconciliation cannot join them, since only bbox reaches the row cap or takes a filter or a limit, and only station_ids reconciles a request.
limitedNoTrue when the requested limit withheld stations that matched — the caller asked to see fewer of them. False affirms the limit did not bite, so every station drawn is here. Present only when a bbox survey supplied a limit. It never states anything about the upstream cap: a limited result examined every station it counted, while a truncated one never drew the rest.
matchedNoStations the draw held before the limit selected from them — after the flight_category filter, where one was supplied. Present only on a limited result. Where the result is also truncated this counts the capped draw and not the box — the observations the cap dropped were never examined, so no count can include them.
missingNoRequested station IDs absent from the result. Absent when none are missing.
partialNoTrue when a requested station produced no observation. False affirms the result covers every requested station, so full coverage is distinguishable from a short batch rather than being inferred from the count. Present only on a station_ids lookup.
returnedNoDistinct station IDs that produced at least one observation. Counted per station, not per row — with hours > 1 a station reporting six times still appears once. Present only on a station_ids lookup.
surveyedNoStations the survey reached — one per station, the latest observation of each — before the flight_category filter selected from them. Present only when a bbox survey supplied flight_category; the count after the filter is shown, or matched where a limit then withheld stations. Where the result is also truncated this counts the capped draw and not the box.
requestedNoStation IDs this call asked for, in the order given. Present only on a station_ids lookup — a bbox survey asks for an area, not a list.
truncatedNoTrue when the upstream draw hit the AWC row cap, so stations inside the box are missing from this result. False says the draw did not reach that cap, which a count alone cannot establish — the draw is reduced to one row per station, so the returned count sits far below the cap either way. It is not a completeness claim: AWC also thins a dense box by station priority, independently of the cap and with nothing in the response to mark it, so re-run over smaller quadrants and union the results when the box must be complete. Present only on a bbox survey.
observationsNoWeather observations. With station_ids, one per station/time pair — multiple entries per station when the hours window holds more than one observation. With bbox, one per station: the latest observation inside that window.
upstreamRowsNoObservations AWC returned before the reduction to one row per station. Present only on a truncated draw the reduction then narrowed, where the station count sits below the cap and so cannot reveal the truncation on its own.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/openWorld/idempotent, so the safety profile is covered; the description adds genuinely useful behavior — mode-dependent result shaping (all observations in the window vs. latest per station), the flight_category 'unknown' never matching, and that limit is an alphabetical slice rather than a region. It stops short of disclosing the upstream row cap or any rate/refresh behavior, which the schema mentions only in passing.

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

Conciseness4/5

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

Front-loaded with purpose and mode semantics, and every sentence is substantive rather than filler. It is, however, a single dense block that repeats parameter behavior more fully documented in the schema, so it is somewhat longer than it needs to be for selection purposes.

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?

An output schema exists, so return values need not be re-explained; the description still sketches the decoded fields and flight category, which aids selection without being load-bearing. For a 5-parameter, dual-mode tool with annotations covering safety, nothing an agent needs to call it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the schema text is itself extremely verbose, documenting the same mode contrast, the 1–10 ICAO constraint, the limit-vs-bbox distinction, and even the bbox-only rejection rules. The description's parameter content is largely a digest of what the schema already carries, so the baseline 3 applies.

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 and resource ('Get current weather observations (METARs)') and immediately splits the two operating modes — named airports vs. geographic area survey. It names aviation_find_stations as the discovery sibling, so an agent can tell it apart from the other aviation_* tools without opening schemas.

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

Usage Guidelines5/5

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

Explicitly states the mutual-exclusion rule ('Requires either station_ids (1–10 ICAO IDs) or bbox (area survey) — not both') and describes what each mode returns, which is exactly the condition that selects between them. It also routes to aviation_find_stations for ID resolution or nearby-station discovery.

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

aviation_get_pirepsGet Pilot Reports (PIREPs)A
Read-onlyIdempotent
Inspect

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 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.

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 ASCII letters or digits, case-insensitive and normalized to uppercase (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. When station coordinates are unavailable, the legacy AWC search remains available with an explicit unverified-radius notice.
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

NameRequiredDescription
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 geographic selection, altitude filtering, and 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.
upstreamRowsNoCandidate rows AWC returned before radius and altitude filtering or antimeridian deduplication. Present when those steps narrowed capped draws; each draw has its own 400-row cap.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare readOnly/idempotent/openWorld, but the description adds substantive behavior: limit is applied last after all filters and recency ordering (with the distinction from the 400-row upstream cap), min_intensity filters reports rather than layers so lighter layers still appear, unknown-altitude reports are dropped when a bound is set, and distance_nm falls back to a legacy search with an unverified-radius notice. These are non-obvious traits an agent could not infer elsewhere.

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

Conciseness4/5

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

Front-loaded with purpose and search mode, then constraints, then caveats — a sensible ordering with no filler. A few sentences (notably the limit and altitude explanations) are long and could be tightened, but every sentence carries information.

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?

An output schema exists, so return values need not be spelled out, yet the description still summarizes the decoded fields. For an 8-parameter, 100%-coverage, annotated read-only tool, the description covers search modes, constraints, filtering semantics, result bounding, and data-availability caveats — nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so each parameter is already documented; the description's added value is cross-parameter semantics — mutual exclusion of station_id/bbox, the station-only scope of distance_nm, the min/max altitude ordering constraint, and limit's post-filter recency semantics. It does not explain the hours default or enum meanings beyond the schema, so it sits just above the baseline rather than maximizing.

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 and resource (get recent PIREPs) plus both search modes (radial near an airport, or bounding box), and enumerates the returned report fields. It is clearly distinguishable from sibling observation tools like aviation_get_metar and aviation_get_taf, which report point conditions rather than pilot-submitted turbulence/icing reports.

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?

Explicitly states the caller must supply either station_id or bbox but not both, that distance_nm belongs only to the station search, and that altitude_min_ft must not exceed altitude_max_ft — real when-to-use guidance. It also notes US-centric coverage and that absence of reports does not imply smooth air. It stops short of naming a sibling as the fallback source of conditions, so it is not a full 5.

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

aviation_get_tafGet Terminal Aerodrome Forecast (TAF)A
Read-onlyIdempotent
Inspect

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, K36U).

NameRequiredDescriptionDefault
station_idsYesICAO station IDs to query. 1–4 stations per call.

Output Schema

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoRecovery guidance naming the missing station IDs. Present only on a partial result. It lists the candidate causes without asserting one — upstream omits the row either way.
missingNoRequested station IDs absent from the result. Absent when none are missing.
partialNoTrue when a requested station produced no forecast. False affirms the result covers every requested station, so full coverage is distinguishable from a short batch rather than being inferred from the count.
returnedNoDistinct station IDs that produced a forecast.
forecastsNoTAF forecasts, one per requested station.
requestedNoStation IDs this call asked for, in the order given.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, open-world behavior, so the safety profile is covered; the description usefully adds domain behavior instead – the 24–30 hour forecast horizon, the commercial-service issuance restriction, and the prerequisite availability check. It leaves minor gaps such as staleness/issue-cycle handling, but goes well past restating annotations.

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

Conciseness4/5

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

Front-loads the purpose, then forecasts contents, then coverage and prerequisite constraints – a logical order with no filler sentences. The return-value enumeration is somewhat long, especially since an output schema exists to carry that detail.

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

Completeness4/5

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

Given a rich output schema, return-format explanation is not required, and the description still supplies the operational constraints (availability check, station limits) an agent needs to call it correctly. Only the TAF-vs-METAR selection logic is left implicit.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter (station_ids) is fully documented in the schema, including the pattern, case normalization, and 1–4 limit. The description's examples and count restate the schema rather than extending it, so the baseline 3 applies.

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 and resource ('Get the Terminal Aerodrome Forecast (TAF)') and names the scope ('for one or more airports'). The acronym spelling and forecast contents make it trivially distinguishable from the METAR sibling.

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?

Gives clear routing context: TAFs only exist for airports with scheduled commercial service, and it points the agent at aviation_find_stations (data_types) to confirm availability before calling. It does not, however, explicitly contrast TAF with METAR or state when a current-conditions vs. forecast lookup is appropriate.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updates
    • Changedaviation_find_stations6 fields changed
      • changedInput schema / properties / station_ids / description
        Previous value: -"One or more station identifiers (e.g., KSEA, KJFK). A lookup matches the registry's own identifier: a 4-character ICAO ID for an airport (e.g., KSEA, K0S9), and other shapes for the buoys and mesonet sites the registry also carries, which resolve by those. A 3-letter IATA code (e.g., SEA) never resolves, even for a station whose entry carries one. Whitespace around an entry is trimmed, so a padded identifier resolves the same as the bare one; an empty or whitespace-only entry is rejected. Use bbox or state to discover identifiers by location."New value: +"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: a 4-character ICAO ID for an airport (e.g., KSEA, K0S9), and other shapes for buoys and mesonet sites. A 3-letter IATA code (e.g., SEA) never resolves. Use bbox or state to discover identifiers by location."
      • changedInput schema / properties / station_ids / items / description
        Previous value: -"One station identifier (e.g., KSEA)."New value: +"One station identifier or comma-separated identifiers (e.g., KSEA,KJFK)."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `station_not_found`: None of the requested IDs match any known station, or the bbox or state search found none. `missing_search_criteria`: None of station_ids, bbox, or state was provided. `conflicting_location`: More than one of station_ids, bbox, or state was provided. `invalid_bbox`: The bounding box is inverted — minLat > maxLat or minLon > maxLon. `invalid_state`: The state code is not one of the 50 US states or DC. `conflicting_limit`: limit was provided together with station_ids, where the caller has already named the set. `upstream_rejected`: The AWC station registry rejected the request as malformed rather than answering it. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_station_ids`: Comma-separated station_ids contain an empty token or expand beyond twenty identifiers. `station_not_found`: None of the requested IDs match any known station, or the bbox or state search found none. `missing_search_criteria`: None of station_ids, bbox, or state was provided. `conflicting_location`: More than one of station_ids, bbox, or state was provided. `invalid_bbox`: The bounding box is inverted — minLat > maxLat or minLon > maxLon. `invalid_state`: The state code is not one of the 50 US states or DC. `conflicting_limit`: limit was provided together with station_ids, where the caller has already named the set. `upstream_rejected`: The AWC station registry rejected the request as malformed rather than answering it. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "station_not_found",
        -  "missing_search_criteria",
        -  "conflicting_location",
        -  "invalid_bbox",
        -  "invalid_state",
        -  "conflicting_limit",
        -  "upstream_rejected"
        -]New value: +[
        +  "invalid_station_ids",
        +  "station_not_found",
        +  "missing_search_criteria",
        +  "conflicting_location",
        +  "invalid_bbox",
        +  "invalid_state",
        +  "conflicting_limit",
        +  "upstream_rejected"
        +]
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance for whichever disclosures fired: the lever that narrows a truncated draw, what a requested limit withheld, that limit bounds the response without changing the area searched (on a bbox or state result of more than 130 stations from a call that set no limit), or the cause and fix for identifiers that resolved to nothing. The cap and either limit statement can fire on one result, and the text keeps them apart; the reconciliation cannot join them, since only bbox and state reach the row cap or take a limit, and only station_ids reconciles a request."New value: +"Guidance for bbox row caps, requested limits, area results above 110 stations with no limit, unresolved identifiers, or unavailable supplementary magnetic variation. State snapshots are complete and never reach the stationinfo row cap. A failed airport lookup does not invalidate station identity."
      • addedOutput schema / properties / stations / items / properties / magnetic_declination
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "degrees": {
        +          "description": "Source-published magnetic variation in degrees, east positive and west negative; null for unrecognized source syntax.",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "source": {
        +          "description": "Exact magdec string from the AWC airport record; no epoch is supplied.",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "degrees",
        +        "source"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Published airport magnetic variation for named lookups; null when absent, unavailable, or an area search. Not a current geomagnetic model."
        +}
    • Changedaviation_get_pireps7 fields changed
      • changedInput schema / properties / distance_nm / description
        Previous 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."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. When station coordinates are unavailable, the legacy AWC search remains available with an explicit unverified-radius notice."
      • addedOutput schema / properties / pireps / items / properties / braking_action
        Added value: +{
        +  "description": "Decoded AWC braking action (e.g., GOOD, MED, POOR, NIL), or null if absent. Source codes remain unchanged; never inferred from remarks.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / pireps / items / properties / pirep_type / description
        Previous value: -"Report type: PIREP (pilot report) or AIREP (position report with wx)."New value: +"Source report type, including PIREP, Urgent PIREP, AIREP, and AMDAR. Other source values are preserved."
      • changedOutput schema / properties / pireps / items / properties / wind / anyOf
        Previous value: -[
        -  {
        -    "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"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "direction_deg": {
        +        "description": "Wind direction aloft in degrees, as reported and not converted. An ordinary or urgent 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, nor is an AMDAR or unfamiliar report type's reference.",
        +        "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"
        +  }
        +]
      • changedOutput schema / properties / pireps / items / required
        Previous value: -[
        -  "observed_at",
        -  "lat",
        -  "lon",
        -  "altitude_ft",
        -  "aircraft_type",
        -  "pirep_type",
        -  "turbulence",
        -  "icing",
        -  "clouds",
        -  "visibility_sm",
        -  "temp_c",
        -  "wind",
        -  "weather",
        -  "raw_pirep"
        -]New value: +[
        +  "observed_at",
        +  "lat",
        +  "lon",
        +  "altitude_ft",
        +  "aircraft_type",
        +  "braking_action",
        +  "pirep_type",
        +  "turbulence",
        +  "icing",
        +  "clouds",
        +  "visibility_sm",
        +  "temp_c",
        +  "wind",
        +  "weather",
        +  "raw_pirep"
        +]
      • changedOutput schema / properties / shown / description
        Previous value: -"Reports in this result, counted after any altitude filter and after any limit."New value: +"Reports in this result, counted after geographic selection, altitude filtering, and any limit."
      • changedOutput schema / properties / upstreamRows / description
        Previous value: -"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."New value: +"Candidate rows AWC returned before radius and altitude filtering or antimeridian deduplication. Present when those steps narrowed capped draws; each draw has its own 400-row cap."
  2. 1 tool update
    • Changedaviation_get_advisories14 fields changed
      • addedInput schema / properties / altitude_ft
        Added value: +{
        +  "description": "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 band, lower edge clamped to zero. Unknown CWA bounds are retained and disclosed.",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedInput schema / properties / hazard / description
        Previous value: -"Upstream hazard filter. Domestic: CONVECTIVE, TURBULENCE, ICING, IFR. International: TS, TURBULENCE, ICING, MTW (mountain wave), DS (duststorm), SS (sandstorm), TC (tropical cyclone), VA (volcanic ash). CWA: TS, TURBULENCE, ICING, IFR, PCPN (precipitation), UNK (unknown). Incompatible sources are not_applicable; wholly incompatible selections are rejected. MTN OBSCN, SURFACE WIND and LLWS are not served and are rejected. A hazard-scoped zero says nothing about other hazards."New value: +"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 supports TURBULENCE, ICING, MTW (mountain wave), DS (duststorm), SS (sandstorm), TC (tropical cyclone), VA (volcanic ash). CWA also supports TURBULENCE, ICING, IFR, PCPN (precipitation), UNK (unknown). Incompatible sources are not_applicable; wholly incompatible selections are rejected. MTN OBSCN, SURFACE WIND and LLWS are not served and are rejected. A hazard-scoped zero says nothing about other hazards."
      • addedOutput schema / properties / advisories / items / properties / issued_by_name
        Added value: +{
        +  "description": "Source-native CWA issuing-office name, or null when unavailable.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / advisories / items / properties / movement / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "direction_deg": {
        -        "description": "Domestic source movement direction in degrees true (FROM semantics); null when omitted or international.",
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "direction_text": {
        -        "description": "International source-native direction text, without converting to domestic FROM-angle semantics; null when omitted.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "speed_kt": {
        -        "description": "Decoded movement speed in knots, or null when omitted.",
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "direction_deg",
        -      "speed_kt"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "direction_deg": {
        +        "description": "Domestic source movement direction in degrees true (FROM semantics); null when omitted or international.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "direction_text": {
        +        "description": "International source-native direction text, without converting to domestic FROM-angle semantics; null when omitted.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "speed_kt": {
        +        "description": "Decoded movement speed in knots, or null when omitted.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "stationary": {
        +        "description": "International stationarity: true for an explicit unquoted standalone STNR bulletin token, false for non-sentinel decoded direction with positive speed, null otherwise. Sentinel or zero alone is not stationarity; absent for domestic movement.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      }
        +    },
        +    "required": [
        +      "direction_deg",
        +      "speed_kt"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / advisories / items / properties / severity / description
        Previous value: -"Severity integer for convective SIGMETs (higher = more intense). Null when the advisory stated none."New value: +"Source-native domestic severity value, without an inferred intensity scale; null when omitted."
      • addedOutput schema / properties / advisories / items / properties / tendency
        Added value: +{
        +  "description": "International source-native tendency token (such as INTSF, WKN, NC), or null when unavailable; future tokens are preserved.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / advisories / items / required
        Previous value: -[
        -  "advisory_type",
        -  "source",
        -  "series_id",
        -  "hazard",
        -  "severity",
        -  "issued_by",
        -  "fir_id",
        -  "fir_name",
        -  "qualifier",
        -  "valid_from",
        -  "valid_to",
        -  "altitude_low_ft",
        -  "altitude_high_ft",
        -  "movement",
        -  "polygon",
        -  "geometry",
        -  "raw_text"
        -]New value: +[
        +  "advisory_type",
        +  "source",
        +  "series_id",
        +  "hazard",
        +  "severity",
        +  "issued_by",
        +  "issued_by_name",
        +  "tendency",
        +  "fir_id",
        +  "fir_name",
        +  "qualifier",
        +  "valid_from",
        +  "valid_to",
        +  "altitude_low_ft",
        +  "altitude_high_ft",
        +  "movement",
        +  "polygon",
        +  "geometry",
        +  "raw_text"
        +]
      • addedOutput schema / properties / altitude_selection
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Applied altitude selection; absent when altitude_ft was omitted.",
        +  "properties": {
        +    "band_high_ft": {
        +      "description": "Inclusive search-band upper bound in feet MSL.",
        +      "type": "number"
        +    },
        +    "band_low_ft": {
        +      "description": "Inclusive search-band lower bound in feet MSL, clamped to zero.",
        +      "type": "number"
        +    },
        +    "level": {
        +      "description": "Effective integer flight level after nearest-100-ft rounding.",
        +      "type": "number"
        +    },
        +    "requested_ft": {
        +      "description": "Requested altitude in feet MSL.",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "requested_ft",
        +    "level",
        +    "band_low_ft",
        +    "band_high_ft"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / coverage / items / properties / altitude_filter
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "upstream",
        +        "client"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Altitude selection mechanism, or null when omitted or coverage unavailable."
        +}
      • addedOutput schema / properties / coverage / items / properties / altitude_unknown
        Added value: +{
        +  "description": "Retained rows with either decoded altitude bound unknown, before bbox; not a proven altitude match. Null without altitude selection or available coverage; describes only upstream-returned data.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / coverage / items / properties / cancelled
        Added value: +{
        +  "description": "Excluded CWA cancellation notices; zero for readable feeds with none, null when coverage is unavailable.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / coverage / items / properties / drawn / description
        Previous value: -"Decoded rows after product/hazard selection, before bbox; null for failed or not_applicable sources."New value: +"Decoded active rows after cancellation removal and product/hazard/altitude selection, before bbox; null for failed or not_applicable sources."
      • changedOutput schema / properties / coverage / items / required
        Previous value: -[
        -  "source",
        -  "status",
        -  "drawn"
        -]New value: +[
        +  "source",
        +  "status",
        +  "drawn",
        +  "cancelled",
        +  "altitude_filter",
        +  "altitude_unknown"
        +]
      • changedOutput schema / properties / drawn / description
        Previous value: -"With bbox: decoded rows after product/hazard, before geographic filtering; successful sources only."New value: +"With bbox: decoded active rows after cancellation removal and product/hazard/altitude selection, before geographic filtering; successful sources only."
  3. 4 tool updates
    • Changedaviation_get_advisories43 fields changed
      • changedInput schema / properties / advisory_type / description
        Previous value: -"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."New value: +"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 separate AIRMET products."
      • changedInput schema / properties / advisory_type / enum
        Previous value: -[
        -  "sigmet",
        -  "airmet",
        -  "all"
        -]New value: +[
        +  "sigmet",
        +  "isigmet",
        +  "cwa",
        +  "airmet",
        +  "all"
        +]
      • changedInput schema / properties / bbox / description
        Previous value: -"Geographic bounding box to filter advisories by polygon overlap."New value: +"Ordered geographic bounding box. Matches each geometry part by its bounding envelope, not exact polygon intersection; date-line-crossing source geometry is unwrapped."
      • changedInput schema / properties / hazard / description
        Previous value: -"Optional hazard filter, applied upstream by AWC. CONVECTIVE, TURBULENCE, ICING, and IFR are the four hazard classes the domestic SIGMET feed carries, and an empty result under one of them means no advisory of that class is active — it says nothing about the others. MTN OBSCN, SURFACE WIND, and LLWS are AIRMET-family phenomena with no upstream counterpart here and are rejected rather than returning an empty result."New value: +"Upstream hazard filter. Domestic: CONVECTIVE, TURBULENCE, ICING, IFR. International: TS, TURBULENCE, ICING, MTW (mountain wave), DS (duststorm), SS (sandstorm), TC (tropical cyclone), VA (volcanic ash). CWA: TS, TURBULENCE, ICING, IFR, PCPN (precipitation), UNK (unknown). Incompatible sources are not_applicable; wholly incompatible selections are rejected. MTN OBSCN, SURFACE WIND and LLWS are not served and are rejected. A hazard-scoped zero says nothing about other hazards."
      • changedInput schema / properties / hazard / enum
        Previous value: -[
        -  "CONVECTIVE",
        -  "TURBULENCE",
        -  "ICING",
        -  "IFR",
        -  "MTN OBSCN",
        -  "SURFACE WIND",
        -  "LLWS"
        -]New value: +[
        +  "CONVECTIVE",
        +  "TURBULENCE",
        +  "ICING",
        +  "IFR",
        +  "TS",
        +  "MTW",
        +  "DS",
        +  "SS",
        +  "TC",
        +  "VA",
        +  "PCPN",
        +  "UNK",
        +  "MTN OBSCN",
        +  "SURFACE WIND",
        +  "LLWS"
        +]
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "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.",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "advisories"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "advisories",
        +      "coverage",
        +      "partial"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • changedOutput schema / properties / advisories / items / description
        Previous value: -"An active SIGMET advisory."New value: +"An active advisory, with source omissions preserved as null."
      • changedOutput schema / properties / advisories / items / properties / advisory_type / description
        Previous value: -"Advisory type as issued. The domestic SIGMET feed this tool reads emits SIGMET."New value: +"Product type: SIGMET, ISIGMET or CWA."
      • addedOutput schema / properties / advisories / items / properties / fir_id
        Added value: +{
        +  "description": "Flight information region identifier, or null when omitted.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / advisories / items / properties / fir_name
        Added value: +{
        +  "description": "Flight information region name, or null when omitted.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / advisories / items / properties / geometry
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "kind": {
        +          "description": "Source-native geometry kind (AREA, AREAS, LINE), or null when omitted.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "parts": {
        +          "description": "Separate rings or lines, never flattened into connecting edges.",
        +          "items": {
        +            "description": "One intact source ring or line.",
        +            "items": {
        +              "additionalProperties": false,
        +              "description": "A polygon vertex as a lat/lon coordinate pair.",
        +              "properties": {
        +                "lat": {
        +                  "description": "Latitude in decimal degrees.",
        +                  "type": "number"
        +                },
        +                "lon": {
        +                  "description": "Longitude in decimal degrees.",
        +                  "type": "number"
        +                }
        +              },
        +              "required": [
        +                "lat",
        +                "lon"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "kind",
        +        "parts"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Decoded source geometry, or null when no complete coordinates can be decoded."
        +}
      • changedOutput schema / properties / advisories / items / properties / hazard / description
        Previous value: -"Hazard type — one of CONVECTIVE, TURBULENCE, ICING, or IFR."New value: +"Source-native hazard type, or null when omitted."
      • changedOutput schema / properties / advisories / items / properties / hazard / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / advisories / items / properties / issued_by / description
        Previous value: -"ICAO ID of the issuing meteorological watch office."New value: +"Issuing office ICAO ID or CWSU code; null when omitted."
      • changedOutput schema / properties / advisories / items / properties / issued_by / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / advisories / items / properties / movement / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "direction_deg": {
        -        "description": "Movement direction in degrees true, or null if stationary.",
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "speed_kt": {
        -        "description": "Movement speed in knots, or null if stationary.",
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "direction_deg",
        -      "speed_kt"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "direction_deg": {
        +        "description": "Domestic source movement direction in degrees true (FROM semantics); null when omitted or international.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "direction_text": {
        +        "description": "International source-native direction text, without converting to domestic FROM-angle semantics; null when omitted.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "speed_kt": {
        +        "description": "Decoded movement speed in knots, or null when omitted.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      }
        +    },
        +    "required": [
        +      "direction_deg",
        +      "speed_kt"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / advisories / items / properties / polygon / anyOf
        Added value: +[
        +  {
        +    "items": {
        +      "additionalProperties": false,
        +      "description": "A polygon vertex as a lat/lon coordinate pair.",
        +      "properties": {
        +        "lat": {
        +          "description": "Latitude in decimal degrees.",
        +          "type": "number"
        +        },
        +        "lon": {
        +          "description": "Longitude in decimal degrees.",
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "lat",
        +        "lon"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / advisories / items / properties / polygon / description
        Previous value: -"Geographic boundary of the advisory as a polygon of lat/lon points."New value: +"Single-area compatibility boundary; null for multipart, line or missing geometry."
      • removedOutput schema / properties / advisories / items / properties / polygon / items
        Removed value: -{
        -  "additionalProperties": false,
        -  "description": "A polygon vertex as a lat/lon coordinate pair.",
        -  "properties": {
        -    "lat": {
        -      "description": "Latitude in decimal degrees.",
        -      "type": "number"
        -    },
        -    "lon": {
        -      "description": "Longitude in decimal degrees.",
        -      "type": "number"
        -    }
        -  },
        -  "required": [
        -    "lat",
        -    "lon"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / advisories / items / properties / polygon / type
        Removed value: -"array"
      • addedOutput schema / properties / advisories / items / properties / qualifier
        Added value: +{
        +  "description": "Source-native hazard qualifier, or null when omitted.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / advisories / items / properties / raw_text / description
        Previous value: -"Original encoded SIGMET text as issued by the meteorological watch office."New value: +"Original bulletin text, preserving line breaks and blank lines; null when omitted."
      • changedOutput schema / properties / advisories / items / properties / raw_text / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / advisories / items / properties / series_id / description
        Previous value: -"Unique advisory identifier (e.g., BOSMA0)."New value: +"Advisory series identifier, or null when omitted."
      • changedOutput schema / properties / advisories / items / properties / series_id / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • addedOutput schema / properties / advisories / items / properties / source
        Added value: +{
        +  "description": "Independent source product.",
        +  "enum": [
        +    "sigmet",
        +    "isigmet",
        +    "cwa"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / properties / advisories / items / properties / valid_from / description
        Previous value: -"Advisory validity start time in ISO 8601 format (UTC)."New value: +"Advisory validity start time in ISO 8601 format (UTC), or null when omitted."
      • changedOutput schema / properties / advisories / items / properties / valid_from / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / advisories / items / properties / valid_to / description
        Previous value: -"Advisory validity end time in ISO 8601 format (UTC)."New value: +"Advisory validity end time in ISO 8601 format (UTC), or null when omitted."
      • changedOutput schema / properties / advisories / items / properties / valid_to / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / advisories / items / required
        Previous value: -[
        -  "advisory_type",
        -  "series_id",
        -  "hazard",
        -  "severity",
        -  "issued_by",
        -  "valid_from",
        -  "valid_to",
        -  "altitude_low_ft",
        -  "altitude_high_ft",
        -  "movement",
        -  "polygon",
        -  "raw_text"
        -]New value: +[
        +  "advisory_type",
        +  "source",
        +  "series_id",
        +  "hazard",
        +  "severity",
        +  "issued_by",
        +  "fir_id",
        +  "fir_name",
        +  "qualifier",
        +  "valid_from",
        +  "valid_to",
        +  "altitude_low_ft",
        +  "altitude_high_ft",
        +  "movement",
        +  "polygon",
        +  "geometry",
        +  "raw_text"
        +]
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "description": "Coverage of selected sources, independent of bbox and limit.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "One selected source coverage result.",
        +    "properties": {
        +      "drawn": {
        +        "description": "Decoded rows after product/hazard selection, before bbox; null for failed or not_applicable sources.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "message": {
        +        "description": "Source failure, skipped-row or applicability explanation.",
        +        "type": "string"
        +      },
        +      "source": {
        +        "description": "Selected source product.",
        +        "enum": [
        +          "sigmet",
        +          "isigmet",
        +          "cwa"
        +        ],
        +        "type": "string"
        +      },
        +      "status": {
        +        "description": "Readable response, unavailable response or unsupported source/hazard pair.",
        +        "enum": [
        +          "ok",
        +          "failed",
        +          "not_applicable"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "source",
        +      "status",
        +      "drawn"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / drawn
        Added value: +{
        +  "description": "With bbox: decoded rows after product/hazard, before geographic filtering; successful sources only.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_bbox`: The bounding box is inverted — minLat > maxLat or minLon > maxLon. `airmet_not_served`: advisory_type \"airmet\" was requested, or a hazard filter naming an AIRMET-family phenomenon (MTN OBSCN, SURFACE WIND, LLWS) with no counterpart on the SIGMET feed. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_bbox`: The bounding box is inverted — minLat > maxLat or minLon > maxLon. `airmet_not_served`: advisory_type \"airmet\" was requested, or an unsupported AIRMET-family hazard (MTN OBSCN, SURFACE WIND, LLWS). `hazard_not_supported`: No selected source supports the hazard. `advisory_sources_failed`: Every applicable source failed or was unreadable. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "invalid_bbox",
        -  "airmet_not_served"
        -]New value: +[
        +  "invalid_bbox",
        +  "airmet_not_served",
        +  "hazard_not_supported",
        +  "advisory_sources_failed"
        +]
      • addedOutput schema / properties / matched
        Added value: +{
        +  "description": "With bbox: rows intersecting any geometry part, before limit.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"Present only when the result is empty, naming the stage that emptied it: no domestic SIGMETs are active at all, none carry the requested hazard, or none intersect the requested bbox — and which filter to broaden. A hazard-scoped empty draw states only that no advisory carries that hazard; AWC applies the hazard filter, so the response cannot say whether other classes are active."New value: +"Coverage-scoped empty, bbox-removal or explicit-limit explanation and recovery. Failed sources never establish zero coverage."
      • addedOutput schema / properties / partial
        Added value: +{
        +  "description": "True when a source failed or unreadable rows were skipped; no complete-coverage claim is possible.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / returned
        Added value: +{
        +  "description": "With bbox or explicit limit: rows returned after limit.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / total
        Added value: +{
        +  "description": "With explicit limit: all available matches before limiting.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "With explicit limit: whether matches were withheld. Omit or raise limit to retrieve them.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / unlocated
        Added value: +{
        +  "description": "With bbox: drawn rows lacking decoded geometry; not known to be outside the box.",
        +  "type": "number"
        +}
    • Changedaviation_get_metar2 fields changed
      • changedInput schema / properties / station_ids / items / description
        Previous value: -"ICAO station ID: 4 uppercase letters or digits (e.g., KSEA, KJFK, K0S9)."New value: +"ICAO station ID: 4 ASCII letters or digits, case-insensitive and normalized to uppercase (e.g., KSEA, KJFK, K0S9)."
      • changedInput schema / properties / station_ids / items / pattern
        Previous value: -"^[A-Z0-9]{4}$"New value: +"^[A-Za-z0-9]{4}$"
    • Changedaviation_get_pireps2 fields changed
      • changedInput schema / properties / station_id / description
        Previous value: -"ICAO station ID as center point for radial search — 4 uppercase letters or digits (e.g., KSEA, K0S9). Use with distance_nm."New value: +"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."
      • changedInput schema / properties / station_id / pattern
        Previous value: -"^[A-Z0-9]{4}$"New value: +"^[A-Za-z0-9]{4}$"
    • Changedaviation_get_taf2 fields changed
      • changedInput schema / properties / station_ids / items / description
        Previous value: -"ICAO station ID: 4 uppercase letters or digits (e.g., KSEA, KJFK, K36U)."New value: +"ICAO station ID: 4 ASCII letters or digits, case-insensitive and normalized to uppercase (e.g., KSEA, KJFK, K36U)."
      • changedInput schema / properties / station_ids / items / pattern
        Previous value: -"^[A-Z0-9]{4}$"New value: +"^[A-Za-z0-9]{4}$"
  4. 3 tool updates
    • Changedaviation_find_stations2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `station_not_found`: None of the requested IDs match any known station. `missing_search_criteria`: None of station_ids, bbox, or state was provided. `conflicting_location`: More than one of station_ids, bbox, or state was provided. `invalid_bbox`: The bounding box is inverted — minLat > maxLat or minLon > maxLon. `invalid_state`: The state code is not one of the 50 US states or DC. `conflicting_limit`: limit was provided together with station_ids, where the caller has already named the set. `upstream_rejected`: The AWC station registry rejected the request as malformed rather than answering it. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `station_not_found`: None of the requested IDs match any known station, or the bbox or state search found none. `missing_search_criteria`: None of station_ids, bbox, or state was provided. `conflicting_location`: More than one of station_ids, bbox, or state was provided. `invalid_bbox`: The bounding box is inverted — minLat > maxLat or minLon > maxLon. `invalid_state`: The state code is not one of the 50 US states or DC. `conflicting_limit`: limit was provided together with station_ids, where the caller has already named the set. `upstream_rejected`: The AWC station registry rejected the request as malformed rather than answering it. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance for whichever disclosures fired: the lever that narrows a truncated draw, what a requested limit withheld, or the cause and fix for identifiers that resolved to nothing. The cap and the limit can both fire on one result, and the text keeps them apart; the reconciliation cannot join them, since only bbox and state reach the row cap or accept a limit, and only station_ids reconciles a request."New value: +"Guidance for whichever disclosures fired: the lever that narrows a truncated draw, what a requested limit withheld, that limit bounds the response without changing the area searched (on a bbox or state result of more than 130 stations from a call that set no limit), or the cause and fix for identifiers that resolved to nothing. The cap and either limit statement can fire on one result, and the text keeps them apart; the reconciliation cannot join them, since only bbox and state reach the row cap or take a limit, and only station_ids reconciles a request."
    • Changedaviation_get_metar8 fields changed
      • addedInput schema / properties / flight_category
        Added value: +{
        +  "description": "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 station and before limit, so it changes which stations come back, not what AWC draws or the upstream row cap. A station AWC could not rate (flight_category \"unknown\") never matches. Belongs to the bbox mode; supplying it alongside station_ids is rejected, since each named station already reports its own category. Optional.",
        +  "items": {
        +    "description": "A flight category: VFR, MVFR, IFR, or LIFR.",
        +    "enum": [
        +      "VFR",
        +      "MVFR",
        +      "IFR",
        +      "LIFR"
        +    ],
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum stations to return, applied after the draw is reduced to the latest observation per station and ordered by station ID ascending — so the same query with the same limit returns the same stations. It bounds the response without changing the area searched, which a smaller bbox would. Distinct from the 400-row upstream cap: a limited result examined every station it counted and withheld some, while a capped one never drew the rest. Belongs to the bbox mode; supplying it alongside station_ids is rejected, since that mode already names the set. Omit to return every station in the box. Optional."New value: +"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 the same limit returns the same stations. It bounds the response without changing the area searched, which a smaller bbox would, and it keeps an alphabetical slice rather than a region or a condition. Distinct from the 400-row upstream cap: a limited result examined every station it counted and withheld some, while a capped one never drew the rest. Belongs to the bbox mode; supplying it alongside station_ids is rejected, since that mode already names the set. Omit to return every station in the box. Optional."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `no_stations_found`: No station returned METAR data — none of the requested IDs, or no station inside the bounding box. `missing_location`: Neither station_ids nor bbox was provided. `conflicting_location`: Both station_ids and bbox were provided. `invalid_bbox`: The bounding box is inverted — minLat > maxLat or minLon > maxLon. `conflicting_limit`: limit was provided together with station_ids, where the caller has already named the set. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_stations_found`: No station returned METAR data — none of the requested IDs, or no station inside the bounding box. `missing_location`: Neither station_ids nor bbox was provided. `conflicting_location`: Both station_ids and bbox were provided. `invalid_bbox`: The bounding box is inverted — minLat > maxLat or minLon > maxLon. `conflicting_limit`: limit was provided together with station_ids, where the caller has already named the set. `conflicting_flight_category`: flight_category was provided together with station_ids, where the caller has already named the set. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "no_stations_found",
        -  "missing_location",
        -  "conflicting_location",
        -  "invalid_bbox",
        -  "conflicting_limit"
        -]New value: +[
        +  "no_stations_found",
        +  "missing_location",
        +  "conflicting_location",
        +  "invalid_bbox",
        +  "conflicting_limit",
        +  "conflicting_flight_category"
        +]
      • changedOutput schema / properties / matched / description
        Previous value: -"Stations the draw held before the limit selected from them. Present only on a limited result. Where the result is also truncated this counts the capped draw and not the box — the observations the cap dropped were never examined, so no count can include them."New value: +"Stations the draw held before the limit selected from them — after the flight_category filter, where one was supplied. Present only on a limited result. Where the result is also truncated this counts the capped draw and not the box — the observations the cap dropped were never examined, so no count can include them."
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance for whichever disclosures fired: the levers that narrow a truncated draw, what a requested limit withheld, or the station IDs that returned nothing. The cap and the limit can both fire on one result, and the text keeps them apart; the reconciliation cannot join them, since only bbox reaches the row cap or accepts a limit, and only station_ids reconciles a request."New value: +"Guidance for whichever disclosures fired, in this order: the levers that narrow a truncated draw; what the flight_category filter kept of the stations surveyed, or that it emptied the result; what a requested limit withheld; and — on a survey of more than 40 stations from a call that set no limit — that limit bounds the response but keeps an alphabetical slice, not a region. Or, on a station_ids lookup, the station IDs that returned nothing. The survey statements share one notice and the text keeps them apart; the reconciliation cannot join them, since only bbox reaches the row cap or takes a filter or a limit, and only station_ids reconciles a request."
      • changedOutput schema / properties / shown / description
        Previous value: -"Stations in this result, counted after the reduction to one observation per station and after any limit. Present only on a bbox survey."New value: +"Stations in this result, counted after the reduction to one observation per station, after any flight_category filter, and after any limit. Present only on a bbox survey."
      • addedOutput schema / properties / surveyed
        Added value: +{
        +  "description": "Stations the survey reached — one per station, the latest observation of each — before the flight_category filter selected from them. Present only when a bbox survey supplied flight_category; the count after the filter is shown, or matched where a limit then withheld stations. Where the result is also truncated this counts the capped draw and not the box.",
        +  "type": "number"
        +}
    • Changedaviation_get_pireps7 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"
        +]
  5. 4 tool updates
    • Changedaviation_find_stations2 fields changed
      • changedInput schema / properties / station_ids / description
        Previous value: -"One or more station identifiers (e.g., KSEA, KJFK). A lookup matches the registry's own identifier: a 4-letter ICAO ID for an airport, and other shapes for the buoys and mesonet sites the registry also carries, which resolve by those. A 3-letter IATA code (e.g., SEA) never resolves, even for a station whose entry carries one. Whitespace around an entry is trimmed, so a padded identifier resolves the same as the bare one; an empty or whitespace-only entry is rejected. Use bbox or state to discover identifiers by location."New value: +"One or more station identifiers (e.g., KSEA, KJFK). A lookup matches the registry's own identifier: a 4-character ICAO ID for an airport (e.g., KSEA, K0S9), and other shapes for the buoys and mesonet sites the registry also carries, which resolve by those. A 3-letter IATA code (e.g., SEA) never resolves, even for a station whose entry carries one. Whitespace around an entry is trimmed, so a padded identifier resolves the same as the bare one; an empty or whitespace-only entry is rejected. Use bbox or state to discover identifiers by location."
      • changedOutput schema / properties / stations / items / properties / icao_id / description
        Previous value: -"ICAO 4-letter station ID, or null if not assigned."New value: +"ICAO station ID, 4 uppercase letters or digits (e.g., KSEA, K0S9), or null if not assigned."
    • Changedaviation_get_metar24 fields changed
      • addedInput schema / properties / bbox
        Added value: +{
        +  "description": "Geographic bounding box for an area observation survey.",
        +  "properties": {
        +    "maxLat": {
        +      "description": "Northern boundary latitude in decimal degrees.",
        +      "maximum": 90,
        +      "minimum": -90,
        +      "type": "number"
        +    },
        +    "maxLon": {
        +      "description": "Eastern boundary longitude in decimal degrees.",
        +      "maximum": 180,
        +      "minimum": -180,
        +      "type": "number"
        +    },
        +    "minLat": {
        +      "description": "Southern boundary latitude in decimal degrees.",
        +      "maximum": 90,
        +      "minimum": -90,
        +      "type": "number"
        +    },
        +    "minLon": {
        +      "description": "Western boundary longitude in decimal degrees.",
        +      "maximum": 180,
        +      "minimum": -180,
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "minLat",
        +    "minLon",
        +    "maxLat",
        +    "maxLon"
        +  ],
        +  "type": "object"
        +}
      • changedInput schema / properties / hours / description
        Previous value: -"Lookback window in hours (1–12), not a row limit: every observation inside the window is returned, so a station reporting more often than hourly yields more than one row per hour. At the default of 1, half-hourly stations return two observations and SPECI-issuing stations can return more. Budget rows by the station reporting interval, never one per station."New value: +"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: at the default of 1, half-hourly stations return two observations and SPECI-issuing stations can return more, so budget rows by the station reporting interval, never one per station. With bbox the result is reduced to the latest observation per station, but the window still shapes the draw the upstream row cap applies to — a wide window spends that cap on repeat readings from busy stations instead of on more stations, so lower it before narrowing the box."
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Maximum stations to return, applied after the draw is reduced to the latest observation per station and ordered by station ID ascending — so the same query with the same limit returns the same stations. It bounds the response without changing the area searched, which a smaller bbox would. Distinct from the 400-row upstream cap: a limited result examined every station it counted and withheld some, while a capped one never drew the rest. Belongs to the bbox mode; supplying it alongside station_ids is rejected, since that mode already names the set. Omit to return every station in the box. Optional.",
        +  "maximum": 400,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedInput schema / properties / station_ids / description
        Previous value: -"ICAO station IDs to query. 1–10 stations per call."New value: +"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 than a named set."
      • changedInput schema / properties / station_ids / items / description
        Previous value: -"4-letter ICAO station ID (e.g., KSEA, KJFK)."New value: +"ICAO station ID: 4 uppercase letters or digits (e.g., KSEA, KJFK, K0S9)."
      • changedInput schema / properties / station_ids / items / pattern
        Previous value: -"^[A-Z]{4}$"New value: +"^[A-Z0-9]{4}$"
      • removedInput schema / required
        Removed value: -[
        -  "station_ids"
        -]
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "observations",
        -      "requested",
        -      "returned",
        -      "partial"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "observations"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / cap
        Added value: +{
        +  "description": "The upstream row maximum that was applied to the draw. Present only on a truncated result.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `no_stations_found`: None of the requested station IDs returned METAR data. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_stations_found`: No station returned METAR data — none of the requested IDs, or no station inside the bounding box. `missing_location`: Neither station_ids nor bbox was provided. `conflicting_location`: Both station_ids and bbox were provided. `invalid_bbox`: The bounding box is inverted — minLat > maxLat or minLon > maxLon. `conflicting_limit`: limit was provided together with station_ids, where the caller has already named the set. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "no_stations_found"
        -]New value: +[
        +  "no_stations_found",
        +  "missing_location",
        +  "conflicting_location",
        +  "invalid_bbox",
        +  "conflicting_limit"
        +]
      • addedOutput schema / properties / limited
        Added value: +{
        +  "description": "True when the requested limit withheld stations that matched — the caller asked to see fewer of them. False affirms the limit did not bite, so every station drawn is here. Present only when a bbox survey supplied a limit. It never states anything about the upstream cap: a limited result examined every station it counted, while a truncated one never drew the rest.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / matched
        Added value: +{
        +  "description": "Stations the draw held before the limit selected from them. Present only on a limited result. Where the result is also truncated this counts the capped draw and not the box — the observations the cap dropped were never examined, so no count can include them.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"Recovery guidance naming the missing station IDs. Present only on a partial result. It lists the candidate causes without asserting one — upstream omits the row either way."New value: +"Guidance for whichever disclosures fired: the levers that narrow a truncated draw, what a requested limit withheld, or the station IDs that returned nothing. The cap and the limit can both fire on one result, and the text keeps them apart; the reconciliation cannot join them, since only bbox reaches the row cap or accepts a limit, and only station_ids reconciles a request."
      • changedOutput schema / properties / observations / description
        Previous value: -"Weather observations, one per station/time pair. Multiple entries per station when hours > 1."New value: +"Weather observations. With station_ids, one per station/time pair — multiple entries per station when the hours window holds more than one observation. With bbox, one per station: the latest observation inside that window."
      • changedOutput schema / properties / observations / items / properties / clouds / description
        Previous value: -"All reported cloud layers from lowest to highest. Empty whenever the observation published no layer heights, which covers a clear sky, an obscuration with no determinable height, and an observation that reported no sky condition at all; sky_condition distinguishes them. An empty array is not a clear sky on its own."New value: +"Cloud layers from lowest to highest, as AWC decoded them — at most four, so a fifth or higher reported layer is left out with no marker and raw_metar is the complete source. Empty whenever the observation published no layer heights, which covers a clear sky, an obscuration with no determinable height, and an observation that reported no sky condition at all; sky_condition distinguishes them. An empty array is not a clear sky on its own."
      • changedOutput schema / properties / observations / items / properties / station_id / description
        Previous value: -"ICAO 4-letter station identifier (e.g., KSEA)."New value: +"ICAO station identifier, 4 uppercase letters or digits (e.g., KSEA, K0S9)."
      • changedOutput schema / properties / observations / items / properties / wind / properties / direction_deg / description
        Previous value: -"Wind direction in degrees true. Null when variable."New value: +"Wind direction in degrees true. Null when the observation reported a variable wind (VRB), and also when it carried no wind group at all — speed_kt is a number in the first case and null in the second."
      • changedOutput schema / properties / partial / description
        Previous value: -"True when a requested station produced no observation. False affirms the result covers every requested station, so full coverage is distinguishable from a short batch rather than being inferred from the count."New value: +"True when a requested station produced no observation. False affirms the result covers every requested station, so full coverage is distinguishable from a short batch rather than being inferred from the count. Present only on a station_ids lookup."
      • changedOutput schema / properties / requested / description
        Previous value: -"Station IDs this call asked for, in the order given."New value: +"Station IDs this call asked for, in the order given. Present only on a station_ids lookup — a bbox survey asks for an area, not a list."
      • changedOutput schema / properties / returned / description
        Previous value: -"Distinct station IDs that produced at least one observation. Counted per station, not per row — with hours > 1 a station reporting six times still appears once."New value: +"Distinct station IDs that produced at least one observation. Counted per station, not per row — with hours > 1 a station reporting six times still appears once. Present only on a station_ids lookup."
      • addedOutput schema / properties / shown
        Added value: +{
        +  "description": "Stations in this result, counted after the reduction to one observation per station and after any limit. Present only on a bbox survey.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True when the upstream draw hit the AWC row cap, so stations inside the box are missing from this result. False says the draw did not reach that cap, which a count alone cannot establish — the draw is reduced to one row per station, so the returned count sits far below the cap either way. It is not a completeness claim: AWC also thins a dense box by station priority, independently of the cap and with nothing in the response to mark it, so re-run over smaller quadrants and union the results when the box must be complete. Present only on a bbox survey.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / upstreamRows
        Added value: +{
        +  "description": "Observations AWC returned before the reduction to one row per station. Present only on a truncated draw the reduction then narrowed, where the station count sits below the cap and so cannot reveal the truncation on its own.",
        +  "type": "number"
        +}
    • Changedaviation_get_pireps10 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"
        +]
    • Changedaviation_get_taf6 fields changed
      • changedInput schema / properties / station_ids / items / description
        Previous value: -"4-letter ICAO station ID (e.g., KSEA, KJFK)."New value: +"ICAO station ID: 4 uppercase letters or digits (e.g., KSEA, KJFK, K36U)."
      • changedInput schema / properties / station_ids / items / pattern
        Previous value: -"^[A-Z]{4}$"New value: +"^[A-Z0-9]{4}$"
      • changedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / clouds / description
        Previous value: -"Forecast cloud layers for this period. Empty whenever the period published no layer heights, which covers a forecast clear sky and a period carrying no cloud element at all; sky_condition distinguishes them. An empty array is not a forecast of a clear sky on its own."New value: +"Forecast cloud layers for this period, as AWC decoded them — at most three, so a further layer is left out of this array and its text surfaces in not_decoded, with raw_taf the complete source. Empty whenever the period published no layer heights, which covers a forecast clear sky and a period carrying no cloud element at all; sky_condition distinguishes them. An empty array is not a forecast of a clear sky on its own."
      • addedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / not_decoded
        Added value: +{
        +  "description": "Text AWC attached to this period without decoding it, trimmed — usually a cloud layer past the three-layer decode limit, sometimes another group such as VV///. Null when nothing was left undecoded. Non-null marks a partial decode. Upstream can attach the leftover of one group, such as a TEMPO, to the period after it, so the text is published on the period it arrived on and never reassigned or parsed into clouds; raw_taf is the complete forecast.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / forecasts / items / properties / forecast_periods / items / required
        Previous value: -[
        -  "from",
        -  "to",
        -  "change_type",
        -  "probability",
        -  "wind",
        -  "wind_shear",
        -  "visibility_sm",
        -  "vertical_visibility_ft",
        -  "weather",
        -  "clouds",
        -  "sky_condition"
        -]New value: +[
        +  "from",
        +  "to",
        +  "change_type",
        +  "probability",
        +  "wind",
        +  "wind_shear",
        +  "visibility_sm",
        +  "vertical_visibility_ft",
        +  "weather",
        +  "clouds",
        +  "sky_condition",
        +  "not_decoded"
        +]
      • changedOutput schema / properties / forecasts / items / properties / station_id / description
        Previous value: -"ICAO 4-letter station identifier (e.g., KSEA)."New value: +"ICAO station identifier, 4 uppercase letters or digits (e.g., KSEA, K36U)."
  6. 2 tool updates
    • Changedaviation_find_stations10 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "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 rather than unidentified sites lead the first page. It bounds the response without changing the area searched, which a smaller bbox or a different state would. Distinct from the 400-row upstream cap: a limited result examined every station it counted and withheld some, while a capped one never drew the rest. Belongs to the bbox and state modes; supplying it alongside station_ids is rejected, since that mode already names the set. Omit to return every match. Optional.",
        +  "maximum": 400,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedInput schema / properties / station_ids / description
        Previous value: -"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."New value: +"One or more station identifiers (e.g., KSEA, KJFK). A lookup matches the registry's own identifier: a 4-letter ICAO ID for an airport, and other shapes for the buoys and mesonet sites the registry also carries, which resolve by those. A 3-letter IATA code (e.g., SEA) never resolves, even for a station whose entry carries one. Whitespace around an entry is trimmed, so a padded identifier resolves the same as the bare one; an empty or whitespace-only entry is rejected. Use bbox or state to discover identifiers by location."
      • changedInput schema / properties / station_ids / items / description
        Previous value: -"A 4-letter ICAO station identifier (e.g., KSEA)."New value: +"One station identifier (e.g., KSEA)."
      • addedInput schema / properties / station_ids / items / pattern
        Added value: +"\\S"
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `station_not_found`: None of the requested IDs match any known station. `missing_search_criteria`: None of station_ids, bbox, or state was provided. `conflicting_location`: More than one of station_ids, bbox, or state was provided. `invalid_bbox`: The bounding box is inverted — minLat > maxLat or minLon > maxLon. `invalid_state`: The state code is not one of the 50 US states or DC. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `station_not_found`: None of the requested IDs match any known station. `missing_search_criteria`: None of station_ids, bbox, or state was provided. `conflicting_location`: More than one of station_ids, bbox, or state was provided. `invalid_bbox`: The bounding box is inverted — minLat > maxLat or minLon > maxLon. `invalid_state`: The state code is not one of the 50 US states or DC. `conflicting_limit`: limit was provided together with station_ids, where the caller has already named the set. `upstream_rejected`: The AWC station registry rejected the request as malformed rather than answering it. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "station_not_found",
        -  "missing_search_criteria",
        -  "conflicting_location",
        -  "invalid_bbox",
        -  "invalid_state"
        -]New value: +[
        +  "station_not_found",
        +  "missing_search_criteria",
        +  "conflicting_location",
        +  "invalid_bbox",
        +  "invalid_state",
        +  "conflicting_limit",
        +  "upstream_rejected"
        +]
      • addedOutput schema / properties / limited
        Added value: +{
        +  "description": "True when the requested limit withheld stations that matched — the caller asked to see fewer of them. False affirms the limit did not bite, so every matching station is here. Present only when the call supplied a limit. It never states anything about the upstream cap: a limited result examined every station it counted, while a truncated one never drew the rest.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / matched
        Added value: +{
        +  "description": "Stations 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 draw and not the search area — the stations the cap dropped were never examined, so no count can include them.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance for whichever disclosure fired: the lever that narrows a truncated draw, or the cause and fix for identifiers that resolved to nothing. The two cannot co-occur — only bbox and state can reach the row cap, and only station_ids reconciles a request."New value: +"Guidance for whichever disclosures fired: the lever that narrows a truncated draw, what a requested limit withheld, or the cause and fix for identifiers that resolved to nothing. The cap and the limit can both fire on one result, and the text keeps them apart; the reconciliation cannot join them, since only bbox and state reach the row cap or accept a limit, and only station_ids reconciles a request."
      • changedOutput schema / properties / shown / description
        Previous value: -"Stations in this result, counted after any client-side state filter."New value: +"Stations in this result, counted after any client-side state filter and after any limit."
    • Changedaviation_get_pireps5 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."
  7. 1 tool update
    • Changedaviation_get_advisories2 fields changed
      • changedInput schema / properties / hazard / description
        Previous value: -"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."New value: +"Optional hazard filter, applied upstream by AWC. CONVECTIVE, TURBULENCE, ICING, and IFR are the four hazard classes the domestic SIGMET feed carries, and an empty result under one of them means no advisory of that class is active — it says nothing about the others. MTN OBSCN, SURFACE WIND, and LLWS are AIRMET-family phenomena with no upstream counterpart here and are rejected rather than returning an empty result."
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Present only when the result is empty, naming the stage that emptied it: no domestic SIGMETs are active at all, none carry the requested hazard, or none intersect the requested bbox — and which filter to broaden. A hazard-scoped empty draw states only that no advisory carries that hazard; AWC applies the hazard filter, so the response cannot say whether other classes are active.",
        +  "type": "string"
        +}
  8. 3 tool updates
    • Changedaviation_find_stations5 fields changed
      • addedOutput schema / properties / missing
        Added value: +{
        +  "description": "Requested identifiers absent from the result. Deduplicated the way returned is: a repeated or differently-cased identifier appears once, under its first spelling. Absent when none are missing.",
        +  "items": {
        +    "description": "A requested identifier that resolved to no station.",
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance naming the lever that narrows the draw. Present only on a truncated result."New value: +"Guidance for whichever disclosure fired: the lever that narrows a truncated draw, or the cause and fix for identifiers that resolved to nothing. The two cannot co-occur — only bbox and state can reach the row cap, and only station_ids reconciles a request."
      • addedOutput schema / properties / partial
        Added value: +{
        +  "description": "True when a requested identifier resolved to nothing. False affirms every requested identifier resolved, which a count cannot establish — upstream case-folds and deduplicates, so a shorter list is not itself a gap. Present only on a station_ids lookup.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / requested
        Added value: +{
        +  "description": "Station identifiers this call asked for, spelled as the caller wrote them and in the order given. Present only on a station_ids lookup — the bbox and state modes ask for an area, not a list.",
        +  "items": {
        +    "description": "A station identifier as requested.",
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / returned
        Added value: +{
        +  "description": "Requested identifiers that resolved, spelled as the caller wrote them rather than as upstream returned them. Deduplicated the way upstream deduplicates: a repeated or differently-cased identifier appears once, under its first spelling. Present only on a station_ids lookup.",
        +  "items": {
        +    "description": "A requested identifier that resolved to a station.",
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedaviation_get_metar6 fields changed
      • changedInput schema / properties / hours / description
        Previous value: -"Hours of observation history to return (1–12). Default 1 returns only the most recent observation per station."New value: +"Lookback window in hours (1–12), not a row limit: every observation inside the window is returned, so a station reporting more often than hourly yields more than one row per hour. At the default of 1, half-hourly stations return two observations and SPECI-issuing stations can return more. Budget rows by the station reporting interval, never one per station."
      • changedOutput schema / properties / observations / items / properties / ceiling_ft / description
        Previous value: -"Ceiling in feet AGL — the lowest broken, overcast, or obscuration layer. Per FAA AIM 7-1-29 the ceiling is the lowest broken or overcast layer, or the vertical visibility into an obscuration; few and scattered layers are never ceilings. Null when the observation reported no such layer."New value: +"Ceiling in feet AGL — the lowest broken, overcast, or obscuration layer. Per FAA AIM 7-1-29 the ceiling is the lowest broken or overcast layer, or the vertical visibility into an obscuration; few and scattered layers are never ceilings. Null in two cases that are not the same: the observation reported no such layer, or it reported an obscuration whose vertical visibility the station could not determine (a VV/// group), where the ceiling exists and only its height is missing. A sky_condition of OVX marks the second."
      • changedOutput schema / properties / observations / items / properties / clouds / description
        Previous value: -"All reported cloud layers from lowest to highest."New value: +"All reported cloud layers from lowest to highest. Empty whenever the observation published no layer heights, which covers a clear sky, an obscuration with no determinable height, and an observation that reported no sky condition at all; sky_condition distinguishes them. An empty array is not a clear sky on its own."
      • addedOutput schema / properties / observations / items / properties / sky_condition
        Added value: +{
        +  "description": "The sky condition the observation stated when it published no layer heights: CLR, SKC, or CAVOK for a clear or insignificant-cloud report, OVX for an obscuration whose layer carried no height (a VV/// group, and the opposite of clear). Null when clouds carries layers — those are the statement — and also when the observation carried no sky-condition group at all. An empty clouds array beside a null here is an unreported sky, never a clear one.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / observations / items / properties / visibility_sm / description
        Previous value: -"Prevailing visibility in statute miles (e.g., \"10+\", \"3\", \"1/2\")."New value: +"Prevailing visibility in statute miles (e.g., \"10+\", \"3\", \"1/2\"), or the string \"unknown\" when the observation carried no visibility group. \"unknown\" is not a measurement and carries no unit."
      • changedOutput schema / properties / observations / items / required
        Previous value: -[
        -  "station_id",
        -  "name",
        -  "lat",
        -  "lon",
        -  "elevation_ft",
        -  "flight_category",
        -  "metar_type",
        -  "observed_at",
        -  "wind",
        -  "visibility_sm",
        -  "ceiling_ft",
        -  "ceiling_type",
        -  "clouds",
        -  "present_weather",
        -  "temp_c",
        -  "dewpoint_c",
        -  "altimeter_inhg",
        -  "raw_metar"
        -]New value: +[
        +  "station_id",
        +  "name",
        +  "lat",
        +  "lon",
        +  "elevation_ft",
        +  "flight_category",
        +  "metar_type",
        +  "observed_at",
        +  "wind",
        +  "visibility_sm",
        +  "ceiling_ft",
        +  "ceiling_type",
        +  "clouds",
        +  "sky_condition",
        +  "present_weather",
        +  "temp_c",
        +  "dewpoint_c",
        +  "altimeter_inhg",
        +  "raw_metar"
        +]
    • Changedaviation_get_taf4 fields changed
      • changedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / change_type / description
        Previous value: -"Change indicator: FM (from), TEMPO (temporary), BECMG (becoming), or null for the base period."New value: +"Change indicator: FM (from), TEMPO (temporary), BECMG (becoming), PROB (a standalone probability group), or null for the base period. A PROB30 or PROB40 qualifying a temporary group arrives as TEMPO; standing alone, with no temporary group after it, it arrives as PROB. Either way the percentage is in probability."
      • changedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / clouds / description
        Previous value: -"Forecast cloud layers for this period."New value: +"Forecast cloud layers for this period. Empty whenever the period published no layer heights, which covers a forecast clear sky and a period carrying no cloud element at all; sky_condition distinguishes them. An empty array is not a forecast of a clear sky on its own."
      • addedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / sky_condition
        Added value: +{
        +  "description": "The sky condition this period forecast when it published no layer heights: SKC or NSC for a clear or insignificant-cloud forecast (a CAVOK group arrives as NSC), OVX for a forecast obscuration carrying no vertical visibility. Null when clouds carries layers — those are the statement — and also when the period carried no cloud element at all. An empty clouds array beside a null here forecasts nothing about cloud; on a TEMPO, PROB, or BECMG group that means the prevailing forecast stands unchanged, never that the sky will be clear.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / forecasts / items / properties / forecast_periods / items / required
        Previous value: -[
        -  "from",
        -  "to",
        -  "change_type",
        -  "probability",
        -  "wind",
        -  "wind_shear",
        -  "visibility_sm",
        -  "vertical_visibility_ft",
        -  "weather",
        -  "clouds"
        -]New value: +[
        +  "from",
        +  "to",
        +  "change_type",
        +  "probability",
        +  "wind",
        +  "wind_shear",
        +  "visibility_sm",
        +  "vertical_visibility_ft",
        +  "weather",
        +  "clouds",
        +  "sky_condition"
        +]
  9. 5 tool updates
    • Changedaviation_find_stations8 fields changed
      • removedOutput schema / properties / stations / items / properties / elevation_ft / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / stations / items / properties / elevation_ft / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / stations / items / properties / faa_id / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / stations / items / properties / faa_id / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / stations / items / properties / iata_id / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / stations / items / properties / iata_id / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / stations / items / properties / icao_id / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / stations / items / properties / icao_id / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedaviation_get_advisories7 fields changed
      • removedOutput schema / properties / advisories / items / properties / altitude_high_ft / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / advisories / items / properties / altitude_high_ft / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / advisories / items / properties / altitude_low_ft / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / advisories / items / properties / altitude_low_ft / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / advisories / items / properties / movement / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "direction_deg": {
        -        "anyOf": [
        -          {
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Movement direction in degrees true, or null if stationary."
        -      },
        -      "speed_kt": {
        -        "anyOf": [
        -          {
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Movement speed in knots, or null if stationary."
        -      }
        -    },
        -    "required": [
        -      "direction_deg",
        -      "speed_kt"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "direction_deg": {
        +        "description": "Movement direction in degrees true, or null if stationary.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "speed_kt": {
        +        "description": "Movement speed in knots, or null if stationary.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      }
        +    },
        +    "required": [
        +      "direction_deg",
        +      "speed_kt"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / advisories / items / properties / severity / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / advisories / items / properties / severity / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedaviation_get_metar14 fields changed
      • removedOutput schema / properties / observations / items / properties / altimeter_inhg / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / observations / items / properties / altimeter_inhg / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / observations / items / properties / ceiling_ft / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / observations / items / properties / ceiling_ft / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / observations / items / properties / dewpoint_c / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / observations / items / properties / dewpoint_c / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / observations / items / properties / temp_c / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / observations / items / properties / temp_c / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / observations / items / properties / wind / properties / direction_deg / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / observations / items / properties / wind / properties / direction_deg / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / observations / items / properties / wind / properties / gust_kt / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / observations / items / properties / wind / properties / gust_kt / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / observations / items / properties / wind / properties / speed_kt / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / observations / items / properties / wind / properties / speed_kt / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedaviation_get_pireps26 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"
        +]
    • Changedaviation_get_taf16 fields changed
      • removedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / change_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / change_type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / clouds / items / properties / type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / clouds / items / properties / type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / probability / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / probability / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / vertical_visibility_ft / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / vertical_visibility_ft / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / visibility_sm / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / visibility_sm / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / wind / properties / direction_deg / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / wind / properties / direction_deg / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / wind / properties / gust_kt / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / wind / properties / gust_kt / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / wind / properties / speed_kt / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / wind / properties / speed_kt / type
        Added value: +[
        +  "number",
        +  "null"
        +]
  10. 5 tool updates
    • Changedaviation_find_stations6 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": [
        +      "stations",
        +      "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: `station_not_found`: None of the requested IDs match any known station. `missing_search_criteria`: None of station_ids, bbox, or state was provided. `conflicting_location`: More than one of station_ids, bbox, or state was provided. `invalid_bbox`: The bounding box is inverted — minLat > maxLat or minLon > maxLon. `invalid_state`: The state code is not one of the 50 US states or DC. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "station_not_found",
        +            "missing_search_criteria",
        +            "conflicting_location",
        +            "invalid_bbox",
        +            "invalid_state"
        +          ],
        +          "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: -[
        -  "stations",
        -  "truncated",
        -  "shown"
        -]
    • Changedaviation_get_advisories6 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": [
        +      "advisories"
        +    ]
        +  },
        +  {
        +    "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: `invalid_bbox`: The bounding box is inverted — minLat > maxLat or minLon > maxLon. `airmet_not_served`: advisory_type \"airmet\" was requested, or a hazard filter naming an AIRMET-family phenomenon (MTN OBSCN, SURFACE WIND, LLWS) with no counterpart on the SIGMET feed. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "invalid_bbox",
        +            "airmet_not_served"
        +          ],
        +          "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: -[
        -  "advisories"
        -]
    • Changedaviation_get_metar6 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": [
        +      "observations",
        +      "requested",
        +      "returned",
        +      "partial"
        +    ]
        +  },
        +  {
        +    "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_stations_found`: None of the requested station IDs returned METAR data. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "no_stations_found"
        +          ],
        +          "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: -[
        -  "observations",
        -  "requested",
        -  "returned",
        -  "partial"
        -]
    • Changedaviation_get_pireps6 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"
        -]
    • Changedaviation_get_taf6 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": [
        +      "forecasts",
        +      "requested",
        +      "returned",
        +      "partial"
        +    ]
        +  },
        +  {
        +    "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_taf_available`: Station does not issue TAFs or no TAF is currently available. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "no_taf_available"
        +          ],
        +          "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: -[
        -  "forecasts",
        -  "requested",
        -  "returned",
        -  "partial"
        -]
  11. 3 tool updates
    • Changedaviation_find_stations6 fields changed
      • addedOutput schema / properties / cap
        Added value: +{
        +  "description": "The upstream row maximum that was applied to the draw. Present only on a truncated result.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Guidance naming the lever that narrows the draw. Present only on a truncated result.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / shown
        Added value: +{
        +  "description": "Stations in this result, counted after any client-side state filter.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True when the upstream draw hit the AWC row cap, so stations inside the search area are missing from this result. False affirms the area was drawn in full, which a count alone cannot establish.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / upstreamRows
        Added value: +{
        +  "description": "Rows AWC returned before the client-side state filter ran. Present only on a truncated state query the filter then narrowed, where the post-filter count sits below the cap and so cannot reveal the truncation on its own.",
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "stations"
        -]New value: +[
        +  "stations",
        +  "truncated",
        +  "shown"
        +]
    • Changedaviation_get_advisories7 fields changed
      • changedInput schema / properties / advisory_type / description
        Previous value: -"Filter by advisory type. \"sigmet\" includes convective SIGMETs. \"airmet\" includes AIRMET Sierra (IFR/mountain obscuration), Tango (turbulence), and Zulu (icing). \"all\" returns both."New value: +"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."
      • changedInput schema / properties / hazard / description
        Previous value: -"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."New value: +"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."
      • changedOutput schema / properties / advisories / items / description
        Previous value: -"An active SIGMET or AIRMET advisory."New value: +"An active SIGMET advisory."
      • changedOutput schema / properties / advisories / items / properties / advisory_type / description
        Previous value: -"Advisory type: SIGMET or AIRMET."New value: +"Advisory type as issued. The domestic SIGMET feed this tool reads emits SIGMET."
      • changedOutput schema / properties / advisories / items / properties / hazard / description
        Previous value: -"Hazard type (e.g., CONVECTIVE, TURBULENCE, ICING, IFR, MTN OBSCN)."New value: +"Hazard type — one of CONVECTIVE, TURBULENCE, ICING, or IFR."
      • changedOutput schema / properties / advisories / items / properties / raw_text / description
        Previous value: -"Original encoded SIGMET or AIRMET text as issued by the meteorological watch office."New value: +"Original encoded SIGMET text as issued by the meteorological watch office."
      • changedOutput schema / properties / advisories / items / properties / severity / description
        Previous value: -"Severity integer for convective SIGMETs (higher = more intense). Null for AIRMETs."New value: +"Severity integer for convective SIGMETs (higher = more intense). Null when the advisory stated none."
    • Changedaviation_get_pireps6 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"
        +]
  12. 2 tool updates
    • Changedaviation_get_metar8 fields changed
      • addedOutput schema / properties / missing
        Added value: +{
        +  "description": "Requested station IDs absent from the result. Absent when none are missing.",
        +  "items": {
        +    "description": "A requested ICAO station ID that produced no observation.",
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Recovery guidance naming the missing station IDs. Present only on a partial result. It lists the candidate causes without asserting one — upstream omits the row either way.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / observations / items / properties / ceiling_ft / description
        Previous value: -"Ceiling in feet AGL — the lowest broken, overcast, or obscuration layer. Per FAA AIM 7-1-13 the ceiling is the lowest broken or overcast layer, or the vertical visibility into an obscuration; few and scattered layers are never ceilings. Null when the observation reported no such layer."New value: +"Ceiling in feet AGL — the lowest broken, overcast, or obscuration layer. Per FAA AIM 7-1-29 the ceiling is the lowest broken or overcast layer, or the vertical visibility into an obscuration; few and scattered layers are never ceilings. Null when the observation reported no such layer."
      • changedOutput schema / properties / observations / items / properties / present_weather / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "decoded": {
        -        "description": "Plain-English reading of the group (e.g., \"fog\", \"light rain showers\").",
        -        "type": "string"
        -      },
        -      "raw": {
        -        "description": "Weather group exactly as encoded (e.g., \"FG\", \"-SHRA\", \"+RA BR\").",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "raw",
        -      "decoded"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "decoded": {
        +        "description": "Plain-English reading of each group, joined with \"; \" (e.g., \"fog\", \"light rain showers; mist\"). A group the decoder does not recognize is carried through as its own raw token rather than half-translated, so compare against raw when a reading still looks coded.",
        +        "type": "string"
        +      },
        +      "raw": {
        +        "description": "Weather groups exactly as encoded, space-delimited (e.g., \"FG\", \"-SHRA\", \"VCTS -RA\").",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "raw",
        +      "decoded"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / partial
        Added value: +{
        +  "description": "True when a requested station produced no observation. False affirms the result covers every requested station, so full coverage is distinguishable from a short batch rather than being inferred from the count.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / requested
        Added value: +{
        +  "description": "Station IDs this call asked for, in the order given.",
        +  "items": {
        +    "description": "An ICAO station ID as requested.",
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / returned
        Added value: +{
        +  "description": "Distinct station IDs that produced at least one observation. Counted per station, not per row — with hours > 1 a station reporting six times still appears once.",
        +  "items": {
        +    "description": "An ICAO station ID present in the result.",
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "observations"
        -]New value: +[
        +  "observations",
        +  "requested",
        +  "returned",
        +  "partial"
        +]
    • Changedaviation_get_taf15 fields changed
      • changedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / clouds / items / properties / base_ft / description
        Previous value: -"Cloud base altitude in feet AGL."New value: +"Cloud base altitude in feet AGL. On an OVX layer this is the vertical visibility into the obscuration rather than a layer bottom, and 0 is a surface-level indefinite ceiling."
      • changedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / clouds / items / properties / cover / description
        Previous value: -"Sky cover code: FEW, SCT, BKN, OVC, SKC, CLR."New value: +"Sky cover code: FEW, SCT, BKN, OVC, SKC, or OVX. OVX is the decoded form of a VVhhh group — the sky is obscured and the base is the vertical visibility into it, not a cloud bottom."
      • changedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / clouds / items / properties / type / description
        Previous value: -"Cloud type qualifier: CB (cumulonimbus), TCU (towering cumulus), or null."New value: +"Cloud type qualifier: CB (cumulonimbus), TCU (towering cumulus), or null. An obscuration can carry one — a VV008CB group is an OVX layer with type CB."
      • addedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / vertical_visibility_ft
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Vertical visibility into a forecast obscuration, in feet AGL — an indefinite ceiling, and the same height as this period OVX cloud layer. 0 is a surface-level indefinite ceiling; null means the period forecasts no obscuration."
        +}
      • changedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / weather / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "decoded": {
        +        "description": "Plain-English reading of each group, joined with \"; \" (e.g., \"light rain showers; mist\"). A group the decoder does not recognize is carried through as its own raw token rather than half-translated, so compare against raw when a reading still looks coded.",
        +        "type": "string"
        +      },
        +      "raw": {
        +        "description": "Weather groups exactly as forecast, space-delimited (e.g., \"-SHRA\", \"-SHRA BR\", \"VCTS -RA\").",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "raw",
        +      "decoded"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / weather / description
        Previous value: -"Decoded weather condition (e.g., \"light rain showers\", \"thunderstorm with rain\"). Null if none."New value: +"Forecast weather for this period, or null when the period carried no weather group."
      • changedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / wind / description
        Previous value: -"Forecast wind conditions for this period."New value: +"Forecast wind conditions at the surface for this period."
      • addedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / wind_shear
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "direction_deg": {
        +          "description": "Forecast wind direction at the top of the shear layer, in degrees true — not a direction of shear.",
        +          "type": "number"
        +        },
        +        "height_ft": {
        +          "description": "Top of the shear layer in feet AGL — not the layer base and not its thickness. A WS020 group is 2000 ft.",
        +          "type": "number"
        +        },
        +        "speed_kt": {
        +          "description": "Forecast wind speed at the top of the shear layer, in knots — the wind at that height, not the magnitude of the shear.",
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "height_ft",
        +        "direction_deg",
        +        "speed_kt"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Forecast non-convective low-level wind shear (a WS group), confined to the surface–2,000 ft AGL band. A null means no non-convective LLWS group was issued for this period, rather than no shear expected: the group is excluded from TEMPO and PROB groups, and shear is always assumed present in convective activity."
        +}
      • changedOutput schema / properties / forecasts / items / properties / forecast_periods / items / required
        Previous value: -[
        -  "from",
        -  "to",
        -  "change_type",
        -  "probability",
        -  "wind",
        -  "visibility_sm",
        -  "weather",
        -  "clouds"
        -]New value: +[
        +  "from",
        +  "to",
        +  "change_type",
        +  "probability",
        +  "wind",
        +  "wind_shear",
        +  "visibility_sm",
        +  "vertical_visibility_ft",
        +  "weather",
        +  "clouds"
        +]
      • addedOutput schema / properties / missing
        Added value: +{
        +  "description": "Requested station IDs absent from the result. Absent when none are missing.",
        +  "items": {
        +    "description": "A requested ICAO station ID that produced no forecast.",
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Recovery guidance naming the missing station IDs. Present only on a partial result. It lists the candidate causes without asserting one — upstream omits the row either way.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / partial
        Added value: +{
        +  "description": "True when a requested station produced no forecast. False affirms the result covers every requested station, so full coverage is distinguishable from a short batch rather than being inferred from the count.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / requested
        Added value: +{
        +  "description": "Station IDs this call asked for, in the order given.",
        +  "items": {
        +    "description": "An ICAO station ID as requested.",
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / returned
        Added value: +{
        +  "description": "Distinct station IDs that produced a forecast.",
        +  "items": {
        +    "description": "An ICAO station ID present in the result.",
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "forecasts"
        -]New value: +[
        +  "forecasts",
        +  "requested",
        +  "returned",
        +  "partial"
        +]
  13. 4 tool updates
    • Changedaviation_find_stations3 fields changed
      • addedOutput schema / properties / stations / items / properties / elevation_ft / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / stations / items / properties / elevation_ft / description
        Previous value: -"Station elevation in feet MSL."New value: +"Station elevation in feet MSL. 0 is a sea-level site; null means no elevation is on file upstream, so it is unknown."
      • removedOutput schema / properties / stations / items / properties / elevation_ft / type
        Removed value: -"number"
    • Changedaviation_get_metar18 fields changed
      • addedOutput schema / properties / observations / items / properties / altimeter_inhg / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / observations / items / properties / altimeter_inhg / description
        Previous value: -"Altimeter setting in inches of mercury."New value: +"Altimeter setting in inches of mercury, or null when the observation carried no altimeter group (common at stations reporting sea-level pressure only)."
      • removedOutput schema / properties / observations / items / properties / altimeter_inhg / type
        Removed value: -"number"
      • changedOutput schema / properties / observations / items / properties / ceiling_ft / description
        Previous value: -"Ceiling in feet MSL — lowest BKN or OVC layer base. Null when sky is clear."New value: +"Ceiling in feet AGL — the lowest broken, overcast, or obscuration layer. Per FAA AIM 7-1-13 the ceiling is the lowest broken or overcast layer, or the vertical visibility into an obscuration; few and scattered layers are never ceilings. Null when the observation reported no such layer."
      • addedOutput schema / properties / observations / items / properties / ceiling_type
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "measured",
        +        "indefinite"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "How the ceiling height was determined: \"measured\" for a broken or overcast layer base, \"indefinite\" for vertical visibility into an obscuration (an OVX layer). Null exactly when ceiling_ft is null."
        +}
      • changedOutput schema / properties / observations / items / properties / clouds / items / properties / base_ft / description
        Previous value: -"Cloud base altitude in feet MSL."New value: +"Cloud base altitude in feet AGL."
      • changedOutput schema / properties / observations / items / properties / clouds / items / properties / cover / description
        Previous value: -"Sky cover code: FEW, SCT, BKN, OVC, SKC, CLR."New value: +"Sky cover code: FEW, SCT, BKN, OVC, SKC, CLR, CAVOK, or OVX. OVX is the decoded form of a VVhhh group — the sky is obscured and the base is the vertical visibility into it, not a cloud bottom."
      • addedOutput schema / properties / observations / items / properties / dewpoint_c / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / observations / items / properties / dewpoint_c / description
        Previous value: -"Dewpoint in degrees Celsius."New value: +"Dewpoint in degrees Celsius. 0 is a real reading; null means the observation carried no dewpoint, so it is unknown."
      • removedOutput schema / properties / observations / items / properties / dewpoint_c / type
        Removed value: -"number"
      • addedOutput schema / properties / observations / items / properties / present_weather
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "decoded": {
        +          "description": "Plain-English reading of the group (e.g., \"fog\", \"light rain showers\").",
        +          "type": "string"
        +        },
        +        "raw": {
        +          "description": "Weather group exactly as encoded (e.g., \"FG\", \"-SHRA\", \"+RA BR\").",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "raw",
        +        "decoded"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Present weather at the station, or null when the observation carried no weather group (a dry, unobscured day)."
        +}
      • addedOutput schema / properties / observations / items / properties / temp_c / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / observations / items / properties / temp_c / description
        Previous value: -"Temperature in degrees Celsius."New value: +"Temperature in degrees Celsius. 0 is a real reading; null means the observation carried no temperature, so it is unknown."
      • removedOutput schema / properties / observations / items / properties / temp_c / type
        Removed value: -"number"
      • addedOutput schema / properties / observations / items / properties / wind / properties / speed_kt / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / observations / items / properties / wind / properties / speed_kt / description
        Previous value: -"Wind speed in knots."New value: +"Wind speed in knots. 0 is calm (a reported 00000KT); null means the observation carried no wind group, so the speed is unknown."
      • removedOutput schema / properties / observations / items / properties / wind / properties / speed_kt / type
        Removed value: -"number"
      • changedOutput schema / properties / observations / items / required
        Previous value: -[
        -  "station_id",
        -  "name",
        -  "lat",
        -  "lon",
        -  "elevation_ft",
        -  "flight_category",
        -  "metar_type",
        -  "observed_at",
        -  "wind",
        -  "visibility_sm",
        -  "ceiling_ft",
        -  "clouds",
        -  "temp_c",
        -  "dewpoint_c",
        -  "altimeter_inhg",
        -  "raw_metar"
        -]New value: +[
        +  "station_id",
        +  "name",
        +  "lat",
        +  "lon",
        +  "elevation_ft",
        +  "flight_category",
        +  "metar_type",
        +  "observed_at",
        +  "wind",
        +  "visibility_sm",
        +  "ceiling_ft",
        +  "ceiling_type",
        +  "clouds",
        +  "present_weather",
        +  "temp_c",
        +  "dewpoint_c",
        +  "altimeter_inhg",
        +  "raw_metar"
        +]
    • Changedaviation_get_pireps9 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."
    • Changedaviation_get_taf5 fields changed
      • changedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / clouds / items / properties / base_ft / description
        Previous value: -"Cloud base altitude in feet MSL."New value: +"Cloud base altitude in feet AGL."
      • changedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / wind / properties / direction_deg / description
        Previous value: -"Forecast wind direction in degrees true. Null when variable."New value: +"Forecast wind direction in degrees true. Null when the forecast said VRB (variable), and also when the period carries no wind element at all — speed_kt is null in that second case and a number in the first."
      • addedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / wind / properties / speed_kt / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / wind / properties / speed_kt / description
        Previous value: -"Forecast wind speed in knots."New value: +"Forecast wind speed in knots. 0 is a forecast calm (a 00000KT group); null means the period amends only visibility, weather, or cloud and carries no wind element, so the wind is unknown rather than calm."
      • removedOutput schema / properties / forecasts / items / properties / forecast_periods / items / properties / wind / properties / speed_kt / type
        Removed value: -"number"
  14. 2 tool updates
    • Changedaviation_find_stations1 field changed
      • changedInput schema / properties / state / description
        Previous value: -"Two-letter US state abbreviation (e.g., \"WA\") to list all stations in that state."New value: +"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."
    • Changedaviation_get_pireps2 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."

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.