Renpho Health MCP
Renpho Health MCP — Claudeのトレーニングコーチ向けスマートスケールデータ
Cloudflare Workers上にデプロイされたリモートMCPサーバーで、Renphoスマートスケールの体組成データ(体重、体脂肪、除脂肪量、筋肉量、水分量、骨量、内臓脂肪、BMR、代謝年齢など)をRenpho HealthクラウドAPI経由でClaudeに公開します。カスタムコネクタとして一度追加すれば、Claude Web、デスクトップ、モバイルで動作します。StravaおよびGoogle Healthコネクタと組み合わせることで、コーチはトレーニング負荷、回復、そして体組成を確認できます。
データソース: Renpho Healthアプリ(青いアイコン)のバックエンド
cloud.renpho.com。レガシーRenphoアプリ(renpho.qnclouds.com)のアカウントはサポートされていません。先にアプリ内で移行してください。
StartupBros-com/renpho-mcp-server(ローカルstdioサーバー)とforkerer/RenphoGarminSync-CLIのリバースエンジニアリングされたプロトコルに基づき、google-health-mcpのスタイルでマルチユーザーリモートWorkerとして再構築しました。
Tools
Tool | What it answers |
| 「今の調子は?」— 最新の測定値とすべての指標、カテゴリ分類、7/30/90日前との変化、アプリの体重目標への進捗 |
| 期間内の測定履歴:各計量ごとの全指標、または日/週ごとの平均値。オプションで指標のサブセットとデバイス/インピーダンスの詳細 |
| 指標ごとの開始/終了平均、変化、最小/最大/平均、最小二乗法による週次レート(r²付き)、さらに日次/週次シリーズ — 体重変化は脂肪か除脂肪量か? |
| 日平均体重と7日移動平均、適合した週次レート、目標達成時期の予測(および目標日を達成するために必要なレート) |
| 性別、年齢、身長、単位、アスリートモード、アプリで設定された目標(目標体重/日付、目標体脂肪、開始時体重) |
| スケールユーザー(プロファイル)ID、データテーブル、家族メンバー、Renphoが報告するすべてのデバイス/データカテゴリ |
| エンドツーエンドのプローブ:セッション、テーブル、ページ順序、プロファイルごとの最近の測定値、バインド済み/未バインド、検出されたデバイス |
| エスケープハッチ:アプリの暗号化/認証を適用して任意の |
| キャッシュされたセッションとページを破棄して再ログイン(新しい計量が表示されない場合) |
| アカウントにキャッシュされたすべてのデータを削除 |
トラブルシューティング: 測定値が欠落している、古い、または誤った人物に帰属しているように見える場合は、最初に
run_diagnosticsを実行してください。データが実際にどこにあるか(どのテーブル/プロファイル、バインドされているかどうか)を報告するため、下流の症状から推測する必要はありません。
Related MCP server: Oura Ring MCP Server
Field mapping (Renpho Health API)
RenphoHealth/scale/queryAllMeasureDataListからの生レコードには約57個のキーがあります。ツールはメトリクスを単位接尾辞付きのsnake_caseにリネームし、enumコードをデコードし、エンベロープノイズを除去し、認識されないものはextraの下に保持するため、Renphoがフィールドを追加しても失われるものはありません(src/measurements.tsを参照)。
Renpho key | Tool field | Unit / meaning |
|
| kg(アプリの表示単位に関係なく常にkg) |
|
| — |
|
| % |
|
| kg |
|
| % |
|
| レベル1〜59(≤9は健康的、10〜14は高、≥15は非常に高) |
|
| % |
|
| % |
|
| kg |
|
| kg |
|
| % |
|
| kcal/日 |
|
| 年 |
|
| bpm(心拍センサー付きスケールのみ) |
|
| L/min/m² |
|
| cm(入力された場合のみ) |
|
|
|
|
| ブール値 |
|
| 生の生体インピーダンス(Ω) |
|
| 測定値の割り当て方法( |
|
| デバイスとフラグ |
|
| 測定値がバインドされているアカウント / 測定されたプロファイル |
|
| Unix秒。 |
0として報告されたメトリクスは「未測定」を意味し、省略されます。Renpho IDはJavaScriptの安全な範囲を超える64ビット整数であるため、クライアントは解析前にそれらを文字列として再引用します(src/json.ts)。
データの取得方法
ログイン(
renpho-aggregation/user/login)はexpAt付きのベアラートークンを返します。これは有効期限の少し前までKVにキャッシュ(シール)され、再ログインによって更新されます — Renphoにはリフレッシュトークンがありません。device/countはアカウントのデータテーブルとレコード数を一覧表示し、ツール呼び出しのたびに新しく取得されます。これが鮮度のシグナルです。テーブルごとに2つのストア。 各
measurements_info_Nテーブルは、両方のscale/queryAllMeasureDataList(レガシーストア。device/countがカウントする行)とscale/queryBodyCompositionMeasureData(MorphoScanなどの8電極/多周波数スケールが使用する新しいストア。device/countはカウントしない)から読み取られます。行はidでマージされ、両方が存在する場合はボディコンポジションのコピーが保持されます。これはより豊富なフィールドセットを持つためです。source.endpointは読み取りがどのストアから来たかを示します。測定ページ(各200レコード)はKVにキャッシュされます。レガシーページはテーブル、プロファイルセットおよびレコード数でキー付けされるため、新しい計測があるとキーが変わり自動的に無効化されます。ボディコンポジションページにはカウントがなく、代わりに15分間キャッシュされます。ページネーターは各ストアの並び順を検出し、要求されたウィンドウに必要な範囲だけを走査します(呼び出しごとにストアあたり最大30ページ/6,000レコード)。
選択: サインイン中のアカウント(
bUserId)にバインドされた測定値がデフォルトで返されます。まだ何もバインドされていない場合(Wi-Fiスケールはアプリが測定値をバインドする前にアップロードする)、アカウントの最初のスケールユーザープロファイルにフォールバックし、その旨を通知します。家族メンバーの場合はscale_user_idを渡してください。
キャッシュと暗号化
RENPHO_CACHE KV名前空間に書き込まれるすべてのもの — セッショントークンと測定ページ — は、SESSION_ENCRYPTION_KEYシークレットから導出されたキー(メールアドレスのSHA-256)でユーザーごとにキー付けされ、AES-256-GCMでシールされます。シークレットが未設定の場合、キャッシュは単に無効化されます。キャッシュの失敗がリクエストを壊すことはありません。
Renphoトランスポート自体は、アプリに同梱されている静的キーを使用したAES-128-ECBです。WebCryptoにはECBモードがないため、Workerは純JSのaes-js(src/crypto.ts、テストでOpenSSLとバイト単位で検証済み)を使用します。
サインインの仕組み(一度読んでください)
RenphoにはOAuthがありません。WorkerはClaudeに対してOAuthサーバーとして機能し(workers-oauth-provider)、その/authorizeページはRenphoのサインインフォームです。メールアドレスとパスワードはRenphoに対して一度だけ検証され、その後グラントの暗号化されたプロパティ内に保存されます — 暗号化キーはClaudeが保持するトークンから導出されるため、KVの内容だけでは復号できません。資格情報が必要なのは、Renphoのセッショントークンが数時間で期限切れになり、新しいトークンを取得する唯一の方法が再ログインだからです。
Claudeでコネクタを切断するとグラントが削除されます(保存された資格情報も一緒に削除されます)。
delete_my_dataはキャッシュをクリアします。ALLOWED_EMAILS(カンマ区切り)を設定すると、あなたのデプロイメントに他の人のRenphoアカウントが接続するのを防げます。空のままにすると、任意のRenphoユーザーが使用できます(各ユーザーは自分のデータしか見えません)。
デプロイ
オプションA — GitHub Actions(ローカルのwrangler不要)
.github/workflows/deploy.ymlのワークフローは、masterへのプッシュのたびに(およびオンデマンドで)デプロイします。アプリのシークレットはGitHubではなくCloudflareにあります — GitHubが保持するのはCloudflare APIトークンとアカウントIDのみです。
Cloudflareダッシュボードで2つのKV名前空間を作成します(Storage & Databases → KV):
OAUTH_KVとRENPHO_CACHE。それらのIDをwrangler.jsoncに貼り付けてコミットします。Cloudflare APIトークンを作成します(My Profile → API Tokens → "Edit Cloudflare Workers"テンプレート)し、アカウントIDをメモします。
GitHubリポジトリのシークレット
CLOUDFLARE_API_TOKENとCLOUDFLARE_ACCOUNT_IDを追加します。masterにプッシュします。 ActionsのログにWorkerのURL(https://renpho-health-mcp.<subdomain>.workers.dev)が出力されます。Cloudflareでアプリのシークレットを設定します(Workers & Pages → renpho-health-mcp → Settings → Variables and Secrets、タイプSecret):
SESSION_ENCRYPTION_KEY= 任意の長いランダム文字列。 必要に応じてALLOWED_EMAILS変数にあなたのRenphoメールアドレスを設定します。
オプションB — ローカルのwrangler
npm install
npx wrangler kv namespace create OAUTH_KV # paste the id into wrangler.jsonc
npx wrangler kv namespace create RENPHO_CACHE # paste the id into wrangler.jsonc
npx wrangler secret put SESSION_ENCRYPTION_KEY # any long random string
npx wrangler deployClaudeで接続
Settings → Connectors → Add custom connector.
URL:
https://renpho-health-mcp.<subdomain>.workers.dev/mcpConnectをクリック → Renpho Healthのメールアドレス/パスワードでサインイン → 完了。
その後、コーチにこう尋ねてみてください:「最新のスケール測定値を取得して、先月の体重減少が脂肪由来か除脂肪量由来かを教えてください。」
コネクタのアイコン
WorkerはMCPのserverInfo.icons(およびwebsiteUrl)でPUBLIC_URL/icon.pngを公開するため、サーバーブランディングをレンダリングするクライアントはコネクタリストにそれを表示します。デフォルトは生成されたスケールアイコン(npm run icon)です。代わりに公式のRenpho Healthアプリアイコンを使用するには、App Store/Play StoreのリストからPNGを保存して埋め込みます:
npm run icon:embed -- ~/Downloads/renpho-health-icon.png # writes src/icon.ts + assets/icon.png
npm run deploy(公式マークはRenphoの商標です — 個人のデプロイメントには問題ありませんが、再配布には適していません。そのためこのリポジトリには含まれていません。)
ローカル開発
cp .dev.vars.example .dev.vars # set SESSION_ENCRYPTION_KEY
npm run dev # http://localhost:8787
npm test # vitest
npm run typecheck # worker + tests
npm run icon # regenerate assets/icon.png + src/icon.tsMCP Inspectorでフローをテストします:
npx @modelcontextprotocol/inspector@latest
# Transport: Streamable HTTP → http://localhost:8787/mcp → Connect仕組み
Claude (web/desktop/mobile)
└─ custom connector → /mcp
└─ workers-oauth-provider (this Worker IS Claude's OAuth server)
└─ AuthHandler (Renpho sign-in page; validates against Renpho)
└─ RenphoMCP (Durable Object) → RenphoClient → cloud.renpho.comsrc/index.ts—OAuthProvider+McpAgentDurable Objectを配線します。src/auth-handler.ts— サインインページ(/authorize)、ランディングページ、アイコン。src/renpho-api.ts— Renphoクライアント:セッションキャッシュ、リトライ/再ログイン付きの暗号化トランスポート、順序非依存のページネーター、ユーザー選択。src/measurements.ts— 生レコード → スリムなコーチング形状、列挙型、分類、プロファイル。src/stats.ts— 回帰、エッジウィンドウ集計、移動平均、目標予測。src/tools.ts— 上記のコーチングツール。src/crypto.ts、src/json.ts、src/dates.ts— AESヘルパー、big-int対応JSON、タイムゾーン対応日付。すべて純粋でユニットテスト済み。
注意事項と制限
Wi-Fiスケールのバインド遅延。 一部のWi-Fiスケールは、アプリがアカウントにバインドする前に測定値をアップロードします。それまでは
scale_user_idはありますがbound_user_idはありません。ツールは最初のプロファイルにフォールバックし、その旨を通知します(selection: "fallback_scale_user")。run_diagnosticsは非表示の測定値を一覧表示します。生体インピーダンスはノイズが多いです。 水分量、時間帯、最近のトレーニングによって体脂肪率/体水分率の測定値は数ポイント変動します。同じ時間帯に計測し、単発の測定値ではなく平均値/トレンドを読んでください — トレンドツールが7日間のエッジウィンドウと移動平均を使用するのはまさにこのためです。
単位。 質量はkg、組成指標は%で、Renphoアプリと一致しています。
muscleは筋肉量(kg)、sinewは骨格筋率%として報告されます。デバイスのファームウェアが別の値を報告する場合、生の値は変更されず、ラベルのみが異なります。MorphoScan/8電極スケール。 これらの測定値はボディコンポジションストア(上記参照)にあり、追加のデバイス固有フィールド — 部位別脂肪/筋肉、SMIなど — を持ちます。ツールはこれらを
extraの下でパススルーします(include_detailsを要求するか、run_diagnosticsのunrecognised_fields_seenを参照してください)。これらのフィールド名でissueを開いて、適切にマッピングできるようにしてください。専用ツールがあるのは
scaleカテゴリのみです。 周囲径/メジャー、トレッドミル、ロープ、ボディスキャン(MorphoScan)のデータはget_scale_users→device_categoriesに表示され、query_endpointで探索できます。レート制限。 負荷がかかるとRenphoはコード
429を返します。クライアントはバックオフしてリトライし、キャッシュされたページが引き続き提供されます。パスワードの変更は保存された資格情報を壊します — コネクタを切断して再接続してください。
非公式API。 これはモバイルアプリのプライベートAPIを使用しています。Renphoはいつでも変更する可能性があります。Renphoとは提携しておらず、承認も受けていません。
プライバシー
資格情報はRenphoとの認証にのみ使用され、OAuthグラント内に暗号化されて保存されます。ログには何も記録されません。
健康データは自分のKV名前空間にのみキャッシュされ、シールされ、
delete_my_dataで削除可能です。第三者に送信されるものはありません。
クレジット
APIリバースエンジニアリング:forkerer/RenphoGarminSync-CLI およびStartupBros-com/renpho-mcp-server(MIT)。
ライセンス
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseCqualityCmaintenanceProvides access to body composition data from Renpho smart scales, enabling users to query weight, BMI, body fat percentage, muscle mass, and other health metrics with trend analysis over customizable time periods.3264MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude to access and query Oura Ring health data including sleep, activity, readiness, heart rate, and more via the Oura API.MIT
- FlicenseAqualityDmaintenanceFetches body composition data (weight, body fat percentage) from the Tanita Health Planet API and exposes it as MCP tools for AI agents like Claude Desktop.51
- FlicenseAqualityCmaintenanceEnables Claude to read your WHOOP health data including recovery, sleep, strain, and workouts through the official WHOOP API, so you can ask natural language questions about your fitness metrics.7
Related MCP Connectors
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
63 tools for Apple Health, Fitbit, Oura & Health Connect data in Claude, ChatGPT, Grok & Mistral.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/a1dancole/renpho-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server