Renpho Health MCP
Renpho Health MCP — данные умных весов для вашего тренера Claude
Удалённый MCP сервер, развёрнутый на Cloudflare Workers, который предоставляет данные о составе тела с ваших умных весов Renpho — вес, процент жира, безжировую массу, мышцы, воду, кости, висцеральный жир, BMR, метаболический возраст и другое — в Claude через облачный API Renpho Health. Добавьте его один раз как пользовательский коннектор, и он будет работать на 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.
Инструменты
Tool | What it answers |
| «Как у меня дела?» — последнее измерение со всеми показателями, классификацией категорий, изменениями по сравнению с 7/30/90 дней назад и прогрессом к цели по весу в приложении |
| История измерений за период: каждый показатель для каждого взвешивания или усреднённые по дням/неделям; опционально подмножество показателей и детали устройства/импеданса |
| Средние значения на начало/конец по каждому показателю, изменение, мин/макс/среднее и еженедельная скорость по методу наименьших квадратов (с r²), плюс дневной/недельный ряд — изменение веса это жир или тощая масса? |
| Среднесуточный вес со скользящим средним за 7 дней, подобранная недельная скорость и прогноз, когда будет достигнута цель (и скорость, необходимая для достижения целевой даты) |
| Пол, возраст, рост, единицы измерения, режим спортсмена и цели, установленные в приложении (целевой вес/дата, целевой процент жира, начальный вес) |
| Идентификаторы пользователей весов (профилей), таблицы данных, члены семьи и все категории устройств/данных, о которых сообщает Renpho |
| Сквозная проверка: сессия, таблицы, порядок страниц, последние измерения по каждому профилю, привязанные и непривязанные, видимые устройства |
| Запасной выход: вызвать любой endpoint |
| Сбросить кэшированную сессию и страницы и войти снова (после нового взвешивания, которое не отображается) |
| Удалить все кэшированные данные для вашей учётной записи |
Устранение неполадок: если измерения выглядят отсутствующими, устаревшими или приписанными не тому человеку, сначала запустите
run_diagnostics. Он сообщает, где на самом деле находятся данные (какая таблица/профиль, привязаны или нет), вместо того чтобы заставлять вас делать выводы по косвенному симптому.
Related MCP server: Oura Ring MCP Server
Сопоставление полей (Renpho Health API)
Необработанная запись из RenphoHealth/scale/queryAllMeasureDataList содержит ~57 ключей. Инструменты переименовывают показатели в snake_case с суффиксом единицы измерения, декодируют коды перечислений, убирают шум обёртки и сохраняют всё нераспознанное в extra, чтобы ничего не терялось при добавлении полей Renpho (см. src/measurements.ts).
Renpho key | Tool field | Unit / meaning |
|
| кг (всегда кг, независимо от единицы отображения в приложении) |
|
| — |
|
| % |
|
| кг |
|
| % |
|
| уровень 1–59 (≤9 здоровый, 10–14 высокий, ≥15 очень высокий) |
|
| % |
|
| % |
|
| кг |
|
| кг |
|
| % |
|
| ккал/день |
|
| годы |
|
| уд/мин (только весы с датчиком ЧСС) |
|
| л/мин/м² |
|
| см (только если введены) |
|
|
|
|
| булево |
|
| сырое биоэлектрическое сопротивление (Ом) |
|
| как было распределено измерение ( |
|
| устройство + флаги |
|
| учётная запись, к которой привязано измерение / профиль, под которым оно было выполнено |
|
| секунды Unix; локальная дата RFC-3339 и календарная дата в |
Показатель, сообщённый как 0, означает «не измерено» и опускается. Идентификаторы Renpho — 64-битные целые числа, выходящие за безопасный диапазон JavaScript, поэтому клиент переводит их в строки перед разбором (src/json.ts).
Как получаются данные
Вход (
renpho-aggregation/user/login) возвращает bearer-токен сexpAt; он кэшируется (запечатывается) в KV до истечения срока и обновляется повторным входом — у Renpho нет refresh-токенов.device/countперечисляет таблицы данных и количество записей аккаунта и запрашивается заново при каждом вызове инструмента; это сигнал свежести.Два хранилища на таблицу. Каждая таблица
measurements_info_Nчитается из обоихscale/queryAllMeasureDataList(легаси-хранилище, строки которогоdevice/countсчитает) иscale/queryBodyCompositionMeasureData(новое хранилище, используемое весами с 8 электродами / многочастотными весами, такими как MorphoScan, котороеdevice/countне считает). Строки объединяются по id, при этом сохраняется копия из body-composition, если существуют обе, потому что она содержит более полный набор полей;source.endpointуказывает, из какого хранилища получено измерение.Страницы измерений (по 200 записей) кэшируются в KV. Легаси-страницы ключуются по таблице, набору профилей и количеству записей, поэтому новое взвешивание меняет ключ и автоматически инвалидирует кэш; страницы body-composition не имеют счётчика и кэшируются 15 минут. Пагинатор определяет порядок сортировки каждого хранилища и проходит только до нужного окна (максимум 30 страниц / 6 000 записей на хранилище за вызов).
Выбор: по умолчанию возвращаются измерения, привязанные к вошедшему аккаунту (
bUserId); если ещё ничего не привязано (Wi-Fi весы загружают измерение до привязки в приложении), используется первый профиль scale-user аккаунта, и об этом сообщается. Передайтеscale_user_idдля члена семьи.
Кэширование и шифрование
Всё, что записывается в KV-пространство имён RENPHO_CACHE — токены сессий и
страницы измерений — запечатывается AES-256-GCM ключом, полученным из
секрета SESSION_ENCRYPTION_KEY, с привязкой к пользователю (SHA-256 от email).
Если секрет не задан, кэширование просто отключено. Сбои кэша никогда не
ломают запрос.
Сам транспорт Renpho использует AES-128-ECB со статическим ключом из приложения;
в WebCrypto нет режима ECB, поэтому Worker использует чистый JS-модуль aes-js
(src/crypto.ts, проверенный побайтово против OpenSSL в
тестах).
Как работает вход (прочтите один раз)
У Renpho нет OAuth. Worker является OAuth-сервером для Claude
(workers-oauth-provider), а его страница /authorize — это форма входа в
Renpho. Ваши email/пароль проверяются в Renpho один раз, затем сохраняются
в зашифрованных свойствах гранта — ключ шифрования получается из токена,
который хранит Claude, поэтому содержимое KV само по себе не может быть
расшифровано. Учётные данные нужны, потому что токены сессии Renpho истекают
через несколько часов, и единственный способ получить новый — войти снова.
Отключение коннектора в Claude удаляет грант (и вместе с ним сохранённые учётные данные);
delete_my_dataочищает кэш.Установите
ALLOWED_EMAILS(через запятую), чтобы запретить другим аккаунтам Renpho подключаться к вашему развёртыванию. Если оставить пустым, любой пользователь Renpho сможет им пользоваться (каждый видит только свои данные).
Развёртывание
Вариант A — GitHub Actions (без локального wrangler)
Workflow в .github/workflows/deploy.yml
развёртывает при каждом push в master (и по запросу). Секрет приложения
хранится в Cloudflare, а не в GitHub — GitHub хранит только API-токен Cloudflare
и ID аккаунта.
Создайте два KV-пространства имён в панели Cloudflare (Storage & Databases → KV):
OAUTH_KVиRENPHO_CACHE. Вставьте их id вwrangler.jsoncи закоммитьте.Создайте API-токен Cloudflare (My Profile → API Tokens → шаблон "Edit Cloudflare Workers") и запишите ваш Account ID.
Добавьте секреты репозитория GitHub
CLOUDFLARE_API_TOKENиCLOUDFLARE_ACCOUNT_ID.Запушьте в
master. В логе Actions будет выведен URL Worker'а (https://renpho-health-mcp.<subdomain>.workers.dev).Установите секрет приложения в Cloudflare (Workers & Pages → renpho-health-mcp → Settings → Variables and Secrets, тип Secret):
SESSION_ENCRYPTION_KEY= любая длинная случайная строка. При желании установите переменнуюALLOWED_EMAILSна ваш email 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
Settings → Connectors → Add custom connector.
URL:
https://renpho-health-mcp.<subdomain>.workers.dev/mcpНажмите Connect → войдите с вашим email/паролем Renpho Health → готово.
Затем спросите вашего тренера: «Получи моё последнее измерение с весов и скажи, потеря веса за последний месяц произошла за счёт жира или мышечной массы».
Иконка коннектора
Worker рекламирует PUBLIC_URL/icon.png в своих MCP serverInfo.icons
(и websiteUrl), поэтому клиенты, отображающие брендинг сервера, показывают её
в списке коннекторов. По умолчанию используется сгенерированная иконка весов
(npm run icon). Чтобы использовать официальную иконку приложения Renpho Health,
сохраните PNG из списка App Store / Play Store и встройте его:
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.comsrc/index.ts— связываетOAuthProvider+ Durable ObjectMcpAgent.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-хелперы, JSON с поддержкой больших целых чисел, даты с учётом часового пояса. Всё чистое и покрыто юнит-тестами.
Примечания и ограничения
Задержка привязки Wi-Fi весов. Некоторые Wi-Fi весы загружают измерение до того, как приложение привяжет его к вашему аккаунту; до этого у него есть
scale_user_id, но нетbound_user_id. Инструменты используют первый профиль и сообщают об этом (selection: "fallback_scale_user");run_diagnosticsперечисляет скрытые измерения.Биоимпеданс шумит. Гидратация, время суток и недавние тренировки сдвигают показания жира/воды на несколько пунктов. Взвешивайтесь в одно и то же время суток и смотрите на средние/тренды, а не на отдельные измерения — инструменты трендов используют 7-дневные краевые окна и скользящие средние именно по этой причине.
Единицы измерения. Массы в кг, композиционные метрики в %, как в приложении Renpho.
muscleсообщается как мышечная масса (кг), аsinew— как процент скелетных мышц; если прошивка устройства сообщает иначе, сырые значения не меняются — отличается только подпись.Весы MorphoScan / с 8 электродами. Их измерения хранятся в хранилище body-composition (см. выше) и содержат дополнительные поля, специфичные для устройства — сегментарный жир/мышцы, SMI и т.д. — которые инструменты передают в
extra(запроситеinclude_detailsили посмотритеunrecognised_fields_seenвrun_diagnostics). Пожалуйста, откройте 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