Skip to main content
Glama

Resort forecast

get_forecast
Read-onlyIdempotent

Fourteen-day blended snow forecast for a resort: per day the median snowfall across the weather models that reach that day (ECMWF IFS, GFS, GEM, ICON, JMA, Météo-France, UKMO; NBM and HRRR added for US points), the 25th/75th percentile band as snowfallLoIn/snowfallHiIn, and modelCount so you can weigh a far-out two-model day against a near-term nine-model one. summary has next 48 h, 7- and 14-day totals and the peak day. US resorts also get the National Weather Service text narrative (periods), with its snow amounts replaced by the blend. Weather data by Open-Meteo.com (CC BY 4.0): quote the credit. available: false when no model run is stored yet.

Input Schema

NameRequiredDescriptionDefault
slugYesPeakCam resort slug, lowercase kebab-case, e.g. `breckenridge` or `ski-portillo`. Get it from search_resorts.
pointNoWhich elevation's blend. Falls back to the other point with a note when the asked one has no runs.summit

Output Schema

NameRequiredDescriptionDefault
daysYesUp to 14 blended days.
nameYes
noteYes
slugYes
pointYes
modelsYes
creditsYes
periodsYesNWS daily narrative for US resorts (up to 5 days); empty elsewhere or when NWS does not answer.
summaryYes
issuedAtYesNewest model issue instant among the runs blended.
providerYes`blend`: stored multi-model blend; `nws`: NWS narrative only, snow amounts are keyword estimates; `none`: nothing available.
availableYes
modelCountYesModels contributing to the first day.
forecastUrlYesThe REST document with every model run.
generatedAtYesISO-8601 UTC instant the result was generated.
canonicalUrlYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed24 schema fields changed
    • addedInput schema / properties / point
      Added value: +{
      +  "default": "summit",
      +  "description": "Which elevation's blend. Falls back to the other point with a note when the asked one has no runs.",
      +  "enum": [
      +    "summit",
      +    "base"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / credits
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "license": {
      +        "description": "Licence of the source data, e.g. `CC BY 4.0`.",
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "text": {
      +        "description": "The attribution line to carry with any reuse, e.g. `Weather data by Open-Meteo.com`.",
      +        "type": "string"
      +      },
      +      "url": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "name",
      +      "text",
      +      "license",
      +      "url"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / days
      Added value: +{
      +  "description": "Up to 14 blended days.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "condition": {
      +        "description": "PeakCam icon slug for the weather code (`heavy-snow`, `clear`, ...).",
      +        "type": "string"
      +      },
      +      "date": {
      +        "description": "YYYY-MM-DD, local to the resort.",
      +        "type": "string"
      +      },
      +      "modelCount": {
      +        "description": "Models contributing to this day. Falls with lead time as shorter-range models drop out.",
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "models": {
      +        "description": "Model ids contributing to this day.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "precipProb": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "0–100, median of the models that publish one."
      +      },
      +      "snowfallCm": {
      +        "type": "number"
      +      },
      +      "snowfallHiCm": {
      +        "type": "number"
      +      },
      +      "snowfallHiIn": {
      +        "description": "75th percentile across models, inches.",
      +        "type": "number"
      +      },
      +      "snowfallIn": {
      +        "description": "Median across the models that reach this day, inches.",
      +        "type": "number"
      +      },
      +      "snowfallLoCm": {
      +        "type": "number"
      +      },
      +      "snowfallLoIn": {
      +        "description": "25th percentile across models, inches. Equals the median when one model reaches the day.",
      +        "type": "number"
      +      },
      +      "tempMaxF": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "tempMinF": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "weatherCode": {
      +        "anyOf": [
      +          {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Modal WMO code across models; ties go to the more severe code."
      +      },
      +      "windGustMph": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      }
      +    },
      +    "required": [
      +      "date",
      +      "snowfallIn",
      +      "snowfallLoIn",
      +      "snowfallHiIn",
      +      "snowfallCm",
      +      "snowfallLoCm",
      +      "snowfallHiCm",
      +      "tempMaxF",
      +      "tempMinF",
      +      "precipProb",
      +      "windGustMph",
      +      "weatherCode",
      +      "condition",
      +      "modelCount",
      +      "models"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / forecastUrl
      Added value: +{
      +  "description": "The REST document with every model run.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / issuedAt
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Newest model issue instant among the runs blended."
      +}
    • addedOutput schema / properties / modelCount
      Added value: +{
      +  "description": "Models contributing to the first day.",
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / models
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / periods / description
      Added value: +"NWS daily narrative for US resorts (up to 5 days); empty elsewhere or when NWS does not answer."
    • removedOutput schema / properties / periods / items / properties / condition / description
      Removed value: -"PeakCam condition key derived from the text."
    • removedOutput schema / properties / periods / items / properties / date / description
      Removed value: -"YYYY-MM-DD when NWS supplies it."
    • removedOutput schema / properties / periods / items / properties / dow / description
      Removed value: -"`Today`, then three-letter weekday."
    • removedOutput schema / properties / periods / items / properties / feelsLikeF / description
      Removed value: -"Wind-chill adjusted high."
    • removedOutput schema / properties / periods / items / properties / precipProbability / description
      Removed value: -"Percent."
    • removedOutput schema / properties / periods / items / properties / shortForecast / description
      Removed value: -"NWS short forecast text, e.g. `Snow Likely`."
    • addedOutput schema / properties / periods / items / properties / snowInches
      Added value: +{
      +  "description": "From the blend when one is stored for that date, else the keyword estimate (see snowSource).",
      +  "type": "number"
      +}
    • removedOutput schema / properties / periods / items / properties / snowInchesEstimate
      Removed value: -{
      -  "description": "Keyword heuristic from the forecast text (blizzard/heavy snow 8, snow 3, flurries 1, else 0). Not a quantitative forecast; say so when quoting it.",
      -  "type": "number"
      -}
    • addedOutput schema / properties / periods / items / properties / snowSource
      Added value: +{
      +  "enum": [
      +    "blend",
      +    "nws_keyword",
      +    "open_meteo"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / periods / items / required
      Previous value: -[
      -  "dow",
      -  "date",
      -  "shortForecast",
      -  "condition",
      -  "highF",
      -  "lowF",
      -  "snowInchesEstimate",
      -  "precipProbability",
      -  "windMph",
      -  "windDirection",
      -  "feelsLikeF"
      -]New value: +[
      +  "dow",
      +  "date",
      +  "shortForecast",
      +  "condition",
      +  "highF",
      +  "lowF",
      +  "snowInches",
      +  "snowSource",
      +  "precipProbability",
      +  "windMph",
      +  "windDirection",
      +  "feelsLikeF"
      +]
    • addedOutput schema / properties / point
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "summit",
      +        "base"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • removedOutput schema / properties / provider / const
      Removed value: -"nws"
    • addedOutput schema / properties / provider / description
      Added value: +"`blend`: stored multi-model blend; `nws`: NWS narrative only, snow amounts are keyword estimates; `none`: nothing available."
    • addedOutput schema / properties / provider / enum
      Added value: +[
      +  "blend",
      +  "nws",
      +  "none"
      +]
    • addedOutput schema / properties / summary
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "issuedAt": {
      +          "description": "Newest model issue instant among the runs blended.",
      +          "type": "string"
      +        },
      +        "modelCount": {
      +          "description": "Models contributing to the first day.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        },
      +        "models": {
      +          "description": "Every model id that contributed to any day.",
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "next48hCm": {
      +          "type": "number"
      +        },
      +        "next48hIn": {
      +          "type": "number"
      +        },
      +        "peak": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": false,
      +              "properties": {
      +                "cm": {
      +                  "type": "number"
      +                },
      +                "date": {
      +                  "description": "The day with the most blended snowfall.",
      +                  "type": "string"
      +                },
      +                "in": {
      +                  "type": "number"
      +                },
      +                "windowDays": {
      +                  "description": "Consecutive days around the peak with at least 1 cm (the storm window).",
      +                  "maximum": 9007199254740991,
      +                  "minimum": -9007199254740991,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "date",
      +                "in",
      +                "cm",
      +                "windowDays"
      +              ],
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Null when no day has any blended snow."
      +        },
      +        "point": {
      +          "description": "The elevation the summary is for: summit when the resort has a summit point, else base.",
      +          "enum": [
      +            "summit",
      +            "base"
      +          ],
      +          "type": "string"
      +        },
      +        "total14dCm": {
      +          "type": "number"
      +        },
      +        "total14dIn": {
      +          "type": "number"
      +        },
      +        "total7dCm": {
      +          "type": "number"
      +        },
      +        "total7dIn": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "point",
      +        "issuedAt",
      +        "modelCount",
      +        "models",
      +        "next48hIn",
      +        "next48hCm",
      +        "total7dIn",
      +        "total7dCm",
      +        "total14dIn",
      +        "total14dCm",
      +        "peak"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "slug",
      -  "name",
      -  "canonicalUrl",
      -  "provider",
      -  "available",
      -  "note",
      -  "periods",
      -  "generatedAt"
      -]New value: +[
      +  "slug",
      +  "name",
      +  "canonicalUrl",
      +  "forecastUrl",
      +  "provider",
      +  "available",
      +  "note",
      +  "point",
      +  "issuedAt",
      +  "modelCount",
      +  "models",
      +  "summary",
      +  "days",
      +  "periods",
      +  "credits",
      +  "generatedAt"
      +]
  2. First observed

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly, idempotent and closed-world, but the description adds substantial non-redundant context: the model roster, what modelCount means for weighting confidence, the NWS narrative with amounts replaced by the blend, the required Open-Meteo attribution ('quote the credit'), and the available: false edge case when no run is stored. These are real obligations and failure modes an agent would not learn from the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and horizon are front-loaded in the first clause, and each sentence carries information (blend method, band fields, summary contents, attribution, availability flag). The long parenthetical model enumeration is the only mildly verbose passage, though it does support interpreting modelCount.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description is not obliged to enumerate return values, yet it still explains the interpretation of the percentile band and modelCount, the summary block, the US-only periods narrative, and the empty-data case. Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both slug and point are already documented in the schema, including the enum values and the summit/base fallback. The description adds no additional parameter syntax or format guidance beyond that, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb, resource and horizon: a fourteen-day blended snow forecast for a resort. It also states the blend methodology (median across named models) and the derived fields, which clearly distinguishes it from get_snow_history, get_monthly_climatology and compare_models without needing the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the resource name: a forecast tool, so an agent can infer it is for upcoming snow rather than history or climatology. There is no explicit when-to-use/when-not statement or named alternative such as get_snow_history or compare_models. The only routing hint is the slug parameter's 'Get it from search_resorts', which is a dependency rather than a selection rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.