Repository navigation
Releases: lmgarret/polar-flow-mcp
Release list
v0.12.0
Changelog v0.12.0
✨ New Features
- 🧱 New
blockphase type: Build training plans with a dedicatedblockphase for structured main-set segments. - 📏 Distance-based phases: Warmup, block, and cooldown phases now accept
distance_mas an alternative toduration_s, so you can define phases by distance instead of time. - 🎯 Zone ranges with
intensity.zone_max: Turn a single heart rate, power, or speed zone into a range. This makes it possible to express distance-based race plans, such as km segments with zone ranges. - 🆓 FREE target: Use the new FREE target for phases where no specific intensity target is needed.
- 🏁 STEADY_RACE_PACE target: Use the new STEADY_RACE_PACE target to hold a consistent race pace in your plans.
- 🏊 Multi-sport support: Plans can now cover multiple sports.
📝 Compatibility Note
All changes in this release are additive, so existing requests remain valid and nothing is breaking.
Docker image
Published to ghcr.io/lmgarret/polar-flow-mcp (linux/amd64):
ghcr.io/lmgarret/polar-flow-mcp:0.12.0 # immutable, exact release
ghcr.io/lmgarret/polar-flow-mcp:0.12 # latest patch on this minor
ghcr.io/lmgarret/polar-flow-mcp:0 # latest release on this major
ghcr.io/lmgarret/polar-flow-mcp:latest # newest stable release
Claude skill
polar-flow.skill (below) is the polar-flow skill for this release: upload it in Claude.ai, or unzip it into ~/.claude/skills/.
Full commit log
cb1796f Support FREE, STEADY_RACE_PACE, and multi-sport training targets (#114)
0eea56f ci(release): bump llm-release-action to v1.2.0 (#108)
v0.11.0
Changelog v0.11.0
✨ New Features
- ⭐ Favorites tools: 13 new MCP tools cover favorites list, get, create, update, rename, set sport, delete, save-target-as-favorite, and schedule. They also handle route import from GPX/TCX and session edit and delete. A favorites MCP app shows your edits in the sessions view.
- 🎯 Training zones and sport-profile writes:
get_training_zonesexplains HR, speed, and power zones 1-5, using defaults from a non-persisting recalculate endpoint, and comes with a zones MCP app.create_sport_profile(idempotent),update_training_zones(validated and read back), anddelete_sport_profile(requires confirmation) let you manage profiles directly. - 🏃 Daily activity and sleep read tools:
get_daily_activityreturns 24/7 activity per day, plus intraday activity and heart-rate curves on single-day calls.get_sleepreports your sleep data. - 📅 Calendar week summary:
get_calendar_week_summarynow returns real week data: week, week start, session count, duration, distance, kcal, and step count. Items are typed from a live capture and mapped to a canonical DTO, and progress zone list items are modeled as open objects. - 📈 Session intervals, zones, and curves: Session data now includes interval repetitions, zones, and resampled curves.
- 🔔 Notice cards for MCP-app UIs: All MCP-app UIs route tool results through a single dispatcher.
- Errors show a red "Rejected" card.
- Notice payloads show "Nothing to show" or "Cancelled" cards.
- Text-only results fall back to a notice.
- Results that never arrive time out after 20 s.
- A test requires every UI to use the dispatcher.
- 📦 Packaged polar-flow skill plugin: The skill ships as
bin/polar-flow.skill, a zip withpolar-flow/SKILL.mdat its root.release.ymlattaches it to everyv*release, andci.ymlattaches it to the rolling edge pre-release.- A new
.claude-plugin/marketplace.jsonmakes the repo a plugin marketplace with one plugin rooted atskill/. SKILL.mdis consolidated and covers all 28 tools.
🚀 Improvements
- 🔧 Dependency and toolchain bumps:
- Go directive moves from 1.26.2 to 1.26.8.
- mcp-go moves from v1.1.0 to v1.1.1, with indirect updates.
- The docs toolchain is updated (astro, starlight, sharp, D2 v0.9.0).
- The golang Docker base image moves from 1.26-alpine to 1.27-alpine.
🐛 Bug Fixes
- ⭐ Favorites decode and target validation:
- Favorites listings now decode on device-paired accounts, where
supportedDeviceIdsis opaque. - Target name, description, and phase-name lengths are validated before sending, so over-long input no longer leaves half-created targets.
- The text/plain time-clash 400 now maps to a proper error.
- Delete errors are now handled.
- Favorites listings now decode on device-paired accounts, where
- 🏃 Daily activity correctness:
- An all-zero day counts as no data even when
lastSyncis set, so future days no longer showhas_data. - Multi-day windows fetch in parallel (max 4 at once), and any failing window still fails the call.
- Activity series always request 144 samples, fixing multi-day 500 errors.
sleepScoreand start/end offsets are nullable, so null values no longer fail a whole report.
- An all-zero day counts as no data even when
Docker image
Published to ghcr.io/lmgarret/polar-flow-mcp (linux/amd64):
ghcr.io/lmgarret/polar-flow-mcp:0.11.0 # immutable, exact release
ghcr.io/lmgarret/polar-flow-mcp:0.11 # latest patch on this minor
ghcr.io/lmgarret/polar-flow-mcp:0 # latest release on this major
ghcr.io/lmgarret/polar-flow-mcp:latest # newest stable release
Claude skill
polar-flow.skill (below) is the polar-flow skill for this release: upload it in Claude.ai, or unzip it into ~/.claude/skills/.
Full commit log
566e31a ci(release): bump llm-release-action to v1.1.0 and use Claude 5.5 models (#107)
8a1d2a8 skill: ship as a .skill release asset and a plugin marketplace (#106)
df2b005 ci: use haiku 5.5 for release action (#104)
58ab1b0 Merge pull request #102 from lmgarret/claude/ecstatic-allen-eotx43
05f67aa Merge pull request #103 from lmgarret/claude/nice-newton-67u6co
f9c37b1 Slim the polar-flow skill to cross-tool rules and workflows
ecefb97 Merge pull request #101 from lmgarret/claude/peaceful-johnson-mg9tq5
b44658d fix: get_calendar_week_summary returned empty weeks
e6f88d9 Merge pull request #100 from lmgarret/ccr-6e2149b9-cguu5p
ec7c316 fix: future activity days, parallel window fetch, nullable-field docs
93d0add Merge pull request #99 from lmgarret/ccr-6e2149b9-cguu5p
f5d6fb6 fix: multi-day activity 500 and null sleep scores
9d949b8 Merge pull request #98 from lmgarret/ccr-6e2149b9-cguu5p
0c9e315 Add sport-profile writes, daily activity and sleep tools
5e62ef4 Merge pull request #96 from lmgarret/claude/amazing-lovelace-pfp1hb
2477c3a test(ui): require every MCP-app UI to use the notice dispatcher
1c09df8 Merge origin/main into claude/amazing-lovelace-pfp1hb
e666cb5 Merge pull request #97 from lmgarret/claude/intelligent-faraday-6beo4s
c4f728c feat(ui): notice cards for rejections, empty answers and cancellations
4111975 fix: favorites decode on paired accounts, target limits, clash and delete errors
5f37d5a Bring the polar-flow skill up to date with all 28 tools
8c3dd72 Merge pull request #95 from lmgarret/claude/vigilant-carson-7lpbwx
401bbdc Add get_training_zones tool and zones MCP app
6e0616c Merge pull request #87 from lmgarret/dependabot/docker/golang-1.27-alpine
91e543c ci: publish rolling edge pre-release on every merge to main
d216cb3 Merge pull request #94 from lmgarret/ccr-d43d5615-g8np8l
24ad6ad fix(flow): re-vendor spec; send X-Requested-With on target delete, type progress 404
d9e5458 Merge pull request #93 from lmgarret/ccr-bcc81085-7e2cq2
c1aa1de feat(ui): favorites MCP app; show edits in the sessions view
a2cebc4 feat: favorites, routes, and completed-session edit/delete tools
bd2557a chore(deps): bump dependencies (#92)
af98a7f chore(deps): bump golang from 1.26-alpine to 1.27-alpine
edge
Rolling pre-release of main at a212136. Replaced on every merge — not a stable release.
Docker image
ghcr.io/lmgarret/polar-flow-mcp:edge # this build (moves with main)
ghcr.io/lmgarret/polar-flow-mcp:sha-a212136 # immutable, this exact commit
Changes since v0.12.0
a212136 chore(deps): bump postcss-selector-parser and @expressive-code/core (#120)
2bdd042 chore(deps): bump golang.org/x/net from 0.59.0 to 0.61.0 (#115)
087c65b chore(deps): bump vite from 8.3.1 to 8.3.4 in /docs (#119)
da96715 chore(deps): bump actions/setup-node from 7.0.0 to 7.1.0 (#112)
32d1cb5 chore(deps): bump go.opentelemetry.io/otel/metric from 1.46.0 to 1.47.0 (#109)
bc71619 chore(deps): bump go.opentelemetry.io/otel/trace from 1.46.0 to 1.47.0 (#110)
08f9804 chore(deps): bump go.opentelemetry.io/otel from 1.46.0 to 1.47.0 (#111)
26a7943 chore(deps): bump github.com/mark3labs/mcp-go from 1.1.1 to 1.2.1 (#116)
d169b17 chore(deps): bump the docs group in /docs with 2 updates (#118)
618fdcf chore(deps): bump the docs group in /docs with 3 updates (#113)
05c835f chore(deps): bump source-map-js from 1.2.1 to 1.2.2 in /docs (#105)
v0.10.2
Changelog - v0.10.2
🛠️ Improvements
- 📚 Updated Documentation Tooling — Refreshed @astrojs/starlight (0.41.2→0.42.2), astro, and astro-d2 dependencies to keep our docs site running smoothly.
🐛 Fixes
- 🏃 Correct Pace/Speed Display in Sessions View — Sessions now show the right units for each sport: min/km for running and other foot-based activities, min/100m for swimming, and km/h for everything else. Also fixed a rounding glitch that could display "4:60" instead of "5:00".
Docker image
Published to ghcr.io/lmgarret/polar-flow-mcp (linux/amd64):
ghcr.io/lmgarret/polar-flow-mcp:0.10.2 # immutable, exact release
ghcr.io/lmgarret/polar-flow-mcp:0.10 # latest patch on this minor
ghcr.io/lmgarret/polar-flow-mcp:0 # latest release on this major
ghcr.io/lmgarret/polar-flow-mcp:latest # newest stable release
Full commit log
508aa09 ci: bump llm-release-action to v1.0.1 (pinned setup-python) (#90)
15bac58 chore(deps): bump the docs group in /docs with 3 updates (#88)
7c198d4 ci: default GITHUB_TOKEN to contents: read in CI and Release (#89)
30194f5 fix(ui): show sport-appropriate pace or speed in sessions view (#84)
edf9157 chore: pin actions to SHAs, extend Dependabot, add issue template config (#85)
03b8571 docs: make pitch and setup wording client-neutral (#86)
4a22860 docs: serve site under /polar-flow-mcp base for GitHub Pages (#83)
ff8433a docs: add MCP app UI screenshots and reference page (#82)
v0.10.1
Changelog – v0.10.1
🐛 Fixes
- ❤️ Heart-Rate Zone Colors Corrected — Fixed the color mapping for heart-rate zones in the sessions view, so Z1 (grey), Z2 (blue), Z3 (green), Z4 (yellow-orange), and Z5 (red) now display accurately.
Docker image
Published to ghcr.io/lmgarret/polar-flow-mcp (linux/amd64):
ghcr.io/lmgarret/polar-flow-mcp:0.10.1 # immutable, exact release
ghcr.io/lmgarret/polar-flow-mcp:0.10 # latest patch on this minor
ghcr.io/lmgarret/polar-flow-mcp:0 # latest release on this major
ghcr.io/lmgarret/polar-flow-mcp:latest # newest stable release
Full commit log
f8fe77a fix(ui): correct heart-rate zone colours in sessions view (#81)
5a78393 ci: migrate to lmgarret/llm-release-action
v0.10.0
Changelog — v0.10.0
✨ Features
- User Confirmation Gate for Write Tools — Destructive write operations (
create_training_target,update_training_target,delete_training_target,create_training_session) now support an elicitation-based confirmation step, giving clients the ability to prompt users for explicit approval before any changes are made.
Docker image
Published to ghcr.io/lmgarret/polar-flow-mcp (linux/amd64):
ghcr.io/lmgarret/polar-flow-mcp:0.10.0 # immutable, exact release
ghcr.io/lmgarret/polar-flow-mcp:0.10 # latest patch on this minor
ghcr.io/lmgarret/polar-flow-mcp:0 # latest release on this major
ghcr.io/lmgarret/polar-flow-mcp:latest # newest stable release
Full commit log
b17e7c7 Add user confirmation gate for write tools via MCP elicitation (#80)
f8a4314 chore(deps): bump nanoid from 3.3.16 to 3.3.19 in /docs (#75)
74389ad chore(deps): bump devalue from 5.8.1 to 5.9.2 in /docs (#76)
v0.9.0
Changelog — v0.9.0
✨ Features
- Static API Key Authentication — Introduced
MCP_API_KEYenvironment variable support for lightweight inbound authentication on the/mcpendpoint, giving you a simple alternative to OAuth with secure SHA-256 digest storage and timing-attack-resistant comparison.
🐛 Fixes
- HTTP Test Compatibility — Updated the test suite to work correctly with
httptest.NewRequestWithContext, resolving compatibility issues in the test implementation. - Astro Build Documentation — Restored compatibility with Astro 7.3.2 by updating the markdown processor configuration to use the new
unified()API, along with refreshed transitive dependencies (js-yaml,smol-toml).
Docker image
Published to ghcr.io/lmgarret/polar-flow-mcp (linux/amd64):
ghcr.io/lmgarret/polar-flow-mcp:0.9.0 # immutable, exact release
ghcr.io/lmgarret/polar-flow-mcp:0.9 # latest patch on this minor
ghcr.io/lmgarret/polar-flow-mcp:0 # latest release on this major
ghcr.io/lmgarret/polar-flow-mcp:latest # newest stable release
Full commit log
860f984 fix(auth): use httptest.NewRequestWithContext in API-key tests (#79)
d915a89 feat(auth): add static API-key authentication for /mcp (#78)
dc9300d chore: update Go and docs dependencies (#74)
f254fbd chore(deps): bump astro from 7.1.3 to 7.3.2 in /docs (#70)
1ab5361 chore(deps): bump go.opentelemetry.io/otel/metric from 1.45.0 to 1.46.0 (#66)
156346d chore(deps): bump svgo from 4.0.2 to 4.1.0 in /docs (#69)
6a50e70 chore(deps): bump golang.org/x/net from 0.57.0 to 0.58.0 (#65)
b59a4ad chore(deps): bump github.com/mark3labs/mcp-go from 0.57.0 to 0.58.0 (#64)
d6c8dd1 chore(deps): bump github.com/ogen-go/ogen from 1.23.0 to 1.24.0 (#63)
9b649d4 chore(deps): bump go.opentelemetry.io/otel/trace from 1.44.0 to 1.45.0 (#62)
ba987ce chore(deps): bump go.opentelemetry.io/otel/metric from 1.44.0 to 1.45.0 (#60)
6baefd2 chore(deps): bump go.opentelemetry.io/otel from 1.44.0 to 1.45.0 (#61)
v0.8.1
Changelog — v0.8.1
🐛 Bug Fixes
- Intensity Mapping for Warmup & Cooldown Phases — Fixed an issue where warmup and cooldown phases were always sent with no intensity zone; they now correctly reflect the intended intensity settings when syncing training sessions to the Polar Flow API.
Docker image
Published to ghcr.io/lmgarret/polar-flow-mcp (linux/amd64):
ghcr.io/lmgarret/polar-flow-mcp:0.8.1 # immutable, exact release
ghcr.io/lmgarret/polar-flow-mcp:0.8 # latest patch on this minor
ghcr.io/lmgarret/polar-flow-mcp:0 # latest release on this major
ghcr.io/lmgarret/polar-flow-mcp:latest # newest stable release
Full commit log
f04ea05 chore(deps): bump js-yaml from 4.3.0 to 4.3.1 in /docs (#58)
28ecf3f Map intensity on warmup/cooldown phases, not just repeat (#59)
v0.8.0
Changelog — v0.8.0
✨ Features
- Power/Speed Zone Intensity for Training Targets — You can now set
power_zoneandspeed_zoneas intensity options when creating or updating training targets, alongside the existinghr_zone. Zones are applied in priority order:hr_zone→power_zone→speed_zone→label, giving you more flexibility in how you define workout intensity.
🔧 Improvements
- Dependency Updates — Updated several dependencies including
actions/setup-python,mcp-go,go-faster/errors,postcss, andsvgoto their latest versions for improved security and compatibility.
Docker image
Published to ghcr.io/lmgarret/polar-flow-mcp (linux/amd64):
ghcr.io/lmgarret/polar-flow-mcp:0.8.0 # immutable, exact release
ghcr.io/lmgarret/polar-flow-mcp:0.8 # latest patch on this minor
ghcr.io/lmgarret/polar-flow-mcp:0 # latest release on this major
ghcr.io/lmgarret/polar-flow-mcp:latest # newest stable release
Full commit log
efda4a2 ci: revert release to use sonnet 4.6 with temperature
1dfa5dd ci: remove temperature parameter from release.yml
442c1ae Add power/speed zone intensity to training-target phases (#57)
0707542 ci: update model version in release workflow
baa9d4e chore(deps): bump actions/setup-python from 6 to 7 (#53)
e091114 chore(deps): bump github.com/mark3labs/mcp-go from 0.56.0 to 0.57.0 (#54)
e5a93b0 chore(deps): bump github.com/go-faster/errors from 0.7.1 to 0.8.0 (#55)
35b9772 chore(deps): bump postcss from 8.5.16 to 8.5.25 in /docs (#56)
260c934 chore(deps): bump svgo from 4.0.1 to 4.0.2 in /docs (#52)
v0.7.0
Changelog — v0.7.0
✨ Features
-
Richer Response After Updating Training Targets — The
update_training_targettool now returns the full target details (name, datetime, and rolled-up exercise phases) immediately after a successful update, so your UI and agents always have the latest state without needing an extra fetch. -
Helpful Error Hints for Content Filter Rejections — When a training target name is blocked by Polar's server-side content filter, you'll now see a clear, actionable message explaining why the update was rejected and what you can do to work around it — no more cryptic 400 errors.
Docker image
Published to ghcr.io/lmgarret/polar-flow-mcp (linux/amd64):
ghcr.io/lmgarret/polar-flow-mcp:0.7.0 # immutable, exact release
ghcr.io/lmgarret/polar-flow-mcp:0.7 # latest patch on this minor
ghcr.io/lmgarret/polar-flow-mcp:0 # latest release on this major
ghcr.io/lmgarret/polar-flow-mcp:latest # newest stable release
Full commit log
af19b09 feature: return get-target detail view from update_training_target (#51)
14eb79b chore(deps): bump astro from 7.0.6 to 7.1.3 in /docs (#49)
d6ac8f8 Surface actionable hint for Polar's name content filter rejections (#50)