Skip to main content
Glama

noaa-climate-mcp-server

Server Details

Search NOAA climate stations and datasets, fetch historical weather observations.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
cyanheads/noaa-climate-mcp-server
GitHub Stars
3
Server Listing
NOAA Climate MCP Server

Available Tools

10 tools
noaa_climate_fetch_dataFetch NOAA Climate Observation DataA
Read-only
Inspect

Fetch historical observation records from a NOAA CDO dataset for a given date range. Requires datasetId (e.g., GHCND for daily, GSOM for monthly), startDate, and endDate. Optionally scope to specific stations, locations, and data types. Date range limits per request: sub-daily, daily, and radar datasets (GHCND, PRECIP_15, PRECIP_HLY, NORMAL_DLY, NORMAL_HLY, NEXRAD2, NEXRAD3) are limited to 1 year; monthly and annual datasets (GSOM, GSOY, NORMAL_MLY, NORMAL_ANN) are limited to 10 years. A full calendar year always fits, leap years included — the limit runs to the end of the calendar month 1 (or 10) years after startDate. For climate normals (NORMAL_*), use startDate=2010-01-01 and endDate=2010-12-31 — that is the API proxy year regardless of which 30-year period is being described. Returns flat tuples of { date, datatype, station, value, attributes }. Strongly recommended: pass units=metric or units=standard — without it, GHCND values are raw tenths-of-unit integers (TMAX=256 = 25.6°C, PRCP=12 = 1.2mm). GSOM/GSOY are already scaled.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of records to return (1–1000). Defaults to 25.
unitsNoUnit system for returned values. Without this parameter, GHCND returns raw tenths-of-unit integers (TMAX=256 = 25.6°C). Strongly recommended: pass metric (SI units) or standard (Fahrenheit/inches). Optional.
offsetNoZero-based index of the first record to return for pagination. Defaults to 0.
endDateYesEnd date for observations (YYYY-MM-DD). Must be within 1 year of startDate for sub-daily/daily/radar datasets (GHCND, PRECIP_15, PRECIP_HLY, NORMAL_DLY, NORMAL_HLY, NEXRAD2, NEXRAD3) or within 10 years for monthly/annual datasets (GSOM, GSOY, NORMAL_MLY, NORMAL_ANN) — measured to the end of the calendar month that many years after startDate, so a full calendar year (2024-01-01 to 2024-12-31) always fits. For any NORMAL_* dataset use 2010-12-31.
datasetIdYesDataset ID to query (e.g., GHCND for daily data, GSOM for monthly, GSOY for annual, NORMAL_DLY/MLY/ANN/HLY for 1981–2010 climate normals, NEXRAD2/NEXRAD3 for weather radar). Determines date range limit: GHCND/PRECIP_*/NORMAL_DLY/NORMAL_HLY/NEXRAD2/NEXRAD3 allow 1-year max per request; GSOM/GSOY/NORMAL_MLY/NORMAL_ANN allow 10-year max.
sortFieldNoSort results by this field. Optional.
sortOrderNoSort direction. Optional; defaults to asc.
startDateYesStart date for observations (YYYY-MM-DD). For NORMAL_* datasets use 2010-01-01 regardless of the years being analyzed — 2010 is the API proxy year for all normals.
stationIdNoOne or more station IDs to filter by (e.g., ["GHCND:USW00024233"]). Obtain from noaa_climate_find_stations. Multiple IDs return comparative readings across stations. Optional.
datatypeIdNoOne or more data type IDs to include (e.g., ["TMAX", "TMIN", "PRCP"]). Without this, all data types for the dataset are returned. Use noaa_climate_list_data_types to discover valid IDs. Optional.
locationIdNoOne or more location IDs to filter by (e.g., ["FIPS:37", "ZIP:98101"]). Broader than stationId — returns data from all stations within the location. Optional.
includemetadataNoInclude pagination metadata in the response. Defaults to true.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoGuidance when no records were returned — echoes query parameters and suggests how to broaden.
resultsNoFlat array of observation records sorted by date by default.
metadataNoPagination metadata. Present when includemetadata=true.
exhaustedNoTrue when the requested offset is past the end of a non-empty result set — the page is empty but matches exist. Omitted otherwise.
totalCountNoTotal number of matching observation records before the page limit.
effectiveQueryNoSummary of the effective query: dataset, date range, units, and any station/location/datatype filters applied.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, but the description adds substantial non-obvious behavioral details: the per-request date range limits (1 year vs 10 years), the special proxy year for normals, and the crucial units behavior (raw tenths-of-unit integers unless units=metric/standard is passed). It also states the return format (flat tuples). This goes well beyond the annotations and provides the agent with critical knowledge to correctly interpret results.

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 (six sentences) but every sentence carries critical information: purpose, required params, date limits, normals exception, return format, and units warning. It is front-loaded with the core purpose and requirements. While concise would be shorter, the density of essential pitfalls justifies the length. Slightly verbose but not wasteful.

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 12 parameters, 3 required, an output schema, and annotations, the description covers the main decision points: what to pass, how to bound the date range, how to handle normals, and how to read values. It does not explicitly mention pagination strategy (offset/limit) or how to discover station IDs, but those are covered in the schema (e.g., stationId description says to use noaa_climate_find_stations). The output schema provides return structure, so the description need not repeat that. Overall, nothing critical is missing for a competent agent.

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 meaning beyond the schema: it gives concrete dataset examples (GHCND, GSOM), explicitly ties date limits to dataset groups, warns about the units pitfall ('TMAX=256 = 25.6°C'), and explains the proxy-year behavior for normals. These details are not in the schema and meaningfully increase the agent's ability to call the tool 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 a specific verb and resource: 'Fetch historical observation records from a NOAA CDO dataset for a given date range.' It clearly separates this from the sibling metadata/list tools (find_stations, list_datasets, etc.) by focusing on data retrieval. The verb 'fetch' plus the resource 'historical observation records' is 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 gives clear context on what the tool needs (datasetId, startDate, endDate) and provides detailed guidance on date range limits per dataset type, plus a special instruction for NORMAL_* datasets to use the 2010 proxy year. It does not explicitly contrast this tool with alternatives (e.g., 'use this tool when... not when...'), but the sibling tools are all lookup/metadata operations, so the usage context is clear by implication. No explicit exclusions are given, hence a 4.

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

