mcp-google-health
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-google-health show me my sleep data from last night"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-google-health
An MCP server for the Google Health API. It gives an AI agent your Fitbit, Fitbit Air, and Pixel Watch data, plus anything else that syncs to Google Health.
It covers the whole user-facing API: all 47 data types, including the v4beta skin temperature type and the daily personal ranges. It also reads paired devices, exports exercise TCX with GPS, reads and updates the profile and settings, and writes, edits, and deletes data points. Responses are the API's raw JSON. The server does not summarize or redact them.
This project is not affiliated with Google or Fitbit. It is not a medical device.
Set up Google Cloud
In a Google Cloud project, enable the Google Health API.
Configure the OAuth consent screen. Add the Google Health scopes you plan to use. Add your account as a test user, or publish the app. A Testing app's refresh tokens expire after 7 days.
Create an OAuth client of type Desktop app and download its JSON file.
Related MCP server: google-health-mcp
Sign in
npx -y mcp-google-health auth --client-secrets ~/Downloads/client_secret.jsonThe command opens Google's consent page and listens for the reply on a 127.0.0.1 port. It
saves a refresh token to ~/.config/mcp-google-health/credentials.json with mode 0600.
--writealso requests every write scope.--scope <scope>adds a scope, such asmindfulness.readonly. You can repeat it.--port <port>fixes the loopback port.--credentials <file>saves the credentials to another path.
By default the command requests the nine read scopes: activity and fitness, ECG, health metrics, irregular rhythm notifications, exercise location, nutrition, profile, settings, and sleep.
Add it to an MCP client
claude mcp add google-health -- npx -y mcp-google-healthOther clients run npx -y mcp-google-health as a stdio server.
Variable | Use |
| Path of the credentials file. |
| Used when |
Tools
Tool | API method |
| Local catalog: kind, scope, operations, v4beta |
| Local discovery schema for a data type or resource |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Each tool carries read-only or destructive hints, so a client can ask before it writes.
The server leaves out two parts of the API. Webhook subscribers need a public HTTPS endpoint and project-level credentials. SMART Health Links serve shared records, not your account.
Development
mise install
pnpm install
pnpm check # format, lint, types, tests, Knip
pnpm update-discovery # refresh src/discovery.json from GoogleRelease: set the version in package.json, then push a matching tag such as v0.1.0. The
Publish workflow runs the checks and publishes to npm with provenance.
Available Tools
19 toolscreate_data_pointB
Write a new data point, such as a weight, body fat, height, sleep, exercise, hydration or nutrition log, mood, symptom, menstrual period, or ovulation test. Needs the matching write scope.
Inputs: dataType (required), dataPoint (required), apiVersion.
daily_roll_up_data_pointsARead-only
Aggregate a data type into civil-day windows in the user's time zone, such as daily steps or calories. endDate is exclusive. At most 14 days for heart-rate, active-minutes, total-calories, and calories-in-heart-rate-zone, 90 days otherwise.
Inputs: endDate (required), dataType (required), startDate (required), pageSize, +4 more.
delete_data_pointsADestructive
Delete up to 10000 data points of one data type that this client wrote.
Inputs: dataType (required), dataPointIds (required), apiVersion.
describe_schemaARead-only
Show the JSON schema of a data type payload (such as weight or sleep) or an API schema (such as Profile, Settings, PairedDevice, DataPoint).
Inputs: name (required).
export_exercise_tcxARead-only
Export one exercise as TCX with GPS track, heart rate, and laps. Needs the location scope. Give outputPath to save the file instead of returning the TCX text.
Inputs: exerciseId (required), outputPath, partialData.
get_data_pointBRead-only
Get one identifiable data point, such as an exercise, sleep session, weight, or log entry.
Inputs: dataType (required), dataPointId (required), apiVersion.
get_identityARead-only
Get the user's Google Health identity and numeric health user ID.
Inputs: no named parameters.
get_irn_profileBRead-only
Get the user's irregular rhythm notification (IRN) enrollment profile.
Inputs: no named parameters.
get_paired_deviceCRead-only
Get one paired device.
Inputs: deviceId (required).
get_profileBRead-only
Get the user's health profile: age, stride lengths, membership start.
Inputs: no named parameters.
get_settingsBRead-only
Get the user's settings, such as units and time zone.
Inputs: no named parameters.
list_data_pointsARead-only
List raw data points of one data type, newest first. Filter with AIP-160 on the type's time field, for example steps.interval.civil_start_time >= "2026-11-01", weight.sample_time.physical_time >= "2026-11-01T00:00:00Z", daily_resting_heart_rate.date >= "2026-11-01", or sleep.interval.civil_end_time >= "2026-11-01". Use snake case in filters.
Inputs: dataType (required), filter, pageSize, pageToken, +2 more.
list_data_typesARead-only
List every Google Health data type with its kind, scope family, supported operations, and whether it needs v4beta.
Inputs: no named parameters.
list_paired_devicesBRead-only
List the user's paired devices with battery level, battery status, firmware version, features, and last sync time.
Inputs: pageSize, pageToken.
reconcile_data_pointsARead-only
List data points merged across sources into one de-duplicated stream, as the Google Health app shows them. Takes the same filters as list_data_points. Use this for sleep across sources.
Inputs: dataType (required), filter, pageSize, pageToken, +2 more.
roll_up_data_pointsARead-only
Aggregate a data type into fixed physical-time windows, such as hourly steps or 5-minute heart rate. Range is closed-open; at most 14 days for heart-rate, active-minutes, total-calories, and calories-in-heart-rate-zone, 90 days otherwise.
Inputs: endTime (required), dataType (required), startTime (required), windowSize (required), +4 more.
update_data_pointB
Replace a data point that this client wrote.
Inputs: dataType (required), dataPoint (required), dataPointId (required), apiVersion.
update_profileC
Update profile fields. Name each changed field in updateMask.
Inputs: profile (required), updateMask (required).
update_settingsC
Update settings fields. Name each changed field in updateMask.
Inputs: settings (required), updateMask (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 19 tools
Most tools target a clearly distinct resource+action (identity, profile, settings, paired devices, data points), and the four data-point readers (list, reconcile, roll_up, daily_roll_up) are separated by explicit description cues about raw vs. merged vs. aggregated. The main residual ambiguity is between list_data_points, reconcile_data_points, and the two roll-up tools, which an agent could still misselect when it just wants 'steps over time'.
Almost everything follows a predictable snake_case verb_noun pattern (list_data_types, get_profile, update_settings, create_data_point, delete_data_points). Minor deviations: daily_roll_up_data_points is adjective-first rather than verb-first, and describe_schema breaks the verb_noun family used elsewhere.
19 tools is on the heavy side but each maps to a real capability of a broad health API: metadata, identity, profile/settings, devices, raw and aggregated data reads, writes, deletion, and TCX export. No tool appears redundant enough to drop without losing a distinct operation.
Full lifecycle coverage for data points (create, get, list, update, delete) plus aggregation, cross-source reconciliation, and export, with read/update parity on profile and settings. Gaps: paired devices are read-only, IRN enrollment can only be read (no enroll/update), and there is no batch/multi-type create path, though these are minor workarounds for an agent.
Maintenance
Related MCP Connectors
Connect your health, fitness, nutrition, sleep, and wearable data to your AI assistant.
Read wearables and lab health data — sleep, activity, workouts, timeseries, lab tests and orders.
Your Google Health data (Fitbit, Pixel Watch): sleep, HRV, readiness and biological age.
Your Garmin, Oura, WHOOP, Hevy and 35 more fitness apps, queryable from your own AI.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceGives Claude read access to wearable health data from Fitbit or Wear OS devices via the Google Health API, exposing tools for metrics like steps, heart rate, sleep, and workouts, plus a computed recovery score.1MIT
- AlicenseAqualityCmaintenanceEnables AI agents to securely read and analyze your Google Health data from Fitbit, Pixel Watch, and Health Connect, providing baseline-aware insights, readiness scores, trends, and anomalies while keeping data local and read-only.91MIT
- AlicenseNot gradedqualityCmaintenanceEnables Claude to read, write, and delete Google Health (Fitbit successor) metrics such as activity, sleep, heart rate, weight, and nutrition, plus log meals with photo-based nutrition estimation.MIT
- AlicenseNot gradedqualityCmaintenanceEnables Claude and other MCP clients to query your Fitbit/Pixel Watch health data via the Google Health API, including sleep, heart rate, activity, workouts, and trends with read-only access.9 npmMIT