getSleepLogs
Retrieve sleep log data from Fitbit for a specific date to analyze sleep patterns and duration.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date in YYYY-MM-DD format. If not specified, will use today. |
Input Schema (JSON Schema)
{
"properties": {
"date": {
"description": "Date in YYYY-MM-DD format. If not specified, will use today.",
"type": "string"
}
},
"type": "object"
}
Implementation Reference
- src/server.ts:158-195 (handler)Handler function for the 'getSleepLogs' tool. It formats the optional date parameter, calls the Fitbit sleep API endpoint `/user/-/sleep/date/{date}.json` using the shared makeApiRequest helper, and returns the sleep data and summary as JSON text or an error response.async ({ date }) => { try { const formattedDate = formatDate(date); // Remove period parameter which seems to be causing issues const endpoint = `/user/-/sleep/date/${formattedDate}.json`; const data = await makeApiRequest(endpoint); return { content: [ { type: "text", text: JSON.stringify( { date: formattedDate, sleep: data.sleep || [], summary: data.summary || {}, }, null, 2 ), }, ], }; } catch (error) { return { content: [ { type: "text", text: `Error: ${ error instanceof Error ? error.message : String(error) }`, }, ], isError: true, }; } } );
- src/server.ts:152-157 (schema)Input schema for 'getSleepLogs' tool defined with Zod: optional 'date' string parameter.{ date: z .string() .optional() .describe("Date in YYYY-MM-DD format. If not specified, will use today."), },
- src/server.ts:149-196 (registration)Registration of the 'getSleepLogs' tool on the MCP server using server.tool(), including inline schema and handler.// Register tool for getting sleep logs server.tool( "getSleepLogs", { date: z .string() .optional() .describe("Date in YYYY-MM-DD format. If not specified, will use today."), }, async ({ date }) => { try { const formattedDate = formatDate(date); // Remove period parameter which seems to be causing issues const endpoint = `/user/-/sleep/date/${formattedDate}.json`; const data = await makeApiRequest(endpoint); return { content: [ { type: "text", text: JSON.stringify( { date: formattedDate, sleep: data.sleep || [], summary: data.summary || {}, }, null, 2 ), }, ], }; } catch (error) { return { content: [ { type: "text", text: `Error: ${ error instanceof Error ? error.message : String(error) }`, }, ], isError: true, }; } } );
- src/server.ts:68-72 (helper)Shared helper function to format or default the date to today in YYYY-MM-DD format, used by getSleepLogs and other tools.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 to make authenticated requests to the Fitbit API using the access token, used by getSleepLogs and all other tools.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; } }