Skip to main content
Glama

Get Space Weather Alerts

noaa_spaceweather_get_alerts
Read-onlyIdempotent

Active SWPC alerts, watches, and warnings — parsed into structured records with product type, NOAA scale and level, issue time, serial number, validity window, and plain text. Covers geomagnetic storms, radio blackouts, and radiation storms. With active_only=false, also returns informational summaries, expired notices, and cancellations. max_age_hours controls how far back to look for candidates (default 48 h) — under active_only=true it does not cut off a product whose validity end is still in the future, and under active_only=false it is a literal age cutoff. The SWPC feed keeps all historical records and has no built-in expiry.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
active_onlyNoWhen true (default), return only in-force Warnings, Watches, and Alerts. Excluded: Summaries and unrecognized products; products whose validity end has passed; cancellation notices; any product a later cancellation names by serial; and all but the newest record carrying the "THIS SUPERSEDES ANY/ALL PRIOR WATCHES IN EFFECT" line. Counts per reason ride in the exclusions enrichment field. Set false to return every product in the window, cancellations included (flagged by the cancelled field).
max_age_hoursNoHow far back to look for products, in hours (default 48). The SWPC feed retains all historical records, so this bounds the candidate set rather than declaring what is current. Under active_only=true a product whose validity end is still in the future is returned even when its issue time falls outside this window — a multi-day Watch would otherwise disappear while a day it forecasts a storm for is still running. Under active_only=false it is literal and cuts at exactly the requested age.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
alertsNoMatching SWPC products.
noticeNoSet when no products were returned.
fetchedAtNoISO 8601 fetch time.
activeOnlyNoEcho of active_only: true for the in-force set, false for every product in the window.
exclusionsNoRecords active_only=true left out, each counted under its first reason in field order; with totalCount they sum to the feed total. Present only under active_only=true, when something was excluded.
totalCountNoRecords in alerts.
appliedCutoffNoISO 8601 UTC start of the applied window. Present only under active_only=true.
appliedWindowHoursNomax_age_hours as applied. Present only under active_only=true.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed27 schema fields changed
    • changedOutput schema / properties / activeOnly / description
      Previous value: -"Echo of the active_only input: true when the records are the in-force set, false when they are every product in the window. Distinguishes an empty in-force result from an empty feed window."New value: +"Echo of active_only: true for the in-force set, false for every product in the window."
    • changedOutput schema / properties / alerts / description
      Previous value: -"Matching SWPC alert/watch/warning records."New value: +"Matching SWPC products."
    • changedOutput schema / properties / alerts / items / description
      Previous value: -"One SWPC alert, watch, warning, or summary."New value: +"One SWPC product."
    • changedOutput schema / properties / alerts / items / properties / cancelled / description
      Previous value: -"True when this record cancels a previously issued product (\"CANCEL WARNING:\"/\"CANCEL WATCH:\"/\"CANCEL ALERT:\" headline) rather than being in force. Always false when active_only=true, which excludes both the cancellation record and the product it names — a cancelled product carries cancelled: false itself, so this flag does not identify one. Set active_only=false to see cancellations and what they cancelled."New value: +"True when this record cancels an earlier product; the cancelled product itself stays false. Always false under active_only=true, which drops both."
    • changedOutput schema / properties / alerts / items / properties / issueDatetime / description
      Previous value: -"ISO 8601 issue datetime."New value: +"ISO 8601 issue time."
    • changedOutput schema / properties / alerts / items / properties / level / description
      Previous value: -"NOAA scale level 0–5, read from the scale stated in the message body. 0 means the product states no NOAA scale (e.g. a K4 warning, below the G-scale; or a radio-burst alert, outside the scales) — not a severity of zero. See noaaScale for the scale letter."New value: +"NOAA scale level 0–5 stated in the body; 0 means no scale is stated, not zero severity."
    • changedOutput schema / properties / alerts / items / properties / message / description
      Previous value: -"Full plain-text message body."New value: +"Full plain-text message."
    • changedOutput schema / properties / alerts / items / properties / messageCode / description
      Previous value: -"Full SWPC \"Space Weather Message Code\" parsed from the message body, e.g. \"WARK04\", \"ALTEF3\" — the code that drives product type, phenomenon, and level."New value: +"Full message code from the body, e.g. \"WARK04\"."
    • changedOutput schema / properties / alerts / items / properties / noaaScale / description
      Previous value: -"NOAA scale stated in the message body, e.g. \"G1\", \"R2\", \"S1\"; null when the product states none."New value: +"NOAA scale stated in the body, e.g. \"G1\"; null when none."
    • changedOutput schema / properties / alerts / items / properties / phenomenon / description
      Previous value: -"Short phenomenon name derived from the body's NOAA scale letter, e.g. \"Geomagnetic\", \"Radio Blackout\", \"Solar Radiation\"."New value: +"Phenomenon from the scale letter, e.g. \"Geomagnetic\"."
    • changedOutput schema / properties / alerts / items / properties / productId / description
      Previous value: -"Short SWPC feed product ID, e.g. \"K04W\", \"EF3A\". See messageCode for the full code."New value: +"Short SWPC product ID, e.g. \"K04W\"."
    • changedOutput schema / properties / alerts / items / properties / productType / description
      Previous value: -"Product classification derived from the code prefix."New value: +"Product type, from the code prefix."
    • changedOutput schema / properties / alerts / items / properties / serialNumber / description
      Previous value: -"The record's SWPC \"Serial Number:\" value, e.g. \"1125\"; null when the body carries no such line. A per-message-code counter, not a globally unique ID — it repeats across codes and within one code on a corrected reissue, so quote it together with messageCode. It is the key the \"Cancel Serial Number:\", \"Extension to Serial Number:\", and \"Continuation of Serial Number:\" lines in message point at, which is what makes those chains navigable."New value: +"SWPC serial number, e.g. \"1125\"; null when absent. Unique only within messageCode; the Cancel, Extension to, and Continuation of Serial Number lines in message point at it."
    • changedOutput schema / properties / alerts / items / properties / validFrom / description
      Previous value: -"Validity-window start as ISO 8601 UTC, parsed from the message body (\"Valid From\" or \"Begin Time\"); null when the product carries no start line."New value: +"ISO 8601 UTC validity start stated in the body; null when none."
    • changedOutput schema / properties / alerts / items / properties / validTo / description
      Previous value: -"Validity-window end as ISO 8601 UTC. Read from the message body's \"Valid To\", \"Now Valid Until\", or \"End Time\" label when the product states one. A Watch states none, so its end is derived from the \"Highest Storm Level Predicted by Day:\" list instead: the instant the last listed UTC day forecasting a storm ends (a trailing \"None\" day is a forecast of quiet, not coverage), so a Watch listing Sep 17 as its last storm day ends at 2026-09-18T00:00:00Z. Null when nothing in the body states or implies an end — a point-in-time Alert, or a Watch forecasting no storm on any listed day."New value: +"ISO 8601 UTC validity end; for a Watch, the end of its last listed storm day. Null when nothing states or implies an end."
    • changedOutput schema / properties / appliedCutoff / description
      Previous value: -"ISO 8601 UTC instant the applied window starts at: a product issued before this is outside it. Present only under active_only=true."New value: +"ISO 8601 UTC start of the applied window. Present only under active_only=true."
    • changedOutput schema / properties / appliedWindowHours / description
      Previous value: -"The max_age_hours window as applied, echoed so a caller can see what bounded the candidate set. Present only under active_only=true, where a future validity end can keep an older product in scope."New value: +"max_age_hours as applied. Present only under active_only=true."
    • changedOutput schema / properties / exclusions / description
      Previous value: -"How many products active_only=true left out, by reason. Reasons overlap, so each excluded record is counted under the first that applies, in this field order — these counts plus totalCount equal the number of records the feed carried. Emitted only when something was excluded, and never under active_only=false. Use it to tell \"space weather is quiet\" from \"everything was filtered\" without a second active_only=false call."New value: +"Records active_only=true left out, each counted under its first reason in field order; with totalCount they sum to the feed total. Present only under active_only=true, when something was excluded."
    • changedOutput schema / properties / exclusions / properties / agedOut / description
      Previous value: -"Issued outside the applied window with no validity end still ahead."New value: +"Issued before the window, no validity end ahead."
    • changedOutput schema / properties / exclusions / properties / cancellationRecord / description
      Previous value: -"Cancellation notices themselves."New value: +"Cancellation notices."
    • changedOutput schema / properties / exclusions / properties / cancelledBySerial / description
      Previous value: -"Named by a later cancellation's \"Cancel Serial Number:\" under the same code."New value: +"Named by a later cancellation."
    • changedOutput schema / properties / exclusions / properties / productType / description
      Previous value: -"Summaries and unrecognized products, which are never in force."New value: +"Summaries and unrecognized products."
    • changedOutput schema / properties / exclusions / properties / superseded / description
      Previous value: -"Carries the supersede line but is not the newest record that does."New value: +"Replaced by a newer superseding Watch."
    • changedOutput schema / properties / exclusions / properties / validityElapsed / description
      Previous value: -"Validity end already passed, with nothing newer cancelling or superseding it."New value: +"Validity end already passed."
    • changedOutput schema / properties / fetchedAt / description
      Previous value: -"ISO 8601 timestamp of when this data was fetched."New value: +"ISO 8601 fetch time."
    • changedOutput schema / properties / notice / description
      Previous value: -"Status notice when no products were returned."New value: +"Set when no products were returned."
    • changedOutput schema / properties / totalCount / description
      Previous value: -"Count of records in the alerts array."New value: +"Records in alerts."
  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). Fails in one attempt. 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). Fails in one attempt. Other values are possible when a failure originates below the handler."
  3. Changed14 schema fields changed
    • changedInput schema / properties / active_only / description
      Previous value: -"When true (default), return only in-force Warnings, Watches, and Alerts; exclude Summaries, Other, expired products, and cancellation notices. Set false to return all products, including cancellations (flagged by the cancelled field)."New value: +"When true (default), return only in-force Warnings, Watches, and Alerts. Excluded: Summaries and unrecognized products; products whose validity end has passed; cancellation notices; any product a later cancellation names by serial; and all but the newest record carrying the \"THIS SUPERSEDES ANY/ALL PRIOR WATCHES IN EFFECT\" line. Counts per reason ride in the exclusions enrichment field. Set false to return every product in the window, cancellations included (flagged by the cancelled field)."
    • changedInput schema / properties / max_age_hours / description
      Previous value: -"Maximum age of alerts to return, in hours (default 48). The SWPC feed retains all historical records — this window prevents returning weeks of historical notices as \"active.\""New value: +"How far back to look for products, in hours (default 48). The SWPC feed retains all historical records, so this bounds the candidate set rather than declaring what is current. Under active_only=true a product whose validity end is still in the future is returned even when its issue time falls outside this window — a multi-day Watch would otherwise disappear while a day it forecasts a storm for is still running. Under active_only=false it is literal and cuts at exactly the requested age."
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "not": {
      -      "required": [
      -        "error"
      -      ]
      -    },
      -    "required": [
      -      "alerts",
      -      "totalCount",
      -      "fetchedAt"
      -    ]
      -  },
      -  {
      -    "required": [
      -      "error"
      -    ]
      -  }
      -]New value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "alerts",
      +      "totalCount",
      +      "activeOnly",
      +      "fetchedAt"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / activeOnly
      Added value: +{
      +  "description": "Echo of the active_only input: true when the records are the in-force set, false when they are every product in the window. Distinguishes an empty in-force result from an empty feed window.",
      +  "type": "boolean"
      +}
    • changedOutput schema / properties / alerts / items / properties / cancelled / description
      Previous value: -"True when this record cancels a previously issued product (\"CANCEL WARNING:\"/\"CANCEL ALERT:\" headline) rather than being in force. Always false when active_only=true, which excludes cancellations; set active_only=false to see them."New value: +"True when this record cancels a previously issued product (\"CANCEL WARNING:\"/\"CANCEL WATCH:\"/\"CANCEL ALERT:\" headline) rather than being in force. Always false when active_only=true, which excludes both the cancellation record and the product it names — a cancelled product carries cancelled: false itself, so this flag does not identify one. Set active_only=false to see cancellations and what they cancelled."
    • addedOutput schema / properties / alerts / items / properties / serialNumber
      Added value: +{
      +  "description": "The record's SWPC \"Serial Number:\" value, e.g. \"1125\"; null when the body carries no such line. A per-message-code counter, not a globally unique ID — it repeats across codes and within one code on a corrected reissue, so quote it together with messageCode. It is the key the \"Cancel Serial Number:\", \"Extension to Serial Number:\", and \"Continuation of Serial Number:\" lines in message point at, which is what makes those chains navigable.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / alerts / items / properties / validTo / description
      Previous value: -"Validity-window end as ISO 8601 UTC, parsed from the message body (\"Valid To\", \"Now Valid Until\", or \"End Time\"); null when the product carries no end line."New value: +"Validity-window end as ISO 8601 UTC. Read from the message body's \"Valid To\", \"Now Valid Until\", or \"End Time\" label when the product states one. A Watch states none, so its end is derived from the \"Highest Storm Level Predicted by Day:\" list instead: the instant the last listed UTC day forecasting a storm ends (a trailing \"None\" day is a forecast of quiet, not coverage), so a Watch listing Sep 17 as its last storm day ends at 2026-09-18T00:00:00Z. Null when nothing in the body states or implies an end — a point-in-time Alert, or a Watch forecasting no storm on any listed day."
    • changedOutput schema / properties / alerts / items / required
      Previous value: -[
      -  "productId",
      -  "messageCode",
      -  "productType",
      -  "level",
      -  "noaaScale",
      -  "cancelled",
      -  "phenomenon",
      -  "issueDatetime",
      -  "validFrom",
      -  "validTo",
      -  "message"
      -]New value: +[
      +  "productId",
      +  "messageCode",
      +  "productType",
      +  "level",
      +  "noaaScale",
      +  "cancelled",
      +  "serialNumber",
      +  "phenomenon",
      +  "issueDatetime",
      +  "validFrom",
      +  "validTo",
      +  "message"
      +]
    • addedOutput schema / properties / appliedCutoff
      Added value: +{
      +  "description": "ISO 8601 UTC instant the applied window starts at: a product issued before this is outside it. Present only under active_only=true.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / appliedWindowHours
      Added value: +{
      +  "description": "The max_age_hours window as applied, echoed so a caller can see what bounded the candidate set. Present only under active_only=true, where a future validity end can keep an older product in scope.",
      +  "type": "number"
      +}
    • 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. 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. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "feed_unavailable"
      -]New value: +[
      +  "feed_unavailable",
      +  "feed_moved"
      +]
    • addedOutput schema / properties / exclusions
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "How many products active_only=true left out, by reason. Reasons overlap, so each excluded record is counted under the first that applies, in this field order — these counts plus totalCount equal the number of records the feed carried. Emitted only when something was excluded, and never under active_only=false. Use it to tell \"space weather is quiet\" from \"everything was filtered\" without a second active_only=false call.",
      +  "properties": {
      +    "agedOut": {
      +      "description": "Issued outside the applied window with no validity end still ahead.",
      +      "type": "number"
      +    },
      +    "cancellationRecord": {
      +      "description": "Cancellation notices themselves.",
      +      "type": "number"
      +    },
      +    "cancelledBySerial": {
      +      "description": "Named by a later cancellation's \"Cancel Serial Number:\" under the same code.",
      +      "type": "number"
      +    },
      +    "productType": {
      +      "description": "Summaries and unrecognized products, which are never in force.",
      +      "type": "number"
      +    },
      +    "superseded": {
      +      "description": "Carries the supersede line but is not the newest record that does.",
      +      "type": "number"
      +    },
      +    "validityElapsed": {
      +      "description": "Validity end already passed, with nothing newer cancelling or superseding it.",
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "agedOut",
      +    "productType",
      +    "cancellationRecord",
      +    "cancelledBySerial",
      +    "superseded",
      +    "validityElapsed"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / properties / notice / description
      Previous value: -"Status notice when no alerts are active."New value: +"Status notice when no products were returned."
  4. Changed6 schema fields changed
    • removedOutput schema / properties / alerts / items / properties / noaaScale / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / alerts / items / properties / noaaScale / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / alerts / items / properties / validFrom / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / alerts / items / properties / validFrom / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / alerts / items / properties / validTo / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / alerts / items / properties / validTo / type
      Added value: +[
      +  "string",
      +  "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": [
      +      "alerts",
      +      "totalCount",
      +      "fetchedAt"
      +    ]
      +  },
      +  {
      +    "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. Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "feed_unavailable"
      +          ],
      +          "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: -[
      -  "alerts",
      -  "totalCount",
      -  "fetchedAt"
      -]
  6. Changed6 schema fields changed
    • changedInput schema / properties / active_only / description
      Previous value: -"When true (default), return only Warnings, Watches, and Alerts; exclude Summaries and Other. Set false to return all products."New value: +"When true (default), return only in-force Warnings, Watches, and Alerts; exclude Summaries, Other, expired products, and cancellation notices. Set false to return all products, including cancellations (flagged by the cancelled field)."
    • addedOutput schema / properties / alerts / items / properties / cancelled
      Added value: +{
      +  "description": "True when this record cancels a previously issued product (\"CANCEL WARNING:\"/\"CANCEL ALERT:\" headline) rather than being in force. Always false when active_only=true, which excludes cancellations; set active_only=false to see them.",
      +  "type": "boolean"
      +}
    • changedOutput schema / properties / alerts / items / properties / level / description
      Previous value: -"Numeric severity level from the product code (0 when not applicable)."New value: +"NOAA scale level 0–5, read from the scale stated in the message body. 0 means the product states no NOAA scale (e.g. a K4 warning, below the G-scale; or a radio-burst alert, outside the scales) — not a severity of zero. See noaaScale for the scale letter."
    • addedOutput schema / properties / alerts / items / properties / noaaScale
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "NOAA scale stated in the message body, e.g. \"G1\", \"R2\", \"S1\"; null when the product states none."
      +}
    • changedOutput schema / properties / alerts / items / properties / phenomenon / description
      Previous value: -"Short phenomenon name, e.g. \"Geomagnetic\", \"Radio Blackout\", \"Solar Radiation\"."New value: +"Short phenomenon name derived from the body's NOAA scale letter, e.g. \"Geomagnetic\", \"Radio Blackout\", \"Solar Radiation\"."
    • changedOutput schema / properties / alerts / items / required
      Previous value: -[
      -  "productId",
      -  "messageCode",
      -  "productType",
      -  "level",
      -  "phenomenon",
      -  "issueDatetime",
      -  "validFrom",
      -  "validTo",
      -  "message"
      -]New value: +[
      +  "productId",
      +  "messageCode",
      +  "productType",
      +  "level",
      +  "noaaScale",
      +  "cancelled",
      +  "phenomenon",
      +  "issueDatetime",
      +  "validFrom",
      +  "validTo",
      +  "message"
      +]
  7. Changed3 schema fields changed
    • addedOutput schema / properties / alerts / items / properties / messageCode
      Added value: +{
      +  "description": "Full SWPC \"Space Weather Message Code\" parsed from the message body, e.g. \"WARK04\", \"ALTEF3\" — the code that drives product type, phenomenon, and level.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / alerts / items / properties / productId / description
      Previous value: -"SWPC product code, e.g. \"WARK04\", \"ALTK07\"."New value: +"Short SWPC feed product ID, e.g. \"K04W\", \"EF3A\". See messageCode for the full code."
    • changedOutput schema / properties / alerts / items / required
      Previous value: -[
      -  "productId",
      -  "productType",
      -  "level",
      -  "phenomenon",
      -  "issueDatetime",
      -  "validFrom",
      -  "validTo",
      -  "message"
      -]New value: +[
      +  "productId",
      +  "messageCode",
      +  "productType",
      +  "level",
      +  "phenomenon",
      +  "issueDatetime",
      +  "validFrom",
      +  "validTo",
      +  "message"
      +]
  8. Changed2 schema fields changed
    • changedOutput schema / properties / alerts / items / properties / validFrom / description
      Previous value: -"Validity start parsed from the message body, null if not found."New value: +"Validity-window start as ISO 8601 UTC, parsed from the message body (\"Valid From\" or \"Begin Time\"); null when the product carries no start line."
    • changedOutput schema / properties / alerts / items / properties / validTo / description
      Previous value: -"Validity end parsed from the message body, null if not found."New value: +"Validity-window end as ISO 8601 UTC, parsed from the message body (\"Valid To\", \"Now Valid Until\", or \"End Time\"); null when the product carries no end line."
  9. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnly and idempotent annotations, the description explains important behaviors: the effect of active_only on exclusions, the literal cutoff under active_only=false, and the SWPC feed's retention of all historical records. This gives the agent a precise model of what results to expect.

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 compact for the complexity it conveys. The primary purpose is front-loaded, followed by the two key behavioral caveats, with no filler or redundant statements.

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?

Given the tool's moderate complexity, the annotations, output schema, and full parameter coverage, the description covers everything an agent needs to invoke it correctly and interpret the result semantics. The special handling of superseded products and expiry is disclosed, leaving no critical gaps.

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

Parameters5/5

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

The input schema already documents both parameters thoroughly, and the description goes further by explaining the cross-parameter interaction between active_only and max_age_hours. This added nuance about validity windows versus literal age cutoff is essential for correct usage and is not fully captured by the schema alone.

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 clearly identifies the tool as returning active SWPC alerts, watches, and warnings parsed into structured records, and names the specific event types covered. This distinguishes it from the sibling tools that focus on aurora, Kp index, solar activity, and solar wind.

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 makes the tool's context clear: use it for alert, watch, and warning products rather than forecasts or raw indices. It does not explicitly name alternatives or state when not to use this tool, but the scope is well enough defined that an agent can infer the right selection.

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.