Elevation-corrected sun, moon, twilight, solar and tide data for any point on Earth
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Your thirdtrail API key as 'Bearer tt_live_…'. Mint one at https://thirdtrail.life/apis/keys/. The MCP server requires a paid plan; the REST API has a free tier.
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.
Clear-sky Daily Light Integral in mol/m²/day for each day in a range: photosynthetically active radiation integrated from sunrise to sunset. Use it to plan crop growth or supplemental greenhouse lighting; it assumes cloudless skies, so treat it as the ceiling for the site. Pass from and to together for a range of UTC days, or neither for today. Requires an API key on a paid Solar plan.
Latitude in decimal degrees.
Longitude in decimal degrees.
Last UTC day, YYYY-MM-DD. Requires from.
First UTC day, YYYY-MM-DD. Requires to.
Metres above sea level. Supply it when known: at altitude the sun rises measurably earlier than the sea-level answer. Omit only if the elevation is genuinely unknown.
Clear-sky Daily Light Integral in mol/m²/day for each day in a range: photosynthetically active radiation integrated from sunrise to sunset. Use it to plan crop growth or supplemental greenhouse lighting; it assumes cloudless skies, so treat it as the ceiling for the site. Pass from and to together for a range of UTC days, or neither for today. Requires an API key on a paid Solar plan.
| Argument | Type | Description |
|---|---|---|
| to | string | Last UTC day, YYYY-MM-DD. Requires from. |
| lat* | number | Latitude in decimal degrees. |
| lon* | number | Longitude in decimal degrees. |
| from | string | First UTC day, YYYY-MM-DD. Requires to. |
| elevation | number | Metres above sea level. Supply it when known: at altitude the sun rises measurably earlier than the sea-level answer. Omit only if the elevation is genuinely unknown. |
{
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"to": {
"type": "string",
"description": "Last UTC day, YYYY-MM-DD. Requires from."
},
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude in decimal degrees."
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude in decimal degrees."
},
"from": {
"type": "string",
"description": "First UTC day, YYYY-MM-DD. Requires to."
},
"elevation": {
"type": "number",
"maximum": 9000,
"minimum": -500,
"description": "Metres above sea level. Supply it when known: at altitude the sun rises measurably earlier than the sea-level answer. Omit only if the elevation is genuinely unknown."
}
}
}Fajr, sunrise, dhuhr, asr, maghrib and isha for one date at a location, elevation-corrected. Use it for Islamic prayer schedules; for general sunrise, sunset and twilight use get_sun_moon_times. school is required and sets the fajr and isha rules; asr_method picks the shadow rule and defaults to shafi. date defaults to today. Requires an API key on a paid Ephemerides plan.
| Argument | Type | Description |
|---|---|---|
| tz | string | IANA timezone for output timestamps, e.g. Europe/Dublin. Defaults to UTC. |
| lat* | number | Latitude in decimal degrees. |
| lon* | number | Longitude in decimal degrees. |
| date | string | Day as YYYY-MM-DD. Defaults to today. |
| school* | string | Calculation school: mwl (Muslim World League), isna (Islamic Society of North America), egyptian (Egyptian General Authority of Survey), karachi (University of Islamic Sciences, Karachi), uaq (Umm al-Qura, Makkah). |
| elevation | number | Metres above sea level. Supply it when known: at altitude the sun rises measurably earlier than the sea-level answer. Omit only if the elevation is genuinely unknown. |
| asr_method |
The sun's azimuth and altitude through one UTC day, sampled every interval: a list of timestamped positions. Use it for shading studies, PV siting and panel-angle planning; for a single instant use get_solar_position. date defaults to today and interval to 15m. Requires an API key on a paid Solar plan.
| Argument | Type | Description |
|---|---|---|
| lat* | number | Latitude in decimal degrees. |
| lon* | number | Longitude in decimal degrees. |
| date | string | UTC day as YYYY-MM-DD. Defaults to today. |
| interval | string | Sampling step. Defaults to 15m. |
| elevation | number | Metres above sea level. Supply it when known: at altitude the sun rises measurably earlier than the sea-level answer. Omit only if the elevation is genuinely unknown. |
{
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude in decimal degrees."
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude in decimal degrees."
},
"date": {
"type": "string",
"description": "UTC day as YYYY-MM-DD. Defaults to today."
},
"interval": {
"enum": [
"1m",
"5m",
"15m",
"1h",
"1d"
],
"type": "string",
"description": "Sampling step. Defaults to 15m."
},
"elevation": {
"type": "number",
"maximum": 9000,
"minimum": -500,
"description": "Metres above sea level. Supply it when known: at altitude the sun rises measurably earlier than the sea-level answer. Omit only if the elevation is genuinely unknown."
}
}
}The sun's position at one instant: azimuth, altitude, zenith, declination, hour angle and equation of time, plus clear-sky irradiance (GHI, DNI and DHI in W/m²) when include asks for it and the plan covers it. Use it for where the sun is at a given moment; for its track through a whole day use get_solar_path, and for rise and set times use get_sun_moon_times. timestamp defaults to now. Positions are NREL SPA-equivalent on JPL DE421; irradiance comes from the Bird clear-sky model. Requires an API key on a paid Solar plan.
| Argument | Type | Description |
|---|---|---|
| tz | string | IANA timezone for output timestamps, e.g. Europe/Dublin. Defaults to UTC. |
| lat* | number | Latitude in decimal degrees. |
| lon* | number | Longitude in decimal degrees. |
| include | string | position (default) or position,irradiance. |
| elevation | number | Metres above sea level. Supply it when known: at altitude the sun rises measurably earlier than the sea-level answer. Omit only if the elevation is genuinely unknown. |
| timestamp | string | ISO 8601 instant, e.g. 2026-06-21T12:00:00Z. Defaults to now. |
Sunrise, sunset, solar noon, civil, nautical and astronomical twilight, golden and blue hour, moonrise, moonset and moon phase for a location, one entry per day. Use it for any question about when the sun or moon rises, sets or gets dark; for the sun's angle at a given moment use get_solar_position, and for tides alongside the sun use get_tide_window. Pass elevation whenever you know it: it shifts sunrise and sunset at altitude. Defaults: from today, 7 days or the plan's limit if lower. Requires an API key on a paid Ephemerides plan.
| Argument | Type | Description |
|---|---|---|
| tz | string | IANA timezone for output timestamps, e.g. Europe/Dublin. Defaults to UTC. |
| lat* | number | Latitude in decimal degrees. |
| lon* | number | Longitude in decimal degrees. |
| days | integer | Number of days to return. The ceiling is plan-dependent. |
| elevation | number | Metres above sea level. Supply it when known: at altitude the sun rises measurably earlier than the sea-level answer. Omit only if the elevation is genuinely unknown. |
| start_date | string | First day as YYYY-MM-DD. Defaults to today. |
High and low water times and heights at any coastal point, from the FES2022 global tide atlas: a list of events, each with type (high or low), time and height_m. Use it for when high or low tide is; for a continuous curve use get_tide_heights, and for tides together with sunrise, golden hour and moon phase use get_tide_window. Heights are metres relative to MEAN SEA LEVEL, not chart datum — never use for navigation. Defaults: from today, 2 days or the plan's limit if lower. Requires an API key on a paid Tides plan.
| Argument | Type | Description |
|---|---|---|
| tz | string | IANA timezone for output timestamps, e.g. Europe/Dublin. Defaults to UTC. |
| lat* | number | Latitude in decimal degrees. |
| lon* | number | Longitude in decimal degrees. |
| days | integer | Number of days to return. The ceiling is plan-dependent. |
| start_date | string | First day as YYYY-MM-DD. Defaults to today. |
{
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"tz": {
"type": "string",
"description": "IANA timezone for output timestamps, e.g. Europe/Dublin. Defaults to UTC."
},
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude in decimal degrees."
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude in decimal degrees."
},
"days": {
"type": "integer",
"minimum": 1,
"description": "Number of days to return. The ceiling is plan-dependent."
},
"start_date": {
"type": "string",
"description": "First day as YYYY-MM-DD. Defaults to today."
}
}
}Water height at a coastal point at a fixed step: a list of time and height_m pairs. Use it to plot a tide curve or read the height at a particular time; for just the highs and lows use get_tide_extremes. Metres relative to mean sea level, not chart datum. Defaults: from today, 2 days, and the finest step the plan allows, but no finer than 10m. Requires an API key on a paid Tides plan.
| Argument | Type | Description |
|---|---|---|
| tz | string | IANA timezone for output timestamps, e.g. Europe/Dublin. Defaults to UTC. |
| lat* | number | Latitude in decimal degrees. |
| lon* | number | Longitude in decimal degrees. |
| days | integer | Number of days to return. The ceiling is plan-dependent. |
| step | string | Sampling interval. Finer steps need a higher plan. |
| start_date | string | First day as YYYY-MM-DD. Defaults to today. |
{
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"tz": {
"type": "string",
"description": "IANA timezone for output timestamps, e.g. Europe/Dublin. Defaults to UTC."
},
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude in decimal degrees."
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude in decimal degrees."
},
"days": {
"type": "integer",
"minimum": 1,
"description": "Number of days to return. The ceiling is plan-dependent."
},
"step": {
"enum": [
"1m",
"5m",
"10m",
"15m",
"30m",
"1h"
],
"type": "string",
"description": "Sampling interval. Finer steps need a higher plan."
},
"start_date": {
"type": "string",
"description": "First day as YYYY-MM-DD. Defaults to today."
}
}
}Per day: high and low waters together with sunrise, sunset, golden and blue hour, twilight and moon phase in a single call. The planning tool for coastal photography, fishing and shore work; use it instead of calling get_tide_extremes and get_sun_moon_times separately. Pass elevation when you know it: it shifts the sun and moon times — roughly three minutes at clifftop height — but never the tide heights, which do not depend on where the observer stands. Defaults: from today, 2 days or the plan's limit if lower. Requires an API key on a paid Tides plan.
| Argument | Type | Description |
|---|---|---|
| tz | string | IANA timezone for output timestamps, e.g. Europe/Dublin. Defaults to UTC. |
| lat* | number | Latitude in decimal degrees. |
| lon* | number | Longitude in decimal degrees. |
| days | integer | Number of days to return. The ceiling is plan-dependent. |
| elevation | number | Metres above sea level. Supply it when known: at altitude the sun rises measurably earlier than the sea-level answer. Omit only if the elevation is genuinely unknown. |
| start_date | string | First day as YYYY-MM-DD. Defaults to today. |
| string |
| Asr shadow rule: shafi (default; also Maliki and Hanbali) or hanafi, which gives a later Asr. |
{
"type": "object",
"required": [
"lat",
"lon",
"school"
],
"properties": {
"tz": {
"type": "string",
"description": "IANA timezone for output timestamps, e.g. Europe/Dublin. Defaults to UTC."
},
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude in decimal degrees."
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude in decimal degrees."
},
"date": {
"type": "string",
"description": "Day as YYYY-MM-DD. Defaults to today."
},
"school": {
"enum": [
"egyptian",
"isna",
"karachi",
"mwl",
"uaq"
],
"type": "string",
"description": "Calculation school: mwl (Muslim World League), isna (Islamic Society of North America), egyptian (Egyptian General Authority of Survey), karachi (University of Islamic Sciences, Karachi), uaq (Umm al-Qura, Makkah)."
},
"elevation": {
"type": "number",
"maximum": 9000,
"minimum": -500,
"description": "Metres above sea level. Supply it when known: at altitude the sun rises measurably earlier than the sea-level answer. Omit only if the elevation is genuinely unknown."
},
"asr_method": {
"enum": [
"hanafi",
"shafi"
],
"type": "string",
"description": "Asr shadow rule: shafi (default; also Maliki and Hanbali) or hanafi, which gives a later Asr."
}
}
}{
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"tz": {
"type": "string",
"description": "IANA timezone for output timestamps, e.g. Europe/Dublin. Defaults to UTC."
},
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude in decimal degrees."
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude in decimal degrees."
},
"include": {
"enum": [
"position",
"position,irradiance"
],
"type": "string",
"description": "position (default) or position,irradiance."
},
"elevation": {
"type": "number",
"maximum": 9000,
"minimum": -500,
"description": "Metres above sea level. Supply it when known: at altitude the sun rises measurably earlier than the sea-level answer. Omit only if the elevation is genuinely unknown."
},
"timestamp": {
"type": "string",
"description": "ISO 8601 instant, e.g. 2026-06-21T12:00:00Z. Defaults to now."
}
}
}{
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"tz": {
"type": "string",
"description": "IANA timezone for output timestamps, e.g. Europe/Dublin. Defaults to UTC."
},
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude in decimal degrees."
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude in decimal degrees."
},
"days": {
"type": "integer",
"minimum": 1,
"description": "Number of days to return. The ceiling is plan-dependent."
},
"elevation": {
"type": "number",
"maximum": 9000,
"minimum": -500,
"description": "Metres above sea level. Supply it when known: at altitude the sun rises measurably earlier than the sea-level answer. Omit only if the elevation is genuinely unknown."
},
"start_date": {
"type": "string",
"description": "First day as YYYY-MM-DD. Defaults to today."
}
}
}{
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"tz": {
"type": "string",
"description": "IANA timezone for output timestamps, e.g. Europe/Dublin. Defaults to UTC."
},
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude in decimal degrees."
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude in decimal degrees."
},
"days": {
"type": "integer",
"minimum": 1,
"description": "Number of days to return. The ceiling is plan-dependent."
},
"elevation": {
"type": "number",
"maximum": 9000,
"minimum": -500,
"description": "Metres above sea level. Supply it when known: at altitude the sun rises measurably earlier than the sea-level answer. Omit only if the elevation is genuinely unknown."
},
"start_date": {
"type": "string",
"description": "First day as YYYY-MM-DD. Defaults to today."
}
}
}