Skip to main content
Glama
a1dancole

Renpho Health MCP

by a1dancole

Renpho Health MCP – Smart-Waage-Daten für deinen Claude-Trainingscoach

Ein entfernter MCP-Server, bereitgestellt auf Cloudflare Workers, der deine Renpho-Smart-Waage-Körperzusammensetzungsdaten – Gewicht, Körperfett, fettfreie Masse, Muskeln, Wasser, Knochen, viszerales Fett, BMR, metabolisches Alter und mehr – über die Renpho-Health-Cloud-API an Claude bereitstellt. Füge ihn einmal als benutzerdefinierten Connector hinzu, und er funktioniert auf Claude Web, Desktop und Mobile. Er kombiniert sich mit den Strava- und Google-Health-Connectoren, sodass dein Coach Trainingsbelastung, Erholung und Körperzusammensetzung sieht.

Datenquelle: das Backend der Renpho Health-App (blaues Symbol) unter cloud.renpho.com. Konten in der alten Renpho-App (renpho.qnclouds.com) werden nicht unterstützt – migriere sie zuerst in der App.

Basierend auf dem reverse-engineerten Protokoll von StartupBros-com/renpho-mcp-server (einem lokalen stdio-Server) und forkerer/RenphoGarminSync-CLI, umstrukturiert als ein Multi-User-Remote-Worker im Stil von google-health-mcp.

Werkzeuge

Werkzeug

Was es beantwortet

get_latest_measurement

„Wie läuft es?“ – die neueste Messung mit allen Metriken, Kategorieklassifikationen, Änderungen gegenüber vor 7/30/90 Tagen und Fortschritt in Richtung des Gewichtsziels der App

get_measurements

Messverlauf über einen Zeitraum: jede Metrik pro Wiegevorgang oder gemittelt pro Tag/Woche; optionale Metrik-Teilmenge und Geräte-/Impedanzdetails

get_body_composition_trend

Pro Metrik Start-/Enddurchschnitt, Änderung, Min/Max/Mittelwert und eine wöchentliche Rate nach der Methode der kleinsten Quadrate (mit r²) sowie eine Tages-/Wochensreihe – ist die Gewichtsänderung Fett oder fettfreie Masse?

get_weight_trend

Tagesdurchschnittsgewicht mit einem 7-Tage-gleitenden Mittelwert, angepasster Wochenrate und einer Prognose, wann das Ziel erreicht wird (und der Rate, die nötig ist, um das Zieldatum zu erreichen)

get_profile

Geschlecht, Alter, Größe, Einheiten, Athletenmodus und die in der App festgelegten Ziele (Zielgewicht/-datum, Zielkörperfett, Startgewicht)

get_scale_users

Waagenbenutzer- (Profil-) IDs, Datentabellen, Familienmitglieder und jede Geräte-/Datenkategorie, die Renpho meldet

run_diagnostics

End-to-End-Test: Sitzung, Tabellen, Seitenreihenfolge, letzte Messwerte pro Profil, gebunden vs. ungebunden, gesehene Geräte

query_endpoint

Notausstieg: beliebigen cloud.renpho.com-Endpunkt mit der Verschlüsselung/Authentifizierung der App aufrufen

refresh_data

Verwerfe die gecachte Sitzung + Seiten und melde dich erneut an (nach einem neuen Wiegevorgang, der nicht angezeigt wird)

delete_my_data

Lösche alles, was für dein Konto zwischengespeichert ist

Fehlerbehebung: Wenn Messwerte fehlen, veraltet sind oder der falschen Person zugeordnet werden, führe zuerst run_diagnostics aus. Es berichtet, wo die Daten tatsächlich liegen (welche Tabelle/Profil, gebunden oder nicht), anstatt dich aus einem nachgelagerten Symptom schließen zu lassen.


Related MCP server: Oura Ring MCP Server

Feldzuordnung (Renpho Health API)

Ein Rohdatensatz von RenphoHealth/scale/queryAllMeasureDataList hat ~57 Schlüssel. Die Werkzeuge benennen die Metriken in Einheiten-suffigiertes snake_case um, dekodieren Enum-Codes, entfernen Hüllen-Rauschen und behalten alles Unerkannte unter extra, sodass nichts verloren geht, wenn Renpho Felder hinzufügt (siehe src/measurements.ts).

