list_workouts
Retrieve all saved workouts from Garmin Connect. Access structured data for strength training routines and other workout types.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/garmin_workouts_mcp/server.py:80-83 (handler)The list_workouts function decorated with @mcp.tool. It calls _connectapi with the LIST_WORKOUTS_ENDPOINT and returns the result wrapped in a 'workouts' key.
@mcp.tool def list_workouts() -> dict: workouts = _connectapi(LIST_WORKOUTS_ENDPOINT) return {"workouts": workouts} - The _connectapi helper function that list_workouts relies on. It ensures Garmin authentication and then calls garth.connectapi to make the actual HTTP GET request to the endpoint.
def _connectapi(endpoint: str, method: str = "GET", **kwargs) -> dict: _ensure_authenticated() return garth.connectapi(endpoint, method=method, **kwargs) - The _ensure_authenticated helper function that list_workouts depends on via _connectapi. It handles Garmin login using environment variables (GARMIN_EMAIL, GARMIN_PASSWORD).
def _ensure_authenticated() -> None: global _AUTH_READY if _AUTH_READY: return with _AUTH_LOCK: if _AUTH_READY: return email = os.environ.get("GARMIN_EMAIL") password = os.environ.get("GARMIN_PASSWORD") if email or password: if not (email and password): raise RuntimeError( "Garmin credentials are incomplete. Set both GARMIN_EMAIL and GARMIN_PASSWORD." ) try: garth.login(email, password) except Exception as exc: raise RuntimeError( "Failed to authenticate with Garmin using GARMIN_EMAIL and GARMIN_PASSWORD." ) from exc _AUTH_READY = True return raise RuntimeError( "Garmin credentials are required for this tool. Set GARMIN_EMAIL and GARMIN_PASSWORD." ) - src/garmin_workouts_mcp/server.py:80-80 (registration)The @mcp.tool decorator registers list_workouts as a tool with the FastMCP server instance.
@mcp.tool - The LIST_WORKOUTS_ENDPOINT constant pointing to Garmin's API endpoint for listing workouts.
LIST_WORKOUTS_ENDPOINT = "/workout-service/workouts"