noaa_climate_find_locationsFind NOAA Climate LocationsA
Read-only
Inspect

Search for geographic locations by category (CITY, ST, CNTY, CNTRY, ZIP, CLIM_REG, etc.). Returns location IDs used in station search and data queries. Without locationCategoryId, returns all location types; noaa_climate_list_location_categories lists the valid values. Use locationCategoryId=ST to list US states (51 entries — small enough to retrieve completely). To find a location by name, pass nameContains alongside locationCategoryId — the CDO API has no name parameter, so this server enumerates the category and matches the substring itself. It works for any category under the size limit stated on nameContains, which is every category except ZIP; a datasetId or datacategoryId filter can bring a category back under that limit. For a category still too large, sort alphabetically with sortField=name and page through results. Location IDs: states as FIPS:37 (NC), cities as CITY:US530018 (Seattle), zip codes as ZIP:98101, countries as FIPS:US. Obtain location IDs here, then pass them to noaa_climate_find_stations or noaa_climate_fetch_data.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (1–1000). Defaults to 25.
offsetNoZero-based index of the first result to return for pagination. Defaults to 0.
endDateNoFilter to locations with data on or before this ISO date (YYYY-MM-DD). Optional.
datasetIdNoFilter to locations covered by this dataset (e.g., "GHCND"). Optional.
sortFieldNoSort results by this field. Use name with sortOrder=asc to browse alphabetically when searching for a specific city or location name. Optional.
sortOrderNoSort direction. Optional; defaults to asc.
startDateNoFilter to locations with data on or after this ISO date (YYYY-MM-DD). Optional.
nameContainsNoCase-insensitive substring match on the location name. The CDO API has no name parameter, so this server applies the match itself, across the whole category rather than one page — which bounds it to a category holding at most 4000 locations. Requires locationCategoryId; adding datasetId or datacategoryId narrows a category that is otherwise too large. Example: locationCategoryId="CITY" with nameContains="seattle". Optional.
datacategoryIdNoFilter to locations with this data category (e.g., "TEMP"). Optional.
locationCategoryIdNoCategory filter. Use ST for states (51 entries), CNTY for counties, CITY for cities (large set — thousands of entries), CNTRY for countries, ZIP for zip codes, US_TERR for US territories, CLIM_REG for NOAA climate regions, CLIM_DIV for climate divisions, HYD_ACC/HYD_CAT/HYD_REG/HYD_SUB for hydrological categories. Call noaa_climate_list_location_categories when you do not know which category to use — it returns the authoritative set. Optional — omit to return all location types.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoGuidance when no locations matched — echoes applied filters and suggests how to broaden.
resultsNoMatching locations.
metadataNoPagination metadata. Present when the API returns it.
exhaustedNoTrue when the requested offset is past the end of a non-empty result set — the page is empty but matches exist. Omitted otherwise.
totalCountNoTotal number of matching locations before the page limit.
appliedNameFilterNoThe nameContains value this response was filtered by. Present only when nameContains was supplied; every count below then describes the filtered set, not the whole category.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, so safety is covered structurally, but the description adds genuinely non-obvious behavior: the CDO API exposes no name parameter, so this server enumerates the category and performs substring matching itself; the 4000-location bound on that behavior; and the fact that datasetId/datacategoryId can shrink an oversized category back under the limit. This mechanical disclosure goes well beyond what the annotations convey. No contradiction with annotations.

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

Conciseness4/5

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

The description is long, running as a single dense paragraph, but every sentence earns its place — purpose, category enumeration, naming workaround, size limits, pagination fallback, ID formats, downstream routing. Information density is high and the purpose is front-loaded before implementation details. It could be tightened into structured bullets, which costs it one point, but there is no filler.

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 10-parameter lookup tool with output schema and openWorldHint, the description covers everything needed to call it correctly: the search mechanism, the nameContains workaround and its bound, category sizes, sort/pagination fallback for oversized categories, and explicit routing of results to downstream tools. Potential failure modes (oversized categories) are anticipated with concrete mitigations. Nothing an agent needs is missing.

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?

