libre-mcp
Provides read-only access to FreeStyle Libre glucose data through Abbott's LibreLinkUp and LibreView CSV import, enabling current glucose readings, historical curves, time-in-range statistics, lows/highs, and sensor history.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@libre-mcpHow much time was I in range this past week?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
libre-mcp
Your FreeStyle Libre glucose, for Claude. A read-only MCP server that lets Claude (and, in the hosted mode, ChatGPT and Mistral Vibe) answer questions about your sensor glucose: the current value, the curve of any period, time in range, the typical day, lows and highs, and every sensor you wore. Next to a Garmin MCP server, glucose and training can be put side by side.
You: How was my glucose during Sunday's long run?
You: How much time was I in range last month?
You: Are there recurring lows at night?
You: How long did my last sensors actually last?It never writes to LibreLinkUp. Every tool is read-only.
Not a medical device. Never base a treatment decision on it.
Quick start: on your own computer
The standalone mode is for one person: Claude Code or Claude Desktop starts the server on your machine, and it reads LibreLinkUp with your own session. No server, no accounts. You need Python 3.12 or newer, uv, and a LibreLinkUp follower account the person with the sensor shares their glucose with.
uv tool install git+https://github.com/mskerwiderski/MCPServerFreeStyleLibre
libre-mcp login # follower e-mail and password
claude mcp add --scope user libre -- libre-mcp stdioThen ask Claude "What is my glucose right now?". Claude Desktop, collecting the history, where things are stored, removing it again: docs/standalone.md.
Related MCP server: Freestyle Libre MCP Server
Hosted: many users, any AI client
The same tools also run as a remote MCP server (an HTTP app in a container) with its own OAuth 2.1 authorization server, so claude.ai (browser and phone), ChatGPT and Mistral Vibe can add it as a connector. It is multi-tenant: each user's connector only ever sees that user's glucose. Each user has an account page with live statistics, the sensor history, a LibreView CSV import and settings.
Users sign in through MyAuth, the author's self-hosted login service. It decides who may use the server and holds the LibreLinkUp connections. MyAuth is not published, so the hosted mode will not run without it (or a service answering the same few endpoints, listed in docs/hosted.md). It is documented here for transparency and for the author's own instance; for yourself, use the standalone mode above.
Documentation
Guide | What is in it |
| |
Standalone and hosted, claude.ai, Claude Code, troubleshooting | |
Hosted only: developer mode, custom connector, troubleshooting | |
Hosted only: custom MCP connector, OAuth, troubleshooting | |
Follower account, connecting LibreLinkUp in MyAuth, CSV import, settings | |
What to ask, what comes back, what the numbers mean | |
Every tool, its parameters and an example response | |
Requirements, configuration, reverse proxy, container, collector | |
Design decisions: collector, sensors, statistics, tenancy |
Where the data comes from
Abbott offers no API to individuals. The server reads through LibreLinkUp, Abbott's app for followers (family members who watch someone's glucose) - the same unofficial interface Nightscout and other Libre tools use. It only ever shows the last 12 hours. So the server keeps its own history: it asks LibreLinkUp regularly (every minute by default) and stores what is new.
Standalone: it collects while Claude runs it;
libre-mcp collectdoes one round for a scheduled job, so the history has no gaps.Hosted: it collects all the time, for every connected user, as often as each user chose (1 to 60 minutes). Older readings come in once through the CSV export from LibreView, uploaded on the account page.
Sensors
Every reading belongs to a sensor, and the server keeps the history of all sensors: number, serial number, start, last reading, days worn, and what it measured (coverage, mean, time in range, share below 70 mg/dL). Neither LibreLinkUp nor the CSV names the sensor per reading, but sensors run one after the other: a reading belongs to the sensor that started last before it.
Reported: LibreLinkUp names the current sensor with its serial number and exact start at every poll, so every sensor worn while the collector runs is known.
Estimated: older sensors (CSV import, history from before) are recognised by the gap of at least an hour each change leaves (the warm-up). Start = first reading after the gap minus an hour, no serial number. A gap while a reported sensor was running counts as lost data, not as a change.
Every answer with readings names the sensors behind them, and the period tools
take sensor to stay with one.
Good to know
Abbott can change the interface at any time (last time: October 2025). Then collecting stops until the client is adapted; gaps of up to 12 hours fill themselves afterwards. Use this for your own glucose and for people who share theirs with you.
Responses are deliberately small: long periods come back condensed into time buckets, and statistics replace raw series where they answer the question. Ranges follow the international consensus on CGM reporting (<54, 54-69, 70-180, 181-250, >250 mg/dL). Values are always mg/dL in the tools.
Development
uv sync --extra devuv run pytest122 tests, no network access required - LibreLinkUp and MyAuth are faked, and
all glucose values in the tests are made up (no real exports, *.csv is
ignored). See docs/architecture.md for how the pieces
fit together. Some folders are vendored copies of shared building blocks and
are not edited here; the architecture document says which.
Disclaimer
Not a medical device. The values come from an unofficial interface and can be late, missing or wrong; never base a treatment decision on them.
An independent, unofficial project, not affiliated with or endorsed by Abbott. FreeStyle Libre, LibreLinkUp and LibreView are trademarks of Abbott. The LibreLinkUp interface is undocumented and may change or stop working at any time.
License
MIT. See LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Glucose readings from your LibreLink Up sensor: graph, logbook, stats and summaries (read-only). Sec
- NightscoutOAuthai.b77
Your Nightscout glucose data, conversational.
Your own SLATE health data in your AI assistant: read, trend, plan and log. Never suggests a dose.
- E-LabusOAuthcom.e-labus
Your lab results and health record in Claude: trends, retests, meds, conditions and symptoms.
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables access to FreeStyle Libre glucose data through Claude Desktop, providing current readings, historical data, statistics, and trend analysis from LibreLinkUp accounts with secure credential storage.101MIT
- AlicenseAqualityCmaintenanceEnables Claude to access Abbott Freestyle Libre CGM data from multiple providers (LibreView, Terra, Thryve) to retrieve current glucose, history, and summaries via natural language.42MIT
- AlicenseAqualityDmaintenanceEnables Claude Desktop to securely access FreeStyle LibreLink continuous glucose monitoring data, providing real-time readings, historical analysis, and health insights through natural language queries.815MIT
- AlicenseAqualityAmaintenanceMCP server that reads glucose data from a FreeStyle sensor via the LibreLinkUp API, providing current glucose and history with explicit coverage and gaps.243 npmMIT