mcpField
H
health4ai

health4ai

本地服务
health4.ai健康医疗51 天前更新

关于 health4ai

health4ai 是一款 iOS 应用和本地 MCP 服务,可通过 AI 客户端查询 Apple Health 数据。数据同步到用户自有的 Supabase 项目,不经过 health4.ai 的基础设施。

主要功能

  1. 01HealthKit 后台同步
  2. 02数据存储在自有 Supabase 项目
  3. 03健康摘要、睡眠和 HRV 查询
  4. 04锻炼与指标历史查询
  5. 05恢复及训练指导摘要

适用场景

  1. 01回顾每周睡眠与恢复情况
  2. 02检查 HRV 和锻炼趋势
  3. 03比较不同日期范围的指标

MCP 相关

本地 MCP 服务提供健康摘要、睡眠、HRV、锻炼、指标、趋势和指导工具。它可连接 Claude、Cursor 和 Ollama 等 MCP 客户端。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

health4.ai — Apple 健康 × AI

health4.ai 标志

用日常语言向 AI 询问睡眠、HRV、恢复情况和健身状态。
免费 iOS 应用 · 使用你自己的数据库 · 兼容任何 MCP 客户端

在 App Store 下载 health4ai

网站 MIT 许可证 iOS 17+ Python 3.11+ FastMCP 你自己的 Supabase 项目


功能介绍

iPhone HealthKit → Your Supabase project → MCP server → Any AI

Apple 健康保存着你多年积累的生物特征数据——睡眠阶段、HRV、心率、锻炼、VO₂ max 以及 150 多种其他指标。health4.ai 通过专门打造的 MCP 工具,让 Claude、ChatGPT、Cursor、Ollama 或任何兼容 MCP 的客户端都能查询这些数据。

数据由你掌控。 数据会同步到由你创建并拥有的 Supabase 项目。health4.ai 不运行任何后端,也不会存储或访问你的健康数据。


项目缘起

问题health4.ai 的解决方案
Apple 没有 HealthKit 服务端 API——所有访问都需要设备上的应用原生 iOS 应用,使用 HKObserverQuery + BGTaskScheduler 在后台同步
Health Auto Export 仅支持在同一 WiFi 下使用数据存入 Postgres,可随时随地通过任何 AI 查询
claude.ai 的 Apple 健康连接器无法接入 Claude Code CLI 或 Cursor标准 MCP(stdio)——一段配置即可在任何地方使用
大多数解决方案都要求使用托管云服务使用你自己的 Supabase 项目——health4ai 不运行服务器

演示

演示视频即将推出。以下是典型对话示例:

You:     How was my recovery this week? Anything standing out?

