极地接入链路
polar-accesslink 是一个共享的Polar AccessLink核心,带有两个适配器:
polar-mcp适用于LLM和MCP兼容的客户端polar-cli用于cronjobs、导出和简单自动化
当前范围包括 activities, cardio-load,以及 exercises.
建筑
polar_accesslink.service和polar_accesslink.client包含共享核心。polar_accesslink.mcp_server通过MCP工具暴露核心。polar_accesslink.cli通过终端命令公开相同的操作。
支持的操作
activities_range(from_date, to_date, include_samples=false)activity_by_date(date, include_samples=false)cardio_load_recent(days=30)cardio_load_by_date(date)exercises_recent(include_samples=false, include_zones=false, include_route=false, include_tcx_metadata=false)exercise_by_id(exercise_id, include_samples=false, include_zones=false, include_route=false, include_tcx_metadata=false)
两个适配器都返回结构化的JSON信封:
status:ok|no_data|errorquerydatameta.generated_atmeta.sourcemeta.rate_limit
需求
- python
3.11+ - 极地接入链路
access_token - 仅当您使用一次性OAuth引导帮助程序时,才使用Polar AccessLink客户端凭据
快速入门
python3 -m venv .venv
source .venv/bin/activate
pip install -e .[dev]
export POLAR_ACCESS_TOKEN="your-access-token"主控程序
polar-mcp兼容性包装:
python3 run_polar_mcp.py命令行界面
polar-cli activities-range --from-date 2026-04-01 --to-date 2026-04-07 --pretty
polar-cli exercises-recent --output jsonl --out data/exercises.jsonlMCP配置示例
{
"mcpServers": {
"polar": {
"command": "python3",
"args": ["/absolute/path/to/run_polar_mcp.py"],
"env": {
"POLAR_ACCESS_TOKEN": "your-access-token"
}
}
}
}Cron示例
0 6 * * * cd /absolute/path/to/polar-accesslink && . .venv/bin/activate && POLAR_ACCESS_TOKEN=your-access-token polar-cli exercises-recent --output json --out data/exercises.jsonOAuth引导助手
polar_auth.py 现在是一个薄薄的包裹 scripts/polar_auth.py,它仍然是一个独立的一次性助手,用于:
- 在上启动回调服务器
127.0.0.1:3000 - 打开Polar身份验证URL
- 令牌的交换代码
- 用户可以选择注册
POST /v3/users
在运行之前,请创建Polar AccessLink客户端并配置重定向URL 使用官方Polar文档:
- https://www.polar.com/accesslink-api/?srsltid=AfmBOorLohdyoKgJzuBTMkXHdaePysjJjcxexJQiq5ZH5UyDWFS_3aK8#authentication
例子:
export POLAR_CLIENT_ID='your-client-id'
export POLAR_CLIENT_SECRET='your-client-secret'
export POLAR_REDIRECT_URI='http://127.0.0.1:3000/auth/polar/callback'
export POLAR_MEMBER_ID='your-member-id'
python3 polar_auth.py迁移说明
- Python包已更改
polar_mcp到polar_accesslink. - 分发名称已更改
polar-mcp到polar-accesslink. polar-mcp保持为MCP可执行文件。run_polar_mcp.py保留为兼容性包装器,但现在导入重命名的模块。- 新的自动化入口点:
polar-cli. - 如果您有直接的Python导入、cronjobs或MCP配置固定到旧模块路径,请在升级前更新它们。
隐私和出版
- 不要承诺
.env文件或真实的Polar凭据。 - 不要发布原始锻炼导出(
.tcx,.fit,.gpx)除非你愿意公开这些数据。 exercise_by_id(..., include_tcx_metadata=true)可以从TCX导出中显示锻炼标题和笔记。
已知限制
activities是日间总结/示例,而不是锻炼会话对象。cardio-load是只读的负载状态/历史数据。exerciseJSON不公开训练title/notes.include_tcx_metadata=true每次练习都会提出额外的TCX请求,以丰富title和notes.- TCX
title限制为15个字符 --Garmin TCX XSD模式定义Plan/Name作为RestrictedToken_t(maxLength=15).Polar会截断较长的标题以符合规范notes现场(xsd:string)没有长度限制。如果您需要完整的练习描述,请将其放在极流中的注释字段中。 GPX只有当锻炼有路线数据时,数据才可用。
待办事项
- 为添加原始导出助手
FIT和GPX必要时。
