Skip to main content
Glama
a1dancole

Renpho Health MCP

by a1dancole

Renpho Health MCP — 为你的 Claude 训练教练提供智能秤数据

一个远程 MCP 服务器,部署在 Cloudflare Workers 上,通过 Renpho Health 云 API 将你的 Renpho 智能秤 身体成分数据——体重、体脂、去脂体重、肌肉、水分、骨骼、内脏脂肪、BMR、代谢年龄等——暴露给 Claude。 只需添加一次作为自定义连接器,即可在 Claude 网页版、桌面版和移动版 上使用。与 Strava 和 Google Health 连接器配合使用,让你的教练看到训练负荷、恢复情况身体成分。

数据来源: Renpho Health 应用(蓝色图标)后端,位于 cloud.renpho.com。旧版 Renpho 应用(renpho.qnclouds.com)上的账户 不受支持——请先在应用中迁移它们。

基于 StartupBros-com/renpho-mcp-server (一个本地 stdio 服务器)和 forkerer/RenphoGarminSync-CLI 逆向工程协议构建,重构为多用户远程 Worker,风格类似 google-health-mcp

工具

工具

回答的问题

get_latest_measurement

“我目前状态如何?” — 最新读数,包含所有指标、类别分类、与 7/30/90 天前的变化,以及向应用体重目标的进展

get_measurements

一段时间内的读数历史:每次称重的所有指标,或按天/周平均;可选指标子集和设备/阻抗详情

get_body_composition_trend

每个指标的起始/结束平均值、变化、最小/最大/平均值以及最小二乘周速率(含 r²),还有每日/每周序列——体重变化是脂肪还是瘦体重?

get_weight_trend

每日平均体重,带 7 天滚动均值、拟合周速率,以及达到目标的预计时间(以及达到目标日期所需的速率)

get_profile

性别、年龄、身高、单位、运动员模式,以及应用中设置的目标(目标体重/日期、目标体脂、起始体重)

get_scale_users

秤用户(个人资料)ID、数据表、家庭成员以及 Renpho 报告的每个设备和数据类别

run_diagnostics

端到端探测:会话、表、页面排序、每个个人资料的最近读数、绑定与未绑定、看到的设备

query_endpoint

逃生舱口:调用任何 cloud.renpho.com 端点,并应用应用的加密/认证

refresh_data

丢弃缓存的会话和页面并重新登录(在出现新的称重但未显示时)

delete_my_data

删除为你的账户缓存的所有内容

故障排除: 如果读数看起来缺失、过期或归因于 错误的人,请先运行 run_diagnostics。它会报告数据实际 存储在哪里(哪个表/个人资料,绑定与否),而不是让你从下游症状推断。


Related MCP server: Oura Ring MCP Server

字段映射(Renpho Health API)

来自 RenphoHealth/scale/queryAllMeasureDataList 的原始记录有 ~57 个键。 工具将指标重命名为带单位后缀的 snake_case,解码枚举代码, 丢弃信封噪声,并将任何未识别的字段保留在 extra 下,这样当 Renpho 添加字段时不会丢失任何内容(参见 src/measurements.ts)。

Renpho 键

工具字段

单位 / 含义

weight

weight_kg

千克(始终为千克,无论应用的显示单位如何)

bmi

bmi

bodyfat

body_fat_pct

%

fatFreeWeight

fat_free_mass_kg

千克

subfat

subcutaneous_fat_pct

%

visfat

visceral_fat_level

等级 1–59(≤9 健康,10–14 高,≥15 非常高)

water

body_water_pct

%

sinew

skeletal_muscle_pct

%

muscle

muscle_mass_kg

千克

bone

bone_mass_kg

千克

protein

protein_pct

%

bmr

bmr_kcal

千卡/天

bodyage

metabolic_age

heartRate

heart_rate_bpm

次/分(仅限带心率传感器的秤)

cardiacIndex

cardiac_index

升/分钟/平方米

waistline, hip

waistline_cm, hip_cm

厘米(仅当输入时)

bodyShape / bodytype

body_type

thin, low_fat, athletic, muscle_deficient, well_balanced, overweight, invisible_obesity, fat_excess, obese

personType

athlete_mode

布尔值

resistance, secResistance, actual*

impedance.*

原始生物阻抗(Ω)

method

source.method

读数如何分配(bluetooth_online_measure, cloud_wifi_auto_allocation, manual_input, …)

internalModel, scaleName, mac, deviceType, isAuto, sportFlag, invalidFlag

source.*

设备 + 标志

bUserId, subUserId

user.bound_user_id, user.scale_user_id

读数绑定到的账户 / 测量时所在的个人资料

timeStamp

timestamp, time, date

Unix 秒;TIME_ZONE 中的本地 RFC-3339 和日历日期

