Skip to main content
Glama
Ownership verified

Server Details

Smarter Weather MCP: forecasts, alerts, outlooks, observations, AQI, grids, and map imagery.

Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
smarterweather/developer
GitHub Stars
1

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 4.4/5 across 28 of 28 tools scored.

Server CoherenceA
Disambiguation5/5

Each tool has a clearly distinct purpose, covering different aspects of weather data (forecasts, observations, alerts, lightning, storms, air quality, etc.). Potential overlaps like get_forecast and get_current_conditions are clarified in descriptions, preventing confusion.

Naming Consistency4/5

Most tools follow a verb_noun pattern, but the verbs vary (get, list, describe, find, reverse, search, compare, query). While the format is consistent, the lack of a single verb prefix reduces predictability.

Tool Count4/5

28 tools is on the higher side but appropriate given the broad scope of weather data covered (forecasts, observations, alerts, lightning, storms, air quality, datasets, maps, etc.). Each tool serves a specific function, justifying the count.

Completeness5/5

The tool surface is highly comprehensive, covering nearly all major weather data types: forecasts, observations, alerts, climate records, lightning, storms, air quality, tropical, sounding, maps, and specialized tools like growing degree days and population exposure. No obvious gaps for a general weather server.

Available Tools

31 tools
compare_locationsCompare locationsA
Read-onlyIdempotent
Inspect

Compare forecast variables across multiple locations side-by-side in one batched call. Returns a distilled per-location series matrix for direct comparison -- prefer this over N sequential forecast calls. Locations accept place names directly. Example: {"locations": [{"location": "Denver"}, {"location": "Boulder, CO"}], "variables": ["temperature_2m", "precipitation_probability"], "hours": 48}.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNoForecast hours. Default 24.
locationsYesLocations to compare (2-10). Each takes location OR lat/lon, optional label.
variablesYesStandard variable names (e.g. temperature_2m, precipitation).
dataset_idNoDataset override. Default: auto-resolved NBM per location.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hoursYes
variablesYes
comparisonsYes
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint, providing safety profile. Description adds behavioral specifics: batched call, returns comparison matrix, accepts place names directly. No contradictions.

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?

Two concise sentences plus a focused example. No fluff. Purpose stated first. Every sentence adds value.

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 4 parameters, 2 required, and presence of output schema, the description covers purpose, differentiation, and usage example. Agent has enough context to invoke correctly.

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 provides 100% coverage with descriptions for all 4 parameters. Description reinforces with an example showing typical usage (locations, variables, hours), adding concrete semantics beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'compare' and resource 'forecast variables across multiple locations', specifies it returns a 'distilled per-location series matrix', and distinguishes from siblings by recommending it over sequential forecast calls.

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 'prefer this over N sequential forecast calls', indicating it's for multi-location comparison. Does not explicitly state when not to use, but implied that single-location tools are alternatives. Clear enough for agent guidance.

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

describe_datasetDescribe datasetA
Read-onlyIdempotent
Inspect