Though schema coverage is 100% (baseline 3), the description adds substantial meaning the schema lacks: worked location-ID formats (FIPS:37 for NC, CITY:US530018 for Seattle, ZIP:98101, FIPS:US), the enumeration/size-limit mechanics behind nameContains, and concrete category semantics (ST=51 entries, CITY=thousands, ZIP). These worked examples and behavioral notes materially improve the agent's ability to construct correct parameter values.

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 — 'Search for geographic locations by category' — and immediately states the tool's actual purpose: returning location IDs that feed into station search and data queries. It distinguishes itself from siblings by name (noaa_climate_find_stations, noaa_climate_fetch_data) and by its role as the upstream ID lookup step. No ambiguity remains about what this tool does or how it fits the workflow.

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, actionable guidance: use locationCategoryId=ST to list US states (with the 51-entry size note), pass nameContains alongside locationCategoryId to find by name, and route to noaa_climate_list_location_categories when the category is unknown. It even gives a fallback strategy ('sort alphabetically with sortField=name and page through results') for oversized categories. Usage conditions and alternatives are named directly rather than left to inference.

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

noaa_climate_find_stationsFind NOAA Climate StationsA
Read-only
Inspect

Search for weather observation stations by location, bounding box, dataset, and data type. Returns station IDs, names, coordinates, elevation, and data coverage dates. Filter by locationId (e.g., "FIPS:37" for all NC stations), extent (lat/lon bounding box), datasetId, datatypeId, and date range. Station IDs returned here are used as stationId in noaa_climate_fetch_data. A station must have data for the dataset and date range you want — filter by datasetId and startDate/endDate to ensure compatibility. Common station ID formats: GHCND:USW00024233, COOP:010008.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (1–1000). Defaults to 25.
extentNoBounding box filter as "minLat,minLon,maxLat,maxLon" (e.g., "47.5,-122.4,47.7,-122.1" for central Seattle). Optional.
offsetNoZero-based index of the first result to return for pagination. Defaults to 0.
endDateNoFilter to stations with data on or before this ISO date (YYYY-MM-DD). Optional.
datasetIdNoFilter to stations that have data in this dataset (e.g., "GHCND" for daily observations). Optional.
sortFieldNoSort results by this field. Optional.
sortOrderNoSort direction. Optional; defaults to asc.
startDateNoFilter to stations with data on or after this ISO date (YYYY-MM-DD). Optional.
datatypeIdNoFilter to stations that record these data types (e.g., ["TMAX", "TMIN", "PRCP"]). Optional.
locationIdNoFilter to stations within this location ID (e.g., "FIPS:37" for NC, "CITY:US530018" for Seattle). Obtain from noaa_climate_find_locations. Optional.
datacategoryIdNoFilter to stations with data in this category (e.g., "TEMP"). Optional.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoGuidance when no stations matched — echoes applied filters and suggests how to broaden.
resultsNoMatching stations.
metadataNoPagination metadata. Present when the API returns it.
exhaustedNoTrue when the requested offset is past the end of a non-empty result set — the page is empty but matches exist. Omitted otherwise.
totalCountNoTotal number of matching stations before the page limit.

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the agent knows this is a read-only search that may return changing results. The description adds that station IDs are used in noaa_climate_fetch_data and returns coverage date fields, but it doesn't disclose any additional behavioral nuances (e.g., pagination behavior, ordering defaults) beyond what the schema and annotations already imply. This is slightly above baseline given the annotations exist.

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 a single dense paragraph but is well-organized: purpose first, then filter list, then the compatibility advice, then common ID formats. No redundant filler; each sentence earns its place. Slightly long but justified by the tool's complexity.

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?

For an 11-parameter search tool with an output schema, the description covers the key functional aspects: filtering by location/extent/dataset/datatype/date, the returned fields, and the station ID formats used downstream. It omits explicit guidance on pagination (offset/limit) and sorting, but the schema documents those with defaults, and the output schema exists so return types are known. Overall complete for an agent to call it 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%, so all 11 parameters are documented. The description adds real value by providing concrete examples for locationId ('FIPS:37'), extent ('47.5,-122.4,47.7,-122.1'), datasetId ('GHCND'), and datatypeId (['TMAX','TMIN','PRCP']). It also clarifies that date filters should be combined with datasetId to ensure data exists. This exceeds what the bare schema provides.

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 ('Search for... stations') with a clear resource and lists both the filter dimensions (location, bounding box, dataset, data type) and the return fields (IDs, names, coordinates, elevation, coverage dates). It is immediately distinguishable from siblings like noaa_climate_find_locations (locations) and noaa_climate_get_station (single station detail).

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 clear context for when to use the tool: when you need to find stations by filters. It gives practical advice ('filter by datasetId and startDate/endDate to ensure compatibility') and explains the relationship to noaa_climate_fetch_data. However, it does not explicitly state when NOT to use it or name alternatives (e.g., noaa_climate_get_station for a specific station).

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

noaa_climate_get_billion_dollar_disastersGet NOAA Billion-Dollar DisastersA
Read-only
Inspect

