get_calendar
Retrieve workout calendar entries for a specified year and month. Optionally filter by day for detailed view.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| month | Yes | ||
| day | No | ||
| start | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- The @mcp.tool decorated handler function for 'get_calendar'. Takes year, month, optional day, and start params, validates them, and calls the Garmin calendar API (month or week view).
@mcp.tool def get_calendar(year: int, month: int, day: int | None = None, start: int = 1) -> dict: if not 1900 <= year <= 2100: raise ValueError(f"Year must be between 1900 and 2100, got {year}") if not 1 <= month <= 12: raise ValueError(f"Month must be between 1 and 12, got {month}") if day is not None and not 1 <= day <= 31: raise ValueError(f"Day must be between 1 and 31, got {day}") garmin_month = month - 1 if day is None: endpoint = CALENDAR_MONTH_ENDPOINT.format(year=year, month=garmin_month) view_type = "month" else: endpoint = CALENDAR_WEEK_ENDPOINT.format(year=year, month=garmin_month, day=day, start=start) view_type = "week" return { "calendar": _connectapi(endpoint), "view_type": view_type, "period": {"year": year, "month": month, "day": day, "start": start if day else None}, } - Type hints define the input schema: year (int), month (int), optional day (int|None), start (int with default 1). Return type is dict.
def get_calendar(year: int, month: int, day: int | None = None, start: int = 1) -> dict: - src/garmin_workouts_mcp/server.py:173-173 (registration)The @mcp.tool decorator registers 'get_calendar' as an MCP tool with the FastMCP server instance 'mcp'.
@mcp.tool - Endpoint constants used by get_calendar: CALENDAR_WEEK_ENDPOINT and CALENDAR_MONTH_ENDPOINT for the Garmin calendar-service API.
CALENDAR_WEEK_ENDPOINT = "/calendar-service/year/{year}/month/{month}/day/{day}/start/{start}" CALENDAR_MONTH_ENDPOINT = "/calendar-service/year/{year}/month/{month}" - The _connectapi helper function that wraps garth.connectapi, ensuring authentication before making the actual API call.
def _connectapi(endpoint: str, method: str = "GET", **kwargs) -> dict: _ensure_authenticated() return garth.connectapi(endpoint, method=method, **kwargs)