Koskamo

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.

Where Boats Anchor MCP logo, by Where Boats AnchorVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Where Boats Anchor
MCP endpoint (Streamable HTTP)
https://whereboatsanchor.com/mcp
Vendor documentation

What 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

Vendor evidenceRegistry 1.0.0

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
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Where Boats Anchor answers where boats stayed the night, and in what wind, worldwide. For each place: its nights, its nights in each wind, tonight's forecast with its nights in tonight's winds, and the wind through the year. Not for navigation. This map does not replace official nautical charts.

Tools

4 advertised

find_anchorages — Find anchorages near a position, tonight or in a wind
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

find_anchorages input schema
{
  "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)."
    }
  }
}
find_anchorages output schema
{
  "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
}
find_anchorages annotations
{
  "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
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_bay_evidence input schema
{
  "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)."
    }
  }
}
get_bay_evidence output schema
{
  "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
}
get_bay_evidence annotations
{
  "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
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_climatology input schema
{
  "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."
    }
  }
}
get_climatology output schema
{
  "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
}
get_climatology annotations
{
  "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
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

list_regions input schema
{
  "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."
    }
  }
}
list_regions output schema
{
  "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
}
list_regions annotations
{
  "title": "List countries, regions and cruising areas",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

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.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http where-boats-anchor-mcp https://whereboatsanchor.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add where-boats-anchor-mcp --url https://whereboatsanchor.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable where-boats-anchor-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "where-boats-anchor-mcp": {
      "url": "https://whereboatsanchor.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "where-boats-anchor-mcp": {
      "type": "streamableHttp",
      "url": "https://whereboatsanchor.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start where-boats-anchor-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "where-boats-anchor-mcp": {
      "type": "http",
      "url": "https://whereboatsanchor.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http where-boats-anchor-mcp https://whereboatsanchor.com/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "where-boats-anchor-mcp": {
      "url": "https://whereboatsanchor.com/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.

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.

Claim this listing