Skip to main content
Glama
yinxu-xiong

Huawei Training Camp MCP

by yinxu-xiong

Huawei Training Camp MCP

把你的华为运动健康数据接入 AI——让 Claude、Cherry Studio 等 AI 客户端 直接查询并分析你的训练记录、睡眠、心率、跑力,像和一个懂训练的教练聊天一样。

Python 3.12+ Tests License: MIT

安全边界:本项目不实现任何绕过华为权限、破解认证、窃取 Cookie、 绕过访问控制的功能。认证信息只由用户本人通过环境变量显式提供 (来自用户自己已登录的浏览器会话),不写入代码 / 配置 / Git。


目录


Related MCP server: vitals

这是什么?能干嘛?

你戴着华为手表 / 手环运动,数据都同步在华为运动健康里,但想分析时只能在 App 里一屏屏翻。本项目把这些数据变成 AI 能直接调用的工具(MCP, Model Context Protocol——一个让 AI 安全使用外部数据的标准协议)。

接入后,你可以直接对 AI 说:

  • "我最近 4 周跑量 trend 怎么样?和上个月比呢?" → AI 调用周趋势 + 环比工具

  • "分析一下我昨天那次间歇跑的心率曲线" → AI 调用训练详情 + 统计摘要

  • "我最近睡眠质量如何?静息心率有没有异常?" → AI 调用睡眠 / 静息心率工具

  • "我现在跑力多少?预测我半马能跑多少?" → AI 调用运动能力评估工具

数据永远只在你自己的电脑 ↔ 华为服务器之间流动,AI 客户端通过本项目的 本地服务读数,不经过任何第三方服务器。

开始之前:你需要准备什么

#

需要什么

说明

1

华为设备 + 账号

手表 / 手环 + 华为运动健康 App,且能在电脑浏览器登录 华为运动健康网页端(海外版入口不同)看到自己的数据

2

一台电脑 + Python 3.12 或更高

Windows 教程见下文;Mac / Linux 也可用(命令换成 python3 -m venv .venv 等价写法)

3

一个支持 MCP 的 AI 客户端

Cherry Studio(免费、对中文用户友好)、Claude Desktop 等

不需要会编程——下面每一步都是复制粘贴级别的内容。 需要的只是按顺序做完五步。

五步上手教程

第 1 步:安装 Python

  1. 打开 python.org/downloads,下载 Python 3.12 或更高版本的安装包(Windows 点黄色大按钮即可);

  2. 运行安装包,务必勾选最底部的 Add Python to PATH(不勾后面会报 "'python' 不是内部或外部命令"),然后点 Install Now;

  3. 验证:按 Win + R,输入 powershell 回车,在蓝底窗口输入:

    python --version

    显示 Python 3.12.x(或更高)即成功。

第 2 步:下载本项目并安装依赖

  1. 在本仓库页面点绿色的 Code → Download ZIP,解压到任意目录 (本文以 C:\huawei-health-mcp 为例;会 Git 的同学直接 git clone 更好, 方便以后更新);

  2. 打开 PowerShell(Win + R → 输入 powershell 回车),逐行粘贴执行:

    cd C:\huawei-health-mcp                 # 进入项目目录(按你的实际解压路径改)
    python -m venv .venv                    # 创建独立的运行环境(约 30 秒)
    .\.venv\Scripts\pip install -r requirements.txt   # 安装依赖(约 1~2 分钟)
  3. 装完先跑一遍自带测试(不需要任何凭证,验证环境没问题):

    .\.venv\Scripts\python.exe -m pytest -q

    最后显示 315 passed 即环境就绪。

第 3 步:获取华为凭证(关键步骤)

本项目通过你自己浏览器里的登录凭证访问你的数据(就像你本人打开网页版 一样)。凭证 = 两个字符串,从浏览器里复制出来:

  1. 用电脑浏览器登录华为运动健康网页端,确认能看到自己的训练数据;

  2. F12 打开开发者工具 → 切到 Network(网络) 标签;

  3. F5 刷新页面,Network 列表里会出现一堆请求;

  4. 在过滤框输入 activityRecord,找到其中一条状态码 200 的请求, 点它;

  5. 右侧切到 Headers(标头) → 往下翻到 Request Headers(请求标头), 找到并复制这两个值(复制时从行首选到行尾,别多别少):

    • Authorization:一长串以 Bearer 开头 → 对应 HTC_AUTHORIZATION

    • x-client-id:一串字母数字 → 对应 HTC_CLIENT_ID

  6. 回到 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 / 工具设置里):

  1. 打开 设置 → MCP 服务 → 添加(或"+"新建);

  2. 类型选 stdio,按下表填写:

配置项

填什么

名称

huawei-training-camp(随意)

命令

C:\huawei-health-mcp\.venv\Scripts\python.exe(你项目里的实际路径)

参数

-m src.huawei_health_mcp.server

工作目录

C:\huawei-health-mcp

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 仓库里)。凭证过期后改这里的新值并重启客户端。

  1. 保存并启用该服务,客户端里应该能看到 14 个工具(health_checkget_recent_activities 等);

  2. 开个对话直接问:"帮我看看最近两周的训练情况"——AI 会自己调用工具。

