# Solano — marine & outdoor weather

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

- name: fr.solanometeo/solano
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 83/100 flags: no-repository
- quality: 92/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/fr.solanometeo%2Fsolano
- tools: https://api.protogrid.dev/v1/servers/fr.solanometeo%2Fsolano/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "solano": {
      "type": "http",
      "url": "https://solanometeo.fr/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% +updated-22d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 92/100 (strong)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 93 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 1 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 9 of 9 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 2,733 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 9, about 2,733 tokens to load them all
- tool set hash: 3dfbf8776fc43fe156645684fcca0647
- badge: [![protogrid quality](https://protogrid.dev/badge/fr.solanometeo/solano.svg)](https://protogrid.dev/servers/fr.solanometeo/solano)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://solanometeo.fr/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (9)

- `analyze_anchorage`: 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.
    
- `find_known_anchorages`: 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.
    
- `get_confidence`: 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.
    
- `get_forecast`: 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.
    
- `get_marine_bulletin`: 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.
    
- `get_storm_risk`: 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.
    
- `get_tide`: 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.
    
- `get_zone_alerts`: 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).
    
- `list_models_for_location`: 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.
    
