Skip to main content
Glama

Get Aurora Forecast

noaa_spaceweather_get_aurora_forecast
Read-onlyIdempotent

OVATION model aurora forecast for the next ~30–60 min: global grid of aurora probability percentages by latitude/longitude (1° resolution). With optional coordinates, returns the local aurora probability at the nearest grid point, the geomagnetic latitude those coordinates convert to, the minimum Kp and G level needed for aurora at that geomagnetic latitude, the sun’s elevation there at the forecast time (aurora is not visible in daylight), the strongest aurora within 1000 km poleward (visible low on the horizon when bright), and a plain-language go/no-go verdict. Without coordinates, returns only global metadata. Data updates every ~5 minutes. Supply coordinates as geographic (WGS84); aurora bands are geomagnetic, and the tool converts between them.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
latitudeNoGeographic latitude in degrees (−90 to 90). Provide with longitude for a local aurora probability lookup.
longitudeNoGeographic longitude in degrees (−180 to 180). Provide with latitude for a local aurora probability lookup.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
localLookupNoCoordinate lookup; null when no coordinates were given.
forecastTimeNoISO 8601 time the forecast is valid for.
gridPointCountNoOVATION grid point count.
observationTimeNoISO 8601 OVATION observation time.
topAuroraRegionNoLocation of the highest grid point, e.g. "67°N, 20°W"; "Unknown" when every cell is 0%.
topAuroraPercentNoHighest aurora probability on the globe (0–100%).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changed
    • changedOutput schema / properties / forecastTime / description
      Previous value: -"Time the aurora forecast is valid for, ISO 8601."New value: +"ISO 8601 time the forecast is valid for."
    • changedOutput schema / properties / gridPointCount / description
      Previous value: -"Total number of grid points in the OVATION model."New value: +"OVATION grid point count."
    • changedOutput schema / properties / localLookup / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "auroraPercent": {
      -        "description": "Aurora probability at the nearest grid point (0–100%).",
      -        "type": "number"
      -      },
      -      "darkness": {
      -        "description": "Sky darkness at the requested coordinates at forecastTime, from sunElevationDeg: day at 0° and above, civil_twilight from −6° up to 0°, nautical_twilight from −12° up to −6°, dark below −12°.",
      -        "enum": [
      -          "day",
      -          "civil_twilight",
      -          "nautical_twilight",
      -          "dark"
      -        ],
      -        "type": "string"
      -      },
      -      "geomagneticLatitude": {
      -        "description": "Centered-dipole geomagnetic latitude the requested coordinates convert to (degrees, −90 to 90). Aurora bands are geomagnetic, so this — not the geographic latitude — is what minKpRequired and the verdict are derived from. It can differ from the geographic latitude by up to ±9.2° in either direction.",
      -        "type": "number"
      -      },
      -      "gridLatitude": {
      -        "description": "Nearest OVATION grid latitude.",
      -        "type": "number"
      -      },
      -      "gridLongitude": {
      -        "description": "Nearest OVATION grid longitude.",
      -        "type": "number"
      -      },
      -      "horizonDistanceKm": {
      -        "description": "Great-circle distance from the requested point to the cell carrying horizonMaxPercent, in km. Null when horizonMaxPercent is null.",
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "horizonMaxLatitude": {
      -        "description": "Grid latitude of the cell carrying horizonMaxPercent (degrees); the nearest such cell when several tie. Null when horizonMaxPercent is null.",
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "horizonMaxPercent": {
      -        "description": "Highest aurora probability (0–100%) among grid cells poleward of gridLatitude, within ±2° longitude and 1000 km of the requested point. Null when no grid cell lies in that window, which on the full grid happens only when gridLatitude is ±90.",
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "minGScale": {
      -        "description": "NOAA G level matching minKpRequired (1–5), 0 inside the quiet-time auroral oval where no storm is needed, and null below 40° geomagnetic where no storm level reaches.",
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "minKpRequired": {
      -        "description": "Minimum Kp for aurora at this geomagnetic latitude — the floor of the band, in SWPC thirds (4.67, 5.67, 6.67, 7.67, 9.00), or 0 inside the quiet-time auroral oval above 65°. Reported as 9 where no storm level reaches, which minGScale=null distinguishes from a genuine G5 threshold. The 60° G1 band is this server’s interpolation between the oval edge and NOAA’s G2 figure; the rest are the NOAA scales page figures.",
      -        "type": "number"
      -      },
      -      "requestedLatitude": {
      -        "description": "Geographic latitude supplied in the request (degrees, −90 to 90).",
      -        "type": "number"
      -      },
      -      "requestedLongitude": {
      -        "description": "Geographic longitude supplied in the request (degrees, −180 to 180).",
      -        "type": "number"
      -      },
      -      "sunElevationDeg": {
      -        "description": "Geometric solar elevation at the requested coordinates at forecastTime, in degrees (−90 to 90, rounded to 0.1°, no refraction correction). Negative when the sun is below the horizon.",
      -        "type": "number"
      -      },
      -      "verdict": {
      -        "description": "Plain-language visibility verdict for the requested coordinates at forecastTime, e.g. \"Good aurora chance (42%) — Kp≥6.67 (G3) needed at 51.2° geomagnetic.\" Opens \"Not visible — daylight\" when darkness is day.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "requestedLatitude",
      -      "requestedLongitude",
      -      "geomagneticLatitude",
      -      "gridLatitude",
      -      "gridLongitude",
      -      "auroraPercent",
      -      "minKpRequired",
      -      "minGScale",
      -      "sunElevationDeg",
      -      "darkness",
      -      "horizonMaxPercent",
      -      "horizonMaxLatitude",
      -      "horizonDistanceKm",
      -      "verdict"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "auroraPercent": {
      +        "description": "Aurora probability at the nearest grid point (0–100%).",
      +        "type": "number"
      +      },
      +      "darkness": {
      +        "description": "Sky state from sunElevationDeg: day ≥ 0°, civil_twilight ≥ −6°, nautical_twilight ≥ −12°, dark below.",
      +        "enum": [
      +          "day",
      +          "civil_twilight",
      +          "nautical_twilight",
      +          "dark"
      +        ],
      +        "type": "string"
      +      },
      +      "geomagneticLatitude": {
      +        "description": "Geomagnetic latitude of the request, in degrees (up to ±9.2° from geographic); minKpRequired and the verdict use it.",
      +        "type": "number"
      +      },
      +      "gridLatitude": {
      +        "description": "Nearest grid latitude, in degrees.",
      +        "type": "number"
      +      },
      +      "gridLongitude": {
      +        "description": "Nearest grid longitude, in degrees.",
      +        "type": "number"
      +      },
      +      "horizonDistanceKm": {
      +        "description": "Distance in km to the horizonMaxPercent cell; null when it is null.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "horizonMaxLatitude": {
      +        "description": "Grid latitude of horizonMaxPercent, in degrees (nearest on a tie); null when it is null.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "horizonMaxPercent": {
      +        "description": "Highest aurora probability (0–100%) poleward of gridLatitude within ±2° longitude and 1000 km; null when no cell qualifies (gridLatitude ±90).",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "minGScale": {
      +        "description": "G level for minKpRequired (1–5); 0 inside the quiet-time oval; null below 40° geomagnetic, where no storm reaches.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "minKpRequired": {
      +        "description": "Minimum Kp for aurora here: 4.67, 5.67, 6.67, 7.67, or 9; 0 inside the quiet-time oval (above 65°). Also 9 where no storm reaches (minGScale null).",
      +        "type": "number"
      +      },
      +      "requestedLatitude": {
      +        "description": "Requested geographic latitude, in degrees.",
      +        "type": "number"
      +      },
      +      "requestedLongitude": {
      +        "description": "Requested geographic longitude, in degrees.",
      +        "type": "number"
      +      },
      +      "sunElevationDeg": {
      +        "description": "Solar elevation here at forecastTime, in degrees to 0.1° (no refraction); negative below the horizon.",
      +        "type": "number"
      +      },
      +      "verdict": {
      +        "description": "Visibility verdict, e.g. \"Good aurora chance (42%) — Kp≥6.67 (G3) needed at 51.2° geomagnetic.\"; opens \"Not visible — daylight\" when darkness is day.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "requestedLatitude",
      +      "requestedLongitude",
      +      "geomagneticLatitude",
      +      "gridLatitude",
      +      "gridLongitude",
      +      "auroraPercent",
      +      "minKpRequired",
      +      "minGScale",
      +      "sunElevationDeg",
      +      "darkness",
      +      "horizonMaxPercent",
      +      "horizonMaxLatitude",
      +      "horizonDistanceKm",
      +      "verdict"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / localLookup / description
      Previous value: -"Local aurora lookup result. Null when no coordinates were provided."New value: +"Coordinate lookup; null when no coordinates were given."
    • changedOutput schema / properties / observationTime / description
      Previous value: -"Time of the OVATION model observation, ISO 8601."New value: +"ISO 8601 OVATION observation time."
    • changedOutput schema / properties / topAuroraPercent / description
      Previous value: -"Highest aurora probability anywhere on the globe (0–100)."New value: +"Highest aurora probability on the globe (0–100%)."
    • changedOutput schema / properties / topAuroraRegion / description
      Previous value: -"Approximate region of the highest aurora probability grid point."New value: +"Location of the highest grid point, e.g. \"67°N, 20°W\"; \"Unknown\" when every cell is 0%."
  2. Changed1 schema field changed
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `feed_unavailable`: SWPC feed returns 5xx or 429, times out, or answers with a body that is not parseable JSON. Retried before failing. `feed_moved`: SWPC feed path returns a permanent 4xx (404, 410, 401, 403), or a coordinate lookup finds no parseable Forecast Time in the feed. Fails in one attempt. `invalid_coordinates`: One coordinate provided without the other. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `feed_unavailable`: SWPC feed returns 5xx or 429, times out, or answers with a body that is not parseable JSON. Retried for up to 45 seconds in total before failing. `feed_moved`: SWPC feed path returns a permanent 4xx (404, 410, 401, 403), or a coordinate lookup finds no parseable Forecast Time in the feed. Fails in one attempt. `invalid_coordinates`: One coordinate provided without the other. Other values are possible when a failure originates below the handler."
  3. Changed2 schema fields changed
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `feed_unavailable`: SWPC feed returns 5xx or 429, times out, or answers with a body that is not parseable JSON. Retried before failing. `feed_moved`: SWPC feed path returns a permanent 4xx (404, 410, 401, 403). Fails in one attempt. `invalid_coordinates`: One coordinate provided without the other. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `feed_unavailable`: SWPC feed returns 5xx or 429, times out, or answers with a body that is not parseable JSON. Retried before failing. `feed_moved`: SWPC feed path returns a permanent 4xx (404, 410, 401, 403), or a coordinate lookup finds no parseable Forecast Time in the feed. Fails in one attempt. `invalid_coordinates`: One coordinate provided without the other. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / localLookup / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "auroraPercent": {
      -        "description": "Aurora probability at the nearest grid point (0–100%).",
      -        "type": "number"
      -      },
      -      "geomagneticLatitude": {
      -        "description": "Centered-dipole geomagnetic latitude the requested coordinates convert to (degrees, −90 to 90). Aurora bands are geomagnetic, so this — not the geographic latitude — is what minKpRequired and the verdict are derived from. It can differ from the geographic latitude by up to ±9.2° in either direction.",
      -        "type": "number"
      -      },
      -      "gridLatitude": {
      -        "description": "Nearest OVATION grid latitude.",
      -        "type": "number"
      -      },
      -      "gridLongitude": {
      -        "description": "Nearest OVATION grid longitude.",
      -        "type": "number"
      -      },
      -      "minGScale": {
      -        "description": "NOAA G level matching minKpRequired (1–5), 0 inside the quiet-time auroral oval where no storm is needed, and null below 40° geomagnetic where no storm level reaches.",
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "minKpRequired": {
      -        "description": "Minimum Kp for aurora at this geomagnetic latitude — the floor of the band, in SWPC thirds (4.67, 5.67, 6.67, 7.67, 9.00), or 0 inside the quiet-time auroral oval above 65°. Reported as 9 where no storm level reaches, which minGScale=null distinguishes from a genuine G5 threshold. The 60° G1 band is this server’s interpolation between the oval edge and NOAA’s G2 figure; the rest are the NOAA scales page figures.",
      -        "type": "number"
      -      },
      -      "requestedLatitude": {
      -        "description": "Geographic latitude supplied in the request (degrees, −90 to 90).",
      -        "type": "number"
      -      },
      -      "requestedLongitude": {
      -        "description": "Geographic longitude supplied in the request (degrees, −180 to 180).",
      -        "type": "number"
      -      },
      -      "verdict": {
      -        "description": "Plain-language visibility verdict at this geomagnetic latitude, e.g. \"Good aurora chance (42%) — Kp≥6.67 (G3) needed at 51.2° geomagnetic latitude.\"",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "requestedLatitude",
      -      "requestedLongitude",
      -      "geomagneticLatitude",
      -      "gridLatitude",
      -      "gridLongitude",
      -      "auroraPercent",
      -      "minKpRequired",
      -      "minGScale",
      -      "verdict"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "auroraPercent": {
      +        "description": "Aurora probability at the nearest grid point (0–100%).",
      +        "type": "number"
      +      },
      +      "darkness": {
      +        "description": "Sky darkness at the requested coordinates at forecastTime, from sunElevationDeg: day at 0° and above, civil_twilight from −6° up to 0°, nautical_twilight from −12° up to −6°, dark below −12°.",
      +        "enum": [
      +          "day",
      +          "civil_twilight",
      +          "nautical_twilight",
      +          "dark"
      +        ],
      +        "type": "string"
      +      },
      +      "geomagneticLatitude": {
      +        "description": "Centered-dipole geomagnetic latitude the requested coordinates convert to (degrees, −90 to 90). Aurora bands are geomagnetic, so this — not the geographic latitude — is what minKpRequired and the verdict are derived from. It can differ from the geographic latitude by up to ±9.2° in either direction.",
      +        "type": "number"
      +      },
      +      "gridLatitude": {
      +        "description": "Nearest OVATION grid latitude.",
      +        "type": "number"
      +      },
      +      "gridLongitude": {
      +        "description": "Nearest OVATION grid longitude.",
      +        "type": "number"
      +      },
      +      "horizonDistanceKm": {
      +        "description": "Great-circle distance from the requested point to the cell carrying horizonMaxPercent, in km. Null when horizonMaxPercent is null.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "horizonMaxLatitude": {
      +        "description": "Grid latitude of the cell carrying horizonMaxPercent (degrees); the nearest such cell when several tie. Null when horizonMaxPercent is null.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "horizonMaxPercent": {
      +        "description": "Highest aurora probability (0–100%) among grid cells poleward of gridLatitude, within ±2° longitude and 1000 km of the requested point. Null when no grid cell lies in that window, which on the full grid happens only when gridLatitude is ±90.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "minGScale": {
      +        "description": "NOAA G level matching minKpRequired (1–5), 0 inside the quiet-time auroral oval where no storm is needed, and null below 40° geomagnetic where no storm level reaches.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "minKpRequired": {
      +        "description": "Minimum Kp for aurora at this geomagnetic latitude — the floor of the band, in SWPC thirds (4.67, 5.67, 6.67, 7.67, 9.00), or 0 inside the quiet-time auroral oval above 65°. Reported as 9 where no storm level reaches, which minGScale=null distinguishes from a genuine G5 threshold. The 60° G1 band is this server’s interpolation between the oval edge and NOAA’s G2 figure; the rest are the NOAA scales page figures.",
      +        "type": "number"
      +      },
      +      "requestedLatitude": {
      +        "description": "Geographic latitude supplied in the request (degrees, −90 to 90).",
      +        "type": "number"
      +      },
      +      "requestedLongitude": {
      +        "description": "Geographic longitude supplied in the request (degrees, −180 to 180).",
      +        "type": "number"
      +      },
      +      "sunElevationDeg": {
      +        "description": "Geometric solar elevation at the requested coordinates at forecastTime, in degrees (−90 to 90, rounded to 0.1°, no refraction correction). Negative when the sun is below the horizon.",
      +        "type": "number"
      +      },
      +      "verdict": {
      +        "description": "Plain-language visibility verdict for the requested coordinates at forecastTime, e.g. \"Good aurora chance (42%) — Kp≥6.67 (G3) needed at 51.2° geomagnetic.\" Opens \"Not visible — daylight\" when darkness is day.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "requestedLatitude",
      +      "requestedLongitude",
      +      "geomagneticLatitude",
      +      "gridLatitude",
      +      "gridLongitude",
      +      "auroraPercent",
      +      "minKpRequired",
      +      "minGScale",
      +      "sunElevationDeg",
      +      "darkness",
      +      "horizonMaxPercent",
      +      "horizonMaxLatitude",
      +      "horizonDistanceKm",
      +      "verdict"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  4. Changed3 schema fields changed
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `feed_unavailable`: SWPC endpoint returns non-OK status or times out after retries. `invalid_coordinates`: One coordinate provided without the other. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `feed_unavailable`: SWPC feed returns 5xx or 429, times out, or answers with a body that is not parseable JSON. Retried before failing. `feed_moved`: SWPC feed path returns a permanent 4xx (404, 410, 401, 403). Fails in one attempt. `invalid_coordinates`: One coordinate provided without the other. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "feed_unavailable",
      -  "invalid_coordinates"
      -]New value: +[
      +  "feed_unavailable",
      +  "feed_moved",
      +  "invalid_coordinates"
      +]
    • changedOutput schema / properties / localLookup / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "auroraPercent": {
      -        "description": "Aurora probability at the nearest grid point (0–100%).",
      -        "type": "number"
      -      },
      -      "gridLatitude": {
      -        "description": "Nearest OVATION grid latitude.",
      -        "type": "number"
      -      },
      -      "gridLongitude": {
      -        "description": "Nearest OVATION grid longitude.",
      -        "type": "number"
      -      },
      -      "minKpRequired": {
      -        "description": "Minimum Kp threshold for aurora visibility at this latitude.",
      -        "type": "number"
      -      },
      -      "requestedLatitude": {
      -        "description": "Geographic latitude supplied in the request (degrees, −90 to 90).",
      -        "type": "number"
      -      },
      -      "requestedLongitude": {
      -        "description": "Geographic longitude supplied in the request (degrees, −180 to 180).",
      -        "type": "number"
      -      },
      -      "verdict": {
      -        "description": "Plain-language visibility verdict, e.g. \"Good aurora chance (42%) — Kp≥6 needed at this latitude.\"",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "requestedLatitude",
      -      "requestedLongitude",
      -      "gridLatitude",
      -      "gridLongitude",
      -      "auroraPercent",
      -      "minKpRequired",
      -      "verdict"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "auroraPercent": {
      +        "description": "Aurora probability at the nearest grid point (0–100%).",
      +        "type": "number"
      +      },
      +      "geomagneticLatitude": {
      +        "description": "Centered-dipole geomagnetic latitude the requested coordinates convert to (degrees, −90 to 90). Aurora bands are geomagnetic, so this — not the geographic latitude — is what minKpRequired and the verdict are derived from. It can differ from the geographic latitude by up to ±9.2° in either direction.",
      +        "type": "number"
      +      },
      +      "gridLatitude": {
      +        "description": "Nearest OVATION grid latitude.",
      +        "type": "number"
      +      },
      +      "gridLongitude": {
      +        "description": "Nearest OVATION grid longitude.",
      +        "type": "number"
      +      },
      +      "minGScale": {
      +        "description": "NOAA G level matching minKpRequired (1–5), 0 inside the quiet-time auroral oval where no storm is needed, and null below 40° geomagnetic where no storm level reaches.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "minKpRequired": {
      +        "description": "Minimum Kp for aurora at this geomagnetic latitude — the floor of the band, in SWPC thirds (4.67, 5.67, 6.67, 7.67, 9.00), or 0 inside the quiet-time auroral oval above 65°. Reported as 9 where no storm level reaches, which minGScale=null distinguishes from a genuine G5 threshold. The 60° G1 band is this server’s interpolation between the oval edge and NOAA’s G2 figure; the rest are the NOAA scales page figures.",
      +        "type": "number"
      +      },
      +      "requestedLatitude": {
      +        "description": "Geographic latitude supplied in the request (degrees, −90 to 90).",
      +        "type": "number"
      +      },
      +      "requestedLongitude": {
      +        "description": "Geographic longitude supplied in the request (degrees, −180 to 180).",
      +        "type": "number"
      +      },
      +      "verdict": {
      +        "description": "Plain-language visibility verdict at this geomagnetic latitude, e.g. \"Good aurora chance (42%) — Kp≥6.67 (G3) needed at 51.2° geomagnetic latitude.\"",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "requestedLatitude",
      +      "requestedLongitude",
      +      "geomagneticLatitude",
      +      "gridLatitude",
      +      "gridLongitude",
      +      "auroraPercent",
      +      "minKpRequired",
      +      "minGScale",
      +      "verdict"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  5. Changed6 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "observationTime",
      +      "forecastTime",
      +      "localLookup",
      +      "gridPointCount",
      +      "topAuroraPercent",
      +      "topAuroraRegion"
      +    ]
      +  },
      +  {
      +    "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: `feed_unavailable`: SWPC endpoint returns non-OK status or times out after retries. `invalid_coordinates`: One coordinate provided without the other. Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "feed_unavailable",
      +            "invalid_coordinates"
      +          ],
      +          "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: -[
      -  "observationTime",
      -  "forecastTime",
      -  "localLookup",
      -  "gridPointCount",
      -  "topAuroraPercent",
      -  "topAuroraRegion"
      -]
  6. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly, openWorld, and idempotent hints, so the bar is lower. The description adds genuinely useful behavioral context beyond that: data updates every ~5 minutes, the daylight visibility caveat via sun elevation, the 1000 km poleward search behavior, and the geographic-to-geomagnetic conversion. This is rich, non-redundant disclosure.

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

Conciseness5/5

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

The description is dense but every sentence earns its place: it front-loads the model, time window, and grid, then separates coordinate vs no-coordinate behavior, then adds update frequency and coordinate-system caveats. There is no filler or redundancy.

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 read-only, zero-required-parameter tool with an output schema, the description covers everything needed for correct invocation: both call modes, coordinate format, update cadence, and key output semantics. The optionality of parameters is clear, and no critical usage detail 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 the baseline is 3. The description goes further by explaining that latitude/longitude are optional, must be provided together, are interpreted as WGS84 geographic coordinates, and that the tool internally converts to geomagnetic coordinates — semantics not present in the schema.

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?

The description states a specific resource (OVATION model aurora forecast), a concrete scope (next ~30–60 min, global 1° grid), and the exact output categories. It clearly distinguishes this tool from siblings like get_alerts and get_kp_index by focusing uniquely on aurora probability and visibility.

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?

The description explicitly contrasts the two invocation modes — with coordinates for a local probability and without for global metadata — and instructs that coordinates must be geographic WGS84 because aurora bands are geomagnetic. It does not name alternative sibling tools, but the usage context is clear enough for an agent to select this tool correctly.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.