Labsco
MCP SERVER

Polar MCP Server

by NelsonNew

Your Polar training data in conversation — workouts with exports, sleep and recovery, cardio load, SpO2 and temperature, and SleepWise bedtime predictions.

Health, Fitness & WearablesVerified
Summary
Range tools everywhere, which is what makes trends answerable.

Nearly every metric has both a single-day and a range variant, so "how has my HRV moved this month" is one call rather than thirty. That is the difference between a data viewer and something you can actually ask questions of. The file exports matter for the same reason from the other direction — a run leaves as a GPX or FIT file you can hand to another tool. Note that a 404 usually means the metric is not available for your watch or subscription rather than that something is broken.

What it is

An MCP server over the Polar AccessLink API, covering 25 tools across the whole of what a Polar watch records. It runs as a hosted instance you authorize with your Polar account, or self-hosted on Cloudflare Workers or locally.

What you get
  • Training sessions listed and opened with heart rate, speed and zones, and exported as FIT, TCX or GPX files — `get_exercises`, `get_exercise`, `get_exercise_fit`, `get_exercise_tcx`, `get_exercise_gpx`
  • Sleep stages, score and duration for a night or across a range — `get_sleep`, `get_sleep_range`
  • Nightly Recharge recovery data — ANS charge, heart rate variability, breathing rate — for one night or a range — `get_nightly_recharge`, `get_nightly_recharge_range`
  • Daily activity with steps, calories and activity zones, plus the underlying samples, singly or over a range — `get_daily_activity`, `get_daily_activity_range`, `get_activity_samples`, `get_activity_samples_range`
  • Continuous 24/7 heart rate for a day or a period — `get_continuous_heart_rate`, `get_continuous_heart_rate_range`
  • Training load as TRIMP with acute and chronic values, for a day, a range, or the full history — `get_cardio_load`, `get_cardio_load_range`, `get_cardio_load_history`
  • SleepWise output: predicted alertness through the day and the circadian bedtime the watch suggests — `get_sleepwise_alertness`, `get_sleepwise_circadian_bedtime`
  • Biosensing readings — body temperature, skin temperature and blood oxygen — `get_body_temperature`, `get_skin_temperature`, `get_spo2`
  • Your profile and physical baseline, including VO2max, maximum and resting heart rate — `get_user_info`, `get_physical_info`
Requirements

A Polar account, authorized over OAuth. On the public instance that is all there is to it: add the hosted URL as an MCP server in your client and log in with Polar when the authorization window opens. Self-hosting on Cloudflare Workers needs a Cloudflare account, Polar AccessLink API credentials as `POLAR_CLIENT_ID` and `POLAR_CLIENT_SECRET`, a KV namespace for OAuth state, and the callback URL registered with your Polar app; running it locally instead uses `POLAR_ACCESS_TOKEN` obtained with `npm run auth`. The npm package name is `polar-mcp-server` (1.0.0). Data has to reach Polar before it can be read here — sync the watch to Polar Flow first, or exercises come back empty.

Setup effort

One command — npx -y github:NelsonNew/polar-mcp-server