Query NOAA/NCEI’s Billion-Dollar Weather and Climate Disasters — the curated record of US disasters whose damage passed $1 billion, with CPI-adjusted and unadjusted costs, deaths, and one of seven classes (Drought, Flooding, Freeze, Severe Storm, Tropical Cyclone, Wildfire, Winter Storm). Every cost returned is in WHOLE US DOLLARS: NCEI declares a different unit in each export — millions for the per-event file, billions for the national per-year file — and this server converts from whichever unit the file declares, echoing it back as declaredCostUnit. Default calls return individual disasters; summary=true returns per-year counts and costs by class plus an "All Disasters" total. Filter with startYear/endYear (a disaster overlapping either end is included), disasterType (exactly as NCEI writes it, e.g. "Tropical Cyclone"), minCostInUsd, and state (a two-letter US postal code). Coverage runs from 1980 to the last year NCEI has finished assessing — currently 2024, not the current calendar year — and coveredYears reports what the export holds. Under a state scope, per-event rows are national disasters that reached that state and carry the NATIONAL cost, never a state share, so summing states double-counts; per-year rows carry a binned cost range instead of a point estimate. This is a different NOAA corpus from the CDO tools and from noaa_climate_search_storm_events: no token, and the curated set of major disasters rather than every severe-weather event.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of disasters or years to return (1–100). Defaults to 50.
stateNoTwo-letter US postal code (e.g. "CA", "TX", "PR") scoping the query to NCEI’s per-state export instead of the national one. Per-event rows then carry the national cost of each disaster that reached the state, not a state share; per-year rows carry a binned cost range instead of a point estimate. Optional.
offsetNoZero-based index of the first matching record to return. Defaults to 0.
endYearNoLatest year to include (1980 or later). NCEI publishes a year only once its assessment settles, so a year past coveredYears.last returns nothing rather than an error. Optional.
summaryNoReturn per-year counts and costs by disaster class instead of individual disasters. Defaults to false.
startYearNoEarliest year to include (1980 or later). A disaster whose span reaches into the range is included even when it began earlier. Optional — omit for the whole record.
disasterTypeNoRestrict to one NCEI disaster class, written exactly as NCEI writes it. In summary mode this also drops the "All Disasters" total from each year, leaving only the named class. Optional.
minCostInUsdNoFloor on CPI-adjusted cost in whole US dollars — 1e9 is one billion. In summary mode this is compared against the year’s "All Disasters" total, or against the named disasterType when one is given; where only a binned range exists, the top of the bin has to clear the floor. Optional.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe limit that was applied. Omitted otherwise.
modeNoWhich shape this response carries: "events" populates disasters, "summary" populates summaries.
errorNoPresent when the call failed. Absent on success.
scopeNo"US" for the national record, or the two-letter state code that was requested.
shownNoRecords returned on this page. Omitted otherwise.
noticeNoGuidance when nothing matched or the page ran past the end. Omitted otherwise.
costBasisNoPresent when a state scope is queried in events mode: every cost below is the NATIONAL cost of a disaster that reached the state, not that state’s share of it, so adding states together double-counts. Omitted for the national scope and in summary mode.
disastersNoIndividual disasters for the requested page. Present when mode is "events".
exhaustedNoTrue when offset is past the end of a non-empty match set — the page is empty but matches exist. Omitted otherwise.
summariesNoPer-year tallies for the requested page. Present when mode is "summary".
truncatedNoTrue when more matches exist beyond this page. Omitted otherwise.
sourceFileNoThe exact NCEI export this response was read from, e.g. "events-US.csv".
totalCountNoRecords matching every filter across the whole export, before offset and limit.
coveredYearsNoThe year span the export actually holds, read from its rows.
declaredCostUnitNoThe cost unit this export declares in its own preamble, e.g. "millions of dollars". Every cost below is already in whole US dollars; this names the unit it was converted from.

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnlyHint and openWorldHint annotations, the description discloses critical behavioral details: the unit conversion (whole US dollars with declaredCostUnit), the state-scope caveats (national cost not state share, double-counting risk, binned cost ranges for per-year rows), and the coverage window (1980 to assessed year, not current calendar). It even warns about overlap inclusion rules and the difference between per-event and per-year outputs.

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 a single dense paragraph but every sentence carries unique value—no filler. It front-loads the primary purpose and then layers in filtering, unit, and state-scope nuances. While it is lengthy, it is appropriately compact for the complexity (8 optional parameters, two output modes); a bulleted format would improve skimmability but is not necessary.

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 high complexity and subtle edge cases, the description covers all critical aspects: the two output modes (default vs summary), filtering semantics, cost unit conversion, state-scope double-counting warning, coverage years, and the distinction from other NOAA tools. It even explains the meaning of coveredYears and the binned cost range, so an agent has everything needed to call it correctly without additional probing.

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?

Though schema coverage is 100% and the schema already provides rich parameter descriptions, the description adds essential semantics beyond the schema: the exact overlap rule for startYear/endYear, the state parameter's effect on row types and cost interpretation, the minCostInUsd behavior in summary mode (compared against 'All Disasters' or bin tops), and the 'coveredYears' reporting. This goes well beyond the baseline and significantly aids correct invocation.

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

Purpose5/5

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

