77from mcp .server .fastmcp import FastMCP
88
99
10- __version__ = "0.0.8"
10+ __version__ = "0.0.9"
11+
12+ # Type alias for functions that return data from garth.connectapi
13+ ConnectAPIResponse = str | dict | list | int | float | bool | None
1114
1215server = FastMCP ("Garth - Garmin Connect" , dependencies = ["garth" ])
1316
@@ -154,7 +157,7 @@ def daily_sleep(
154157@requires_garth_session
155158def get_activities (
156159 start_date : str | None = None , limit : int | None = None
157- ) -> str | dict | None :
160+ ) -> ConnectAPIResponse :
158161 """
159162 Get list of activities from Garmin Connect.
160163 start_date: Start date for activities (YYYY-MM-DD format)
@@ -174,7 +177,7 @@ def get_activities(
174177
175178@server .tool ()
176179@requires_garth_session
177- def get_activities_by_date (date : str ) -> str | dict | None :
180+ def get_activities_by_date (date : str ) -> ConnectAPIResponse :
178181 """
179182 Get activities for a specific date from Garmin Connect.
180183 date: Date for activities (YYYY-MM-DD format)
@@ -184,7 +187,7 @@ def get_activities_by_date(date: str) -> str | dict | None:
184187
185188@server .tool ()
186189@requires_garth_session
187- def get_activity_details (activity_id : str ) -> str | dict | None :
190+ def get_activity_details (activity_id : str ) -> ConnectAPIResponse :
188191 """
189192 Get detailed information for a specific activity.
190193 activity_id: Garmin Connect activity ID
@@ -194,7 +197,7 @@ def get_activity_details(activity_id: str) -> str | dict | None:
194197
195198@server .tool ()
196199@requires_garth_session
197- def get_activity_splits (activity_id : str ) -> str | dict | None :
200+ def get_activity_splits (activity_id : str ) -> ConnectAPIResponse :
198201 """
199202 Get lap/split data for a specific activity.
200203 activity_id: Garmin Connect activity ID
@@ -204,7 +207,7 @@ def get_activity_splits(activity_id: str) -> str | dict | None:
204207
205208@server .tool ()
206209@requires_garth_session
207- def get_activity_weather (activity_id : str ) -> str | dict | None :
210+ def get_activity_weather (activity_id : str ) -> ConnectAPIResponse :
208211 """
209212 Get weather data for a specific activity.
210213 activity_id: Garmin Connect activity ID
@@ -214,7 +217,7 @@ def get_activity_weather(activity_id: str) -> str | dict | None:
214217
215218@server .tool ()
216219@requires_garth_session
217- def get_body_composition (date : str | None = None ) -> str | dict | None :
220+ def get_body_composition (date : str | None = None ) -> ConnectAPIResponse :
218221 """
219222 Get body composition data from Garmin Connect.
220223 date: Date for body composition data (YYYY-MM-DD format), if not provided returns latest
@@ -228,7 +231,7 @@ def get_body_composition(date: str | None = None) -> str | dict | None:
228231
229232@server .tool ()
230233@requires_garth_session
231- def get_respiration_data (date : str ) -> str | dict | None :
234+ def get_respiration_data (date : str ) -> ConnectAPIResponse :
232235 """
233236 Get respiration data from Garmin Connect.
234237 date: Date for respiration data (YYYY-MM-DD format)
@@ -238,7 +241,7 @@ def get_respiration_data(date: str) -> str | dict | None:
238241
239242@server .tool ()
240243@requires_garth_session
241- def get_spo2_data (date : str ) -> str | dict | None :
244+ def get_spo2_data (date : str ) -> ConnectAPIResponse :
242245 """
243246 Get SpO2 (blood oxygen) data from Garmin Connect.
244247 date: Date for SpO2 data (YYYY-MM-DD format)
@@ -248,7 +251,7 @@ def get_spo2_data(date: str) -> str | dict | None:
248251
249252@server .tool ()
250253@requires_garth_session
251- def get_blood_pressure (date : str ) -> str | dict | None :
254+ def get_blood_pressure (date : str ) -> ConnectAPIResponse :
252255 """
253256 Get blood pressure readings from Garmin Connect.
254257 date: Date for blood pressure data (YYYY-MM-DD format)
@@ -258,7 +261,7 @@ def get_blood_pressure(date: str) -> str | dict | None:
258261
259262@server .tool ()
260263@requires_garth_session
261- def get_devices () -> str | dict | None :
264+ def get_devices () -> ConnectAPIResponse :
262265 """
263266 Get connected devices from Garmin Connect.
264267 """
@@ -267,7 +270,7 @@ def get_devices() -> str | dict | None:
267270
268271@server .tool ()
269272@requires_garth_session
270- def get_device_settings (device_id : str ) -> str | dict | None :
273+ def get_device_settings (device_id : str ) -> ConnectAPIResponse :
271274 """
272275 Get settings for a specific device.
273276 device_id: Device ID from Garmin Connect
@@ -279,7 +282,7 @@ def get_device_settings(device_id: str) -> str | dict | None:
279282
280283@server .tool ()
281284@requires_garth_session
282- def get_gear () -> str | dict | None :
285+ def get_gear () -> ConnectAPIResponse :
283286 """
284287 Get gear information from Garmin Connect.
285288 """
@@ -288,7 +291,7 @@ def get_gear() -> str | dict | None:
288291
289292@server .tool ()
290293@requires_garth_session
291- def get_gear_stats (gear_uuid : str ) -> str | dict | None :
294+ def get_gear_stats (gear_uuid : str ) -> ConnectAPIResponse :
292295 """
293296 Get usage statistics for specific gear.
294297 gear_uuid: UUID of the gear item
@@ -298,7 +301,7 @@ def get_gear_stats(gear_uuid: str) -> str | dict | None:
298301
299302@server .tool ()
300303@requires_garth_session
301- def get_connectapi_endpoint (endpoint : str ) -> str | dict | None :
304+ def get_connectapi_endpoint (endpoint : str ) -> ConnectAPIResponse :
302305 """
303306 Get the data from a given Garmin Connect API endpoint.
304307 This is a generic tool that can be used to get data from any Garmin Connect API endpoint.
@@ -367,7 +370,7 @@ def daily_intensity_minutes(
367370
368371@server .tool ()
369372@requires_garth_session
370- def monthly_activity_summary (month : int , year : int ) -> str | dict | None :
373+ def monthly_activity_summary (month : int , year : int ) -> ConnectAPIResponse :
371374 """
372375 Get the monthly activity summary for a given month and year.
373376 """
@@ -376,7 +379,7 @@ def monthly_activity_summary(month: int, year: int) -> str | dict | None:
376379
377380@server .tool ()
378381@requires_garth_session
379- def snapshot (from_date : date , to_date : date ) -> str | dict | None :
382+ def snapshot (from_date : date , to_date : date ) -> ConnectAPIResponse :
380383 """
381384 Get the snapshot for a given date range. This is a good starting point for
382385 getting data for a given date range. It can be used in combination with
0 commit comments