Renpho Health MCP
Enables AI agents to query and analyze Renpho smart scale data (weight, body fat, etc.) by syncing it from the Renpho app and exposing it through MCP tools for conversational exploration.
README
Renpho Health MCP
Own your Renpho smart-scale data — pull it out of the Renpho app into a raw time series log on your machine, and explore it conversationally from an AI agent.
Renpho scales only expose their readings through the Renpho mobile app — no export, no official API. This project logs in with your Renpho account, pulls every reading (weight, body fat %, muscle, water, BMI, and the rest), and keeps them as an append-only log you control. It also ships an MCP server so Claude Code (or any MCP-capable agent) can answer questions about your history — "what's my weight trend this year?", "lowest body fat ever?" — by querying that log.
Demo
Exploring the data from Claude Code via the MCP server:

▶ Watch the full video for higher quality.
How it works
- You provide your Renpho account credentials in a local
.env. - A sync authenticates with Renpho and pulls your full reading history — the API has no date filter, so every sync fetches everything.
- Readings are deduplicated by timestamp and appended to a raw JSONL log (the source of truth); a spreadsheet-friendly CSV is regenerated alongside it.
- You explore the log directly (it's plain files) or via the MCP server, which exposes query/trend tools to an AI agent. The server does the math and returns data; the agent reasons over it.
Nothing leaves your machine except the calls to Renpho's own servers. There is no LLM inside this project — the "intelligence" is whatever agent you connect to the MCP server.
Quick start
pip install -e ".[dev]" # install
cp .env.example .env # then add your Renpho email + password
renpho-sync # pull your history into data/renpho_log.jsonl
Then register the MCP server (see Usage) to explore it from an AI agent.
Usage
Sync your data
Run a sync whenever you want to capture new weigh-ins:
renpho-sync # one-shot, no server (also: python -m renpho_health.cli)
It's safe to run repeatedly — readings are deduplicated by timestamp, so re-runs never create duplicates:
{ "pulled": 68, "new": 2, "skipped": 66, "total": 68 }
Two files are written (paths configurable — see Configuration):
data/renpho_log.jsonl— the raw, append-only source of truth, one reading per line with every field the scale returned.data/renpho_log.csv— a spreadsheet-friendly view, regenerated from the JSONL on every sync.
There's also an HTTP trigger if you prefer a running service — POST /sync (plus GET /health):
uvicorn renpho_health.main:app --reload
curl -X POST http://127.0.0.1:8000/sync
Explore your data with an AI agent (MCP)
The MCP server lets an AI agent query your readings. It reads the last-synced log offline; the refresh tool pulls new readings on demand.
Register it in Claude Code (requires the claude CLI — npm install -g @anthropic-ai/claude-code). This registers it at user scope so it's available in every session, with absolute paths baked in so it works from any folder:
claude mcp add -s user renpho \
-e RENPHO_LOG_PATH=/absolute/path/to/data/renpho_log.jsonl \
-e RENPHO_CSV_PATH=/absolute/path/to/data/renpho_log.csv \
-- /absolute/path/to/.venv/Scripts/renpho-mcp
Use absolute paths (the launcher is renpho-mcp.exe on Windows). Equivalently, the launch command can be python -m renpho_health.mcp_server using the venv's Python.
Start a new session, confirm with /mcp (or claude mcp list), then ask e.g. "using renpho, what's my current weight and how far am I down this year?" The server exposes these tools plus a renpho://readings resource:
| Tool | Answers |
|---|---|
list_metrics |
What metrics exist, their units, and the date range covered |
latest |
Your most recent reading, all metrics |
history |
Readings over an ISO date range, or one metric's series |
stats |
min/max/mean/first/last/change for a metric over a range |
trend |
Direction and per-week rate of change |
refresh |
Pull new readings from Renpho into the local log |
Notes:
- Dates are ISO 8601 (
YYYY-MM-DD) only, so there's noDD-MM/MM-DDambiguity — the agent resolves "last 3 months" to a real date before calling. - Units are reported per metric from a curated map (values are stored canonically, e.g. weight in kg); metrics whose unit isn't certain report
nullrather than guess. - The read-only tools work from anywhere;
refreshadditionally needsRENPHO_EMAIL/RENPHO_PASSWORD— either run from the project folder (so.envloads) or add them as-evars when registering. See docs/adr/0004-mcp-server.md.
Configuration
Copy .env.example to .env and fill in your Renpho account:
| Variable | Required | Default | Purpose |
|---|---|---|---|
RENPHO_EMAIL |
for sync/refresh | — | Your Renpho account email |
RENPHO_PASSWORD |
for sync/refresh | — | Your Renpho account password |
RENPHO_LOG_PATH |
no | data/renpho_log.jsonl |
Raw JSONL log path |
RENPHO_CSV_PATH |
no | data/renpho_log.csv |
Derived CSV path |
Your credentials and the data/ directory (personal health data) are gitignored and never leave your machine. Renpho has no official API; this talks to Renpho's app backend using a reverse-engineered protocol (see docs/adr/0002-own-renpho-client.md).
Architecture
A pull pipeline feeds a local log that two front ends read from: an HTTP endpoint / CLI for syncing, and an MCP server for querying. All the analytics live in a pure, testable module; the MCP server and HTTP app are thin wrappers over it.
src/renpho_health/
renpho/ # in-repo Renpho API client (AES-128-ECB envelope)
store.py # append-only JSONL log + derived CSV, dedup by timeStamp
sync.py # pull -> dedup -> log pipeline (run_sync)
cli.py # `renpho-sync` command
main.py # FastAPI app: POST /sync, GET /health
queries.py # pure analytics over the log (stats, trend, history)
mcp_server.py # MCP server: tools + renpho://readings resource
tests/ # pytest suite (no network — fakes the Renpho client)
docs/ # specs, ADRs, devlog
Roadmap
- Sync the log into a destination of your choosing — a Google Doc or a Markdown file in a Google Drive vault (spec).
- An automatic scheduler so syncs run without manual triggering.
Changelog & development notes
See CHANGELOG.md for release history, docs/DEVLOG.md for development history, docs/adr/ for design decisions, and docs/specs/ for feature specs.
License
MIT — see LICENSE.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.