Local MCP server for FreeStyle LibreLink glucose monitoring data
LibreLink MCP server demonstrates strong naming conventions and detailed parameter descriptions, placing it in the B (Good) range. All 8 tools start with action verbs and have clear, contextual descriptions (average ~140 chars per tool). Tool names are unambiguous (get_current_glucose vs get_glucose_history vs get_sensor_info are well-differentiated). However, several critical issues reduce the score: (1) Output schemas are not documented, tool descriptions explain what data is returned but JSON Schema output structures are missing from the Tool definitions; (2) Input parameters on data retrieval tools lack validation constraints (e.g., get_glucose_history accepts 'hours' as a number with no min/max bounds despite describing 1-720 range in description text, not as JSON Schema constraints); (3) Error handling guidance is minimal, tools lack recovery hints or actionable error messages; (4) Tool composition could be tighter, configure_credentials and configure_ranges should ideally return validation feedback. Strengths: all tool descriptions are between 100-250 characters (well within 10-1024 baseline), parameter descriptions are detailed and include examples (e.g., 'Common values: 7 (weekly report), 14 (two weeks)'), security is properly handled (credentials are not exposed as parameters, marked as WRITE risk), and the tools follow single-responsibility principle.
Set up or update your LibreLink account credentials for data access. Required before using any glucose reading tools. Credentials are stored securely on your local machine only.
Customize your target glucose range for personalized time-in-range calculations. Standard range is 70-180 mg/dL, but your healthcare provider may recommend different targets based on your individual needs.
Get the most recent glucose reading from your FreeStyle Libre sensor. Returns current glucose value in mg/dL, trend direction (rising/falling/stable), and whether the value is in target range. Use this for real-time glucose monitoring.
Retrieve historical glucose readings for analysis. Returns an array of timestamped glucose values. Useful for reviewing past glucose levels, identifying patterns, or checking overnight values. Default retrieves 24 hours of data.
Calculate comprehensive glucose statistics including average glucose, GMI (estimated A1C), time-in-range percentages, and variability metrics. Essential for diabetes management insights and identifying areas for improvement.
Output schemas are not documented in Tool definitions. While descriptions mention what data is returned (e.g., 'glucose value in mg/dL, trend direction, target range status'), there are no JSON Schema definitions for response objects. LLMs cannot infer downstream field names or types needed for planning chained calls.
Input parameter constraints are documented in description text but not in JSON Schema. For example, get_glucose_history describes 'hours: 1-720' in the description string rather than as 'minimum: 1, maximum: 720' in the schema. LLMs cannot reliably parse natural-language constraints and will not enforce bounds.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 66 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 51 | - | v1 |
Analyze glucose patterns including dawn phenomenon (early morning rise), meal responses, and overnight stability. Helps identify recurring patterns that may need attention or treatment adjustments.
Get information about your active FreeStyle Libre sensor including activation date, remaining lifetime, and connection status. Use this to check if sensor is working properly or needs replacement.
Test the connection to LibreLink servers and verify your credentials are working. Use this if you encounter errors or after updating credentials. Returns success/failure status.
Error handling lacks recovery guidance. The code contains a generic handleError() function that returns 'Error [code]: message' but does not guide the LLM on what to do next (retry, ask user, check setup, etc.). No distinction between retryable vs. fatal errors.
get_glucose_history, get_glucose_stats, and get_glucose_trends lack explicit required[] declarations in their inputSchema. While 'hours', 'days', and 'period' are optional (defaulting to 24h, 7d, weekly respectively), this is not formalized in the schema. Explicit defaults in the schema improve clarity.
No pagination or limit handling for get_glucose_history or get_glucose_stats. If a user has 2+ years of data, returning all values could exceed context limits. Baseline: pagination should cap results at 20-50 and offer a cursor.