关于 mcp-freestyle
mcp-freestyle 是只读 MCP 服务,通过 LibreLinkUp 获取 FreeStyle 血糖传感器数据。它向 MCP 客户端提供最新读数和最多 12 小时的历史,并标明实际覆盖范围与数据缺口;仅供信息参考,不能用于治疗决策。
主要功能
- 01读取最新血糖测量值及时间
- 02查询最多 12 小时的读数历史
- 03提供目标范围内时间信息
- 04标明实际数据范围与采集缺口
- 05通过操作系统密钥链保存密码
适用场景
- 01查看最近一次血糖测量及其时间
- 02检查近期读数和目标范围内时间
MCP 相关
向 MCP 客户端提供 get_current_glucose 和 get_glucose_history 工具。数据经 LibreLinkUp 获取;此服务只读,且不属于医疗设备。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y mcp-freestyleLIBRELINKUP_EMAILLibreLinkUp *follower* account e-mail — not the primary LibreLink account. The password is stored once via `npx mcp-freestyle-login` in the OS keychain, so it never appears in this configuration.LIBRELINKUP_PASSWORD密钥Overrides the OS keychain. Intended for CI and one-off runs; prefer `mcp-freestyle-login` so no credential lands in a config file.LIBRELINKUP_VERSIONPinned LibreLinkUp client version sent as the `version` header. Upstream rejects stale values — set this to the current LibreLinkUp app version if requests start failing.LIBRELINKUP_PRODUCTClient product identifier sent as the `product` header.LIBRELINKUP_BASE_URLEntry point for authentication. The regional host is discovered at login and is never configured here.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
2收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| unit | enum | 否 | 返回值的单位。存储单位始终为 mg/dL;此项仅影响显示。mg/dL | mmol/L |
详细介绍
mcp-freestyle
一个从 FreeStyle 葡萄糖传感器读取数据的 Model Context Protocol 服务。
要求
此服务从 Abbott 的云端读取你的数据,因此只有在数据已上传至云端时才能使用。你需要满足以下所有条件:
- 使用手机上的 LibreLink 应用读取 FreeStyle 传感器。 如果你使用的是独立的 FreeStyle 读取器,数据不会持续上传,此服务也就无法提供帮助。
- 在 LibreLink 应用中设置 LibreLinkUp 共享,并共享给一个关注者账号。此服务将以关注者身份登录。
- Node.js ≥ 20,以及可正常工作的操作系统钥匙串(macOS Keychain、Windows Credential Manager,或 Linux 上的 libsecret)。
此服务使用 非官方 LibreLinkUp / LibreView API,该 API 与 Abbott 无关联,也未获得 Abbott 支持。API 可能随时停止工作,恕不另行通知。请参阅
docs/decisions/0002-data-source-librelinkup.md。
快速开始
1. 安装
npm install -g mcp-freestyle
或者,如果你想先阅读代码,也可以从克隆的仓库安装:
git clone https://github.com/lozit/mcp-freestyle.git && cd mcp-freestyle
npm install && npm run build
2. 登录一次
npm run login # from a clone
mcp-freestyle-login # if installed globally
系统会提示你输入 LibreLinkUp 关注者的电子邮件和密码。系统会通过实际身份验证来验证密码;如果密码错误,或者尚未设置共享,你现在就会知道,而不是等到第一次向 Claude 提问时才发现。密码随后会存储在你的操作系统钥匙串中,绝不会存入配置文件。
上游签发的令牌不会被存储。令牌有效期约为 180 天,且无法撤销;保留令牌反而会带来更大的风险,因此此服务会重新进行身份验证。
最后,login 会询问你是否要一步完成将此服务接入 Claude Desktop。
3. 接入 Claude
Claude Desktop——一条命令:
mcp-freestyle-install
此命令会使用绝对路径,将条目合并到 ~/Library/Application Support/Claude/claude_desktop_config.json(Windows 上为 %APPDATA%\Claude\…),先备份任何现有配置,并保留其他服务不变。如果配置无法解析,则拒绝覆盖。完全退出 Claude Desktop(⌘Q)后再重新启动。
Claude Code:
mcp-freestyle-install code # prints the exact `claude mcp add` command
写入的条目仅包含你的电子邮件——这是标识符,而非机密。这正是使用钥匙串的原因:配置文件即使被同步、备份或粘贴到错误报告中,也不会包含凭据。
要移除存储的密码:mcp-freestyle-logout。
配置
| 变量 | 必需 | 默认值 | 说明 |
|---|---|---|---|
LIBRELINKUP_EMAIL | 是 | — | 你的 LibreLinkUp 关注者账号,不是主要的 LibreLink 账号 |
LIBRELINKUP_PASSWORD | 否 | keychain | 覆盖钥匙串中的密码。用于 CI 或临时运行,不是预期的使用方式 |
LIBRELINKUP_VERSION | 否 | 4.16.0 | 固定的客户端版本。上游会拒绝过时的值;如果请求开始失败,请将其设为当前 LibreLinkUp 应用版本 |
LIBRELINKUP_PRODUCT | 否 | llu.android | |
LIBRELINKUP_BASE_URL | 否 | https://api.libreview.io | 仅为入口;登录时会发现区域主机 |
工具
| 工具 | 返回内容 |
|---|---|
get_current_glucose | 最近一次测量值及其实际测量时间,以及账户自身的目标范围。绝不会将其描述为实时的“当前”读数。 |
get_glucose_history | 过去 N 小时内的读数(最多 12 小时)及目标范围内时间。始终说明数据实际覆盖的时间范围;若上游返回的数据少于请求数量,则标记 truncated。会列出数据收集间断,绝不会对间断进行插值。 |
上游仅保留约 12 小时的详细数据。更长时间范围属于 后续里程碑,而非这些工具的限制。
开发
npm test # Node's built-in test runner — no build step needed
npm run typecheck # strict TypeScript, the project's only lint gate
npm run build # emits dist/
使用方法
连接后,用日常语言提问:
我现在的血糖是多少?
我今天的血糖在目标范围内的时间有多长?
显示过去 6 小时的数据。
回答会标明每条读数的实际测量时间、数据实际覆盖的时间范围,以及任何数据收集间断,因此询问“今天”的情况时,会说明它能看到今天的哪些时段。如果你请求的数据超出上游所保留的范围,它会告诉你实际获取到的数据,而不是悄悄基于更少的数据作答。
不能替代你的读取器或应用。 这仅供参考,请参阅上方的免责声明。
项目结构
README.md— 本文件CLAUDE.md— Claude Code 的说明docs/— 项目文档(架构、决策、经验)intake/— 上游备注和原始规范docs/media/— 视觉素材
文档
- 愿景:
docs/VISION.md - 架构:
docs/ARCHITECTURE.md - 决策:
docs/decisions/ - 经验:
docs/LEARNINGS.md - 术语表:
docs/GLOSSARY.md - 数据模型:
docs/DATA_MODEL.md - 安全与隐私:
docs/SECURITY.md - 路线图:
docs/ROADMAP.md
免责声明
非医疗器械。 本项目仅供参考。请勿使用其输出作出任何治疗决策(剂量、校正、治疗调整)。请始终以官方读取器/应用和医疗护理团队提供的信息为准。
贡献
欢迎提交问题和拉取请求——尤其欢迎能协助整理 TrendArrow 值映射(见下文),或遇到本项目尚未见过的 LibreLinkUp 区域或负载结构的人。
npm test # Node's built-in runner, no network — `fetch` is injectable
npm run typecheck # strict TypeScript, the project's only lint gate
有一条不可妥协的规则:绝不能提交真实的血糖读数、传感器序列号、账户标识符或凭据——无论是在测试样例、问题帖还是截图中都不行。测试仅使用合成样例。即使没有附带姓名,与时间戳配对的数值也属于健康测量数据。
设计决策记录在 docs/decisions/ 中,已验证的上游契约见 docs/ARCHITECTURE.md。更改读数的获取或汇总方式前,请先阅读这些文档——其中记录了若干不明显的上游行为,发现这些行为曾耗费大量实际调试时间。
已知缺口
TrendArrow尚未转换。 上游发送一个整数;其映射未有文档记录,目前只观察到一个值。该值会以raw_trend_arrow的形式原样传递,而不是进行猜测——自信地给出错误箭头,不如不显示。- 历史数据最多约 12 小时。 上游会忽略任何更长时间范围的请求。长期计划见 ADR 0003。
安全
请将漏洞私下报告至 [email protected]——详见
docs/SECURITY.md。
许可证
MIT © Guillaume Ferrari
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。