Skip to content

Fitbit MCP by usefulapi

by usefulapi.io · remote · no sign-in to list tools · v1.16.3 · published by io.usefulapi

Read Fitbit profile, activity, sleep, heart rate and device data.

Changes · 10

17 tools: 10 change things and 7 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http fitbit https://fitbit.usefulapi.io/mcp

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

17 tools

Changes things 10Claude Code: ask
  • fitbit_activity_goalsThe user's activity goals (steps/distance/calories/active-minutes) for the daily or weekly period.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    The user's activity goals (steps/distance/calories/active-minutes) for the daily or weekly period. Fitbit REST: GET /1/user/-/activities/goals/{period}.json.

    Annotations the server declares

    • title: Activity goals
    • readOnlyHint: true
  • fitbit_activity_time_seriesActivity metric time series over a date range (e.g.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Activity metric time series over a date range (e.g. daily steps for a week). Max 1095 days. Fitbit REST: GET /1/user/-/activities/{resource}/date/{startDate}/{endDate}.json.

    Annotations the server declares

    • title: Activity time series
    • readOnlyHint: true
  • fitbit_breathing_rateBreathing (respiratory) rate summary for a date or range.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Breathing (respiratory) rate summary for a date or range. Fitbit REST: GET /1/user/-/br/date/{date}[/{endDate}].json.

    Annotations the server declares

    • title: Breathing rate
    • readOnlyHint: true
  • fitbit_cardio_scoreCardio fitness score (VO2 max estimate) for a date or range.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Cardio fitness score (VO2 max estimate) for a date or range. Fitbit REST: GET /1/user/-/cardioscore/date/{date}[/{endDate}].json.

    Annotations the server declares

    • title: Cardio score
    • readOnlyHint: true
  • fitbit_daily_activity_summaryDaily activity summary for a date — steps, distance, floors, calories, active minutes, and the day's logged activities.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Daily activity summary for a date — steps, distance, floors, calories, active minutes, and the day's logged activities. Fitbit REST: GET /1/user/-/activities/date/{date}.json.

    Annotations the server declares

    • title: Daily activity summary
    • readOnlyHint: true
  • fitbit_heart_rateHeart-rate time series — resting HR and time in each HR zone.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Heart-rate time series — resting HR and time in each HR zone. Give a single date + period, OR a date + endDate range. Fitbit REST: GET /1/user/-/activities/heart/date/{date}/{period|endDate}.json.

    Annotations the server declares

    • title: Heart rate
    • readOnlyHint: true
  • fitbit_hrvHeart rate variability (HRV) summary for a date or range.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Heart rate variability (HRV) summary for a date or range. Fitbit REST: GET /1/user/-/hrv/date/{date}[/{endDate}].json.

    Annotations the server declares

    • title: HRV
    • readOnlyHint: true
  • fitbit_lifetime_statsLifetime and best-ever activity statistics (total steps, distance, floors; personal bests).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Lifetime and best-ever activity statistics (total steps, distance, floors; personal bests). Fitbit REST: GET /1/user/-/activities.json.

    Annotations the server declares

    • title: Lifetime stats
    • readOnlyHint: true
  • fitbit_skin_temperatureSkin temperature (relative to baseline) for a date or range.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Skin temperature (relative to baseline) for a date or range. Fitbit REST: GET /1/user/-/temp/skin/date/{date}[/{endDate}].json.

    Annotations the server declares

    • title: Skin temperature
    • readOnlyHint: true
  • fitbit_spo2Blood oxygen saturation (SpO2) summary for a date or range.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Blood oxygen saturation (SpO2) summary for a date or range. Fitbit REST: GET /1/user/-/spo2/date/{date}[/{endDate}].json.

    Annotations the server declares

    • title: SpO2
    • readOnlyHint: true
Only reads 7Claude Code: allow
  • fitbit_body_fat_logBody fat percentage log entries for a date.No findings

    Why it is in this group

    • The name "fitbit_body_fat_log" says "log": a word for reading.
    Description, as the server wrote it
    Body fat percentage log entries for a date. Fitbit REST: GET /1/user/-/body/log/fat/date/{date}.json.

    Annotations the server declares

    • title: Body fat log
    • readOnlyHint: true
  • fitbit_food_logFood/nutrition log for a date — logged foods and daily nutrition totals (calories, macros).No findings

    Why it is in this group

    • The name "fitbit_food_log" says "log": a word for reading.
    Description, as the server wrote it
    Food/nutrition log for a date — logged foods and daily nutrition totals (calories, macros). Fitbit REST: GET /1/user/-/foods/log/date/{date}.json.

    Annotations the server declares

    • title: Food log
    • readOnlyHint: true
  • fitbit_get_devicesList the user's Fitbit devices/trackers (battery, last sync, version).No findings

    Why it is in this group

    • The name "fitbit_get_devices" says "get": a word for reading.
    Description, as the server wrote it
    List the user's Fitbit devices/trackers (battery, last sync, version). Fitbit REST: GET /1/user/-/devices.json.

    Annotations the server declares

    • title: Get devices
    • readOnlyHint: true
  • fitbit_get_profileThe current user's Fitbit profile (name, age, gender, height, timezone, member since, avatar, etc.).No findings

    Why it is in this group

    • The name "fitbit_get_profile" says "get": a word for reading.
    Description, as the server wrote it
    The current user's Fitbit profile (name, age, gender, height, timezone, member since, avatar, etc.). Fitbit REST: GET /1/user/-/profile.json.

    Annotations the server declares

    • title: Get profile
    • readOnlyHint: true
  • fitbit_sleep_logSleep logs for a date (or date range) — stages/levels, duration, efficiency, start/end times.No findings

    Why it is in this group

    • The name "fitbit_sleep_log" says "log": a word for reading.
    Description, as the server wrote it
    Sleep logs for a date (or date range) — stages/levels, duration, efficiency, start/end times. Fitbit REST: GET /1.2/user/-/sleep/date/{date}[/{endDate}].json.

    Annotations the server declares

    • title: Sleep log
    • readOnlyHint: true
  • fitbit_water_logWater intake log for a date.No findings

    Why it is in this group

    • The name "fitbit_water_log" says "log": a word for reading.
    Description, as the server wrote it
    Water intake log for a date. Fitbit REST: GET /1/user/-/foods/log/water/date/{date}.json.

    Annotations the server declares

    • title: Water log
    • readOnlyHint: true
  • fitbit_weight_logBody weight log entries for a date.No findings

    Why it is in this group

    • The name "fitbit_weight_log" says "log": a word for reading.
    Description, as the server wrote it
    Body weight log entries for a date. Fitbit REST: GET /1/user/-/body/log/weight/date/{date}.json.

    Annotations the server declares

    • title: Weight log
    • readOnlyHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.16.3. Values in angle brackets are yours to fill in.

claude mcp add --transport http fitbit https://fitbit.usefulapi.io/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__fitbit__fitbit_get_profile",
      "mcp__fitbit__fitbit_get_devices",
      "mcp__fitbit__fitbit_sleep_log",
      "mcp__fitbit__fitbit_weight_log",
      "mcp__fitbit__fitbit_body_fat_log",
      "mcp__fitbit__fitbit_food_log",
      "mcp__fitbit__fitbit_water_log"
    ],
    "ask": [
      "mcp__fitbit__fitbit_daily_activity_summary",
      "mcp__fitbit__fitbit_activity_time_series",
      "mcp__fitbit__fitbit_activity_goals",
      "mcp__fitbit__fitbit_lifetime_stats",
      "mcp__fitbit__fitbit_heart_rate",
      "mcp__fitbit__fitbit_spo2",
      "mcp__fitbit__fitbit_hrv",
      "mcp__fitbit__fitbit_breathing_rate",
      "mcp__fitbit__fitbit_cardio_score",
      "mcp__fitbit__fitbit_skin_temperature"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as fitbit. Review it before you use it.