Skip to main content
Glama
jonnyhaynes

Freestyle Libre MCP Server

by jonnyhaynes
README.md
# Freestyle Libre MCP Server

An MCP (Model Context Protocol) server that gives Claude access to Abbott Freestyle Libre CGM (continuous glucose monitor) data.

## Supported providers

| Provider | Auth | Cost | Notes |
|---|---|---|---|
| **libreview** (default) | Email + password | Free | Unofficial LibreView/LibreLinkUp API |
| **terra** | API key | Paid | Terra API (tryterra.co) |
| **thryve** | API key + OAuth token | Paid | Thryve health platform |

## Quick start (LibreView — recommended)

The LibreLinkUp API is designed for **follower/carer accounts** — accounts that have been invited to view a patient's glucose data. You'll need two LibreView accounts:

1. Your **patient account** (the one linked to your sensor)
2. A **follower account** (a second account you invite via the LibreLinkUp app)

Use the follower account's credentials in the MCP config.

### 1. Install

```bash
npm install
npm run build
```

### 2. Configure Claude Desktop

Edit your Claude Desktop config file, using the full path to your Node.js binary (Node 18+ required). The config location depends on your OS:

| OS | Path |
|---|---|
| macOS | `~/Library/Application Support/Claude/claude_desktop_config.json` |
| Windows | `%APPDATA%\Claude\claude_desktop_config.json` |
| Linux | `~/.config/Claude/claude_desktop_config.json` |

```json
{
  "mcpServers": {
    "freestyle-libre": {
      "command": "/path/to/node",
      "args": ["/absolute/path/to/freestyle-libre/dist/index.js"],
      "env": {
        "LIBRE_PROVIDER": "libreview",
        "LIBRE_REGION": "EU",
        "LIBRE_EMAIL": "your-follower@email.com",
        "LIBRE_PASSWORD": "yourpassword"
      }
    }
  }
}
```

Replace the paths and credentials accordingly. The server auto-detects regional API endpoints (e.g. `eu2`) at login, so `LIBRE_REGION` just needs to be the base region for your account:

| Region | Value |
|---|---|
| Europe | `EU` (default) |
| United States | `US` |
| Australia | `AU` |
| Asia-Pacific | `AP` |
| Japan | `JP` |
| Germany | `DE` |
| Global | `global` |

### 3. Restart Claude Desktop

The server authenticates automatically on startup — no login step needed in the chat.

---

## Available tools

| Tool | Description |
|---|---|
| `get_connections` | List patient connections on the account |
| `get_current_glucose` | Fetch the latest glucose reading |
| `get_glucose_history` | Fetch historical readings (1–24 hours) |
| `get_glucose_summary` | 24-hour summary: TIR, avg, min/max, std dev |

### Example prompts

- *"What's my current glucose level?"*
- *"Show me my glucose history for the past 6 hours"*
- *"Give me a summary of my glucose control today"*
- *"Was I in range more than 70% of the time yesterday?"*

---

## Terra API setup

1. Sign up at [tryterra.co](https://tryterra.co) and create an application
2. Connect a LibreView account via the Terra Connect widget to get a `user_id`
3. Configure Claude Desktop:

```json
{
  "mcpServers": {
    "freestyle-libre": {
      "command": "/path/to/node",
      "args": ["/absolute/path/to/freestyle-libre/dist/index.js"],
      "env": {
        "LIBRE_PROVIDER": "terra",
        "TERRA_API_KEY": "your-api-key",
        "TERRA_DEV_ID": "your-dev-id"
      }
    }
  }
}
```

---

## Thryve API setup

1. Contact [thryve.health](https://thryve.health) for API access
2. Direct users through Thryve's OAuth flow to connect their LibreView account
3. Configure Claude Desktop:

```json
{
  "mcpServers": {
    "freestyle-libre": {
      "command": "/path/to/node",
      "args": ["/absolute/path/to/freestyle-libre/dist/index.js"],
      "env": {
        "LIBRE_PROVIDER": "thryve",
        "THRYVE_API_KEY": "your-api-key",
        "THRYVE_API_SECRET": "your-api-secret",
        "THRYVE_ACCESS_TOKEN": "user-oauth-access-token"
      }
    }
  }
}
```

---

## Development

```bash
npm run dev      # watch mode — recompiles on save
npm run build    # one-off compile
npm start        # run the compiled server
```

The server communicates over stdio, which is the standard transport for local MCP servers used by Claude Desktop.

---

## Disclaimer

The **libreview** provider uses a community-documented, reverse-engineered API that powers Abbott's LibreLinkUp app. It is not an official Abbott API and may change without notice. Use it responsibly and in accordance with Abbott's terms of service.

TDQS

A4.2/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: get_connections lists patient IDs, get_current_glucose returns a single latest reading, get_glucose_history returns a time-series, and get_glucose_summary provides aggregate stats. There is no overlap between these tools, and their descriptions make the boundaries explicit.

Naming Consistency5/5

All tool names follow a consistent get_<resource> pattern: get_connections, get_current_glucose, get_glucose_history, get_glucose_summary. The verbs are uniform and the nouns are descriptive, making the naming predictable and easy to navigate.

Tool Count5/5

Four tools is well-scoped for a focused glucose monitoring server, covering the essential read operations without unnecessary bloat. Each tool earns its place, and the count is far below the threshold where confusion would arise.

Completeness4/5

The tool surface covers the core glucose data retrieval operations (list patients, current, history, summary) and meets the apparent purpose. A minor gap is the lack of patient metadata beyond IDs, which would require an additional tool to fully contextualize the data, but this does not severely hinder the primary workflow.

Maintenance

ActivityStale
ResponsivenessNo issues