{"openapi":"3.1.0","info":{"title":"Meteostat (BYOK) API","version":"0.1.0","description":"Meteostat (BYOK) lets an AI assistant read your own Meteostat data through the Meteostat API with a key you supply (RapidAPI key). Read-only: 9 tools (find_nearby_stations, get_station, get_station_hourly, get_station_daily, get_station_monthly, get_point_hourly, get_point_daily, get_point_monthly, get_point_climate_normals). The BYOK key travels with each request, is used for that one call only...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-meteostat.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-meteostat/docs"},"termsOfService":"https://connectorbay.com/byok-meteostat/terms"},"servers":[{"url":"https://byok-meteostat.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-meteostat/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/find_nearby_stations":{"post":{"operationId":"find_nearby_stations","summary":"Find weather stations near a latitude and longitude, nearest first, with station id, name and distance in metres. Defaul","description":"Find weather stations near a latitude and longitude, nearest first, with station id, name and distance in metres. Default radius is 100 km. Use for \"Which weather stations are near Frankfurt\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"description":"Latitude in decimal degrees.","maximum":90,"minimum":-90,"title":"Lat","type":"number"},"lon":{"description":"Longitude in decimal degrees.","maximum":180,"minimum":-180,"title":"Lon","type":"number"},"limit":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Maximum number of stations (default 10).","title":"Limit"},"radius":{"anyOf":[{"maximum":1000000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100000,"description":"Search radius in metres (default 100000).","title":"Radius"}},"required":["lat","lon"],"title":"find_nearby_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 weather station's metadata: names, country, region, location and elevation, time zone and the date ranges of its","description":"Get one weather station's metadata: names, country, region, location and elevation, time zone and the date ranges of its hourly, daily, monthly and normals data. Give exactly one of id, wmo or icao. Use for \"What data does the Frankfurt Airport weather station have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Meteostat station id, for example '10637'.","title":"Id"},"wmo":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"WMO station id as a number, for example 10637.","title":"Wmo"},"icao":{"anyOf":[{"maxLength":8,"type":"string"},{"type":"null"}],"default":null,"description":"ICAO airport code, for example 'EDDF'.","title":"Icao"}},"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_station_hourly":{"post":{"operationId":"get_station_hourly","summary":"Hourly observations of one station: temperature, dew point, humidity, precipitation, snow depth, wind, pressure, sunshin","description":"Hourly observations of one station: temperature, dew point, humidity, precipitation, snow depth, wind, pressure, sunshine and weather condition code. At most 30 days per request. Use for \"What was the hourly temperature at Frankfurt Airport on 1 January 2026\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"station":{"description":"Meteostat station id, for example '10637' (Frankfurt Airport). Find ids with find_nearby_stations.","maxLength":20,"title":"Station","type":"string"},"start":{"description":"First day of the period as YYYY-MM-DD.","maxLength":10,"title":"Start","type":"string"},"end":{"description":"Last day of the period as YYYY-MM-DD.","maxLength":10,"title":"End","type":"string"},"tz":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":"UTC","description":"Time zone name from the tz database, for example 'Europe/Berlin' (default UTC).","title":"Tz"},"model":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"True to fill gaps in observations with statistically optimised model data (default true), false for observations only.","title":"Model"},"freq":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Optional custom aggregation frequency (see the Meteostat docs for allowed values).","title":"Freq"},"units":{"anyOf":[{"enum":["metric","imperial","scientific"],"type":"string"},{"type":"null"}],"default":"metric","description":"Unit system: metric (Celsius, mm, km/h), imperial (Fahrenheit, inches, mph) or scientific (Kelvin, mm, m/s).","title":"Units"}},"required":["station","start","end"],"title":"get_station_hourlyArguments","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_daily":{"post":{"operationId":"get_station_daily","summary":"Daily statistics of one station: average, minimum and maximum temperature, precipitation, snow depth, wind, pressure and","description":"Daily statistics of one station: average, minimum and maximum temperature, precipitation, snow depth, wind, pressure and sunshine minutes. Up to 10 years per request, so keep the range short. Use for \"How warm was it each day in January 2026 at Frankfurt Airport\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"station":{"description":"Meteostat station id, for example '10637' (Frankfurt Airport). Find ids with find_nearby_stations.","maxLength":20,"title":"Station","type":"string"},"start":{"description":"First day of the period as YYYY-MM-DD.","maxLength":10,"title":"Start","type":"string"},"end":{"description":"Last day of the period as YYYY-MM-DD.","maxLength":10,"title":"End","type":"string"},"model":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"True to fill gaps in observations with statistically optimised model data (default true), false for observations only.","title":"Model"},"freq":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Optional custom aggregation frequency (see the Meteostat docs for allowed values).","title":"Freq"},"units":{"anyOf":[{"enum":["metric","imperial","scientific"],"type":"string"},{"type":"null"}],"default":"metric","description":"Unit system: metric (Celsius, mm, km/h), imperial (Fahrenheit, inches, mph) or scientific (Kelvin, mm, m/s).","title":"Units"}},"required":["station","start","end"],"title":"get_station_dailyArguments","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_monthly":{"post":{"operationId":"get_station_monthly","summary":"Monthly statistics of one station: average daily temperature, minimum and maximum, precipitation, wind, pressure and sun","description":"Monthly statistics of one station: average daily temperature, minimum and maximum, precipitation, wind, pressure and sunshine. Use for \"What were the monthly average temperatures at Frankfurt Airport in 2025\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"station":{"description":"Meteostat station id, for example '10637' (Frankfurt Airport). Find ids with find_nearby_stations.","maxLength":20,"title":"Station","type":"string"},"start":{"description":"First day of the period as YYYY-MM-DD.","maxLength":10,"title":"Start","type":"string"},"end":{"description":"Last day of the period as YYYY-MM-DD.","maxLength":10,"title":"End","type":"string"},"model":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"True to fill gaps in observations with statistically optimised model data (default true), false for observations only.","title":"Model"},"freq":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Optional custom aggregation frequency (see the Meteostat docs for allowed values).","title":"Freq"},"units":{"anyOf":[{"enum":["metric","imperial","scientific"],"type":"string"},{"type":"null"}],"default":"metric","description":"Unit system: metric (Celsius, mm, km/h), imperial (Fahrenheit, inches, mph) or scientific (Kelvin, mm, m/s).","title":"Units"}},"required":["station","start","end"],"title":"get_station_monthlyArguments","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_point_hourly":{"post":{"operationId":"get_point_hourly","summary":"Hourly weather history for any latitude and longitude (interpolated from nearby stations): temperature, humidity, precip","description":"Hourly weather history for any latitude and longitude (interpolated from nearby stations): temperature, humidity, precipitation, wind, pressure and condition code. At most 30 days per request. Use for \"What was the weather each hour in Frankfurt on 1 January 2026\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"description":"Latitude in decimal degrees.","maximum":90,"minimum":-90,"title":"Lat","type":"number"},"lon":{"description":"Longitude in decimal degrees.","maximum":180,"minimum":-180,"title":"Lon","type":"number"},"start":{"description":"First day of the period as YYYY-MM-DD.","maxLength":10,"title":"Start","type":"string"},"end":{"description":"Last day of the period as YYYY-MM-DD.","maxLength":10,"title":"End","type":"string"},"alt":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Elevation of the location in metres; when left out Meteostat estimates it from nearby stations.","title":"Alt"},"tz":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":"UTC","description":"Time zone name from the tz database, for example 'Europe/Berlin' (default UTC).","title":"Tz"},"model":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"True to fill gaps in observations with statistically optimised model data (default true), false for observations only.","title":"Model"},"freq":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Optional custom aggregation frequency (see the Meteostat docs for allowed values).","title":"Freq"},"units":{"anyOf":[{"enum":["metric","imperial","scientific"],"type":"string"},{"type":"null"}],"default":"metric","description":"Unit system: metric (Celsius, mm, km/h), imperial (Fahrenheit, inches, mph) or scientific (Kelvin, mm, m/s).","title":"Units"}},"required":["lat","lon","start","end"],"title":"get_point_hourlyArguments","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_point_daily":{"post":{"operationId":"get_point_daily","summary":"Daily weather history for any latitude and longitude (interpolated from nearby stations). Up to 10 years per request, so","description":"Daily weather history for any latitude and longitude (interpolated from nearby stations). Up to 10 years per request, so keep the range short. Use for \"What were the daily highs near 50.11, 8.68 in January 2026\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"description":"Latitude in decimal degrees.","maximum":90,"minimum":-90,"title":"Lat","type":"number"},"lon":{"description":"Longitude in decimal degrees.","maximum":180,"minimum":-180,"title":"Lon","type":"number"},"start":{"description":"First day of the period as YYYY-MM-DD.","maxLength":10,"title":"Start","type":"string"},"end":{"description":"Last day of the period as YYYY-MM-DD.","maxLength":10,"title":"End","type":"string"},"alt":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Elevation of the location in metres; when left out Meteostat estimates it from nearby stations.","title":"Alt"},"model":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"True to fill gaps in observations with statistically optimised model data (default true), false for observations only.","title":"Model"},"freq":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Optional custom aggregation frequency (see the Meteostat docs for allowed values).","title":"Freq"},"units":{"anyOf":[{"enum":["metric","imperial","scientific"],"type":"string"},{"type":"null"}],"default":"metric","description":"Unit system: metric (Celsius, mm, km/h), imperial (Fahrenheit, inches, mph) or scientific (Kelvin, mm, m/s).","title":"Units"}},"required":["lat","lon","start","end"],"title":"get_point_dailyArguments","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_point_monthly":{"post":{"operationId":"get_point_monthly","summary":"Monthly weather history for any latitude and longitude (interpolated from nearby stations). Use for \"What was the monthl","description":"Monthly weather history for any latitude and longitude (interpolated from nearby stations). Use for \"What was the monthly rainfall near 50.11, 8.68 during 2025\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"description":"Latitude in decimal degrees.","maximum":90,"minimum":-90,"title":"Lat","type":"number"},"lon":{"description":"Longitude in decimal degrees.","maximum":180,"minimum":-180,"title":"Lon","type":"number"},"start":{"description":"First day of the period as YYYY-MM-DD.","maxLength":10,"title":"Start","type":"string"},"end":{"description":"Last day of the period as YYYY-MM-DD.","maxLength":10,"title":"End","type":"string"},"alt":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Elevation of the location in metres; when left out Meteostat estimates it from nearby stations.","title":"Alt"},"model":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"True to fill gaps in observations with statistically optimised model data (default true), false for observations only.","title":"Model"},"freq":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Optional custom aggregation frequency (see the Meteostat docs for allowed values).","title":"Freq"},"units":{"anyOf":[{"enum":["metric","imperial","scientific"],"type":"string"},{"type":"null"}],"default":"metric","description":"Unit system: metric (Celsius, mm, km/h), imperial (Fahrenheit, inches, mph) or scientific (Kelvin, mm, m/s).","title":"Units"}},"required":["lat","lon","start","end"],"title":"get_point_monthlyArguments","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_point_climate_normals":{"post":{"operationId":"get_point_climate_normals","summary":"Climate normals (long-term monthly averages) for a latitude and longitude: twelve rows per reference period with tempera","description":"Climate normals (long-term monthly averages) for a latitude and longitude: twelve rows per reference period with temperature, precipitation, wind, pressure and sunshine. Use for \"What is the typical monthly climate near 50.11, 8.68\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"description":"Latitude in decimal degrees.","maximum":90,"minimum":-90,"title":"Lat","type":"number"},"lon":{"description":"Longitude in decimal degrees.","maximum":180,"minimum":-180,"title":"Lon","type":"number"},"alt":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Elevation of the location in metres; when left out Meteostat estimates it from nearby stations.","title":"Alt"},"units":{"anyOf":[{"enum":["metric","imperial","scientific"],"type":"string"},{"type":"null"}],"default":"metric","description":"Unit system: metric (Celsius, mm, km/h), imperial (Fahrenheit, inches, mph) or scientific (Kelvin, mm, m/s).","title":"Units"}},"required":["lat","lon"],"title":"get_point_climate_normalsArguments","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}}}}