Skip to main content
Glama
cuolm

meteo-swiss-mcp

by cuolm

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
NOMINATIM_USER_AGENTYesUser agent string for Nominatim geocoding service

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
current_date_and_timeA
        Get the current weekday and Swiss local time.

        Call this first when the question is relative, such as "tomorrow" or "tonight", because
        the forecast tools take a real date rather than an offset. The time is written the way
        the tools read it, ISO 8601 without an offset, so it can be sent back to them as it is.

        Returns:
            str: For example "Today is Wednesday, 2026-09-23T13:02 (Swiss time)".
        
forecast_dailyA
        Get the whole-day forecast for a place, for one day or several days in a row: the
        cheapest way to answer "how is the weather" for a day, the weekend or the week.

        Each day covers a Swiss calendar day, 00:00 to 24:00 local time. The minimum and maximum
        are the lowest and highest hourly mean temperature of that day, and the weather words
        describe the daytime. Always use this for the rain of a whole day.

        Args:
            location (str): Place name: a town, village, city district, lake or peak (e.g., "Zurich").
            start_date (str): The first Swiss calendar day in ISO 8601, e.g. "2026-09-23". Today or up to 8 days ahead.
            days (int): How many days in a row, from 1 to 9. Default 1.

        Returns:
            dict: The place, the forecast point used, one row per day and the model run; the
                field names give the units. In 8 of 10 possible outcomes, the day's rain lies
                between its 10th and 90th percentile. A value is None when MeteoSwiss does not
                publish it for that forecast point.

        Examples:
            forecast_daily("Zurich", "2026-09-23")
            forecast_daily("Lugano", "2026-09-26", 2)   # a weekend
        
forecast_hourlyA
        Get the weather hour by hour for a place: temperature with its likely range, chance
        of rain and the weather in words.

        Use this for one hour, such as "how warm is it at 15:00", or part of a day, such as "how
        is the afternoon" or "when is the best time for a walk". Without end it returns the one
        hour starting at start. Each row covers the hour from its "from" to its "to": the
        temperature is the mean of that hour, while the rain chance and the weather cover the 3
        hours up to "to", as MeteoSwiss publishes them only per 3 hours. For whole days or
        periods longer than a day use forecast_daily, which answers in far fewer rows, and for
        rain amounts forecast_rain.

        Args:
            location (str): Place name: a town, village, city district, lake or peak (e.g., "Zurich").
            start (str): Swiss local time as a full hour in ISO 8601 without offset, e.g. "2026-09-23T15:00". Today or up to 8 days ahead.
            end (str): Optional. Swiss local time as a full hour in ISO 8601 without offset, after start.

        Returns:
            dict: The place, the forecast point used, one row per hour and the model run; the
                field names give the units. In 8 of 10 possible outcomes, the temperature lies
                between its 10th and 90th percentile.

        Examples:
            forecast_hourly("Zurich", "2026-09-23T15:00")                        # one hour
            forecast_hourly("Zurich", "2026-09-23T12:00", "2026-09-23T18:00")    # the afternoon
        
forecast_rainA
        Get when and how much it may rain at a place, in 3-hour blocks over a period.

        Use this for "will it rain this afternoon", "do I need an umbrella" or "when does the
        rain stop". Each block gives the chance of rain, the median rainfall of the 3 hours, and
        how much the wettest hour of the block may bring (its 90th percentile). The median is
        often 0 when showers are possible, so read the chance and the "up to" amount as well.
        A period up to the end of the forecast ends with its last full 3-hour block.

        Args:
            location (str): Place name: a town, village, city district, lake or peak (e.g., "Zurich").
            start (str): Swiss local time the period starts, as a full hour in ISO 8601 without offset, e.g. "2026-09-23T12:00". Today or up to 8 days ahead.
            end (str): Swiss local time the period ends, as a full hour in ISO 8601 without offset, after start.

        Returns:
            dict: The place, the forecast point used, one row per 3-hour block and the model
                run; the field names give the units.

        Examples:
            forecast_rain("Zurich", "2026-09-23T12:00", "2026-09-24T00:00")
            forecast_rain("Lugano", "2026-09-24T06:00", "2026-09-24T18:00")
        