Renpho-Schlüssel

Werkzeugfeld

Einheit / Bedeutung

weight

weight_kg

kg (immer kg, unabhängig von der Anzeigeeinheit der App)

bmi

bmi

bodyfat

body_fat_pct

%

fatFreeWeight

fat_free_mass_kg

kg

subfat

subcutaneous_fat_pct

%

visfat

visceral_fat_level

Stufe 1–59 (≤9 gesund, 10–14 hoch, ≥15 sehr hoch)

water

body_water_pct

%

sinew

skeletal_muscle_pct

%

muscle

muscle_mass_kg

kg

bone

bone_mass_kg

kg

protein

protein_pct

%

bmr

bmr_kcal

kcal/Tag

bodyage

metabolic_age

Jahre

heartRate

heart_rate_bpm

bpm (nur Waagen mit HR-Sensor)

cardiacIndex

cardiac_index

L/min/m²

waistline, hip

waistline_cm, hip_cm

cm (nur wenn eingegeben)

bodyShape / bodytype

body_type

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

personType

athlete_mode

boolesch

resistance, secResistance, actual*

impedance.*

rohe Bio-Impedanz (Ω)

method

source.method

wie die Messung zugeordnet wurde (bluetooth_online_measure, cloud_wifi_auto_allocation, manual_input, …)

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

source.*

Gerät + Flags

bUserId, subUserId

user.bound_user_id, user.scale_user_id

Konto, an das die Messung gebunden ist / Profil, unter dem sie gemessen wurde

timeStamp

timestamp, time, date

Unix-Sekunden; lokale RFC-3339- und Kalenderdaten in TIME_ZONE

Eine Metrik, die als 0 gemeldet wird, bedeutet „nicht gemessen“ und wird weggelassen. Renpho-IDs sind 64-Bit-Ganzzahlen außerhalb des sicheren Bereichs von JavaScript, daher setzt der Client sie vor dem Parsen als Zeichenfolgen in Anführungszeichen (src/json.ts).

Wie Daten abgerufen werden

  • Login (renpho-aggregation/user/login) liefert ein Bearer-Token mit einer expAt-Zeit; es wird in KV gecacht (versiegelt), bis kurz vor Ablauf, und durch erneutes Einloggen erneuert — Renpho hat keine Refresh-Tokens.

  • device/count listet die Datentabellen und Datensatzzahlen des Kontos auf und wird bei jedem Tool-Aufruf frisch abgerufen; es ist das Aktualitätssignal.

  • Zwei Speicher pro Tabelle. Jede measurements_info_N-Tabelle wird aus beiden Quellen gelesen: scale/queryAllMeasureDataList (der ältere Speicher, dessen Zeilen device/count zählt) und scale/queryBodyCompositionMeasureData (der neuere Speicher, der von 8-Elektroden-/Multifrequenz-Waagen wie der MorphoScan verwendet wird, die device/count nicht zählt). Zeilen werden nach ID zusammengeführt, wobei die Körperzusammensetzungs-Kopie erhalten bleibt, wenn beide existieren, da sie das umfangreichere Feldschema trägt; source.endpoint gibt an, aus welchem Speicher ein Messwert stammt.

  • Messwert-Seiten (je 200 Datensätze) werden in KV gecacht. Legacy-Seiten sind nach Tabelle, Profilsatz und Datensatzzahl geschlüsselt, sodass eine neue Wiegung den Schlüssel ändert und automatisch invalidiert; Körperzusammensetzungs-Seiten haben keine Zählung und werden stattdessen 15 Minuten lang gecacht. Der Paginator erkennt, in welcher Reihenfolge jeder Speicher sortiert ist, und läuft nur so weit, wie das angeforderte Fenster es braucht (max. 30 Seiten / 6 000 Datensätze pro Speicher und Aufruf).

  • Auswahl: Messwerte, die an das angemeldete Konto gebunden sind (bUserId), werden standardmäßig zurückgegeben; wenn noch nichts gebunden ist (Wi-Fi-Waagen laden hoch, bevor die App den Messwert bindet), wird auf das erste Waagen-Benutzerprofil des Kontos zurückgegriffen und dies mitgeteilt. Für ein Familienmitglied scale_user_id übergeben.

Caching & Verschlüsselung

