Weather MCP Server by Meteosource

Forecasts, severe-weather alerts, air quality, 20-year weather history, solar and wind production.

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
96%
Integridad del esquema
79%
Calidad de los nombres
100%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Hallazgos (1)

  • LOWTool 'get_air_quality' description lacks action verben get_air_quality

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~4,831Tokens (definiciones de herramientas)
~3.8 KBTamaño de respuesta típico
Impacto significativo en la atención (3.77% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "weather": {
      "url": "https://mcp.meteosource.com/mcp"
    }
  }
}

Puntos de conexión remotos

https://mcp.meteosource.com/mcpstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (7)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢search_places(query, lat, lon, language)

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").

Esquema de entrada

{
  "type": "object",
  "properties": {
    "query": {
      "default": null,
      "title": "Query",
      "type": "string"
    },
    "lat": {
      "default": null,
      "maximum": 90,
      "minimum": -90,
      "title": "Lat",
      "type": "number"
    },
    "lon": {
      "default": null,
      "maximum": 180,
      "minimum": -180,
      "title": "Lon",
      "type": "number"
    },
    "language": {
      "default": "en",
      "title": "Language",
      "type": "string"
    }
  },
  "title": "search_placesArguments"
}
🟢get_forecast(locations, sections, hours, days, variables, ...)

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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "locations": {
      "items": {
        "$ref": "#/$defs/LocationIn"
      },
      "title": "Locations",
      "type": "array"
    },
    "sections": {
      "default": "current,daily",
      "title": "Sections",
      "type": "string"
    },
    "hours": {
      "default": 48,
      "title": "Hours",
      "type": "integer"
    },
    "days": {
      "default": 7,
      "title": "Days",
      "type": "integer"
    },
    "variables": {
      "default": null,
      "items": {
        "type": "string"
      },
      "title": "Variables",
      "type": "array"
    },
    "timezone": {
      "default": "auto",
      "title": "Timezone",
      "type": "string"
    },
    "units": {
      "default": "auto",
      "title": "Units",
      "type": "string"
    },
    "language": {
      "default": "en",
      "title": "Language",
      "type": "string"
    }
  },
  "required": [
    "locations"
  ],
  "$defs": {
    "LocationIn": {
      "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.",
      "properties": {
        "place_id": {
          "default": null,
          "description": "Meteosource place identifier",
          "title": "Place Id",
          "type": "string"
        },
        "lat": {
          "default": null,
          "description": "Latitude in decimal degrees",
          "maximum": 90,
          "minimum": -90,
          "title": "Lat",
          "type": "number"
        },
        "lon": {
          "default": null,
          "description": "Longitude in decimal degrees",
          "maximum": 180,
          "minimum": -180,
          "title": "Lon",
          "type": "number"
        },
        "label": {
          "default": null,
          "description": "Optional human-readable name echoed in results",
          "title": "Label",
          "type": "string"
        }
      },
      "title": "LocationIn",
      "type": "object"
    }
  },
  "title": "get_forecastArguments"
}
🟢get_alerts(locations, language)

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).

Esquema de entrada

{
  "type": "object",
  "properties": {
    "locations": {
      "items": {
        "$ref": "#/$defs/LocationIn"
      },
      "title": "Locations",
      "type": "array"
    },
    "language": {
      "default": "en",
      "title": "Language",
      "type": "string"
    }
  },
  "required": [
    "locations"
  ],
  "$defs": {
    "LocationIn": {
      "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.",
      "properties": {
        "place_id": {
          "default": null,
          "description": "Meteosource place identifier",
          "title": "Place Id",
          "type": "string"
        },
        "lat": {
          "default": null,
          "description": "Latitude in decimal degrees",
          "maximum": 90,
          "minimum": -90,
          "title": "Lat",
          "type": "number"
        },
        "lon": {
          "default": null,
          "description": "Longitude in decimal degrees",
          "maximum": 180,
          "minimum": -180,
          "title": "Lon",
          "type": "number"
        },
        "label": {
          "default": null,
          "description": "Optional human-readable name echoed in results",
          "title": "Label",
          "type": "string"
        }
      },
      "title": "LocationIn",
      "type": "object"
    }
  },
  "title": "get_alertsArguments"
}
🟡get_weather_history(locations, date_from, date_to, granularity, variables, ...)

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).

