Withings について
Withings MCP Server は、Withings の健康データを Claude などの MCP クライアントに接続する MCP サーバーです。睡眠、身体測定、ワークアウト、心臓関連データについて自然な会話で問い合わせられます。ホスト版が提供されており、セルフホストも可能です。
主な機能
- 01睡眠サマリー、睡眠ステージ、HRV データ
- 02体重や血圧などの身体測定データ
- 03ワークアウト記録と日次アクティビティ統計
- 04心電図の記録一覧と波形データ
- 05OAuth 2.0 による認可と暗号化されたトークン保存
活用シーン
- 01過去 1 週間の睡眠の質の確認
- 021 か月間の体重推移の把握
- 03週間の歩数目標の達成状況の確認
MCP 対応
本プロジェクトは Withings の健康データ取得を MCP クライアント向けのツールとして公開する MCP サーバーです。リモート接続では OAuth 2.0 でユーザーを認可します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://withings-mcp.com/mcpclaude mcp add --transport http withings https://withings-mcp.com/mcp{"mcpServers":{"withings":{"type":"http","url":"https://withings-mcp.com/mcp"}}}Cursor で開く{"servers":{"withings":{"type":"http","url":"https://withings-mcp.com/mcp"}}}VS Code で開く{"mcpServers":{"withings":{"type":"http","url":"https://withings-mcp.com/mcp"}}}{"mcpServers":{"withings":{"serverUrl":"https://withings-mcp.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
Withings MCP サーバー
Withings の健康データを Claude に取り込む Model Context Protocol(MCP)サーバーです。睡眠パターン、身体測定値、ワークアウト、心臓のデータなどに、自然な会話を通じてアクセスできます。
🔒 プライバシー優先:これは個人プロジェクトであり、透明性を示すために意図的にリポジトリを公開しています。コードから、個人情報を記録したり、悪意を持って保存したりしていないことをご確認いただけます。トークンやユーザー ID などの機密データはすべて保存時に暗号化され、ログから自動的にマスキングされます。プライバシー保護へのこの取り組みを確認するため、コードベース全体をご覧いただけます。
⚠️ 免責事項:このサーバーは、保証や確約を伴わず「現状のまま」提供されます。セキュリティとプライバシーの確保にあらゆる努力を払っていますが、可用性、データの完全性、セキュリティについて保証するものではありません。自己責任でご利用ください。本番環境での利用には、ご自身のインスタンスをセルフホストすることをご検討ください。
クイックセットアップ
- Claude Desktop → Customize → Connectors を開きます
- + → Add Custom Connector をクリックします
- URL に
https://withings-mcp.com/mcpを設定し、Add をクリックします - Connect をクリックし、Withings アカウントで認証します
これで完了です。睡眠、体重、ワークアウト、心臓のデータについて Claude に質問できます。
デモ

