
Google Health Mcp
io.github.davidmosiah由 GitHub 帳號 davidmosiah 發布v0.5.2更新於 Oct 24, 2026
Privacy-first unofficial Google Health API v4 MCP server for health, sleep, activity, HR agents
概覽
本機 MCP 伺服器,讓助理讀取使用者授權的 Google Health API v4 資料,例如睡眠、活動與心率摘要。
- 可以做什麼
- 以 stdio 在本機執行,提供檢查連線與 OAuth 就緒狀態、列出已授權的 Google Health 網域與權限範圍,以及依彙總與對帳資料流產生每日與每週摘要的工具。另提供資料類型涵蓋報告與隱私稽核,說明本機儲存了什麼、下次呼叫會傳送什麼給 Google。可選用僅限本機回環的 HTTP 傳輸。
- 適用情境
- 適合讓助理回答關於使用者本人 Google Health、Fitbit 或 Pixel Watch 資料的問題,而不必把權杖貼進提示詞。適用於單一本機使用者執行一個可信任的 MCP 主機;專案仍在測試階段,建議先走唯讀驗證路徑。
- 執行需求
- 需要 Node.js 與 npx(套件名稱 google-health-mcp-unofficial)、桌面用戶端,以及啟用 Google Health API 並設定重新導向 的 Google Cloud OAuth 用戶端。憑證來自 GOOGLE_HEALTH_CLIENT_ID 與 GOOGLE_HEALTH_CLIENT_SECRET,或來自本機設定檔;權杖儲存在本機。選用變數可控制快取、權杖路徑、重新導向 URI 與隱私模式。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Google Health Mcp,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
Google Health MCP
Read user-authorized Google Health API v4 data — Fitbit, Pixel Watch and partners — locally via OAuth. Beta.
Local-first MCP server — tokens never leave your machine.
[npm version] [GitHub release] [npm downloads] [CI] [License MIT] [Site]
[GitHub stars] [Built for MCP] [Verified release index] [Hermes one-command setup] [Google Health]
⚡ One-command install with Delx Wellness for Hermes:
npx -y delx-wellness-hermes setup— preconfigures this connector and the other 8 in a dedicated Hermes profile.Or wire it standalone into Claude Desktop / Cursor / ChatGPT Desktop — see the install section below.
What's new in 0.7.3 (2026-08-03): headless OAuth (
auth --manual) for SSH / containers / WSL · real-account rollup/filter fixes from external testers · opt-inclinicalscopes for ECG/IRN · pins live in Hermes/living-body. Full notes in CHANGELOG.md.
Highest-leverage contribution — real-account coverage
If you have Fitbit, Pixel Watch, Android health data or Google Health API v4 access, the most useful help is a redacted coverage report:
Review the output, remove anything you do not want public, then post the report
on issue #2 (or a
new issue). The timed proof loop on #21
closed 1/2 — see docs/proof-loop-status.md.
The command is read-only and is designed to omit OAuth secrets, local paths and raw
health measurements. A static preflight is available before OAuth with
coverage --json.
Other ways to help (no account required)
HTTP (v2 stateless)
Default is stdio. Optional Streamable HTTP — no session id, JSON responses, loopback only:
Env: GOOGLE_HEALTH_MCP_HOST, GOOGLE_HEALTH_MCP_PORT, GOOGLE_HEALTH_MCP_TRANSPORT=http.
Google Health MCP
Local-first MCP server that gives your AI agent user-authorized Google Health API v4 data — Fitbit, Pixel Watch and partners — over OAuth.
- Install one connector —
npx -y google-health-mcp-unofficial setup - Run it in Claude · Cursor · ChatGPT · Hermes · OpenClaw — see the client examples.
- Local-first — your tokens never leave your machine (privacy).
- Which connector should I use? — see the front-door guide.
Beta status: Google Health API v4 is live for builders but still evolving. Google's release notes show scope and data-type changes continuing after launch, so this connector stays in early beta and points testers to safe read-only validation paths before public production use.
Unofficial project. Not affiliated with, endorsed by or supported by Google, Fitbit or Alphabet. Not a medical device. Not medical advice.
Why this exists
Google Health API is the successor to Fitbit Web API: new OAuth, new base URL, v4 endpoint schema, standardized data types, reconciled streams and rollups.
This MCP gives agents a clean way to discover the API, check setup, authenticate locally and query data without pasting tokens into prompts or agent configs.
Quickstart in 60 seconds
Create a Google Cloud OAuth client, enable the Google Health API, and add the redirect http://127.0.0.1:3000/callback. Then:
doctor --live calls safe Google Health identity/profile/settings endpoints after auth to prove the API is reachable — the connection proof for this beta. That does not prove Claude Desktop can invoke tools: Desktop validates outputSchema as JSON Schema 2020-12. Use [email protected]+ (see #23). Full install details (scope presets, MFA, recovery) are in the Install section below.
Try it with your agent
Three things to ask first, based on tools this connector actually ships:
Tools
Start here:
google_health_connection_status— local config, token, scope and client readinessgoogle_health_data_inventory— supported domains, scopes, data type naming and agent flowgoogle_health_data_type_coverage— static coverage plan, or explicit live read-only validation for issue #21google_health_daily_summary— daily beta summary from rollups and reconciled streamsgoogle_health_weekly_summary— weekly beta reviewgoogle_health_privacy_audit— what is stored locally and what is sent to Google
The full tool catalog — Google Health API methods, agent manifest, diagnostics and data-type naming notes (kebab-case endpoints, snake_case filters, source families) — lives in docs/tools.md.
Privacy & what runs offline
-
OAuth tokens are stored locally at
~/.google-health-mcp/tokens.jsonwith0600permissions. -
Secrets can live in
~/.google-health-mcp/config.jsonorGOOGLE_HEALTH_*environment variables. -
Tools never return access tokens, refresh tokens or client secrets.
-
GOOGLE_HEALTH_PRIVACY_MODE=structuredis the default;rawmode is explicit and should be used only for debugging or deep analysis. An agent asking forprivacy_mode=rawis refused unless it passesexplicit_user_intent=true; settingGOOGLE_HEALTH_PRIVACY_MODE=rawyourself is your own call and needs no per-call intent. -
Structured mode preserves complete upstream physiological fields and future v4 additions while removing identity, location and secret-bearing values.
-
"Location redaction" means a concrete key list, not a slogan. Coordinate-bearing leaf keys, always dropped in
structuredandsummary(matched ignoring case,_and-, solatitude_e7andlatitudeE7are the same key):startLatitude,startLongitude,start_latlng,endLatitude,endLongitude,end_latlng,latitude,longitude,lat,lon,lng,latlng,coordinates,coordinate,gps,gpx,geoPolylineDTO,map,polyline,summary_polyline,activities-tracker-gps,latitudeE7,longitudeE7,latE7,lngE7,lonE7,startLatitudeE7,startLongitudeE7,endLatitudeE7,endLongitudeE7,lat_deg,lng_deg,lon_deg,latitudeDegrees,longitudeDegreesLocation container keys, dropped as a whole object — with their
address/city/placeIdsiblings and any coordinate spelling this list never anticipated — whenever they hold a place record (an object, or an array containing objects). A container holding only scalars is a label, not a place, and survives:location: ["gym", "home"]stays,location: { latitudeE7: … }does not.location,locations,geoLocation,geoLocations,geo,geoJson,route,routes,position,positions,waypoint,waypoints,trackPoint,trackPoints,placeVisitgoogle_health_privacy_auditreturns both live lists ingps_redacted_keysandgps_redacted_container_keys, andgps_redaction_defaultis measured at call time by pushing a synthetic record through both non-raw modes and scanning the output by key and by coordinate value — it is not a hardcodedtrue.npm run test:redaction-docsfails the build if these two blocks stop matching the code, so the published promise cannot drift from the enforcement list again. Google Health API v4 does not currently document a location/route data type, so this is a forward-compatible guard rather than a patch for an observed leak. -
Limits of that promise, stated instead of implied. Every line below is proved by a behavioural test (
npm run test:declared-limits) that fails if the behaviour changes; a line marked NOT VERIFIED is a statement no test backs, labelled instead of left to read as a guarantee. A limit written here without a test fails the build:default_mode_is_structured— with noprivacy_modeargument and noGOOGLE_HEALTH_PRIVACY_MODE, every read runs instructured.raw_requires_explicit_user_intent— an agent asking forprivacy_mode=rawis refused withUSER_ACTION_REQUIREDunless it also passesexplicit_user_intent=true.local_raw_default_needs_no_per_call_intent—GOOGLE_HEALTH_PRIVACY_MODE=rawin your own config or environment is honoured on every call with no per-call intent; the gate is about agent escalation, not about the machine owner.raw_is_an_unfiltered_passthrough—rawreturns the upstream payload unchanged; redaction is a property ofstructuredandsummary, never ofraw.structured_drops_identity_and_secret_keys— tokens,authorization, e-mail, names and avatars are dropped at any depth instructured, while physiology and provenance survive.summary_is_never_less_restrictive_than_structured—summarystrips first and summarizes after, so nothingstructureddrops can reappear insummary.summary_flattens_numeric_leaves_to_depth_2—summarypromotes numeric leaves down to depth 2 of the data-type payload intovalue; anything deeper is not reported at all.summary_promotes_unlisted_coordinate_keys— a coordinate key outside the lists above is promoted bysummary, not hidden. The key list is the boundary, not the mode.altitude_and_elevation_are_not_location—altitudeis an official v4 data type (activity_and_fitness) and survives redaction, as doeselevation; an altitude alone does not localize a user.altitude_inside_a_place_container_is_dropped— the same altitude inside a redacted location container dies with the container.location_guard_never_observed_upstream— NOT VERIFIED: Google Health API v4 documents no location/route data type, so no test here has ever seen a real Google payload carrying coordinates. The key list is a forward-compatible guard derived from Google's own encodings, not a measured fix for an observed leak.
-
Daily rollups use validated civil
YYYY-MM-DDranges; general rollups preserve exact timezone-aware ISO date-times. Invalid or reversed ranges fail before HTTP. -
"today"in summaries and daily rollups resolves in thetimezoneargument, else the wellness profile's timezone, else UTC. An invalid IANA timezone is rejected. -
support --redactedprints a copy-paste support bundle for GitHub issues without tokens, secrets, local paths or health measurements. -
support --feedback --jsonprints an anonymous setup-feedback bundle for beta testers and MCP client reports. -
coverage --live --jsonprints only redacted data-type status and point-count buckets; it never includes raw Google Health payloads.
Authorization model & trust boundary
Google OAuth controls which Google account and health scopes this connector can access. It does not authorize individual MCP callers or tools. The intended deployment is one local user running one trusted MCP host; callers that can reach the same process share its tool catalog and local OAuth grant.
There is currently no per-user, per-agent, API-key or per-tool RBAC layer. The
optional HTTP transport binds to 127.0.0.1 by default and must not be exposed
publicly without standards-compliant MCP authentication, isolated per-user
Google credentials and an explicit authorization policy. See the full
authorization model.
See the full agent demo →
Want to see an agent actually reason over this connector alongside the rest of the stack? The shared, reproducible demo answers the anchor question "Should I train hard today?":
delx-living-body composes whatever connectors it detects locally with rule-based (offline) synthesis — readiness-first and non-medical. For this connector specifically, npx -y google-health-mcp-unofficial doctor --live is the local proof that your Google Health auth is wired correctly.
Beta Testers Wanted
The highest-leverage contribution right now is real setup feedback from Fitbit, Pixel Watch, Android and Google Health API v4 users.
If you can test with a real account:
- Run
npx -y google-health-mcp-unofficial doctorand confirm the OAuth flow is clear. - Run
npx -y google-health-mcp-unofficial support --feedback --jsonand paste the anonymous bundle into issue #4. - Run
npx -y google-health-mcp-unofficial coverage --jsonfor the static coverage plan. - After OAuth, run
npx -y google-health-mcp-unofficial coverage --live --jsonand paste the reviewed, redacted report into issue #2. - Try
google_health_connection_status,google_health_data_inventoryandgoogle_health_daily_summaryfrom your MCP client. - Open an issue for missing data types, confusing setup steps, client-specific friction or privacy concerns.
- Do not paste OAuth tokens, client secrets, local paths or personal health measurements into public issues.
Useful links:
- Beta testers wanted
- Proof loop status (honest 1/2)
- Beta testers / new coverage
- MCP client setup feedback
- Beta feedback guide
- Data coverage harness
- Anonymous setup feedback
- Demo
- Discovery kit
Install
Create a Google Cloud OAuth client, enable the Google Health API, and add the local redirect:
Then run:
Headless hosts (servers, SSH, containers, WSL)
auth normally opens a browser and catches the redirect on 127.0.0.1. On a host with no
browser that cannot work. When it detects a headless host — SSH, or no DISPLAY /
WAYLAND_DISPLAY — it switches to pasting the redirect back in:
Non-interactive provisioning:
See docs/oauth.md for --local-callback, SSH tunnel notes, and
GOOGLE_HEALTH_HEADLESS.
Scope presets keep OAuth consent easier to reason about — basic, activity, sleep and full. The full preset list, the exact read-only scope URLs and the OAuth endpoints live in docs/oauth.md.
If setup gets stuck:
Standalone MCP config:
Hermes
After config changes, use /reload-mcp or hermes mcp test google_health. Do not restart the gateway for normal data access.
Development
Links
- Changelog · Contributing · Security · Authorization model
- Google Health API: https://developers.google.com/health
- Release notes: https://developers.google.com/health/release-notes
- REST reference: https://developers.google.com/health/reference/rest
- Scopes: https://developers.google.com/health/scopes
- Data types: https://developers.google.com/health/data-types
- Migration guide: https://developers.google.com/health/migration
- Delx Wellness registry: https://github.com/davidmosiah/delx-wellness
See also
The full Delx Wellness connector library:
One-command setup for Hermes — preconfigures every connector above plus wellness skills + onboarding: delx-wellness-hermes.
📧 Contact & Support
- 📨 [email protected] — general questions, integration help, partnerships
- 🐛 Bug reports / feature requests — GitHub Issues
- 🐦 Updates — @delx369 on X
- 🌐 Site — wellness.delx.ai
License
MIT - see LICENSE. Code of Conduct.
Agent-ready yardstick: mcp-scorecard — aim ≥90 on CI.
Skill or MCP
Same package, two doors. MCP registers tools on stdio/HTTP. The skill can drive the same tools through the CLI when the client has no MCP:
Copy skill/SKILL.md into your agent skills dir.
Release migration
Before upgrading to 0.8.0, review the compatibility and migration notes.
來源:README.md,提交 ddd9533
工具
0版本歷史
1- v0.5.2最新Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分