thirdtrail について
thirdtrailは、世界各地の太陽、月、薄明、太陽放射照度、潮汐データを取得するPythonクライアントです。標高を考慮した太陽・月の時刻と、APIエラー別の例外を提供します。
主な機能
- 01太陽、月、薄明のデータ
- 02標高補正されたイベント時刻
- 03太陽位置と放射照度のエンドポイント
- 04潮位、満潮・干潮、潮汐ウィンドウ
- 05タイムゾーン付きdatetime結果
- 06一時的な障害とレート制限の再試行
活用シーン
- 01標高を考慮した日の出とゴールデンアワーの計算
- 02太陽放射照度や日積算光量データの取得
- 03潮位と満潮・干潮時刻の確認
MCP 対応
READMEには、同じデータをツールとして公開するMCPサーバーがあると記載されていますが、そのインターフェースは説明されていません。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://thirdtrail.life/mcpclaude mcp add --transport http thirdtrail-thirdtrail https://thirdtrail.life/mcp{"mcpServers":{"thirdtrail-thirdtrail":{"type":"http","url":"https://thirdtrail.life/mcp"}}}Cursor で開く{"servers":{"thirdtrail-thirdtrail":{"type":"http","url":"https://thirdtrail.life/mcp"}}}VS Code で開く{"mcpServers":{"thirdtrail-thirdtrail":{"type":"http","url":"https://thirdtrail.life/mcp"}}}{"mcpServers":{"thirdtrail-thirdtrail":{"serverUrl":"https://thirdtrail.life/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
https://thirdtrail.life/mcp認証が必要ツール
8| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| tz | string | いいえ | 出力タイムスタンプに使用する IANA タイムゾーン。例:Europe/Dublin。デフォルトは UTC です。 |
| lat | number | はい | 十進法の度数で表した緯度。 |
| lon | number | はい | 十進法の度数で表した経度。 |
| days | integer | いいえ | 返す日数。上限はプランによって異なります。 |
| elevation | number | いいえ | 海抜高度(メートル)。分かる場合は指定してください。標高が高い場所では、日の出時刻が海面高度での計算結果より明らかに早くなります。標高が本当に不明な場合に限り、省略してください。 |
| start_date | string | いいえ | YYYY-MM-DD 形式の初日。デフォルトは今日です。 |
詳細
thirdtrail
thirdtrail API 用の Python クライアントです。地球上のあらゆる地点の太陽、月、薄明、日射量、潮汐に対応しています。太陽と月の時刻は、指定した標高を考慮して補正されます。
pip install thirdtrail
from thirdtrail import Client
tt = Client(api_key="tt_live_…")
for day in tt.ephemerides(lat=53.3498, lon=-6.2603, elevation=20):
print(day.date, day.sun.rise, day.sun.set)
標高を考慮する理由
日の出 API の多くは、海面に立つ観測者を基準に回答します。標高が高いほど遠くまで見渡せるため、太陽はより早く地平線から現れます。
モハーの断崖(214 m)では、その差は約 3 分です。日の出、日の入り、ゴールデンアワーとブルーアワーのすべての境界時刻も、それに応じて変わります。
| 海面 | 標高 214 m | |
|---|---|---|
| 日の出 | 07:23:33 | 07:20:25 |
| ゴールデンアワー、午前の開始 | 06:56:51 | 06:53:42 |
| 月の出 | 18:03:48 | 17:59:40 |
ゴールデンアワーは20〜40分続くため、3分は無視できない差です。標高がわかる場合は、必ず elevation を指定してください。
得られるデータ
day.sun.rise # datetime, with its timezone offset intact
day.sun.golden_hour.morning.start
day.moon.phase.name # "Waxing Gibbous"
day.moon.phase.illumination # 0.7376
タイムスタンプは文字列ではなく、タイムゾーン情報付きの datetime オブジェクトとして取得できます。クライアントでモデル化されていないデータも day.raw と day.response から利用できるため、クライアントが対応する前に新しいサーバー側フィールドを使えます。
エンドポイント
tt.ephemerides(lat=…, lon=…, elevation=…, days=7) # sun + moon + twilight
tt.prayer_times(lat=…, lon=…, school="mwl") # five daily prayers
tt.solar(lat=…, lon=…, timestamp=…) # position + irradiance
tt.solar_path(lat=…, lon=…, interval="5m") # the sun's arc, sampled
tt.solar_dli(lat=…, lon=…, from_date=…, to_date=…) # Daily Light Integral
tt.tide_heights(lat=…, lon=…, step="10m") # water height series
tt.tide_extremes(lat=…, lon=…) # high and low waters
tt.tide_window(lat=…, lon=…, elevation=…) # tides + sun + moon
tt.tide_constituents(lat=…, lon=…) # harmonic constants
例外を除き、潮汐データには標高を指定しません
tide_heights と tide_extremes に elevation パラメーターがないのは意図的です。あなたがどれだけ高い場所に立っていても、海面の高さは変わらないためです。標高を渡すと、黙って無視されるのではなく TypeError が発生します。
例外は tide_window です。返されるデータの半分は太陽と月に関するものだからです。
for day in tt.tide_window(lat=52.9715, lon=-9.4309, elevation=214, days=3):
print(day.date, day.sun.golden_hour.morning.start)
for t in day.low_waters:
print(" low water", t.time, t.height_m)
潮位は海図基準面ではなく平均海面を基準としたメートル単位で、気象による高潮は含まれません。航行には使用しないでください。
エラー
失敗の種類ごとに専用の例外クラスがあるため、エラーメッセージを解析せずに、必要な例外を捕捉できます。
from thirdtrail import PlanLimitExceeded
try:
tt.tide_extremes(lat=51.5, lon=-2.7, days=90)
except PlanLimitExceeded as e:
tt.tide_extremes(lat=51.5, lon=-2.7, days=e.limit) # e.limit == 31
AuthenticationError(401)、PermissionDenied(403、契約していないプラン)、PlanLimitExceeded および InvalidRequest(400)、RateLimited(429)、DataUnavailable(503)、ServerError(5xx)があります。すべて ThirdtrailError のサブクラスです。
一時的な障害と429エラーは、バックオフを行って再試行されます。同じリクエストは毎回同じように失敗するため、プランの上限超過は再試行されません。
キー
thirdtrail.life/apis/keys/ で作成してください。
キーは1つのサブスクリプションに紐付いているため、利用できる API は1つです。Tides キーで太陽のエンドポイントを呼び出すと、PermissionDenied が発生します。
すべての API に無料プランがあります。
未対応の機能
このクライアントは、バルク(POST)エンドポイント、iCalendar フィード、Webhook 管理にはまだ対応していません。これらを利用するには、REST API を直接呼び出してください。完全な仕様は OpenAPI 3.1 として公開されています。
AI エージェントを使用していますか?同じデータをツールとして公開する MCP サーバー があります。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。