getCalories
Retrieve calorie burn data from Fitbit for specified dates or periods to track energy expenditure and support fitness goals.
Input Schema
TableJSON 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 |
Implementation Reference
- src/server.ts:669-710 (handler)Handler function that constructs Fitbit API endpoint for calories data based on date and period, fetches data using makeApiRequest, and returns formatted JSON response or error.async ({ date, period }) => { try { const formattedDate = formatDate(date); let endpoint = ""; if (period) { endpoint = `/user/-/activities/calories/date/${formattedDate}/${period}.json`; } else { endpoint = `/user/-/activities/calories/date/${formattedDate}/1d.json`; } const data = await makeApiRequest(endpoint); return { content: [ { type: "text", text: JSON.stringify( { date: formattedDate, calories: data["activities-calories"] || [], intraday: data["activities-calories-intraday"] || {}, }, null, 2 ), }, ], }; } catch (error) { return { content: [ { type: "text", text: `Error: ${ error instanceof Error ? error.message : String(error) }`, }, ], isError: true, }; } }
- src/server.ts:659-668 (schema)Zod input schema for the getCalories tool defining optional date and period parameters.{ 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"), },
- src/server.ts:657-711 (registration)Registration of the getCalories tool on the MCP server, including name, input schema, and handler function.server.tool( "getCalories", { 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/calories/date/${formattedDate}/${period}.json`; } else { endpoint = `/user/-/activities/calories/date/${formattedDate}/1d.json`; } const data = await makeApiRequest(endpoint); return { content: [ { type: "text", text: JSON.stringify( { date: formattedDate, calories: data["activities-calories"] || [], intraday: data["activities-calories-intraday"] || {}, }, null, 2 ), }, ], }; } catch (error) { return { content: [ { type: "text", text: `Error: ${ error instanceof Error ? error.message : String(error) }`, }, ], isError: true, }; } } );