Skip to main content
Glama

Get Aurora Forecast

noaa_spaceweather_get_aurora_forecast
Read-onlyIdempotent

OVATION model aurora forecast for the next ~30–90 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

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

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.6/5.0
Behavior5/5

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

Goes well beyond the readOnly/openWorld/idempotent annotations: it discloses the 5-minute refresh cadence, the ~30–90 min validity window, the daylight-visibility caveat via sun elevation, the 1000 km poleward horizon look, and the geographic-vs-geomagnetic coordinate conversion. These are behavioral traits an agent cannot infer from structured fields.

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 core purpose and dense with substance, but the second half is a long run-on enumeration of return elements that could be tightened. Nearly every clause earns its place, so no major waste.

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?

Even though an output schema exists (so return values need not be explained), the description still orients the agent on what the local lookup yields and the optional-parameter behavior. 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 the baseline is 3, but the description adds real meaning: coordinates must be supplied as a paired geographic (WGS84) lat/lon and are internally converted to geomagnetic latitude. That pairing rule and coordinate-frame distinction go beyond the schema's per-field text.

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 model (OVATION), resource (aurora forecast), time horizon (~30–90 min), and resolution (1° grid) in the first clause. It also distinguishes the two operating modes (with vs. without coordinates), so the agent can tell it apart from the Kp/conditions/solar-wind siblings at a glance.

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 says what happens with and without coordinates, which is the main decision an agent faces when calling this. It lacks a sibling comparison (e.g., when to prefer get_kp_index for raw geomagnetic activity), so it falls short of a full when/when-not/alternatives treatment.

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.