怎么用:可以问 AI 的问题

  • 训练回顾:"我最近 7 天练了多少?和上一个 7 天比呢?"

  • 单次分析:"分析我昨天那次跑步的心率和配速。"

  • 长期趋势:"最近 8 周跑量趋势如何?哪周练得最猛?"

  • 恢复状态:"我最近睡眠怎么样?静息心率正常吗?HRV 呢?"

  • 能力评估:"我现在的跑力是多少?预测全马成绩?我的 5 公里 PB 是什么时候跑的?"

提示:不需要记工具名——直接用自然语言说需求,AI 自己选工具。

功能一览(14 个 MCP 工具)

工具

说明

health_check

服务连通性检查

get_recent_activities(limit=5, lookback_days=30)

最近训练列表(活动 id / 时间 / 类型 / 距离 / 心率 / 配速 / VO2max / 训练负荷等摘要)

get_activity_detail(activity_id, lookback_days=30)

单次训练高频采样详情(心率 / 速度 / 步频 / 海拔 / 位置 / 跑姿,通用 field-value 结构)

get_training_summary(activity_id, lookback_days=30)

单次训练确定性统计摘要(每采集器样本数 / 时间范围 / 各字段 min-max-avg-first-last),无 AI 推断

get_session_metrics(activity_id, lookback_days=30)

单次训练核心指标(时长 / 心率 / 速度 / 配速 / 距离,带 device_summary/samples 来源标记)

get_training_period_summary(lookback_days=7, limit=100)

一段周期内多次训练聚合(次数 / 总距离 / 总历时 / 平均与最大单次 / 心率 / 卡路里 / 累计爬升下降 / 步数 / 按 activityType 分组),类型值原样保留不命名语义;另含总纯运动时长与周期平均配速

get_training_period_comparison(window_days=7, limit=100)

两个连续周期对比:最近 N 天 vs 之前 N 天(每指标 baseline / current / delta / percentage_change;缺失≠0,不除零)

get_training_weekly_trend(weeks=4, limit=100)

最近 N 个连续周窗口的训练量趋势(滚动 7 天窗口、不重叠;每周完整周期聚合)

get_training_weekly_trend_delta(weeks=4, limit=100)

相邻周环比(older → newer,最多 weeks-1 对;weeks=1 返回空数组)

get_sleep_records(days=14)

最近 N 天睡眠记录(每晚:上床/入睡/醒来时刻,浅睡/深睡/快速眼动/清醒分钟,总睡眠、得分、效率、入睡用时、夜醒次数;服务端解析口径)

get_resting_heart_rate(days=28)

最近 N 天静息心率统计(服务端聚合:全窗口 avg/max/min/count + 按天明细;fieldName=restBpm,bpm)

get_hrv_stats(days=28)

最近 N 天 HRV 统计(服务端聚合:全窗口 + 按天明细;fieldName=avgHrv,数值原样返回——华为未声明单位与算法口径,不擅自换算)

get_athletic_performance()

最新运动能力评估(跑力指数 / 状态 / 健康 / 疲劳 / 排名 + 1/3/5/10 公里·半马·全马预测成绩秒数;服务端口径)

get_personal_bests(activity_type='running')

单运动类型个人纪录(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。

修复步骤

  1. 浏览器重新登录华为运动健康网页端,确认页面能正常看到训练数据;

  2. 开发者工具 → Network → 刷新页面 → 找到对 activityRecord:query 的 **成功(200)**请求 → 重新复制 Authorizationx-client-id

  3. 按使用方式刷新凭证:

    • 终端脚本:在同一个终端重新 $env:HTC_AUTHORIZATION = "<新值>" 等即可,下次运行生效;

    • MCP 客户端常驻服务:服务进程的环境在启动那一刻固定——需在 MCP 客户端的启动配置(env 段)里替换新值,然后重启 MCP 服务 / 客户端

  4. 验证:.\.venv\Scripts\python.exe scripts\test_real_htc.py 输出 SUCCESS 即恢复。

相邻情况区分

现象

含义

处理

全部 tool 401

凭证过期(最常见)

按上述步骤换新

单一 tool 400

该请求参数问题

提 issue 附现象(不含凭证)

403 / 405

权限或入口不匹配

确认复制的是 things.dbankcloud.cn 域下成功请求的请求头

脚本 WARNING 提示未设 HTC_VERSION / HTC_COOKIE

可选头缺失,不致命

通常仍可成功;被拒时按第 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:querythings.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 passed
src/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 /sportReports PB 的 startTime/endTime 为毫秒, value 单位由华为定义(时间为秒、距离为米)

许可证与免责声明

本项目以 MIT License 开源。

免责声明:本项目仅用于分析用户自己账号、自己授权的运动数据。 不实现任何绕过华为权限、破解认证、窃取 Cookie、绕过访问控制的功能。 使用本项目产生的任何后果(如账号因异常访问被服务方限制)由使用者自行承担。

A
license - permissive license
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • A paid remote MCP for AI SDK data query MCP, built to return verdicts, receipts, usage logs, and aud

  • 63 tools for Apple Health, Fitbit, Oura & Health Connect data in Claude, ChatGPT, Grok & Mistral.

  • MCP server for Withings health data — sleep, activity, heart, and body metrics.

View all MCP Connectors

Latest Blog Posts

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