Your Fitbit data, in every AI chat
Ask Claude, ChatGPT or Grok about your sleep, steps, heart rate and weight. A private MCP server for the Google Health API that runs on your own Vercel.
/mcp
How did I sleep, and how active was I yesterday?
get_daily_summarySteps, calories, heart rate
get_data_pointsSleep stages for last night
You slept 7 h 12 min with 1 h 34 min of deep and REM sleep. Yesterday you walked 8,214 steps and your resting heart rate was 61 bpm.
Read-only by design
It only asks Google for read access, so it can never change or delete your data. An access token keeps everyone else out.
Works with any MCP app
Claude on web, desktop and phone, Claude Code, ChatGPT, Grok, and anything that speaks the Model Context Protocol.
35 kinds of health data
Sleep stages, steps, heart rate, HRV, SpO2, weight, workouts and more from Fitbit and Pixel Watch.
Ready to connect
Copy your server address, then add it to the AI apps you use.
Copy your server address
Paste it into your AI app and click Connect. You'll type your access token (MCP_HTTP_TOKEN) on your server's own page.
/mcpGoogle account
New deploy? This page walks you through the Google setup. Otherwise you only need it again if Google ends the sign-in, for example after a password change.
Sign in with GoogleAdd it to any AI app
Paste your server address, click Connect, and type your access token on the page that opens. That's it.
Add a custom connector (some apps call it an MCP server) with your server address. The app opens a sign-in page on your own server, which asks for your access token (MCP_HTTP_TOKEN). Type it there and click Allow access. The token never goes into a chat, a URL or the app's settings.
In Claude it's Settings → Connectors → Add custom connector, and it then works in the desktop and phone apps too. In ChatGPT, turn on Developer mode under Settings → Apps & Connectors and choose OAuth. In Grok, use grok.com/connectors. In Claude Code, run the command shown, then /mcp → Authenticate.
Apps without sign-in support can send the token as a header or with ?key= instead.
Server address (all you need) /mcp Claude Code claude mcp add --transport http -s user google-health /mcp Fallback: header Authorization: Bearer YOUR_TOKEN Fallback: URL only /mcp?key=YOUR_TOKEN
What your AI can read
Eight tools, all read-only.
get_daily_summaryOne day at a glance: steps, distance, calories, Active Zone Minutes, resting heart rate, HRV, sleep and workouts.get_daily_rollupTrends per day or week, up to 90 days.get_rollupHour-by-hour values, such as heart rate during a run.get_data_pointsRaw records: sleep stages, workouts, weight, SpO2, HRV.get_exercise_routeA GPS workout's distance, pace, elevation and heart rate. Map points only on request, never near the start or finish.get_user_infoProfile, units, time zone and goals.list_paired_devicesYour devices, battery level and last sync.list_data_typesEvery readable data type and what it supports.Troubleshooting
The common fixes.
"Not signed in"
Use Sign in with Google. You only need it again if Google ends the sign-in.
"Unauthorized" or "credential rejected"
The token in your app is wrong or was changed. Update it in the app's connector settings.
No data for today
Open the Fitbit app so your tracker syncs. Sleep and resting heart rate appear after a night's wear.
Is it up?
/healthz returns ok when the server is running.