Alles, was in den RENPHO_CACHE-KV-Namespace geschrieben wird — Sitzungstokens und Messwert-Seiten — ist AES-256-GCM-versiegelt mit einem Schlüssel, der aus dem SESSION_ENCRYPTION_KEY-Secret abgeleitet wird, pro Benutzer geschlüsselt (SHA-256 der E-Mail). Wenn das Secret nicht gesetzt ist, wird Caching einfach deaktiviert. Cache-Fehler brechen nie eine Anfrage.

Der Renpho-Transport selbst ist AES-128-ECB mit dem statischen Schlüssel aus der App; WebCrypto hat keinen ECB-Modus, daher verwendet der Worker das reine-JS-aes-js (src/crypto.ts, in den Tests byte-für-byte gegen OpenSSL verifiziert).


So funktioniert die Anmeldung (einmal lesen)

Renpho hat kein OAuth. Der Worker ist ein OAuth-Server gegenüber Claude (workers-oauth-provider), und seine /authorize-Seite ist ein Renpho-Anmeldeformular. Ihre E-Mail/Passwort werden einmal gegen Renpho geprüft und dann in den verschlüsselten Props des Grants gespeichert — der Verschlüsselungsschlüssel wird aus dem Token abgeleitet, das Claude hält, sodass die KV-Inhalte allein nicht entschlüsselt werden können. Die Anmeldedaten sind nötig, weil Renpho-Sitzungstokens nach einigen Stunden ablaufen und der einzige Weg zu einem neuen Token ein erneuter Login ist.

  • Das Trennen des Connectors in Claude löscht den Grant (und damit die gespeicherten Anmeldedaten); delete_my_data leert den Cache.

  • Setzen Sie ALLOWED_EMAILS (kommagetrennt), um zu verhindern, dass sich andere Renpho-Konten mit Ihrer Bereitstellung verbinden. Leer gelassen, kann jeder Renpho-Benutzer sie verwenden (jeder sieht nur seine eigenen Daten).

Bereitstellung

Option A — GitHub Actions (ohne lokales wrangler)

