关于 wellness-cgm-mcp
wellness-cgm-mcp 是一款本地优先服务,可向 AI Agent 提供连续血糖监测数据。它支持 Dexcom 和通过 LibreLink Up 接入的 FreeStyle Libre;配置提供方前也可使用模拟数据。
主要功能
- 01读取 Dexcom 和 Libre 血糖数据
- 02汇总血糖及目标范围内时间指标
- 03分析餐后反应并检测低血糖
- 04报告请求时间范围的实际覆盖情况
- 05无需凭据即可使用模拟数据
适用场景
- 01查看近期血糖读数和趋势
- 02对照进餐时间与血糖反应
- 03用模拟读数搭建 Agent 工作流原型
- 04解读指标前核实实际数据覆盖范围
MCP 相关
该 MCP 服务通过 stdio 或可选的 HTTP 提供 19 种 CGM 工具,包括血糖读数、汇总和餐后反应分析。凭据保存在环境变量中,出站请求仅发送至所选 CGM 提供方。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
19收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| client | enum | 否 | claude | codex | cursor | windsurf | hermes | openclaw | generic |
详细介绍
Wellness CGM MCP
面向 AI Agent 的本地优先连续血糖监测仪 MCP。
Dexcom Developer API。Levels 平替方案,Agent 优先,$0。
🩸 为什么要做这个:Levels 每月收费 $199,提供的功能恰好就是这些——读取你的 CGM 数据、与餐食关联分析、标记血糖飙升。wellness-cgm-mcp 用免费的本地优先 MCP 实现了同样的功能。Stelo OTC + Dexcom Developer API + 你的 Agent + wellness-nourish = 完整的代谢闭环。
⚡ 一键安装 — 选择你的运行环境:
- Delx Wellness for Hermes:
npx -y delx-wellness-hermes setup- Delx Wellness for OpenClaw:
npx -y delx-wellness-openclaw setup
HTTP(v2 无状态)
默认使用 stdio。可选的 Streamable HTTP — 无会话 ID,返回 JSON 响应,仅限环回地址:
npx -y wellness-cgm-mcp --http
# GET http://127.0.0.1:3000/health
# POST http://127.0.0.1:3000/mcp (sessionless)
环境变量:WELLNESS_CGM_HOST、WELLNESS_CGM_PORT、WELLNESS_CGM_TRANSPORT=http。
概述
本地 MCP 服务,向任何兼容 MCP 的 Agent 提供 CGM 数据(未配置时提供合成模拟数据)。支持两个真实数据后端:Dexcom(Developer API,沙盒和生产环境)以及通过 LibreLink Up 接入的 FreeStyle Libre(非处方传感器 — Libre 2 / Libre 3)。通过 CGM_PROVIDER 选择后端;如果只设置了 Libre 凭据,则会自动检测并使用 Libre。两者都使用同一套 ADA 目标范围内时间 / GMI / 低血糖 / 餐后反应引擎。
60 秒快速体验(模拟模式,无需设置)
npx -y wellness-cgm-mcp doctor # see env / mode
npx -y wellness-cgm-mcp status
# In Claude Desktop / Cursor / etc., add:
# {
# "mcpServers": {
# "wellness-cgm": {
# "command": "npx",
# "args": ["-y", "wellness-cgm-mcp"]
# }
# }
# }
现在 Agent 已拥有 10 个 CGM 工具。没有 Dexcom 令牌时,每个工具都会返回标记为 mock: true 的合成读数,非常适合原型开发。
实时配置(Dexcom Developer)
# 1. Sign up at https://developer.dexcom.com (sandbox is free)
# 2. Create an app, register your redirect URI
export DEXCOM_ENV=sandbox
export DEXCOM_CLIENT_ID=...
export DEXCOM_CLIENT_SECRET=...
export DEXCOM_REDIRECT_URI=https://your.callback/redirect
# 3. Get the OAuth URL, open it, grant access, copy the code from the redirect
npx -y wellness-cgm-mcp authorize
# 4. Swap code for tokens
npx -y wellness-cgm-mcp exchange <auth_code_from_redirect>
# 5. Set DEXCOM_ACCESS_TOKEN to the access_token, restart the MCP — flips from mock to live.
实时设置(FreeStyle Libre — 非处方传感器)
无需开发者计划,也无需构建应用——只需使用你在 LibreLinkUp 关注者应用中使用的同一组电子邮件地址和密码(OTC Libre 2 / Libre 3 传感器均可使用)。在 LibreLink 应用中分享读数;在 LibreLinkUp 应用中接受邀请。然后:
export CGM_PROVIDER=libre # or just set the creds below and let it auto-detect
export [email protected]
export LIBRELINKUP_PASSWORD=...
# Optional: region shard if you're not on EU/global, and a pinned sensor:
export LIBRELINKUP_REGION=us # eu (default) | us | de | fr | au | jp ...
# export LIBRELINKUP_PATIENT_ID=<id> # only if you follow more than one sensor
# Verify credentials + list the sensor(s) you follow (never prints the token):
npx -y wellness-cgm-mcp libre-login
登录后,每个血糖工具(cgm_glucose_now、cgm_daily_summary、cgm_time_in_range、cgm_meal_response、cgm_hypo_events,等等)都会读取 Libre 数据,并返回相同的 ADA TIR / GMI / 低血糖 / 餐后反应指标——每个响应都包含 provider 字段,让你始终知道数据来源。没有任何凭据时,所有内容都会返回合成的 mock: true 数据。
Libre 历史数据限制:每次读取约 12 小时
LibreLink Up 的图表端点不接受开始/结束参数——它始终返回自身固定的、约 12 小时的向前时间窗口。请求 24 小时或 72 小时并不会扩大窗口,因此 Libre 数据中根本不存在那些额外时长的数据。
因此,每个带时间窗口的数据负载都会报告实际覆盖的范围:
// cgm_daily_summary({ hours: 72 }) on live Libre
{
"window_hours": 72, // what you asked for
"hours_covered": 12, // what the numbers below are ACTUALLY computed over
"observed_window": { "start": "…", "end": "…", "hours": 12 },
"window_truncated_by_provider": true,
"notes": ["LibreLink Up returns ~12h of graph data per read and ignores wider spans; requested 72h, covered 12h. …"]
}
请读取 hours_covered,而不是请求的 hours / window_hours。基于 12 小时数据计算的 GMI(估算 A1C)、CV 或目标范围内时间,并不是 3 天的结果。多日指标请使用 Dexcom,其 v3 API 接受明确的开始/结束时间,并会遵照请求。Mock 模式会合成完整的请求时间跨度,因此不会被截断。
这也适用于接受明确 from / to 参数的 cgm_hypo_events:“没有低血糖事件”这一说法仅适用于 hours_covered 所涵盖的范围。基于实时 Libre 读取来回答 3 天的问题,实际得到的是 12 小时的答案;数据负载会通过 hours_covered、observed_window.hours、window_truncated_by_provider 和 notes 说明这一点。(events_per_day 无论哪种情况都可靠——其分母是实际观测时长,而非请求时长——但围绕它的时间范围说明并非如此。)
window_truncated_by_provider 表示结构限制,而非实际情况
它回答的是*“此服务提供方能否覆盖如此宽的时间跨度?”,而不是“这次读取是否恰好返回了较短的范围?”*。例如,传感器刚安装两小时,调用 cgm_daily_summary({ hours: 12 }) 时会返回 hours_covered: 2、window_truncated_by_provider: false 和空的 notes,因为一切正常,在这种情况下发出警告会造成误报。这是有意设计的:
notes为空表示“未触及已知的服务提供方上限”,而不是“已完整覆盖整个时间窗口”。hours_covered是唯一说明实际时间跨度的数值——报告任何时间窗口前,请将它与hours_requested进行比较。
工具(19)
| 工具 | 用途 |
|---|---|
cgm_agent_manifest | 运行时约定 |
cgm_capabilities | 服务提供方、指标、隐私模式 |
cgm_connection_status | env、凭据、模式(实时或 mock) |
cgm_privacy_audit | 本地存储 + 出站目的地 |
cgm_data_inventory | 指标目录 + TIR 范围 + GMI 公式 |
cgm_glucose_now | 最新 EGV + 趋势 |
cgm_glucose_window | 过去 N 小时的所有 EGV(+ hours_covered — 参见 Libre 约 12 小时的限制) |
cgm_daily_summary | 平均值 / GMI / CV / 2 种 TIR 概况——基于 hours_covered,而非请求的时间窗口 |
cgm_meal_response | 基线 → 峰值 → 回落 + 区间 |
cgm_authorize_url | Dexcom OAuth URL 构建器 |
cgm_hypo_events | 低血糖事件检测(ADA 1 级 < 70,2 级 < 54)——“无事件”仅适用于 hours_covered |
cgm_libre_status | FreeStyle Libre(LibreLink Up)配置 + 区域 + 模式 — v0.4 |
cgm_libre_login | 登录 LibreLink Up + 列出关注的传感器 — v0.4 |
为简洁起见,表格省略了共享的个人资料/引导/快速入门/演示辅助工具(
cgm_profile_get、cgm_profile_update、cgm_onboarding、cgm_quickstart、cgm_demo)——调用cgm_agent_manifest获取完整且始终最新的列表。
每份摘要都包含两种目标范围内时间配置
- 糖尿病(70-180 mg/dL)——ADA 针对糖尿病成年人的标准。
- 代谢健康(70-140 mg/dL)——Levels 风格,适用于非糖尿病用户。
Agent 会同时展示两者,供用户根据自身情况选择。
餐后反应区间
| 基线峰值 Δ | 区间 |
|---|---|
| < 30 mg/dL | 极佳 |
| 30-49 | 良好 |
| 50-79 | 中等 |
| ≥ 80 | 较差 |
结合 wellness-nourish,即可自动计算“我吃了什么 → 后来发生了什么”。
杀手级组合
wellness-nourish: meal at 13:15 (rice + chicken)
↓
wellness-cgm-mcp.cgm_meal_response(meal_time)
↓
{ peak: 167, peak_delta: 72, band: "moderate", peak_time_minutes: 45 }
↓
whoop-mcp.recovery: 67%
↓
Agent: "That meal hit a moderate spike (peak +72 mg/dL at 45 min)
AND recovery is borderline. Try protein-first next time, or
swap white rice for lentils — should drop the peak ~30 mg/dL."
Levels 每月为此收费 $199。现在,你可以免费使用这个本地优先的 MCP。
隐私
- ✅ 凭据仅保存在本地——
DEXCOM_ACCESS_TOKEN/LIBRELINKUP_*保存在环境变量中;LibreLink Up 身份验证令牌绝不会在工具输出中返回。 - ✅ 默认使用模拟模式——在配置数据源之前,每个工具都会返回带有
mock: true的模拟数据。 - ✅ 无第三方遥测——所有出站请求仅发送至你的 CGM 数据源(Dexcom,或 Libre 对应的 Abbott LibreLink Up API)。
运行 wellness-cgm-mcp doctor 进行检查。
路线图
- ✅ v0.4 — 通过 LibreLink Up 支持 FreeStyle Libre(非处方传感器)。已发布。
- 下一步 — 刷新令牌轮换。按餐食查看历史记录(哪些食物会让你的血糖飙升?)。阈值提醒(当血糖持续高于 X mg/dL 达 Y 分钟时通知 Agent)。与 wellness-nourish 实现跨餐食自动化。
本项目不提供什么
- 不提供医疗建议或诊断。
- 不适用于胰岛素/药物剂量决策——请遵从临床医生的建议。
- 与 Dexcom 或 Abbott 无关联。
📧 联系与支持
- 📨 [email protected] — 一般问题、集成帮助、合作洽谈
- 🐛 Bug 报告/功能请求 — GitHub Issues
- 🐦 动态 — X 上的 @delx369
- 🌐 网站 — wellness.delx.ai
许可证
MIT — 参见 LICENSE。
wellness-cgm-mcp 是独立的开源软件。Dexcom 和 FreeStyle Libre 是其各自所有者的商标。两家公司均未参与或认可本项目。
Skill 或 MCP
同一个软件包,两种接入方式。MCP 通过 stdio/HTTP 注册工具。当客户端不支持 MCP 时,skill 可通过 CLI 调用相同的工具:
npx -y wellness-cgm call cgm_connection_status --json '{}'
将 skill/SKILL.md 复制到你的 Agent 技能目录中。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。