Sunrise, sunset, twilight, golden hour and moon times for any place on Earth. Free, no API key.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Sunrise, sunset, solar noon, day length, civil/nautical/astronomical twilight, dawn/dusk, first/last light, golden hour, blue hour, sunrise/sunset azimuth, solar noon altitude, moonrise/moonset, moon phase and illumination for any coordinates on Earth and any date. Times are ISO 8601 in the local timezone of the location. Polar day/night handled via sun_status (normal | midnight_sun | polar_night); events that do not occur are null.
Latitude in decimal degrees.
Longitude in decimal degrees.
IANA timezone like 'Europe/Madrid'. Omit to use the local timezone of the coordinates, resolved automatically (recommended).
'today' (default), 'tomorrow' or YYYY-MM-DD. Relative dates resolve in the local timezone of the coordinates.
Sunrise, sunset, solar noon, day length, civil/nautical/astronomical twilight, dawn/dusk, first/last light, golden hour, blue hour, sunrise/sunset azimuth, solar noon altitude, moonrise/moonset, moon phase and illumination for any coordinates on Earth and any date. Times are ISO 8601 in the local timezone of the location. Polar day/night handled via sun_status (normal | midnight_sun | polar_night); events that do not occur are null.
| Argument | Type | Description |
|---|---|---|
| tz | string | IANA timezone like 'Europe/Madrid'. Omit to use the local timezone of the coordinates, resolved automatically (recommended). |
| lat* | number | Latitude in decimal degrees. |
| lng* | number | Longitude in decimal degrees. |
| date | string | 'today' (default), 'tomorrow' or YYYY-MM-DD. Relative dates resolve in the local timezone of the coordinates. |
{
"type": "object",
"required": [
"lat",
"lng"
],
"properties": {
"tz": {
"type": "string",
"description": "IANA timezone like 'Europe/Madrid'. Omit to use the local timezone of the coordinates, resolved automatically (recommended)."
},
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude in decimal degrees."
},
"lng": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude in decimal degrees."
},
"date": {
"type": "string",
"description": "'today' (default), 'tomorrow' or YYYY-MM-DD. Relative dates resolve in the local timezone of the coordinates."
}
}
}Same per-day data as get_sun_times but for an inclusive date range (up to 366 days) in a single call. Use this instead of repeated get_sun_times calls when you need several consecutive days. The days array may contain fewer entries than the number of dates requested: calendar days that never existed in that timezone (Samoa skipped 30 December 2011 when it crossed the date line) are left out, so read each entry's date field instead of assuming one per requested date.
| Argument | Type | Description |
|---|---|---|
| tz | string | IANA timezone like 'Europe/Madrid'. Omit to use the local timezone of the coordinates, resolved automatically (recommended). |
| lat* | number | Latitude in decimal degrees. |
| lng* | number | Longitude in decimal degrees. |
| date_end* | string | Last day (inclusive), YYYY-MM-DD. The range covers at most 366 days counting both ends, so date_end can be at most 365 days after date_start. |
| date_start* | string | First day, YYYY-MM-DD. |
{
"type": "object",
"required": [
"lat",
"lng",
"date_start",
"date_end"
],
"properties": {
"tz": {
"type": "string",
"description": "IANA timezone like 'Europe/Madrid'. Omit to use the local timezone of the coordinates, resolved automatically (recommended)."
},
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude in decimal degrees."
},
"lng": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude in decimal degrees."
},
"date_end": {
"type": "string",
"description": "Last day (inclusive), YYYY-MM-DD. The range covers at most 366 days counting both ends, so date_end can be at most 365 days after date_start."
},
"date_start": {
"type": "string",
"description": "First day, YYYY-MM-DD."
}
}
}