Der Workflow in .github/workflows/deploy.yml stellt bei jedem Push auf master bereit (und auf Abruf). Das App-Secret liegt in Cloudflare, nicht bei GitHub — GitHub hält nur das Cloudflare-API-Token + die Account-ID.

  1. Zwei KV-Namespaces erstellen im Cloudflare-Dashboard (Storage & Databases → KV): OAUTH_KV und RENPHO_CACHE. Die IDs in wrangler.jsonc einfügen und committen.

  2. Ein Cloudflare-API-Token erstellen (My Profile → API Tokens → "Edit Cloudflare Workers"-Vorlage) und die Account-ID notieren.

  3. GitHub-Repo-Secrets hinzufügen: CLOUDFLARE_API_TOKEN und CLOUDFLARE_ACCOUNT_ID.

  4. Auf master pushen. Das Actions-Protokoll gibt die Worker-URL aus (https://renpho-health-mcp.<subdomain>.workers.dev).

  5. Das App-Secret in Cloudflare setzen (Workers & Pages → renpho-health-mcp → Settings → Variables and Secrets, Typ Secret): SESSION_ENCRYPTION_KEY = eine beliebige lange Zufallszeichenkette. Optional die Variable ALLOWED_EMAILS auf Ihre Renpho-E-Mail setzen.

Option B — lokales 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

In Claude verbinden

  1. Settings → Connectors → Add custom connector.

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

  3. Connect klicken → mit Ihrer Renpho-Health-E-Mail/Passwort anmelden → fertig.

Dann fragen Sie Ihren Coach: "Hol meine letzte Waagenmessung und sag mir, ob der Gewichtsverlust des letzten Monats aus Fett oder fettfreier Masse kam."

Connector-Symbol

Der Worker bewirbt PUBLIC_URL/icon.png in seinen MCP-serverInfo.icons (und websiteUrl), sodass Clients, die Server-Branding rendern, es in der Connector-Liste anzeigen. Der Standard ist ein generiertes Waagen-Symbol (npm run icon). Um stattdessen das offizielle Renpho-Health-App-Symbol zu verwenden, speichern Sie das PNG aus dem App-Store-/Play-Store-Eintrag und betten es ein:

npm run icon:embed -- ~/Downloads/renpho-health-icon.png   # writes src/icon.ts + assets/icon.png
npm run deploy

(Das offizielle Zeichen ist eine Marke von Renpho — für eine persönliche Bereitstellung in Ordnung, nicht für die Weiterverbreitung, weshalb es nicht in diesem Repo liegt.)

Lokale Entwicklung

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

Testen Sie den Ablauf mit dem MCP Inspector:

npx @modelcontextprotocol/inspector@latest
# Transport: Streamable HTTP → http://localhost:8787/mcp → Connect

So funktioniert es

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 — verbindet OAuthProvider + das McpAgent-Durable-Object.

  • src/auth-handler.ts — Anmeldeseite (/authorize), Landingpage, Symbol.

  • src/renpho-api.ts — Renpho-Client: Sitzungscache, verschlüsselter Transport mit Retry/Re-Login, reihenfolgeunabhängiger Paginator, Benutzerauswahl.

  • src/measurements.ts — Rohdatensatz → schlanke Coaching-Form, Enums, Klassifikation, Profil.

  • src/stats.ts — Regression, Randfenster-Zusammenfassungen, gleitende Mittelwerte, Zielprojektion.

  • src/tools.ts — die Coaching-Tools von oben.

  • src/crypto.ts, src/json.ts, src/dates.ts — AES-Helfer, BigInt-sicheres JSON, zeitzonenkorrekte Daten. Alle rein und unit-getestet.

Hinweise & Grenzen

  • Wi-Fi-Waagen-Bindungsverzögerung. Manche Wi-Fi-Waagen laden einen Messwert hoch, bevor die App ihn an Ihr Konto bindet; bis dahin hat er eine scale_user_id, aber keine bound_user_id. Die Tools greifen auf das erste Profil zurück und teilen dies mit (selection: "fallback_scale_user"); run_diagnostics listet versteckte Messwerte auf.

  • Bioimpedanz ist verrauscht. Hydration, Tageszeit und kürzliches Training verschieben Körperfett-/Wassermesswerte um mehrere Punkte. Wiegen Sie sich zur gleichen Tageszeit und lesen Sie die Durchschnitte/Trends, nicht einzelne Messwerte — die Trend-Tools verwenden genau deshalb 7-Tage- Randfenster und gleitende Mittelwerte.

  • Einheiten. Massen sind in kg und Zusammensetzungskennzahlen in %, entsprechend der Renpho-App. muscle wird als Muskelmasse (kg) gemeldet und sinew als Skelettmuskel-%; wenn Ihre Gerätefirmware etwas anderes meldet, bleiben die Rohwerte unverändert — nur die Bezeichnung weicht ab.

  • MorphoScan / 8-Elektroden-Waagen. Ihre Messwerte liegen im Körperzusammensetzungs-Speicher (siehe oben) und tragen zusätzliche gerätespezifische Felder — segmentales Fett/Muskel, SMI usw. —, die die Tools unter extra durchreichen (nach include_details fragen oder unrecognised_fields_seen in run_diagnostics ansehen). Bitte öffnen Sie ein Issue mit diesen Feldnamen, damit sie korrekt zugeordnet werden können.

  • Nur die Kategorie scale hat dedizierte Tools. Umfangs-/Maßband-, Laufband-, Seil- und Body-Scan-Daten (MorphoScan) erscheinen in get_scale_usersdevice_categories und können mit query_endpoint erkundet werden.

  • Ratenlimits. Renpho gibt Code 429 zurück, wenn zu viel angefragt wird; der Client wartet und wiederholt, und gecachte Seiten bedienen weiterhin.

  • Passwortänderungen brechen die gespeicherten Anmeldedaten — Connector trennen und neu verbinden.

  • Inoffizielle API. Dies nutzt die private API der mobilen App; Renpho kann sie jederzeit ändern. Nicht mit Renpho verbunden oder von Renpho unterstützt.

Datenschutz

  • Anmeldedaten werden nur zur Authentifizierung bei Renpho verwendet und verschlüsselt im OAuth-Grant gespeichert; nichts wird protokolliert.

  • Gesundheitsdaten werden nur in Ihrem eigenen KV-Namespace gecacht, versiegelt und mit delete_my_data löschbar; nichts wird an Dritte gesendet.

Danksagungen

Lizenz

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