Ski & beach trip planning: resort matching, snow and sargassum forecasts, lodging and flights.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Full conditions for one beach resort on one date: 0-100 beach score with per-metric scores, sargassum, weather, water temperature, waves and rip currents, UV, crowds, hurricane risk, holidays. For today, also live conditions and alerts. Days 0-15 are forecasts, later dates climate outlooks.
Resort id or name
YYYY-MM-DD, today to ~365 days out (default today).
Full conditions for one beach resort on one date: 0-100 beach score with per-metric scores, sargassum, weather, water temperature, waves and rip currents, UV, crowds, hurricane risk, holidays. For today, also live conditions and alerts. Days 0-15 are forecasts, later dates climate outlooks.
| Argument | Type | Description |
|---|---|---|
| date | string | YYYY-MM-DD, today to ~365 days out (default today). |
| resort* | string | Resort id or name |
{
"type": "object",
"required": [
"resort"
],
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "YYYY-MM-DD, today to ~365 days out (default today)."
},
"resort": {
"type": "string",
"description": "Resort id or name"
}
}
}For a beach resort and date (within 16 days), nearby resorts with a meaningfully higher beach score: swap suggestions when sargassum or weather is bad.
| Argument | Type | Description |
|---|---|---|
| date | string | YYYY-MM-DD |
| resort* | string | |
| radiusMiles | number |
{
"type": "object",
"required": [
"resort"
],
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "YYYY-MM-DD"
},
"resort": {
"type": "string"
},
"radiusMiles": {
"type": "number",
"maximum": 1000,
"minimum": 25
}
}
}Pre-filled flight searches from the traveler's home airport to the best gateway airports for a ski or beach resort (or any airport code), with the drive from each airport to the resort.
| Argument | Type | Description |
|---|---|---|
| to* | string | Ski or beach resort name/id, or a destination airport code. |
| from* | string | Traveler's home airport code (e.g. DFW), city (e.g. 'Dallas') or 'lat,lon'. |
| adults | integer | Adults (default 2). |
| depart* | string | YYYY-MM-DD |
| return | string | Return date (optional for one-way). |
| childrenAges | array | Ages of children traveling, e.g. [6, 9]. |
{
"type": "object",
"required": [
"from",
"to",
"depart"
],
"properties": {
"to": {
"type": "string",
"description": "Ski or beach resort name/id, or a destination airport code."
},
"from": {
"type": "string",
"description": "Traveler's home airport code (e.g. DFW), city (e.g. 'Dallas') or 'lat,lon'."
},
"adults": {
"type": "integer",
"maximum": 16,
"minimum": 1,
"description": "Adults (default 2)."
},
"depart": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "YYYY-MM-DD"
},
"return": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Return date (optional for one-way)."
},
"childrenAges": {
"type": "array",
"items": {
"type": "integer",
"maximum": 17,
"minimum": 0
},
"maxItems": 8,
"description": "Ages of children traveling, e.g. [6, 9]."
}
}
}Places to stay near a ski or beach resort (or any 'lat,lon') for given dates and party: live nightly prices, ratings and photos where available, filtered by budget, homes from local property managers booked direct (no booking-site fee) where Veabird has them, plus hotel and vacation-rental searches.
| Argument | Type | Description |
|---|---|---|
| near* | string | Ski or beach resort name/id, or 'lat,lon'. |
| limit | integer | |
| rooms | integer | Rooms needed (default 1). |
| adults | integer | Adults (default 2). |
| checkin* | string | YYYY-MM-DD |
| checkout* | string | YYYY-MM-DD |
| radiusMiles | number | Search radius (default 5). |
| childrenAges | array | Ages of children traveling, e.g. [6, 9]. |
| maxPricePerNight | number |
Ranks ski resorts for one traveler or group: terrain that fits their ability (beginner/intermediate/advanced/expert, or a mixed group), snow and crowds for their dates, travel from their home airport or city (drive or fly), and their Epic/Ikon pass. Returns the reasons for each pick plus lodging, flight and rental links. Use for 'where should I ski' questions.
| Argument | Type | Description |
|---|---|---|
| area | string | Limit to a country, state or range, e.g. 'colorado', 'utah', 'alps', 'japan', 'US'. |
| from | string | Traveler's home airport code (e.g. DFW), city (e.g. 'Dallas') or 'lat,lon'. |
| pass | string | Season pass they hold. |
| limit | integer | How many resorts (default 5). |
| budget | string | Value weights pass coverage and driving more heavily. |
| depart | string | First ski day, YYYY-MM-DD (default today). |
| nights | integer | Trip length in nights (default 3). |
| travel | string | How they want to get there (default either). |
How accurate Veabird's point forecast has been against weather-station measurements, compared with the single-model forecast typical weather apps show: average error of the daily high and low by days ahead, and the Brier score of the rain/snow chance, at a fixed panel of stations (mountains, coasts, inland), scored without using the station being scored.
No arguments.
{
"type": "object",
"properties": {}
}Active Atlantic tropical storms and hurricanes (NOAA NHC) with position, intensity and track, and which Veabird beach resorts are threatened.
| Argument | Type | Description |
|---|---|---|
| resort | string | Optional resort to check |
{
"type": "object",
"properties": {
"resort": {
"type": "string",
"description": "Optional resort to check"
}
}
}Weather months ahead for an exact location, as probabilities: for each month the chance of a below-, near- or above-normal temperature and precipitation (from ECMWF's SEAS5 seasonal forecast and, in the US, NOAA CPC's official outlook, over a 35-year local climate record with the warming trend), the expected and normal highs and lows, wet and snow days; for a specific date, the likely high and low and the chance of rain, snow, a freezing night or a hot day. Also the next 6 weeks as weekly odds.
| Argument | Type | Description |
|---|---|---|
| date | string | A specific date within the next 12 months, YYYY-MM-DD (a wedding, a race, a trip). |
| spot | string | At a ski resort: the base (default) or the summit. |
| start | string | First month, YYYY-MM (default this month, or the date's month). |
| units | string | us (°F, in; default) or metric. |
| months | integer | How many months (default 6). |
| location* | string | 'lat,lon' (most precise), a place ('Napa, CA', 'Kyoto'), or a Veabird ski resort name. |
| elevationFt | number | Elevation of the exact spot in feet, if known. |
Everything to book one trip to a ski or beach resort: conditions for the dates, places to stay (live nightly prices with photos where available, plus rental and hotel searches), flights from the traveler's airport to the best gateway, and extras (lift tickets, ski rentals, tours, car hire, insurance).
| Argument | Type | Description |
|---|---|---|
| from | string | Traveler's home airport code (e.g. DFW), city (e.g. 'Dallas') or 'lat,lon'. |
| kind | string | Only if the name is ambiguous. |
| adults | integer | Adults (default 2). |
| depart* | string | Arrival date, YYYY-MM-DD. |
| resort* | string | Ski or beach resort name or id. |
| return | string | Departure date (default 4 nights later). |
| childrenAges | array | Ages of children traveling, e.g. [6, 9]. |
| maxPricePerNight | number | Lodging budget per night for the whole party, in USD. |
Day-by-day weather (up to 16 days) for an exact location and elevation, more accurate than a single-model app: every major model (ECMWF, NOAA NBM/GFS/HRRR, UK Met Office, ICON, GEM, Meteo-France, JMA) run at the spot's own elevation, corrected for each model's recent error at the nearest weather stations, blended by recent accuracy, with rain, snow and temperature-range probabilities from 82 ensemble members. Each day also shows what a typical weather app says, for comparison.
| Argument | Type | Description |
|---|---|---|
| days | integer | Days ahead (default 10). |
| spot | string | At a ski resort: the base (default) or the summit. |
| units | string | us (°F, in, mph; default) or metric. |
| location* | string | 'lat,lon' (most precise), a place ('Moab, UT', 'Chamonix'), or a Veabird ski resort name. |
| elevationFt | number | Elevation of the exact spot in feet, if known (else from a 90 m terrain map). |
{
"type": "object",
"required": [
"location"
],
"properties": {
"days": {
"type": "integer",
"maximum": 16,
"minimum": 1,
"description": "Days ahead (default 10)."
},
"spot": {
"enum": [
"base",
"summit"
],
"type": "string",
"description": "At a ski resort: the base (default) or the summit."
},
"units": {
"enum": [
"us",
"metric"
],
"type": "string",
"description": "us (°F, in, mph; default) or metric."
},
"location": {
"type": "string",
"description": "'lat,lon' (most precise), a place ('Moab, UT', 'Chamonix'), or a Veabird ski resort name."
},
"elevationFt": {
"type": "number",
"maximum": 29000,
"minimum": -1500,
"description": "Elevation of the exact spot in feet, if known (else from a 90 m terrain map)."
}
}
}For a vacation rental or hotel owner: how busy each night will be around their property for the next weeks (concerts, festivals, carnivals, conventions, pro and college home games, public holidays and long weekends, weekends), compared with a typical night there. With their calendar's iCal export link (Airbnb, Vrbo, Booking.com, Hostaway, Guesty, OwnerRez...) it marks booked and open nights; with their nightly rate it flags nights priced too low for the demand and suggests a range. Use when a host asks whether their price is too low, what's happening in town, or when to raise rates.
| Argument | Type | Description |
|---|---|---|
| days | integer | Nights to check (default 35; events are listed about 5 weeks ahead, holidays further). |
| from | string | First night, YYYY-MM-DD (default today). |
| ical | string | The listing's calendar export (iCal, .ics) link. Airbnb: Calendar > Availability > Connect calendars > Export. Vrbo: Calendar > Import/Export > Export. Read once, never stored. |
| rate | number | The property's normal nightly rate (USD or local currency). |
| rates | array | Current nightly rates for specific dates, e.g. ['2026-10-17=189','2026-10-18=189']. |
| location* | string | Where the property is: 'lat,lon' (most precise), a town with state or country ('Destin, FL', 'Tulum'), or a Veabird beach resort name. |
Rank beach resorts by 0-100 beach score for a date, optionally within a region, island or country, or a radius around a resort. With `from`, also gives each resort's airports and a flight search. Use for 'where should I go to the beach' questions.
| Argument | Type | Description |
|---|---|---|
| date | string | YYYY-MM-DD (default today). Beyond 16 days needs a narrow query or near. |
| from | string | Traveler's home airport code (e.g. DFW), city (e.g. 'Dallas') or 'lat,lon'. |
| near | string | Resort id or name to rank around. |
| limit | integer | Default 8. |
| query | string | Region, island, town or country, e.g. 'mexico', 'bahamas', 'punta cana'. |
| radiusMiles | number | With near: max distance (default 300). |
{
"type": "object",
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "YYYY-MM-DD (default today). Beyond 16 days needs a narrow query or near."
},
"from": {
"type": "string",
"description": "Traveler's home airport code (e.g. DFW), city (e.g. 'Dallas') or 'lat,lon'."
},
"near": {
"type": "string",
"description": "Resort id or name to rank around."
},
"limit": {
"type": "integer",
"maximum": 25,
"minimum": 1,
"description": "Default 8."
},
"query": {
"type": "string",
"description": "Region, island, town or country, e.g. 'mexico', 'bahamas', 'punta cana'."
},
"radiusMiles": {
"type": "number",
"maximum": 2000,
"minimum": 10,
"description": "With near: max distance (default 300)."
}
}
}Sargassum (seaweed) outlook for a beach resort: the next 16 days in detail plus a weekly outlook for coming months, barrier and cleanup programs, and the model's source and held-out skill.
| Argument | Type | Description |
|---|---|---|
| weeks | integer | Weekly outlook length (default 12) |
| resort* | string | Resort id or name |
{
"type": "object",
"required": [
"resort"
],
"properties": {
"weeks": {
"type": "integer",
"maximum": 52,
"minimum": 1,
"description": "Weekly outlook length (default 12)"
},
"resort": {
"type": "string",
"description": "Resort id or name"
}
}
}How well Veabird's sargassum model performs on held-out years (AUC, Brier score, calibration) versus baselines.
No arguments.
{
"type": "object",
"properties": {}
}Search Veabird's 1,400+ beach resorts (Caribbean, Gulf of Mexico, Mexico's Pacific coast, Hawaii) by name, town, island, region or country. Returns ids, today's headline conditions, photos and page links.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| query | string | e.g. 'tulum', 'punta cana', 'barbados' |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"query": {
"type": "string",
"description": "e.g. 'tulum', 'punta cana', 'barbados'"
}
}
}Search Veabird's 317 ski resorts by name, country, state or range, optionally only those on a pass. Returns ids, terrain mix, passes, gateway airports and forecast links.
| Argument | Type | Description |
|---|---|---|
| pass | string | |
| limit | integer | |
| query | string | e.g. 'utah', 'alps', 'whistler', 'japan' |
{
"type": "object",
"properties": {
"pass": {
"enum": [
"epic",
"ikon"
],
"type": "string"
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"query": {
"type": "string",
"description": "e.g. 'utah', 'alps', 'whistler', 'japan'"
}
}
}Today's 0-100 'ski today' score (fresh snow, base depth, weather, crowds), the next 7 days of summit snowfall and temperature, crowd outlook, terrain mix, passes and gateway airport for one ski resort.
| Argument | Type | Description |
|---|---|---|
| resort* | string | Ski resort name or id, e.g. 'Breckenridge'. |
{
"type": "object",
"required": [
"resort"
],
"properties": {
"resort": {
"type": "string",
"description": "Ski resort name or id, e.g. 'Breckenridge'."
}
}
}High and low tide times and heights at a beach resort for the next days (Open-Meteo sea level model, heights relative to mean sea level).
| Argument | Type | Description |
|---|---|---|
| days | integer | |
| resort* | string |
{
"type": "object",
"required": [
"resort"
],
"properties": {
"days": {
"type": "integer",
"maximum": 7,
"minimum": 1
},
"resort": {
"type": "string"
}
}
}US State Department travel advisory level (1-4) and summary for a country or a beach resort's country, plus Veabird's local safety notes.
| Argument | Type | Description |
|---|---|---|
| resort | string | |
| country | string | Country: ISO2 code (MX, JM, DO) or name (Mexico) |
{
"type": "object",
"properties": {
"resort": {
"type": "string"
},
"country": {
"type": "string",
"description": "Country: ISO2 code (MX, JM, DO) or name (Mexico)"
}
}
}| Lodging budget per night for the whole party, in USD. |
{
"type": "object",
"required": [
"near",
"checkin",
"checkout"
],
"properties": {
"near": {
"type": "string",
"description": "Ski or beach resort name/id, or 'lat,lon'."
},
"limit": {
"type": "integer",
"maximum": 20,
"minimum": 1
},
"rooms": {
"type": "integer",
"maximum": 8,
"minimum": 1,
"description": "Rooms needed (default 1)."
},
"adults": {
"type": "integer",
"maximum": 16,
"minimum": 1,
"description": "Adults (default 2)."
},
"checkin": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "YYYY-MM-DD"
},
"checkout": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "YYYY-MM-DD"
},
"radiusMiles": {
"type": "number",
"maximum": 30,
"minimum": 0.5,
"description": "Search radius (default 5)."
},
"childrenAges": {
"type": "array",
"items": {
"type": "integer",
"maximum": 17,
"minimum": 0
},
"maxItems": 8,
"description": "Ages of children traveling, e.g. [6, 9]."
},
"maxPricePerNight": {
"type": "number",
"maximum": 20000,
"minimum": 20,
"description": "Lodging budget per night for the whole party, in USD."
}
}
}| ability |
| array |
| Ability of each skier or the group, e.g. ['intermediate'] or ['advanced','beginner']. |
| childrenAges | array | Ages of children traveling, e.g. [6, 9]. |
| maxDriveHours | number | Longest acceptable drive (default 5). |
{
"type": "object",
"properties": {
"area": {
"type": "string",
"description": "Limit to a country, state or range, e.g. 'colorado', 'utah', 'alps', 'japan', 'US'."
},
"from": {
"type": "string",
"description": "Traveler's home airport code (e.g. DFW), city (e.g. 'Dallas') or 'lat,lon'."
},
"pass": {
"enum": [
"epic",
"ikon",
"none"
],
"type": "string",
"description": "Season pass they hold."
},
"limit": {
"type": "integer",
"maximum": 15,
"minimum": 1,
"description": "How many resorts (default 5)."
},
"budget": {
"enum": [
"value",
"mid",
"luxury"
],
"type": "string",
"description": "Value weights pass coverage and driving more heavily."
},
"depart": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First ski day, YYYY-MM-DD (default today)."
},
"nights": {
"type": "integer",
"maximum": 21,
"minimum": 1,
"description": "Trip length in nights (default 3)."
},
"travel": {
"enum": [
"drive",
"fly",
"either"
],
"type": "string",
"description": "How they want to get there (default either)."
},
"ability": {
"type": "array",
"items": {
"enum": [
"beginner",
"intermediate",
"advanced",
"expert"
],
"type": "string"
},
"description": "Ability of each skier or the group, e.g. ['intermediate'] or ['advanced','beginner']."
},
"childrenAges": {
"type": "array",
"items": {
"type": "integer",
"maximum": 17,
"minimum": 0
},
"maxItems": 8,
"description": "Ages of children traveling, e.g. [6, 9]."
},
"maxDriveHours": {
"type": "number",
"maximum": 16,
"minimum": 0.5,
"description": "Longest acceptable drive (default 5)."
}
}
}{
"type": "object",
"required": [
"location"
],
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "A specific date within the next 12 months, YYYY-MM-DD (a wedding, a race, a trip)."
},
"spot": {
"enum": [
"base",
"summit"
],
"type": "string",
"description": "At a ski resort: the base (default) or the summit."
},
"start": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}$",
"description": "First month, YYYY-MM (default this month, or the date's month)."
},
"units": {
"enum": [
"us",
"metric"
],
"type": "string",
"description": "us (°F, in; default) or metric."
},
"months": {
"type": "integer",
"maximum": 12,
"minimum": 1,
"description": "How many months (default 6)."
},
"location": {
"type": "string",
"description": "'lat,lon' (most precise), a place ('Napa, CA', 'Kyoto'), or a Veabird ski resort name."
},
"elevationFt": {
"type": "number",
"maximum": 29000,
"minimum": -1500,
"description": "Elevation of the exact spot in feet, if known."
}
}
}{
"type": "object",
"required": [
"resort",
"depart"
],
"properties": {
"from": {
"type": "string",
"description": "Traveler's home airport code (e.g. DFW), city (e.g. 'Dallas') or 'lat,lon'."
},
"kind": {
"enum": [
"ski",
"beach"
],
"type": "string",
"description": "Only if the name is ambiguous."
},
"adults": {
"type": "integer",
"maximum": 16,
"minimum": 1,
"description": "Adults (default 2)."
},
"depart": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Arrival date, YYYY-MM-DD."
},
"resort": {
"type": "string",
"description": "Ski or beach resort name or id."
},
"return": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Departure date (default 4 nights later)."
},
"childrenAges": {
"type": "array",
"items": {
"type": "integer",
"maximum": 17,
"minimum": 0
},
"maxItems": 8,
"description": "Ages of children traveling, e.g. [6, 9]."
},
"maxPricePerNight": {
"type": "number",
"maximum": 20000,
"minimum": 20,
"description": "Lodging budget per night for the whole party, in USD."
}
}
}| radiusMiles | number | How far an event still sends guests to this property (default 25; use ~10 in a big city, 40+ for a remote area). |
{
"type": "object",
"required": [
"location"
],
"properties": {
"days": {
"type": "integer",
"maximum": 60,
"minimum": 7,
"description": "Nights to check (default 35; events are listed about 5 weeks ahead, holidays further)."
},
"from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First night, YYYY-MM-DD (default today)."
},
"ical": {
"type": "string",
"maxLength": 1000,
"description": "The listing's calendar export (iCal, .ics) link. Airbnb: Calendar > Availability > Connect calendars > Export. Vrbo: Calendar > Import/Export > Export. Read once, never stored."
},
"rate": {
"type": "number",
"maximum": 100000,
"minimum": 10,
"description": "The property's normal nightly rate (USD or local currency)."
},
"rates": {
"type": "array",
"items": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}=\\d+(\\.\\d+)?$",
"description": "YYYY-MM-DD=price"
},
"maxItems": 120,
"description": "Current nightly rates for specific dates, e.g. ['2026-10-17=189','2026-10-18=189']."
},
"location": {
"type": "string",
"description": "Where the property is: 'lat,lon' (most precise), a town with state or country ('Destin, FL', 'Tulum'), or a Veabird beach resort name."
},
"radiusMiles": {
"type": "number",
"maximum": 100,
"minimum": 2,
"description": "How far an event still sends guests to this property (default 25; use ~10 in a big city, 40+ for a remote area)."
}
}
}