forecast_sunshineA
        Get the sunshine hours for a place over a period.

        MeteoSwiss publishes sunshine as minutes per hour, which are added up over the period
        and reported as hours.

        Args:
            location (str): Place name: a town, village, city district, lake or peak (e.g., "Zurich").
            start (str): Swiss local time the period starts, as a full hour in ISO 8601 without offset, e.g. "2026-09-23T06:00". Today or up to 8 days ahead.
            end (str): Swiss local time the period ends, as a full hour in ISO 8601 without offset, e.g. "2026-09-23T18:00".

        Returns:
            dict: The sunshine in hours, the place, the forecast point used, the period and the
                model run.

        Examples:
            forecast_sunshine("Zurich", "2026-09-23T00:00", "2026-09-24T00:00")   # the whole day
            forecast_sunshine("Zurich", "2026-09-23T12:00", "2026-09-23T18:00")   # the afternoon
        
forecast_windA
        Get the wind at a place at a specific time: mean speed, strongest gust and direction.

        The speed is the mean over the hour up to that time, and the gust the strongest
        one-second gust in that hour, which is what makes wind hazardous. The gust's 90th
        percentile is a cautious high estimate of that strongest gust: in 9 of 10 possible
        outcomes the gust stays below it, and in 1 of 10 it is stronger, so it is not the
        highest gust possible. The direction is where the wind blows from, in degrees clockwise
        from north (0 is a north wind, 180 a south wind) and as a compass point.

        Args:
            location (str): Place name: a town, village, city district, lake or peak (e.g., "Zurich").
            when (str): Swiss local time as a full hour in ISO 8601 without offset, e.g. "2026-09-23T14:00". Today or up to 8 days ahead.

        Returns:
            dict: The wind, the place, the forecast point used, the time it is valid for and the
                model run; the field names give the units.

        Examples:
            forecast_wind("Zurich", "2026-09-23T14:00")
            forecast_wind("Titlis", "2026-09-24T12:00")
        
forecast_cloud_coverA
        Get how cloudy it is at a place at a specific time.

        MeteoSwiss publishes low, medium and high cloud separately, and they overlap, so the
        total is an estimate that assumes the layers are independent. All three layers are
        returned as well, which tells low fog apart from thin high cloud.

        When a number is not needed, forecast_hourly answers "how cloudy" in plain words.

        Args:
            location (str): Place name: a town, village, city district, lake or peak (e.g., "Zurich").
            when (str): Swiss local time as a full hour in ISO 8601 without offset, e.g. "2026-09-23T14:00". Today or up to 8 days ahead.

        Returns:
            dict: The total cloud cover and its low, medium and high layers in percent, the
                place, the forecast point used, the time it is valid for and the model run.

        Examples:
            forecast_cloud_cover("Zurich", "2026-09-23T14:00")
            forecast_cloud_cover("Locarno", "2026-09-24T09:00")
        
forecast_freezing_levelA
        Get the height of the 0 degree line at a place at a specific time.

        This is the height where the air is at 0 degrees. Snow usually reaches somewhat below it,
        so it answers questions about snow in the mountains, such as how high a ski area has to be.

        Args:
            location (str): Place name: a town, village, city district, lake or peak (e.g., "Zurich").
            when (str): Swiss local time as a full hour in ISO 8601 without offset, e.g. "2026-09-23T14:00". Today or up to 8 days ahead.

        Returns:
            dict: The freezing level in metres above sea level, the place, the forecast point
                used, the time it is valid for and the model run.

        Examples:
            forecast_freezing_level("Zermatt", "2026-09-23T14:00")
            forecast_freezing_level("Arosa", "2026-09-25T06:00")
        
