Back to Discover

withings-mcp

connector

partymola

MCP server for the Withings Health API with OAuth, local SQLite cache, and trend analysis.

View on GitHub
0 starsSynced Aug 3, 2026

Install to Claude Code

/plugin marketplace add partymola/withings-mcp

README

withings-mcp

CI License: GPL v3 Python 3.13+ PyPI Glama MCP Server

MCP server for the Withings Health API with OAuth, local SQLite cache, and trend analysis.

What makes this different from other Withings MCP servers:

  • Local SQLite cache for fast offline queries and historical trend analysis
  • Incremental sync - only fetches new data since last sync
  • Broad Withings coverage: 17 body-composition metrics plus sleep, daily activity, workouts, and ECG/AFib
  • Automatic OAuth token refresh (access tokens: 3h, refresh tokens: 1 year)
  • Zero dependencies beyond mcp (HTTP via stdlib)
  • Python 3.13+

Tools

ToolDescriptionData source
withings_syncSync data from Withings API to local cacheLive API -> SQLite
withings_get_bodyBody composition (weight, fat%, muscle, bone, BP, SpO2)Local cache (auto-syncs if stale)
withings_get_sleepSleep summaries, or detailed phase time-series with detail=TrueCache (summary) / live (detail)
withings_get_activityDaily steps, distance, calories, active timeLocal cache (auto-syncs if stale)
withings_get_workoutsWorkout sessions with type, duration, HRLocal cache (auto-syncs if stale)
withings_get_heartECG recordings and AFib detectionLive API (always)
withings_get_devicesConnected devices with battery statusLive API (always)
withings_trendsPeriod averages, weekly/monthly/quarterly trends, comparisonsLocal cache (auto-syncs if stale)

The cache-backed query tools auto-sync when their data is stale, and accept live=True to bypass the cache and fetch straight from the Withings API. withings_get_heart and withings_get_devices are always live. withings_get_sleep(detail=True) returns minute-by-minute sleep phases (live, up to 7 days per request).

Prerequisites

  • Python 3.13+
  • uv (recommended) or pip
  • A Withings developer account and registered application

Installation

pip install withings-mcp

Or run it without installing with uvx withings-mcp. For development from a clone:

git clone https://github.com/partymola/withings-mcp.git
cd withings-mcp
uv venv --python 3.13 .venv
uv pip install -e .

Setup

1. Register a Withings app

  1. Go to https://developer.withings.com/dashboard
  2. Create a new application
  3. Set the callback URL to http://localhost:8585
  4. Note your Client ID and Client Secret

2. Authenticate

.venv/bin/withings-mcp auth

This opens your browser for Withings authorization. After approving, tokens are saved locally in config/.

3. Register with Claude Code

claude mcp add -s user withings -- /path/to/withings-mcp/.venv/bin/withings-mcp

4. First sync

In Claude Code, say: "Sync my Withings data"

This runs withings_sync to populate the local cache. Subsequent syncs only fetch new data.

You can also sync from the command line without an MCP client:

.venv/bin/withings-mcp sync                      # all data types, last 30 days
.venv/bin/withings-mcp sync --types body,sleep   # a subset
.venv/bin/withings-mcp sync --days 90            # deeper history on first sync

CLI

withings-mcp              Start the MCP server (stdio transport)
withings-mcp auth         Interactive OAuth setup (opens the browser)
withings-mcp sync         Sync data to the local cache (--types, --days)
withings-mcp --version    Print the installed package version

Configuration

Environment VariableDefaultDescription
WITHINGS_MCP_CONFIG_DIR./config/Directory for credentials and tokens
WITHINGS_MCP_DB_PATH./withings.dbSQLite database path

Example Prompts

  • "Sync my Withings data"
  • "Show my weight for the last 3 months"
  • "How has my sleep changed this year?"
  • "Compare my body composition this month vs last month"
  • "What workouts did I do in March?"
  • "What Withings devices do I have connected?"
  • "Show my sleep trends quarterly"

Development

# Install with dev dependencies
uv pip install -e . && uv pip install pytest

# Run tests (all use in-memory SQLite with fictional data)
.venv/bin/python -m pytest tests/ -v

Security

  • Read-only: No tools modify data on Withings servers
  • Local storage: Health data stays in your local SQLite database
  • Token storage: OAuth tokens stored in config/ (gitignored, file permissions 0600)
  • Error messages: Never contain health data values - only status codes
  • Pre-commit hook: An optional hook (scripts/check-no-data.sh) blocks database files and credentials from commits - install it with the one-liner in CONTRIBUTING.md

Contributing

See CONTRIBUTING.md for development setup, the test workflow, and the pre-commit hook. Changes are tracked in CHANGELOG.md.

License

GPL-3.0-or-later

Rendered live from partymola/withings-mcp's GitHub README — not stored, always reflects the source repo.

1 Install Method

NameDescriptionCategorySource
pypi packageInstall via pypi (stdio transport)mcp-serverwithings-mcp

0 Comments

Login required
Log in to post a comment or update on this repo.

No comments yet — be the first to share an update.