Variables available in a dataset, with standard names, units, descriptions, and the time range of available data. Use before query_dataset to discover valid variable names. Example: {"dataset_id": "nbm_conus"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataset_idYesPipeline dataset identifier (e.g. "nbm_conus", "mrms_reflectivity_conus"). Discover valid values with list_datasets; inspect variables with describe_dataset.

Output Schema

ParametersJSON Schema
NameRequiredDescription
detailYes
dataset_idYes
Behavior4/5

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

Annotations declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds that it returns standard names, units, descriptions, and time range, providing useful behavioral context beyond annotations without contradicting them.

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?

Two sentences plus an example, no unnecessary words, front-loaded with main purpose. Example enhances clarity without adding bulk.

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?

Output schema exists, so description doesn't need to detail return format. It covers the key outputs (names, units, descriptions, time range) for a discovery tool. Simple and complete.

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

Parameters3/5

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

Schema coverage is 100% with dataset_id well described. The description adds that valid values can be discovered via list_datasets, but this reinforces rather than adds new meaning. Baseline 3 is appropriate.

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 states it returns variables with names, units, descriptions, and time range. It also distinguishes itself from query_dataset by advising to use before querying. This is specific and differentiates from siblings like list_datasets.

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 'Use before query_dataset to discover valid variable names' and includes an example. Provides clear context for when to use, though does not explicitly state when not to use.

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

find_best_windowFind best weather windowA
Read-onlyIdempotent
Inspect

Find the optimal time window for an activity based on weather criteria. Scans the forecast and returns daylight-aware periods matching all conditions. Criteria are expressed in the selected units system (default imperial: °F, mph, miles, feet). Example: {"location": "Boulder, CO", "criteria": {"min_temperature": 55, "max_wind_speed": 15, "max_precipitation_probability": 20}, "hours": 72, "activity_duration_hours": 3}.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonNoLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
hoursNoHours to search. Default 72.
unitsNoUnit system for all values in the request and response: imperial (°F, mph, inches), metric (°C, km/h, mm), or si (K, m/s, mm). Defaults to imperial.imperial
criteriaYesWeather criteria defining acceptable conditions (all optional).
locationNoFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
daylight_onlyNoOnly consider daylight hours (sunrise to sunset). Default true.
activity_duration_hoursNoMinimum consecutive hours meeting criteria. Default 2.

Output Schema

ParametersJSON Schema
NameRequiredDescription
unitsYes
messageNo
windowsYes
locationYes
sun_timesNo
daylight_onlyYes
criteria_appliedYes
activity_duration_hoursYes
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint as false. The description adds that it scans the forecast and returns daylight-aware periods, which is useful behavioral context beyond annotations. No contradictions.

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?

Two sentences plus an example. The first sentence front-loads the core purpose. The second adds scanning and daylight detail. The example is illustrative without being verbose. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (8 params, nested criteria, output schema exists), the description covers the main behavior. It does not explain edge cases like no matching window, but the output schema likely covers return values. Overall adequate.

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 description coverage is 100%, so baseline is 3. The description adds value with an example that illustrates parameter composition (e.g., criteria and location) and clarifies that criteria values are in the selected units system, which reinforces schema but provides cohesion.

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 states that the tool finds the optimal time window for an activity based on weather criteria, specifying that it scans the forecast and returns daylight-aware periods. This distinguishes it from sibling tools like get_forecast which only retrieve raw data. The example further clarifies the purpose.

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 implies usage when needing an optimal weather window rather than raw data, but does not explicitly state when not to use or list alternatives. The example provides a concrete use case, which is helpful for selection.

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

get_air_qualityGet air qualityA
Read-onlyIdempotent
Inspect

AirNow air quality at a location (CONUS): current overall AQI plus per-pollutant detail (PM2.5, ozone, PM10 concentrations) and the AirNow AQI forecast. AQI scale: 0-50 good, 51-100 moderate, 101-150 unhealthy for sensitive groups, 151-200 unhealthy, 201-300 very unhealthy, 301+ hazardous. pollutants=["aqi"] (default) is the cheap headline call; add pollutant keys or include_forecast=true when the user digs in. Example: {"location": "Boise", "pollutants": ["aqi", "pm25"], "include_forecast": true}.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonNoLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
locationNoFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
pollutantsNoWhich measurements to return. aqi = combined AQI index. Default: ["aqi"].
include_forecastNoAlso return the AirNow next-day AQI forecast.

Output Schema

ParametersJSON Schema
NameRequiredDescription
widgetNosw-ui-spec widget block rendered by the MCP Apps weather widget (ui://weather-widget/v1/index.html). Additive; safe to ignore.
currentYes
forecastNo
locationYes
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds that the tool covers CONUS only and explains the AQI scale, but does not disclose potential rate limits or data refresh behavior. This is adequate given 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?

The description is two sentences plus an example, with no wasted words. Key information (CONUS scope, AQI scale, default vs extended calls) is front-loaded, making it easy to scan.

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 that an output schema exists (not shown but mentioned), the description sufficiently covers location input, pollutant options, forecast flag, and the AQI scale. The CONUS constraint is explicitly stated, and the tool's behavior as a read-only, idempotent operation is clear from annotations.

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 description coverage is 100%, so baseline is 3. The description adds value by explaining the default pollutants as a 'cheap headline call,' clarifying when to use include_forecast, and providing an example that ties parameters together. This goes beyond schema descriptions.

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 states the tool gets AirNow air quality (AQI and per-pollutant) for CONUS locations, with both current and forecast data. This distinguishes it from sibling tools like get_current_conditions or get_forecast, which focus on weather rather than air quality.

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 explains when to use the default pollutants=["aqi"] as a 'cheap headline call' versus adding other pollutants or include_forecast for deeper detail, plus provides an example. It does not explicitly contrast with sibling tools, but the purpose clarity compensates.

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

get_alertsGet NWS alertsA
Read-onlyIdempotent
Inspect

NWS watches, warnings, advisories. Point (city/ZIP/lat+lon): containing polygons. BBox or US state/DC/CONUS (codes, full names, US/national): intersecting polygons. A city miss is not a statewide all-clear — query the state or a bbox; never say regional inventory is impossible. NY/WA and "New York State"/"Washington State" are states; "New York"/"Washington" stay cities. Omit at for now; at (ISO-8601 UTC) is the snapshot then. Empty = all-clear or purged (~24h). alert_id = detail+geometry, ignores at. Ex: {"location":"WI","events":["Tornado Warning"]}.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNoISO-8601 UTC past instant for the in-effect snapshot. Ignored with alert_id.
latNoLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonNoLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
bboxNoBounding box {west,south,east,north}. Skips geocoding; intersecting polygons.
eventsNoOptional event-name filter, e.g. ["Tornado Warning"].
alert_idNoAlert identifier for detail mode. When set, location is ignored.
locationNoFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.

Output Schema

ParametersJSON Schema
NameRequiredDescription
alertNo
alertsNo
widgetNosw-ui-spec widget block rendered by the MCP Apps weather widget (ui://weather-widget/v1/index.html). Additive; safe to ignore.
alert_idNo
locationNo
valid_timeNoEcho of at when an as-of snapshot was requested.
Behavior4/5

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

Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description carries a lower burden. It adds behavioral details: ‘at’ parameter omission means current snapshot, ‘alert_id’ returns detail+geometry ignoring ‘at’, empty result means all-clear or purged (~24h), and location-geocoding defaults. No contradictions 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.

Conciseness4/5

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

The description is dense but not verbose, packing key behavioral rules into a few sentences. It is front-loaded with the purpose statement. The final example is helpful but adds length. Minor deduction for over-compressed readability; still efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given high schema coverage (100%) and presence of output schema, the description adequately covers edge cases (city/state confusion, empty result meaning, at/alert_id interaction) for a tool with 7 parameters and nested objects. It does not detail output structure but defers to schema. Slight gap in not covering error scenarios or rate limits, but overall sufficient.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description adds contextual meaning beyond schema, such as interpreting ‘at’ omission as current snapshot, specifying ‘alert_id’ ignores ‘at’, and clarifying location geocoding ambiguity (city vs state). However, it does not elaborate on bbox subfields or event-name filtering beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves NWS watches, warnings, and advisories, specifying querying via point (city/ZIP/lat+lon) with containing polygons or bbox/state/DC/CONUS with intersecting polygons. This distinguishes it from siblings like get_observations or get_forecast, though the description is dense and slightly obscure.

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 provides explicit guidance on when to use location vs bbox vs state vs city, warns against misinterpreting a city miss as statewide all-clear, and clarifies state naming (‘NY/WA’) vs city names (‘New York’). It does not explicitly exclude alternative tools but offers detailed usage rules.

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

get_climate_normalsGet climate normalsA
Read-onlyIdempotent
Inspect

Day-of-year climate normals (NCEI 1991-2020 30-year averages) for a US location, from the nearest station with a record. Returns normal high, normal low, and normal mean for each date in the window, plus the station and how far away it is. Use this whenever a question needs a baseline rather than a forecast: "is this warm for October?", "what is a typical high here in January?", "how does this week compare to normal?". Pair it with get_forecast to say how far above or below normal the coming days run. Covers dates by day of year, so it answers for any date, past or future -- these are long-period averages, not a forecast and not observed history for a specific year.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoInclusive range end as YYYY-MM-DD. Must be supplied with start.
latYesLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonYesLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
daysNoRange length in days when start/end are omitted; the window opens today (default 14).
unitNoUnit system for the normals. Default imperial (°F).
startNoInclusive range start as YYYY-MM-DD. Must be supplied with end.
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, establishing the tool as safe and non-destructive. The description adds context beyond annotations: it gets data from the nearest station with a record, covers dates by day of year, and clarifies that these are long-period averages (not random access to specific years). No contradictions.

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?

The description is four sentences long, each sentence adds distinct value: what it does, what it returns, use cases, and pairing advice. It is front-loaded with the core purpose. Minor improvement could be structuring with bullets, but current text is efficient and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 6 parameters (2 required) and no output schema, the description sufficiently explains the data source (NCEI 1991-2020), what fields are returned (normal high, low, mean, station, distance), and the date handling (day-of-year). It does not detail output format or error conditions, but the annotation hints (readOnly) mitigate risk. Overall complete for an agent to decide usage.

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 each parameter has a description in the schema. The description adds value by explaining the date semantics (day-of-year basis, meaning the year in start/end is ignored for climate data) and that the tool covers US locations (though lat/lon globally valid). This provides context not present in the parameter descriptions.

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 starts with a specific verb-resource pair: 'day-of-year climate normals (NCEI 1991-2020 30-year averages) for a US location'. It clearly lists what is returned (normal high, low, mean, station, distance) and explicitly distinguishes from sibling tools like get_forecast and get_climate_records by stating it is not a forecast nor observed history for a specific year.

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 provides concrete example questions that trigger its use: 'is this warm for October?', 'what is a typical high here in January?', 'how does this week compare to normal?'. It also advises pairing with get_forecast for anomaly detection. It does not explicitly list when NOT to use it, but the examples imply it is for baseline comparisons, not for specific year data.

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

get_climate_recordsGet climate reports and recordsA
Read-onlyIdempotent
Inspect

NWS daily climate data: type=reports returns CLI daily climate reports (observed high/low/precip vs normals per station); type=records returns RER record event reports (record highs/lows/rainfall actually set). Filter by wfo (3-letter office, e.g. DMX), station, date (YYYY-MM-DD), start/end range, or hours lookback. Examples: {"type": "records", "hours": 48} or {"type": "reports", "wfo": "DMX", "date": "2026-07-04"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoRange end date, YYYY-MM-DD.
wfoNoWFO office filter (e.g. DMX, OUN).
dateNoSingle date, YYYY-MM-DD.
typeYesreports = CLI daily climate reports; records = RER record events.
hoursNoLookback window in hours (1-168) when no date/range is given.
startNoRange start date, YYYY-MM-DD.
stationNoStation identifier filter (reports only).
record_typeNoRecord type filter (records only), e.g. HIGH, LOW, RAIN.

Output Schema

ParametersJSON Schema
NameRequiredDescription
typeYes
resultsYes
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read operation. The description adds behavioral context by specifying the data sources ('CLI daily climate reports', 'RER record event reports') and the effect of filtering parameters, which goes beyond the basic annotations.

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?

The description is two sentences that efficiently cover the tool's purpose, types, filtering options, and examples. It is front-loaded with the core behavior and well-structured, though a slight reorganization could improve readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description does not need to explain return values. It covers all input parameters, their roles, and usage patterns. The examples provide practical guidance, making the definition complete for its complexity.

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?

Schema description coverage is 100%, but the description adds significant value: it explains the semantic difference between the two types, clarifies that 'station' applies only to reports and 'record_type' only to records (not in schema), and gives practical examples. This greatly aids understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it returns NWS daily climate data for two specific types ('reports' and 'records'), with explicit details on content (observed high/low/precip vs record highs/lows/rainfall). This distinguishes it from sibling tools like get_observations or get_forecast, which serve different purposes.

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 explains when to use each type parameter ('type=reports' vs 'type=records') and provides example parameter combinations. It does not explicitly list when not to use the tool or mention alternatives among siblings, but it gives sufficient context for correct invocation.

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

get_current_conditionsGet current conditionsA
Read-onlyIdempotent
Inspect

Current weather right now at a location from two independent sources in one call: the RTMA gridded analysis (exact-point values, updated sub-hourly) and the nearest METAR station observation (ground truth with raw METAR, flight category). Use the analysis for point-accurate values and the station for verification. For a forecast, use get_forecast. Example: {"location": "Pella, IA"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonNoLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
locationNoFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.

Output Schema

ParametersJSON Schema
NameRequiredDescription
analysisYes
locationYes
nearest_stationYes
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds behavioral context by revealing the two data sources (RTMA updated sub-hourly, METAR ground truth) and their complementary roles. This goes beyond the annotations without contradicting them.

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 two sentences plus a succinct example. It front-loads the main action and key differentiator (two sources), and every sentence adds value without redundancy. The example is minimal but illustrative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of combining two data sources and the existence of an output schema, the description adequately covers the return values (analysis and station data). It could mention that results are from both sources, but the context is sufficient for an agent to understand the tool's behavior.

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?

The input schema has 100% coverage of parameters. The description adds an example of the location parameter and explains the role of each source, which enriches the schema documentation. However, the schema itself already describes lat/lon ranges and location format adequately.

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 states the tool provides current weather from two independent sources (RTMA and METAR) in one call, and distinguishes it from sibling tools like get_forecast. The verb 'get' combined with 'current conditions' and the explicit mention of sources makes the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises when to use each source ('analysis for point-accurate values and the station for verification') and directs to get_forecast for forecasts. This provides clear guidance on tool selection and usage context.

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

get_forecastGet forecastA
Read-onlyIdempotent
Inspect

Complete weather overview for a location: current conditions, daily forecast (day/night periods, SPC threats, severity, CAPE, UV), active alerts, and convective outlooks in one call. Data is pre-aggregated across NBM, HRRR, GFS, RTMA, and SPC and unit-converted server-side. This is the primary weather tool; reach for lower-level tools only when you need raw observations or a specific dataset. Accepts a place name directly. Examples: {"location": "Denver"} or {"location": "Portland, OR", "days": 5} or {"lat": 41.4, "lon": -92.9}.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonNoLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
daysNoNumber of forecast days (1-14). Default 10.
unitsNoUnit system for all values in the request and response: imperial (°F, mph, inches), metric (°C, km/h, mm), or si (K, m/s, mm). Defaults to imperial.imperial
includeNoComma-separated sections: current, daily, hourly, alerts, outlooks. Default "current,daily,alerts,outlooks". Use get_hourly_forecast for hourly detail.current,daily,alerts,outlooks
locationNoFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
detail_levelNostandard: compact response (~5-10KB); daily includes day_precip_probability / night_precip_probability when available (precip_probability is max of day/night). detailed: also preserves CAPE, UV, full day/night period objects, extra hourly fields (~12-20KB).standard

Output Schema

ParametersJSON Schema
NameRequiredDescription
unitsYes
widgetNosw-ui-spec widget block rendered by the MCP Apps weather widget (ui://weather-widget/v1/index.html). Additive; safe to ignore.
forecastYes
locationYes
data_statusNoPresent only when the platform reports degraded/outage data sources: overall state, a caveat note, and the affected sources. Absent means no advisory was available -- not a freshness guarantee. See get_platform_status for the full document.
Behavior4/5

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

Annotations declare readOnlyHint, idempotentHint, non-destructive. Description adds that data is pre-aggregated and unit-converted server-side, and accepts place names directly. No contradictions.

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?

Single focused paragraph front-loading the core purpose and usage guidance. Each sentence adds value; no 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 wealth of sibling tools, the description is complete: it explains return sections, mentions hourly via sibling tool, and schema covers all parameters. Output schema further reduces need to detail return format.

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 covers 100% of params. Description adds examples of valid location inputs and clarifies mutual exclusivity of location vs lat/lon. Explains include default and detail_level meaningfully.

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 states 'Complete weather overview' and lists included data (current conditions, daily forecast, alerts, outlooks). It specifies it's the primary weather tool, distinguishing it from lower-level alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states: 'reach for lower-level tools only when you need raw observations or a specific dataset', providing clear when-to-use and when-not-to-use guidance.

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

get_forecast_discussionGet forecast discussionA
Read-onlyIdempotent
Inspect

Expert forecaster text products. type=afd: Area Forecast Discussion. type=hwo: Hazardous Weather Outlook. type=now: WFO short-term NOW. type=fwf/hls/esf: local fire weather / hurricane local statement / hydrologic discussion. type=mcd: SPC Mesoscale Discussion. type=mpd: WPC Mesoscale Precipitation Discussion (flash flood). type=swo/fwd/ero: national outlook discussions. type=tcd/tcp/tcm/twd/two: NHC tropical text (type=two is the text TWO, not GIS nhc_two). type=pmd: WPC/CPC desk discussion (pass awips_id for a specific desk, e.g. PMDSPD). type=pwo: SPC public weather outlook. National types (swo/fwd/ero/tcd/tcp/tcm/twd/two/pmd/pwo) need no location; day selects the outlook day for swo and fwd. summary_only=true returns the pipeline LLM summary without the full body. Examples: {"location": "Des Moines", "type": "afd"} or {"type": "swo", "day": 2, "summary_only": true}.

ParametersJSON Schema
NameRequiredDescriptionDefault
dayNoOutlook day for type=swo or type=fwd (1-8). Ignored for the other types; WPC files ERO days 1-3 under one product.
latNoLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonNoLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
wfoNoWFO identifier override (e.g. BOU). Default: resolved from the location.
typeYesProduct type: afd (WFO discussion), hwo (hazard outlook), now (short-term NOW), fwf/hls/esf (local WFO), mcd (SPC mesoscale), mpd (WPC precipitation discussion), swo (SPC convective outlook), fwd (SPC fire weather), ero (WPC excessive rainfall), tcd/tcp/tcm/twd/two (NHC tropical text; two is text TWO not GIS), pmd (desk discussion), pwo (SPC public outlook).
limitNoNumber of recent products (1-10). Default 1 (latest).
awips_idNoFull AWIPS identifier (e.g. TCDAT1, PMDSPD). More specific than type + location. Exact source_ref match.
locationNoFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
summary_onlyNoReturn only the LLM summary + sections, omitting the full body text.

Output Schema

ParametersJSON Schema
NameRequiredDescription
typeYes
locationNo
productsYes
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description need not repeat safety traits. It adds valuable behavioral context: summary_only=true returns only the LLM summary without the full body, type=two is the text TWO (not the GIS product), and WPC files ERO days 1-3 under one product. These are nuanced behaviors beyond what annotations convey, which helps the agent set expectations.

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?

The description is long but densely packed and well-structured: it lists type codes first, then special rules, then examples. No sentence is wasted—every clause carries unique information (e.g., 'type=two is the text TWO, not GIS nhc_two'). It is appropriately sized for a tool with 18 product types and 9 parameters, though a bulleted format might slightly improve scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 18 product types and 9 parameters, the description covers all essential aspects: product taxonomy, location requirements, day behavior, summary_only flag, awips_id usage, and two representative examples spanning local and national types. An output schema is present to document return values, and annotations cover safety traits. The description is complete enough for an agent to invoke the tool correctly without additional documentation.

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?

The input schema already provides full descriptions for all 9 parameters (100% coverage), so the description does not need to restate them. Instead, it enhances semantics by clarifying interactions: 'day' is ignored for other types, national types need no location, and pmd expects an awips_id (e.g., PMDSPD). The examples further illustrate valid parameter combinations (location+type and type+day+summary_only), adding value over the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Expert forecaster text products,' which clearly identifies the resource as human-authored discussions rather than raw model data. It then enumerates all 18 product types with specific meanings (e.g., afd=Area Forecast Discussion, mcd=SPC Mesoscale Discussion), distinguishing this tool from sibling tools like get_forecast, get_outlooks, and get_tropical. The scope is precise and unambiguous.

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 provides concrete usage guidance: it states that national types (swo/fwd/ero/tcd/tcp/tcm/twd/two/pmd/pwo) need no location, that 'day' selects the outlook day for swo and fwd, and that pmd requires an awips_id for a specific desk. It also gives two representative examples. It stops short of explicitly naming alternatives or saying 'use this instead of X,' which would earn a 5, but the context is clear enough for correct selection.

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

get_forecast_distributionGet forecast distributionA
Read-onlyIdempotent
Inspect

Probabilistic forecast guidance from NBM for one aspect of the weather: percentile ranges (p10-p90), exceedance probabilities, and ensemble spread. Use this for any question about odds, ranges, potential or confidence ("how much could we get", "worst case for the wind", "how sure is this") -- a deterministic forecast value cannot answer one. Reading the percentiles: p50 is the most likely outcome, p90 is the reasonable worst case when the risk is the high end (snow totals, wind, rainfall), and p10 is the reasonable worst case when the risk is the low end (cold, minimum visibility, ceiling). A single percentile is not the forecast -- report the likely value with the tail that matters, and label which is which. Aspects: precip (PoP, QPF + percentiles), snow (accumulation percentiles, >1/2/4in probabilities, snow level), ice (freezing rain, accretion), temperature (temp/dewpoint + stddev), wind (speed/gust percentiles), severe (hail/tornado/damaging-wind probabilities), aviation (LIFR/IFR/MVFR visibility + ceiling probabilities), confidence (ensemble stddev; low spread = settled forecast, high spread = details still in play). Examples: {"location": "Denver", "aspect": "snow", "hours": 72} or {"lat": 32.9, "lon": -97.0, "aspect": "severe"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonNoLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
hoursNoForecast hours (1-264). Default varies by aspect (48-72).
aspectYesWhich distribution family to return (see tool description).
locationNoFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hoursYes
aspectYes
seriesYes
locationYes
Behavior4/5

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

Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description isn't burdened with stating it's a safe read. It adds meaningful interpretive context beyond annotations: explaining how to read percentile outputs (which tail matters per hazard type) and that a single percentile is not the forecast. This is valuable behavioral/orientation guidance that annotations cannot convey.

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?

The description is lengthy but every sentence earns its place—it packs dense, non-redundant value: purpose, when-to-use, percentile-reading guidance, aspect coverage, and examples. The function-calling example block is a strong front-loaded practical aid. It's long but not bloated; if anything the percentile-reading section could arguably be trimmed, but the density is high and justified for a complex multi-aspect tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a high-complexity tool (8 aspects, 5 parameters, but only 1 required). The description comprehensively covers aspect semantics, interpretation of output, and usage guidance, and an output schema exists so return values needn't be explained. Minor gaps: it doesn't detail the exact structure/shape of the returned distribution or how hours interact with each aspect beyond the default note, but overall it's thorough for the complexity level.

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

Parameters3/5

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

Schema description coverage is 100%, fully documenting lat/lon/location/hours/aspect, so the baseline is 3. The description adds some value by naming the aspect values (precip, snow, ice, temperature, wind, severe, aviation, confidence) and listing what each returns, and clarifying that hours default varies by aspect (48-72), but most parameter detail is already in the schema. It slightly exceeds baseline but doesn't dramatically expand on schema semantics.

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+resource ('get... forecast guidance from NBM'), explicitly defines the output scope (percentile ranges, exceedance probabilities, ensemble spread), and clearly differentiates itself from siblings like get_forecast and get_hourly_forecast by emphasizing the probabilistic nature that deterministic tools cannot provide. The examples and aspect breakdown further sharpen the purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Excellent when-to-use guidance: it explicitly gives interrogative triggers ('how much could we get', 'worst case', 'how sure is this') and states that 'a deterministic forecast value cannot answer one,' directly contrasting with the deterministic get_forecast sibling. It also provides reading guidance (p50, p90, p10 semantics) and explicit examples with location and aspect, plus a coverage list of aspects.

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

get_forecast_skillGet forecast skillA
Read-onlyIdempotent
Inspect

How accurate our forecasts have actually been near a location, measured against observed analysis truth. Returns bias (positive = the model runs high), mean absolute error, RMSE, and a skill score against local climatology, per model, weather variable, and forecast lead time; continuous and vector entries also carry persistenceSkillScore, skill against the analysis at forecast issue time (null means not enough persist pairs, not zero skill -- do not compare it to skillScore as if they shared a denominator), and analysisDisagreementMae, the analyses' own disagreement at that lead -- a floor on how good the forecast can look, not a skill score and not an excuse (null means the sibling row is missing or below minimumSamples); for probability forecasts, the Brier score and a reliability breakdown. Use this to qualify a forecast rather than assert it -- "NBM has been running 1.8F warm at 3-day leads near you, so treat that 72 as around 70" -- and to answer "how much should I trust this forecast", "is the model biased here", or "how accurate were you last month". Evidence is reported at three scopes side by side: the exact point (strongest, slowest to accumulate), the ~50km neighborhood, and the ~300km region. Prefer the most specific scope that has samples. Metrics below minimumSamples observations are withheld and listed under insufficientHistory with their count -- say that history is still accumulating rather than treating thin numbers as evidence. Coverage is a rolling recent window over verified US variables, not all of history. Entries are per model and their samples are not matched, so never conclude that one model beats another by comparing their numbers here. Each entry states the truth field it was measured against -- one designated analysis per variable -- so never compare numbers carrying different truth values either. Each entry also states the regime it was measured under: ALL for every observation regardless of weather, or a conditioned tier such as SEA:DJF (winter), SCN1:WINDY / SCN1:WET / SCN1:QUIET (what the forecast was showing), or JC1:NW (a circulation pattern). Pass the regime parameter to ask for a conditioned track record. It falls back, so asking for SCN1:WINDY and getting back regime ALL is a successful answer, not a missing one -- always read the regime field and qualify the claim with it, because "NBM runs warm here when it shows windy" and "NBM runs warm here" are different statements. Regimes overlap by construction across families, so entries under different regimes are alternative answers to one question and must never be compared or added; within SCN1: the labels are mutually exclusive. Entries with a categorical block answer a yes/no question instead of an error magnitude -- did it rain, at the thresholdMm stated on the entry -- with pod (of the times it happened, how often we called it), far (of the times we called it, how often it did not happen), and frequencyBias (above 1 = we call it too often). Use these for "will it actually rain" questions, where a small average error means nothing if the rain lands in the wrong hour. A null rate means the sample cannot answer it -- the event has not happened, or been forecast, enough times to divide by -- and must be reported as unknown, never as zero. The counts beside it are still evidence, and for a rare event they are often the whole answer: "it has only rained twice here in the record" is a useful thing to say.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonNoLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
unitNoUnits for the error magnitudes. Default imperial (bias/MAE/RMSE in °F, mph, in).
modelNoNarrow to one model, e.g. nbm.
truthNoMeasure against a named truth source instead of the default one for each variable, e.g. urma. Only pass this if the user asked which analysis was used or named one; the default is already the designated source, and the analyses disagree, so switching changes the numbers.
regimeNoAsk for a track record measured only under particular conditions, as a comma-separated preference chain, most specific first, e.g. "SCN1:WINDY,SEA:JJA". SEA: is the meteorological season (DJF, MAM, JJA, SON); SCN1: is a forecast-conditioned scenario (WINDY, WET, QUIET — mutually exclusive within the family); JC1: is a circulation pattern. The most specific tier with enough observations answers and the unconditioned record is the last resort, so this never empties a result the way truth does -- it degrades. Read the regime field on each entry to see which tier actually answered. Pass this when the question is conditional ("is it worse in winter", "how does it do when the model shows windy"); omit it otherwise, since conditioned tiers are thinner and slower to earn numbers.
locationNoFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
variableNoNarrow to one variable, e.g. temperature_2m, dew_point_2m, wind_speed_10m, wind_gusts_10m, wind_vector_10m, cloud_cover, precipitation, precipitation_probability, or a thresholded rain event such as precipitation_gt_0p254mm (any measurable rain) or precipitation_gt_2p54mm. Omit for everything measured at the location.
lead_hoursNoNarrow to the lead time being asked about, in hours; the containing lead bucket is selected for you (60 gives the 48-72h bucket). Use the lead of the forecast you are qualifying: ~24 for tomorrow, ~72 for three days out. Never approximated -- a lead we have not verified returns no entries rather than a nearby bucket, so an empty result means we cannot speak to that range.

Output Schema

ParametersJSON Schema
NameRequiredDescription
cellsNo
skillYes
unitsYes
trackedYesWhether this exact coordinate is one the verification pipeline tracks.
locationYes
minimumSamplesYes
insufficientHistoryYes
Behavior5/5

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

Annotations already declare idempotent and read-only behavior. The description adds crucial behavioral details: rolling coverage window, unmatched model samples, designation of truth field, conditional regimes with fallback, and proper handling of null values (e.g., 'null means not enough persist pairs, not zero skill'). No contradictions 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.

Conciseness3/5

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

The description is extremely dense and lengthy, covering many edge cases and interpretations in a single paragraph. While information-rich, it lacks conciseness and structural breaks, making it harder to quickly scan. Every sentence is valuable, but the overall length reduces readability for an AI agent.

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 complex tool with 9 parameters, no required fields, and an existing output schema, the description covers all necessary context: output metric meanings, scope preferences, regime fallback logic, cross-model and cross-regime comparison prohibitions, and the handling of rare events and null values. It leaves no critical gaps.

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% with detailed parameter descriptions. The description adds value by explaining the regime parameter's fallback mechanism, how to interpret lead_hours approximations, and the relationship between location precision and the three output scopes. However, much of the description focuses on output interpretation rather than parameter meaning.

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 states the tool retrieves forecast accuracy metrics (bias, MAE, RMSE, skill score) measured against observed truth. It distinguishes itself from sibling tools like get_forecast (raw forecast values) and get_forecast_distribution (probability distribution) by focusing on skill assessment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance on when to use the tool: to qualify forecasts, answer trustworthiness, bias, and accuracy questions. Includes strong warnings against comparing models using unmatched samples, comparing entries with different truth fields, and misinterpreting null values. Also advises on regime usage and scope selection.

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

get_growing_degree_daysGet growing degree daysA
Read-onlyIdempotent
Inspect

Growing Degree Units (GDU / GDD) for a US location (CONUS, Alaska, Hawaii), computed from daily max/min temperatures. Pass a crop id (e.g. "corn", "soybean", "wheat") to use calibrated base/upper thresholds, or crop="custom" with base_temp_c (and optional upper_temp_c / method). Without season_start you get per-day GDU across the forecast horizon; WITH season_start (YYYY-MM-DD) you get the cumulative season-to-date total (observed history + today + forecast) plus a per-day cumulative series -- the number a grower tracks against crop milestones. Answers "how many growing degree days has my corn accumulated since May 1?" and "what's the GDU forecast this week?".

ParametersJSON Schema
NameRequiredDescriptionDefault
latYesLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonYesLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
cropYesCrop id from the catalog (e.g. "corn", "soybean", "wheat") or "custom" to supply your own thresholds via base_temp_c.
daysNoForecast horizon in days (default 10).
unitNoUnit system for GDU + temps. Default imperial (°F-days).
methodNoGDU method for custom crops. Defaults from whether upper_temp_c is set.
base_temp_cNoCustom base threshold in °C. Required when crop="custom".
season_startNoSeason/planting start as YYYY-MM-DD (local date). Presence switches the response to a cumulative season-to-date GDU total. Must be within the ~180-day observed window.
upper_temp_cNoCustom upper cutoff in °C (enables the modified method). Optional.
day_definitionNoDaily boundary: "nws" (default; NBM MaxT/MinT period extremes) or "local_calendar" (midnight-to-midnight local day).
include_milestonesNoInclude the crop's growth-stage GDU milestones in the response.
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds behavioral context: it computes from daily max/min temperatures, uses forecast horizon, and switches response mode based on season_start. This enhances understanding beyond annotations.

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?

The description is well-structured, starting with a clear definition, then providing usage details. While slightly verbose, every sentence adds value and is front-loaded with key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (11 parameters, no output schema), the description covers the two main modes of operation, parameter roles, and example use cases. It is thorough but could mention location constraints beyond US or data source limitations.

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?

Schema coverage is 100%, but the description adds significant meaning by explaining parameter interactions (e.g., crop with base_temp_c, season_start switches response), defaults, and usage patterns. It goes beyond mere parameter listing.

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 states it computes Growing Degree Units for US locations, with specific details about crop thresholds and cumulative totals. It distinguishes itself from sibling tools, which are generic weather tools, by focusing on GDU calculations.

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 explains when to use it (for GDU with crop or custom thresholds, with or without season_start) and provides example questions. However, it does not explicitly mention when not to use alternatives or provide exclusions, which would strengthen the guidance.

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

get_hourly_forecastGet hourly forecastA
Read-onlyIdempotent
Inspect

Blended hourly forecast: temperature, feels-like, humidity, wind, precipitation probability/amount, conditions, and icon per hour. Snapped to the current hour so hourly[0] is "now". Timestamps are UTC ISO 8601; convert to the local timezone before presenting. Ask for the days you need up front -- one call with days: 4 beats four calls. ALWAYS check hourly_coverage before answering about a specific hour: it reports first_time and last_time (the window the rows actually span), sample_interval_hours (past the first day rows are every 2-3h, not every hour), and truncated: true when upstream returned less than you asked for. If the hour the user cares about is after last_time, say the forecast does not reach that far yet rather than answering from the nearest row you do have. For one stretch of time ask for that stretch with hours_from/hours_to: it comes back hour by hour even where the full range would be sampled. Accepts a place name or coordinates. Examples: {"location": "Portland, OR", "days": 2} or {"lat": 41.88, "lon": -87.63, "hours_from": 36, "hours_to": 48}.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonNoLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
daysNoDays of hourly data (1-7). Default 2. Widened when hours_to reaches further.
unitsNoUnit system for all values in the request and response: imperial (°F, mph, inches), metric (°C, km/h, mm), or si (K, m/s, mm). Defaults to imperial.imperial
hours_toNoWindow end, in hours from now, exclusive. 36 to 48 is hours 36-47.
locationNoFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
hours_fromNoWindow start, in hours from now (0 = the current hour).
detail_levelNostandard: compact hourly data (sampled past 24h). detailed: preserves CAPE, ceiling, UV, gust, thunderstorm probability for the first 48h.standard

Output Schema

ParametersJSON Schema
NameRequiredDescription
unitsYes
widgetNosw-ui-spec widget block rendered by the MCP Apps weather widget (ui://weather-widget/v1/index.html). Additive; safe to ignore.
forecastYes
locationYes
data_statusNoPresent only when the platform reports degraded/outage data sources: overall state, a caveat note, and the affected sources. Absent means no advisory was available -- not a freshness guarantee. See get_platform_status for the full document.
Behavior5/5

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

Beyond the readOnly/idempotent annotations, the description discloses critical sampling behavior: hourly_coverage reports first_time/last_time, sample_interval_hours '(past the first day rows are every 2-3h, not every hour)', truncation, and the instruction to not answer from the nearest row when the hour is after last_time. It also notes timestamps are UTC ISO 8601. This is rich, non-obvious behavioral context that fully discloses the tool's quirks.

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?

Though lengthy, every sentence earns its place. The description front-loads the core output, then moves to 'now' snapping, timezone, usage guidance, edge cases, and examples. It is logically structured with no filler and avoids repeating schema details already present in the input schema.

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 (8 params, no required params, output schema present), the description covers all essential operational aspects: how to request data, how to interpret coverage, how to handle truncation, timezone conversion, and example payloads. The output schema handles return-value detail, so the description is sufficiently complete.

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 meaning beyond the schema: it explains the efficiency of days (one call with days:4), the behavior of hours_from/hours_to ('it comes back hour by hour even where the full range would be sampled'), and emphasizes location flexibility. These clarifications help an agent pick and combine parameters correctly.

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 opens with 'Blended hourly forecast' and enumerates the exact fields (temperature, feels-like, humidity, wind, precipitation probability/amount, conditions, icon) and clarifies behavior like 'Snapped to the current hour so hourly[0] is now'. This clearly distinguishes it from sibling tools like get_current_conditions or get_forecast by specifying the hourly granularity and scope.

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?

Provides strong usage guidance: 'Ask for the days you need up front -- one call with days: 4 beats four calls', 'ALWAYS check hourly_coverage before answering about a specific hour', and handling for hours beyond last_time. However, it never explicitly names alternatives or states when not to use this tool versus sibling forecast tools, so it falls 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.

get_lightning_activityGet lightning activityA
Read-onlyIdempotent
Inspect

Real-time lightning near a location: GLM satellite flash count (30km/10min) and MRMS ground-truth lightning density + 30-minute probability. The summary field is ready-to-use. A zero flash count means no lightning inside that window -- report it as a quiet observation scoped to the window in scope, never as a data gap. Only call when storms may be active or the user asks about lightning. Example: {"location": "Tampa"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonNoLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
locationNoFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.

Output Schema

ParametersJSON Schema
NameRequiredDescription
scopeYesArea and time window searched, so a zero count is unambiguous to report.
locationYes
lightningYes
Behavior4/5

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

Annotations already indicate readOnly, idempotent, non-destructive. The description adds value by explaining that a zero flash count is not a data gap but a quiet observation, and that results are scoped to the window in `scope`. No contradictions.

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 concise (3 sentences plus an example) and front-loaded with the essential purpose. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, the description adequately covers the tool's behavior, edge cases (zero flash count), and appropriate usage. It does not need to repeat return values.

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

Parameters3/5

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

The input schema has 100% description coverage, so parameters are well-documented. The description does not add much beyond the schema, except for an example usage that reinforces the 'location' parameter. This meets the baseline of 3.

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 states it retrieves real-time lightning data (GLM satellite flash count and MRMS ground-truth density + probability) near a location. It specifies the spatial and temporal scopes (30km/10min) and includes an example, effectively distinguishing it from sibling tools like get_current_conditions or get_forecast.

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 explicitly states when to call: 'Only call when storms may be active or the user asks about lightning.' This guides AI on appropriate context. While it doesn't list specific sibling alternatives, the distinction from other weather tools is implied.

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

get_map_snapshotGet map snapshotA
Read-onlyIdempotent
Inspect

Render a weather map image for visual analysis. Simple form: pass product (a viz-catalog product_id like "mrms_qpe_01h_pass2_conus", "goes_truecolor_conus", "spc_day1_categorical", "hrrr_precip_hybrid_derived_conus" (future radar), "hrrr_subhourly_conus" (15-min Future Radar), "mrms_radar_nowcast_conus", "rtma_conus", "nbm_daily_temps", or "nexrad_l3:{SITE}:{PRODUCT}" for single-site radar, e.g. "nexrad_l3:TLX:N0B") plus a location and zoom (5=regional, 8=metro, 10=city). Composed form: pass scene -- a declarative scene document layering basemap + multiple weather products + active alerts + storm features + inline GeoJSON in one image (layers draw bottom-to-top, under basemap labels). Example scene: {"scene":"1.0","view":{"center":{"lat":43.8,"lon":-91.2},"zoom":8},"layers":[{"type":"weather","product":"goes_truecolor_conus"},{"type":"weather","product":"nexrad_l3:ARX:N0B"},{"type":"alerts","filter":{"events":["Tornado Warning"]},"onError":"skip"}]}. Alert filters (all optional, AND-combined): ids (specific alerts), events, severities, minSeverity (Extreme>Severe>Moderate>Minor>Unknown). Single-site radar keys: the address is nexrad_l3:{SITE}:{KEY} where KEY is N{tilt}{measurement} and tilt 0 is the 0.5 degree sweep -- N0B reflectivity (dBZ, where and how heavy), N0G base velocity (knots toward/away from the radar), N0S storm-relative velocity (storm motion removed, so a couplet is rotation rather than translation -- prefer it for rotation questions), N0C correlation coefficient (0-1, debris and hail), N0X differential reflectivity (dB). Legacy codes (N0V, N0R, N0Q) are accepted as aliases. Not every site produces every key; when a render reports which keys a site has, retry with one of those. Optional time (unix seconds): closest frame. Forecast (HRRR/nowcast/NBM) honors future times; analysis (MRMS/NEXRAD/RTMA/GOES) clamps to latest past. Pass time for future-radar asks — do not claim that capability is missing. Product ids must be real viz-catalog entries -- shorthand like "radar" or "reflectivity" is not one. Omit product for the default hybrid precip still. For Alaska and Hawaii prefer a local site or mrms_precip_hybrid_derived_alaska over CONUS mosaics, which do not cover them. Returns the rendered image plus per-layer resolved valid times.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonNoLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
timeNoUnix seconds; closest frame (default: latest). Forecasts honor future times.
zoomNoMap zoom (simple form)
sceneNoFull scene document (composed form). When set, product/location/zoom are ignored.
widthNo
heightNo
opacityNoWeather layer opacity
productNoviz-catalog product_id or nexrad_l3:{SITE}:{KEY} (simple form)
locationNoFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
Behavior5/5

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

The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds significant behavioral details: time handling (forecast vs. analysis), layer drawing order (bottom-to-top under basemap labels), legacy code aliases, per-site key availability, and the effect of omitting product. No contradictions 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.

Conciseness4/5

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

The description is longer than average but earns its length. It is well-structured: purpose first, then simple form, then composed form, then product details, then time, then geographic advice. Every sentence adds useful information. Minor redundancy ('Simple form' vs 'Composed form' sections could be slightly tighter, but overall it's clear and organized.

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 (10 parameters, nested objects, multiple modes, no output schema), the description covers all necessary aspects: both usage modes, product selection, radar key syntax, alert filters, time handling, geographic coverage, default behavior, and return value. It also addresses edge cases like missing radar keys and Alaska/Hawaii. The return value is briefly described ('rendered image plus per-layer resolved valid times'), compensating for the lack of an output schema.

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?

Despite high schema_description_coverage (80%), the description adds enormous value beyond the schema. It explains the meaning of product IDs (e.g., 'mrms_qpe_01h_pass2_conus'), radar key syntax ('nexrad_l3:{SITE}:{KEY}'), alert filter semantics, the scene document structure with an example, and the behavior of the 'time' parameter. This transforms the schema into a practical guide for correct usage.

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 opens with a specific verb-resource combination: 'Render a weather map image for visual analysis.' This clearly distinguishes the tool from sibling tools that return data tables or text (e.g., get_forecast, get_observations). It also explains two distinct usage modes (simple and composed), further refining the purpose.

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 provides extensive guidance on when to use the simple form vs. the composed scene form, how to select products (e.g., preferring local sites for Alaska/Hawaii, using future-radar products for future times), and when to retry with different radar keys. It explicitly advises 'do not claim that capability is missing' for future radar. However, it does not explicitly compare this tool to sibling tools like get_forecast or get_observations, which would clarify when not to use a map image.

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

get_observationsGet station observationsA
Read-onlyIdempotent
Inspect

METAR surface observations from weather stations: temperature, wind, visibility, ceiling, flight category, raw METAR. Nearest mode (default) returns the closest N stations to a location; station mode returns history for a specific ICAO identifier. Examples: {"location": "Denver", "n": 3} or {"station": "KJFK", "hours": 6}.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNoNumber of nearest stations (1-10). Default 1. Ignored in station mode.
latNoLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonNoLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
hoursNoHours of history in station mode (1-24).
stationNoICAO station identifier (e.g. KJFK). Switches to station-history mode.
locationNoFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.

Output Schema

ParametersJSON Schema
NameRequiredDescription
stationNo
locationNo
observationsYes
Behavior4/5

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

Annotations already indicate the tool is read-only, non-destructive, and idempotent. The description adds valuable behavioral context: it explains the two operational modes, the data fields returned, and that 'n' is ignored in station mode. This goes beyond what annotations provide.

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 extremely concise—just two sentences. It front-loads the key data returned and efficiently explains both modes with examples. Every sentence contributes meaningful information with no 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 (6 parameters, two modes, mode-dependent parameter behavior), the description is complete. It covers all modes, provides example inputs, lists output data, and since an output schema exists, return value details are unnecessary. No gaps remain.

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?

The schema covers all 6 parameters with descriptions achieving 100% coverage. The description adds semantic value by explaining that 'n' is ignored in station mode, that 'location' accepts multiple formats (city, city+state, ZIP, lat,lon), and provides examples. This enriches understanding beyond 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 specifies that the tool returns METAR surface observations (temperature, wind, etc.) and distinguishes two modes: nearest mode (returns closest stations to a location) and station mode (returns history for a specific ICAO identifier). The purpose is specific and well-differentiated from siblings.

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 explains when to use each mode with concrete examples, e.g., 'nearest mode (default) returns the closest N stations to a location; station mode returns history for a specific ICAO identifier.' It provides example JSON inputs. While it doesn't explicitly state when not to use the tool, the guidance is clear and sufficient.

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

get_outlooksGet hazard outlooksA
Read-onlyIdempotent
Inspect

Hazard outlooks affecting a location. hazard=severe returns SPC convective outlooks (Day 1-8 categorical risk + tornado/wind/hail probabilities); hazard=fire returns SPC fire weather outlooks; hazard=rain returns WPC Excessive Rainfall Outlook polygons (days 1-3); hazard=heat returns the NWS HeatRisk index at the point (0 none .. 4 extreme, days 1-3). include_narrative=true adds the forecaster discussion for severe (SWO), fire (FWD), or rain (QPF/QPFERD; one PIL for all days). An empty result means no outlook covers the point -- not a failure. Examples: {"location": "Moore, OK", "hazard": "severe", "include_narrative": true} or {"location": "Phoenix", "hazard": "heat"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
dayNoOutlook day for the narrative filter (1-8). Default 1.
latNoLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonNoLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
hazardNoHazard family: severe = SPC convective, fire = SPC fire weather, rain = WPC excessive rainfall, heat = NWS HeatRisk index. (Winter/WSSI is a planned expansion.)severe
locationNoFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
include_narrativeNoInclude the forecaster narrative for the requested day (severe, fire, and rain).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dayYes
hazardYes
locationYes
outlooksYes
heat_riskNo
narrativeNo
Behavior4/5

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

Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable context: what each hazard family returns, that narrative is included per day, and that empty results are not failures. This goes beyond the annotations without contradicting them.

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?

The description is slightly long (4 sentences plus examples) but well-structured: starts with a clear purpose, then details each hazard, explains include_narrative, and ends with examples. It is front-loaded with the main purpose, though some details could be condensed.

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 availability of an output schema (not shown but mentioned), the description does not need to explain return values. It covers all essential aspects: purpose, parameter semantics, behavioral notes, and examples. It is complete for an AI agent to select and invoke the tool correctly.

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% with descriptions for all parameters. The description adds significant meaning: it explains the hazard enum values in detail, provides usage context for include_narrative, and gives concrete examples. This elevates understanding beyond 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 states the tool returns hazard outlooks affecting a location, and distinguishes four hazard families (severe, fire, rain, heat) with specific details for each. This provides a specific verb+resource and separates it from sibling tools like get_forecast or get_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 explains when to use each hazard type and includes guidance on the include_narrative parameter. It also clarifies that an empty result means no outlook covers the point, setting proper expectations. However, it does not explicitly state when not to use this tool versus alternatives like get_forecast.

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

get_period_totalsGet period totalsA
Read-onlyIdempotent
Inspect

Aggregate a weather variable over one or more time periods. Returns server-computed totals, maxima, minima, or averages per period. Period start/end times should use the user's local timezone boundaries (not UTC midnight). Response includes the converted value and unit per period. Ideal for questions like "total rainfall today and tomorrow" or "peak wind speed this weekend". Accepts a place name directly. Example: {"location": "Portland, OR", "variable": "precipitation", "aggregation": "sum", "periods": [{"start": "2026-07-08T07:00:00Z", "end": "2026-07-09T07:00:00Z", "label": "Today"}]}.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonNoLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
unitsNoUnit system for all values in the request and response: imperial (°F, mph, inches), metric (°C, km/h, mm), or si (K, m/s, mm). Defaults to imperial.imperial
periodsYesTime periods to aggregate over (1-14).
locationNoFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
variableYesStandard variable name (e.g. precipitation, snowfall, temperature_2m, wind_speed_10m, cape).
dataset_idNoDataset override. Default: auto-resolved NBM for the location.
aggregationNoAggregation function. Default sum. Use sum for precipitation/snowfall, max for temperature/wind, min for low temperatures, avg for humidity/cloud cover.sum

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageNo
periodsYes
locationYes
variableYes
aggregationYes
Behavior4/5

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

Description adds important behavioral details beyond annotations: it notes that period boundaries should use user's local timezone (not UTC midnight) and that response includes converted value and unit per period. No contradiction with annotations (readOnlyHint, openWorldHint, idempotentHint, destructiveHint all consistent).

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?

Description is well-structured: starts with purpose, then behavioral notes, use cases, and an example. No unnecessary repetition. Length is appropriate for the tool's complexity (8 parameters, 2 required). Could be slightly more concise but still efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/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 (8 params, 2 required, 100% schema coverage, output schema exists), the description covers key aspects: what it does, period timezone handling, aggregation types, and example usage. Meets requirements for a read-only aggregation tool.

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%, baseline 3, but description adds meaningful context: guidance on aggregation choices (sum for precipitation, max for temperature, etc.), mentions location can be a place name directly, and includes a complete example. These add value beyond the schema descriptions.

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?

Description clearly states it aggregates a weather variable over time periods and returns server-computed totals, maxima, minima, or averages. Specific examples like 'total rainfall today and tomorrow' and 'peak wind speed this weekend' distinguish it from siblings like get_forecast or get_current_conditions.

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 provides ideal use cases with examples ('total rainfall today and tomorrow' and 'peak wind speed this weekend'). Implicitly suggests using this tool for period-based aggregation but does not explicitly state when not to use it or name alternatives, though sibling context is available.

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

get_platform_statusGet platform statusA
Read-onlyIdempotent
Inspect

Current data-freshness status of the weather platform: overall state, per-source states (ok / degraded / outage / no_signal), open incidents with cause attribution (provider outage vs internal processing delay), and active provider advisories. Use this when a user asks whether data is current, when other tools return surprisingly stale data, or before presenting time-critical weather. If a source is degraded or in outage, tell the user their data may be stale rather than presenting it as live. No inputs. Refreshed about every 5 minutes.

ParametersJSON Schema
NameRequiredDescriptionDefault
include_okNotrue: list every monitored source including healthy ones. false (default): only sources that are not ok, keeping the response compact.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
overallYesWorst state across customer-facing data sources; "unknown" when status is unavailable.
sourcesNo
advisoriesNo
generated_atNoWhen the status document was generated (UTC).
Behavior4/5

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

Annotations already declare readOnlyHint and destructiveHint. The description adds valuable context: it discloses that data is refreshed every 5 minutes, describes the output content (states, incidents, advisories), and provides interpretation guidance. The 'No inputs' statement is slightly misleading due to the optional parameter, but overall it enhances transparency.

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

Conciseness3/5

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

The description is relatively short and front-loaded with the output description. However, the inaccurate statement 'No inputs' wastes words and could mislead, detracting from conciseness and accuracy. It could be improved by removing that phrase.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one optional boolean parameter) and the presence of annotations and an output schema, the description is reasonably complete. It covers the tool's purpose, usage context, and behavioral nuances. The only gap is the minor inaccuracy about inputs, but overall it provides sufficient context for an agent.

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

Parameters2/5

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

Schema coverage is 100% and the schema adequately describes the optional 'include_ok' parameter. However, the description says 'No inputs,' which contradicts the schema and adds no value; it may confuse an agent about the optional parameter. Thus, the description does not improve parameter understanding.

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 states the tool provides data-freshness status of the weather platform, including overall state, per-source states, incidents, and advisories. It distinguishes from sibling tools by focusing on platform health rather than weather data, and specifies when to use it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells when to use this tool: when a user asks about data freshness, when other tools return stale data, or before presenting time-critical weather. It also gives guidance on how to handle degraded sources. However, it does not explicitly mention when not to use it or list alternative tools.

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

get_population_exposureGet population exposureA
Read-onlyIdempotent
Inspect

National population-exposure headline for a risk-zone outlook product: how many people are inside risk bands at or above min_level. Powers headlines like "~57M people under major heat risk tomorrow". hazard=heat covers NWS HeatRisk days 1-3 (levels: 1 minor, 2 moderate, 3 major, 4 extreme). Pass product_id directly for other risk-zone products. Example: {"hazard": "heat", "min_level": 3}.

ParametersJSON Schema
NameRequiredDescriptionDefault
hazardNoHazard family (expands the day-1..3 product set). Currently: heat (HeatRisk).
min_levelNoMinimum risk level to count (>=). Default 1 (any elevated risk).
product_idNoExplicit risk-zone product ID (overrides hazard), e.g. heatrisk_day1_conus.

Output Schema

ParametersJSON Schema
NameRequiredDescription
min_levelYes
summariesYes
Behavior4/5

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

Annotations already indicate readOnlyHint=true and idempotentHint=true, so the description does not need to reiterate that. However, it adds behavioral context: the hazard parameter covers 'NWS HeatRisk days 1-3' and explains the level meanings. No contradictions 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?

The description is concise: two sentences plus an example JSON. It front-loads the main purpose and adds necessary context without extraneous words. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the availability of an output schema (not shown) and full parameter schema coverage, the description adequately covers the tool's purpose, usage, and examples. It could have mentioned the return format but that's likely in the output schema. Sufficient for an AI agent.

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%, but the description adds value by explaining the hazard parameter's scope (HeatRisk days 1-3, levels 1-4) and providing an example usage. This goes beyond the schema's enum and default descriptions.

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 states it provides a 'national population-exposure headline' for a risk-zone outlook product, with a concrete example ('~57M people under major heat risk tomorrow'). It distinguishes itself from sibling tools by focusing on aggregating population counts across risk bands, which is unique among the listed tools.

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 explains when to use the tool: for risk-zone outlook products like HeatRisk, and provides guidance on using the hazard parameter vs. product_id. It does not explicitly list when not to use it or compare to siblings, but it gives enough context for an AI agent to understand the intended use case.

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

get_soundingGet radiosonde soundingA
Read-onlyIdempotent
Inspect

Nearest RAOB (radiosonde) vertical soundings to a point. Each sounding carries: profile (pressure-indexed thermodynamics: pressure_hpa, height_m, temperature_c, dewpoint_c, wind arrays), wind_profile (height-indexed winds for hodographs/shear), and derived indices (sbcape/mucape/mlcape + cin, lifted_index, k_index, total_totals, pwat_mm, freezing_level_m, lcl/lfc/el, bulk_shear_0_6km_kt). Soundings launch at 00Z/12Z so data can be hours old. Example: {"location": "Norman, OK"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNoNumber of nearest soundings (1-5). Default 1.
latNoLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonNoLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
locationNoFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.

Output Schema

ParametersJSON Schema
NameRequiredDescription
locationYes
soundingsYes
Behavior4/5

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

Annotations already indicate readOnlyHint=true and destructiveHint=false, but the description adds value by disclosing data staleness and detailing the output structure (profile, wind_profile, derived indices). This goes beyond what annotations provide.

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?

The description is front-loaded with the purpose, followed by structured details on output and usage notes. It is informative without waste, though the detailed output description might overlap with the output schema. Still, it remains efficient.

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 complexity of sounding data and the existence of an output schema, the description covers purpose, parameter usage, output structure, data latency, and an example. It is fully complete for an agent to select and invoke the tool correctly.

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 description coverage is 100%, so baseline is 3. The description adds value with an example ('{"location": "Norman, OK"}') and clarifies mutual exclusivity of location vs lat/lon, which is not fully captured in schema descriptions.

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 'Nearest RAOB (radiosonde) vertical soundings to a point' with specific verb and resource. It clearly distinguishes from sibling 'get_sounding_chart' by focusing on raw data retrieval rather than chart generation.

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 provides context such as 'Soundings launch at 00Z/12Z so data can be hours old', giving guidance on data staleness. However, it does not explicitly state when not to use this tool or suggest alternatives like 'get_sounding_chart'.

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

get_sounding_chartGet sounding chartA
Read-onlyIdempotent
Inspect

Render the nearest RAOB (radiosonde) sounding as a Skew-T log-P + hodograph chart image for visual analysis: temperature/dewpoint traces, wind barbs, height-banded hodograph, and a derived-indices table (CAPE/CIN, lifted index, PWAT, shear, LCL). Soundings launch at 00Z/12Z so data can be hours old. Use get_sounding for the raw profile numbers. Example: {"location": "Norman, OK"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonNoLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
unitNoTemperature axis display unitfahrenheit
scaleNoRaster scale factor (2 = retina; higher = larger image payload)
locationNoFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
Behavior4/5

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

Annotations already indicate the tool is read-only, idempotent, and non-destructive. The description adds value by noting that data can be stale (hours old) and that the output is a rendered chart. No contradictions exist between description and 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?

The description is very concise: two sentences plus an example. It front-loads key information and avoids redundancy. Every sentence adds value, making it efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (5 parameters, no required, no output schema), the description covers essential aspects: what the chart contains, data freshness, and how to use 'location' via an example. It is sufficient for an agent to understand usage, though it lacks details on image format or payload size limits.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters adequately. The description provides general context and an example using 'location', but does not add significant new meaning for individual parameters beyond the schema. A score of 3 is appropriate per guidelines.

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 states that the tool renders the nearest RAOB sounding as a Skew-T log-P + hodograph chart, listing specific chart elements. It distinguishes itself from the sibling tool 'get_sounding' by noting that the latter provides raw profile numbers. This makes the purpose highly specific and distinct.

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 includes an explicit alternative ('Use get_sounding for the raw profile numbers') and an example. It also hints at timing constraints (data can be hours old due to 00Z/12Z launch times). However, it does not provide explicit conditions for when not to use this tool, leaving some ambiguity.

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

get_storm_cellsGet storm cellsA
Read-onlyIdempotent
Inspect

Radar-identified storm cells near a location, merging NEXRAD Level III algorithm output from the nearest radar site: storm tracks (cell position, movement, forecast positions), hail index (probability of hail/severe hail + max expected size), mesocyclone detections (rotation), and TVS (tornado vortex signatures). Use during active convection to see what the radar algorithms flag. An empty result means no detected cells -- common outside active storms. Example: {"location": "Norman, OK"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonNoLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
includeNoWhich detection families to include. Default: all.
locationNoFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.

Output Schema

ParametersJSON Schema
NameRequiredDescription
tracksNo
summaryYesReady-to-use one-liner. States explicitly when nothing was detected.
locationYes
detectionsYes
Behavior4/5

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

Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds context by stating it uses NEXRAD Level III algorithm output from the nearest radar site and explains the meaning of empty results. This goes beyond what annotations provide, though it could further detail data freshness or limitations.

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 concise at three sentences, with the first sentence immediately stating the tool's purpose and key outputs. There is no extraneous information, and the structure is well-organized and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 4 optional parameters, full schema coverage, and an output schema, the description covers the main purpose, usage context, and expected empty result behavior. It could optionally mention that the output includes derived metrics like velocity, but the output schema likely covers that. Overall, it is sufficiently complete for an AI agent.

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

Parameters3/5

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

All four parameters are described in the schema (100% coverage). The description provides an example using the location parameter but adds no additional semantic meaning beyond the schema. Baseline 3 is appropriate as the schema already does the heavy lifting.

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 states it returns radar-identified storm cells near a location, listing specific outputs like tracks, hail index, mesocyclone detections, and TVS. It includes an example, distinguishing it from sibling tools like get_storm_reports (likely spotter reports) and get_current_conditions (general weather).

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 advises using it during active convection and explains that an empty result means no detected cells, which is common outside storms. However, it does not explicitly state when not to use it or contrast with alternatives like get_storm_reports or get_current_conditions.

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

get_storm_reportsGet storm reportsA
Read-onlyIdempotent
Inspect

Recent NWS Local Storm Reports (LSRs) -- verified reports of tornadoes, hail, damaging winds, flooding near a location. Use to confirm severe weather occurrence or assess reported damage. valid_time is event occurrence (UTC); cite in local time. Example: {"location": "Wichita", "hours": 12, "type": "H"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonNoLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
typeNoReport type filter: T=tornado, H=hail, W=wind, F=flood, D=damage, S=snow.
hoursNoLookback window in hours (1-24). Default 6.
locationNoFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hoursYes
reportsYes
locationYes
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value by disclosing that reports are verified (not raw observations) and clarifies that valid_time is in UTC, which prevents timezone confusion. It does not mention rate limits or data freshness beyond 'Recent,' but this transparency about the data's nature is helpful given the strong annotation coverage.

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?

The description is concise at 5 sentences, front-loading the core action and purpose, then adding context and an example. The example at the end slightly increases length but earns its place by demonstrating usage. No superfluous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 5 optional params, 100% schema coverage, an output schema (not shown), and strong annotations, the description is nearly complete. It could add a note about typical report count or how to filter by multiple types, but the example and type list are sufficient for most use cases.

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 description coverage is 100%, so the baseline is 3. The description adds value by explaining the 'valid_time' field context and providing a complete example that illustrates how parameters like location, hours, and type work together. This makes the parameter relationships clearer than 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 states the tool retrieves recent NWS Local Storm Reports (LSRs) for tornadoes, hail, damaging winds, flooding near a location. It provides specific types and examples, and this purpose and specificity differentiate it from siblings like get_current_conditions (general weather) or get_alerts (warnings), which do not focus on verified event reports.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent to use this tool to confirm severe weather occurrence or assess reported damage, offering clear context. It does not directly exclude alternatives or state when not to use it, but the example ('type: H') provides concrete guidance, and the sibling set lacks a similar storm-report tool.

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

get_time_contextGet time contextA
Read-onlyIdempotent
Inspect

Complete temporal context for a location: local time, timezone, 14-day calendar with day names and Today/Tomorrow offsets, sunrise/sunset/solar times (from the weather pipeline's astro product), and moon phase. Use whenever you need to reason about dates, times, or daylight for a location -- including "what time is sunset?", "is it dark there now?", or "what day of the week is the 4th-day forecast?". Accepts a place name directly. Example: {"location": "Seattle"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonNoLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
locationNoFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.

Output Schema

ParametersJSON Schema
NameRequiredDescription
moonYes
calendarYes
daylightYes
locationYes
current_timeYes
Behavior4/5

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

Annotations already indicate readOnlyHint, idempotentHint, and non-destructive. The description adds extra behavioral context: data comes from the 'weather pipeline's astro product' and includes sunrise/sunset/solar times and moon phase. This goes beyond the annotations by explaining the data source and scope.

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 three sentences: first sentence states what it does, second provides usage guidance with examples, third gives a concrete JSON example. It is front-loaded with purpose, concise, and every sentence adds value without 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 has three optional parameters, no required parameters, and an output schema exists, the description fully covers what the tool returns by listing all temporal components (local time, timezone, 14-day calendar, solar times, moon phase). It provides sufficient context for an agent to understand the tool's output without needing to inspect the output schema.

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 description coverage is 100%, so the description's parameter info is supplementary. It adds value by explicitly stating it 'Accepts a place name directly' and providing an example, which reinforces how to use the location parameter. This enhances usability beyond the schema's descriptions.

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 states the tool provides 'complete temporal context for a location' and lists specific components (local time, timezone, 14-day calendar, solar times, moon phase). It includes example queries that show its specific use case, distinguishing it from sibling weather tools that focus on forecasts or observations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use whenever you need to reason about dates, times, or daylight for a location' and provides concrete example questions. While it doesn't mention when not to use it or alternative tools, the positive guidance is strong and contextual.

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

get_tropicalGet tropical activityA
Read-onlyIdempotent
Inspect

Active NHC (National Hurricane Center) tropical systems: forecast cones, track lines, forecast points, coastal watches/warnings, and 7-day Tropical Weather Outlook formation areas -- Atlantic + East Pacific. Each feature carries a kind (cone | track | points | watch_warning | outlook_area) plus storm name, intensity, and timing properties. include_geometry=true adds full GeoJSON geometries (large). An empty result means no active tropical activity. Example: {} or {"include_geometry": true}.

ParametersJSON Schema
NameRequiredDescriptionDefault
include_geometryNoInclude full GeoJSON geometries (cone/track polygons). Default false.

Output Schema

ParametersJSON Schema
NameRequiredDescription
activeYes
featuresYes
feature_countYes
Behavior4/5

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

The description adds value beyond the annotations by noting that including geometry results in large payloads and that an empty result indicates no activity. It also details the kinds of features and their properties. No contradictions 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.

Conciseness4/5

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

The description is concise and front-loaded with key information. It packs details about features, properties, and parameter behavior in a single paragraph, but could be slightly more structured with bullet points.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description adequately covers behavior (e.g., empty result), feature kinds, and parameter effect. It provides sufficient context for a read-only tool, though it omits authentication or rate limits (not required).

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?

With 100% schema description coverage, baseline is 3. The description adds context about the 'include_geometry' parameter, noting it adds full GeoJSON geometries (large) and providing example usage, which enhances understanding.

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 retrieving active NHC tropical systems, listing specific features like forecast cones, track lines, and coastal watches/warnings. It distinguishes from sibling tools by specifying the source (NHC) and region (Atlantic + East Pacific).

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?

While the description does not explicitly state when to use this tool versus alternatives, its specificity about tropical activity from NHC provides clear context. It implies usage for active tropical systems, but lacks explicit exclusions or alternative recommendations.

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

list_datasetsList datasetsA
Read-onlyIdempotent
Inspect

Discover the datasets (model grids, analyses, observations) available at a location, with per-dataset freshness (data age, latest model run). Datasets vary by domain (CONUS/Alaska/Hawaii). Use this to find dataset_id values for query_dataset and describe_dataset, or to assess whether data is current before making decisions. Example: {"location": "Anchorage"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonNoLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
locationNoFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
include_freshnessNoInclude per-dataset data age and run times. Default true.

Output Schema

ParametersJSON Schema
NameRequiredDescription
datasetsYes
locationYes
freshnessNo
Behavior4/5

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

Annotations already provide readOnlyHint, idempotentHint, destructiveHint=false. Description adds context about per-dataset freshness and domain variation, enhancing transparency without contradicting 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 plus an example, front-loaded with core purpose. Every sentence adds value. Highly concise and well-structured.

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 simple tool, rich annotations, and output schema, description is complete. Covers purpose, output features, usage context, and provides an example.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. Description adds minor value by summarizing location flexibility and include_freshness behavior, but does not significantly extend beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it discovers datasets at a location with freshness info, and distinguishes itself by mentioning it provides dataset_id values for query_dataset and describe_dataset. Verb 'discover' combined with resource 'datasets' is specific and actionable.

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 states when to use: to find dataset_id for downstream tools and to assess data currency. Does not explicitly list when not to use or alternatives, but context is clear and helpful. Example further clarifies usage.

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

query_datasetQuery datasetA
Read-onlyIdempotent
Inspect

Raw time series from a specific dataset for specific variables at a point. Power-user access to any gridded product (NBM, HRRR, GFS, RTMA, MRMS, air quality, ...). Time modes: hours (next N hours, default 24), time_start+time_end (explicit ISO-8601 window), or latest=true (single most-recent value). reference_time pins a specific model run, and each returned series reports the run that served it (reference_time, or reference_times when a series mixes runs) — check it before comparing two runs, since a run older than about 48 hours may no longer be available. For blended forecasts use get_forecast instead. Examples: {"location": "Denver", "dataset_id": "hrrr_surface", "variables": ["temperature_2m"], "hours": 18} or {"lat": 41.4, "lon": -92.9, "dataset_id": "rtma_conus", "variables": ["temperature_2m"], "latest": true}.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonNoLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
hoursNoForecast/lookahead hours from now (1-264). Default 24 when no other time mode set.
latestNoReturn only the most recent value (analysis datasets like RTMA/MRMS).
locationNoFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
time_endNoISO 8601 window end (with time_start).
variablesYesStandard variable names (e.g. temperature_2m, precipitation). Discover with describe_dataset.
dataset_idNoDataset to query. Default: the NBM dataset for the location domain (nbm_conus/nbm_alaska/nbm_hawaii). Discover options with list_datasets.
time_startNoISO 8601 window start (with time_end).
reference_timeNoPin a specific model run (ISO 8601). Default: latest run.

Output Schema

ParametersJSON Schema
NameRequiredDescription
seriesYes
locationYes
Behavior5/5

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

Beyond annotations (readOnly, idempotent, non-destructive), description adds critical behavioral details: time modes (hours, window, latest), reference_time pinning, and warning about run availability after 48 hours. This provides meaningful context for correct usage.

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?

Well-structured with clear sections: purpose, time modes, reference_time note, sibling guidance, examples. Slightly long but each sentence contributes; could be trimmed slightly without loss.

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 complexity (10 parameters, multiple time modes, output schema), the description covers essential behavioral patterns, warnings, and usage examples. It is complete for the tool's complexity and no major 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?

Despite 100% schema coverage, description adds significant value by explaining the interplay between time-related parameters (hours, latest, time_start/end) and providing concrete examples. This clarifies usage beyond individual parameter descriptions.

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?

Description clearly states it returns raw time series from specific datasets at a point. It distinguishes itself by mentioning power-user access to gridded products and explicitly directs to use get_forecast for blended forecasts, differentiating from siblings.

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?

Provides explicit alternative for blended forecasts (get_forecast) and implies use for raw data. However, does not cover exclusions for other siblings like get_observations or get_current_conditions, though the description of 'raw time series from gridded products' gives context.

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

reverse_geocodeReverse geocodeA
Read-onlyIdempotent
Inspect

Resolve coordinates to a human-readable place (city, state, county, timezone). Use when you have lat/lon but need a display name or the local timezone. Example: {"lat": 39.74, "lon": -104.99} -> Denver, Colorado, America/Denver.

ParametersJSON Schema
NameRequiredDescriptionDefault
latYesLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonYesLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).

Output Schema

ParametersJSON Schema
NameRequiredDescription
latYes
lonYes
placeYes
Behavior4/5

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

Annotations already provide readOnlyHint, idempotentHint, and destructiveHint, so the description's job is lighter. It adds value by detailing the output (city, state, county, timezone) and providing an example, which enriches behavioral understanding beyond 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?

The description is two sentences plus an example. It is front-loaded with the core function, then usage guidance, then a concrete example. No extraneous words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, annotations, and existing output schema, the description sufficiently covers purpose, usage, and expected output. It could mention error handling for invalid coordinates, but overall it is complete enough for an AI agent.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description does not add parameter-specific meaning beyond the schema; the example uses specific values but does not clarify the lat/lon schema descriptions (which mention 'location place-name string' that is irrelevant to this tool).

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 states the verb 'Resolve coordinates to a human-readable place' and specifies output types (city, state, county, timezone). It distinguishes itself from siblings like search_locations, which perform forward geocoding, and get_time_context, which deals with time.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use when you have lat/lon but need a display name or the local timezone', providing clear usage context. However, it does not explicitly mention when not to use or name alternatives like search_locations.

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

search_locationsSearch locationsA
Read-onlyIdempotent
Inspect

Resolve a place query to candidate locations with coordinates. Accepts city names ("Denver"), city+state ("Portland, OR" via query), ZIP codes ("50219"), or partial input with fuzzy=true for autosuggest-style matching ("bost" -> Boston). Returns ranked candidates with lat/lon. Most weather tools accept a location string directly and geocode internally -- use this tool only to disambiguate ("which Springfield?") or to present location choices to the user. Example: {"query": "Springfield"} returns all major Springfields ranked by place importance.

ParametersJSON Schema
NameRequiredDescriptionDefault
fuzzyNoAutosuggest mode for partial/misspelled input. Default false (exact search).
limitNoMaximum candidates to return (1-10). Default 5.
queryYesPlace query: city, "city, state", ZIP, or partial text with fuzzy=true.

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryYes
candidatesYes
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds behavioral context beyond that, such as fuzzy matching behavior, ranking by place importance, and multiple accepted input formats. No contradictions 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.

Conciseness4/5

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

The description is three sentences plus an example. Every sentence adds value: purpose, input types/fuzzy, and usage guidance. It is front-loaded and not verbose, though slightly dense with multiple ideas in one sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a lookup tool with an output schema, the description adequately covers input types, return behavior (ranked candidates with lat/lon), and when to use it. It also explains the disambiguation use case and provides a concrete example, making it complete for the agent to decide and invoke correctly.

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?

Schema coverage is 100% so baseline is 3, but the description adds significant semantic value by giving concrete examples for query ('Denver', 'Portland, OR', '50219') and explaining fuzzy=true for partial matching. The example with 'Springfield' enriches understanding of query and limit behavior.

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 states the tool's purpose: 'Resolve a place query to candidate locations with coordinates.' It provides specific input examples and explicitly distinguishes from sibling tools by noting most weather tools geocode internally and this is only for disambiguation or presenting choices.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says 'use this tool only to disambiguate... or to present location choices to the user,' and contrasts with 'Most weather tools accept a `location` string directly.' This gives clear when-to-use and when-not-to-use guidance, plus an example.

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

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables to interact with comprehensive weather data through the MCP protocol, including current conditions, multi-day forecasts, hourly forecasts, and geocoding.
    17
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Provides real-time US weather data for AI assistants via MCP, including current conditions, forecasts, alerts, severe weather outlooks, radar, upper-air analysis, and surface analysis. Supports optional personal weather station integration.
    9
    4
    ISC
  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server that provides current weather, multi-day forecasts, umbrella recommendations, severe weather alerts (US), and side-by-side city comparisons using Open-Meteo and NWS APIs, with no API key required.
  • F
    license
    A
    quality
    D
    maintenance
    A comprehensive MCP server providing tools for real-time, forecast, and historical weather data, alongside air quality, marine conditions, and climate projections. It also includes geocoding services to search for locations and retrieve precise coordinates for environmental analysis.
    7

View all MCP Servers

Try in Browser

Your Connectors

Sign in to create a connector for this server.