目次
これでできること
この MCP サーバーを使うと、Claude が Withings の健康データにアクセスできるようになり、次のようなことができます。
- 睡眠を分析する:睡眠の質、睡眠時間、深い睡眠の段階、睡眠中の心拍数について質問できます
- 身体指標を追跡する:体重の推移、体組成、血圧、心拍数の経時変化を確認できます
- ワークアウトを振り返る:運動の傾向、消費カロリー、心拍ゾーンを分析できます
- 心臓の健康状態を確認する:心電図の記録や詳細な心臓データにアクセスできます
- 目標を設定して追跡する:フィットネスや健康に関する目標を確認できます
- パターンを特定する:睡眠、活動、その他の指標の相関関係を見つけられます
- 分析情報を得る:AI を活用して健康状態の傾向を分析できます
Claude や、その他の MCP 対応クライアントと自然な会話をするだけで利用できます。
エンドユーザー向け:ホスト済みサーバーの利用
自分でホストせずに、この MCP サーバーを Claude Desktop で使いたい場合は、次の手順に従ってください。
前提条件
- 接続済みデバイスがある Withings アカウント
- Claude Desktop または、パソコンにインストール済みのその他の MCP 対応クライアント
セットアップ手順
ステップ 1:Claude Desktop にコネクターを追加する
- Claude Desktop を開きます
- サイドバーまたはメニューから カスタマイズ に移動します
- コネクター セクションを開きます
- + ボタンをクリックして、新しいコネクターを追加します
- カスタムコネクターを追加 を選択します
- 次の情報を入力します。
- 名前:
Withings(または任意の名前) - リモート MCP サーバー URL:
https://withings-mcp.com/mcp
- 名前:
- 追加 をクリックします
注:お使いの MCP クライアントが UI によるコネクター設定に対応していない場合は、設定ファイルを手動で編集できます。下記の手動設定ガイドをご覧ください。
ステップ 2:接続して認証する
- コネクター の設定で、追加した Withings コネクターを見つけます
- コネクターの横にある 接続 をクリックします
- Withings の認証ページがウェブブラウザーで開きます
- Withings アカウントにログインします
- 要求された権限を確認し、承認します
- リダイレクトされると、接続が完了します
認証が完了すると、Claude が Withings のデータにアクセスできるようになります!
利用可能なツール
接続すると、Claude は次のツールを使ってデータにアクセスできます。
睡眠とアクティビティ
get_hrv- 睡眠中に記録された、1分単位の RMSSD、SDNN、品質スコアget_sleep_summary- 睡眠時間、睡眠ステージ(浅い睡眠/深い睡眠/REM)、心拍数、呼吸、睡眠スコアget_activity- 1日の歩数、距離、消費カロリー、標高、アクティビティ時間get_intraday_activity- 1日を通じた高頻度のアクティビティデータget_workouts- 心拍ゾーンや各種指標を含む、詳細なワークアウトの概要
身体測定
get_measures- 体重、体組成、血圧、心拍数、体温、VO2 max など
デバイスと目標
get_user_devices- 接続済みの Withings デバイス一覧get_user_goals- 健康とフィットネスの目標(歩数、睡眠、体重)
心臓の健康
list_heart_records- ECG 記録の一覧get_heart_signal- 詳細な ECG 波形データ
聴診器(BPM Core をお持ちの場合)
list_stetho_records- 聴診器の記録一覧get_stetho_signal- 詳細な音声信号データ
会話の例
Claude に次のように尋ねてみてください。
- 「過去1週間の睡眠の質はどうでしたか?」
- 「先月の体重の推移を見せてください」
- 「安静時心拍数の平均はいくつですか?」
- 「今週は歩数の目標を達成しましたか?」
- 「今月と先月のワークアウトの強度を比較してください」
- 「今月はいつ最もよく眠れましたか?」
プライバシーとセキュリティ
- トークンの暗号化:すべての認証トークンと認可コードは、保存前に AES-256-GCM で暗号化されます
- 個人データのログ記録なし:コードは公開されているため、機密情報がログに記録されないことを確認できます
- 自動的なマスキング:すべてのユーザー ID、トークン、認証情報は、システムログから自動的にマスキングされます
- OAuth 2.0:PKCE サポートとリダイレクト URI 検証を備えた、業界標準の安全な認証方式です
- セッションのセキュリティ:MCP セッションは認証済みユーザーに紐づけられ、ユーザー間のアクセスを防ぎます
- アクセスはいつでも管理できます:Withings アカウントの設定から、いつでもアクセスを取り消せます
開発者向け:セルフホスト
独自のインスタンスを実行しますか?この MCP サーバーを自分でデプロイする方法は次のとおりです。
前提条件
- Bun 1.1 以降がインストールされていること
- Withings Developer Account を持っていること
ステップ 1:Withings アプリケーションを作成する
- Withings Developer Portal にアクセスします
- 新しいアプリケーションを作成します
- Client ID と Client Secret を控えます
- Redirect URI を
https://your-domain.com/callbackに設定します- これは一般公開されている URL である必要があります(Withings は localhost に対応していません)
- サーバーをホストする任意のドメインを指定できます(例:Fly.io、Railway、自前のサーバーなど)
重要:Google Analytics を削除する
ホスト版では、public/ 内の静的ページに Google Analytics タグ(G-ZMGF9WXL3W)が含まれています。このリポジトリをフォークする場合は、public/index.html と public/health.html の GA スニペットを削除または置き換え、それに応じて src/server/app.ts の CSP ヘッダーを更新してください。
ステップ 2:クローンしてセットアップする
# Clone the repository
git clone https://github.com/your-username/withings-mcp.git
cd withings-mcp
# Install dependencies
bun install
# Generate encryption secret
bun run generate-secret
# Copy the output - you'll need it for environment variables
ステップ 2.5:Supabase データベースをセットアップする
- Supabase で無料のプロジェクトを作成します
- Supabase CLI をインストールします:
bun install -g supabase(またはbrew install supabase/tap/supabaseを使用します) - プロジェクトをリンクします:
supabase link --project-ref <your-project-ref> - データベースのマイグレーションを適用します:
supabase db push - ダッシュボードの Settings → API から認証情報を取得します:
- Project URL →
SUPABASE_URL - Service role key →
SUPABASE_SECRET_KEY
- Project URL →
ステップ 3:ローカル開発
注:OAuth コールバックには、一般公開されている URL が必要です。ローカル開発では、トンネリングサービスを使ってローカルサーバーを公開するか、テスト用のステージング環境にデプロイしてください。
# Copy environment template
cp .env.example .env
# Edit .env with your values
# WITHINGS_CLIENT_ID=your_client_id
# WITHINGS_CLIENT_SECRET=your_client_secret
# WITHINGS_REDIRECT_URI=https://your-tunnel-url.com/callback
# ENCRYPTION_SECRET=paste_generated_secret_here
# SUPABASE_URL=https://your-project.supabase.co
# SUPABASE_SECRET_KEY=your_service_role_key
# PORT=3000
# Run locally (Bun executes TypeScript directly — no build step)
bun run dev
.env ファイルのリダイレクト URI が、ローカルサーバーを指す一般公開 URL と一致していることを確認してください。
ステップ 4:本番環境にデプロイする
# The project runs TypeScript directly with Bun — no build step required.
bun run start
DigitalOcean App Platform(Bun のビルドパックが package.json を検出し、bun run start を自動的に実行します)、または Bun に対応した他のホスティング先にデプロイします。
ホスティングプラットフォームで、以下の環境変数を設定します。
| 変数 | 必須 | 例 |
|---|---|---|
WITHINGS_CLIENT_ID | はい | your_client_id |
WITHINGS_CLIENT_SECRET | はい | your_client_secret |
WITHINGS_REDIRECT_URI | はい | https://your-domain.com/callback |
ENCRYPTION_SECRET | はい | ステップ 2 で生成した値 |
SUPABASE_URL | はい | https://your-project.supabase.co |
SUPABASE_SECRET_KEY | はい | Supabase のサービスロールキー |
PORT | いいえ | 3000(またはプラットフォームのデフォルト値) |
LOG_LEVEL | いいえ | info |
ALLOWED_ORIGINS | いいえ | https://example.com,https://app.example.com |
ステップ 5:Withings アプリの設定を更新する
Withings の開発者向けアプリに戻り、リダイレクト URI をデプロイした URL に合わせて更新します。
https://your-domain.com/callback
ステップ 6:MCP クライアントを設定する
Claude Desktop の場合:
- Claude Desktop を開きます
- Customize → Connectors セクションに移動します
- + ボタンをクリックし、Add Custom Connector を選択します
- 以下の詳細を入力します。
- Name:
Withings(または任意の名前) - Remote MCP server URL:
https://your-domain.com/mcp
- Name:
- Add をクリックします
- コネクターの横にある Connect をクリックして認証します
その他の MCP クライアントの場合:
以下の接続情報を使って MCP クライアントを設定します。
- サーバー URL:
https://your-domain.com - トランスポート:Streamable HTTP
- エンドポイント:
/mcp - 認証:OAuth 2.0
- ディスカバリー URL:
/.well-known/oauth-authorization-server
環境変数リファレンス
| 変数 | 必須 | 説明 |
|---|---|---|
WITHINGS_CLIENT_ID | はい | Withings アプリのクライアント ID |
WITHINGS_CLIENT_SECRET | はい | Withings アプリのクライアントシークレット |
WITHINGS_REDIRECT_URI | はい | OAuth コールバック URL(Withings アプリの設定と一致する必要があります) |
ENCRYPTION_SECRET | はい | トークン暗号化用の 32 文字以上のシークレット(bun run generate-secret で生成します) |
SUPABASE_URL | はい | Supabase プロジェクトの URL(Dashboard → Settings → API から取得) |
SUPABASE_SECRET_KEY | はい | Supabase のサービスロールキー(Dashboard → Settings → API から取得) |
PORT | いいえ | サーバーのポート(デフォルト:3000) |
LOG_LEVEL | いいえ | ログレベル:trace、debug、info、warn、error(デフォルト:info) |
ALLOWED_ORIGINS | いいえ | ブラウザクライアントで許可する CORS オリジンのカンマ区切りリスト |
開発コマンド
bun run start # Run the server
bun run dev # Hot-reload mode
bun run typecheck # Type-check with tsc (no emit)
bun run build # Bundle for production (outputs to ./build)
bun run generate-secret # Generate encryption secret for ENCRYPTION_SECRET env variable
プロジェクト構成
src/
├── auth/ # OAuth 2.0 authentication & token storage
├── db/ # Supabase client & cleanup scheduler
├── server/ # Hono app, MCP endpoints, middleware
├── tools/ # MCP tools for Withings API (sleep, measure, user, heart, stetho)
├── types/ # TypeScript type definitions (Hono, Withings API)
├── withings/ # Withings API client
├── utils/ # Logger and encryption utilities
└── index.ts # Main entry point
supabase/
└── migrations/ # Database schema migrations
アーキテクチャの詳細については、CLAUDE.md を参照してください。
セキュリティ機能
トークンの暗号化
Withings のアクセストークン、リフレッシュトークン、認証コードはすべて、AES-256-GCM を使用して保存時に暗号化されます。
- アルゴリズム:AES-256-GCM(認証付き暗号化)
- 鍵導出:100,000 回の反復による PBKDF2
- 多層防御:データベースが侵害された場合でも、トークンは保護されます
重要:ENCRYPTION_SECRET は以下の条件を満たすようにしてください。
- 32 文字以上であること
- ランダムに生成されていること(
bun run generate-secretを使用) - 安全に保管し、バージョン管理にコミットしないこと
- サーバーの再起動後も同じ値を使用すること
OAuth の強化
- リダイレクト URI の検証:
/authorizeエンドポイントはredirect_uriを登録済みクライアントの許可 URI と照合し、オープンリダイレクト攻撃を防ぎます - 使い捨て認証コード:リプレイ攻撃を防ぐため、認証コードは原子的に消費されます(RFC 6749 準拠)
- PKCE サポート:セキュリティを強化する SHA-256 コードチャレンジ方式
- 起動時の検証:必須の環境変数が不足している場合、サーバーは起動を拒否します
トランスポートセキュリティ
- セッショントークンのバインド:MCP セッションは、作成時に使用されたベアラートークンにバインドされ、ユーザーをまたいだセッションの乗っ取りを防ぎます
- JSON-RPC の検証:すべての受信メッセージは、処理前に JSON-RPC 2.0 仕様に照らして検証されます
- リクエスト本文の上限:メモリの枯渇を防ぐため、全体の上限を 1MB に設定しています
- HTTPS へのリダイレクト:本番環境では、HTTP リクエストは自動的に HTTPS にリダイレクトされます
- 厳格な CSP:
unsafe-inlineディレクティブを含まないコンテンツセキュリティポリシー - アトミックなレート制限:行レベルロックを使用する PostgreSQL 関数により、競合状態を防ぎます
プライバシーに配慮したログ記録
カスタムロガーは、すべての機密情報を自動的にマスキングします。
- ✅ 運用イベントとエラーを記録
- ❌ トークン、認証情報、認証コードは記録しません
- ❌ ユーザー ID や個人情報は記録しません
- ❌ 機密データを含む API リクエスト/レスポンスのペイロードは記録しません
ログ記録の実装は src/utils/logger.ts で確認できます。
貢献
これは個人プロジェクトですが、貢献を歓迎します。以下の手順に従ってください。
- リポジトリをフォークします
- フィーチャーブランチを作成します
- 変更を加えます
- プルリクエストを送信します
ライセンス
MIT ライセンスの詳細については、LICENSE ファイルをご覧ください。
サポート
- 課題:GitHub Issues でバグを報告したり、機能をリクエストしたりできます
- Withings API:Withings API Documentation をご覧ください
- MCP プロトコル:Model Context Protocol Documentation をご覧ください
謝辞
以下を使用して構築されています。
- Anthropic による Model Context Protocol
- Withings API
- Hono ウェブフレームワーク
- データベースに Supabase
- ランタイムに Bun
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。