Skip to main content
Glama

Get Solar Wind

noaa_spaceweather_get_solar_wind
Read-onlyIdempotent

Real-time solar wind measurements from the active spacecraft at L1: proton speed (km/s), density (n/cm³), temperature (K), and the critical Bz component (southward Bz = negative = storm driver). Returns the recent plasma and magnetic field time series within the requested window, oldest first, each record tagged with the reporting spacecraft. Bz < −10 nT for sustained periods is a primary geomagnetic storm trigger — use alongside noaa_spaceweather_get_kp_index to see whether elevated solar wind has translated into a geomagnetic storm.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
window_hoursNoHours of recent solar wind history to return (1–168, default 3). Records update ~every 1 min, but the feed only carries roughly the last 24 hours — a larger window returns the whole feed, not more history. When a window comes back empty, feedStalenessHours and latestFeedPlasmaTime/latestFeedMagTime report how current the feed actually is.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
magNoMagnetic field measurements (Bx, By, Bz, Bt) within the window, oldest first.
errorNoPresent when the call failed. Absent on success.
noticeNoGuidance when the requested window returned no plasma or magnetic field records — names the newest record the feed carries, or reports that the feed itself returned nothing from an active spacecraft.
plasmaNoPlasma measurements (speed, density, temperature) within the window, oldest first.
bzStatusNoPlain-language Bz status, e.g. "Southward Bz −14 nT — storm-driving conditions" or "Northward Bz +5 nT — quiescent".
magCountNoNumber of magnetic field records in the mag array, spanning the requested window.
latestMagNoMost recent magnetic field reading, null if no data in window.
plasmaCountNoNumber of plasma records in the plasma array, spanning the requested window.
latestPlasmaNoMost recent plasma reading, null if no data in window.
latestFeedMagTimeNoISO 8601 time of the newest magnetic field record the feed carries, ignoring the window. Null when the feed returned no active-spacecraft mag records.
feedStalenessHoursNoHours between now and the newest record across both feeds — how far behind real time the upstream data is. Null when both feeds returned no active-spacecraft records.
latestFeedPlasmaTimeNoISO 8601 time of the newest plasma record the feed carries, ignoring the window. Null when the feed returned no active-spacecraft plasma records. Compare against the window to tell a quiet feed from a stale one.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 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": [
      +      "plasma",
      +      "mag",
      +      "latestPlasma",
      +      "latestMag",
      +      "bzStatus",
      +      "plasmaCount",
      +      "magCount",
      +      "latestFeedPlasmaTime",
      +      "latestFeedMagTime",
      +      "feedStalenessHours"
      +    ]
      +  },
      +  {
      +    "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: -[
      -  "plasma",
      -  "mag",
      -  "latestPlasma",
      -  "latestMag",
      -  "bzStatus",
      -  "plasmaCount",
      -  "magCount",
      -  "latestFeedPlasmaTime",
      -  "latestFeedMagTime",
      -  "feedStalenessHours"
      -]
  2. Changed23 schema fields changed
    • changedInput schema / properties / window_hours / description
      Previous value: -"Hours of recent solar wind history to return (1–168, default 3). Feeds update ~every 1 min."New value: +"Hours of recent solar wind history to return (1–168, default 3). Records update ~every 1 min, but the feed only carries roughly the last 24 hours — a larger window returns the whole feed, not more history. When a window comes back empty, feedStalenessHours and latestFeedPlasmaTime/latestFeedMagTime report how current the feed actually is."
    • addedOutput schema / properties / feedStalenessHours
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Hours between now and the newest record across both feeds — how far behind real time the upstream data is. Null when both feeds returned no active-spacecraft records."
      +}
    • addedOutput schema / properties / latestFeedMagTime
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "ISO 8601 time of the newest magnetic field record the feed carries, ignoring the window. Null when the feed returned no active-spacecraft mag records."
      +}
    • addedOutput schema / properties / latestFeedPlasmaTime
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "ISO 8601 time of the newest plasma record the feed carries, ignoring the window. Null when the feed returned no active-spacecraft plasma records. Compare against the window to tell a quiet feed from a stale one."
      +}
    • changedOutput schema / properties / latestMag / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "description": "One DSCOVR magnetic field measurement.",
      -    "properties": {
      -      "bt": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Total field magnitude Bt (nT). Null when sensor fill value."
      -      },
      -      "bxGsm": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Bx component in GSM coordinates (nT). Null when sensor fill value."
      -      },
      -      "byGsm": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "By component in GSM coordinates (nT). Null when sensor fill value."
      -      },
      -      "bzGsm": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Bz component in GSM coordinates (nT). Southward (negative) drives geomagnetic storms. Null when sensor fill value."
      -      },
      -      "timeTag": {
      -        "description": "ISO 8601 measurement time tag.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "timeTag",
      -      "bxGsm",
      -      "byGsm",
      -      "bzGsm",
      -      "bt"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "description": "One magnetic field measurement from the active L1 spacecraft.",
      +    "properties": {
      +      "bt": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Total field magnitude Bt (nT). Null when the feed omits the value."
      +      },
      +      "bxGsm": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Bx component in GSM coordinates (nT). Null when the feed omits the value."
      +      },
      +      "byGsm": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "By component in GSM coordinates (nT). Null when the feed omits the value."
      +      },
      +      "bzGsm": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Bz component in GSM coordinates (nT). Southward (negative) drives geomagnetic storms. Null when the feed omits the value."
      +      },
      +      "source": {
      +        "description": "Spacecraft that reported this measurement, as named by the feed, e.g. \"SOLAR1\".",
      +        "type": "string"
      +      },
      +      "timeTag": {
      +        "description": "ISO 8601 measurement time tag.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "timeTag",
      +      "source",
      +      "bxGsm",
      +      "byGsm",
      +      "bzGsm",
      +      "bt"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / latestPlasma / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "description": "One DSCOVR plasma measurement.",
      -    "properties": {
      -      "densityPerCm3": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Proton density in particles/cm³. Null when sensor fill value."
      -      },
      -      "speedKmS": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Solar wind speed in km/s. Null when sensor fill value."
      -      },
      -      "temperatureK": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Proton temperature in Kelvin. Null when sensor fill value."
      -      },
      -      "timeTag": {
      -        "description": "ISO 8601 measurement time tag.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "timeTag",
      -      "densityPerCm3",
      -      "speedKmS",
      -      "temperatureK"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "description": "One plasma measurement from the active L1 spacecraft.",
      +    "properties": {
      +      "densityPerCm3": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Proton density in particles/cm³. Null when the feed omits the value."
      +      },
      +      "source": {
      +        "description": "Spacecraft that reported this measurement, as named by the feed, e.g. \"SOLAR1\".",
      +        "type": "string"
      +      },
      +      "speedKmS": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Solar wind speed in km/s. Null when the feed omits the value."
      +      },
      +      "temperatureK": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Proton temperature in Kelvin. Null when the feed omits the value."
      +      },
      +      "timeTag": {
      +        "description": "ISO 8601 measurement time tag.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "timeTag",
      +      "source",
      +      "densityPerCm3",
      +      "speedKmS",
      +      "temperatureK"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / mag / description
      Previous value: -"Magnetic field measurements (Bx, By, Bz, Bt) within the window."New value: +"Magnetic field measurements (Bx, By, Bz, Bt) within the window, oldest first."
    • changedOutput schema / properties / mag / items / description
      Previous value: -"One DSCOVR magnetic field measurement."New value: +"One magnetic field measurement from the active L1 spacecraft."
    • changedOutput schema / properties / mag / items / properties / bt / description
      Previous value: -"Total field magnitude Bt (nT). Null when sensor fill value."New value: +"Total field magnitude Bt (nT). Null when the feed omits the value."
    • changedOutput schema / properties / mag / items / properties / bxGsm / description
      Previous value: -"Bx component in GSM coordinates (nT). Null when sensor fill value."New value: +"Bx component in GSM coordinates (nT). Null when the feed omits the value."
    • changedOutput schema / properties / mag / items / properties / byGsm / description
      Previous value: -"By component in GSM coordinates (nT). Null when sensor fill value."New value: +"By component in GSM coordinates (nT). Null when the feed omits the value."
    • changedOutput schema / properties / mag / items / properties / bzGsm / description
      Previous value: -"Bz component in GSM coordinates (nT). Southward (negative) drives geomagnetic storms. Null when sensor fill value."New value: +"Bz component in GSM coordinates (nT). Southward (negative) drives geomagnetic storms. Null when the feed omits the value."
    • addedOutput schema / properties / mag / items / properties / source
      Added value: +{
      +  "description": "Spacecraft that reported this measurement, as named by the feed, e.g. \"SOLAR1\".",
      +  "type": "string"
      +}
    • changedOutput schema / properties / mag / items / required
      Previous value: -[
      -  "timeTag",
      -  "bxGsm",
      -  "byGsm",
      -  "bzGsm",
      -  "bt"
      -]New value: +[
      +  "timeTag",
      +  "source",
      +  "bxGsm",
      +  "byGsm",
      +  "bzGsm",
      +  "bt"
      +]
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "Guidance when the requested window returned no plasma or magnetic field records — names the newest record the feed carries, or reports that the feed itself returned nothing from an active spacecraft.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / plasma / description
      Previous value: -"Plasma measurements (speed, density, temperature) within the window."New value: +"Plasma measurements (speed, density, temperature) within the window, oldest first."
    • changedOutput schema / properties / plasma / items / description
      Previous value: -"One DSCOVR plasma measurement."New value: +"One plasma measurement from the active L1 spacecraft."
    • changedOutput schema / properties / plasma / items / properties / densityPerCm3 / description
      Previous value: -"Proton density in particles/cm³. Null when sensor fill value."New value: +"Proton density in particles/cm³. Null when the feed omits the value."
    • addedOutput schema / properties / plasma / items / properties / source
      Added value: +{
      +  "description": "Spacecraft that reported this measurement, as named by the feed, e.g. \"SOLAR1\".",
      +  "type": "string"
      +}
    • changedOutput schema / properties / plasma / items / properties / speedKmS / description
      Previous value: -"Solar wind speed in km/s. Null when sensor fill value."New value: +"Solar wind speed in km/s. Null when the feed omits the value."
    • changedOutput schema / properties / plasma / items / properties / temperatureK / description
      Previous value: -"Proton temperature in Kelvin. Null when sensor fill value."New value: +"Proton temperature in Kelvin. Null when the feed omits the value."
    • changedOutput schema / properties / plasma / items / required
      Previous value: -[
      -  "timeTag",
      -  "densityPerCm3",
      -  "speedKmS",
      -  "temperatureK"
      -]New value: +[
      +  "timeTag",
      +  "source",
      +  "densityPerCm3",
      +  "speedKmS",
      +  "temperatureK"
      +]
    • changedOutput schema / required
      Previous value: -[
      -  "plasma",
      -  "mag",
      -  "latestPlasma",
      -  "latestMag",
      -  "bzStatus",
      -  "plasmaCount",
      -  "magCount"
      -]New value: +[
      +  "plasma",
      +  "mag",
      +  "latestPlasma",
      +  "latestMag",
      +  "bzStatus",
      +  "plasmaCount",
      +  "magCount",
      +  "latestFeedPlasmaTime",
      +  "latestFeedMagTime",
      +  "feedStalenessHours"
      +]
  3. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/openWorld/idempotent, but the description adds substantial behavior beyond that: update frequency (~1 min), feed retention (~24 hours), that larger windows return the whole feed, records sorted oldest-first, spacecraft tagging, and handling of empty windows via feedStalenessHours/latestFeed times. This covers edge cases and data provenance thoroughly.

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?

While lengthy, every sentence adds operational value—data content, sorting, spacecraft tags, storm significance, and cross-referencing. The main purpose is front-loaded, and the structure flows from what the tool returns to how to interpret it. 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?

Given the tool's complexity (feed special cases, storm relevance), the description is complete: it covers the data, the parameter's behavior, what to pair it with, and how to interpret errors (empty window). The output schema exists, so return details aren't needed. The description fully enables correct selection and invocation.

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 schema describes window_hours with range and default (100% coverage, baseline 3), but the description adds critical semantics: what happens with windows >24h (returns whole feed, not more history), the meaning of an empty window, and how to check feed currentness. This goes beyond the schema and directly impacts correct invocation.

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 verb and resource: 'Real-time solar wind measurements from the active spacecraft at L1', and enumerates exact data fields (proton speed, density, temperature, Bz). It clearly distinguishes itself from sibling tools (alerts, aurora, conditions, KP, solar activity) by focusing on solar wind plasma and magnetic field data.

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?

It provides clear usage context: Bz threshold for storm triggers, and explicitly recommends using alongside noaa_spaceweather_get_kp_index to assess storm translation. While it doesn't explicitly state 'don't use for X', the domain is so specific that alternatives are obvious, and the pairing guidance is actionable.

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.

TDQS

A4.5/5.0
Disambiguation5/5

Each tool targets a distinct aspect of space weather: alerts, aurora forecast, conditions snapshot, Kp index, solar activity, and solar wind. No two tools serve the same purpose, and the descriptions clearly delineate when to use each (e.g., conditions for a quick overview versus Kp for time series detail).

Naming Consistency5/5

All tools follow the exact same pattern: `noaa_spaceweather_get_<resource>`. This is perfectly consistent and predictable, making it easy for an agent to infer tool purpose from the name alone.

Tool Count5/5

With 6 tools, the server covers the major space-weather data categories without being overwhelming. Each tool provides substantial, non-redundant information, and the scope aligns well with what an agent might need for operational space-weather queries.

Completeness5/5

The tool set spans alerts/warnings, current conditions, KP index, solar activity, solar wind, and aurora forecasts – covering the full lifecycle of space-weather monitoring. No obvious missing operations exist; the description even cross-references tools to guide exploration (e.g., conditions leads to solar wind, aurora, or alerts).