Forecasts, severe-weather alerts, air quality, 20-year weather history, solar and wind production.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer token carrying your Meteosource API key. The plan the key is on decides which tools are available.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Hourly air-quality (smog) forecast for up to 20 locations, about 4 days ahead. Columns: `air_quality` (index, 1 = good, higher = worse) and pollutant surface concentrations — default pm10, pm25, no2_surface, so2_surface, ozone_surface; also available via `variables`: co_surface, no_surface, ozone_total, aerosol_550, dust_550nm, dust_mixing_ratio_05. Output is a table per location (`columns` once, `rows` as arrays), trimmed to `hours`. Not available on the free tier.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Hourly air-quality (smog) forecast for up to 20 locations, about 4 days ahead. Columns: `air_quality` (index, 1 = good, higher = worse) and pollutant surface concentrations — default pm10, pm25, no2_surface, so2_surface, ozone_surface; also available via `variables`: co_surface, no_surface, ozone_total, aerosol_550, dust_550nm, dust_mixing_ratio_05. Output is a table per location (`columns` once, `rows` as arrays), trimmed to `hours`. Not available on the free tier.
| Argument | Type | Description |
|---|---|---|
| hours | integer | |
| timezone | string | |
| locations* | array | |
| variables | array |
{
"type": "object",
"$defs": {
"LocationIn": {
"type": "object",
"title": "LocationIn",
"properties": {
"lat": {
"type": "number",
"title": "Lat",
"default": null,
"maximum": 90,
"minimum": -90,
"description": "Latitude in decimal degrees"
},
"lon": {
"type": "number",
"title": "Lon",
"default": null,
"maximum": 180,
"minimum": -180,
"description": "Longitude in decimal degrees"
},
"label": {
"type": "string",
"title": "Label",
"default": null,
"description": "Optional human-readable name echoed in results"
},
"place_id": {
"type": "string",
"title": "Place Id",
"default": null,
"description": "Meteosource place identifier"
}
},
"description": "A single location: either a Meteosource place_id (from search_places)\nor a lat/lon pair. An optional label is echoed back in results."
}
},
"title": "get_air_qualityArguments",
"required": [
"locations"
],
"properties": {
"hours": {
"type": "integer",
"title": "Hours",
"default": 48
},
"timezone": {
"type": "string",
"title": "Timezone",
"default": "auto"
},
"locations": {
"type": "array",
"items": {
"$ref": "#/$defs/LocationIn"
},
"title": "Locations"
},
"variables": {
"type": "array",
"items": {
"type": "string"
},
"title": "Variables",
"default": null
}
}
}Official weather warnings (severe weather alerts) for up to 20 locations. Returns only locations that currently have an active alert, with event type, severity, validity window and headline — an empty list means all clear. Cheap to call frequently; designed for monitoring/polling. Coverage: USA, EU countries and Canada. Requires the startup tier or higher (not available on the free tier).
| Argument | Type | Description |
|---|---|---|
| language | string | |
| locations* | array |
{
"type": "object",
"$defs": {
"LocationIn": {
"type": "object",
"title": "LocationIn",
"properties": {
"lat": {
"type": "number",
"title": "Lat",
"default": null,
"maximum": 90,
"minimum": -90,
"description": "Latitude in decimal degrees"
},
"lon": {
"type": "number",
"title": "Lon",
"default": null,
"maximum": 180,
"minimum": -180,
"description": "Longitude in decimal degrees"
},
"label": {
"type": "string",
"title": "Label",
"default": null,
"description": "Optional human-readable name echoed in results"
},
"place_id": {
"type": "string",
"title": "Place Id",
"default": null,
"description": "Meteosource place identifier"
}
},
"description": "A single location: either a Meteosource place_id (from search_places)\nor a lat/lon pair. An optional label is echoed back in results."
}
},
"title": "get_alertsArguments",
"required": [
"locations"
],
"properties": {
"language": {
"type": "string",
"title": "Language",
"default": "en"
},
"locations": {
"type": "array",
"items": {
"$ref": "#/$defs/LocationIn"
},
"title": "Locations"
}
}
}Weather forecast for up to 20 locations in one call. Sections (comma-separated): 'current' (now), 'hourly' (up to 168 h ahead, trimmed to `hours`), 'daily' (up to 30 days ahead, trimmed to `days`), 'minutely' (precipitation minute-by-minute, higher tiers), 'alerts' (official weather warnings, startup tier and above), or 'all'. Use `variables` to keep only specific fields (e.g. ["temperature", "wind", "precipitation", "probability", "irradiance"]) and reduce output size — recommended when querying many locations. Timezone defaults to each location's local time; units default per-country ('metric' forces SI). Forecast horizon depends on the subscription tier (free: 7 days). Output: time series (hourly, daily, minutely) are tables — `columns` listed once and `rows` as arrays in column order; nested API groups are flattened with underscores (wind_speed, probability_storm, cloud_cover_total). `units` is given once at the top level when it is the same for every location.
| Argument | Type | Description |
|---|---|---|
| days | integer | |
| hours | integer | |
| units | string | |
| language | string | |
| sections | string | |
| timezone | string | |
| locations* | array | |
Production of photovoltaic systems, past and forecast, for up to 20 sites. Each site is lat + lon plus the installation: module_kw (installed kWp; use 1 to get specific yield per kWp), inverter_kw (defaults to module_kw), tilt (degrees from horizontal, default 30) and orientation (azimuth the modules face, clockwise from north: 180 = south, the default). Dates are YYYY-MM-DD, inclusive, from up to 20 years back to 4 days ahead, so one call can cover last week's actual weather and the coming days. The renewables plan includes the last 3 years; older days need the paid historical add-on, otherwise the API refuses them ("historical data this old"), reported per site. Granularity: 'hourly' (power at each full hour, max 14 days per call), 'daily' or 'monthly' (energy, max 366 days per call — call repeatedly for multi-year yield; past days are cached so repeats are cheap). Columns: production_kw = output of the system at that hour (an instantaneous value); production_kwh = energy of the day or month, summed from those hourly values; production_max_kw = its peak. `variables` adds the weather behind the production: irradiance (ghi, dni, dhi in W/m2 hourly; ghi/dni/dhi_sum_wh_m2 daily and monthly), temperature, cloud_cover, humidity, dew_point, pressure, snowfall (flag per hour; snowfall_hours daily and monthly). Each site+day costs one API request on first fetch; a single call is capped at 400 site-days — split longer ranges into multiple calls. Needs a key on the renewables tier. Output: `columns` once at the top level; each site has `rows` as arrays in column order.
| Argument | Type | Description |
|---|---|---|
| sites* | array | |
| units | string | |
| date_to* | string | |
Historical weather (archive) with server-side aggregation. The archive holds 20 years, but how much of it a key may read depends on its plan: startup includes the last 7 days, standard the last year, premium and flexi all 20 years; byvalue reaches 366 days back and no further. Older days need Meteosource's paid historical add-on (billed per location and day); without it the API refuses such a day with "not allowed to access historical data this old", reported per location, so start inside the plan's range. Dates are YYYY-MM-DD, inclusive. Granularity: 'hourly' (raw hours, max 14 days per call), 'daily' (per-day min/max/avg/sum statistics, max 366 days) or 'monthly' (folded from daily, max 366 days per call — call repeatedly for multi-year analyses; results are cached so repeats are cheap). Variables (default: temperature, precipitation, wind): cape, cloud_cover, dew_point, evaporation, feels_like, humidity, irradiance, ozone, precipitation, precipitation_type, pressure, soil_temperature, surface_temperature, temperature, weather, wind, wind_distribution. Aggregations per variable: temperature min/max/avg, precipitation sum, wind speed avg + gusts max, irradiance sum in Wh/m2 (useful for PV analysis), weather = most frequent code of the day, precipitation_types = kinds seen that day (e.g. "rain,snow"; "none" when dry) — use weather and precipitation_type to document what happened (snow, fog, thunderstorm). wind_distribution (daily/monthly; for wind-turbine siting) = hours per 10 m wind-speed bin (wind_hours_0_2 … wind_hours_10_plus) and wind_power_density_w_m2 = 1/2 * 1.225 * mean(v^3) at 10 m — scale to hub height yourself (the API has no hub-height wind). `normals=true` (daily/monthly) adds long-term columns for each calendar day: temperature_normal_avg/min/max, temperature_record_min/max, wind_normal_speed, wind_record_gusts, precipitation_normal_sum and precipitation_normal_probability — compare a period with its normal in one call. Each location+day costs one API request on first fetch; a single call is capped at 400 location-days — split longer ranges into multiple calls. Not available on the free tier (startup+). Output: `columns` once at the top level; each location has `rows` as arrays in column order (a year of daily rows is ~15 kB).
| Argument | Type | Description |
|---|
Production of wind farms, past and forecast, for up to 20 sites. Each site is lat + lon plus the farm: turbine_model (catalogue below), exactly one of turbine_count or total_capacity (MW), hub_height (metres, default 100) and roughness of the surrounding terrain (water, open, farmland — the default, suburban, urban). Dates are YYYY-MM-DD, inclusive, from up to 20 years back to 4 days ahead, so one call can cover last week's actual weather and the coming days. The renewables plan includes the last 3 years; older days need the paid historical add-on, otherwise the API refuses them ("historical data this old"), reported per site. Granularity: 'hourly' (power at each full hour, max 14 days per call), 'daily' or 'monthly' (energy, max 366 days per call — call repeatedly for multi-year yield; past days are cached so repeats are cheap). Columns: production_mw = output of the whole farm at that hour (an instantaneous value); production_mwh = energy of the day or month, summed from those hourly values; production_max_mw = its peak. `variables` adds the weather behind the production: wind (10 m above ground, not hub height: wind_10m_speed, wind_10m_gusts and wind_10m_angle hourly; speed avg/max and gusts max daily and monthly), temperature, dew_point, pressure. Turbine catalogue (series + rotor diameter in m / rated power in kW): Adwen AD116/5000; Enercon E48/800, E-53/800, E-70/2000, E-70/2300, E-82/2000, E-82/2300, E-82/2350, E-82/3000, E-92/2350, E-101/3050, E-101/3500, E-115/3000, E-115/3200, E-126/4200, E-126/7500, E-126/7580, E-141/4200; Eno ENO100/2200, ENO114/3500, ENO126/3500; GE GE100/2500, GE103/2750, GE120/2500, GE120/2750, GE130/3200; Nordex N90/2500, N100/2500, N117/2400, N131/3000, N131/3300, N131/3600; Senvion MM92/2050, MM100/2000, S104/3400, S114/3200, S114/3400, S122/3000, S122/3200, S126/6150, S152/6330; aerodyn SCD168/8000; Siemens SWT113/2300, SWT113/3200, SWT120/3600 (the default), SWT130/3300, SWT130/3600, SWT142/3150; Vestas V80/2000, V90/2000, V90/2000/GS, V90/3000, V100/1800, V100/1800/GS, V112/3000, V112/3075, V112/3300, V112/3450, V117/3300, V117/3450, V117/3600, V126/3000, V126/3300, V126/3450, V164/8000, V164/9500; Vensys VS112/2500. Each site+day costs one API request on first fetch; a single call is capped at 400 site-days — split longer ranges into multiple calls. Needs a key on the renewables tier. Output: `columns` once at the top level; each site has `rows` as arrays in column order.
Find locations and their Meteosource place_id. Use this first to resolve city names, postal codes or coordinates into place_id values for the other weather tools. Provide either `query` (place name or postal code) to search, or `lat` + `lon` to find the nearest known place. Returns up to 10 matches ordered by relevance, each with place_id, administrative area, country, coordinates and timezone. Note: lat/lon are returned in degree-letter format (e.g. "50.08804N").
| Argument | Type | Description |
|---|---|---|
| lat | number | |
| lon | number | |
| query | string | |
| language | string |
{
"type": "object",
"title": "search_placesArguments",
"properties": {
"lat": {
"type": "number",
"title": "Lat",
"default": null,
"maximum": 90,
"minimum": -90
},
"lon": {
"type": "number",
"title": "Lon",
"default": null,
"maximum": 180,
"minimum": -180
},
"query": {
"type": "string",
"title": "Query",
"default": null
},
"language": {
"type": "string",
"title": "Language",
"default": "en"
}
}
}| variables |
| array |
{
"type": "object",
"$defs": {
"LocationIn": {
"type": "object",
"title": "LocationIn",
"properties": {
"lat": {
"type": "number",
"title": "Lat",
"default": null,
"maximum": 90,
"minimum": -90,
"description": "Latitude in decimal degrees"
},
"lon": {
"type": "number",
"title": "Lon",
"default": null,
"maximum": 180,
"minimum": -180,
"description": "Longitude in decimal degrees"
},
"label": {
"type": "string",
"title": "Label",
"default": null,
"description": "Optional human-readable name echoed in results"
},
"place_id": {
"type": "string",
"title": "Place Id",
"default": null,
"description": "Meteosource place identifier"
}
},
"description": "A single location: either a Meteosource place_id (from search_places)\nor a lat/lon pair. An optional label is echoed back in results."
}
},
"title": "get_forecastArguments",
"required": [
"locations"
],
"properties": {
"days": {
"type": "integer",
"title": "Days",
"default": 7
},
"hours": {
"type": "integer",
"title": "Hours",
"default": 48
},
"units": {
"type": "string",
"title": "Units",
"default": "auto"
},
"language": {
"type": "string",
"title": "Language",
"default": "en"
},
"sections": {
"type": "string",
"title": "Sections",
"default": "current,daily"
},
"timezone": {
"type": "string",
"title": "Timezone",
"default": "auto"
},
"locations": {
"type": "array",
"items": {
"$ref": "#/$defs/LocationIn"
},
"title": "Locations"
},
"variables": {
"type": "array",
"items": {
"type": "string"
},
"title": "Variables",
"default": null
}
}
}| timezone |
| string |
| date_from* | string |
| variables | array |
| granularity | string |
{
"type": "object",
"$defs": {
"SolarSiteIn": {
"type": "object",
"title": "SolarSiteIn",
"required": [
"lat",
"lon",
"module_kw"
],
"properties": {
"lat": {
"type": "number",
"title": "Lat",
"maximum": 90,
"minimum": -90,
"description": "Latitude in decimal degrees"
},
"lon": {
"type": "number",
"title": "Lon",
"maximum": 180,
"minimum": -180,
"description": "Longitude in decimal degrees"
},
"tilt": {
"type": "integer",
"title": "Tilt",
"default": 30,
"maximum": 90,
"minimum": 0,
"description": "Tilt of the modules from horizontal in degrees: 0 = flat, 90 = vertical"
},
"label": {
"type": "string",
"title": "Label",
"default": null,
"description": "Optional human-readable name echoed in results"
},
"module_kw": {
"type": "number",
"title": "Module Kw",
"description": "Installed module power in kW (kWp); use 1 for specific yield per kWp",
"exclusiveMinimum": 0
},
"inverter_kw": {
"type": "number",
"title": "Inverter Kw",
"default": null,
"description": "Inverter power in kW; defaults to module_kw",
"exclusiveMinimum": 0
},
"orientation": {
"type": "integer",
"title": "Orientation",
"default": 180,
"maximum": 360,
"minimum": 0,
"description": "Azimuth the modules face, in degrees clockwise from north: 90 = east, 180 = south, 270 = west"
}
},
"description": "A photovoltaic installation: where it stands and how it is built.\nThe defaults of tilt and orientation are the API's own; they are always\nsent, so a cached day can never depend on a default the API changed."
}
},
"title": "get_solar_productionArguments",
"required": [
"sites",
"date_from",
"date_to"
],
"properties": {
"sites": {
"type": "array",
"items": {
"$ref": "#/$defs/SolarSiteIn"
},
"title": "Sites"
},
"units": {
"type": "string",
"title": "Units",
"default": "metric"
},
"date_to": {
"type": "string",
"title": "Date To"
},
"timezone": {
"type": "string",
"title": "Timezone",
"default": "auto"
},
"date_from": {
"type": "string",
"title": "Date From"
},
"variables": {
"type": "array",
"items": {
"type": "string"
},
"title": "Variables",
"default": null
},
"granularity": {
"type": "string",
"title": "Granularity",
"default": "daily"
}
}
}| units | string | |
| date_to* | string | |
| normals | boolean | |
| timezone | string | |
| date_from* | string | |
| locations* | array | |
| variables | array | |
| granularity | string |
{
"type": "object",
"$defs": {
"LocationIn": {
"type": "object",
"title": "LocationIn",
"properties": {
"lat": {
"type": "number",
"title": "Lat",
"default": null,
"maximum": 90,
"minimum": -90,
"description": "Latitude in decimal degrees"
},
"lon": {
"type": "number",
"title": "Lon",
"default": null,
"maximum": 180,
"minimum": -180,
"description": "Longitude in decimal degrees"
},
"label": {
"type": "string",
"title": "Label",
"default": null,
"description": "Optional human-readable name echoed in results"
},
"place_id": {
"type": "string",
"title": "Place Id",
"default": null,
"description": "Meteosource place identifier"
}
},
"description": "A single location: either a Meteosource place_id (from search_places)\nor a lat/lon pair. An optional label is echoed back in results."
}
},
"title": "get_weather_historyArguments",
"required": [
"locations",
"date_from",
"date_to"
],
"properties": {
"units": {
"type": "string",
"title": "Units",
"default": "metric"
},
"date_to": {
"type": "string",
"title": "Date To"
},
"normals": {
"type": "boolean",
"title": "Normals",
"default": false
},
"timezone": {
"type": "string",
"title": "Timezone",
"default": "auto"
},
"date_from": {
"type": "string",
"title": "Date From"
},
"locations": {
"type": "array",
"items": {
"$ref": "#/$defs/LocationIn"
},
"title": "Locations"
},
"variables": {
"type": "array",
"items": {
"type": "string"
},
"title": "Variables",
"default": null
},
"granularity": {
"type": "string",
"title": "Granularity",
"default": "daily"
}
}
}| Argument | Type | Description |
|---|
| sites* | array | |
| units | string | |
| date_to* | string | |
| timezone | string | |
| date_from* | string | |
| variables | array | |
| granularity | string |
{
"type": "object",
"$defs": {
"WindSiteIn": {
"type": "object",
"title": "WindSiteIn",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"title": "Lat",
"maximum": 90,
"minimum": -90,
"description": "Latitude in decimal degrees"
},
"lon": {
"type": "number",
"title": "Lon",
"maximum": 180,
"minimum": -180,
"description": "Longitude in decimal degrees"
},
"label": {
"type": "string",
"title": "Label",
"default": null,
"description": "Optional human-readable name echoed in results"
},
"roughness": {
"enum": [
"water",
"open",
"farmland",
"suburban",
"urban"
],
"type": "string",
"title": "Roughness",
"default": "farmland",
"description": "Terrain around the site"
},
"hub_height": {
"type": "integer",
"title": "Hub Height",
"default": 100,
"description": "Hub height in metres",
"exclusiveMinimum": 0
},
"turbine_count": {
"type": "integer",
"title": "Turbine Count",
"default": null,
"minimum": 1,
"description": "Number of turbines; give this or total_capacity, not both"
},
"turbine_model": {
"type": "string",
"title": "Turbine Model",
"default": "SWT120/3600",
"description": "Turbine model from the catalogue in the tool description"
},
"total_capacity": {
"type": "number",
"title": "Total Capacity",
"default": null,
"description": "Total capacity of the farm in MW; give this or turbine_count, not both",
"exclusiveMinimum": 0
}
},
"description": "A wind farm: where it stands and which turbines it runs. The farm's\nsize is either a number of turbines or a total capacity, never both (the\nAPI takes exactly one). Defaults are the API's own and are always sent,\nfor the same reason as on SolarSiteIn."
}
},
"title": "get_wind_productionArguments",
"required": [
"sites",
"date_from",
"date_to"
],
"properties": {
"sites": {
"type": "array",
"items": {
"$ref": "#/$defs/WindSiteIn"
},
"title": "Sites"
},
"units": {
"type": "string",
"title": "Units",
"default": "metric"
},
"date_to": {
"type": "string",
"title": "Date To"
},
"timezone": {
"type": "string",
"title": "Timezone",
"default": "auto"
},
"date_from": {
"type": "string",
"title": "Date From"
},
"variables": {
"type": "array",
"items": {
"type": "string"
},
"title": "Variables",
"default": null
},
"granularity": {
"type": "string",
"title": "Granularity",
"default": "daily"
}
}
}