Huawei Training Camp MCP
Huawei Training Camp MCP
把你的华为运动健康数据接入 AI——让 Claude、Cherry Studio 等 AI 客户端 直接查询并分析你的训练记录、睡眠、心率、跑力,像和一个懂训练的教练聊天一样。
安全边界:本项目不实现任何绕过华为权限、破解认证、窃取 Cookie、 绕过访问控制的功能。认证信息只由用户本人通过环境变量显式提供 (来自用户自己已登录的浏览器会话),不写入代码 / 配置 / Git。
目录
这是什么?能干嘛?
你戴着华为手表 / 手环运动,数据都同步在华为运动健康里,但想分析时只能在 App 里一屏屏翻。本项目把这些数据变成 AI 能直接调用的工具(MCP, Model Context Protocol——一个让 AI 安全使用外部数据的标准协议)。
接入后,你可以直接对 AI 说:
"我最近 4 周跑量 trend 怎么样?和上个月比呢?" → AI 调用周趋势 + 环比工具
"分析一下我昨天那次间歇跑的心率曲线" → AI 调用训练详情 + 统计摘要
"我最近睡眠质量如何?静息心率有没有异常?" → AI 调用睡眠 / 静息心率工具
"我现在跑力多少?预测我半马能跑多少?" → AI 调用运动能力评估工具
数据永远只在你自己的电脑 ↔ 华为服务器之间流动,AI 客户端通过本项目的 本地服务读数,不经过任何第三方服务器。
开始之前:你需要准备什么
# | 需要什么 | 说明 |
1 | 华为设备 + 账号 | 手表 / 手环 + 华为运动健康 App,且能在电脑浏览器登录 华为运动健康网页端(海外版入口不同)看到自己的数据 |
2 | 一台电脑 + Python 3.12 或更高 | Windows 教程见下文;Mac / Linux 也可用(命令换成 |
3 | 一个支持 MCP 的 AI 客户端 | 如 Cherry Studio(免费、对中文用户友好)、Claude Desktop 等 |
不需要会编程——下面每一步都是复制粘贴级别的内容。 需要的只是按顺序做完五步。
五步上手教程
第 1 步:安装 Python
打开 python.org/downloads,下载 Python 3.12 或更高版本的安装包(Windows 点黄色大按钮即可);
运行安装包,务必勾选最底部的
Add Python to PATH(不勾后面会报 "'python' 不是内部或外部命令"),然后点 Install Now;验证:按
Win + R,输入powershell回车,在蓝底窗口输入:python --version显示
Python 3.12.x(或更高)即成功。
第 2 步:下载本项目并安装依赖
在本仓库页面点绿色的 Code → Download ZIP,解压到任意目录 (本文以
C:\huawei-health-mcp为例;会 Git 的同学直接git clone更好, 方便以后更新);打开 PowerShell(
Win + R→ 输入powershell回车),逐行粘贴执行:cd C:\huawei-health-mcp # 进入项目目录(按你的实际解压路径改) python -m venv .venv # 创建独立的运行环境(约 30 秒) .\.venv\Scripts\pip install -r requirements.txt # 安装依赖(约 1~2 分钟)装完先跑一遍自带测试(不需要任何凭证,验证环境没问题):
.\.venv\Scripts\python.exe -m pytest -q最后显示
315 passed即环境就绪。
第 3 步:获取华为凭证(关键步骤)
本项目通过你自己浏览器里的登录凭证访问你的数据(就像你本人打开网页版 一样)。凭证 = 两个字符串,从浏览器里复制出来:
用电脑浏览器登录华为运动健康网页端,确认能看到自己的训练数据;
按 F12 打开开发者工具 → 切到 Network(网络) 标签;
按 F5 刷新页面,Network 列表里会出现一堆请求;
在过滤框输入
activityRecord,找到其中一条状态码 200 的请求, 点它;右侧切到 Headers(标头) → 往下翻到 Request Headers(请求标头), 找到并复制这两个值(复制时从行首选到行尾,别多别少):
Authorization:一长串以Bearer开头 → 对应HTC_AUTHORIZATIONx-client-id:一串字母数字 → 对应HTC_CLIENT_ID
回到 PowerShell,粘贴设置(引号要保留):
$env:HTC_AUTHORIZATION = "粘贴 Authorization 的完整值" $env:HTC_CLIENT_ID = "粘贴 x-client-id 的值"
安全须知:
这两个值等同于你的登录态,只粘贴到环境变量里,不要发给别人、 不要截图发群里、不要写进任何文件;
它们会在几小时到几天后过期(华为控制),过期后按 401 排障 重新抓一次即可;
关闭这个 PowerShell 窗口后变量即消失,下次使用重新设置 (这是特性不是 bug——凭证不落盘)。
第 4 步:连通性自检
还在同一个 PowerShell 窗口(凭证设好的那个),执行:
.\.venv\Scripts\python.exe scripts\test_real_htc.py看到 HTC API request: SUCCESS 和你的训练列表 → 链路全通,继续下一步。
更多自检模式(可选):
.\.venv\Scripts\python.exe scripts\test_real_htc.py sleep 7 # 最近 7 晚睡眠
.\.venv\Scripts\python.exe scripts\test_real_htc.py resting-hr 28 # 28 天静息心率
.\.venv\Scripts\python.exe scripts\test_real_htc.py hrv 28 # 28 天 HRV
.\.venv\Scripts\python.exe scripts\test_real_htc.py performance # 跑力与预测成绩
.\.venv\Scripts\python.exe scripts\test_real_htc.py pb # 个人纪录
.\.venv\Scripts\python.exe scripts\test_real_htc.py trend 8 # 8 周训练趋势第 5 步:接入你的 AI 客户端
以 Cherry Studio 为例(Claude Desktop 等同理,都在 MCP / 工具设置里):
打开 设置 → MCP 服务 → 添加(或"+"新建);
类型选 stdio,按下表填写:
配置项 | 填什么 |
名称 |
|
命令 |
|
参数 |
|
工作目录 |
|
JSON 配置(部分客户端直接编辑配置文件,等价于上面):
{
"mcpServers": {
"huawei-training-camp": {
"command": "C:\\huawei-health-mcp\\.venv\\Scripts\\python.exe",
"args": ["-m", "src.huawei_health_mcp.server"],
"cwd": "C:\\huawei-health-mcp",
"env": {
"HTC_AUTHORIZATION": "<你的 Authorization 值>",
"HTC_CLIENT_ID": "<你的 x-client-id 值>"
}
}
}
}重要:
env里的凭证写在你本机的客户端配置里(该文件只在你电脑上, 不在 Git 仓库里)。凭证过期后改这里的新值并重启客户端。
保存并启用该服务,客户端里应该能看到 14 个工具(
health_check、get_recent_activities等);开个对话直接问:"帮我看看最近两周的训练情况"——AI 会自己调用工具。
怎么用:可以问 AI 的问题
训练回顾:"我最近 7 天练了多少?和上一个 7 天比呢?"
单次分析:"分析我昨天那次跑步的心率和配速。"
长期趋势:"最近 8 周跑量趋势如何?哪周练得最猛?"
恢复状态:"我最近睡眠怎么样?静息心率正常吗?HRV 呢?"
能力评估:"我现在的跑力是多少?预测全马成绩?我的 5 公里 PB 是什么时候跑的?"
提示:不需要记工具名——直接用自然语言说需求,AI 自己选工具。
功能一览(14 个 MCP 工具)
工具 | 说明 |
| 服务连通性检查 |
| 最近训练列表(活动 id / 时间 / 类型 / 距离 / 心率 / 配速 / VO2max / 训练负荷等摘要) |
| 单次训练高频采样详情(心率 / 速度 / 步频 / 海拔 / 位置 / 跑姿,通用 field-value 结构) |
| 单次训练确定性统计摘要(每采集器样本数 / 时间范围 / 各字段 min-max-avg-first-last),无 AI 推断 |
| 单次训练核心指标(时长 / 心率 / 速度 / 配速 / 距离,带 device_summary/samples 来源标记) |
| 一段周期内多次训练聚合(次数 / 总距离 / 总历时 / 平均与最大单次 / 心率 / 卡路里 / 累计爬升下降 / 步数 / 按 activityType 分组),类型值原样保留不命名语义;另含总纯运动时长与周期平均配速 |
| 两个连续周期对比:最近 N 天 vs 之前 N 天(每指标 baseline / current / delta / percentage_change;缺失≠0,不除零) |
| 最近 N 个连续周窗口的训练量趋势(滚动 7 天窗口、不重叠;每周完整周期聚合) |
| 相邻周环比(older → newer,最多 weeks-1 对;weeks=1 返回空数组) |
| 最近 N 天睡眠记录(每晚:上床/入睡/醒来时刻,浅睡/深睡/快速眼动/清醒分钟,总睡眠、得分、效率、入睡用时、夜醒次数;服务端解析口径) |
| 最近 N 天静息心率统计(服务端聚合:全窗口 avg/max/min/count + 按天明细;fieldName=restBpm,bpm) |
| 最近 N 天 HRV 统计(服务端聚合:全窗口 + 按天明细;fieldName=avgHrv,数值原样返回——华为未声明单位与算法口径,不擅自换算) |
| 最新运动能力评估(跑力指数 / 状态 / 健康 / 疲劳 / 排名 + 1/3/5/10 公里·半马·全马预测成绩秒数;服务端口径) |
| 单运动类型个人纪录(name/value/达成起止时间;value 单位由华为定义——时间为秒、距离为米,原样返回) |
参数说明:
lookback_days:查询窗口天数,默认 30,范围 1~730;查更早的训练时调大。days:恢复状态类窗口天数(睡眠默认 14,心率 / HRV 默认 28)。weeks(周趋势):周窗口数,默认 4,范围 1~104;滚动 7 天连续窗口 (非自然周),单次列表请求整个跨度后本地归窗。window_days(周期对比):单窗口天数,默认 7,范围 1~365。activity_id来自get_recent_activities返回;HTC API 不支持按 id 直查详情,详情查询内部先在列表中定位该活动再拉取高频数据。
排障:401 / 认证过期
症状:任一 tool 报 HTC HTTP 请求失败:status=401(或脚本输出
HTC API request: FAILED + 401)。通常昨天还能用、今天全体 tool 一起失败——
这是会话凭证过期的典型形态,不是本项目代码问题。
原因:HTC_AUTHORIZATION / HTC_COOKIE 来自浏览器会话,有效期由华为
服务端控制(数小时到数天不等),过期后所有请求统一 401。
修复步骤:
浏览器重新登录华为运动健康网页端,确认页面能正常看到训练数据;
开发者工具 → Network → 刷新页面 → 找到对
activityRecord:query的 **成功(200)**请求 → 重新复制Authorization与x-client-id;按使用方式刷新凭证:
终端脚本:在同一个终端重新
$env:HTC_AUTHORIZATION = "<新值>"等即可,下次运行生效;MCP 客户端常驻服务:服务进程的环境在启动那一刻固定——需在 MCP 客户端的启动配置(env 段)里替换新值,然后重启 MCP 服务 / 客户端;
验证:
.\.venv\Scripts\python.exe scripts\test_real_htc.py输出SUCCESS即恢复。
相邻情况区分:
现象 | 含义 | 处理 |
全部 tool 401 | 凭证过期(最常见) | 按上述步骤换新 |
单一 tool 400 | 该请求参数问题 | 提 issue 附现象(不含凭证) |
403 / 405 | 权限或入口不匹配 | 确认复制的是 |
脚本 WARNING 提示未设 | 可选头缺失,不致命 | 通常仍可成功;被拒时按第 3 步同样方法补全 |
安全提醒:排障过程中复制粘贴的凭证只进环境变量,不要截图 / 粘贴到 issue / 写入任何文件。
常见问题 FAQ
Q1:报错 "'python' 不是内部或外部命令"
安装 Python 时没勾 Add Python to PATH。最简单的解决:重新运行安装包,
勾上后再 Install;或改用 py 命令(py -m venv .venv)。
Q2:PowerShell 提示"在此系统上禁止运行脚本"(执行策略)
本教程的命令不涉及运行 .ps1 脚本,一般不会遇到。若确需放开,以管理员
开 PowerShell 执行 Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
(输入 Y 确认)。
Q3:.\.venv\Scripts\pip 提示找不到路径
你不在项目目录里。先 cd 到项目根目录(有 requirements.txt 的那层)。
Q4:Network 里找不到 activityRecord 请求
确认已登录网页端且能看到数据;刷新页面后再看;过滤词换 activityRecord:query
或 things.dbankcloud 再试。
Q5:Mac / Linux 能用吗?
可以。等价命令:python3 -m venv .venv、.venv/bin/pip install -r requirements.txt、.venv/bin/python -m src.huawei_health_mcp.server;
环境变量改用 export HTC_AUTHORIZATION="..." 写法。
Q6:我的数据会不会上传到第三方? 不会。本服务只在你本机运行,请求只发往华为官方服务器。AI 客户端从本地 服务读数——你问 AI 时,AI 客户端会把要分析的数据发给你自己配置的模型 服务方(和你平时用它聊天是同一回事,介意的话选本地模型)。
Q7:凭证放环境变量安全吗?为什么不做自动登录? 环境变量方式保证凭证不落盘、不进 Git。自动登录需要模拟华为认证流程, 属于绕过/逆向范畴,本项目不做(见安全边界)。
Q8:测试显示 315 passed 但我一条数据都没有?
单元测试用合成数据,不需要凭证和网络。真实数据要看第 4 步的
test_real_htc.py 输出。
开发
# 运行全部测试(全部 Mock,不联网、不需要凭证)
.\.venv\Scripts\python.exe -m pytest -q # 预期 315 passedsrc/huawei_health_mcp/
├─ client.py # HTCClient:HTTP 取数,返回原始 JSON(不解析)
├─ parser.py # 训练原始 JSON → 标准模型(时间戳契约:记录 ms / 采样 ns)
├─ health_parser.py # 恢复状态解析(睡眠记录 / 静息心率 / HRV 统计)
├─ performance_parser.py # 训练能力解析(运动能力评估 / PB 个人纪录)
├─ models.py # Pydantic 模型(ActivityRecord / TrainingSummary / SleepRecord / AthleticPerformance 族)
├─ analysis.py # 确定性统计分析(ActivityDetail → TrainingSummary)
├─ period_analysis.py # 周期聚合(多 ActivityRecord → TrainingPeriodSummary)
├─ period_comparison.py # 周期对比(两个 TrainingPeriodSummary → TrainingPeriodComparison)
├─ trend_analysis.py # 滚动周趋势与相邻周环比(复用聚合层与对比层)
└─ server.py # FastMCP 服务与工具接线
scripts/test_real_htc.py # 人工真实请求脚本(十一模式,需要环境变量凭证)
scripts/test_mcp_client.py # 真实 MCP 客户端验收(14 个 tool 全调用)
tests/ # 单元测试(synthetic fixture,无真实用户数据)
PROJECT_STATE.md # 项目长期状态账本(新贡献者/Agent 从这里恢复上下文)开发约定:认证只经环境变量;真实响应只存 data_temp/(git-ignored);
测试全部使用 Mock / synthetic 数据;每个 Phase 完成后更新 PROJECT_STATE.md。
已验证的真实 API 契约(摘要)
列表 / 详情响应顶层均为
list记录级与详情顶层时间为毫秒;采集器 / 采样点时间为纳秒
采样值
floatValue→ float、integerValue→ int请求的数据类型不保证全部返回(
details/samplePoints可为空,属正常)恢复状态端点:
GET /healthRecords时间戳为纳秒;healthRecords统计的 startDay/endDay 为字符串、sampleSet统计为数字(两端口径不混用); 睡眠分段为分钟(light+deep+dream=all 自洽)训练能力端点:
GET /athleticPerformance/latest直接收五项指数与 predictedTimes(秒);GET /sportReportsPB 的 startTime/endTime 为毫秒, value 单位由华为定义(时间为秒、距离为米)
许可证与免责声明
本项目以 MIT License 开源。
免责声明:本项目仅用于分析用户自己账号、自己授权的运动数据。 不实现任何绕过华为权限、破解认证、窃取 Cookie、绕过访问控制的功能。 使用本项目产生的任何后果(如账号因异常访问被服务方限制)由使用者自行承担。
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/yinxu-xiong/huawei-training-camp-mcp-connector'
If you have feedback or need assistance with the MCP directory API, please join our Discord server