Mirobody
Lab results to LOINC codes and UCUM units, symptoms and diagnoses to ICPC-3. Offline, no API key.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Self-hosted Polar health analytics with a built-in MCP server: sleep, HRV, workouts, baselines.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
DATABASE_URL, POLAR_CLIENT_ID, POLAR_CLIENT_SECRET, BASE_URLค่าที่ติดป้ายความลับคือกุญแจของบัญชีคุณ อย่าส่งให้ใคร และอย่าวางในแชต
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ 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": "ใส่ค่าของคุณ",
"POLAR_CLIENT_ID": "ใส่ค่าของคุณ",
"POLAR_CLIENT_SECRET": "ใส่ค่าของคุณ",
"BASE_URL": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add polar-flow --env DATABASE_URL='ใส่ค่าของคุณ' --env POLAR_CLIENT_ID='ใส่ค่าของคุณ' --env POLAR_CLIENT_SECRET='ใส่ค่าของคุณ' --env BASE_URL='ใส่ค่าของคุณ' -- 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.2เติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.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": "ใส่ค่าของคุณ",
"POLAR_CLIENT_ID": "ใส่ค่าของคุณ",
"POLAR_CLIENT_SECRET": "ใส่ค่าของคุณ",
"BASE_URL": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"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": "ใส่ค่าของคุณ",
"POLAR_CLIENT_ID": "ใส่ค่าของคุณ",
"POLAR_CLIENT_SECRET": "ใส่ค่าของคุณ",
"BASE_URL": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
BASE_URL envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub StuMason ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
ต้องใส่ค่าเหล่านี้: DATABASE_URL, POLAR_CLIENT_ID, POLAR_CLIENT_SECRET
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (1.6.2) เข้า registry 19 วันที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Docker ในเครื่องด้วย
ในหมวดเดียวกันมี Mirobody, FHIR MCP Server, Google Health MCP
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
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
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
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_idตัดมาแค่ช่วงต้น อ่านต่อใน repo