Skip to content
Eden Engine

Historical Airport Weather Observations (Hourly, by Station Code)

omnial/get-historical-airport

Given an airport's ICAO station code and a date range of up to 31 days, returns the hourly historical weather observations recorded there (temperature, humidity, wind, pressure, visibility, and sky condition) plus a per-day summary of that day's highest reported temperature. An unrecognized station code settles successfully with an empty result rather than an error.

activeper callv2

Price

Up to $0.0137 per call; you pay what the call used

You pay the price shown. If a call turns out to cost more than its quote, you pay the actual price, capped at twice the quote. No monthly minimum. Top-ups start at $0.50.

Data source

Weather Underground

Data from Weather Underground.

Use it

Five steps: search, inspect, learn, run, settle. No per-tool setup; your agent reaches this tool through the meta-tools it already has.

Connect once and your AI can find and run this tool, and any other it needs.

agent
// 1. search: find the tool
omnial_search({ query: "what you need" })

// 2. inspect: price and input schema
omnial_inspect({ tool: "omnial/get-historical-airport" })

// 3. learn: read the usage guide at runtime
omnial_learn({ tool: "omnial/get-historical-airport" })

// 4. run: price the exact call first, then run it
omnial_execute({ tool: "omnial/get-historical-airport", input: { /* see input_schema */ }, dry_run: true })
omnial_execute({ tool: "omnial/get-historical-airport", input: { /* ... */ } })

// 5. settle: the call is charged when it finishes, nothing to do

Not connected yet? Point your MCP client at https://mcp.eden-engine.com/mcp, then copy a config for your client.

Pricing

Every charge this tool can incur.

ChargePrice
Per call
$0.0137
Updated
Oct 25, 2026

Input and output schemas

