EM Snow

Ski resort conditions, forecasts, avalanche danger, sun, routes and snow history for 5,000+ resorts.

Should I use this

Quality & Safety

A
Description quality
92%
Schema completeness
79%
Naming quality
88%
Poisoning risk
100%
Permission match
90%
Protocol compliance
100%

Findings (2)

  • LOWTool 'where_is_it_snowing' description lacks action verbin where_is_it_snowing
  • LOWTool 'get_webcams' suggests web access but openWorldHint=falsein get_webcams

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,342Tokens (tool definitions)
~826 BTypical response size
Significant attention impact (2.61% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "em-snow": {
      "url": "https://snow.extreme-media.co.uk/mcp"
    }
  }
}

Remote endpoints

https://snow.extreme-media.co.uk/mcpstreamable-http

What it can do

Tool inventory

Tools (21)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_resorts(query, country, near, limit)

Find ski resorts worldwide by name, country or distance. Returns at most 20 matches and does not expose the bulk resort index.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 80
    },
    "country": {
      "type": "string",
      "maxLength": 40
    },
    "near": {
      "type": "object",
      "properties": {
        "lat": {
          "type": "number",
          "minimum": -90,
          "maximum": 90
        },
        "lon": {
          "type": "number",
          "minimum": -180,
          "maximum": 180
        }
      },
      "required": [
        "lat",
        "lon"
      ],
      "additionalProperties": false
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20,
      "default": 10
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_conditions(resort)

Get current snow, reported lift and run counts, weather and season state. Lift and run counts are reported status, not guaranteed live.

Input Schema

{
  "type": "object",
  "properties": {
    "resort": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    }
  },
  "required": [
    "resort"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_forecast(resort, days)

Get the available daily snow, temperature, freezing level and wind-hold risk forecast, up to 10 requested days.

Input Schema

{
  "type": "object",
  "properties": {
    "resort": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10,
      "default": 7
    }
  },
  "required": [
    "resort"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢plan_my_day(resort, date, level)

Build modelled suggested runs in time order from forecast weather, sun, snow and mapped terrain. Only plans days inside the reported winter season; summer lift or bike-park operation does not count as open for skiing. Easy, intermediate and advanced exclude expert, freeride and extreme terrain; only expert permits it. Suggestions are not a connected route or live piste status.

Input Schema

{
  "type": "object",
  "properties": {
    "resort": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "date": {
      "type": "string"
    },
    "level": {
      "type": "string",
      "enum": [
        "easy",
        "intermediate",
        "advanced",
        "expert"
      ]
    }
  },
  "required": [
    "resort"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢sun_on_the_mountain(resort, date)

Show modelled sun and shade windows for eight slope aspects, with local terrain-horizon shading where DEM coverage exists.

Input Schema

{
  "type": "object",
  "properties": {
    "resort": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "date": {
      "type": "string"
    }
  },
  "required": [
    "resort"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢route_on_mountain(resort, from, to, level, avoid_closed)

Route between named pistes, lifts, the resort base or latitude,longitude coordinates using mapped OSM pistes and lifts. Names match accent-insensitively and partially (exact, then prefix, then contained words); a piste or lift split into several connected OSM pieces counts as one. A lift used as from resolves to its top station, where you ski away; a lift used as to resolves to its bottom station, unless coordinates say otherwise. Ambiguous names return candidates. Coordinates more than 5 km from the resort are rejected. Easy, intermediate and advanced avoid terrain above that level; only expert permits expert, freeride and extreme terrain.

Input Schema

{
  "type": "object",
  "properties": {
    "resort": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "from": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "to": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "level": {
      "type": "string",
      "enum": [
        "easy",
        "intermediate",
        "advanced",
        "expert"
      ]
    },
    "avoid_closed": {
      "type": "boolean",
      "default": true
    }
  },
  "required": [
    "resort",
    "from",
    "to"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢avalanche_danger(resort)

Summarise the regional avalanche bulletin covering a resort: EAWS in Europe, avalanche.org centres in the US and Avalanche Canada, with zone, issuing centre, issue and expiry times and a link to the official forecast. Expired products are never shown as current. Never substitutes for the official bulletin or local advice.

Input Schema

{
  "type": "object",
  "properties": {
    "resort": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    }
  },
  "required": [
    "resort"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢mountain_facts(resort)

Read mapped OSM terrain inventory, lift fleet, vertical, longest run, carefully matched Wikidata facts, season dates and modelled snow reliability.

Input Schema

{
  "type": "object",
  "properties": {
    "resort": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    }
  },
  "required": [
    "resort"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢where_is_it_snowing(hemisphere, limit)

Rank the freshest recently reported snow from the cached EM Snow home-page ranking.

Input Schema

{
  "type": "object",
  "properties": {
    "hemisphere": {
      "type": "string",
      "enum": [
        "nh",
        "sh"
      ]
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20,
      "default": 10
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢best_time_to_go(resort)

Get historical snow odds from the local ERA5 archive and quiet-week guidance where the crowd scorer covers the resort.

Input Schema

{
  "type": "object",
  "properties": {
    "resort": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    }
  },
  "required": [
    "resort"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢season_recap(resort)

Summarise the most recent completed ski season from the local ERA5 archive first.

Input Schema

{
  "type": "object",
  "properties": {
    "resort": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    }
  },
  "required": [
    "resort"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢snow_reliability(resort)

Get an explainable snow-reliability score from long-run ERA5 snow depth.

Input Schema

{
  "type": "object",
  "properties": {
    "resort": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    }
  },
  "required": [
    "resort"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢nearby_resorts(resort, limit)

Find nearby resorts from the local EM Snow resort index.

Input Schema

{
  "type": "object",
  "properties": {
    "resort": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10,
      "default": 8
    }
  },
  "required": [
    "resort"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_webcams(resort)

Get nearby webcam images and their source links, with the required provider credit.

Input Schema

{
  "type": "object",
  "properties": {
    "resort": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    }
  },
  "required": [
    "resort"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_snow_reports(resort, limit)

Get recent visible community reports, including whether each came from the website or was relayed by an AI assistant.

Input Schema

{
  "type": "object",
  "properties": {
    "resort": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20,
      "default": 20
    }
  },
  "required": [
    "resort"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢watch_resort(resort)

Return a one-tap EM Snow URL where the person can watch a resort and optionally add dates. This tool does not collect email.

Input Schema

{
  "type": "object",
  "properties": {
    "resort": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    }
  },
  "required": [
    "resort"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡add_snow_report(resort, text, tags, rating, observed_today)

Only relay a report from a person who is at, or was just at, the resort. Never invent a report. The report goes live immediately and is labelled as relayed via an AI assistant.

Input Schema

{
  "type": "object",
  "properties": {
    "resort": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "text": {
      "type": "string",
      "maxLength": 280
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "powder",
          "packed",
          "icy",
          "spring",
          "slush",
          "wind-hold",
          "bluebird",
          "groomed",
          "heavy",
          "crowded",
          "quiet",
          "closed"
        ]
      },
      "maxItems": 6
    },
    "rating": {
      "type": "integer",
      "minimum": 1,
      "maximum": 5
    },
    "observed_today": {
      "type": "boolean"
    }
  },
  "required": [
    "resort",
    "text"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪suggest_resort(name, country, lat, lon, website, ...)

Suggest a missing resort for human review. This never adds it directly to the resort index.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 2,
      "maxLength": 100
    },
    "country": {
      "type": "string",
      "minLength": 2,
      "maxLength": 80
    },
    "lat": {
      "type": "number",
      "minimum": -90,
      "maximum": 90
    },
    "lon": {
      "type": "number",
      "minimum": -180,
      "maximum": 180
    },
    "website": {
      "type": "string",
      "format": "uri",
      "maxLength": 300
    },
    "notes": {
      "type": "string",
      "maxLength": 500
    }
  },
  "required": [
    "name",
    "country",
    "lat",
    "lon"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_extended_outlook(resort, days)

Get a 16-day daily outlook (snowfall, temperatures, freezing level, maximum gusts and, for the first days, precipitation probability) from EM Snow's self-hosted GFS and ECMWF IFS models. Days 1 to 7 overlap get_forecast; days 8 to 16 are low-confidence trend guidance only.

Input Schema

{
  "type": "object",
  "properties": {
    "resort": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 16,
      "default": 16
    }
  },
  "required": [
    "resort"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_resort_media(resort)

Get images for a resort that vision-capable assistants can show: nearby webcams with provider credit, a Wikimedia Commons photo with its per-file licence, author and source page, the EM Snow sun and shade teaser where one exists, and the resort page link. No trail-map image is available.

Input Schema

{
  "type": "object",
  "properties": {
    "resort": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    }
  },
  "required": [
    "resort"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢fly_this_mountain(resort, runs, level, pick)

Get a link that plays a simulated 3D tour of a resort in the EM Snow flyby (lifts up, named runs down, on the mapped piste network), or a tour of runs you name. Pick names match like route_on_mountain; ambiguous names return candidates with picker ids. Status is ready, limited (small mapped network, the tour may be short) or unavailable (too few named runs or no linking lifts; the resort page is returned instead).

Input Schema

{
  "type": "object",
  "properties": {
    "resort": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "runs": {
      "type": "integer",
      "minimum": 1,
      "maximum": 12
    },
    "level": {
      "type": "string",
      "enum": [
        "all",
        "easy",
        "intermediate"
      ]
    },
    "pick": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      },
      "minItems": 1,
      "maxItems": 12
    }
  },
  "required": [
    "resort"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded21 tools