Skip to content

Commit 0d12c5c

Browse files
felipao-mxmatin
andauthored
Fix activities return type hint (#14)
* add list to get_activities return type * pre-release * add aliased type for raw response endpoints * version * bump version * Expand ConnectAPIResponse type alias * Remove unused import from __init__.py Removed unused import of Union from typing. --------- Co-authored-by: matin <[email protected]>
1 parent 63fe720 commit 0d12c5c

File tree

1 file changed

+20
-17
lines changed

1 file changed

+20
-17
lines changed

src/garth_mcp_server/__init__.py

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@
77
from 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

1215
server = FastMCP("Garth - Garmin Connect", dependencies=["garth"])
1316

@@ -154,7 +157,7 @@ def daily_sleep(
154157
@requires_garth_session
155158
def 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

Comments
 (0)