Skip to main content
Glama

Nws Search Alerts

nws_search_alerts
Read-only

Search active weather alerts (watches, warnings, advisories) across the US. Filter by state, coordinates, zone, land/marine region, event type, severity, urgency, or certainty. area, point, zone, region_type, and region are mutually exclusive — provide at most one. Omit all filters for a national search.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
areaNoUS state/territory code (e.g., "WA", "OK", "PR") or marine area code (e.g., "GM"). Mutually exclusive with point and zone.
zoneNoNWS forecast zone (e.g., "WAZ558") or county zone (e.g., "WAC033"). Mutually exclusive with area and point.
eventNoFilter to specific event types (e.g., ["Tornado Warning"]). Matches are case-insensitive and partial, so "tornado" matches both "Tornado Warning" and "Tornado Watch". Use nws_list_alert_types to discover valid names.
limitNoMaximum number of alerts to include in this page (1-25, default 25). totalCount still reports the full number of distinct matches, so a small limit returns a digest of broad or national searches without dropping the total; pass the returned nextCursor as cursor to reach the rest.
pointNoCoordinates as "lat,lon" (e.g., "47.6,-122.3"). Returns alerts whose geometry contains this point. Mutually exclusive with area and zone.
cursorNoOpaque continuation token from a previous response's nextCursor. Omit for the first page. The token carries its own page size, so limit applies to the first page only. Every call re-fetches the active-alert feed, so alerts are contiguous within one response but not across calls — the active set changes continuously as alerts are issued and expire, so a continued page covers the collection as it stands at that moment.
regionNoRestrict to NWS marine region groups: "AL" (Alaska waters), "AT" (Atlantic Ocean), "GL" (Great Lakes), "GM" (Gulf of Mexico), "PA" (Eastern Pacific and US West Coast), "PI" (Central and Western Pacific). Marine alerts only — a land alert never matches. Mutually exclusive with area, point, zone, and region_type.
statusNoAlert status filter. Default "Actual". Use a different value only when you specifically need non-live alerts.Actual
urgencyNoFilter by urgency level.
severityNoFilter by severity level.
certaintyNoFilter by certainty level.
region_typeNoRestrict to land-based or marine alerts. Mutually exclusive with area, point, zone, and region.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
shownNoNumber of alerts included in this response
alertsNoMatching alerts for this page (at most the requested limit, max 25)
noticeNoGuidance when no alerts matched (echoes applied filters and suggests how to broaden), when matches remain beyond this page, or when the supplied cursor points past the end of the match set.
nextCursorNoOpaque token for the next page of matches — pass it back as `cursor`. Omitted when this is the last page.
totalCountNoTotal distinct alerts matching the filters in this fetch, before the page window is applied. NWS repeats some alerts verbatim within one response; the copies are collapsed on id, so this counts each alert once. Compare against shown to tell whether matches were withheld from this page.
appliedFiltersNoSummary of applied search filters

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `mutually_exclusive_filters`: More than one of area, point, zone, region_type, or region provided `invalid_area_code`: Area code is not a recognized US state, territory, or marine area `invalid_point`: Point coordinates are malformed or outside valid bounds `invalid_zone`: Zone code does not match the NWS zone-code shape `blank_location_filter`: An area, point, or zone filter was provided with a blank value `empty_filter_array`: An event, severity, urgency, certainty, or region filter was provided with no usable entries Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `mutually_exclusive_filters`: More than one of area, point, zone, region_type, or region provided. `invalid_area_code`: Area code is not a recognized US state, territory, or marine area. `invalid_point`: Point coordinates are malformed or outside valid bounds. `invalid_zone`: Zone code does not match the NWS zone-code shape. `blank_location_filter`: An area, point, or zone filter was provided with a blank value. `empty_filter_array`: An event, severity, urgency, certainty, or region filter was provided with no usable entries. Other values are possible when a failure originates below the handler."
  2. Changed1 schema field changed
    • changedInput schema / properties / cursor / description
      Previous value: -"Opaque continuation token from a previous response's nextCursor. Omit for the first page. The token carries its own page size, so limit applies to the first page only. Every call re-fetches /alerts/active, so alerts are contiguous within one response but not across calls — the active set changes continuously as alerts are issued and expire, so a continued page covers the collection as it stands at that moment."New value: +"Opaque continuation token from a previous response's nextCursor. Omit for the first page. The token carries its own page size, so limit applies to the first page only. Every call re-fetches the active-alert feed, so alerts are contiguous within one response but not across calls — the active set changes continuously as alerts are issued and expire, so a continued page covers the collection as it stands at that moment."
  3. Changed12 schema fields changed
    • removedOutput schema / properties / alerts / items / properties / description / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / alerts / items / properties / description / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / alerts / items / properties / ends / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / alerts / items / properties / ends / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / alerts / items / properties / expires / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / alerts / items / properties / expires / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / alerts / items / properties / headline / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / alerts / items / properties / headline / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / alerts / items / properties / instruction / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / alerts / items / properties / instruction / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / alerts / items / properties / onset / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / alerts / items / properties / onset / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  4. 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",
      +      "shown",
      +      "appliedFilters"
      +    ]
      +  },
      +  {
      +    "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: `mutually_exclusive_filters`: More than one of area, point, zone, region_type, or region provided `invalid_area_code`: Area code is not a recognized US state, territory, or marine area `invalid_point`: Point coordinates are malformed or outside valid bounds `invalid_zone`: Zone code does not match the NWS zone-code shape `blank_location_filter`: An area, point, or zone filter was provided with a blank value `empty_filter_array`: An event, severity, urgency, certainty, or region filter was provided with no usable entries Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "mutually_exclusive_filters",
      +            "invalid_area_code",
      +            "invalid_point",
      +            "invalid_zone",
      +            "blank_location_filter",
      +            "empty_filter_array"
      +          ],
      +          "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",
      -  "shown",
      -  "appliedFilters"
      -]
  5. Changed5 schema fields changed
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum number of alerts to include in this page (1-25, default 25). totalCount still reports the full number of matches, so a small limit returns a digest of broad or national searches without dropping the total; pass the returned nextCursor as cursor to reach the rest."New value: +"Maximum number of alerts to include in this page (1-25, default 25). totalCount still reports the full number of distinct matches, so a small limit returns a digest of broad or national searches without dropping the total; pass the returned nextCursor as cursor to reach the rest."
    • addedOutput schema / properties / shown
      Added value: +{
      +  "description": "Number of alerts included in this response",
      +  "type": "number"
      +}
    • removedOutput schema / properties / shownCount
      Removed value: -{
      -  "description": "Number of alerts included in this response",
      -  "type": "number"
      -}
    • changedOutput schema / properties / totalCount / description
      Previous value: -"Total number of matching alerts in this fetch, before the page window is applied"New value: +"Total distinct alerts matching the filters in this fetch, before the page window is applied. NWS repeats some alerts verbatim within one response; the copies are collapsed on id, so this counts each alert once. Compare against shown to tell whether matches were withheld from this page."
    • changedOutput schema / required
      Previous value: -[
      -  "alerts",
      -  "totalCount",
      -  "shownCount",
      -  "appliedFilters"
      -]New value: +[
      +  "alerts",
      +  "totalCount",
      +  "shown",
      +  "appliedFilters"
      +]
  6. Changed17 schema fields changed
    • addedInput schema / properties / region
      Added value: +{
      +  "description": "Restrict to NWS marine region groups: \"AL\" (Alaska waters), \"AT\" (Atlantic Ocean), \"GL\" (Great Lakes), \"GM\" (Gulf of Mexico), \"PA\" (Eastern Pacific and US West Coast), \"PI\" (Central and Western Pacific). Marine alerts only — a land alert never matches. Mutually exclusive with area, point, zone, and region_type.",
      +  "items": {
      +    "enum": [
      +      "AL",
      +      "AT",
      +      "GL",
      +      "GM",
      +      "PA",
      +      "PI"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / region_type
      Added value: +{
      +  "description": "Restrict to land-based or marine alerts. Mutually exclusive with area, point, zone, and region.",
      +  "enum": [
      +    "Land",
      +    "Marine"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / alerts / items / properties / affectedZones / description
      Previous value: -"Affected zone codes"New value: +"Affected zones, each with the zone type that decides where it can chain"
    • addedOutput schema / properties / alerts / items / properties / affectedZones / items / additionalProperties
      Added value: +false
    • addedOutput schema / properties / alerts / items / properties / affectedZones / items / description
      Added value: +"Affected zone with its NWS zone type"
    • addedOutput schema / properties / alerts / items / properties / affectedZones / items / properties
      Added value: +{
      +  "code": {
      +    "description": "Zone code, e.g. \"WAZ558\" (forecast) or \"WAC033\" (county)",
      +    "type": "string"
      +  },
      +  "type": {
      +    "description": "NWS zone type: \"forecast\", \"county\", or \"fire\" (\"unknown\" when upstream reports a shape this server cannot type). Only \"forecast\" codes have a zone text forecast — pass those to nws_get_zone_forecast. All types are valid values for this tool's own zone filter.",
      +    "type": "string"
      +  }
      +}
    • addedOutput schema / properties / alerts / items / properties / affectedZones / items / required
      Added value: +[
      +  "code",
      +  "type"
      +]
    • changedOutput schema / properties / alerts / items / properties / affectedZones / items / type
      Previous value: -"string"New value: +"object"
    • addedOutput schema / properties / alerts / items / properties / description / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / alerts / items / properties / description / description
      Previous value: -"Full alert description"New value: +"Full alert description; null when NWS publishes the alert without one"
    • removedOutput schema / properties / alerts / items / properties / description / type
      Removed value: -"string"
    • addedOutput schema / properties / alerts / items / properties / effective
      Added value: +{
      +  "description": "Message effective time (ISO 8601) — when this version of the CAP message takes effect. A property of the message, not of the hazard: distinct from onset (when the hazard begins) and from expires (when a superseding message is due). Usually equals sent.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / alerts / items / properties / messageType
      Added value: +{
      +  "description": "CAP message type: \"Alert\" for an original issuance, \"Update\" for a revision of an earlier message, \"Cancel\" for a cancellation.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / alerts / items / properties / references
      Added value: +{
      +  "description": "Prior alert messages this one supersedes, newest first. Empty for an original issuance — never inferred when NWS reports none.",
      +  "items": {
      +    "additionalProperties": false,
      +    "description": "One prior message this alert supersedes",
      +    "properties": {
      +      "identifier": {
      +        "description": "CAP identifier of the superseded message",
      +        "type": "string"
      +      },
      +      "sent": {
      +        "description": "When the superseded message was issued (ISO 8601)",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "identifier",
      +      "sent"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / alerts / items / properties / sent
      Added value: +{
      +  "description": "Message issuance time (ISO 8601) — when the office transmitted this CAP message. Describes the message, not the hazard: use it to judge how stale the report is.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / alerts / items / properties / status
      Added value: +{
      +  "description": "This alert's own CAP status as reported by NWS (\"Actual\", \"Exercise\", \"System\", \"Test\", \"Draft\"). Distinct from the status input filter, which selects which alerts are searched — with the default filter every returned alert reads \"Actual\".",
      +  "type": "string"
      +}
    • changedOutput schema / properties / alerts / items / required
      Previous value: -[
      -  "id",
      -  "event",
      -  "headline",
      -  "description",
      -  "instruction",
      -  "severity",
      -  "urgency",
      -  "certainty",
      -  "areaDesc",
      -  "onset",
      -  "ends",
      -  "expires",
      -  "senderName",
      -  "affectedZones"
      -]New value: +[
      +  "id",
      +  "event",
      +  "headline",
      +  "description",
      +  "instruction",
      +  "severity",
      +  "urgency",
      +  "certainty",
      +  "areaDesc",
      +  "sent",
      +  "effective",
      +  "onset",
      +  "ends",
      +  "expires",
      +  "status",
      +  "messageType",
      +  "references",
      +  "senderName",
      +  "affectedZones"
      +]
  7. Changed6 schema fields changed
    • addedInput schema / properties / cursor
      Added value: +{
      +  "description": "Opaque continuation token from a previous response's nextCursor. Omit for the first page. The token carries its own page size, so limit applies to the first page only. Every call re-fetches /alerts/active, so alerts are contiguous within one response but not across calls — the active set changes continuously as alerts are issued and expire, so a continued page covers the collection as it stands at that moment.",
      +  "type": "string"
      +}
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum number of alerts to include in the response (1-25, default 25). totalCount still reports the full number of matches, so a small limit returns a digest of broad or national searches without dropping the total."New value: +"Maximum number of alerts to include in this page (1-25, default 25). totalCount still reports the full number of matches, so a small limit returns a digest of broad or national searches without dropping the total; pass the returned nextCursor as cursor to reach the rest."
    • changedOutput schema / properties / alerts / description
      Previous value: -"Matching alerts (capped at the requested limit, max 25)"New value: +"Matching alerts for this page (at most the requested limit, max 25)"
    • addedOutput schema / properties / nextCursor
      Added value: +{
      +  "description": "Opaque token for the next page of matches — pass it back as `cursor`. Omitted when this is the last page.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / notice / description
      Previous value: -"Guidance when no alerts matched — echoes applied filters and suggests how to broaden the search."New value: +"Guidance when no alerts matched (echoes applied filters and suggests how to broaden), when matches remain beyond this page, or when the supplied cursor points past the end of the match set."
    • changedOutput schema / properties / totalCount / description
      Previous value: -"Total number of matching alerts before the limit/cap is applied"New value: +"Total number of matching alerts in this fetch, before the page window is applied"
  8. Changed3 schema fields changed
    • addedInput schema / properties / limit
      Added value: +{
      +  "default": 25,
      +  "description": "Maximum number of alerts to include in the response (1-25, default 25). totalCount still reports the full number of matches, so a small limit returns a digest of broad or national searches without dropping the total.",
      +  "maximum": 25,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • changedOutput schema / properties / alerts / description
      Previous value: -"Matching alerts (capped at 25)"New value: +"Matching alerts (capped at the requested limit, max 25)"
    • changedOutput schema / properties / totalCount / description
      Previous value: -"Total number of matching alerts before the 25-alert cap"New value: +"Total number of matching alerts before the limit/cap is applied"
  9. Changed2 schema fields changed
    • addedOutput schema / properties / alerts / items / properties / ends
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Hazard end (ISO 8601) — when the hazard is expected to end; null when open-ended (\"until further notice\"). Distinct from expires, which is the message-refresh time."
      +}
    • changedOutput schema / properties / alerts / items / required
      Previous value: -[
      -  "id",
      -  "event",
      -  "headline",
      -  "description",
      -  "instruction",
      -  "severity",
      -  "urgency",
      -  "certainty",
      -  "areaDesc",
      -  "onset",
      -  "expires",
      -  "senderName",
      -  "affectedZones"
      -]New value: +[
      +  "id",
      +  "event",
      +  "headline",
      +  "description",
      +  "instruction",
      +  "severity",
      +  "urgency",
      +  "certainty",
      +  "areaDesc",
      +  "onset",
      +  "ends",
      +  "expires",
      +  "senderName",
      +  "affectedZones"
      +]
  10. Changed8 schema fields changed
    • addedOutput schema / properties / appliedFilters
      Added value: +{
      +  "description": "Summary of applied search filters",
      +  "type": "string"
      +}
    • removedOutput schema / properties / count
      Removed value: -{
      -  "description": "Total number of matching alerts",
      -  "type": "number"
      -}
    • removedOutput schema / properties / filters
      Removed value: -{
      -  "description": "Summary of applied search filters",
      -  "type": "string"
      -}
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "Guidance when no alerts matched — echoes applied filters and suggests how to broaden the search.",
      +  "type": "string"
      +}
    • removedOutput schema / properties / shown
      Removed value: -{
      -  "description": "Number of alerts included in this response",
      -  "type": "number"
      -}
    • addedOutput schema / properties / shownCount
      Added value: +{
      +  "description": "Number of alerts included in this response",
      +  "type": "number"
      +}
    • addedOutput schema / properties / totalCount
      Added value: +{
      +  "description": "Total number of matching alerts before the 25-alert cap",
      +  "type": "number"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "count",
      -  "shown",
      -  "filters",
      -  "alerts"
      -]New value: +[
      +  "alerts",
      +  "totalCount",
      +  "shownCount",
      +  "appliedFilters"
      +]
  11. Changed1 schema field changed
    • addedOutput schema / properties / alerts / items / description
      Added value: +"Single active alert with event, severity, area, and timing"
  12. Changed2 schema fields changed
    • changedOutput schema / properties / alerts / items / properties / expires / description
      Previous value: -"Expiration time (ISO 8601)"New value: +"Message expiration (ISO 8601) — when NWS will issue a superseding statement. NOT when the hazard ends; the hazard window is described in the headline."
    • changedOutput schema / properties / alerts / items / properties / onset / description
      Previous value: -"Expected onset (ISO 8601)"New value: +"Expected hazard onset (ISO 8601). When the hazard is expected to begin."
  13. Changed3 schema fields changed
    • changedInput schema / properties / area / description
      Previous value: -"US state/territory code (e.g., \"WA\", \"OK\", \"PR\") or marine area code (e.g., \"GM\")."New value: +"US state/territory code (e.g., \"WA\", \"OK\", \"PR\") or marine area code (e.g., \"GM\"). Mutually exclusive with point and zone."
    • changedInput schema / properties / point / description
      Previous value: -"Coordinates as \"lat,lon\" (e.g., \"47.6,-122.3\"). Returns alerts whose geometry contains this point."New value: +"Coordinates as \"lat,lon\" (e.g., \"47.6,-122.3\"). Returns alerts whose geometry contains this point. Mutually exclusive with area and zone."
    • changedInput schema / properties / zone / description
      Previous value: -"NWS forecast zone (e.g., \"WAZ558\") or county zone (e.g., \"WAC033\")."New value: +"NWS forecast zone (e.g., \"WAZ558\") or county zone (e.g., \"WAC033\"). Mutually exclusive with area and point."
  14. Changed2 schema fields changed
    • changedInput schema / properties / event / description
      Previous value: -"Filter to specific event types (e.g., [\"Tornado Warning\"]). Exact match (case-insensitive). Use nws_list_alert_types to discover valid names."New value: +"Filter to specific event types (e.g., [\"Tornado Warning\"]). Matches are case-insensitive and partial, so \"tornado\" matches both \"Tornado Warning\" and \"Tornado Watch\". Use nws_list_alert_types to discover valid names."
    • addedInput schema / properties / status
      Added value: +{
      +  "default": "Actual",
      +  "description": "Alert status filter. Default \"Actual\". Use a different value only when you specifically need non-live alerts.",
      +  "enum": [
      +    "Actual",
      +    "Exercise",
      +    "System",
      +    "Test",
      +    "Draft"
      +  ],
      +  "type": "string"
      +}
  15. First observed

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safe-read nature is covered. The description adds that alerts are active (dynamic) and that an unfiltered search covers the whole US, but it does not go beyond that to describe pagination or feed behavior; those details live in the parameter schema rather than the description. No contradiction with annotations.

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?

Three sentences with no filler: action and scope first, then filter dimensions, then the critical exclusivity constraint and default behavior. Every sentence earns its place and is front-loaded.

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?

With 12 fully described parameters, an output schema, and a readOnly annotation, the definition carries everything needed to select and invoke the tool correctly. The description's compact summary plus the rich schema leave no important invocation detail missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the schema already documents each parameter. The description adds value by summarizing the filter taxonomy and stating the at-most-one exclusivity rule plus the national-search default, which is a useful cross-cutting constraint not obvious from any single property 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 first sentence names a specific verb ('Search'), a precise resource ('active weather alerts'), and a scope ('across the US'). The filter list and the 'omit all filters for a national search' line make the tool's role unmistakable among the NWS siblings, none of which search active alerts.

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 gives concrete invocation guidance: which filters exist, that area/point/zone/region_type/region are mutually exclusive, and that omitting all filters yields a national search. It does not explicitly state when to prefer this tool over a sibling or when not to use it, so it stops short of a 5.

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.