current_conditionsA
        Get the latest measurements of a MeteoSwiss station near the location.

        These are the measurements of that station, not of the location itself. The station is
        the one with the smallest distance plus 20 times the height gap, so it can be several
        kilometres away and hundreds of metres higher or lower than the location. Always start
        the answer with the data_from sentence, which names the station, its distance and its
        height difference, and then give the values as the station's measurements. MeteoSwiss
        publishes new values about every 10 minutes.

        Temperature, humidity, dew point and pressure are measured at measured_at. Rain,
        sunshine, wind speed, the strongest gust and the wind direction cover the 10 minutes up
        to it. The temperature and pressure changes compare measured_at with 3 hours before it,
        negative when the value fell. The rain and sunshine of the last hour are the totals of
        its six 10-minute values, and the strongest gust of the last hour is the highest of them.
        For later today or the coming days use forecast_hourly or forecast_daily.

        Args:
            location (str): Place name: a town, village, city district, lake or peak (e.g., "Zurich").

        Returns:
            dict: The place, the station with its distance and height difference, the time of the
                measurements and the measured values; the field names give the units. A value is
                None when the station does not measure it, and a change or a last-hour value is
                None when the station has not published all the measurements it needs, such as
                shortly after midnight UTC.

        Examples:
            current_conditions("Zurich")
            current_conditions("Braunwald")
        
current_extremesA
        Get where in Switzerland it is warmest, coldest, windiest, wettest or sunniest now.

        This compares the latest measurements of about 160 MeteoSwiss stations. They are the
        values of stations, not of towns, and not a forecast. A high mountain station is
        colder and windier than the valleys, so name the altitude with a station. MeteoSwiss
        publishes new values about every 10 minutes.

        The warmest, coldest and windiest stations are ranked by the temperature and by the
        strongest gust. For the sunniest and the wettest the answer counts stations: a station
        is sunny when the sun shone for at least 5 of the last 10 minutes, and rainy when it
        measured rain in the last 10 minutes. The counts are given for Switzerland and for
        each canton, as the number of sunny or rainy stations out of the stations that measure
        it. Always give both numbers, because a canton with one station says little. A canton
        with 0 sunny or rainy stations has none. A canton that is not listed has no station
        that measures it. Liechtenstein is listed like a canton. At night no station is sunny.

        Args:
            extreme (str): One of "warmest", "coldest", "windiest", "wettest" or "sunniest".

        Returns:
            dict: The time of the measurements and the first 5 stations, or for the sunniest and
                the wettest the counts in all and for each canton, the highest share first; the
                field names give the units. The wettest also lists the first 5 rainy stations.
                A station that does not measure the value is left out everywhere.

        Examples:
            current_extremes("warmest")
            current_extremes("sunniest")
        

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.4/5.0

Scored across 10 tools

Disambiguation5/5

The tools cleanly split by time granularity (daily, hourly, 3-hour rain blocks) and by weather variable (sunshine, wind, cloud cover, freezing level), with explicit guidance on when to use each. Minor rain overlap between forecast_daily, forecast_hourly, and forecast_rain is resolved by the descriptions.

Naming Consistency5/5

All tool names use snake_case and follow a predictable prefix pattern: forecast_* for forecast data and current_* for observations and the date/time helper. No mixed conventions or vague verbs appear.

Tool Count5/5

Ten tools is well scoped for a Swiss weather server covering forecasts and current observations. Each tool maps to a distinct forecast variable or observation type, so none feels redundant or missing from the count alone.

Completeness4/5

The surface covers core forecast variables plus current station and national observations, with a date/time helper for relative questions. Minor gaps remain, such as weather alerts/warnings and forecast humidity, pressure, or dew point, but common weather workflows are supported.

Maintenance

ActivityActive
ResponsivenessNo issues