fitbit-google-health-mcp

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.

Category
Visit Server

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

  1. Create a Google Cloud project and enable the Google Health API.

  2. Configure an OAuth consent screen and add your Google/Fitbit account as a test user.

  3. Create a Web application OAuth client with this exact redirect URI:

    http://127.0.0.1:42813/oauth/callback

  4. Copy .env.example to .env and fill in the client ID and secret. Never commit .env or OAuth tokens.

  5. Install and build:

    pnpm install
    pnpm build
    
  6. Authorize the account:

    set -a; source .env; set +a
    pnpm auth
    
  7. Add the server to your MCP client using the built dist/src/index.js and the same environment variables. run.sh is 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, or all (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

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.

Official
Featured
TypeScript
Audiense Insights MCP Server

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.

Official
Featured
Local
TypeScript
Magic Component Platform (MCP)

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.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

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.

Official
Featured
TypeScript
Kagi MCP Server

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.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

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.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured