Récupérer les activités Strava
strava_get_activitiesGet a list of recent Strava activities including distance, time, pace, and heart rate. Filter by activity type or date range to control how many activities to fetch.
Instructions
Récupère la liste des activités récentes de l'athlète avec distance, temps, allure et fréquence cardiaque.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Nombre de jours passés à récupérer (défaut : 90) | |
| activity_type | No | Filtrer par type d'activité | All |
| max_results | No | Nombre maximum d'activités à retourner |
Implementation Reference
- src/strava/activityTools.ts:37-64 (handler)The handler function for strava_get_activities. It takes input params (days, activity_type, max_results), calls listActivities, filters by type, formats results with distance/duration/pace/HR, and returns text content.
async ({ days, activity_type, max_results }) => { const afterEpoch = Math.floor(Date.now() / 1000) - days * 86400; const activities = await listActivities({ after: afterEpoch, per_page: max_results }); const filtered = activity_type === "All" ? activities : activities.filter((a) => a.type === activity_type); const summary = filtered.map((a) => ({ id: a.id, name: a.name, date: a.start_date.slice(0, 10), type: a.type, distance_km: metersToKm(a.distance), duration: formatDuration(a.moving_time), pace: a.distance > 0 ? formatPace(a.average_speed) : "N/A", elevation_m: Math.round(a.total_elevation_gain), avg_hr: a.average_heartrate ?? null, trainer: a.trainer, })); return { content: [ { type: "text", text: `${filtered.length} activité(s) trouvée(s) sur les ${days} derniers jours :\n\n${JSON.stringify(summary, null, 2)}`, }, ], }; } - src/strava/activityTools.ts:12-35 (schema)Input schema for strava_get_activities. Defines three optional fields: days (1-365, default 90), activity_type (Run|Ride|Swim|Walk|All, default All), and max_results (1-200, default 30).
{ title: "Récupérer les activités Strava", description: "Récupère la liste des activités récentes de l'athlète avec distance, temps, allure et fréquence cardiaque.", inputSchema: z.object({ days: z .number() .int() .min(1) .max(365) .default(90) .describe("Nombre de jours passés à récupérer (défaut : 90)"), activity_type: z .enum(["Run", "Ride", "Swim", "Walk", "All"]) .default("All") .describe("Filtrer par type d'activité"), max_results: z .number() .int() .min(1) .max(200) .default(30) .describe("Nombre maximum d'activités à retourner"), }), - src/strava/activityTools.ts:10-65 (registration)Registration of the strava_get_activities tool via server.registerTool(), within the registerActivityTools function.
server.registerTool( "strava_get_activities", { title: "Récupérer les activités Strava", description: "Récupère la liste des activités récentes de l'athlète avec distance, temps, allure et fréquence cardiaque.", inputSchema: z.object({ days: z .number() .int() .min(1) .max(365) .default(90) .describe("Nombre de jours passés à récupérer (défaut : 90)"), activity_type: z .enum(["Run", "Ride", "Swim", "Walk", "All"]) .default("All") .describe("Filtrer par type d'activité"), max_results: z .number() .int() .min(1) .max(200) .default(30) .describe("Nombre maximum d'activités à retourner"), }), }, async ({ days, activity_type, max_results }) => { const afterEpoch = Math.floor(Date.now() / 1000) - days * 86400; const activities = await listActivities({ after: afterEpoch, per_page: max_results }); const filtered = activity_type === "All" ? activities : activities.filter((a) => a.type === activity_type); const summary = filtered.map((a) => ({ id: a.id, name: a.name, date: a.start_date.slice(0, 10), type: a.type, distance_km: metersToKm(a.distance), duration: formatDuration(a.moving_time), pace: a.distance > 0 ? formatPace(a.average_speed) : "N/A", elevation_m: Math.round(a.total_elevation_gain), avg_hr: a.average_heartrate ?? null, trainer: a.trainer, })); return { content: [ { type: "text", text: `${filtered.length} activité(s) trouvée(s) sur les ${days} derniers jours :\n\n${JSON.stringify(summary, null, 2)}`, }, ], }; } ); - src/strava/activities.ts:4-12 (helper)The listActivities function called by the handler. Makes an HTTP GET to /athlete/activities via the Strava client with pagination and date filtering.
export async function listActivities(params: { before?: number; after?: number; page?: number; per_page?: number; }): Promise<StravaActivity[]> { const { data } = await stravaClient.get<StravaActivity[]>("/athlete/activities", { params }); return data; } - src/index.ts:15-18 (registration)Where registerActivityTools is called from the main entry point, connecting the tool to the MCP server.
registerActivityTools(server); registerAnalysisTools(server); registerPredictionTools(server); registerPlanTools(server);