报告为 0 的指标表示“未测量”并被省略。Renpho ID 是 超出 JavaScript 安全范围的 64 位整数,因此客户端在解析前将它们重新引用为字符串(src/json.ts)。

数据如何获取

  • 登录renpho-aggregation/user/login)返回一个带有 expAt 的 bearer token;它会被缓存(密封)在 KV 中,直到临近过期前,然后通过重新登录来续期——Renpho 没有刷新令牌。

  • device/count 列出账户的数据表和记录数,并在每次工具调用时重新获取;它是新鲜度信号。

  • 每张表两个存储。 每张 measurements_info_N 表都从 两个 端点读取:scale/queryAllMeasureDataList(旧存储,device/count 统计的就是它的行数)和 scale/queryBodyCompositionMeasureData(较新的存储,用于 8 电极 / 多频秤,如 MorphoScandevice/count 统计它)。行按 id 合并,当两者都存在时保留体成分副本,因为它携带更丰富的字段集;source.endpoint 标明某条读数来自哪个存储。

  • 测量分页(每页 200 条记录)缓存在 KV 中。旧存储的页面以表、档案集 和记录数 为键,因此新的称重会改变键并自动失效;体成分页面没有计数,改为缓存 15 分钟。分页器检测每个存储的排序方向,只遍历请求窗口所需的页数(每次调用每个存储最多 30 页 / 6 000 条记录)。

  • 选择: 默认返回绑定到已登录账户(bUserId)的读数;如果尚未绑定任何读数(Wi-Fi 秤在应用绑定读数之前就上传了),则回退到账户的第一个秤用户档案并说明这一点。为家庭成员传入 scale_user_id

缓存与加密

写入 RENPHO_CACHE KV 命名空间的所有内容——会话令牌和测量页面——都使用 AES-256-GCM 密封,密钥由 SESSION_ENCRYPTION_KEY 密钥派生,按用户区分(邮箱的 SHA-256)。如果未设置该密钥,则直接禁用缓存。缓存失败绝不会中断请求。

Renpho 传输层本身是 AES-128-ECB,使用应用中内置的静态密钥;WebCrypto 没有 ECB 模式,因此 Worker 使用纯 JS 的 aes-jssrc/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 时部署(也可手动触发)。应用密钥存放在 Cloudflare 中,而不是 GitHub——GitHub 只保存 Cloudflare API 令牌和账户 ID。

  1. 在 Cloudflare 控制台创建两个 KV 命名空间Storage & Databases → KV):OAUTH_KVRENPHO_CACHE。将它们的 ID 粘贴到 wrangler.jsonc 中并提交。

  2. 创建 Cloudflare API 令牌My Profile → API Tokens → "Edit Cloudflare Workers" 模板)并记下你的 Account ID

  3. 添加 GitHub 仓库密钥 CLOUDFLARE_API_TOKENCLOUDFLARE_ACCOUNT_ID

  4. 推送到 master Actions 日志会打印 Worker URL(https://renpho-health-mcp.<subdomain>.workers.dev)。

  5. 在 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 deploy

在 Claude 中连接

  1. Settings → Connectors → Add custom connector。

  2. URL:https://renpho-health-mcp.<subdomain>.workers.dev/mcp

  3. 点击 Connect → 使用你的 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.ts

使用 MCP 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.com
  • src/index.ts — 连接 OAuthProvider + McpAgent Durable Object。

  • src/auth-handler.ts — 登录页面(/authorize)、落地页、图标。

  • src/renpho-api.ts — Renpho 客户端:会话缓存、带重试/重新登录的加密传输、与顺序无关的分页器、用户选择。

  • src/measurements.ts — 原始记录 → 精简的教练数据形态、枚举、分类、档案。

  • src/stats.ts — 回归、边缘窗口汇总、滚动均值、目标预测。

  • src/tools.ts — 上述教练工具。

  • src/crypto.tssrc/json.tssrc/dates.ts — AES 辅助函数、大整数安全的 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_usersdevice_categories 中,可以通过 query_endpoint 探索。

  • 速率限制。 当请求过密时 Renpho 返回代码 429;客户端会退避并重试,缓存的页面会继续提供服务。

  • 密码更改会使存储的凭据失效——请断开并重新连接连接器。

  • 非官方 API。 这使用的是移动应用的私有 API;Renpho 可能随时更改它。与 Renpho 无关联,也未获得其认可。

隐私

  • 凭据仅用于与 Renpho 进行身份验证,并加密存储在 OAuth 授权授予中;不记录任何日志。

  • 健康数据仅缓存在你自己的 KV 命名空间中,经过密封,可通过 delete_my_data 删除;不会向任何第三方发送任何内容。

致谢

许可证

MIT

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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