The description states a specific verb ('Query') and a precise resource (NOAA/NCEI's Billion-Dollar Weather and Climate Disasters) while naming the exact content (curated disasters, cost classes, unit handling). It explicitly distinguishes itself from sibling tools by naming noaa_climate_search_storm_events and the CDO tools, so an agent can immediately tell this is a different corpus.

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 provides explicit when-to-use guidance: it contrasts itself with the CDO tools and noaa_climate_search_storm_events, explains that it covers curated major disasters rather than every severe-weather event, and details default vs summary modes. It also clarifies the coverage years and how filters behave, leaving no ambiguity about when to choose this tool.

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

noaa_climate_get_stationGet NOAA Climate StationA
Read-only
Inspect

Fetch full metadata for a single weather station by its ID (e.g., "GHCND:USW00024233", "COOP:010008"). Returns name, coordinates, elevation, and the full date range for which data is available. Use when you have a station ID from noaa_climate_find_stations and want its complete details, or to verify a station before querying data.

ParametersJSON Schema
NameRequiredDescriptionDefault
stationIdYesStation ID to fetch (e.g., "GHCND:USW00024233", "COOP:010008"). Obtain from noaa_climate_find_stations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoStation ID.
nameNoStation name.
errorNoPresent when the call failed. Absent on success.
maxdateNoLatest date data is available at this station (YYYY-MM-DD). Omitted when not provided.
mindateNoEarliest date data is available at this station (YYYY-MM-DD). Omitted when not provided.
latitudeNoStation latitude in decimal degrees. Omitted when not provided by the API.
elevationNoStation elevation. Unit depends on elevationUnit. Omitted when not provided.
longitudeNoStation longitude in decimal degrees. Omitted when not provided by the API.
datacoverageNoFractional data coverage (0–1). Omitted when not provided by the API.
elevationUnitNoUnit for elevation (e.g., "Meters"). Omitted when not provided.

TDQS

A4.5/5.0
Behavior4/5

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

With readOnlyHint=true and openWorldHint=false already declared, the bar is lower. The description adds context beyond the annotations by summarizing exactly what metadata is returned and the ID convention. No contradiction with the annotations; the return-summary adds value over the safety profile alone.

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

Conciseness5/5

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

Three sentences with zero waste: the core action with examples is front-loaded, the second sentence states what is returned, and the third gives usage guidance. Every sentence earns its place.

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 single-parameter, read-only tool with an output schema present, the description is complete. The agent knows the ID format, what the tool returns, and when to invoke it; the output schema covers return structure, so no further detail is needed.

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 layers on the meaning of the ID prefixes (GHCND, COOP) and reaffirms the source via find_stations, adding modest interpretive value beyond the schema's own stationId description.

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

Purpose5/5

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

States a specific verb and resource: 'Fetch full metadata for a single weather station by its ID.' It names concrete ID formats with examples, lists the return content (name, coordinates, elevation, date range), and is clearly distinguishable from siblings like noaa_climate_find_stations and noaa_climate_fetch_data.

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

Usage Guidelines4/5

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

Provides an explicit workflow: use when you have an ID from noaa_climate_find_stations, for complete details or to verify a station before querying data. This gives clear when-to-use guidance and names the upstream sibling, but it stops short of an explicit when-not-to-use (e.g., directing raw data queries to noaa_climate_fetch_data).

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

noaa_climate_list_data_categoriesList NOAA Climate Data CategoriesA
Read-only
Inspect

List data categories that group related data types — Temperature, Precipitation, Wind, Pressure, Sunshine, Sky cover, Weather Type, and more. Use to discover what types of measurements are available before calling noaa_climate_list_data_types. Optionally filter by dataset, location, station, or date range. There are 42 categories in total.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (1–1000). Defaults to 25.
offsetNoZero-based index of the first result to return for pagination. Defaults to 0.
endDateNoFilter to categories with data on or before this ISO date (YYYY-MM-DD). Optional.
datasetIdNoFilter to categories available in this dataset (e.g., "GHCND", "GSOM"). Optional.
sortFieldNoSort results by this field. Optional.
sortOrderNoSort direction. Optional; defaults to asc.
startDateNoFilter to categories with data on or after this ISO date (YYYY-MM-DD). Optional.
stationIdNoFilter to categories available at this station ID. Optional.
locationIdNoFilter to categories available at this location ID. Optional.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoGuidance when no data categories matched — echoes applied filters and suggests how to broaden.
resultsNoMatching data categories.
metadataNoPagination metadata. Present when the API returns it.
exhaustedNoTrue when the requested offset is past the end of a non-empty result set — the page is empty but matches exist. Omitted otherwise.
totalCountNoTotal number of matching data categories before the page limit.

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, covering the safety profile. The description adds useful context about the total number of categories (42) and the grouping behavior, which goes slightly beyond annotations. However, it does not disclose additional operational traits like pagination limits or response size beyond what schema parameters imply.

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, with the core action and concrete examples in the first clause, followed by usage guidance and key facts. No redundant words or filler; every sentence earns its place.

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 an output schema exists and all parameters are documented, the description covers purpose, usage sequencing, and the key total count. It omits details like error handling or exact response shape, but these are typically beyond description scope and are covered by the output schema. It is sufficiently complete for an agent to decide when and how to call the tool.

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 each parameter having a detailed description. The description summarizes that filters exist for dataset, location, station, or date range, which is a high-level overview but does not introduce new semantics not already present in the schema. The baseline of 3 is appropriate when schema carries the parameter details.

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 'lists data categories' and provides concrete examples (Temperature, Precipitation, Wind). It explicitly contrasts with the sibling noaa_climate_list_data_types by positioning this as a discovery step before calling that tool. This distinguishes it from all siblings without ambiguity.

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 instructs users to 'discover what types of measurements are available before calling noaa_climate_list_data_types', providing a clear sequential usage context. It also mentions optional filters (dataset, location, station, date range), which helps agents decide when to use the tool. Though it doesn't state when not to use it, the alternative is named and the condition is explicit.

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

noaa_climate_list_datasetsList NOAA Climate DatasetsA
Read-only
Inspect

List available NOAA CDO datasets with their IDs, names, and temporal coverage. Returns all ~11 datasets by default (no required parameters). Optionally filter to datasets that contain a specific data type, cover a location or station, or overlap a date range. Common datasets: GHCND (daily observations, 1763–present), GSOM (monthly summaries), GSOY (annual summaries), NORMAL_DLY/MLY/ANN/HLY (1981–2010 climate normals). Use this first to discover available datasets before calling noaa_climate_fetch_data.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (1–1000). Defaults to 25.
offsetNoZero-based index of the first result to return for pagination. Defaults to 0.
endDateNoFilter to datasets with data on or before this ISO date (YYYY-MM-DD). Optional.
sortFieldNoSort results by this field. Optional.
sortOrderNoSort direction. Optional; defaults to asc.
startDateNoFilter to datasets with data on or after this ISO date (YYYY-MM-DD). Optional.
stationIdNoFilter to datasets covering this station ID (e.g., "GHCND:USW00024233"). Optional.
datatypeIdNoFilter to datasets containing these data type IDs (e.g., ["TMAX", "PRCP"]). Optional.
locationIdNoFilter to datasets covering this location ID (e.g., "FIPS:37" for NC). Optional.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoGuidance when no datasets matched — echoes applied filters and suggests how to broaden.
resultsNoMatching datasets.
metadataNoPagination metadata. Present when the API returns it.
exhaustedNoTrue when the requested offset is past the end of a non-empty result set — the page is empty but matches exist. Omitted otherwise.
totalCountNoTotal number of matching datasets before the page limit.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true and openWorldHint=false, so the safety profile is known. The description adds valuable behavioral context: 'Returns all ~11 datasets by default (no required parameters)' clarifies default behavior, and the list of common datasets with temporal ranges gives the agent expectations. It does not mention pagination or rate limits, but these are not critical given the schema has pagination fields.

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

Conciseness4/5

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

The description is three sentences: the first states purpose, the second covers default behavior and filtering, and the third lists common datasets and provides usage guidance. Every sentence adds value, and the most critical information (purpose and default behavior) is front-loaded. It is slightly longer than strictly necessary but remains 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?

The tool has 9 optional parameters and an output schema, so the description's job is to guide selection and usage. It covers the default behavior, filtering options, and common datasets, and it points to the next tool in the workflow. It does not explicitly explain pagination (limit/offset) or sorting, but those are fully documented in the schema. The description is adequate for an agent to use 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 the baseline is 3. The description adds meaning beyond the schema by explaining the filtering intent in plain language ('Optionally filter to datasets that contain a specific data type, cover a location or station, or overlap a date range'), which directly maps to datatypeId, locationId, stationId, startDate/endDate. It also gives concrete examples of datatype IDs (e.g., 'TMAX', 'PRCP') and dataset IDs, making the parameters more actionable.

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 clear verb+resource: 'List available NOAA CDO datasets with their IDs, names, and temporal coverage.' It distinguishes itself from siblings by explicitly positioning itself as a discovery tool: 'Use this first to discover available datasets before calling noaa_climate_fetch_data.' This makes the tool's role 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 gives explicit guidance on when to use this tool ('Use this first to discover available datasets before calling noaa_climate_fetch_data') and mentions the optional filters that shape usage. It does not explicitly state when NOT to use it or list alternatives beyond fetch_data, but the context is sufficient for an agent to choose it appropriately.

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

noaa_climate_list_data_typesList NOAA Climate Data TypesA
Read-only
Inspect

List available data types (measurement labels like TMAX, TMIN, PRCP, SNOW) for a given dataset or category. Pass a datasetId to see what is measured in that dataset, or a datacategoryId (e.g., "TEMP") to see all temperature-related types. Hundreds of types exist across all datasets. Use this before calling noaa_climate_fetch_data when the data type IDs are unknown. Common GHCND types: TMAX (max temperature), TMIN (min temperature), PRCP (precipitation), SNOW (snowfall), SNWD (snow depth), AWND (average wind speed).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (1–1000). Defaults to 25.
offsetNoZero-based index of the first result to return for pagination. Defaults to 0.
endDateNoFilter to data types with data on or before this ISO date (YYYY-MM-DD). Optional.
datasetIdNoFilter to data types available in this dataset (e.g., "GHCND", "GSOM"). Optional.
sortFieldNoSort results by this field. Optional.
sortOrderNoSort direction. Optional; defaults to asc.
startDateNoFilter to data types with data on or after this ISO date (YYYY-MM-DD). Optional.
stationIdNoFilter to data types available at this station ID. Optional.
locationIdNoFilter to data types available at this location ID. Optional.
datacategoryIdNoFilter to data types in this category (e.g., "TEMP" for temperature types, "PRCP" for precipitation). Optional.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoGuidance when no data types matched — echoes applied filters and suggests how to broaden.
resultsNoMatching data types.
metadataNoPagination metadata. Present when the API returns it.
exhaustedNoTrue when the requested offset is past the end of a non-empty result set — the page is empty but matches exist. Omitted otherwise.
totalCountNoTotal number of matching data types before the page limit.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds useful behavioral context: the scale ('Hundreds of types exist across all datasets'), the meaning of common type IDs (e.g., TMAX, PRCP), and the fact that filtering is optional. This goes beyond the schema 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?

The description is four sentences, each earning its place: purpose, two usage patterns, an explicit when-to-use note, and a list of common types. It is front-loaded with the core action and avoids 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 that the tool has an output schema (not shown but signaled) and 100% schema parameter coverage, the description adequately covers the orchestration need: it explains the tool's role in the workflow, how to filter, and what to expect in terms of scale. Nothing critical is missing for an agent to call it 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%, so baseline is 3. The description adds value by explaining how datasetId and datacategoryId are used with concrete examples ('TEMP' for temperature), and it enumerates common GHCND type IDs with their meanings. This enhances parameter understanding beyond the schema's terse 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 a specific verb-object ('List available data types') and gives concrete examples (TMAX, TMIN, PRCP, SNOW), making the purpose unmistakable. It also differentiates from the sibling tool noaa_climate_fetch_data by explicitly noting this is a precursor step when type IDs are unknown.

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 provides an explicit usage directive: 'Use this before calling noaa_climate_fetch_data when the data type IDs are unknown.' It also explains the two primary filtering modes (datasetId or datacategoryId), giving agents clear conditional guidance on when to select this tool over others.

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

noaa_climate_list_location_categoriesList NOAA Climate Location CategoriesA
Read-only
Inspect

List the location categories that scope noaa_climate_find_locations — CITY, CLIM_DIV, CLIM_REG, CNTRY, CNTY, HYD_ACC, HYD_CAT, HYD_REG, HYD_SUB, ST, US_TERR, and ZIP. Call this first when you do not know which locationCategoryId to pass, including the hydrological categories needed to reach a basin or region. There are 12 categories in total. This endpoint takes pagination and sort only — NOAA CDO ignores dataset, location, station, and date filters here, so none are offered.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (1–1000). Defaults to 25.
offsetNoZero-based index of the first result to return for pagination. Defaults to 0.
sortFieldNoSort results by this field. Optional.
sortOrderNoSort direction. Optional; defaults to asc.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoGuidance when no location categories were returned. Omitted otherwise.
resultsNoMatching location categories.
metadataNoPagination metadata. Present when the API returns it.
exhaustedNoTrue when the requested offset is past the end of a non-empty result set — the page is empty but matches exist. Omitted otherwise.
totalCountNoTotal number of location categories before the page limit.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already provide readOnlyHint=true, but the description adds behavioral context: 'NOAA CDO ignores dataset, location, station, and date filters here, so none are offered.' This tells the agent why those parameters are absent and how the API behaves, which goes beyond the annotation. It also notes the total count (12 categories), which is useful for verification. No contradiction with annotations.

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

Conciseness5/5

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

Two sentences, front-loaded with the core purpose and the category list. Every sentence contributes value: the first defines the tool and its relationship to find_locations, the second gives usage timing and a behavioral constraint. No fluff or repetition.

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?

The description covers purpose, usage conditions, behavioral constraints, and references the output schema implicitly. With full schema parameter coverage and an output schema present, nothing essential is missing. An agent can correctly decide to call this tool and know how to construct the request.

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 all four parameters (limit, offset, sortField, sortOrder) are already documented in the schema. The description only summarises them as 'pagination and sort' without adding deeper semantics like sort field recommendations or pagination edge cases. Baseline 3 is appropriate since the schema carries the load.

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 'List' plus the resource 'location categories' and specifies it scopes noaa_climate_find_locations. It enumerates all 12 categories explicitly, making the purpose unambiguous and distinct from sibling tools that perform other operations like finding locations or fetching data.

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 gives explicit when-to-use guidance: 'Call this first when you do not know which locationCategoryId to pass', including a specific mention of hydrological categories. It also clarifies that only pagination and sort are accepted, and that other filters are ignored, preventing the agent from attempting unsupported parameters. This is strong directional guidance.

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

noaa_climate_search_storm_eventsSearch NOAA Storm EventsA
Read-only
Inspect

Search the NCEI Storm Events Database for one calendar year — tornadoes, hail, floods, hurricanes, winter storms, heat, and every other NWS Storm Data event type, with magnitude, direct and indirect deaths and injuries, property and crop damage, and the episode and event narratives. This is a different NOAA corpus from the CDO tools on this server: it carries discrete severe-weather events rather than station observations, needs no token, and is published as one bulk file per year, so year is required. Filter with state (the full upper-case name NCEI writes, e.g. "FLORIDA" — not the postal code "FL"), eventType (the exact NWS label, e.g. "Tornado", "Hail", "Flash Flood", "Hurricane (Typhoon)", matched case-insensitively), month, and minDamageInUsd. Damage arrives from NCEI as a magnitude-suffixed string ("75.00K", "1.20M", "1.00B") and is returned as both the raw cell and a parsed dollar amount; an unreported figure is omitted entirely rather than reported as zero, and minDamageInUsd therefore excludes those rows and says how many it dropped. Results come back in the source file's own row order, paged with limit and offset, and totalCount is the true match count for the whole year.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYesCalendar year to search (1950 through the current partial year). Required — NCEI publishes one file per year, so an unscoped search would download every year back to 1950.
limitNoMaximum number of events to return (1–100). Defaults to 50.
monthNoFilter to events whose begin date falls in this month (1–12). Optional.
stateNoFilter to this state or territory, written as the full name NCEI uses (e.g. "FLORIDA", "PUERTO RICO"), matched case-insensitively. Postal codes like "FL" match nothing. Optional.
offsetNoZero-based index of the first matching event to return. Defaults to 0.
eventTypeNoFilter to this NWS event type, matched case-insensitively against the exact label (e.g. "Tornado", "Hail", "Flash Flood", "Hurricane (Typhoon)"). A miss returns the labels present in that year. Optional.
minDamageInUsdNoFilter to events whose property damage parses to at least this many dollars. Excludes every row whose damage NCEI did not report — about a fifth of a recent year — since an unreported figure cannot be shown to clear the threshold. Optional.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe limit that was applied. Omitted otherwise.
yearNoThe calendar year searched.
errorNoPresent when the call failed. Absent on success.
shownNoEvents returned on this page. Omitted otherwise.
eventsNoMatching events for the requested page, in the source file’s own row order.
noticeNoGuidance when nothing matched or the page ran past the end. Omitted otherwise.
exhaustedNoTrue when offset is past the end of a non-empty match set — the page is empty but matches exist. Omitted otherwise.
truncatedNoTrue when more matches exist beyond this page. Omitted otherwise.
sourceFileNoThe exact NCEI file this page was read from, including its `_c<publishDate>` suffix — the suffix changes whenever NCEI republishes a year.
totalCountNoEvents matching every filter across the whole year, before offset and limit.
scannedRowCountNoRows read from the source file, matched or not. Omitted when unavailable.
excludedUnknownDamageNoRows that satisfied every other filter but were dropped by minDamageInUsd because NCEI reported no property-damage figure for them. Omitted when minDamageInUsd was not supplied.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only provide readOnlyHint and openWorldHint, so the description carries the transparency burden. It discloses non-obvious behaviors: damage arrives as magnitude-suffixed strings and is parsed, unreported damage is omitted rather than zeroed, minDamageInUsd excludes unreported rows and reports how many were dropped, results come in source row order, and totalCount is the true match count for the full year. This far exceeds what annotations convey and contains no contradiction.

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?

Although long, every sentence earns its place: the main purpose is front-loaded, then the contrast with CDO tools, then filter specifics with examples, then the critical damage-parsing and pagination/totalCount behaviors. Dense but efficiently organized with no filler.

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 7 parameters, 1 required, and an output schema, the description covers everything an agent needs to call it correctly: the required year, filter semantics with examples, the tricky damage exclusion behavior, ordering, pagination, and the meaning of totalCount. Nothing important is missing, and the output schema handles return details.

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 baseline is 3. The description adds meaningful semantics beyond the schema for minDamageInUsd (omission behavior, exclusion logic, reported drop count) and clarifies the damage string format. However, for state and eventType it largely repeats schema examples, so it doesn't fully earn a 5.

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

Purpose5/5

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

States a specific verb ('Search'), a specific resource ('NCEI Storm Events Database'), and a well-scoped subject (one calendar year of events). It enumerates event types and fields returned, and explicitly differentiates from the CDO tools on the server, making it easy for an agent to distinguish this 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 Guidelines5/5

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

Explicitly contrasts with CDO tools ('different NOAA corpus... discrete severe-weather events rather than station observations'), states that no token is needed, and explains why year is required ('published as one bulk file per year'). This gives an agent clear when-to-use and when-not guidance, including the condition that drives the required parameter.

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

Frequently Asked Questions

Discussions

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

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.6/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: fetching data, searching locations, searching stations, getting station metadata, listing categories/datasets/types, and listing location categories. No two tools overlap; an agent can easily select the correct one based on the task.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern in snake_case: fetch_data, find_locations, find_stations, get_station, list_data_categories, list_datasets, list_data_types, list_location_categories. The verbs (fetch, find, get, list) are semantically appropriate and predictable.

Tool Count5/5

With 8 tools, the server is well-scoped for a climate data API. It covers the essential discovery and retrieval workflow without unnecessary bloat. Each tool serves a clear role in fetching or finding climate data elements.

Completeness5/5

The tool set provides a complete workflow: discover datasets, data categories, data types, location categories, find locations, find stations, get station metadata, and fetch observation data. There are no obvious gaps for the stated purpose of accessing NOAA climate data.