noaa-climate-mcp-server
Server Details
Search NOAA climate stations and datasets, fetch historical weather observations.
- 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 toolsnoaa_climate_fetch_dataFetch NOAA Climate Observation DataARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to return (1–1000). Defaults to 25. | |
| units | No | Unit 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. | |
| offset | No | Zero-based index of the first record to return for pagination. Defaults to 0. | |
| endDate | Yes | End 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. | |
| datasetId | Yes | Dataset 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. | |
| sortField | No | Sort results by this field. Optional. | |
| sortOrder | No | Sort direction. Optional; defaults to asc. | |
| startDate | Yes | Start 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. | |
| stationId | No | One 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. | |
| datatypeId | No | One 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. | |
| locationId | No | One 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. | |
| includemetadata | No | Include pagination metadata in the response. Defaults to true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| notice | No | Guidance when no records were returned — echoes query parameters and suggests how to broaden. |
| results | No | Flat array of observation records sorted by date by default. |
| metadata | No | Pagination metadata. Present when includemetadata=true. |
| exhausted | No | True when the requested offset is past the end of a non-empty result set — the page is empty but matches exist. Omitted otherwise. |
| totalCount | No | Total number of matching observation records before the page limit. |
| effectiveQuery | No | Summary of the effective query: dataset, date range, units, and any station/location/datatype filters applied. |
TDQS
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.
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.
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.
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.
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.
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 LocationsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (1–1000). Defaults to 25. | |
| offset | No | Zero-based index of the first result to return for pagination. Defaults to 0. | |
| endDate | No | Filter to locations with data on or before this ISO date (YYYY-MM-DD). Optional. | |
| datasetId | No | Filter to locations covered by this dataset (e.g., "GHCND"). Optional. | |
| sortField | No | Sort results by this field. Use name with sortOrder=asc to browse alphabetically when searching for a specific city or location name. Optional. | |
| sortOrder | No | Sort direction. Optional; defaults to asc. | |
| startDate | No | Filter to locations with data on or after this ISO date (YYYY-MM-DD). Optional. | |
| nameContains | No | Case-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. | |
| datacategoryId | No | Filter to locations with this data category (e.g., "TEMP"). Optional. | |
| locationCategoryId | No | Category 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
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| notice | No | Guidance when no locations matched — echoes applied filters and suggests how to broaden. |
| results | No | Matching locations. |
| metadata | No | Pagination metadata. Present when the API returns it. |
| exhausted | No | True when the requested offset is past the end of a non-empty result set — the page is empty but matches exist. Omitted otherwise. |
| totalCount | No | Total number of matching locations before the page limit. |
| appliedNameFilter | No | The 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
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.
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.
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.
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.
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.
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 StationsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (1–1000). Defaults to 25. | |
| extent | No | Bounding box filter as "minLat,minLon,maxLat,maxLon" (e.g., "47.5,-122.4,47.7,-122.1" for central Seattle). Optional. | |
| offset | No | Zero-based index of the first result to return for pagination. Defaults to 0. | |
| endDate | No | Filter to stations with data on or before this ISO date (YYYY-MM-DD). Optional. | |
| datasetId | No | Filter to stations that have data in this dataset (e.g., "GHCND" for daily observations). Optional. | |
| sortField | No | Sort results by this field. Optional. | |
| sortOrder | No | Sort direction. Optional; defaults to asc. | |
| startDate | No | Filter to stations with data on or after this ISO date (YYYY-MM-DD). Optional. | |
| datatypeId | No | Filter to stations that record these data types (e.g., ["TMAX", "TMIN", "PRCP"]). Optional. | |
| locationId | No | Filter to stations within this location ID (e.g., "FIPS:37" for NC, "CITY:US530018" for Seattle). Obtain from noaa_climate_find_locations. Optional. | |
| datacategoryId | No | Filter to stations with data in this category (e.g., "TEMP"). Optional. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| notice | No | Guidance when no stations matched — echoes applied filters and suggests how to broaden. |
| results | No | Matching stations. |
| metadata | No | Pagination metadata. Present when the API returns it. |
| exhausted | No | True when the requested offset is past the end of a non-empty result set — the page is empty but matches exist. Omitted otherwise. |
| totalCount | No | Total number of matching stations before the page limit. |
TDQS
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.
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.
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.
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.
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.
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 DisastersARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of disasters or years to return (1–100). Defaults to 50. | |
| state | No | Two-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. | |
| offset | No | Zero-based index of the first matching record to return. Defaults to 0. | |
| endYear | No | Latest 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. | |
| summary | No | Return per-year counts and costs by disaster class instead of individual disasters. Defaults to false. | |
| startYear | No | Earliest 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. | |
| disasterType | No | Restrict 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. | |
| minCostInUsd | No | Floor 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
| Name | Required | Description |
|---|---|---|
| cap | No | The limit that was applied. Omitted otherwise. |
| mode | No | Which shape this response carries: "events" populates disasters, "summary" populates summaries. |
| error | No | Present when the call failed. Absent on success. |
| scope | No | "US" for the national record, or the two-letter state code that was requested. |
| shown | No | Records returned on this page. Omitted otherwise. |
| notice | No | Guidance when nothing matched or the page ran past the end. Omitted otherwise. |
| costBasis | No | Present 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. |
| disasters | No | Individual disasters for the requested page. Present when mode is "events". |
| exhausted | No | True when offset is past the end of a non-empty match set — the page is empty but matches exist. Omitted otherwise. |
| summaries | No | Per-year tallies for the requested page. Present when mode is "summary". |
| truncated | No | True when more matches exist beyond this page. Omitted otherwise. |
| sourceFile | No | The exact NCEI export this response was read from, e.g. "events-US.csv". |
| totalCount | No | Records matching every filter across the whole export, before offset and limit. |
| coveredYears | No | The year span the export actually holds, read from its rows. |
| declaredCostUnit | No | The 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
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.
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.
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.
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.
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.
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 StationARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| stationId | Yes | Station ID to fetch (e.g., "GHCND:USW00024233", "COOP:010008"). Obtain from noaa_climate_find_stations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | Station ID. |
| name | No | Station name. |
| error | No | Present when the call failed. Absent on success. |
| maxdate | No | Latest date data is available at this station (YYYY-MM-DD). Omitted when not provided. |
| mindate | No | Earliest date data is available at this station (YYYY-MM-DD). Omitted when not provided. |
| latitude | No | Station latitude in decimal degrees. Omitted when not provided by the API. |
| elevation | No | Station elevation. Unit depends on elevationUnit. Omitted when not provided. |
| longitude | No | Station longitude in decimal degrees. Omitted when not provided by the API. |
| datacoverage | No | Fractional data coverage (0–1). Omitted when not provided by the API. |
| elevationUnit | No | Unit for elevation (e.g., "Meters"). Omitted when not provided. |
TDQS
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.
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.
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.
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.
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.
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 CategoriesARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (1–1000). Defaults to 25. | |
| offset | No | Zero-based index of the first result to return for pagination. Defaults to 0. | |
| endDate | No | Filter to categories with data on or before this ISO date (YYYY-MM-DD). Optional. | |
| datasetId | No | Filter to categories available in this dataset (e.g., "GHCND", "GSOM"). Optional. | |
| sortField | No | Sort results by this field. Optional. | |
| sortOrder | No | Sort direction. Optional; defaults to asc. | |
| startDate | No | Filter to categories with data on or after this ISO date (YYYY-MM-DD). Optional. | |
| stationId | No | Filter to categories available at this station ID. Optional. | |
| locationId | No | Filter to categories available at this location ID. Optional. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| notice | No | Guidance when no data categories matched — echoes applied filters and suggests how to broaden. |
| results | No | Matching data categories. |
| metadata | No | Pagination metadata. Present when the API returns it. |
| exhausted | No | True when the requested offset is past the end of a non-empty result set — the page is empty but matches exist. Omitted otherwise. |
| totalCount | No | Total number of matching data categories before the page limit. |
TDQS
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.
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.
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.
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.
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.
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 DatasetsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (1–1000). Defaults to 25. | |
| offset | No | Zero-based index of the first result to return for pagination. Defaults to 0. | |
| endDate | No | Filter to datasets with data on or before this ISO date (YYYY-MM-DD). Optional. | |
| sortField | No | Sort results by this field. Optional. | |
| sortOrder | No | Sort direction. Optional; defaults to asc. | |
| startDate | No | Filter to datasets with data on or after this ISO date (YYYY-MM-DD). Optional. | |
| stationId | No | Filter to datasets covering this station ID (e.g., "GHCND:USW00024233"). Optional. | |
| datatypeId | No | Filter to datasets containing these data type IDs (e.g., ["TMAX", "PRCP"]). Optional. | |
| locationId | No | Filter to datasets covering this location ID (e.g., "FIPS:37" for NC). Optional. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| notice | No | Guidance when no datasets matched — echoes applied filters and suggests how to broaden. |
| results | No | Matching datasets. |
| metadata | No | Pagination metadata. Present when the API returns it. |
| exhausted | No | True when the requested offset is past the end of a non-empty result set — the page is empty but matches exist. Omitted otherwise. |
| totalCount | No | Total number of matching datasets before the page limit. |
TDQS
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.
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.
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.
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.
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.
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 TypesARead-onlyInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (1–1000). Defaults to 25. | |
| offset | No | Zero-based index of the first result to return for pagination. Defaults to 0. | |
| endDate | No | Filter to data types with data on or before this ISO date (YYYY-MM-DD). Optional. | |
| datasetId | No | Filter to data types available in this dataset (e.g., "GHCND", "GSOM"). Optional. | |
| sortField | No | Sort results by this field. Optional. | |
| sortOrder | No | Sort direction. Optional; defaults to asc. | |
| startDate | No | Filter to data types with data on or after this ISO date (YYYY-MM-DD). Optional. | |
| stationId | No | Filter to data types available at this station ID. Optional. | |
| locationId | No | Filter to data types available at this location ID. Optional. | |
| datacategoryId | No | Filter to data types in this category (e.g., "TEMP" for temperature types, "PRCP" for precipitation). Optional. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| notice | No | Guidance when no data types matched — echoes applied filters and suggests how to broaden. |
| results | No | Matching data types. |
| metadata | No | Pagination metadata. Present when the API returns it. |
| exhausted | No | True when the requested offset is past the end of a non-empty result set — the page is empty but matches exist. Omitted otherwise. |
| totalCount | No | Total number of matching data types before the page limit. |
TDQS
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.
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.
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.
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.
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.
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 CategoriesARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (1–1000). Defaults to 25. | |
| offset | No | Zero-based index of the first result to return for pagination. Defaults to 0. | |
| sortField | No | Sort results by this field. Optional. | |
| sortOrder | No | Sort direction. Optional; defaults to asc. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| notice | No | Guidance when no location categories were returned. Omitted otherwise. |
| results | No | Matching location categories. |
| metadata | No | Pagination metadata. Present when the API returns it. |
| exhausted | No | True when the requested offset is past the end of a non-empty result set — the page is empty but matches exist. Omitted otherwise. |
| totalCount | No | Total number of location categories before the page limit. |
TDQS
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.
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.
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.
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.
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.
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 EventsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Calendar 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. | |
| limit | No | Maximum number of events to return (1–100). Defaults to 50. | |
| month | No | Filter to events whose begin date falls in this month (1–12). Optional. | |
| state | No | Filter 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. | |
| offset | No | Zero-based index of the first matching event to return. Defaults to 0. | |
| eventType | No | Filter 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. | |
| minDamageInUsd | No | Filter 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
| Name | Required | Description |
|---|---|---|
| cap | No | The limit that was applied. Omitted otherwise. |
| year | No | The calendar year searched. |
| error | No | Present when the call failed. Absent on success. |
| shown | No | Events returned on this page. Omitted otherwise. |
| events | No | Matching events for the requested page, in the source file’s own row order. |
| notice | No | Guidance when nothing matched or the page ran past the end. Omitted otherwise. |
| exhausted | No | True when offset is past the end of a non-empty match set — the page is empty but matches exist. Omitted otherwise. |
| truncated | No | True when more matches exist beyond this page. Omitted otherwise. |
| sourceFile | No | The exact NCEI file this page was read from, including its `_c<publishDate>` suffix — the suffix changes whenever NCEI republishes a year. |
| totalCount | No | Events matching every filter across the whole year, before offset and limit. |
| scannedRowCount | No | Rows read from the source file, matched or not. Omitted when unavailable. |
| excludedUnknownDamage | No | Rows 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
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.
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.
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.
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.
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.
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
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user or an account that owns the GitHub organization, then choose Claim with GitHub.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
Search NOAA CDO stations and datasets, fetch historical weather observations.
Find NOAA tide stations and NDBC buoys, fetch tide predictions, currents, and live conditions.
Find air-quality stations and read pollutant observations from government monitors via OpenAQ v3.
Historical weather and climate: 100+ years of station data, normals, extremes, and trends.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceGet US weather forecasts, active alerts, and current observations via the National Weather Service API.3831Apache 2.0
- AlicenseNot gradedqualityAmaintenanceFind NOAA tide stations and NDBC buoys, fetch tide predictions, water levels, tidal currents, and live buoy conditions via MCP.1421Apache 2.0
- AlicenseNot gradedqualityFmaintenanceProvides access to NOAA National Weather Service forecasts and alerts. Enables finding weather observation stations in US states via the get_stations tool.13MIT
- AlicenseNot gradedqualityCmaintenanceEnables access to authoritative US National Weather Service forecasts, hourly forecasts, active alerts, and station observations with no authentication required.3MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
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.
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.
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.
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.