Skip to main content
Glama

getBodyMeasurements

Retrieve body measurements from Fitbit data for a specified date or period, including weight, BMI, and body fat percentage.

Input Schema

NameRequiredDescriptionDefault
dateNoDate in YYYY-MM-DD format. If not specified, will use today.
periodNoPeriod for body 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 body data: 1d, 7d, 30d, 1w, 1m", "type": "string" } }, "type": "object" }

Implementation Reference

  • The main handler function for the 'getBodyMeasurements' tool. It fetches weight and body fat data from the Fitbit API using the provided date and optional period, formats the response as a JSON string, and handles errors.
    async ({ date, period }) => { try { const formattedDate = formatDate(date); let endpoint = ""; if (period) { endpoint = `/user/-/body/log/weight/date/${formattedDate}/${period}.json`; } else { endpoint = `/user/-/body/log/weight/date/${formattedDate}.json`; } const weightData = await makeApiRequest(endpoint); // Also get body fat data let fatEndpoint = ""; if (period) { fatEndpoint = `/user/-/body/log/fat/date/${formattedDate}/${period}.json`; } else { fatEndpoint = `/user/-/body/log/fat/date/${formattedDate}.json`; } const fatData = await makeApiRequest(fatEndpoint); return { content: [ { type: "text", text: JSON.stringify( { date: formattedDate, weight: weightData.weight || [], fat: fatData.fat || [], }, null, 2 ), }, ], }; } catch (error) { return { content: [ { type: "text", text: `Error: ${ error instanceof Error ? error.message : String(error) }`, }, ], isError: true, }; } }
  • Zod schema defining the input parameters for the 'getBodyMeasurements' tool: optional date and period strings.
    { date: z .string() .optional() .describe("Date in YYYY-MM-DD format. If not specified, will use today."), period: z .string() .optional() .describe("Period for body data: 1d, 7d, 30d, 1w, 1m"), },
  • src/server.ts:312-377 (registration)
    The MCP server.tool registration call that defines and registers the 'getBodyMeasurements' tool with its schema and handler function.
    server.tool( "getBodyMeasurements", { date: z .string() .optional() .describe("Date in YYYY-MM-DD format. If not specified, will use today."), period: z .string() .optional() .describe("Period for body data: 1d, 7d, 30d, 1w, 1m"), }, async ({ date, period }) => { try { const formattedDate = formatDate(date); let endpoint = ""; if (period) { endpoint = `/user/-/body/log/weight/date/${formattedDate}/${period}.json`; } else { endpoint = `/user/-/body/log/weight/date/${formattedDate}.json`; } const weightData = await makeApiRequest(endpoint); // Also get body fat data let fatEndpoint = ""; if (period) { fatEndpoint = `/user/-/body/log/fat/date/${formattedDate}/${period}.json`; } else { fatEndpoint = `/user/-/body/log/fat/date/${formattedDate}.json`; } const fatData = await makeApiRequest(fatEndpoint); return { content: [ { type: "text", text: JSON.stringify( { date: formattedDate, weight: weightData.weight || [], fat: fatData.fat || [], }, null, 2 ), }, ], }; } catch (error) { return { content: [ { type: "text", text: `Error: ${ error instanceof Error ? error.message : String(error) }`, }, ], isError: true, }; } } );
  • Helper function used by the handler to make authenticated API requests to the Fitbit endpoints.
    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; } }
  • Helper function used to format the date parameter for API calls, 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 }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/NitayRabi/fitbit-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server