关于 Apple Health
Apple Health MCP 是一个本地运行的 MCP 服务,可使用 SQL 和 DuckDB 查询 Apple Health 的 CSV 导出数据。适合希望分析睡眠、运动和心脏数据且重视数据留在本地的用户。
主要功能
- 01读取 Simple Health Export CSV 导出文件
- 02通过 DuckDB 执行 SELECT 类分析查询
- 03提供表结构与样例数据探索
- 04生成每周、每月或自定义健康摘要
- 05限制数据库文件访问范围并禁用网络
适用场景
- 01查询睡眠、运动和心率等历史健康数据
- 02生成每周或每月的健康数据摘要
- 03通过 SQL 对健康记录进行自定义分析
MCP 相关
该项目是 MCP 服务,通过 stdio 传输向 MCP 客户端提供 health_schema、health_query 和 health_report 三个工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @neiltron/apple-health-mcpHEALTH_DATA_DIRPath to the Apple Health CSV export directoryMAX_MEMORY_MBMaximum memory usage in megabytesCACHE_SIZEMaximum number of cached query results本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Apple Health MCP 服务
通过 MCP 客户端使用 SQL 和 DuckDB 查询 Apple Health 数据。该服务在本地运行,按需读取 CSV 导出文件,并提供用于发现架构、分析查询和生成健康摘要的工具。
要求
- Node.js 22 或更高版本
- 使用 Simple Health Export CSV 创建的 Apple Health CSV 导出文件
目前不支持 Apple Health 原生的 export.xml 格式。
配置 MCP 客户端
对于 Claude Desktop,将以下内容添加到
~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"apple-health": {
"command": "npx",
"args": ["-y", "@neiltron/apple-health-mcp"],
"env": {
"HEALTH_DATA_DIR": "/path/to/your/unzipped/health-export"
}
}
}
}
更改配置后,重启客户端。其他 MCP 客户端也可以使用相同的命令、参数、环境和 stdio 传输方式。
环境变量
| 变量 | 必填 | 默认值 | 用途 |
|---|---|---|---|
HEALTH_DATA_DIR | 是 | — | 包含导出 CSV 文件的目录 |
MAX_MEMORY_MB | 否 | 2048 | DuckDB 内存限制,单位为 MB |
CACHE_SIZE | 否 | 100 | 缓存查询结果的最大数量 |
导出健康数据
- 在 iPhone 上安装并打开 Simple Health Export CSV。
- 选择 All,并选择要导出的时间范围。
- 将压缩包传输到运行 MCP 客户端的计算机。
- 解压文件,并将
HEALTH_DATA_DIR设置为解压后的目录。
该服务会就地读取文件。它不会上传导出文件,也不会发起网络请求,不过返回给 MCP 客户端的查询结果可能会发送给该客户端配置的模型提供商。
工具
| 工具 | 用途 |
|---|---|
health_schema | 查看表名、列、单位和示例行 |
health_query | 运行一条 DuckDB SELECT 系列分析语句,并以 JSON、CSV 或摘要形式输出 |
health_report | 生成每周、每月或自定义健康摘要 |
请从 health_schema 开始;表名取决于导出文件中的内容。
有关数据模型和可用示例,请参阅查询 Apple Health 数据。
health_query 接受一条 DuckDB 分析语句。有关支持的语句和受限操作,请参阅查询防护措施。
查询防护措施
该服务将 DuckDB 的文件访问限制在 HEALTH_DATA_DIR 范围内。它还会禁用网络访问和临时磁盘存储,并锁定数据库设置。数据目录保持可读写状态,以便导入器读取 CSV 文件。
这些控制措施可减少生成的 SQL 带来意外副作用的风险,但无法隔离进程。请通过本地 stdio MCP 客户端运行该服务。不要将其暴露给不受信任的网络客户端。如果该服务必须接受不受信任的 SQL,请使用进程或操作系统隔离。
历史记录和记忆
首次需要查询某张表时,会加载该表的完整 CSV 历史记录。 没有日期范围限制,因此查询可以追溯到导出数据的最早时间。
由于每个工具都可以访问全部已配置的历史数据,因此只应从你信任其处理这些数据的 MCP 客户端启动此服务。
已加载的表会保存在内存中,DuckDB 使用上文所述的 MAX_MEMORY_MB 限制。大约 1 GiB 足以容纳两年的多表导出数据,因此默认的 2048MB 留有余量;导出数据量更大时,请提高 MAX_MEMORY_MB。服务绝不会将健康记录溢写到磁盘上的临时目录,因此,如果导出数据超出内存限制,会直接报错。
其他当前限制:
- 仅支持 Simple Health Export CSV 布局。
- DuckDB 数据库驻留在内存中,并会在每个服务进程启动时重建,因此每次启动都会重新加载 CSV 文件。持久化增量导入是未来计划,目前尚未实现。
- 设备重叠可能导致测量记录看起来重复;查询应在适当情况下考虑
sourceName。 - 健康报告仅总结记录的数据,不构成医疗建议。
开发
git clone https://github.com/neiltron/apple-health-mcp.git
cd apple-health-mcp
bun install
npm test
npm run typecheck
npm run build
有关代码布局、数据生命周期和实现约束,请参阅架构。 有关发布和恢复步骤,请参阅发布流程。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。