Mirobody
Lab results to LOINC codes and UCUM units, symptoms and diagnoses to ICPC-3. Offline, no API key.
Descripción del creador (original en inglés)
Self-hosted Polar health analytics with a built-in MCP server: sleep, HRV, workouts, baselines.
Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.
Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.
Elige la app de IA que usas y copia la configuración.
DATABASE_URL, POLAR_CLIENT_ID, POLAR_CLIENT_SECRET, BASE_URLLos valores marcados como secretos son llaves de tu cuenta. Nunca los compartas ni los pegues en un chat.
Necesitas
¿Qué app usas?
Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.
Abre Claude Desktop → Settings → Developer → Edit Config y pega esto en claude_desktop_config.json
{
"mcpServers": {
"polar-flow": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"DATABASE_URL",
"-e",
"POLAR_CLIENT_ID",
"-e",
"POLAR_CLIENT_SECRET",
"-e",
"BASE_URL",
"docker.io/stumason/polar-flow-server:1.6.2"
],
"env": {
"DATABASE_URL": "your-value",
"POLAR_CLIENT_ID": "your-value",
"POLAR_CLIENT_SECRET": "your-value",
"BASE_URL": "your-value"
}
}
}
}Ejecuta esto en tu terminal
claude mcp add polar-flow --env DATABASE_URL=your-value --env POLAR_CLIENT_ID=your-value --env POLAR_CLIENT_SECRET=your-value --env BASE_URL=your-value -- docker run -i --rm -e DATABASE_URL -e POLAR_CLIENT_ID -e POLAR_CLIENT_SECRET -e BASE_URL docker.io/stumason/polar-flow-server:1.6.2Completa los valores vacíos antes de ejecutarlo.
Pégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json
{
"mcpServers": {
"polar-flow": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"DATABASE_URL",
"-e",
"POLAR_CLIENT_ID",
"-e",
"POLAR_CLIENT_SECRET",
"-e",
"BASE_URL",
"docker.io/stumason/polar-flow-server:1.6.2"
],
"env": {
"DATABASE_URL": "your-value",
"POLAR_CLIENT_ID": "your-value",
"POLAR_CLIENT_SECRET": "your-value",
"BASE_URL": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Pégalo en .vscode/mcp.json de tu proyecto
{
"servers": {
"polar-flow": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"DATABASE_URL",
"-e",
"POLAR_CLIENT_ID",
"-e",
"POLAR_CLIENT_SECRET",
"-e",
"BASE_URL",
"docker.io/stumason/polar-flow-server:1.6.2"
],
"env": {
"DATABASE_URL": "your-value",
"POLAR_CLIENT_ID": "your-value",
"POLAR_CLIENT_SECRET": "your-value",
"BASE_URL": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Este se ejecuta en tu computadora, y ChatGPT solo puede conectarse a servidores en internet. Elige otra app.
Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.
BASE_URL envEsta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.
Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.
Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 7 nov 2026
El nombre en el registro se verificó con la cuenta de GitHub StuMason, dueña del repo
Todavía no hemos leído este repo en GitHub
Todavía no hemos leído este repo en GitHub
Este se ejecuta en tu computadora; no hay endpoint en internet
Se ejecuta en tu computadora y usa ajustes locales en su lugar
Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet
Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.
Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.
Debes completar: DATABASE_URL, POLAR_CLIENT_ID, POLAR_CLIENT_SECRET
Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).
El repo de GitHub cambió por última vez –, y la última versión (1.6.2) llegó al registro hace 19 días.
Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas Docker en tu computadora.
En la misma categoría: Mirobody, FHIR MCP Server, Google Health MCP
Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.
Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi
Lab results to LOINC codes and UCUM units, symptoms and diagnoses to ICPC-3. Offline, no API key.
MCP server providing seamless access to FHIR APIs for AI tools and healthcare applications
Privacy-first unofficial Google Health API v4 MCP server for health, sleep, activity, HR agents
Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.
Self-hosted health analytics for Polar devices — own your data, analyze it against your own baselines, and let your AI assistant read it.
[Full Documentation](https://stumason.github.io/polar-flow-server/) · MCP Server · Integration Guide · API Reference
Your watch knows more about you than you do — and Polar's API only lets you see the last 28-30 days of it. This server syncs everything, keeps it forever, and turns it into answers:
A built-in Model Context Protocol server — protocol revision 2026-07-28, streamable HTTP — runs inside the main server at /mcp. Ten curated tools cover the one-shot health assessment, sleep, recovery, activity, workouts, seven biosensing streams, personal baselines, patterns/anomalies, and sync control.
In clients that render MCP Apps (claude.ai, Claude Desktop, VS Code), asking "how am I doing?" draws an actual card in the conversation:
Connecting is a sign-in, not a paste. With BASE_URL set, the server is its own OAuth 2.1 authorization server: add https://your-server/mcp as a custom connector in Claude Desktop or claude.ai, click Connect, log in on *your* server, approve the consent screen. Tokens are user-scoped, expire hourly, refresh automatically, and every connected app is revocable from Settings. API keys still work for headless clients:
claude mcp add polar-health https://your-server.example.com/mcp \
--transport http \ --header "X-API-Key: pfk_your_key_here"
Full setup in the MCP docs.
Polar API → polar-flow SDK → Sync Service → PostgreSQL
↓ Admin Dashboard (HTMX) ↓ REST API
Stack:
Don't fancy running a server? A hosted version is in the works — join the waitlist. Self-hosting stays free forever.
# Pull and run
curl -O https://raw.githubusercontent.com/StuMason/polar-flow-server/main/docker-compose.prod.yml docker-compose -f docker-compose.prod.yml up -d
git clone https://github.com/StuMason/polar-flow-server.git
cd polar-flow-server docker-compose up -d
http://localhost:8000/admin/oauth/callback)The server syncs data every hour automatically.
The admin panel at /admin/dashboard is organised into tabs (with a floating tab bar on mobile):
Charts have a selectable 7/14/30-day range and CSV export. API keys are managed from the settings page, with rate limit tracking. All frontend assets are vendored - the dashboard works offline and on a LAN with no CDNs.
| Endpoint | Data |
|---|---|
| Sleep | Score, stages (light/deep/REM), duration |
| Nightly Recharge | HRV, ANS charge, recovery status |
| Daily Activity | Steps, distance, calories, active time |
| Exercises | Sport, duration, HR zones, training load |
| Cardio Load | Strain, tolerance, load ratio, status |
| SleepWise Alertness | Hourly alertness predictions |
| SleepWise Bedtime | Optimal sleep timing recommendations |
| Activity Samples | Minute-by-minute step data |
| Continuous HR | All-day heart rate (5-min intervals) |
| SpO2 | Blood oxygen tests (compatible devices) |
| ECG | Electrocardiogram tests (compatible devices) |
| Body Temperature | Continuous body temperature |
| Skin Temperature | Nightly skin temperature with baseline deviation |
| Variable | Description | Required |
|---|---|---|
DATABASE_URL | PostgreSQL connection string | Yes |
ENCRYPTION_KEY | 32-byte Fernet key for token encryption | Yes (production) |
Generate an encryption key:
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
| Variable | Description | Default |
|---|---|---|
DEPLOYMENT_MODE | self_hosted or saas | self_hosted |
SYNC_INTERVAL_HOURS | Auto-sync frequency | 1 |
SYNC_ON_STARTUP | Sync when server starts | false |
SYNC_DAYS_LOOKBACK | Days of history to sync | 28 |
LOG_LEVEL | Logging verbosity | INFO |
API_KEY | Master API key (bypasses rate limits) | None |
API endpoints require authentication. Health data should never be publicly accessible.
API_KEY env var for full access (bypasses rate limits)# With per-user API key (includes rate limit headers)
curl -H "X-API-Key: pfk_your_api_key_here" \ http://localhost:8000/api/v1/users/{user_id}/sleep?days=7
API_KEY env var) bypasses rate limitingFor applications that need to integrate with polar-flow-server (e.g., Laravel, mobile apps, web frontends).
This allows any Polar user to connect their account to your application.
┌─────────────────┐ ┌─────────────────────┐ ┌─────────────────┐
│ Your App │────▶│ polar-flow-server │────▶│ Polar Flow │ │ (Laravel etc) │ │ │ │ (OAuth) │ │ │◀────│ │◀────│ │ └─────────────────┘ └─────────────────────┘ └─────────────────┘
Step 1: Redirect user to start OAuth
GET /oauth/start?callback_url=https://yourapp.com/callback&client_id=your-app-name
| Parameter | Required | Description |
|---|---|---|
callback_url | Yes | Where to redirect after OAuth (your app's callback endpoint) |
client_id | No | Identifier for your app (validated during exchange) |
Step 2: User authorizes on Polar
User is redirected to Polar, logs in with their credentials, and authorizes your app.
Step 3: User redirected to your callback
https://yourapp.com/callback?code=TEMP_CODE_HERE
Step 4: Exchange temp code for API key (server-to-server)
POST /oauth/exchange
Content-Type: application/json
{ "code": "TEMP_CODE_HERE", "client_id": "your-app-name" }
Response:
{
"api_key": "pfk_abc123...", "polar_user_id": "12345678", "expires_at": null }
Step 5: Store and use the API key
Store api_key and polar_user_id for this user. Use the API key for all data requests:
curl -H "X-API-Key: pfk_abc123..." \
"https://your-polar-server.com/api/v1/users/12345678/sleep?days=7"
In admin.polaraccesslink.com, set your app's redirect URI to:
https://your-polar-server.com/oauth/callback
# Get key info
GET /api/v1/users/{user_id}/api-key/info X-API-Key: pfk_...
POST /api/v1/users/{user_id}/api-key/regenerate X-API-Key: pfk_...
POST /api/v1/users/{user_id}/api-key/revoke X-API-Key: pfk_...
# Health check (no auth required)
curl http://localhost:8000/health
curl -H "X-API-Key: pfk_..." \ "http://localhost:8000/api/v1/users/{user_id}/sleep?days=7"
curl -H "X-API-Key: pfk_..." \ "http://localhost:8000/api/v1/users/{user_id}/activity?days=7"
curl -H "X-API-Key: pfk_..." \ "http://localhost:8000/api/v1/users/{user_id}/recharge?days=7"
curl -H "X-API-Key: pfk_..." \ "http://localhost:8000/api/v1/users/{user_id}/exercises?days=30"
curl -H "X-API-Key: pfk_..." \ "http://localhost:8000/api/v1/users/{user_id}/export/summary?days=30"
# Install dependencies
uv sync --all-extras
docker-compose up -d postgres
uv run uvicorn polar_flow_server.app:app --reload
uv run pytest
uv run mypy src/polar_flow_server
uv run ruff check src/
Deploy anywhere that runs Docker:
# Download and run
curl -O https://raw.githubusercontent.com/StuMason/polar-flow-server/main/docker-compose.prod.yml docker-compose -f docker-compose.prod.yml up -d
Coolify, Railway, Render, etc. - Point at the GitHub repo, it builds from the Dockerfile.
Required for production:
ENCRYPTION_KEY environment variable (tokens won't persist across restarts otherwise)DATABASE_URL to your PostgreSQL instanceDatabase migrations run automatically on startup.
The server supports multiple users out of the box:
user_id columnuser_idSolo se muestra el principio; lee el resto en el repo