get_activities_by_date
Search for fitness activities within a date range, with optional filter by activity type like running or cycling.
Instructions
Search activities within a date range, optionally filtered by activity type (running, cycling, etc.)
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| startDate | Yes | Start date in YYYY-MM-DD format | |
| endDate | Yes | End date in YYYY-MM-DD format | |
| activityType | No | Filter by activity type (e.g. running, cycling, swimming) |
Implementation Reference
- src/client/garmin.client.ts:185-211 (handler)Core handler for get_activities_by_date. Makes paginated API calls to Garmin Connect's activity search endpoint, fetching all activities within a date range with optional activity type filter.
async getActivitiesByDate(startDate: string, endDate: string, activityType?: string): Promise<unknown> { const allActivities: unknown[] = []; let start = 0; const pageSize = DEFAULT_ACTIVITIES_BY_DATE_LIMIT; while (true) { const params = new URLSearchParams({ startDate, endDate, start: String(start), limit: String(pageSize), }); if (activityType) params.set('activityType', activityType); const page = await this.request<unknown[]>(`${ACTIVITIES_SEARCH_ENDPOINT}?${params}`); if (!Array.isArray(page) || page.length === 0) break; allActivities.push(...page); if (page.length < pageSize) break; start += pageSize; } return allActivities; } - src/dtos/activities.dto.ts:30-43 (schema)Type definition and Zod validation schema for get_activities_by_date. Defines startDate, endDate (both YYYY-MM-DD strings) and optional activityType.
export type GetActivitiesByDateDto = { startDate: string; endDate: string; activityType?: string; }; export const getActivitiesByDateSchema = z.object({ startDate: dateString.describe('Start date in YYYY-MM-DD format'), endDate: dateString.describe('End date in YYYY-MM-DD format'), activityType: z .string() .optional() .describe('Filter by activity type (e.g. running, cycling, swimming)'), }); - src/tools/activities.tools.ts:27-40 (registration)MCP tool registration for get_activities_by_date. Registers the tool with its description, input schema, and handler that calls client.getActivitiesByDate.
server.registerTool( 'get_activities_by_date', { description: 'Search activities within a date range, optionally filtered by activity type (running, cycling, etc.)', inputSchema: getActivitiesByDateSchema.shape, }, async ({ startDate, endDate, activityType }) => { const data = await client.getActivitiesByDate(startDate, endDate, activityType); return { content: [{ type: 'text' as const, text: JSON.stringify(data, null, 2) }], }; }, ); - src/constants/validations.ts:1-3 (helper)The dateString Zod validator used by the schema, ensuring date values match YYYY-MM-DD format.
import { z } from 'zod'; export const dateString = z.string().regex(/^\d{4}-\d{2}-\d{2}$/, 'Must be YYYY-MM-DD format'); - The API endpoint constant ACTIVITIES_SEARCH_ENDPOINT used by both the client handler and pagination logic.
export const ACTIVITIES_SEARCH_ENDPOINT = '/activitylist-service/activities/search/activities';