Claude:  Your recovery this week was mixed but trending positive.
         • HRV averaged 58ms (Tue–Thu strong at 64–68ms; Monday low at 44ms after Saturday's long run)
         • Sleep averaged 7h 12m — Wednesday and Thursday were your best nights (7h 40m+)
         • Resting HR dropped from 54bpm Monday to 49bpm Friday — a good sign
         Recommendation: today looks like a solid day for a moderate-intensity session.

快速开始

health4ai 需要一个由你拥有的 Supabase 项目。应用使用 Supabase Auth 登录,并通过 Supabase Edge Function 写入数据,因此不支持纯 Postgres(Neon、本地 Docker 容器)作为后端。完整操作指南:docs/SETUP.md。

1. 创建数据库架构。 在 supabase.com 创建项目,打开 SQL 编辑器并运行 web/public/schema.sql(也可访问 https://health4.ai/schema.sql)。该文件由 supabase/bootstrap/ 生成:包含表、行级安全策略,以及禁止客户端直接访问的授权设置。请勿使用 supabase db push——编号迁移文件不适用于全新项目。

2. 部署 ingest 函数(需要 Supabase CLI):

git clone https://github.com/jefflitt1/health4ai.git
cd health4ai
supabase functions deploy healthkit-ingest --project-ref <your-project-ref> --no-verify-jwt

--no-verify-jwt 是有意设置的:函数会自行验证已登录用户的令牌,并且只会以该用户的 ID 写入数据。

3. 创建用户。 在控制面板中依次选择 Authentication → Users → add a user,并复制其 UID。应用会登录,不会注册。

然后设置 MCP 服务(在同一份检出代码中):

cp mcp-server/.env.example mcp-server/.env

编辑 mcp-server/.env:

DATABASE_URL=postgresql://...  # your project's pooler connection string (database password, not a key)
HEALTHKIT_USER_ID=...           # your Supabase Auth user's UID (see mcp-server/.env.example)

添加到你的 AI 客户端:

Claude Code / Claude Desktop
{
  "mcpServers": {
    "health4ai": {
      "command": "python",
      "args": ["/path/to/health4ai/mcp-server/main.py"],
      "env": {
        "DATABASE_URL": "postgresql://...",
        "HEALTHKIT_USER_ID": "<your auth user UID>"
      }
    }
  }
}
Cursor

使用同一代码块 → ~/.cursor/mcp.json

Ollama(本地模型)

与 mcphost 或 mcp-client-for-ollama 配合使用:

mcphost --model ollama/llama3.2 \
  --mcp-server "health4ai:python /path/to/health4ai/mcp-server/main.py"

模型在你的硬件上运行,MCP 服务在本地运行;健康数据从你自己的 Supabase 项目读取。

从 App Store 安装 iOS 应用,然后将其连接到该 Supabase 项目(Project URL + anon key),使用你创建的用户登录,并轻点 Start Sync。如需 TestFlight 测试版,请遵循测试人员隔离指南;切勿使用他人的后端或凭据。


MCP 工具

工具可查询内容
get_health_summary过去 N 天关键指标概览
get_sleep每晚睡眠细分,包含 REM、Deep、Core 阶段。每晚仅取一个数据来源:Oura > Apple Watch > Whoop > Garmin > Withings > 其他记录阶段数据最多的数据来源(包括 iPhone)
get_hrv_trend每日 HRV(SDNN),包含滚动比较和趋势
get_daily_snapshot某一特定日期记录的所有数据
get_workouts最近的锻炼,包含类型、时长、距离和卡路里
query_metric任意 HealthKit 指标类型的原始时间序列
get_long_term_trend多年间的月度汇总(原始数据 + 汇总层级)
get_coaching_brief恢复状态、睡眠质量(与 get_sleep 使用相同的每晚单一数据来源规则)、训练负荷、体能指标
search_records查找指标超过阈值的日期
get_metric_stats个人基线:最小值/最大值/平均值/百分位数
compare_periods比较两个日期范围内的某项指标
如果指标为空,请先查看 data_status,再判断其含义

iOS 不会告知应用某项 Health 权限已被拒绝。 对于你尚未分享的类型,系统会返回空结果,与某一天你确实什么都没做时的结果逐字节相同。HealthKit 的 API 无法区分这两种情况,因此,助手如果只读到一个 0,就会信誓旦旦地告诉你没有走过任何步。

因此,可能返回空结果的工具都会附带一个 data_status 区块:

  • never_recorded — 此指标从未为你生成过样本。对于步数、心率、活动能量或步行距离,如果数据正在分享,就不可能出现这种情况,因此几乎可以肯定并非如此。打开 健康 → 共享 → App → health4ai,开启该指标,然后从应用的“主页”选项卡重新运行导入。
  • empty_window — 你查询的时间范围内没有数据,但该指标在其他时间有数据。这是真实的数据缺口,不是权限问题。

这并非假设情形。作者自己的账户中,步数、心率、活动能量和步行距离在将近三个月内都被悄悄取消了共享,而其他所有指标仍正常同步,应用始终显示绿色的“Complete”。


架构

┌─────────────────────────────────────────────────────────────┐
│  iPhone                                                      │
│  HKObserverQuery + BGTaskScheduler                          │
│  → continuous background sync                               │
└──────────────────────────┬──────────────────────────────────┘
                           │ HTTPS → your healthkit-ingest Edge Function
                           ▼
┌─────────────────────────────────────────────────────────────┐
│  Your Supabase project (you own it)                         │
│  healthkit_metrics · healthkit_daily_summaries              │
│  row-level security on · no direct client access            │
└──────────────────────────┬──────────────────────────────────┘
                           │ Postgres connection (database password, from your machine)
                           ▼
┌─────────────────────────────────────────────────────────────┐
│  FastMCP server  (mcp-server/main.py)                       │
│  FastMCP tools · stdio transport                             │
└──────────────────────────┬──────────────────────────────────┘
                           │ MCP
                           ▼
              Claude · ChatGPT · Cursor · Ollama · any client

数据层级: 最近 30 天内的查询会返回原始样本。更早的日期会使用 healthkit_daily_summaries 中已有的预聚合行;如果没有,则在 Postgres 中根据原始样本按天聚合。因此,无论项目是否运行过汇总程序,结果都完整(在全新且可自托管的项目中,汇总程序从未运行过)。响应中包含一个 tier 区块,说明每个层级提供了多少天的数据。日历日期遵循 HEALTH4AI_TZ(默认为 UTC;在 mcp-server/.env 中设置)。


仓库结构

health4ai/
├── ios/                         # Swift/SwiftUI iOS app (iOS 17+)
│   └── Health4AI/               # HealthKit sync engine, auth, settings
├── mcp-server/
│   ├── main.py                  # FastMCP server entry point
│   ├── tools.py                 # MCP tool implementations
│   └── .env.example             # Required environment variables
├── web/
│   ├── public/schema.sql        # Generated from supabase/bootstrap (Supabase only)
│   └── src/                     # Astro marketing site
├── scripts/
│   ├── import_health_export.py  # One-time XML backfill from Apple Health export
│   └── summarize_historical.py  # Backfill daily summaries table
└── docs/
    └── SETUP.md                 # Detailed setup guide

隐私

你的健康数据会直接从 iPhone 发送到你自己的 Supabase 项目。health4.ai 从不接收、存储或访问这些数据。MCP 服务使用你自己的凭据在本地运行——你的数据不会经过我们的基础设施。

详情请参阅隐私政策。


贡献

采用 MIT 许可证。欢迎提交 PR。

适合入门的领域:增加指标聚合、支持通过 JWT/RLS 实现多用户、支持 Android,以及编写更多 MCP 客户端集成指南。

SQL 更改需要显式授权。 Supabase 不再自动授予 anon / authenticated / service_role 对新建 public 表的访问权限(适用于 2026-10-30 起创建的项目),因此,在 SQL 中明确允许哪些角色使用表之前,无法通过 Data API 访问该表。请从 scripts/migration-templates/public_table.sql 开始;供客户安装的表应放在 supabase/bootstrap/ 中(然后运行 scripts/build_schema_sql.sh)。scripts/lint-migration-grants.sh 会检查 web/public/schema.sql 和迁移目录;如果表没有授权,CI 将失败。旧编号迁移中的检查结果已固定在 scripts/migration-grants-baseline.txt 中。

许可证

MIT——参见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。