Skip to main content
Glama

Fitbit MCP Connector for AI

Fitbit API CI Coverage Status License: MIT npm version npm downloads

Connect AI assistants to your Fitbit health data

Give your AI assistant access to your Fitbit data for personalized health insights, trend analysis, and automated tracking. Works with Claude Desktop and other MCP-compatible AI tools.

What it does

🏃 Exercise & Activities - Get detailed workout logs and activity data
😴 Sleep Analysis - Retrieve sleep patterns and quality metrics
⚖️ Weight Tracking - Access weight trends over time
❤️ Heart Rate Data - Monitor heart rate patterns and zones
🍎 Nutrition Logs - Review food intake, calories, and macros
👤 Profile Info - Access basic Fitbit profile details

Ask your AI things like: "Show me my sleep patterns this week" or "What's my average heart rate during workouts?"

Related MCP server: coros-mcp

Quick Start

🚀 Want to test the tools right away?

  1. Get Fitbit API credentials

    • Create an app with OAuth 2.0 Application Type: Personal

    • Set Callback URL: http://localhost:3000/callback

    • Note your Client ID and Client Secret

  2. Install the package globally:

npm install -g mcp-fitbit
  1. Add to your Claude Desktop config file:

{
  "mcpServers": {
    "fitbit": {
      "command": "mcp-fitbit",
      "args": [],
      "env": {
        "FITBIT_CLIENT_ID": "your_client_id_here",
        "FITBIT_CLIENT_SECRET": "your_client_secret_here"
      }
    }
  }
}
  • Config file location:

    • Windows: %AppData%\Claude\claude_desktop_config.json

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

    • Linux: ~/.config/Claude/claude_desktop_config.json

  1. Restart Claude Desktop and ask about your Fitbit data!

Option 2: Development Setup

  1. Get Fitbit API credentials (see Installation below)

  2. Then run:

git clone https://github.com/TheDigitalNinja/mcp-fitbit
cd mcp-fitbit
npm install
# Create .env with your Fitbit credentials
npm run dev

Both options open the MCP Inspector at http://localhost:5173 where you can test all tools interactively and handle the OAuth flow.

Installation

For End Users (npm package)

  1. Get Fitbit API credentials at dev.fitbit.com

    • Set OAuth 2.0 Application Type to Personal

    • Set Callback URL to http://localhost:3000/callback

  2. Install the package:

    npm install -g mcp-fitbit
  3. Create .env file in the package directory:

    When you run mcp-fitbit for the first time, it will tell you exactly where to create the .env file. It will look something like:

    C:\Users\YourName\AppData\Roaming\npm\node_modules\mcp-fitbit\.env
  4. Add your credentials to the .env file:

    FITBIT_CLIENT_ID=your_client_id_here
    FITBIT_CLIENT_SECRET=your_client_secret_here
  5. Run the server:

    mcp-fitbit

For Developers (from source)

  1. Get Fitbit API credentials at dev.fitbit.com

    • Set OAuth 2.0 Application Type to Personal

    • Set Callback URL to http://localhost:3000/callback

  2. Clone and setup:

    git clone https://github.com/TheDigitalNinja/mcp-fitbit
    cd mcp-fitbit
    npm install
  3. Create .env file:

    FITBIT_CLIENT_ID=your_client_id_here
    FITBIT_CLIENT_SECRET=your_client_secret_here
  4. Build the server:

    npm run build

Available Tools

Tool

Description

Parameters

get_weight

Weight data over time periods

period: 1d, 7d, 30d, 3m, 6m, 1y

get_sleep_by_date_range

Sleep logs for date range (max 100 days)

startDate, endDate (YYYY-MM-DD)

get_exercises

Activity/exercise logs after date

afterDate (YYYY-MM-DD), limit (1-100)

get_daily_activity_summary

Daily activity summary with goals

date (YYYY-MM-DD)

get_activity_goals

User's activity goals (daily/weekly)

period: daily, weekly

get_activity_timeseries

Activity time series data (max 30 days)

resourcePath, startDate, endDate (YYYY-MM-DD)

get_azm_timeseries

Active Zone Minutes time series (max 1095 days)

startDate, endDate (YYYY-MM-DD)

get_heart_rate

Heart rate for time period

period: 1d, 7d, 30d, 1w, 1m, optional date

get_heart_rate_by_date_range

Heart rate for date range (max 1 year)

startDate, endDate (YYYY-MM-DD)

get_food_log

Complete nutrition data for a day

date (YYYY-MM-DD or "today")

get_nutrition

Individual nutrient over time

resource, period, optional date

get_nutrition_by_date_range

Individual nutrient for date range

resource, startDate, endDate

get_profile

User profile information

None

Nutrition resources: caloriesIn, water, protein, carbs, fat, fiber, sodium

Activity time series resources: steps, distance, calories, activityCalories, caloriesBMR, tracker/activityCalories, tracker/calories, tracker/distance

Claude Desktop

Using npm package (recommended):

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "fitbit": {
      "command": "mcp-fitbit",
      "args": []
    }
  }
}

Using local development version:

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "fitbit": {
      "command": "node",
      "args": ["C:\\path\\to\\mcp-fitbit\\build\\index.js"]
    }
  }
}

Config file locations:

  • Windows: %AppData%\Claude\claude_desktop_config.json

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Linux: ~/.config/Claude/claude_desktop_config.json

First Run Authorization

