Solano — marine & outdoor weather

Marine and outdoor weather: multi-model forecasts, official bulletins, tides, anchorages.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
78%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,789Tokens (tool definitions)
~813 BTypical response size
Significant attention impact (2.18% 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": {
    "solano": {
      "url": "https://solanometeo.fr/mcp"
    }
  }
}

Remote endpoints

https://solanometeo.fr/mcpstreamable-http

What it can do

Tool inventory

Tools (9)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢get_forecast(latitude, longitude, models, days, include_sea_state)

Daily weather summary for a point, from one or more international models. Returns, per model and per LOCAL day: mean and max wind (knots), max gust, dominant wind direction, min/max temperature, total precipitation, and peak CAPE. Not hour-by-hour — follow `solano_url` for the hourly view. When the point is at sea and `include_sea_state` is true, a `sea_state` block adds significant wave height (Hs), derived maximum wave height (Hmax), period and direction from a wave model. Models are picked for the location: a regional high-resolution model (AROME 1.5 km, ICON-2I, ICON-D2, UKV…) replaces its global parent where it is available. Pass `models` to force specific keys — use `list_models_for_location` first to see what exists there.

Input Schema

{
  "type": "object",
  "properties": {
    "latitude": {
      "title": "Latitude",
      "type": "number"
    },
    "longitude": {
      "title": "Longitude",
      "type": "number"
    },
    "models": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Models"
    },
    "days": {
      "default": 5,
      "title": "Days",
      "type": "integer"
    },
    "include_sea_state": {
      "default": true,
      "title": "Include Sea State",
      "type": "boolean"
    }
  },
  "required": [
    "latitude",
    "longitude"
  ],
  "title": "get_forecastArguments"
}
🟢get_confidence(latitude, longitude, models)

How much the forecast can be trusted at this point, hour by hour, from ensemble spread — Solano's own indicator, not a raw model output. Each deterministic model is compared against the members of ITS OWN reference ensemble (GFS→GEFS, ECMWF IFS→ECMWF-ENS, ICON→ICON-EPS), never against a mixed pool: the systematic offset between forecasting centres would otherwise be charged to the model as if it were uncertainty. The percentage blends wind (60%), rain intensity class (25%) and pressure (15%). High means the scenarios converge, so the forecast is solid; low means they diverge and the forecast should be treated as uncertain. Use this when asked "is this forecast reliable?", "will it hold?", or before committing to a passage plan. Returned per day: mean and minimum confidence, plus the per-variable breakdown at the least confident hour.

Input Schema

{
  "type": "object",
  "properties": {
    "latitude": {
      "title": "Latitude",
      "type": "number"
    },
    "longitude": {
      "title": "Longitude",
      "type": "number"
    },
    "models": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Models"
    }
  },
  "required": [
    "latitude",
    "longitude"
  ],
  "title": "get_confidenceArguments"
}
🟢get_storm_risk(latitude, longitude, days)

Thunderstorm environment at a point, scored 0-10 per hour from convective ingredients rather than from a rain field. Built on a GFS baseline that carries the full set: CAPE sharpened by the lifted index, capped by convective inhibition, then modulated by the 700-500 hPa lapse rate and 0-6 km shear. Shear also decides organisation — a severe-intensity hour with weak shear is reported as "marked, isolated" rather than severe. `capped_gun` flags a loaded-gun setup: lots of fuel held down by a strong cap, explosive if it breaks. ⚠️ This describes an ENVIRONMENT at basin scale (the point is snapped to a ~25 km grid). It does NOT locate individual cells and must never be phrased as "a storm at 4pm" — say "conditions favourable to storms during the afternoon". Convection-resolving models place cells; see `list_models_for_location` for which ones cover this point.

Input Schema

{
  "type": "object",
  "properties": {
    "latitude": {
      "title": "Latitude",
      "type": "number"
    },
    "longitude": {
      "title": "Longitude",
      "type": "number"
    },
    "days": {
      "default": 3,
      "title": "Days",
      "type": "integer"
    }
  },
  "required": [
    "latitude",
    "longitude"
  ],
  "title": "get_storm_riskArguments"
}
🟢get_marine_bulletin(latitude, longitude, provider)

The official marine forecast bulletin for the maritime zone containing a point — the text a national weather service publishes for mariners, not a model output. Providers, matched automatically to the point: Météo-France (BMR coastal), AEMET (Spain), MeteoAM (Italy), Met Office (UK inshore waters and shipping forecast). Pass `provider` to force one of `mf`, `aemet`, `meteoam`, `metoffice`. The bulletin is returned in the language its issuing service publishes it in (see `language`). Quote it, do not translate it as if it were the official wording. Costs no third-party call when warm: bulletins are cached 1-3 hours.

Input Schema

{
  "type": "object",
  "properties": {
    "latitude": {
      "title": "Latitude",
      "type": "number"
    },
    "longitude": {
      "title": "Longitude",
      "type": "number"
    },
    "provider": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Provider"
    }
  },
  "required": [
    "latitude",
    "longitude"
  ],
  "title": "get_marine_bulletinArguments"
}
🟢get_zone_alerts(latitude, longitude)

Marine and weather warnings in force for a point, from every official source at once — gale and storm warnings (BMS Météo-France, AEMET, MeteoAM, Met Office) plus European MeteoAlarm warnings resolved to the actual region, not the whole country. Empty list means no warning is in force, which is a real answer worth stating. Each warning carries its issuing service, validity window, level and the official text in the publishing language. Check this before any passage or coastal activity. Costs no third-party call when warm (own 15-minute cache).

Input Schema

{
  "type": "object",
  "properties": {
    "latitude": {
      "title": "Latitude",
      "type": "number"
    },
    "longitude": {
      "title": "Longitude",
      "type": "number"
    }
  },
  "required": [
    "latitude",
    "longitude"
  ],
  "title": "get_zone_alertsArguments"
}
🟢get_tide(latitude, longitude, days)

High and low water times and tidal range at any point on the globe, and real water heights wherever a national almanac covers it. Two very different answers, and the difference matters: - `reference.kind == "chart_datum"` — a national tide almanac is attached to this point (Canada CHS, France api-maree.fr, Ireland Marine Institute). `height_m` is then a TRUE water height above chart datum, which can be added to a charted sounding. - `reference.kind == "lowest_low_water"` — no almanac here, so the figures come from a global model referenced to mean sea level. Times and ranges are sound (they are differences, the unknown datum cancels out) but `height_m` is NOT a water height: it is an offset above an internal reference. Never add it to a sounding, and never present it as depth. Model range is systematically UNDERSTATED, the more so the more confined the place (-6% Halifax, -20% at the head of the Bay of Fundy): 8 km grid cells do not resonate a funnel. This is flagged, never silently corrected. The almanac attachment for a new point is decided in the background, so the first call at a fresh location may return the model and a later one the almanac.

Input Schema

{
  "type": "object",
  "properties": {
    "latitude": {
      "title": "Latitude",
      "type": "number"
    },
    "longitude": {
      "title": "Longitude",
      "type": "number"
    },
    "days": {
      "default": 3,
      "title": "Days",
      "type": "integer"
    }
  },
  "required": [
    "latitude",
    "longitude"
  ],
  "title": "get_tideArguments"
}
🟢find_known_anchorages(latitude, longitude, radius_m)

Anchorages already analysed nearby, re-scored for comfort over the next three nights against the real forecast wind and swell. Only spots whose full shelter profile is already in Solano's shared cache are considered — work other users' analyses have already paid for. Each is scored per night (18:00 to 10:00 local) on the worst hour of the window, which is the conservative reading you want for a night at anchor: swell weighs 0.70, wind 0.30, because swell is what makes a boat roll. Empty result means nobody has analysed an anchorage around this point yet, not that there is none — use `analyze_anchorage` on a precise spot to add one, or open the app to sweep the area. Cheap by construction: no topography download, two forecast calls.

Input Schema

{
  "type": "object",
  "properties": {
    "latitude": {
      "title": "Latitude",
      "type": "number"
    },
    "longitude": {
      "title": "Longitude",
      "type": "number"
    },
    "radius_m": {
      "default": 5000,
      "title": "Radius M",
      "type": "integer"
    }
  },
  "required": [
    "latitude",
    "longitude"
  ],
  "title": "find_known_anchoragesArguments"
}
🟢analyze_anchorage(latitude, longitude)

Directional shelter analysis of ONE precise anchorage: how protected it is from every compass direction, and how comfortable it will be over the next three days. Casts 1728 rays against a global elevation model plus OSM breakwaters and moles, giving per-direction wind protection and whether swell is blocked; then scores comfort hour by hour against the real forecast. Also returns depth (EMODnet bathymetry) and seabed nature. ⚠️ Use this on a SINGLE spot the user has in mind. It is the most expensive thing this server does — 18 topography calls against a public quota shared with the website — so it is capped per day, serialised, and de-duplicated. Do NOT call it repeatedly to sweep a coastline: call `find_known_anchorages` for that, or send the user to the app, which has a search built for it. A refusal here is a budget limit, not an error. Points already analysed come back from cache instantly and cost nothing.

Input Schema

{
  "type": "object",
  "properties": {
    "latitude": {
      "title": "Latitude",
      "type": "number"
    },
    "longitude": {
      "title": "Longitude",
      "type": "number"
    }
  },
  "required": [
    "latitude",
    "longitude"
  ],
  "title": "analyze_anchorageArguments"
}
🟢list_models_for_location(latitude, longitude)

Which weather models actually cover a point, and which resolve convection. A regional high-resolution model hides its global parent where it is available (AROME 1.5 km over France, ICON-2I over the Mediterranean, UKV over the UK, HRDPS over Canada). `resolves_convection` marks the models fine enough to place individual storm cells rather than parametrise them — those are the ones to cite when asked where a storm will actually break. `near_domain_edge` warns that the point sits in a regional model's relaxation zone, where its values are least trustworthy. Costs nothing: read from the registry, no network call.

Input Schema

{
  "type": "object",
  "properties": {
    "latitude": {
      "title": "Latitude",
      "type": "number"
    },
    "longitude": {
      "title": "Longitude",
      "type": "number"
    }
  },
  "required": [
    "latitude",
    "longitude"
  ],
  "title": "list_models_for_locationArguments"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded9 tools