{"openapi":"3.1.0","info":{"title":"NOAA Climate Data Online (BYOK) API","version":"0.1.0","description":"NOAA Climate Data Online (BYOK) lets an AI assistant read your own NOAA Climate Data Online data through the NOAA Climate Data Online API with a key you supply (CDO token). Read-only: 9 tools (list_datasets, get_dataset, list_data_categories, list_data_types, list_location_categories, list_locations, list_stations, get_station, get_climate_data). The BYOK key travels with each request, is used...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-noaacdo.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-noaacdo/docs"},"termsOfService":"https://connectorbay.com/byok-noaacdo/terms"},"servers":[{"url":"https://byok-noaacdo.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-noaacdo/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_datasets":{"post":{"operationId":"list_datasets","summary":"List the Climate Data Online datasets (daily, monthly and annual summaries and others) with id, name, date coverage; eac","description":"List the Climate Data Online datasets (daily, monthly and annual summaries and others) with id, name, date coverage; each token is limited to 5 requests per second and 10000 per day. Use for \"Which NOAA climate datasets are available\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"datatypeid":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only datasets that have this data type, for example 'TMAX'.","title":"Datatypeid"},"locationid":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Location id such as 'FIPS:37' (a US state) or 'CITY:US370007'; several can be separated by commas.","title":"Locationid"},"stationid":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Station id such as 'GHCND:USW00094728'; several can be separated by commas.","title":"Stationid"},"startdate":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only items with data on or after this date (YYYY-MM-DD).","title":"Startdate"},"enddate":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only items with data on or before this date (YYYY-MM-DD).","title":"Enddate"},"sortfield":{"anyOf":[{"enum":["id","name","mindate","maxdate","datacoverage"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort by id, name, mindate, maxdate or datacoverage.","title":"Sortfield"},"sortorder":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"asc","description":"asc (default) or desc.","title":"Sortorder"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 1000, default 25).","title":"Limit"},"offset":{"anyOf":[{"maximum":10000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of results to skip, for paging.","title":"Offset"}},"title":"list_datasetsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_dataset":{"post":{"operationId":"get_dataset","summary":"Get one dataset by id: name, first and last date and coverage. Use for \"What does the GHCND dataset cover\".","description":"Get one dataset by id: name, first and last date and coverage. Use for \"What does the GHCND dataset cover\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dataset_id":{"description":"Dataset id, for example 'GHCND'.","maxLength":30,"title":"Dataset Id","type":"string"}},"required":["dataset_id"],"title":"get_datasetArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_data_categories":{"post":{"operationId":"list_data_categories","summary":"List data categories (groups of similar data types such as temperature or precipitation), optionally for one dataset, lo","description":"List data categories (groups of similar data types such as temperature or precipitation), optionally for one dataset, location or station. Use for \"What data categories does the GHCND dataset have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"datasetid":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Dataset id, for example 'GHCND' (daily summaries), 'GSOM' (monthly) or 'GSOY' (annual).","title":"Datasetid"},"locationid":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Location id such as 'FIPS:37' (a US state) or 'CITY:US370007'; several can be separated by commas.","title":"Locationid"},"stationid":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Station id such as 'GHCND:USW00094728'; several can be separated by commas.","title":"Stationid"},"startdate":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only items with data on or after this date (YYYY-MM-DD).","title":"Startdate"},"enddate":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only items with data on or before this date (YYYY-MM-DD).","title":"Enddate"},"sortfield":{"anyOf":[{"enum":["id","name","mindate","maxdate","datacoverage"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort by id, name, mindate, maxdate or datacoverage.","title":"Sortfield"},"sortorder":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"asc","description":"asc (default) or desc.","title":"Sortorder"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 1000, default 25).","title":"Limit"},"offset":{"anyOf":[{"maximum":10000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of results to skip, for paging.","title":"Offset"}},"title":"list_data_categoriesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_data_types":{"post":{"operationId":"list_data_types","summary":"List data types (for example TMAX, TMIN, PRCP) with their meaning, optionally filtered by dataset, location, station or ","description":"List data types (for example TMAX, TMIN, PRCP) with their meaning, optionally filtered by dataset, location, station or category. Use for \"Which data types measure precipitation in GHCND\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"datasetid":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Dataset id, for example 'GHCND' (daily summaries), 'GSOM' (monthly) or 'GSOY' (annual).","title":"Datasetid"},"locationid":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Location id such as 'FIPS:37' (a US state) or 'CITY:US370007'; several can be separated by commas.","title":"Locationid"},"stationid":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Station id such as 'GHCND:USW00094728'; several can be separated by commas.","title":"Stationid"},"datacategoryid":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Data category id, for example 'TEMP' or 'PRCP'.","title":"Datacategoryid"},"startdate":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only items with data on or after this date (YYYY-MM-DD).","title":"Startdate"},"enddate":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only items with data on or before this date (YYYY-MM-DD).","title":"Enddate"},"sortfield":{"anyOf":[{"enum":["id","name","mindate","maxdate","datacoverage"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort by id, name, mindate, maxdate or datacoverage.","title":"Sortfield"},"sortorder":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"asc","description":"asc (default) or desc.","title":"Sortorder"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 1000, default 25).","title":"Limit"},"offset":{"anyOf":[{"maximum":10000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of results to skip, for paging.","title":"Offset"}},"title":"list_data_typesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_location_categories":{"post":{"operationId":"list_location_categories","summary":"List location categories (city, county, state, country, climate region ...) that datasets use. Use for \"What kinds of lo","description":"List location categories (city, county, state, country, climate region ...) that datasets use. Use for \"What kinds of locations can I filter NOAA climate data by\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"datasetid":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Dataset id, for example 'GHCND' (daily summaries), 'GSOM' (monthly) or 'GSOY' (annual).","title":"Datasetid"},"startdate":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only items with data on or after this date (YYYY-MM-DD).","title":"Startdate"},"enddate":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only items with data on or before this date (YYYY-MM-DD).","title":"Enddate"},"sortfield":{"anyOf":[{"enum":["id","name","mindate","maxdate","datacoverage"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort by id, name, mindate, maxdate or datacoverage.","title":"Sortfield"},"sortorder":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"asc","description":"asc (default) or desc.","title":"Sortorder"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 1000, default 25).","title":"Limit"},"offset":{"anyOf":[{"maximum":10000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of results to skip, for paging.","title":"Offset"}},"title":"list_location_categoriesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_locations":{"post":{"operationId":"list_locations","summary":"List locations (cities, counties, states, countries, ZIP codes) with ids to use in climate data requests, optionally by ","description":"List locations (cities, counties, states, countries, ZIP codes) with ids to use in climate data requests, optionally by dataset or location category. Use for \"Find the NOAA location id for New York City\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"datasetid":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Dataset id, for example 'GHCND' (daily summaries), 'GSOM' (monthly) or 'GSOY' (annual).","title":"Datasetid"},"locationcategoryid":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Location category id, for example 'CITY', 'ST' (state) or 'CNTY'.","title":"Locationcategoryid"},"datacategoryid":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only locations with this data category.","title":"Datacategoryid"},"startdate":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only items with data on or after this date (YYYY-MM-DD).","title":"Startdate"},"enddate":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only items with data on or before this date (YYYY-MM-DD).","title":"Enddate"},"sortfield":{"anyOf":[{"enum":["id","name","mindate","maxdate","datacoverage"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort by id, name, mindate, maxdate or datacoverage.","title":"Sortfield"},"sortorder":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"asc","description":"asc (default) or desc.","title":"Sortorder"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 1000, default 25).","title":"Limit"},"offset":{"anyOf":[{"maximum":10000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of results to skip, for paging.","title":"Offset"}},"title":"list_locationsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_stations":{"post":{"operationId":"list_stations","summary":"List weather observing stations, optionally inside a bounding box (extent) or by dataset, location or data type. Use for","description":"List weather observing stations, optionally inside a bounding box (extent) or by dataset, location or data type. Use for \"Which weather stations are in New York City\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"datasetid":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Dataset id, for example 'GHCND' (daily summaries), 'GSOM' (monthly) or 'GSOY' (annual).","title":"Datasetid"},"locationid":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Location id such as 'FIPS:37' (a US state) or 'CITY:US370007'; several can be separated by commas.","title":"Locationid"},"datacategoryid":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only stations with this data category.","title":"Datacategoryid"},"datatypeid":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only stations that report this data type, for example 'PRCP'.","title":"Datatypeid"},"extent":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Bounding box 'south,west,north,east' in decimal degrees, for example '47.5204,-122.2047,47.6139,-122.1065'.","title":"Extent"},"startdate":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only items with data on or after this date (YYYY-MM-DD).","title":"Startdate"},"enddate":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only items with data on or before this date (YYYY-MM-DD).","title":"Enddate"},"sortfield":{"anyOf":[{"enum":["id","name","mindate","maxdate","datacoverage"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort by id, name, mindate, maxdate or datacoverage.","title":"Sortfield"},"sortorder":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"asc","description":"asc (default) or desc.","title":"Sortorder"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 1000, default 25).","title":"Limit"},"offset":{"anyOf":[{"maximum":10000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of results to skip, for paging.","title":"Offset"}},"title":"list_stationsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_station":{"post":{"operationId":"get_station","summary":"Get one station by id. Use for \"Tell me about station GHCND:USW00094728\".","description":"Get one station by id. Use for \"Tell me about station GHCND:USW00094728\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"station_id":{"description":"Station id, for example 'GHCND:USW00094728'.","maxLength":60,"title":"Station Id","type":"string"}},"required":["station_id"],"title":"get_stationArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_climate_data":{"post":{"operationId":"get_climate_data","summary":"Get observed values for one dataset between two dates, optionally for chosen data types, locations or stations. The rang","description":"Get observed values for one dataset between two dates, optionally for chosen data types, locations or stations. The range is at most one year (ten years for monthly and annual datasets). Use for \"What was the daily maximum temperature in New York City in January 2025\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"datasetid":{"description":"Exactly one dataset id, for example 'GHCND'.","maxLength":30,"title":"Datasetid","type":"string"},"startdate":{"description":"First date, YYYY-MM-DD.","maxLength":10,"title":"Startdate","type":"string"},"enddate":{"description":"Last date, YYYY-MM-DD (at most 1 year after startdate, 10 for GSOM/GSOY).","maxLength":10,"title":"Enddate","type":"string"},"datatypeid":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Data type ids such as 'TMAX' or 'PRCP', comma-separated.","title":"Datatypeid"},"locationid":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Location id such as 'FIPS:37' (a US state) or 'CITY:US370007'; several can be separated by commas.","title":"Locationid"},"stationid":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Station id such as 'GHCND:USW00094728'; several can be separated by commas.","title":"Stationid"},"units":{"anyOf":[{"enum":["standard","metric"],"type":"string"},{"type":"null"}],"default":null,"description":"standard or metric (no conversion if left out).","title":"Units"},"sortfield":{"anyOf":[{"enum":["id","name","mindate","maxdate","datacoverage"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort by id, name, mindate, maxdate or datacoverage.","title":"Sortfield"},"sortorder":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"asc","description":"asc (default) or desc.","title":"Sortorder"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 1000, default 25).","title":"Limit"},"offset":{"anyOf":[{"maximum":10000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of results to skip, for paging.","title":"Offset"}},"required":["datasetid","startdate","enddate"],"title":"get_climate_dataArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}