When you first ask your AI assistant to use Fitbit data:

  1. The server opens your browser to http://localhost:3000/auth

  2. Log in to Fitbit and grant permissions

  3. You'll be redirected to a success page

  4. Your AI can now access your Fitbit data!

Development

npm run lint          # Check code quality
npm run format        # Fix formatting
npm run build         # Compile TypeScript
npm run dev           # Run with MCP inspector

Architecture: See TASKS.md for improvement opportunities and technical details.

Available Tools

13 tools
get_activity_goalsA

Get the raw JSON response for user's activity goals from Fitbit. Supports 'daily' and 'weekly' periods. Returns goal values for steps, distance, calories, floors, active minutes, and active zone minutes.

Inputs: period (required).

get_activity_timeseriesA

Get the raw JSON response for activity time series data from Fitbit over a date range (max 30 days). Supports various resource paths like 'steps', 'distance', 'calories', 'activityCalories', 'caloriesBMR'.

Inputs: resourcePath (required), startDate (required), endDate (required).

get_azm_timeseriesA

Get the raw JSON response for Active Zone Minutes (AZM) time series data from Fitbit over a date range (max 1095 days). Returns total AZM plus breakdown by fat burn, cardio, and peak zones.

Inputs: startDate (required), endDate (required).

get_daily_activity_summaryA

Get the raw JSON response for daily activity summary from Fitbit for a specific date. Includes goals, steps, calories, distances, and heart rate zones. Requires a 'date' parameter in YYYY-MM-DD format.

Inputs: date (required).

get_exercisesB

Get the raw JSON response for exercise and activity logs from Fitbit after a specific date. Requires 'afterDate' parameter in 'YYYY-MM-DD' format. Retrieves a detailed list of logged exercises and activities.

Inputs: afterDate (required), limit.

get_food_logA

Get comprehensive nutrition data (calories, protein, carbs, fat, fiber, sodium) from Fitbit food log for a specific date. Returns daily summary totals and individual food entries with nutritional values.

Inputs: date.

get_heart_rateA

Get the raw JSON response for heart rate data from Fitbit for a specified period ending today or on a specific date. Requires a 'period' parameter such as '1d', '7d', '30d', '1w', '1m' and optionally accepts 'date' parameter.

Inputs: period (required), date.

get_heart_rate_by_date_rangeA

Get the raw JSON response for heart rate data from Fitbit for a specific date range. Requires 'startDate' and 'endDate' parameters in 'YYYY-MM-DD' format. Note: The API enforces a maximum range of 1 year.

Inputs: startDate (required), endDate (required).

get_nutritionC

Get the raw JSON response for nutrition data from Fitbit for a specified resource and period ending today or on a specific date. Requires 'resource' parameter (caloriesIn, water) and 'period' parameter such as '1d', '7d', '30d', '1w', '1m', '3m', '6m', '1y' and optionally accepts 'date' parameter.

Inputs: resource (required), period (required), date.

get_nutrition_by_date_rangeA

Get the raw JSON response for nutrition data from Fitbit for a specific resource and date range. Requires 'resource' parameter (caloriesIn, water), 'startDate' and 'endDate' parameters in 'YYYY-MM-DD' format. Note: The API enforces a maximum range of 1,095 days.

Inputs: resource (required), startDate (required), endDate (required).

get_profileA

Get the raw JSON response for the user's Fitbit profile.

Inputs: no named parameters.

get_sleep_by_date_rangeA

Get the raw JSON response for sleep logs from Fitbit for a specific date range. Requires 'startDate' and 'endDate' parameters in 'YYYY-MM-DD' format. Note: The API enforces a maximum range of 100 days.

Inputs: startDate (required), endDate (required).

get_weightA

Get the raw JSON response for weight entries from Fitbit for a specified period ending today. Requires a 'period' parameter such as '1d', '7d', '30d', '3m', '6m', '1y'

Inputs: period (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 13 tools

    Disambiguation4/5

    Most tools are clearly separated by data type (weight, sleep, heart rate, nutrition, activity), but get_food_log and get_nutrition overlap in nutrition data, and get_daily_activity_summary vs get_activity_timeseries could be confused for similar activity data.

    Naming Consistency4/5

    All tools follow a consistent get_<resource> pattern, with suffixes like _by_date_range and _timeseries for variants. Minor inconsistency: get_food_log vs get_nutrition use different resource names for overlapping data, and get_azm_timeseries uses an abbreviation.

    Tool Count5/5

    13 tools is well-scoped for a Fitbit data retrieval server, covering the major health data categories without excessive fragmentation.

    Completeness3/5

    The server covers read-only retrieval across major Fitbit domains (weight, sleep, heart rate, nutrition, activity, profile), but lacks write operations (logging food, activity, sleep) and some common resources like SpO2 or temperature. For a read-only data access server, the coverage is reasonable but not exhaustive.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      D
      quality
      D
      maintenance
      A Model Context Protocol (MCP) implementation for Fitbit, enabling AI assistants to access and analyze your Fitbit health and fitness data. Disclaimer: This is an unofficial integration built using Fitbit's public API and is not affiliated with or endorsed by Fitbit Inc.
      16
      11 npm
      10
      MIT
    • A
      license
      A
      quality
      A
      maintenance
      A Model Context Protocol (MCP) server that fetches sleep, HRV, and training data from the unofficial Coros API and exposes them to AI assistants like Claude, enabling natural language queries about fitness metrics and workout management.
      26
      125
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      A Model Context Protocol (MCP) server that gives Claude access to your WHOOP biometric data — recovery, sleep, strain, and workouts.
      39 npm
      MIT