fitbit-google-health-mcp
Read-only MCP access to Fitbit-synced health data through Google Health API v4. Provides tools for metrics, summaries, trends, and data quality without write or arbitrary HTTP operations.
README
fitbit-google-health-mcp
Read-only MCP access to Fitbit-synced health data through Google Health API v4. This is not a direct Fitbit Web API integration. The server is MCP-only: there is no dashboard, database, health-data cache, write operation, or arbitrary HTTP tool.
It isolates unavailable metrics so one Google Health API limitation does not fail an entire request.
Setup
-
Create a Google Cloud project and enable the Google Health API.
-
Configure an OAuth consent screen and add your Google/Fitbit account as a test user.
-
Create a Web application OAuth client with this exact redirect URI:
http://127.0.0.1:42813/oauth/callback -
Copy
.env.exampleto.envand fill in the client ID and secret. Never commit.envor OAuth tokens. -
Install and build:
pnpm install pnpm build -
Authorize the account:
set -a; source .env; set +a pnpm auth -
Add the server to your MCP client using the built
dist/src/index.jsand the same environment variables.run.shis a convenient stdio launcher.
The Fitbit Air must already be paired to the Fitbit mobile app. Fitbit devices sync through the Fitbit app; they do not expose a direct third-party Bluetooth path. Open the Fitbit app and sync before asking the MCP for new readings.
Tools
get_data_source_info: provider, data path, read-only boundary, and limitations. Call this first when interpreting results.list_available_metrics: the broad Google Health v4 catalog implemented by this server.get_metrics: query any supported data types over a range, raw or daily aggregate, with source filtering.get_daily_summary: common daily metrics in one call.get_profile,get_devices,get_settings: connected account metadata.get_recent_metrics: recent-range queries with per-metric failure isolation.get_health_snapshot: compact current-day summary.get_trends: numeric averages, ranges, and changes.get_sleep_summary: normalized sleep sessions and stages.get_sync_status: account, devices, and recent-data availability.compare_periods: compare the current period with the prior period.get_data_quality: report coverage, missing data, sources, and API limitations.get_activity_summary: normalized movement and activity trends.get_recovery_summary: informational sleep, heart, oxygen, and respiration summary.get_body_metrics: normalized weight, body-fat, temperature, height, and glucose data.
The server requests read-only scopes only. It does not expose write, delete, webhook, or arbitrary HTTP tools.
Multi-source data
Every metric query and summary accepts:
source:FITBIT,HEALTH_KIT, orall(default).source_priority: source precedence when same-time records disagree; defaults to Fitbit first, then HealthKit.deduplicate: remove exact duplicates and resolve same-time cross-source conflicts (default: true).
Responses retain raw records and add sourceAnalysis metadata containing source coverage, returned versus raw record counts, duplicates removed, and conflicts detected. Source filtering is most precise with raw data; rollup-only Google Health types may report unknown coverage because the rollup response does not carry source metadata.
Development
pnpm install
pnpm check
The project requires Node 20+ and pnpm. Run pnpm auth once to create the local OAuth token, then use pnpm start or ./run.sh with your MCP client.
Privacy and security
This server handles sensitive health data. Keep OAuth credentials private, use a restricted Google Cloud test-user list, and never paste token contents into issues or logs. Tokens default to ~/.config/fitbit-mcp/tokens.json (or $XDG_CONFIG_HOME/fitbit-mcp/tokens.json) with owner-only permissions. Set FITBIT_MCP_TOKEN_PATH for another secure location.
The server does not diagnose conditions or provide medical advice. Metric availability varies; unavailable results are missing data, not zero.
Notes
Metric presence varies by Fitbit device, account, country, permissions, and recent sync. Google Health API query ranges are constrained: heart-rate, active-minutes, total-calories, and heart-rate-zone queries should be kept to 14 days or less; most other types support up to 90 days per request. Historical data can be fetched in multiple ranges.
Recent and summary tools accept an IANA timezone such as America/Detroit. Raw API records are preserved, while summary tools add normalized distance, weight, calorie, and sleep-duration fields. Missing data is reported explicitly and is never interpreted as zero.
OpenClaw
Register the local stdio server without a hardcoded tool allowlist so newly added read-only tools become available automatically:
openclaw mcp add fitbit-google-health \
--command /Users/rithvik/fitbit-mcp/run.sh \
--cwd /Users/rithvik/fitbit-mcp
openclaw mcp doctor fitbit-google-health --probe
openclaw mcp reload
Use an OpenClaw tool filter only when you intentionally want to restrict the agent. The get_data_source_info tool is the canonical way for an agent to understand that this server uses Google Health API v4 and may contain Fitbit-synced records rather than direct Fitbit Web API records.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.