getDistance
Retrieve distance data from Fitbit activity tracking for specified date ranges. Use to access daily, weekly, or monthly distance metrics for fitness analysis and progress monitoring.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date in YYYY-MM-DD format. If not specified, will use today. | |
| period | No | Period for data: 1d, 7d, 30d, 1w, 1m |
Input Schema (JSON Schema)
{
"properties": {
"date": {
"description": "Date in YYYY-MM-DD format. If not specified, will use today.",
"type": "string"
},
"period": {
"description": "Period for data: 1d, 7d, 30d, 1w, 1m",
"type": "string"
}
},
"type": "object"
}
Implementation Reference
- src/server.ts:600-654 (registration)Registration of the 'getDistance' MCP tool, including input schema (date and period parameters) and the handler function that queries the Fitbit API for distance data and returns formatted results.server.tool( "getDistance", { date: z .string() .optional() .describe("Date in YYYY-MM-DD format. If not specified, will use today."), period: z .string() .optional() .describe("Period for data: 1d, 7d, 30d, 1w, 1m"), }, async ({ date, period }) => { try { const formattedDate = formatDate(date); let endpoint = ""; if (period) { endpoint = `/user/-/activities/distance/date/${formattedDate}/${period}.json`; } else { endpoint = `/user/-/activities/distance/date/${formattedDate}/1d.json`; } const data = await makeApiRequest(endpoint); return { content: [ { type: "text", text: JSON.stringify( { date: formattedDate, distance: data["activities-distance"] || [], intraday: data["activities-distance-intraday"] || {}, }, null, 2 ), }, ], }; } catch (error) { return { content: [ { type: "text", text: `Error: ${ error instanceof Error ? error.message : String(error) }`, }, ], isError: true, }; } } );
- src/server.ts:68-73 (helper)Helper function used by getDistance (and other tools) to format the date parameter into YYYY-MM-DD format, defaulting to today.function formatDate(date?: string): string { if (date) return date; const today = new Date(); return today.toISOString().split("T")[0]; // YYYY-MM-DD }
- src/server.ts:44-65 (helper)Shared helper function used by the getDistance handler to make authenticated HTTP requests to the Fitbit API.async function makeApiRequest(endpoint: string): Promise<any> { try { const url = `${baseUrl}${endpoint}`; const response = await fetch(url, { headers: { Authorization: `Bearer ${accessToken}`, Accept: "application/json", }, }); if (!response.ok) { throw new Error( `Fitbit API error: ${response.status} ${response.statusText}` ); } return await response.json(); } catch (error) { console.error(`Error making request to ${endpoint}:`, error); throw error; } }