Input schema
input_schema.json
{
  "type": "object",
  "required": [
    "end_date",
    "station_id",
    "start_date"
  ],
  "properties": {
    "end_date": {
      "type": "string",
      "description": "End date in YYYYMMDD format."
    },
    "start_date": {
      "type": "string",
      "description": "Start date in YYYYMMDD format."
    },
    "station_id": {
      "type": "string",
      "description": "Airport station ICAO code (e.g. KJFK, EGLL). Obtain from search endpoint's icaoCode field."
    },
    "country_code": {
      "type": "string",
      "description": "Two-letter ISO country code for the station (e.g. US, GB)."
    }
  },
  "additionalProperties": false
}
Output schema
output_schema.json
{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "metadata": {
          "type": "object",
          "properties": {
            "units": {
              "type": "string",
              "description": "'m' (metric) on the one real call observed; unconfirmed whether an imperial variant exists."
            },
            "language": {
              "type": "string"
            }
          },
          "description": "Response-envelope metadata. Only `language` (response text locale, e.g. 'en-US') and `units` (the measurement-system flag, e.g. 'm' for metric on the one real call observed) are kept -- the endpoint's own transaction id, cache-expiry epoch, response schema version, and internal location key are vendor session plumbing, not customer-facing data, and are left out of this shape.",
          "additionalProperties": false
        },
        "observations": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "rh": {
                "type": "number",
                "description": "Relative humidity, percent."
              },
              "wc": {
                "type": "number",
                "description": "Wind chill."
              },
              "key": {
                "type": "string",
                "description": "Repeats the station code."
              },
              "vis": {
                "type": "number",
                "description": "Visibility, kilometers under the observed metric unit setting."
              },
              "clds": {
                "type": "string",
                "description": "Cloud-cover code, e.g. 'OVC', 'BKN', 'FEW', 'CLR', 'SCT'."
              },
              "gust": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Null on most rows on the one real call observed; populated with a wind-gust reading (e.g. 46, 54) on a number of rows, mostly during a windier stretch of the week."
              },
              "temp": {
                "type": "number"
              },
              "wdir": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Null on calm-wind rows (wdir_cardinal='CALM') on the one real call observed."
              },
              "wspd": {
                "type": "number"
              },
              "class": {
                "type": "string",
                "description": "'observation' on every row observed."
              },
              "dewPt": {
                "type": "number"
              },
              "obs_id": {
                "type": "string",
                "description": "Repeats the station code."
              },
              "day_ind": {
                "type": "string",
                "description": "'D' or 'N' (day/night) on the observed rows."
              },
              "uv_desc": {
                "type": "string",
                "description": "e.g. 'Low'."
              },
              "wx_icon": {
                "type": "number"
              },
              "max_temp": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Null on almost every row; populated on a small number of rows on the one real call observed -- appears to mark a daily-max reading row, not a per-hour running max."
              },
              "min_temp": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Null on almost every row; populated on a small number of rows on the one real call observed -- appears to mark a daily-min reading row, not a per-hour running min."
              },
              "obs_name": {
                "type": "string",
                "description": "The station's display name, e.g. 'New York/JFK Intl'."
              },
              "pressure": {
                "type": "number"
              },
              "row_type": {
                "type": "string",
                "description": "'original_station_report' on every observation observed; other values unconfirmed."
              },
              "uv_index": {
                "type": "number"
              },
              "qc_status": {
                "type": "null",
                "description": "Null on every observation on the one real call observed; no populated example was captured, so a populated value's type is unconfirmed."
              },
              "snow_hrly": {
                "type": "null",
                "description": "Null on every observation on the one real call observed; no populated example was captured, so a populated value's type is unconfirmed."
              },
              "temp_unit": {
                "type": "string",
                "description": "'C' on the one real call observed, matching metadata.units='m'."
              },
              "wx_phrase": {
                "type": "string",
                "description": "e.g. 'Cloudy', 'Fair'."
              },
              "feels_like": {
                "type": "number"
              },
              "heat_index": {
                "type": "number"
              },
              "utc_offset": {
                "type": "null",
                "description": "Null on every observation on the one real call observed; no populated example was captured, so a populated value's type is unconfirmed."
              },
              "precip_hrly": {
                "type": "number",
                "description": "0 on every observation on the one real call observed (no precipitation that week)."
              },
              "precip_total": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Null on nearly every row on the one real call observed; populated on a single row (16.26) -- appears to mark a cumulative-total reading row, not a per-hour running total."
              },
              "pressure_desc": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Null on many rows on the one real call observed -- not reported every hour."
              },
              "pressure_tend": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Null on many rows on the one real call observed -- not reported every hour."
              },
              "timezone_name": {
                "type": "null",
                "description": "Null on every observation on the one real call observed; no populated example was captured, so a populated value's type is unconfirmed."
              },
              "wdir_cardinal": {
                "type": "string",
                "description": "e.g. 'WSW', 'CALM'."
              },
              "valid_time_gmt": {
                "type": "number",
                "description": "Unix epoch seconds for the observation."
              },
              "observed_at_utc": {
                "type": "string",
                "description": "ISO 8601 UTC timestamp of the observation."
              },
              "observed_at_local": {
                "type": "null",
                "description": "Null on every observation on the one real call observed; no populated example was captured, so a populated value's type is unconfirmed."
              },
              "revision_timestamp": {
                "type": "null",
                "description": "Null on every observation on the one real call observed; no populated example was captured, so a populated value's type is unconfirmed."
              },
              "source_availability_timestamp": {
                "type": "null",
                "description": "Null on every observation on the one real call observed; no populated example was captured, so a populated value's type is unconfirmed."
              }
            },
            "additionalProperties": false
          },
          "description": "One entry per hourly observation row actually reported by the station within the requested range."
        },
        "daily_summary": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "date": {
                "type": "string",
                "description": "YYYY-MM-DD."
              },
              "max_temp_provenance": {
                "type": "string",
                "description": "'DERIVED_FROM_ROWS' or 'SOURCE_PUBLISHED' on the one real call observed -- other values unconfirmed."
              },
              "max_temp_row_timestamp": {
                "type": "string",
                "description": "ISO 8601 timestamp of the row that produced max_temp_from_returned_rows."
              },
              "source_published_daily_max": {
                "type": "number",
                "description": "Present only when max_temp_provenance is 'SOURCE_PUBLISHED'; the source's own officially published daily max, which can differ from max_temp_from_returned_rows."
              },
              "max_temp_from_returned_rows": {
                "type": "number",
                "description": "Highest temp among the hourly rows this same call actually returned for that day."
              }
            },
            "additionalProperties": false
          },
          "description": "One entry per calendar day touched by the requested range."
        },
        "data_source_note": {
          "type": "string",
          "description": "A data-provenance flag from the data source, e.g. 'UNVERIFIED_TWC_AIRPORT_HISTORY_PROXY' -- read as a caveat on data reliability, not itself a weather value."
        },
        "station_metadata": {
          "type": "object",
          "properties": {
            "icao": {
              "type": "string"
            },
            "latitude": {
              "type": "null",
              "description": "Null on the one real call observed (KJFK); no populated example was captured, so a populated value's type is unconfirmed."
            },
            "longitude": {
              "type": "null",
              "description": "Null on the one real call observed (KJFK); no populated example was captured, so a populated value's type is unconfirmed."
            },
            "station_id": {
              "type": "string"
            },
            "source_product_name": {
              "type": "string",
              "description": "The upstream data product name, e.g. 'TWC Historical Observations v1'."
            }
          },
          "additionalProperties": false
        },
        "response_metadata": {
          "type": "object",
          "properties": {
            "warnings": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Observed as an empty array on the one real call; the shape of a populated warning is unconfirmed."
            },
            "row_count": {
              "type": "number",
              "description": "Number of hourly observation rows actually returned."
            },
            "retrieved_at": {
              "type": "string",
              "description": "ISO 8601 timestamp of when the upstream call was made."
            },
            "missing_hour_count": {
              "type": "number",
              "description": "0 on the one real call observed (no gaps in the requested range)."
            },
            "requested_end_date": {
              "type": "string"
            },
            "requested_start_date": {
              "type": "string"
            }
          },
          "description": "Bookkeeping about the query itself, not weather data.",
          "additionalProperties": false
        }
      },
      "description": "Absent when the station code was not recognized (see `status`'s own note).",
      "additionalProperties": false
    },
    "status": {
      "type": "string",
      "description": "'success' on the one real populated call observed (KJFK). Absent entirely on the invalid-station-code call -- that run's whole result document was empty, not a populated envelope with an error status string."
    }
  },
  "description": "The historical-observation record. An unrecognized station code returns `{}` -- see `status`/`data`'s own descriptions.",
  "additionalProperties": false
}