Garmin Health MCP Server
The Garmin Health MCP Server enables Claude to securely access, analyze, and visualize your Garmin Connect health and fitness data through natural language queries.
Health Metrics: Retrieve detailed sleep data (duration, stages, quality scores), Body Battery recovery levels (0-100), Heart Rate Variability (HRV) trends, resting/max/min heart rates, stress levels, and comprehensive workout data (type, duration, calories, distance, pace).
Data Analysis: Generate combined health summaries with averages across all metrics, query historical data with customizable date ranges (typically 7-30 days), and ask questions about your health patterns and trends.
Visualizations: Create interactive HTML charts and dashboards for sleep, Body Battery, HRV, activities, or comprehensive multi-metric overviews.
Account Access: View user profile information and connected Garmin device details.
Security: Uses local credential storage with direct connection to Garmin's official API, ensuring no third-party data sharing. Integrates seamlessly with Claude Desktop and Claude Code CLI.
Provides access to Garmin Connect health data including sleep analysis, Body Battery recovery metrics, HRV tracking, and activity summaries.
Click on "Install 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., "@Garmin Health MCP ServerSummarize my sleep and recovery trends from 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.
Garmin Health MCP Server
Access your Garmin Connect health data directly in Claude Desktop and Claude Code CLI
An MCP (Model Context Protocol) server that provides Claude with access to your Garmin wearable health data including sleep, recovery, HRV, workouts, and more.
Features
π Sleep Analysis: Hours, stages (light/deep/REM), quality scores
π Body Battery: Garmin's proprietary recovery metric (0-100)
β€οΈ HRV Tracking: Heart rate variability trends for recovery monitoring
π Activity Data: Workouts by type, calories, duration, pace
π Health Metrics: Resting heart rate, stress levels, VO2 max
π Interactive Charts: Generate beautiful HTML dashboards
π Secure: Credentials stored locally, connects only to Garmin's API
Related MCP server: garmin-mcp
Quick Start
Prerequisites
Claude Desktop or Claude Code CLI installed
Node.js 18+ and npm
Python 3.8+
Active Garmin Connect account with a connected device
Installation
# 1. Clone this repository
git clone https://github.com/eversonl/garmin-health-mcp-server.git
cd garmin-health-mcp-server
# 2. Install Node.js dependencies
npm install
# 3. Install Python dependencies
pip3 install garminconnect fitparse gpxpy
# Or on managed systems:
pip3 install --user garminconnect fitparse gpxpy
# 4. Create .env file with your Garmin credentials
cp .env.example .env
# Edit .env and add your GARMIN_EMAIL and GARMIN_PASSWORD
# 5. Authenticate with Garmin Connect
npm run authConfigure Claude Desktop
Edit your Claude Desktop configuration file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Add this MCP server configuration:
{
"mcpServers": {
"garmin-health": {
"command": "node",
"args": ["/absolute/path/to/garmin-health-mcp-server/index.js"],
"env": {
"GARMIN_EMAIL": "your-email@example.com",
"GARMIN_PASSWORD": "your-password"
}
}
}
}Important: Replace /absolute/path/to/garmin-health-mcp-server/ with the actual full path where you cloned this repo.
Restart Claude Desktop
Completely quit and restart Claude Desktop for the MCP server to load.
Using with Claude Code CLI
For Claude Code CLI users, this repository includes a .mcp.json configuration file that enables automatic MCP server loading.
Quick Setup for Claude Code
Set environment variables with your Garmin credentials:
# Windows PowerShell setx GARMIN_EMAIL "your-email@example.com" setx GARMIN_PASSWORD "your-password"# Linux/macOS export GARMIN_EMAIL="your-email@example.com" export GARMIN_PASSWORD="your-password"Authenticate with Garmin:
npm run authStart Claude Code from any directory:
claudeVerify the MCP server is loaded:
/mcpYou should see
garmin-healthlisted as connected.Start querying your health data:
"How did I sleep last night?"
"What's my body battery level today?"
π For detailed Claude Code setup instructions, see CLAUDE_CODE_SETUP.md.
Note: The .mcp.json file uses environment variable expansion for security. Update the args path if you installed the server in a different location.
Usage
Once configured, ask Claude questions like:
"How did I sleep last night?"
"What's my Body Battery looking like this week?"
"Show me my activities from the past month"
"Is my HRV improving?"
"Generate a health dashboard for the last 30 days"
Claude will use the MCP tools to fetch your Garmin data and provide insights.
Available Tools
The server exposes these tools to Claude:
Tool | Description |
| Sleep hours, stages, quality scores |
| Recovery metric (0-100) |
| Heart rate variability trends |
| Resting, max, min heart rate |
| Workout/exercise data |
| All-day stress tracking |
| Combined health overview |
| Account and device info |
| Create interactive HTML visualizations |
Troubleshooting
"MCP server not found"
Verify the path in
claude_desktop_config.jsonis absolute (starts with/orC:\)Check that
index.jsexists at that pathEnsure you ran
npm installin the repo directory
"Authentication failed"
Run
npm run authto refresh tokensCheck your credentials in the
.envfile or environment variablesTry logging into Garmin Connect website to verify your account
"Tools not appearing in Claude"
Completely quit Claude Desktop (don't just close the window)
Check Console.app (macOS) or Event Viewer (Windows) for MCP errors
Verify Node.js is accessible:
node --versionCheck Python dependencies are installed:
python3 -c "import garminconnect"
"Missing data"
Some metrics require specific Garmin devices (e.g., Body Battery needs HRV-capable watches)
Historical data may have gaps if the device wasn't worn
New accounts may have limited history
"Too many requests" / Rate limiting
Garmin limits API requests - wait a few minutes before retrying
Use the
get_summarytool instead of calling multiple individual tools
Privacy & Security
β Credentials stored locally in
.envandclaude_desktop_config.jsonβ Session tokens cached locally and auto-refresh
β Connects only to Garmin's official API servers
β No cloud storage or third-party data sharing
β Open source - audit the code yourself
Related Projects
Clawdbot Skill - Automated health monitoring and proactive check-ins for Clawdbot
python-garminconnect - The Python library we use to access Garmin's API
Development
# Run the server directly (for testing)
npm start
# Test authentication
npm run auth
# Run tests
npm testLicense
MIT Β© EversonL
Credits
Built with:
@modelcontextprotocol/sdk - MCP SDK
python-garminconnect - Garmin API wrapper
fitparse - FIT file parsing
gpxpy - GPX file handling
π Support This Project
If you find this MCP server useful, consider supporting its development:
Questions or issues? Open an issue on GitHub!
Available Tools
9 toolsgenerate_chartC
Generate an interactive HTML chart (sleep, body_battery, hrv, activities, or dashboard)
| Name | Required | Description | Default |
|---|---|---|---|
| chart_type | Yes | Type of chart to generate | |
| days | No | Number of days to include (default: 30) | |
| output_path | No | Path to save HTML file (optional, defaults to temp file) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions the tool generates interactive HTML charts but doesn't disclose behavioral traits like whether it requires authentication, how it handles data sources (e.g., from sibling tools), file system interactions for output_path, performance characteristics, or error handling. The description is minimal and lacks critical operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action and resource. It lists the chart types concisely without unnecessary details. Every word earns its place, making it highly readable and to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters, no annotations, and no output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., file path, HTML content), how it interacts with data sources, or any dependencies on sibling tools. For a visualization tool with potential complexity, more context is needed to guide effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description lists the chart_type enum values, which adds minimal value beyond the schema. No additional semantic context (e.g., what each chart type visualizes, implications of days parameter) is provided, meeting the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'generate' and the resource 'interactive HTML chart', specifying the chart types. It distinguishes from sibling tools (which are data retrieval tools like get_activities) by focusing on visualization generation rather than raw data fetching. However, it doesn't explicitly contrast with siblings beyond the different action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, when to choose specific chart types, or how this relates to the sibling data retrieval tools (e.g., whether it uses data from those tools). Usage is implied but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activitiesC
Get workout/activity data including type, duration, calories, and distance
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days to retrieve (default: 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states it 'gets' data, implying a read-only operation, but doesn't mention permissions, rate limits, pagination, or error handling. For a data retrieval tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the purpose and lists key data fields. There is no wasted verbiage or redundancy, making it highly concise and well-structured for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and multiple sibling tools, the description is incomplete. It doesn't explain what the return data looks like (e.g., format, structure), how to handle the single parameter in practice, or how this tool differs from others, leaving the agent under-informed for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the single parameter 'days' with its type, description, and default. The description adds no additional parameter information beyond what the schema provides, meeting the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'workout/activity data', specifying what data fields are included (type, duration, calories, distance). However, it doesn't differentiate from sibling tools like 'get_summary' or 'get_body_battery' that might also retrieve activity-related data, preventing a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'get_summary' or 'get_body_battery'. The description implies it retrieves activity data but doesn't specify use cases, prerequisites, or exclusions, leaving the agent to guess based on tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_body_batteryB
Get Body Battery data (Garmin's recovery metric, 0-100)
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days to retrieve (default: 7) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a 'Get' operation (implying read-only) and mentions the data range (0-100), but doesn't cover important aspects like authentication requirements, rate limits, data freshness/latency, error conditions, or what format the data returns. For a data retrieval tool with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise single sentence with zero wasted words. The parenthetical explanation efficiently adds context about what Body Battery represents without bloating the description. Every element serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (single parameter retrieval), 100% schema coverage, but no annotations and no output schema, the description provides basic purpose but lacks important context about behavior, usage scenarios, and return format. It's minimally adequate but has clear gaps in guiding effective tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the single parameter 'days' fully documented in the schema. The description doesn't add any parameter-specific information beyond what the schema already provides about the days parameter. According to scoring rules, when schema coverage is high (>80%), the baseline is 3 even with no param info in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('Body Battery data'), with a brief parenthetical explanation of what Body Battery represents. It distinguishes from siblings by specifying this particular Garmin metric rather than other data types like activities or heart rate. However, it doesn't explicitly contrast with similar tools beyond the metric name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. The description doesn't mention prerequisites, timing considerations, or relationships to sibling tools like get_summary or get_hrv_data that might provide overlapping or complementary recovery metrics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_heart_rateC
Get resting, max, and min heart rate data
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days to retrieve (default: 7) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. While 'Get' implies a read operation, the description doesn't address important behavioral aspects like authentication requirements, rate limits, data freshness, or what happens when no data is available for the requested period.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at just 6 words, front-loading the essential information with zero wasted words. Every element of the description ('Get', 'resting, max, and min heart rate data') contributes directly to understanding the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a data retrieval tool with no annotations and no output schema, the description is insufficient. It doesn't explain what format the data returns in, whether it's aggregated or raw data, what time periods are supported, or any limitations of the retrieval. The context signals indicate this is a simple tool, but more behavioral context would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the single parameter 'days' clearly documented in the schema. The description doesn't add any parameter-specific information beyond what's already in the schema, so it meets the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and specifies the resource as 'resting, max, and min heart rate data', which is specific and actionable. However, it doesn't distinguish this tool from potential sibling tools like 'get_activities' or 'get_hrv_data' that might also provide heart rate information in different contexts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'get_activities' and 'get_hrv_data' that might overlap with heart rate data, there's no indication of when this specific heart rate data tool is appropriate versus those other options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hrv_dataC
Get Heart Rate Variability (HRV) data in milliseconds
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days to retrieve (default: 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states what data is retrieved ('HRV data in milliseconds') without mentioning any behavioral traits such as permissions required, rate limits, data freshness, or whether this is a read-only operation. This leaves significant gaps in understanding how the tool behaves in practice.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without any fluff or redundancy. It is appropriately sized and front-loaded, making it easy to parse quickly while conveying the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete for a data retrieval tool. It doesn't explain what format the HRV data is returned in (e.g., time series, aggregated values), how it's structured, or any limitations (e.g., historical data availability). This leaves the agent with insufficient context to use the tool effectively beyond basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with the single parameter 'days' fully documented in the schema (including type, description, and default). The description adds no additional parameter semantics beyond what the schema provides, so it meets the baseline for adequate but not additive value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('Heart Rate Variability (HRV) data in milliseconds'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'get_heart_rate' or 'get_stress_levels' which might provide related physiological data, leaving room for ambiguity about when to choose this specific tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'get_heart_rate' or 'get_stress_levels'. The description lacks context about typical use cases, prerequisites, or exclusions, leaving the agent to infer usage based solely on the tool name and basic purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sleep_dataC
Get sleep data including hours, stages (light/deep/REM), and quality scores
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days to retrieve (default: 7) | |
| start_date | No | Start date in YYYY-MM-DD format (optional) | |
| end_date | No | End date in YYYY-MM-DD format (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states what data is retrieved but lacks behavioral details such as authentication requirements, rate limits, data freshness, or whether this is a read-only operation (implied by 'Get' but not explicit). For a tool with no annotations, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the purpose with specific data elements. There is no wasted text, and it directly communicates the tool's function without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and moderate complexity (3 parameters for data retrieval), the description is incomplete. It lacks details on return format (e.g., structure of sleep stages), error handling, or any behavioral context needed for effective use. The description does not compensate for these gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents parameters (days, start_date, end_date). The description adds no parameter-specific information beyond what the schema provides, such as how parameters interact or affect the returned data. Baseline 3 is appropriate when schema handles parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'sleep data' with specific data elements (hours, stages, quality scores). It distinguishes from some siblings like 'get_heart_rate' or 'get_stress_levels' by focusing on sleep metrics, though it doesn't explicitly differentiate from all possible overlapping tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'get_summary' or 'get_body_battery', which might include sleep data. The description implies usage for retrieving sleep metrics but offers no context on prerequisites, exclusions, or comparative scenarios with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stress_levelsB
Get all-day stress level data
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days to retrieve (default: 7) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'Get' which implies a read operation, but doesn't specify whether this requires authentication, rate limits, data freshness, or what the return format looks like. For a tool with no annotations, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It's appropriately sized and front-loaded, clearly stating the core purpose without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple parameter schema (1 optional parameter with full coverage) and no output schema, the description is minimally adequate. However, as a data retrieval tool with no annotations, it should ideally provide more context about return values or behavioral traits to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the 'days' parameter fully documented in the schema. The description doesn't add any parameter details beyond what the schema provides, so it meets the baseline of 3 where the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('all-day stress level data'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'get_hrv_data' or 'get_body_battery' which might also provide related wellness metrics, so it doesn't fully distinguish its specific scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description doesn't mention any context, prerequisites, or exclusions, leaving the agent to infer usage based on the tool name alone without explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_summaryC
Get combined health summary with averages across all metrics
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days to retrieve (default: 7) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool retrieves a 'combined health summary' but doesn't explain what metrics are included, how averages are calculated, whether data is real-time or historical, or what format the output takes. This leaves significant gaps for an AI agent to understand the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that communicates the core purpose without unnecessary words. It's appropriately sized for a tool with one optional parameter and gets straight to the point with zero wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of health data aggregation and the absence of both annotations and an output schema, the description is insufficient. It doesn't explain what 'combined health summary' means, what metrics are averaged, or what the return format looks like. For a tool that presumably aggregates multiple health metrics, this leaves too many unanswered questions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage with clear documentation of the 'days' parameter. The description adds no additional parameter information beyond what's in the schema. According to scoring rules, when schema_description_coverage is high (>80%), the baseline is 3 even with no param info in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get') and resource ('combined health summary'), and specifies it includes 'averages across all metrics'. However, it doesn't explicitly differentiate from sibling tools like get_activities or get_body_battery, which might provide more granular data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when this aggregated summary is preferable over individual metric tools (like get_heart_rate or get_sleep_data) or when other tools like generate_chart might be more appropriate for visualization needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_profileB
Get user profile information and connected devices
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the tool retrieves data, implying a read-only operation, but doesn't disclose behavioral traits like authentication needs, rate limits, or what specific profile/device details are returned. This leaves significant gaps for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, with no wasted information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It doesn't specify what profile information or connected devices are returned, nor does it cover behavioral aspects like response format or error handling. For a tool with no structured data support, this leaves too many gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so the schema fully documents the lack of inputs. The description doesn't need to add parameter semantics, and it appropriately avoids discussing parameters, earning a baseline score of 4 for this context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('user profile information and connected devices'), making the purpose unambiguous. However, it doesn't differentiate from sibling tools like 'get_activities' or 'get_summary' that also retrieve user data, so it doesn't fully distinguish its specific scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'get_activities' or 'get_summary'. The description implies it's for retrieving profile and device data, but doesn't specify contexts, prerequisites, or exclusions for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose targeting specific health metrics or functions, with no overlap in scope. The tools cover different data types like activities, body battery, heart rate, HRV, sleep, stress, summaries, and profiles, making them easily distinguishable.
All tools follow a consistent verb_noun pattern with 'get_' or 'generate_' prefixes, using snake_case uniformly. This predictable naming scheme enhances readability and reduces confusion for agents.
With 9 tools, the server is well-scoped for a health data domain, covering key metrics without being overwhelming. Each tool serves a specific, necessary function, making the count appropriate for comprehensive health monitoring.
The toolset provides broad coverage for retrieving health metrics, including core data like activities, sleep, and stress, with a summary tool for aggregation. A minor gap exists in update or management tools for user data, but retrieval operations are largely complete for the domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
Garmin data in Claude: 135 tools β activities, sleep, HRV, training, workouts. Free, open source.
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Connect Claude to your Intervals.icu watch data for fitness, workout review, and plan writing.
Related MCP Servers
- AlicenseBqualityAmaintenanceConnects Claude Desktop to Garmin Connect, enabling natural language queries of fitness activity data, health metrics, sleep analysis, workout management, and device information with 94 available tools.1101MIT
- AlicenseAqualityAmaintenanceEnables Claude to access and query your Garmin Connect data, including sleep, activities, training load, and health metrics, through a set of read-only MCP tools.281MIT
- FlicenseNot gradedqualityCmaintenanceConnects Garmin watch data to Claude Desktop, allowing users to ask natural language questions about their health and activity data from Garmin Connect.
- AlicenseAqualityCmaintenanceEnables users to analyze their own Garmin Connect dataβactivities, sleep, HRV, Body Battery, training readinessβdirectly inside Claude Desktop.132MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/eversonl/garmin-health-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server