mcpField
M
mcp-freestyle

mcp-freestyle

本地服务
github.com健康医疗010 周前更新

关于 mcp-freestyle

mcp-freestyle 是只读 MCP 服务,通过 LibreLinkUp 获取 FreeStyle 血糖传感器数据。它向 MCP 客户端提供最新读数和最多 12 小时的历史,并标明实际覆盖范围与数据缺口;仅供信息参考,不能用于治疗决策。

主要功能

  1. 01读取最新血糖测量值及时间
  2. 02查询最多 12 小时的读数历史
  3. 03提供目标范围内时间信息
  4. 04标明实际数据范围与采集缺口
  5. 05通过操作系统密钥链保存密码

适用场景

  1. 01查看最近一次血糖测量及其时间
  2. 02检查近期读数和目标范围内时间

MCP 相关

向 MCP 客户端提供 get_current_glucose 和 get_glucose_history 工具。数据经 LibreLinkUp 获取;此服务只读,且不属于医疗设备。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"lozit-mcp-freestyle": {
"command": "npx",
"args": [
"-y",
"mcp-freestyle"
],
"env": {
"LIBRELINKUP_EMAIL": "<LIBRELINKUP_EMAIL>",
"LIBRELINKUP_PASSWORD": "<LIBRELINKUP_PASSWORD>",
"LIBRELINKUP_VERSION": "<LIBRELINKUP_VERSION>",
"LIBRELINKUP_PRODUCT": "<LIBRELINKUP_PRODUCT>",
"LIBRELINKUP_BASE_URL": "<LIBRELINKUP_BASE_URL>"
}
}
}
}
启动命令npx -y mcp-freestyle
需要配置的环境变量
LIBRELINKUP_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+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmmcp-freestyle0.1.4

工具

2

收录的工具列表 · 更新于 2 周前

参数类型必填说明
unitenum否返回值的单位。存储单位始终为 mg/dL;此项仅影响显示。mg/dL | mmol/L

详细介绍

mcp-freestyle

CI npm License: MIT Node: ≥20 Not a medical device

一个从 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/ — 视觉素材

文档

免责声明

非医疗器械。 本项目仅供参考。请勿使用其输出作出任何治疗决策(剂量、校正、治疗调整)。请始终以官方读取器/应用和医疗护理团队提供的信息为准。

贡献

欢迎提交问题和拉取请求——尤其欢迎能协助整理 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

评论

支持 Markdown

第一次接触 MCP?

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

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