MCP server for Withings health data β sleep, activity, heart, and body metrics.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Help me pay for the servers on Patreon
A Model Context Protocol (MCP) server that brings your Withings health data into Claude. Access your sleep patterns, body measurements, workouts, heart data, and more through natural conversation.
π Privacy First: This is my personal project, and the repository is intentionally public to demonstrate transparency. The code shows that no personal information is logged or stored maliciously. All sensitive data (tokens, user IDs) is encrypted at rest and automatically redacted from logs. You can review the entire codebase to verify this commitment to privacy.
β οΈ Disclaimer: This server is provided as-is without any guarantees or warranties. While I've made every effort to ensure security and privacy, I make no guarantees about availability, data integrity, or security. Use at your own risk. For production use cases, consider self-hosting your own instance.
https://withings-mcp.com/mcp β click AddThat's it! Ask Claude about your sleep, weight, workouts, or heart data.

This MCP server gives Claude access to your Withings health data, allowing you to:
All through natural conversation with Claude or any other MCP-compatible client.
If you just want to use this MCP server with Claude Desktop without hosting anything yourself, follow these steps:
Withings (or any name you prefer)https://withings-mcp.com/mcpNote: If your MCP client doesn't support UI-based connector configuration, you can manually edit the config file instead. See the manual configuration guide below.
After authorization, Claude will have access to your Withings data!
Once connected, Claude can use these tools to access your data:
get_hrv - Minute-level RMSSD, SDNN, and quality scores captured during sleepget_sleep_summary - Sleep duration, stages (light/deep/REM), heart rate, breathing, sleep scoreget_activity - Daily steps, distance, calories, elevation, activity durationsget_intraday_activity - High-frequency activity data throughout the dayget_workouts - Detailed workout summaries with heart rate zones and metricsget_measures - Weight, body composition, blood pressure, heart rate, temperature, VO2 max, and moreget_user_devices - List of connected Withings devicesget_user_goals - Your health and fitness goals (steps, sleep, weight)list_heart_records - List of ECG recordingsget_heart_signal - Detailed ECG waveform datalist_stetho_records - List of stethoscope recordingsget_stetho_signal - Detailed audio signal dataTry asking Claude:
Want to run your own instance? Here's how to deploy this MCP server yourself.
https://your-domain.com/callback
The hosted version includes a Google Analytics tag (G-ZMGF9WXL3W) in the static pages under public/. If you're forking this repo, remove or replace the GA snippet in public/index.html and public/health.html, and update the CSP headers in src/server/app.ts accordingly.
bun install -g supabase (or use brew install supabase/tap/supabase)supabase link --project-ref <your-project-ref>supabase db pushSUPABASE_URLSUPABASE_SECRET_KEYNote: Withings requires a publicly accessible URL for OAuth callbacks. For local development, use a tunneling service to expose your local server or deploy to a staging environment for testing.
Make sure your redirect URI in the .env file matches the publicly accessible URL pointing to your local server.
Deploy to DigitalOcean App Platform (its Bun buildpack detects package.json and runs bun run start automatically), or any other host that supports Bun.
Set the following environment variables on your hosting platform:
| Variable | Required | Example |
|---|---|---|
WITHINGS_CLIENT_ID | Yes | your_client_id |
WITHINGS_CLIENT_SECRET | Yes | your_client_secret |
WITHINGS_REDIRECT_URI | Yes | https://your-domain.com/callback |
ENCRYPTION_SECRET | Yes | Generated from step 2 |
SUPABASE_URL | Yes | https://your-project.supabase.co |
SUPABASE_SECRET_KEY | Yes | Your Supabase service role key |
PORT | No | 3000 (or your platform's default) |
LOG_LEVEL | No | info |
ALLOWED_ORIGINS | No | https://example.com,https://app.example.com |
Go back to your Withings developer app and update the redirect URI to match your deployed URL:
https://your-domain.com/callback
Withings (or any name you prefer)https://your-domain.com/mcpConfigure your MCP client with the following connection details:
https://your-domain.com/mcp/.well-known/oauth-authorization-server| Variable | Required | Description |
|---|---|---|
WITHINGS_CLIENT_ID | Yes | Your Withings app client ID |
WITHINGS_CLIENT_SECRET | Yes | Your Withings app client secret |
WITHINGS_REDIRECT_URI | Yes | OAuth callback URL (must match Withings app settings) |
ENCRYPTION_SECRET | Yes | 32+ character secret for token encryption (generate with bun run generate-secret) |
SUPABASE_URL | Yes | Your Supabase project URL (from Dashboard β Settings β API) |
SUPABASE_SECRET_KEY | Yes | Your Supabase service role key (from Dashboard β Settings β API) |
PORT | No | Server port (default: 3000) |
LOG_LEVEL | No | Logging level: trace, debug, info, warn, error (default: info) |
ALLOWED_ORIGINS | No | Comma-separated list of allowed CORS origins for browser clients |
See CLAUDE.md for detailed architecture documentation.
All Withings access tokens, refresh tokens, and authorization codes are encrypted at rest using AES-256-GCM:
Important: Keep your ENCRYPTION_SECRET:
bun run generate-secret)/authorize endpoint validates redirect_uri against the registered client's allowed URIs, preventing open redirect attacksunsafe-inline directivesThe custom logger automatically redacts all sensitive information:
You can review the logging implementation in src/utils/logger.ts.
This is a personal project, but contributions are welcome! Please:
MIT License - see LICENSE file for details.
Built with:
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/withings-health-data)<a href="https://allmcps.com/mcp/withings-health-data"><img src="https://allmcps.com/api/badge/withings-health-data?style=directory" alt="Withings Health Data on AllMCPs" /></a>