mcpField
W
Withings

Withings

リモート
github.com/akutishevskyヘルスケア457 週間前に更新
リポジトリ

Withings について

Withings MCP Server は、Withings の健康データを Claude などの MCP クライアントに接続する MCP サーバーです。睡眠、身体測定、ワークアウト、心臓関連データについて自然な会話で問い合わせられます。ホスト版が提供されており、セルフホストも可能です。

主な機能

  1. 01睡眠サマリー、睡眠ステージ、HRV データ
  2. 02体重や血圧などの身体測定データ
  3. 03ワークアウト記録と日次アクティビティ統計
  4. 04心電図の記録一覧と波形データ
  5. 05OAuth 2.0 による認可と暗号化されたトークン保存

活用シーン

  1. 01過去 1 週間の睡眠の質の確認
  2. 021 か月間の体重推移の把握
  3. 03週間の歩数目標の達成状況の確認

MCP 対応

本プロジェクトは Withings の健康データ取得を MCP クライアント向けのツールとして公開する MCP サーバーです。リモート接続では OAuth 2.0 でユーザーを認可します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://withings-mcp.com/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

詳細

Withings MCP サーバー

サーバーの費用を Patreon で支援してください

Quality Gate Status Bugs Code Smells Lines of Code Reliability Rating Security Rating Maintainability Rating Vulnerabilities

Withings の健康データを Claude に取り込む Model Context Protocol(MCP)サーバーです。睡眠パターン、身体測定値、ワークアウト、心臓のデータなどに、自然な会話を通じてアクセスできます。

🔒 プライバシー優先:これは個人プロジェクトであり、透明性を示すために意図的にリポジトリを公開しています。コードから、個人情報を記録したり、悪意を持って保存したりしていないことをご確認いただけます。トークンやユーザー ID などの機密データはすべて保存時に暗号化され、ログから自動的にマスキングされます。プライバシー保護へのこの取り組みを確認するため、コードベース全体をご覧いただけます。

⚠️ 免責事項:このサーバーは、保証や確約を伴わず「現状のまま」提供されます。セキュリティとプライバシーの確保にあらゆる努力を払っていますが、可用性、データの完全性、セキュリティについて保証するものではありません。自己責任でご利用ください。本番環境での利用には、ご自身のインスタンスをセルフホストすることをご検討ください。

クイックセットアップ

  1. Claude Desktop → Customize → Connectors を開きます
  2. + → Add Custom Connector をクリックします
  3. URL に https://withings-mcp.com/mcp を設定し、Add をクリックします
  4. Connect をクリックし、Withings アカウントで認証します

これで完了です。睡眠、体重、ワークアウト、心臓のデータについて Claude に質問できます。

デモ

デモ

目次

これでできること

この MCP サーバーを使うと、Claude が Withings の健康データにアクセスできるようになり、次のようなことができます。

  • 睡眠を分析する:睡眠の質、睡眠時間、深い睡眠の段階、睡眠中の心拍数について質問できます
  • 身体指標を追跡する:体重の推移、体組成、血圧、心拍数の経時変化を確認できます
  • ワークアウトを振り返る:運動の傾向、消費カロリー、心拍ゾーンを分析できます
  • 心臓の健康状態を確認する:心電図の記録や詳細な心臓データにアクセスできます
  • 目標を設定して追跡する:フィットネスや健康に関する目標を確認できます
  • パターンを特定する:睡眠、活動、その他の指標の相関関係を見つけられます
  • 分析情報を得る:AI を活用して健康状態の傾向を分析できます

Claude や、その他の MCP 対応クライアントと自然な会話をするだけで利用できます。

エンドユーザー向け:ホスト済みサーバーの利用

自分でホストせずに、この MCP サーバーを Claude Desktop で使いたい場合は、次の手順に従ってください。

前提条件
  1. 接続済みデバイスがある Withings アカウント
  2. Claude Desktop または、パソコンにインストール済みのその他の MCP 対応クライアント
セットアップ手順
ステップ 1:Claude Desktop にコネクターを追加する
  1. Claude Desktop を開きます
  2. サイドバーまたはメニューから カスタマイズ に移動します
  3. コネクター セクションを開きます
  4. + ボタンをクリックして、新しいコネクターを追加します
  5. カスタムコネクターを追加 を選択します
  6. 次の情報を入力します。
    • 名前:Withings(または任意の名前)
    • リモート MCP サーバー URL:https://withings-mcp.com/mcp
  7. 追加 をクリックします

注:お使いの MCP クライアントが UI によるコネクター設定に対応していない場合は、設定ファイルを手動で編集できます。下記の手動設定ガイドをご覧ください。

ステップ 2:接続して認証する
  1. コネクター の設定で、追加した Withings コネクターを見つけます
  2. コネクターの横にある 接続 をクリックします
  3. Withings の認証ページがウェブブラウザーで開きます
  4. Withings アカウントにログインします
  5. 要求された権限を確認し、承認します
  6. リダイレクトされると、接続が完了します

認証が完了すると、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 サーバーを自分でデプロイする方法は次のとおりです。

前提条件
  1. Bun 1.1 以降がインストールされていること
  2. Withings Developer Account を持っていること
ステップ 1:Withings アプリケーションを作成する
  1. Withings Developer Portal にアクセスします
  2. 新しいアプリケーションを作成します
  3. Client ID と Client Secret を控えます
  4. 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 データベースをセットアップする
  1. Supabase で無料のプロジェクトを作成します
  2. Supabase CLI をインストールします:bun install -g supabase(または brew install supabase/tap/supabase を使用します)
  3. プロジェクトをリンクします:supabase link --project-ref <your-project-ref>
  4. データベースのマイグレーションを適用します:supabase db push
  5. ダッシュボードの Settings → API から認証情報を取得します:
    • Project URL → SUPABASE_URL
    • Service role key → SUPABASE_SECRET_KEY
ステップ 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 の場合:
  1. Claude Desktop を開きます
  2. Customize → Connectors セクションに移動します
  3. + ボタンをクリックし、Add Custom Connector を選択します
  4. 以下の詳細を入力します。
    • Name:Withings(または任意の名前)
    • Remote MCP server URL:https://your-domain.com/mcp
  5. Add をクリックします
  6. コネクターの横にある 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 で確認できます。

貢献

これは個人プロジェクトですが、貢献を歓迎します。以下の手順に従ってください。

  1. リポジトリをフォークします
  2. フィーチャーブランチを作成します
  3. 変更を加えます
  4. プルリクエストを送信します

ライセンス

MIT ライセンスの詳細については、LICENSE ファイルをご覧ください。

サポート

謝辞

以下を使用して構築されています。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。