avalanche-org-mcp-server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@avalanche-org-mcp-serverWhat's the current avalanche danger at 40.58, -111.65?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
avalanche-org-mcp-server
A minimal Model Context Protocol (MCP) server that wraps the Avalanche.org Public API map-layer endpoints. It lets LLMs look up avalanche danger ratings by location, retrieve raw forecast GeoJSON, and query historic conditions.
Features
Danger lookup by lat/lon — find the avalanche zone for any point and get its current danger rating
Historic danger lookup — same as above, but for a specific past date
Raw map-layer GeoJSON — full FeatureCollection for all avalanche centers, or scoped to one center
Data sourced from the Avalanche.org Public API. See the API docs for details.
Related MCP server: Weather MCP Server
Quick Start
Claude Desktop (npx — recommended)
Add this to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"avalanche-org": {
"command": "npx",
"args": ["-y", "avalanche-org-mcp-server"]
}
}
}No install required. Claude will download and run it automatically.
Global npm install
npm install -g avalanche-org-mcp-server{
"mcpServers": {
"avalanche-org": {
"command": "avalanche-org-mcp-server"
}
}
}Docker
docker pull ghcr.io/haydenwade/avalanche-org-mcp-server:latest{
"mcpServers": {
"avalanche-org": {
"command": "docker",
"args": ["run", "--rm", "-i", "ghcr.io/haydenwade/avalanche-org-mcp-server:latest"]
}
}
}From source
git clone https://github.com/haydenwade/avalanche-org-mcp-server.git
cd avalanche-org-mcp-server
npm install
npm run build{
"mcpServers": {
"avalanche-org": {
"command": "node",
"args": ["/absolute/path/to/avalanche-org-mcp-server/dist/src/index.js"]
}
}
}Tools
avalanche_danger_rating_by_point
Get the current avalanche danger rating for a lat/lon point. Returns the zone the point falls in, or the nearest zone if preferNearest is true.
Parameter | Type | Required | Description |
| number | yes | Latitude in decimal degrees |
| number | yes | Longitude in decimal degrees |
| boolean | no | Fall back to nearest zone if point is outside all polygons (default: |
| string | no | Scope search to a specific avalanche center (e.g. |
Example input:
{ "lat": 40.5763, "lon": -111.7522, "preferNearest": true, "centerId": "UAC" }{
"match": "inside_zone",
"distance_km": 0,
"distance_miles": 0,
"zone": {
"id": "zone-1",
"name": "Salt Lake",
"state": "UT"
},
"center": {
"id": "UAC",
"name": "Utah Avalanche Center",
"timezone": "America/Denver",
"link": "https://utahavalanchecenter.org"
},
"danger": {
"level": 3,
"label": "Considerable",
"color": "#f1a302"
},
"travel_advice": "Dangerous avalanche conditions. Careful snowpack evaluation, cautious route-finding and conservative decision-making essential.",
"forecast_url": "https://utahavalanchecenter.org/forecast/salt-lake",
"validity": {
"start_date": "2026-03-22",
"end_date": "2026-03-23"
},
"warning": null
}historic_avalanche_danger_rating_by_point
Same as above, but for a specific historic date. Returns all the same fields plus day.
Parameter | Type | Required | Description |
| number | yes | Latitude in decimal degrees |
| number | yes | Longitude in decimal degrees |
| string | yes | Date in |
| boolean | no | Fall back to nearest zone (default: |
| string | no | Scope to an avalanche center |
Example input:
{ "lat": 40.5763, "lon": -111.7522, "day": "2025-02-24", "preferNearest": true }{
"match": "inside_zone",
"distance_km": 0,
"distance_miles": 0,
"zone": { "id": "zone-1", "name": "Salt Lake", "state": "UT" },
"center": { "id": "UAC", "name": "Utah Avalanche Center", "..." : "..." },
"danger": { "level": 3, "label": "Considerable", "color": "#f1a302" },
"travel_advice": "Dangerous avalanche conditions. ...",
"forecast_url": "https://utahavalanchecenter.org/forecast/salt-lake",
"validity": { "start_date": "2025-02-24", "end_date": "2025-02-25" },
"warning": null,
"day": "2025-02-24"
}raw_map_layer
Returns the raw Avalanche.org map-layer GeoJSON FeatureCollection for all avalanche centers.
Parameter | Type | Required | Description |
| string | no | Historic date in |
{
"geojson": {
"type": "FeatureCollection",
"features": [ "... full GeoJSON features ..." ]
}
}raw_map_layer_by_avalanche_center
Returns the raw map-layer GeoJSON FeatureCollection for a single avalanche center.
Parameter | Type | Required | Description |
| string | yes | Avalanche center ID (e.g. |
| string | no | Historic date in |
{
"geojson": {
"type": "FeatureCollection",
"features": [ "... full GeoJSON features ..." ]
}
}Development
Requires Node.js >= 18.
npm install
npm run build
npm testTo interactively test tools with the MCP Inspector:
npx @modelcontextprotocol/inspector node dist/src/index.jsProject structure
src/
index.ts # Entry point — server setup + stdio transport
tools.ts # Tool registration
constants.ts # API URLs and timeouts
types.ts # GeoJSON type definitions
api/
mapLayer.ts # Map-layer fetch + GeoJSON normalization
lib/
geometry.ts # Point-in-polygon, haversine distance, bounds
dangerLookup.ts # Danger rating lookup logic
validation.ts # Date and coordinate validation
test/
*.test.ts # Tests (node:test)Contributing
Fork the repo
Create a feature branch (
git checkout -b my-feature)Make your changes and add tests
Run
npm testto make sure everything passesOpen a pull request
License
MIT
Available Tools
4 toolsavalanche_danger_rating_by_pointA
Get the current avalanche danger rating and forecast metadata for the avalanche zone containing a latitude/longitude point. Can fall back to the nearest zone.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | Latitude in decimal degrees. | |
| lon | Yes | Longitude in decimal degrees. | |
| centerId | No | Optional avalanche center ID to scope the search (example: UAC). | |
| preferNearest | No | If true (default), return the nearest zone when the point is outside all polygons. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does disclose one meaningful trait - falling back to the nearest zone when the point is outside all polygons - but says nothing about data source, staleness, auth, rate limits, or what happens when no zone is found at all.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no waste. The core purpose is front-loaded, and the fallback caveat is correctly placed second as a qualifier.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a full-coverage geo lookup with no output schema and no annotations, the description tells the agent what it returns (danger rating plus forecast metadata) and how the out-of-polygon case resolves. It omits the no-zone-found outcome and data freshness, but is otherwise sufficient to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so lat, lon, centerId, and preferNearest are already fully documented in the schema, including the default for preferNearest. The description adds no syntax or format detail beyond the schema, which is the correct baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (current avalanche danger rating plus forecast metadata) and pins the spatial scope to the zone containing a lat/lon point. The word 'current' implicitly separates it from the sibling historic_avalanche_danger_rating_by_point, though it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'current' signals this is the real-time counterpart to the historic tool, and the fallback sentence hints at when nearest-zone behavior applies. There is no explicit when-to-use, when-not-to-use, or named alternative, so the agent must infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
historic_avalanche_danger_rating_by_pointA
Get the avalanche danger rating and forecast metadata for the avalanche zone containing a latitude/longitude point on a specific historic day (YYYY-MM-DD). Can fall back to the nearest zone.
| Name | Required | Description | Default |
|---|---|---|---|
| day | Yes | Historic day in YYYY-MM-DD format. | |
| lat | Yes | Latitude in decimal degrees. | |
| lon | Yes | Longitude in decimal degrees. | |
| centerId | No | Optional avalanche center ID to scope the search (example: UAC). | |
| preferNearest | No | If true (default), return the nearest zone when the point is outside all polygons. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the nearest-zone fallback behavior and mentions forecast metadata, but says nothing about what happens when preferNearest is false and no zone matches, about error conditions, or about auth/rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with zero waste; the core purpose and the fallback caveat are both front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter spatial/temporal query with no output schema, the description covers what is returned only generically ('danger rating and forecast metadata') and omits failure behavior when no zone is found. Adequate but with real gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented. The description reinforces the lat/lon and YYYY-MM-DD semantics and the fallback role of preferNearest, but adds no format or edge-case detail beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the avalanche danger rating and forecast metadata'), names the zone-containment logic, and scopes it to 'a specific historic day'. The word 'historic' cleanly distinguishes it from the sibling avalanche_danger_rating_by_point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'historic day' qualifier gives clear context for when this tool applies versus the current-condition sibling, and the fallback note signals behavior when the point misses all polygons. It stops short of explicitly naming the non-historic alternative or stating when-not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
raw_map_layerA
Return the raw Avalanche.org map-layer GeoJSON FeatureCollection for all avalanche centers. Supports an optional historic day (YYYY-MM-DD).
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | Optional historic day in YYYY-MM-DD format. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does useful work: it names the exact return type (GeoJSON FeatureCollection) and flags the unprocessed 'raw' nature of the data, which matters given there is no output schema. It omits authentication, rate-limit, and data-freshness context, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the core return value front-loaded and the optional parameter qualification second. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter read tool with no output schema, the description supplies the missing return-shape information that the schema and annotations cannot. It lacks only peripheral operational detail, so it is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single parameter is already documented. The description restates the same 'optional historic day (YYYY-MM-DD)' information without adding format edge cases, range limits, or defaults, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Return'), the exact resource ('raw Avalanche.org map-layer GeoJSON FeatureCollection'), and the scope ('all avalanche centers'), which distinguishes it from the sibling raw_map_layer_by_avalanche_center that scopes to a single center.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the 'all avalanche centers' scope hints at when to pick this over the by-center sibling, but there is no explicit statement of when to use it, when to avoid it, or how it relates to the danger-rating siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
raw_map_layer_by_avalanche_centerA
Return the raw Avalanche.org map-layer GeoJSON FeatureCollection for a specific avalanche center ID. Supports an optional historic day (YYYY-MM-DD).
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | Optional historic day in YYYY-MM-DD format. | |
| centerId | Yes | Avalanche center ID (example: UAC). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden but only discloses the return shape (raw GeoJSON FeatureCollection) and the optional historic parameter. It omits auth requirements, rate limits, whether historic days beyond a retention window are unavailable, and whether the map layer is a live or archived snapshot.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the core purpose front-loaded and the optional parameter called out second. Nothing is repeated and every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so naming the GeoJSON FeatureCollection return is valuable and largely satisfies return-value expectations for a two-parameter read. Slight gaps remain around historic-data availability and error behavior for invalid center IDs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both centerId (example UAC) and day (YYYY-MM-DD) documented in the schema. The description repeats only the day format and the center-ID scoping, adding no syntax or constraint detail beyond what the schema already provides; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Return) and resource (raw Avalanche.org map-layer GeoJSON FeatureCollection) scoped to a specific avalanche center ID. It implicitly distinguishes itself from the sibling raw_map_layer by requiring a center ID, but never names that sibling or states the difference explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the center-ID scoping and the optional historic day suggest when this tool applies, but there is no explicit when-to-use, when-not-to-use, or named alternative (e.g., raw_map_layer for an unfiltered layer). An agent must infer the routing decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.1.4- First observed
avalanche_danger_rating_by_point - First observed
historic_avalanche_danger_rating_by_point - First observed
raw_map_layer - First observed
raw_map_layer_by_avalanche_center
TDQS
Scored across 4 tools
The four tools split cleanly along two axes: current vs historic ratings (tools 1 vs 2) and all-centers vs single-center raw layers (tools 3 vs 4). The main potential confusion is between the point-based rating tools and the map-layer tools, since raw_map_layer also accepts a historic day, but their output intent (formatted rating vs raw GeoJSON) differs enough to keep them distinct.
All names use consistent snake_case with descriptive suffixes (_by_point, _by_avalanche_center) and clear domain prefixes (avalanche_danger_rating, historic_, raw_map_layer). It is not a strict verb_noun convention, but the modifiers are applied predictably across the set, so an agent can infer related tools.
Four tools is a tight, well-scoped surface for a narrow domain (avalanche danger lookups). Each tool covers a distinct query dimension, though the set sits at the low end and one could argue a couple more (e.g. by-center rating) would round it out.
The surface covers current/historic point ratings and raw map layers for all or a single center, but there is no direct way to query a formatted danger rating by avalanche center ID, nor to list available centers/zones. Raw GeoJSON partially compensates, but some lookup paths dead-end.
Maintenance
Related MCP Connectors
US weather & geo for AI agents: forecasts, alerts, earthquakes, elevation, geocoding. No keys.
US weather & geo for AI agents: forecasts, alerts, earthquakes, elevation, geocoding. No keys.
Read-only airport delay, weather, and 24h forecast tools for AI assistants. Airport-level only.
Geocoding, weather forecasts, and timezone lookups
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables AI assistants to access real-time US weather forecasts and alerts through the National Weather Service API.25 npmMIT
- FlicenseBqualityDmaintenanceProvides real-time US weather alerts and forecasts by integrating with the National Weather Service API. It enables AI assistants to fetch state-specific alerts and detailed local forecasts using geographic coordinates.21-
- AlicenseNot gradedqualityDmaintenanceProvides access to aviation weather data from aviationweather.gov, enabling LLMs to fetch and analyze METAR, TAF, PIREPs, AIRMETs, and other aviation weather information.7 npm7MIT
- AlicenseNot gradedqualityDmaintenanceProvides avalanche forecasts, danger ratings, and field observations for US avalanche centers, Canadian regions, and Quebec's Chic-Chocs via natural language queries.MIT