Skip to main content
Glama
yummy520730

Yummy Health MCP

by yummy520730

Yummy Health MCP

私人、只读的健康数据桥:

华为手表
   ↓
华为运动健康
   ↓(当前可用)                    ↓(拿到华为 Health Service Kit 权限后)
Android Health Connect  ← 手机同步器 →  Huawei Health Source
                         ↓ HTTPS
                    Zeabur 私人存储
                         ↓ OAuth 2.1 + MCP
                       ChatGPT

当前版本已经实现:

  • Android Health Connect 读取:心率、静息心率、步数、睡眠、运动、血氧、体重

  • 手机到 Zeabur 的独立 SYNC_TOKEN 认证

  • SQLite 持久化和重复记录更新

  • ChatGPT 动态 OAuth 客户端注册、PKCE、access token、refresh token

  • 只读 MCP 工具:

    • get_latest_health_status

    • get_health_records

    • get_heart_rate

    • get_sleep

    • get_daily_activity

  • 华为直连数据源接口已预留;尚未填入 Health Service Kit SDK,因为需要你自己的 App ID、签名证书、agconnect-services.json 和已批准 scopes

1. 部署后端到 Zeabur

  1. 新建一个 Service,源码目录选本项目根目录,让 Zeabur 使用 Dockerfile

  2. 给 Service 挂载持久卷到 /data。不挂卷会在重建后丢记录和 OAuth token。

  3. 设置环境变量:

    PUBLIC_BASE_URL=https://你的域名
    APP_PASSWORD=只在ChatGPT授权页输入的长密码
    SYNC_TOKEN=只填进手机同步器的另一条长随机字符串
    DATA_DIR=/data
    ACCESS_TOKEN_TTL_SECONDS=3600
  4. 部署后检查:

    https://你的域名/healthz

    应返回:

    {"ok":true,"version":"0.1.1"}

不要把 APP_PASSWORDSYNC_TOKEN/data/health.sqlite3 提交到 GitHub。

2. 编译手机同步器

不安装 Android Studio:用 GitHub Actions

  1. 打开 GitHub 仓库的 Actions

  2. 左侧选择 Build Android APK

  3. 点右侧 Run workflow,再确认运行。

  4. 等任务变绿,点进该次运行。

  5. 页面底部 Artifacts 下载 yummy-health-sync-debug

  6. 解压后把 app-debug.apk 安装到手机。

仓库中已包含 .github/workflows/build-apk.yml,不需要 Gradle Wrapper。

用 Android Studio

  1. 用 Android Studio 打开 android-sync

  2. 等 Gradle 同步完成,连接手机并运行 app

  3. 在应用里填:

    • Zeabur 地址:https://你的域名

    • SYNC_TOKEN:与 Zeabur环境变量完全一致

  4. 点“授权并同步最近 14 天”,在系统 Health Connect 页面允许需要的数据类型。

目前是手动同步,便于先验证数据是否完整;确认稳定后再加 WorkManager 定时后台同步, 避免手机省电策略导致“看似成功、实际没更新”。

如果华为数据没有出现在 Health Connect:

  • 先确认华为运动健康到 Health Connect 的共享开关;

  • 确认 Health Connect 中“应用权限/数据和访问权限”能看见对应记录;

  • 华为运动健康和同步器都允许后台运行;

  • 第一次可先只同步 1–14 天,避免记录量太大被手机杀后台。

3. 连接 ChatGPT

ChatGPT 需要远程 HTTPS MCP;本项目地址是:

https://你的域名/mcp

在 ChatGPT 的 Developer mode / Apps 中创建自定义 MCP:

  1. 填上面的 MCP 地址。

  2. 选择 OAuth。

  3. 扫描工具。

  4. 浏览器会打开本项目的授权页,输入 APP_PASSWORD

  5. 授权后应扫描到 5 个只读工具。

服务端会动态接受 ChatGPT 提供的 HTTPS callback,因此没有写死 Claude callback。 OAuth metadata:

/.well-known/oauth-protected-resource/mcp
/.well-known/oauth-authorization-server

4. 华为运动健康直连

华为官方允许应用在用户授权后读取华为运动健康数据,但需要:

  1. 注册 HUAWEI Developer;

  2. 在 AppGallery Connect 创建 Android 应用;

  3. 固定包名(当前为 love.yummy.healthsync);

  4. 配置签名证书指纹;

  5. 申请 Health Service Kit 和所需读取 scopes;

  6. 下载 agconnect-services.json

  7. 审核通过后补全 HuaweiHealthSource

基础数据可供个人开发者申请;部分高级健康数据只开放企业开发者。测试 scopes 也需要 华为审核,所以 Health Connect 是今天就能运行的入口,华为直连作为无缝升级路径。

5. 本地测试

python -m venv .venv
.venv/bin/pip install -r requirements.txt pytest
PYTHONPATH=. .venv/bin/pytest -q

测试覆盖 SQLite 往返、动态客户端注册、OAuth PKCE、refresh token、MCP 初始化与工具扫描。

隐私边界

  • MCP 工具全部只读,不提供写回或删除手机健康记录的能力。

  • ChatGPT token 与手机同步 token 分离。

  • 原始数据只保存在你的 Zeabur 持久卷。

  • 这套工具用于陪伴和趋势观察,不把输出包装成医疗诊断。

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/yummy520730/health-connect-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server