Where Boats Anchor MCP
This MCP server allows AI assistants to query historical AIS data and weather forecasts to determine where boats stayed at anchor, the wind conditions during those nights, and climatology for specific locations. It provides tools to find anchorages, get detailed bay evidence, retrieve wind climatology, and list regions, supporting boating research and planning.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://whereboatsanchor.com/mcpWhat you can do with it
- Find anchorages near a position with wind history
- Get detailed evidence for a specific bay including boat types and wind stats
- Retrieve annual wind climatology for a location
- List available regions and cruising areas
Source and maintenance
Protocol and capabilities
- Server
- com.whereboatsanchor/anchorages 1.0.0
- MCP protocol
- 2025-06-18
- Tools
- 4 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
4 advertised
find_anchorages — Find anchorages near a position, tonight or in a wind
Lists the places near a position where boats stopped, overnight or by day, with where boats stayed in tonight's forecast there or in a given wind. For tonight, call it without wind_from and wind_kn: the answer then carries tonight's forecast at the position and each place's nights in each of tonight's winds, as the site's Tonight does. Give a wind only to ask about that wind. Each place comes with how far and which way it lies from the position (e.g. 0.5 NM SW), its nights, where it is, its page and its place on the map. With a wind, each place gets its nights in that wind, split by strength, with the gusts on those nights (kt), and the list is sorted by those nights. A wind is counted as the site counts it: its compass point at 10 or 20 kt or more, as the forecast's band (e.g. wind_kn 15 counts E 10 kt or more). wind_from alone counts the direction at any strength. Under 3 kt (wind_kn in whole knots) the wind has no settled direction, so every night counts. A night counts once, in the wind it blew from most. Tonight is counted as the site's Tonight counts it: tonight's forecast times that are night there, each counted in its compass point at 10 or 20 kt or more, as its band (every night under 3 kt), and each place's fewest nights in any one of them. Where a place faces open water and tonight's swell there is 0.5 m or more, a time's nights are those that also had that swell, as on the site. Places with a night in every one of tonight's winds come first, by those fewest nights, then the rest. Without a forecast, by distance. Positions are WGS84 decimal degrees.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude of the centre, WGS84 decimal degrees."
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude of the centre, WGS84 decimal degrees."
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 25,
"minimum": 1,
"description": "Most places to list, 10 when left out, at most 25."
},
"wind_kn": {
"type": "number",
"maximum": 150,
"minimum": 0,
"description": "Mean wind speed in knots (kt). Needs wind_from. Under 3 kt as whole knots the direction counts for nothing, as on the site: every night counts."
},
"radius_nm": {
"type": "number",
"default": 15,
"maximum": 50,
"description": "Radius of the circle in nautical miles, 15 when left out, at most 50.",
"exclusiveMinimum": 0
},
"wind_from": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"maxLength": 8
}
],
"description": "Direction the wind blows from: degrees true (0 to 360) or a point of the 16-point compass (N, NNE, NE ... NNW)."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"center",
"radius_nm",
"wind",
"tonight",
"places",
"places_in_radius",
"note",
"source"
],
"properties": {
"note": {
"type": [
"string",
"null"
]
},
"wind": {
"anyOf": [
{
"type": "object",
"required": [
"from",
"min_kt"
],
"properties": {
"from": {
"anyOf": [
{
"enum": [
"N",
"NE",
"E",
"SE",
"S",
"SW",
"W",
"NW"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Null when the wind asked is under 3 kt: no settled direction, so every night counts, as on the site."
},
"min_kt": {
"type": "number"
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"center": {
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number"
},
"lon": {
"type": "number"
}
},
"additionalProperties": false
},
"places": {
"type": "array",
"items": {
"type": "object",
"required": [
"bay_id",
"name",
"where",
"lat",
"lon",
"distance",
"nights",
"matching",
"tonight",
"url",
"map_url"
],
"properties": {
"lat": {
"type": "number"
},
"lon": {
"type": "number"
},
"url": {
"type": "string"
},
"name": {
"type": [
"string",
"null"
]
},
"where": {
"type": "object",
"required": [
"country",
"region",
"county",
"area"
],
"properties": {
"area": {
"type": [
"string",
"null"
]
},
"county": {
"type": [
"string",
"null"
]
},
"region": {
"type": [
"string",
"null"
]
},
"country": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
},
"bay_id": {
"type": "string"
},
"nights": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Nights boats stayed here: the site's number."
},
"map_url": {
"type": "string",
"description": "The site's map opened on this place."
},
"tonight": {
"anyOf": [
{
"type": "object",
"required": [
"nights",
"weakest",
"weakest_swell",
"every_window"
],
"properties": {
"nights": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "The fewest nights in any one of tonight's winds."
},
"weakest": {
"anyOf": [
{
"type": "object",
"required": [
"from",
"min_kt"
],
"properties": {
"from": {
"anyOf": [
{
"enum": [
"N",
"NE",
"E",
"SE",
"S",
"SW",
"W",
"NW"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Null when the wind asked is under 3 kt: no settled direction, so every night counts, as on the site."
},
"min_kt": {
"type": "number"
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "The wind those nights are counted in."
},
"every_window": {
"type": "boolean",
"description": "Whether boats stayed here on some night in each of tonight's winds."
},
"weakest_swell": {
"anyOf": [
{
"type": "object",
"required": [
"from",
"min_m"
],
"properties": {
"from": {
"enum": [
"N",
"NE",
"E",
"SE",
"S",
"SW",
"W",
"NW"
],
"type": "string"
},
"min_m": {
"type": "number"
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "The forecast swell those nights are counted with, as on the site: its compass point and the height it is counted from, m (0.5, 1.25 or 2.5 m or more). Null: the wind alone (a sheltered place, or tonight's swell there under 0.5 m)."
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"distance": {
"type": "string",
"description": "How far and which way from the position, as the site writes it (e.g. 0.5 NM SW)."
},
"matching": {
"anyOf": [
{
"type": "object",
"required": [
"wind",
"nights",
"nights_by_strength",
"gusts_kt"
],
"properties": {
"wind": {
"type": "object",
"required": [
"from",
"min_kt"
],
"properties": {
"from": {
"anyOf": [
{
"enum": [
"N",
"NE",
"E",
"SE",
"S",
"SW",
"W",
"NW"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Null when the wind asked is under 3 kt: no settled direction, so every night counts, as on the site."
},
"min_kt": {
"type": "number"
}
},
"additionalProperties": false
},
"nights": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Nights boats stayed here in this wind: the site's number."
},
"gusts_kt": {
"anyOf": [
{
"type": "object",
"required": [
"min",
"max"
],
"properties": {
"max": {
"type": "number"
},
"min": {
"type": "number"
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Lowest and highest gust of the counted nights, kt."
},
"nights_by_strength": {
"type": "object",
"required": [
"under_10_kt",
"from_10_to_20_kt",
"from_20_kt"
],
"properties": {
"from_20_kt": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"under_10_kt": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
{
"type": "null"
}
],
"description": "Null unless the wind is counted at any strength."
},
"from_10_to_20_kt": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
{
"type": "null"
}
],
"description": "Null when the wind is counted at 20 kt or more."
}
},
"description": "The nights split by the night's strongest wind from this direction, as the site's wedge for the direction. Adds up to nights.",
"additionalProperties": false
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"source": {
"type": "object",
"required": [
"about"
],
"properties": {
"about": {
"type": "string",
"description": "The page that explains how the figures are known."
}
},
"additionalProperties": false
},
"tonight": {
"anyOf": [
{
"type": "object",
"required": [
"windows",
"missing",
"credit"
],
"properties": {
"credit": {
"type": "object",
"required": [
"text",
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://open-meteo.com/"
},
"text": {
"type": "string",
"const": "Weather data by Open-Meteo.com"
}
},
"description": "The forecast's credit. Show its text, linked to its url, wherever this forecast is shown.",
"additionalProperties": false
},
"missing": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Tonight's forecast times without a wind."
},
"windows": {
"type": "array",
"items": {
"type": "object",
"required": [
"time",
"from",
"mean_kt",
"counted_in"
],
"properties": {
"from": {
"enum": [
"N",
"NE",
"E",
"SE",
"S",
"SW",
"W",
"NW"
],
"type": "string",
"description": "The forecast wind's compass point."
},
"time": {
"type": "string",
"description": "The forecast time on the clock at the position, ISO with its offset."
},
"mean_kt": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "The forecast mean wind, whole kt."
},
"counted_in": {
"type": "object",
"required": [
"from",
"min_kt"
],
"properties": {
"from": {
"anyOf": [
{
"enum": [
"N",
"NE",
"E",
"SE",
"S",
"SW",
"W",
"NW"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Null when the wind asked is under 3 kt: no settled direction, so every night counts, as on the site."
},
"min_kt": {
"type": "number"
}
},
"description": "The wind its nights are counted in: its compass point at 10 or 20 kt or more, as its band; no point under 3 kt.",
"additionalProperties": false
}
},
"additionalProperties": false
},
"description": "Tonight's 3-hour forecast times that are night at the position, in time order."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Tonight's forecast at the position, null when it isn't available."
},
"radius_nm": {
"type": "number"
},
"places_in_radius": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"additionalProperties": false
}{
"title": "Find anchorages near a position, tonight or in a wind",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_bay_evidence — Get what boats did at one place
What boats did at one place, as its page on the site shows it. Its nights. Its nights by the eight compass points the wind blew from, split under 10, 10 to 20 and 20 kt or more, with the different boats and the windiest night of each. Its boats by length and type (cells under 3 boats null), its day stops by wind, its nights by swell direction where its page shows them, and the places nearby with how far and which way. It carries tonight's forecast at the place: the night's strongest forecast wind and the place's nights in that wind, as its page's Tonight shows it. Give bay_id, or name with near (WGS84 decimal degrees) to rank places of one name. Several places of one name come back as candidates.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The place's name, when bay_id isn't known. Several places of one name are listed as candidates, never guessed."
},
"near": {
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180
}
},
"description": "A position to rank places of the same name by nearness, WGS84 decimal degrees."
},
"bay_id": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The place's id, as find_anchorages and list results give it (the page address's last part, e.g. cane-garden-bay)."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"bay",
"tonight",
"candidates",
"note",
"source"
],
"properties": {
"bay": {
"anyOf": [
{
"type": "object",
"required": [
"bay_id",
"name",
"where",
"kind",
"lat",
"lon",
"url",
"map_url",
"nights",
"line",
"by_direction",
"boats_by_size_and_type",
"boats_not_given",
"day_stops",
"swell_by_direction",
"nearby"
],
"properties": {
"lat": {
"type": "number"
},
"lon": {
"type": "number"
},
"url": {
"type": "string"
},
"kind": {
"type": [
"string",
"null"
]
},
"line": {
"type": [
"string",
"null"
],
"description": "The line under the place's name on the site."
},
"name": {
"type": [
"string",
"null"
]
},
"where": {
"type": "object",
"required": [
"country",
"region",
"county",
"area"
],
"properties": {
"area": {
"type": [
"string",
"null"
]
},
"county": {
"type": [
"string",
"null"
]
},
"region": {
"type": [
"string",
"null"
]
},
"country": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
},
"bay_id": {
"type": "string"
},
"nearby": {
"type": "array",
"items": {
"type": "object",
"required": [
"bay_id",
"name",
"distance",
"nights",
"url",
"map_url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": [
"string",
"null"
]
},
"bay_id": {
"type": "string"
},
"nights": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"map_url": {
"type": "string",
"description": "The site's map opened on this place."
},
"distance": {
"type": "string",
"description": "How far and which way, as the site writes it (e.g. 0.5 NM SW)."
}
},
"additionalProperties": false
}
},
"nights": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Nights boats stayed here: the site's number."
},
"map_url": {
"type": "string",
"description": "The site's map opened on this place."
},
"day_stops": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"from",
"days",
"days_by_strength",
"windiest"
],
"properties": {
"days": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"from": {
"enum": [
"N",
"NE",
"E",
"SE",
"S",
"SW",
"W",
"NW"
],
"type": "string"
},
"windiest": {
"anyOf": [
{
"type": "object",
"required": [
"kt",
"gust_kt"
],
"properties": {
"kt": {
"type": "number"
},
"gust_kt": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"days_by_strength": {
"anyOf": [
{
"type": "object",
"required": [
"under_10_kt",
"from_10_to_20_kt",
"from_20_kt"
],
"properties": {
"from_20_kt": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"under_10_kt": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"from_10_to_20_kt": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"by_direction": {
"type": "array",
"items": {
"type": "object",
"required": [
"from",
"nights",
"nights_by_strength",
"boats",
"windiest_night"
],
"properties": {
"from": {
"enum": [
"N",
"NE",
"E",
"SE",
"S",
"SW",
"W",
"NW"
],
"type": "string"
},
"boats": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
{
"type": "null"
}
],
"description": "Different boats, overnight or by day, null under 3."
},
"nights": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"windiest_night": {
"anyOf": [
{
"type": "object",
"required": [
"date",
"kt",
"gust_kt"
],
"properties": {
"kt": {
"type": "number"
},
"date": {
"type": "string"
},
"gust_kt": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"nights_by_strength": {
"anyOf": [
{
"type": "object",
"required": [
"under_10_kt",
"from_10_to_20_kt",
"from_20_kt"
],
"properties": {
"from_20_kt": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"under_10_kt": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"from_10_to_20_kt": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"boats_not_given": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
{
"type": "null"
}
]
},
"swell_by_direction": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"from",
"by_height"
],
"properties": {
"from": {
"enum": [
"N",
"NE",
"E",
"SE",
"S",
"SW",
"W",
"NW"
],
"type": "string"
},
"by_height": {
"type": "array",
"items": {
"type": "object",
"required": [
"min_m",
"nights",
"period_s"
],
"properties": {
"min_m": {
"type": "number"
},
"nights": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"period_s": {
"anyOf": [
{
"type": "object",
"required": [
"min",
"max"
],
"properties": {
"max": {
"type": "number"
},
"min": {
"type": "number"
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"boats_by_size_and_type": {
"anyOf": [
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
{
"type": "null"
}
]
}
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"note": {
"type": [
"string",
"null"
]
},
"source": {
"type": "object",
"required": [
"about"
],
"properties": {
"about": {
"type": "string",
"description": "The page that explains how the figures are known."
}
},
"additionalProperties": false
},
"tonight": {
"anyOf": [
{
"type": "object",
"required": [
"time",
"from",
"mean_kt",
"gust_kt",
"counted_in",
"nights",
"gusts_kt",
"counted_with_swell",
"credit"
],
"properties": {
"from": {
"enum": [
"N",
"NE",
"E",
"SE",
"S",
"SW",
"W",
"NW"
],
"type": "string",
"description": "The forecast wind's compass point."
},
"time": {
"type": "string",
"description": "The night's strongest forecast time on the clock at the place, ISO with its offset."
},
"credit": {
"type": "object",
"required": [
"text",
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://open-meteo.com/"
},
"text": {
"type": "string",
"const": "Weather data by Open-Meteo.com"
}
},
"description": "The forecast's credit. Show its text, linked to its url, wherever this forecast is shown.",
"additionalProperties": false
},
"nights": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Nights boats stayed here in that wind."
},
"gust_kt": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
],
"description": "The forecast gust, whole kt."
},
"mean_kt": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "The forecast mean wind, whole kt."
},
"gusts_kt": {
"anyOf": [
{
"type": "object",
"required": [
"min",
"max"
],
"properties": {
"max": {
"type": "number"
},
"min": {
"type": "number"
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Lowest and highest gust of those nights, kt."
},
"counted_in": {
"type": "object",
"required": [
"from",
"min_kt"
],
"properties": {
"from": {
"anyOf": [
{
"enum": [
"N",
"NE",
"E",
"SE",
"S",
"SW",
"W",
"NW"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Null when the wind asked is under 3 kt: no settled direction, so every night counts, as on the site."
},
"min_kt": {
"type": "number"
}
},
"description": "The wind its nights are counted in: its compass point at 10 or 20 kt or more, as its band; no point under 3 kt.",
"additionalProperties": false
},
"counted_with_swell": {
"anyOf": [
{
"type": "object",
"required": [
"from",
"min_m"
],
"properties": {
"from": {
"enum": [
"N",
"NE",
"E",
"SE",
"S",
"SW",
"W",
"NW"
],
"type": "string"
},
"min_m": {
"type": "number"
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "The forecast swell those nights are counted with, as on the site: its compass point and the height it is counted from, m (0.5, 1.25 or 2.5 m or more). Null: the wind alone (a sheltered place, or the swell there under 0.5 m)."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Tonight at this place, null when the forecast isn't available or for candidates."
},
"candidates": {
"type": "array",
"items": {
"type": "object",
"required": [
"bay_id",
"name",
"where",
"distance",
"url",
"map_url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"where": {
"type": [
"string",
"null"
]
},
"bay_id": {
"type": "string"
},
"map_url": {
"type": "string",
"description": "The site's map opened on this place."
},
"distance": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}{
"title": "Get what boats did at one place",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_climatology — Get the wind through the year at a place
Wind through the year at a place, as its page shows it: for each month, the nights whose strongest hour reached 20 kt and 30 kt, each year's fewest and most of them, the commonest directions of the nights of 20 kt or more, and the strongest gust, over ten years, for the area round the place. The first call for an area can answer preparing, then ready a few minutes later.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"bay_id"
],
"properties": {
"month": {
"type": "integer",
"maximum": 12,
"minimum": 1,
"description": "One month, 1 (January) to 12 (December). Every month when left out."
},
"bay_id": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The place's id, as find_anchorages gives it."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"bay_id",
"name",
"status",
"years",
"source",
"months",
"note"
],
"properties": {
"name": {
"type": [
"string",
"null"
]
},
"note": {
"type": [
"string",
"null"
]
},
"years": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
{
"type": "null"
}
],
"description": "How many years the wind through the year covers."
},
"bay_id": {
"type": "string"
},
"months": {
"type": "array",
"items": {
"type": "object",
"required": [
"month",
"nights_20_kt_or_more",
"nights_30_kt_or_more",
"each_year_20_kt_or_more",
"each_year_30_kt_or_more",
"mostly_from",
"strongest_gust"
],
"properties": {
"month": {
"type": "integer",
"maximum": 12,
"minimum": 1
},
"mostly_from": {
"type": "array",
"items": {
"enum": [
"N",
"NE",
"E",
"SE",
"S",
"SW",
"W",
"NW"
],
"type": "string"
},
"description": "The commonest directions of the nights of 20 kt or more, at most two."
},
"strongest_gust": {
"anyOf": [
{
"type": "object",
"required": [
"kt",
"night"
],
"properties": {
"kt": {
"type": "number"
},
"night": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"nights_20_kt_or_more": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"nights_30_kt_or_more": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"each_year_20_kt_or_more": {
"anyOf": [
{
"type": "object",
"required": [
"min",
"max"
],
"properties": {
"max": {
"type": "number"
},
"min": {
"type": "number"
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Each year's fewest and most nights of 20 kt or more in this month."
},
"each_year_30_kt_or_more": {
"anyOf": [
{
"type": "object",
"required": [
"min",
"max"
],
"properties": {
"max": {
"type": "number"
},
"min": {
"type": "number"
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Each year's fewest and most nights of 30 kt or more in this month."
}
},
"additionalProperties": false
}
},
"source": {
"type": "object",
"required": [
"about"
],
"properties": {
"about": {
"type": "string",
"description": "The page that explains how the figures are known."
}
},
"additionalProperties": false
},
"status": {
"enum": [
"ready",
"preparing",
"off"
],
"type": "string"
}
},
"additionalProperties": false
}{
"title": "Get the wind through the year at a place",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_regions — List countries, regions and cruising areas
The site's directory of places where boats stayed the night. Without a country: each country with its number of places. With a country (directory slug or ISO code): its regions and cruising areas with their number of places. Each with the address of its directory page.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"country": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "A country's directory slug (new-zealand) or ISO 3166 two-letter code (NZ). Every country when left out."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"countries",
"country",
"regions",
"areas",
"note",
"source"
],
"properties": {
"note": {
"type": [
"string",
"null"
]
},
"areas": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug",
"name",
"places",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"places": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"additionalProperties": false
}
},
"source": {
"type": "object",
"required": [
"about"
],
"properties": {
"about": {
"type": "string",
"description": "The page that explains how the figures are known."
}
},
"additionalProperties": false
},
"country": {
"anyOf": [
{
"type": "object",
"required": [
"slug",
"name",
"places",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"places": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"regions": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug",
"name",
"places",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"places": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"additionalProperties": false
}
},
"countries": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug",
"name",
"places",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"places": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}{
"title": "List countries, regions and cruising areas",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
Not advertised
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 733 ms
- 95th percentile latency
- 733 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 733 ms · metadata changed · 4 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http where-boats-anchor-mcp https://whereboatsanchor.com/mcpCodex
codex mcp add where-boats-anchor-mcp --url https://whereboatsanchor.com/mcpCursor
{
"mcpServers": {
"where-boats-anchor-mcp": {
"url": "https://whereboatsanchor.com/mcp"
}
}
}Cline
{
"mcpServers": {
"where-boats-anchor-mcp": {
"type": "streamableHttp",
"url": "https://whereboatsanchor.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"where-boats-anchor-mcp": {
"type": "http",
"url": "https://whereboatsanchor.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http where-boats-anchor-mcp https://whereboatsanchor.com/mcpClaude Desktop
{
"mcpServers": {
"where-boats-anchor-mcp": {
"url": "https://whereboatsanchor.com/mcp"
}
}
}Windsurf
{
"mcpServers": {
"where-boats-anchor-mcp": {
"serverUrl": "https://whereboatsanchor.com/mcp"
}
}
}Let your agent find its tools
Find servers like Where Boats Anchor MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other data and analytics servers
Do you run Where Boats Anchor MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.