Esquema de entrada

{
  "type": "object",
  "properties": {
    "locations": {
      "items": {
        "$ref": "#/$defs/LocationIn"
      },
      "title": "Locations",
      "type": "array"
    },
    "date_from": {
      "title": "Date From",
      "type": "string"
    },
    "date_to": {
      "title": "Date To",
      "type": "string"
    },
    "granularity": {
      "default": "daily",
      "title": "Granularity",
      "type": "string"
    },
    "variables": {
      "default": null,
      "items": {
        "type": "string"
      },
      "title": "Variables",
      "type": "array"
    },
    "normals": {
      "default": false,
      "title": "Normals",
      "type": "boolean"
    },
    "timezone": {
      "default": "auto",
      "title": "Timezone",
      "type": "string"
    },
    "units": {
      "default": "metric",
      "title": "Units",
      "type": "string"
    }
  },
  "required": [
    "locations",
    "date_from",
    "date_to"
  ],
  "$defs": {
    "LocationIn": {
      "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.",
      "properties": {
        "place_id": {
          "default": null,
          "description": "Meteosource place identifier",
          "title": "Place Id",
          "type": "string"
        },
        "lat": {
          "default": null,
          "description": "Latitude in decimal degrees",
          "maximum": 90,
          "minimum": -90,
          "title": "Lat",
          "type": "number"
        },
        "lon": {
          "default": null,
          "description": "Longitude in decimal degrees",
          "maximum": 180,
          "minimum": -180,
          "title": "Lon",
          "type": "number"
        },
        "label": {
          "default": null,
          "description": "Optional human-readable name echoed in results",
          "title": "Label",
          "type": "string"
        }
      },
      "title": "LocationIn",
      "type": "object"
    }
  },
  "title": "get_weather_historyArguments"
}
🟢get_air_quality(locations, hours, variables, timezone)

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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "locations": {
      "items": {
        "$ref": "#/$defs/LocationIn"
      },
      "title": "Locations",
      "type": "array"
    },
    "hours": {
      "default": 48,
      "title": "Hours",
      "type": "integer"
    },
    "variables": {
      "default": null,
      "items": {
        "type": "string"
      },
      "title": "Variables",
      "type": "array"
    },
    "timezone": {
      "default": "auto",
      "title": "Timezone",
      "type": "string"
    }
  },
  "required": [
    "locations"
  ],
  "$defs": {
    "LocationIn": {
      "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.",
      "properties": {
        "place_id": {
          "default": null,
          "description": "Meteosource place identifier",
          "title": "Place Id",
          "type": "string"
        },
        "lat": {
          "default": null,
          "description": "Latitude in decimal degrees",
          "maximum": 90,
          "minimum": -90,
          "title": "Lat",
          "type": "number"
        },
        "lon": {
          "default": null,
          "description": "Longitude in decimal degrees",
          "maximum": 180,
          "minimum": -180,
          "title": "Lon",
          "type": "number"
        },
        "label": {
          "default": null,
          "description": "Optional human-readable name echoed in results",
          "title": "Label",
          "type": "string"
        }
      },
      "title": "LocationIn",
      "type": "object"
    }
  },
  "title": "get_air_qualityArguments"
}
🟡get_solar_production(sites, date_from, date_to, granularity, variables, ...)

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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "sites": {
      "items": {
        "$ref": "#/$defs/SolarSiteIn"
      },
      "title": "Sites",
      "type": "array"
    },
    "date_from": {
      "title": "Date From",
      "type": "string"
    },
    "date_to": {
      "title": "Date To",
      "type": "string"
    },
    "granularity": {
      "default": "daily",
      "title": "Granularity",
      "type": "string"
    },
    "variables": {
      "default": null,
      "items": {
        "type": "string"
      },
      "title": "Variables",
      "type": "array"
    },
    "timezone": {
      "default": "auto",
      "title": "Timezone",
      "type": "string"
    },
    "units": {
      "default": "metric",
      "title": "Units",
      "type": "string"
    }
  },
  "required": [
    "sites",
    "date_from",
    "date_to"
  ],
  "$defs": {
    "SolarSiteIn": {
      "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.",
      "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"
        },
        "label": {
          "default": null,
          "description": "Optional human-readable name echoed in results",
          "title": "Label",
          "type": "string"
        },
        "module_kw": {
          "description": "Installed module power in kW (kWp); use 1 for specific yield per kWp",
          "exclusiveMinimum": 0,
          "title": "Module Kw",
          "type": "number"
        },
        "inverter_kw": {
          "default": null,
          "description": "Inverter power in kW; defaults to module_kw",
          "exclusiveMinimum": 0,
          "title": "Inverter Kw",
          "type": "number"
        },
        "tilt": {
          "default": 30,
          "description": "Tilt of the modules from horizontal in degrees: 0 = flat, 90 = vertical",
          "maximum": 90,
          "minimum": 0,
          "title": "Tilt",
          "type": "integer"
        },
        "orientation": {
          "default": 180,
          "description": "Azimuth the modules face, in degrees clockwise from north: 90 = east, 180 = south, 270 = west",
          "maximum": 360,
          "minimum": 0,
          "title": "Orientation",
          "type": "integer"
        }
      },
      "required": [
        "lat",
        "lon",
        "module_kw"
      ],
      "title": "SolarSiteIn",
      "type": "object"
    }
  },
  "title": "get_solar_productionArguments"
}
🟡get_wind_production(sites, date_from, date_to, granularity, variables, ...)

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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "sites": {
      "items": {
        "$ref": "#/$defs/WindSiteIn"
      },
      "title": "Sites",
      "type": "array"
    },
    "date_from": {
      "title": "Date From",
      "type": "string"
    },
    "date_to": {
      "title": "Date To",
      "type": "string"
    },
    "granularity": {
      "default": "daily",
      "title": "Granularity",
      "type": "string"
    },
    "variables": {
      "default": null,
      "items": {
        "type": "string"
      },
      "title": "Variables",
      "type": "array"
    },
    "timezone": {
      "default": "auto",
      "title": "Timezone",
      "type": "string"
    },
    "units": {
      "default": "metric",
      "title": "Units",
      "type": "string"
    }
  },
  "required": [
    "sites",
    "date_from",
    "date_to"
  ],
  "$defs": {
    "WindSiteIn": {
      "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.",
      "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"
        },
        "label": {
          "default": null,
          "description": "Optional human-readable name echoed in results",
          "title": "Label",
          "type": "string"
        },
        "turbine_model": {
          "default": "SWT120/3600",
          "description": "Turbine model from the catalogue in the tool description",
          "title": "Turbine Model",
          "type": "string"
        },
        "turbine_count": {
          "default": null,
          "description": "Number of turbines; give this or total_capacity, not both",
          "minimum": 1,
          "title": "Turbine Count",
          "type": "integer"
        },
        "total_capacity": {
          "default": null,
          "description": "Total capacity of the farm in MW; give this or turbine_count, not both",
          "exclusiveMinimum": 0,
          "title": "Total Capacity",
          "type": "number"
        },
        "hub_height": {
          "default": 100,
          "description": "Hub height in metres",
          "exclusiveMinimum": 0,
          "title": "Hub Height",
          "type": "integer"
        },
        "roughness": {
          "default": "farmland",
          "description": "Terrain around the site",
          "enum": [
            "water",
            "open",
            "farmland",
            "suburban",
            "urban"
          ],
          "title": "Roughness",
          "type": "string"
        }
      },
      "required": [
        "lat",
        "lon"
      ],
      "title": "WindSiteIn",
      "type": "object"
    }
  },
  "title": "get_wind_productionArguments"
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada7 herramientas