Skip to main content
Glama

noaa-climate-mcp-server

Fetch NOAA Climate Observation Data

noaa_climate_fetch_data
Read-only

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.

Input Schema

TableJSON 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

TableJSON Schema
NameRequiredDescriptionDefault
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.

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.