Skip to main content
Glama
rmc8

Garmin Connect MCP Server

by rmc8

Garmin Connect MCP Server

Languages: English | 日本語 (Japanese) | 简体中文 (Simplified Chinese)

A Model Context Protocol (MCP) server designed to retrieve daily health, fitness, and activity statistics from Garmin Connect and expose them to Large Language Models (LLMs). Built on Python's FastMCP, this server features robust authentication token persistence to protect your Garmin Connect account from being locked due to repeated login requests.


Features

  • Token Session Persistence Cache: The Garmin Connect API frequently locks accounts if too many login requests are made in a short time. This server automatically caches your session tokens locally (defaults to ~/.garminconnect or configured path) upon the first successful login, reusing them for subsequent requests.

  • 15 Rich Data Tools: Access steps, heart rate, sleep scores, stress, hydration, respiration, SpO2, body composition (weight/body fat), activity history, connected devices, and more.

  • Strict Type Safety & Testing: Fully compliant with mypy --strict and ruff, with a comprehensive mock-based test suite.


Related MCP server: garmin-mcp

Setup Instructions

Prerequisites

  • Python 3.12 or higher

  • uv (fast Python package and project manager)

1. Installation

Clone this repository and install it in editable mode:

git clone https://github.com/rmc8/rmc_garmin_mcp.git
cd rmc_garmin_mcp
uv pip install -e .

2. Environment Configuration

Copy .env.example to create a .env file and configure your Garmin credentials:

cp .env.example .env

Edit the .env file:

# Garmin Connect Login Email
GARMIN_EMAIL=your_email@example.com
# Garmin Connect Login Password
GARMIN_PASSWORD=your_password

# (Optional) Change the token directory path
# GARMINTOKENS=/path/to/tokens

3. Multi-Factor Authentication (MFA) Setup (Optional)

If your Garmin Connect account has MFA (Multi-Factor Authentication) enabled, you cannot log in directly from the MCP server as it runs in the background and cannot prompt for inputs.

Instead, run the interactive login helper command once in your terminal before launching the server:

uvx --with rmc-garmin-mcp rmc-garmin-login

(Or uv run rmc-garmin-login if you have cloned the source locally).

Enter your credentials and the MFA verification code. Once authentication is successful, the session tokens will be cached locally, and the MCP server will start up seamlessly in the background without prompting you again.


Running the Server

You can run the server directly without manual cloning or installation using uvx:

uvx rmc-garmin-mcp

Stdio Mode (From Local Source)

If you have cloned the repository locally, you can run the server using uv:

uv run rmc-garmin-mcp

Testing with MCP Inspector

You can test the exposed tools using the interactive MCP Inspector GUI:

npx @modelcontextprotocol/inspector uv run rmc-garmin-mcp

After executing, open the URL provided in your browser to run test executions of the tools.


MCP Client Configuration

To configure the server for MCP clients (such as Claude Desktop), add the following to your configuration file (e.g. claude_desktop_config.json):

This method executes the server directly from PyPI without requiring a local clone.

{
  "mcpServers": {
    "rmc-garmin-mcp": {
      "command": "uvx",
      "args": ["rmc-garmin-mcp"],
      "env": {
        "GARMIN_EMAIL": "your_email@example.com",
        "GARMIN_PASSWORD": "your_password"
      }
    }
  }
}

Using Local Source (via uv)

If you prefer to run the server from a cloned local repository, configure it like this:

{
  "mcpServers": {
    "rmc-garmin-mcp": {
      "command": "uv",
      "args": [
        "--directory",
        "/absolute/path/to/rmc_garmin_mcp",
        "run",
        "rmc-garmin-mcp"
      ],
      "env": {
        "GARMIN_EMAIL": "your_email@example.com",
        "GARMIN_PASSWORD": "your_password"
      }
    }
  }
}
IMPORTANT
  • Replace /absolute/path/to/rmc_garmin_mcp with the actual absolute path to the directory where you cloned the repository.

  • If you have MFA enabled, ensure you run the interactive login helper (uvx --with rmc-garmin-mcp rmc-garmin-login) once in your terminal to cache the tokens before launching Claude Desktop.


Exposed MCP Tools

Tool Name

Description

Key Arguments

get_steps_data

Fetch detailed step readings for a date.

cdate (YYYY-MM-DD)

get_heart_rates

Fetch heart rate data for a date.

cdate (YYYY-MM-DD)

get_daily_steps

Fetch summarized daily steps for a date range.

start, end (YYYY-MM-DD)

get_body_battery

Fetch Body Battery data for a date range.

start (req), end (opt)

get_hydration_data

Fetch hydration logs for a date.

cdate (YYYY-MM-DD)

get_last_activity

Fetch details of the most recent logged activity.

None

get_sleep_data

Fetch sleep scores and stages analysis for a date.

cdate (YYYY-MM-DD)

get_stress_data

Fetch detailed stress readings for a date.

cdate (YYYY-MM-DD)

get_all_day_stress

Fetch all-day stress records for a date.

cdate (YYYY-MM-DD)

get_user_summary

Fetch daily summary (steps, calories, resting HR).

cdate (YYYY-MM-DD)

get_respiration_data

Fetch respiration rates (breaths per minute) for a date.

cdate (YYYY-MM-DD)

get_spo2_data

Fetch SpO2 (blood oxygen) logs for a date.

cdate (YYYY-MM-DD)

get_body_composition

Fetch body composition (weight, body fat, muscle).

startdate (req), enddate (opt)

get_activities

List logged fitness activities with pagination.

start (offset), limit (count)

get_devices

List registered Garmin devices on the account.

None

NOTE

All date parameters must be strings inYYYY-MM-DD format.


Development and Verification

Code Formatting and Linting

uv run ruff format .
uv run ruff check . --fix

Type Checking (Mypy Strict)

uv run mypy src tests

Running Unit Tests (Pytest)

uv run pytest

Tests mock the Garmin Connect API to verify validator logic and tool execution behavior without hitting real endpoints.

Available Tools

15 tools
get_activitiesB

Get a list of logged fitness activities with pagination.

Args:
    start: Offset index to start retrieving activities. Defaults to 0.
    limit: Maximum number of activities to return. Defaults to 20.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
startNo

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description only indicates it's a 'get' operation (read-only inferred) and mentions pagination. Does not disclose rate limits, authentication, or any side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise: one line for purpose plus one line per parameter. No wasted words; information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A simple paginated list tool with no output schema. The description explains purpose and parameters but lacks details on return format, ordering, or filtering. Adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description fully explains both parameters: start as offset index with default 0, limit as maximum number with default 20. This adds significant value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it gets a list of logged fitness activities with pagination, which is a specific verb+resource. It distinguishes from siblings like get_last_activity implicitly by indicating pagination, but does not explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like get_last_activity or other list tools. No context on prerequisites or typical scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_all_day_stressB

Get comprehensive all-day stress readings for a specific date.

Args:
    cdate: Target date in YYYY-MM-DD format.
ParametersJSON Schema
NameRequiredDescriptionDefault
cdateYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It only states the basic action without disclosing any behavioral traits such as authentication requirements, rate limits, or whether the data is aggregated or raw. The term 'comprehensive' is vague.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and to the point, with two short sentences. It is appropriately sized for a simple tool, though additional details could be included without significantly increasing length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and a single parameter, the description provides the basic purpose and argument format. However, it lacks information about the return value, pagination, or any limits, which would be helpful given the simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds valuable meaning by specifying the date format (YYYY-MM-DD) for the single parameter 'cdate'. This compensates for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it retrieves comprehensive all-day stress readings for a specific date. The verb 'get' and resource 'all-day stress readings' are specific. However, it does not explicitly differentiate from the sibling tool 'get_stress_data', which may overlap.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. No when-not-to-use or exclusion criteria provided. Usage context is implied but not explicit.

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 for a specified period.

Args:
    start: Start date in YYYY-MM-DD format.
    end: Optional end date in YYYY-MM-DD format.
ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
startYes

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description must disclose behavioral traits. It only mentions input format and does not describe any side effects, rate limits, authentication needs, or data freshness. As a data retrieval tool, it likely has no destructive effects, but this is not stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two clear sentences. The function is stated upfront, and parameter details follow. It could be slightly more informative without sacrificing conciseness, but it is well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and 15 sibling tools, the description lacks completeness. It does not describe the returned data structure or how to interpret Body Battery values. A user cannot infer what the output will look like or how to use it effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description adds meaning to both parameters: start is a required date in YYYY-MM-DD format, end is optional. This clarifies format and optionality beyond the schema's type info. However, it does not explain the meaning of the date range (e.g., inclusive vs exclusive) or expected data granularity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves Body Battery data for a period. The verb 'Get' and resource 'Body Battery data' are specific. It distinguishes from sibling tools like get_activities or get_sleep_data by focusing on body battery. However, it does not elaborate on what 'Body Battery' entails, leaving some ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 such as get_all_day_stress or get_stress_data. There are no mentions of prerequisites, use cases, or contexts where this tool is preferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_body_compositionB

Get body composition data for a date range.

Includes weight, body fat, muscle mass, and hydration.

Args:
    startdate: Start date in YYYY-MM-DD format.
    enddate: Optional end date in YYYY-MM-DD format.
        Defaults to startdate if not provided.
ParametersJSON Schema
NameRequiredDescriptionDefault
enddateNo
startdateYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description only lists data fields without disclosing behavioral traits such as read-only status, authorization needs, performance implications, or any constraints beyond the date range.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with a clear purpose and parameter documentation in the args section. It is well-structured and front-loaded, though slightly verbose for a simple tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the input parameters and data fields returned, but lacks details on output structure (e.g., whether it returns a list or single record, pagination, or time granularity). With no output schema, this is a notable gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by explaining the startdate format (YYYY-MM-DD) and noting enddate defaults to startdate. This adds meaningful context beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves body composition data for a date range and lists included metrics (weight, body fat, muscle mass, hydration). It distinguishes from sibling tools like get_body_battery and get_hydration_data by resource, but does not explicitly differentiate from them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving body composition data within a date range, but provides no explicit guidance on when to use this tool versus alternatives, nor any conditions or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_daily_stepsC

Get summarized daily steps over a specified period.

Args:
    start: Start date in YYYY-MM-DD format.
    end: End date in YYYY-MM-DD format.
ParametersJSON Schema
NameRequiredDescriptionDefault
endYes
startYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must fully disclose behavioral traits. It only states the function (get steps) and expected input format, but omits whether the operation is read-only, what data is returned, or any constraints like rate limits. The lack of behavioral context is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the main purpose in the first sentence. The Args section follows directly. However, it could be slightly more efficient by integrating format notes into the schema, but overall it is well-structured and brief.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 2 required string parameters and no output schema, the description is incomplete. It does not explain what the returned data looks like (e.g., per-day totals, units) or any aggregation details. The description covers only input semantics, leaving the output unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description adds meaning by specifying the date format (YYYY-MM-DD) and clarifying that 'start' and 'end' define the period. This provides needed semantic context beyond the schema's bare type and title.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get'), the resource ('summarized daily steps'), and the scope ('over a specified period'). It is specific but does not explicitly differentiate from sibling tools like 'get_steps_data', though the 'summarized' qualifier hints at a distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 does not state when not to use it, nor does it mention any prerequisites or context for choosing this tool over siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_devicesA

Get a list of all registered Garmin devices connected to the account.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided. The description discloses a read operation but does not mention pagination, rate limits, or edge cases. For a simple list tool it is adequate but lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no extraneous words. It is front-loaded and efficiently communicates the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless tool with no output schema, the description is complete. It tells what the tool does and differentiates from siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters. Schema coverage is 100%. The description adds context about the resource and scope, which is sufficient given the absence of parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 'all registered Garmin devices connected to the account'. It is specific and distinct from sibling tools which focus on health data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use (to list devices) but does not explicitly exclude alternatives or provide when-not-to-use guidance. However, the resource is unique among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_heart_ratesB

Get heart rate readings for a specific date.

Args:
    cdate: Target date in YYYY-MM-DD format.
ParametersJSON Schema
NameRequiredDescriptionDefault
cdateYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must fully disclose behavior. It only states the basic purpose and parameter format, omitting details like return structure, frequency of readings, or authentication requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with the core purpose. No extraneous information. Every sentence is essential.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a simple tool with one parameter, but lacks return value description. Since there is no output schema, the description should outline what 'readings' entails (e.g., timestamps, values).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description adds meaning by explaining the 'cdate' parameter format (YYYY-MM-DD). This compensates for the schema lacking descriptions, though no example is provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Get heart rate readings for a specific date', specifying the verb and resource. However, it does not distinguish from sibling tools like get_stress_data or get_sleep_data, lacking differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. The description only states the context (specific date) but provides no exclusions or recommendations for choosing between sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_hydration_dataA

Get hydration intake data for a specific date.

Args:
    cdate: Target date in YYYY-MM-DD format.
ParametersJSON Schema
NameRequiredDescriptionDefault
cdateYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must reveal behavioral traits. It only states the basic operation (get) and the parameter. There is no mention of whether authentication is required, rate limits, what happens with invalid dates, or the structure of the response. This lack of detail fails to inform the agent about side effects or constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two short lines. It front-loads the purpose immediately and only contains necessary information. Every part earns its place without any wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple nature of the tool (one parameter, no output schema, many siblings), the description covers the basic purpose and parameter but omits details like what data is returned, the unit of measurement, or potential errors. It is minimally viable but not fully complete for an agent to use without further context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, but the description adds meaning by specifying 'Target date in YYYY-MM-DD format' for the cdate parameter. This compensates for the schema's lack of detail and provides essential formatting guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 'hydration intake data', and specifies the date parameter. It distinguishes from sibling tools by focusing on hydration data, leaving no ambiguity about the tool's function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when hydration data is needed but provides no explicit guidance on when to use this tool versus alternatives. It does not mention when not to use it or list any prerequisites, leaving the agent without comparative context among the many sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_last_activityB

Get information about the most recent logged activity.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden for behavioral disclosure, but only states 'Get information', implying read-only. No details are given about data freshness, rate limits, or any caveats. The transparency is minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: a single sentence with no unnecessary words. It earns its place by being efficient and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with no parameters and no output schema, the description is somewhat complete but lacks context about the nature of 'activity' (e.g., last timestamp, type, source). Given the sibling tools, more specificity would help the agent distinguish usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, and the schema coverage is 100% (empty). The description implicitly communicates that no arguments are needed. According to the baseline rule for 0 parameters, a score of 4 is appropriate since the description adds no further parameter meaning but the schema is already complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get information about the most recent logged activity' clearly specifies the verb and resource, but lacks differentiation from sibling tools like 'get_activities' and 'get_user_summary'. It does not define what 'activity' means (e.g., physical activity, system activity), leaving room for ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 does not mention limitations, prerequisites, or when to prefer sibling tools, offering no decision-making support for the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_respiration_dataA

Get daily respiration rate readings (breaths per minute).

Args:
    cdate: Target date in YYYY-MM-DD format.
ParametersJSON Schema
NameRequiredDescriptionDefault
cdateYes

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, yet the description only states basic functionality. It omits critical behavioral details such as authentication needs, rate limits, what happens for missing dates, or the response structure. A more transparent description would include these aspects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with only two sentences, no redundant information, and is front-loaded with the core purpose. Every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and no output schema, the description covers the basic functionality and parameter format. However, it lacks information about the output or error handling, so it is not fully complete. A brief note on return value would move it to a 4.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides no description for the 'cdate' parameter, but the description adds meaningful context: 'Target date in YYYY-MM-DD format'. This compensates for the 0% schema description coverage, making the parameter's purpose and format clear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get', the resource 'daily respiration rate readings', and the unit 'breaths per minute', making the tool's purpose unmistakable. It also distinguishes from sibling tools which cover other health metrics like heart rate or sleep.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the required parameter 'cdate' with format, but lacks guidance on when to use this tool versus alternatives (e.g., no mention of temporal granularity or error conditions). No explicit when-not-to-use or alternative recommendations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sleep_dataB

Get detailed sleep analysis and scoring for a specific date.

Args:
    cdate: Target date in YYYY-MM-DD format.
ParametersJSON Schema
NameRequiredDescriptionDefault
cdateYes

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description does not disclose whether the tool is read-only, requires authentication, or has side effects, relying on the agent to infer from the verb 'get'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise with two sentences, front-loading the purpose, but could be improved by structuring the return value or adding a brief example.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description omits any information about the output format or content, error handling, or performance implications, leaving the agent with minimal context despite the low tool complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds the format 'YYYY-MM-DD' for the cdate parameter, which is not in the input schema, significantly aiding correct invocation despite the schema having no parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves detailed sleep analysis and scoring for a specific date, which aligns with the tool name and distinguishes it from sibling tools like get_activities or get_stress_data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives; only specifies it's for a specific date without discussing when not to use it or mentioning prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_spo2_dataC

Get daily SpO2 (blood oxygen saturation) measurements.

Args:
    cdate: Target date in YYYY-MM-DD format.
ParametersJSON Schema
NameRequiredDescriptionDefault
cdateYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full burden. It does not disclose behavioral traits such as read-only nature (implied by 'Get'), data range, rate limits, or whether multiple measurements may be returned for a single date. The minimal description adds no behavioral context beyond the action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short and front-loaded with the purpose. It wastes no words, but the lack of structure (e.g., sections for returns, examples) slightly reduces clarity. It is appropriate for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple input (one required parameter) but no output schema and no annotations, the description omits details about the return format, number of measurements, and data granularity. This is insufficient for an agent to understand what the tool returns, making it incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% (no descriptions in schema). The description adds format information for 'cdate' ('YYYY-MM-DD'), which is valuable beyond the bare schema. However, it does not explain constraints like allowable date range or timezone, leaving some ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it retrieves daily SpO2 measurements, specifying the resource and verb. However, it does not explicitly differentiate from the sibling 'get_respiration_data' which may also include SpO2, but the focus on SpO2 and 'daily' provides sufficient clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like 'get_respiration_data'. No prerequisites, limitations, or exclusions mentioned, leaving the agent without context for proper selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_steps_dataC

Get detailed steps data for a specific date.

Args:
    cdate: Target date in YYYY-MM-DD format.
ParametersJSON Schema
NameRequiredDescriptionDefault
cdateYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description does not disclose any behavioral traits such as read-only nature, rate limits, or side effects. The agent cannot infer safety or performance characteristics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and to the point, with a clear structure showing the argument format. However, it lacks any broader context, which might be considered under-specification rather than conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple input and no output schema, the description covers basic usage but fails to explain what 'detailed steps data' includes or how it differs from sibling tools. The agent may need to infer the return format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description's note that cdate must be in YYYY-MM-DD format adds value. However, it does not explain other constraints like valid date ranges or formatting nuances.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves detailed steps data for a specific date. However, 'detailed' is vague and does not differentiate from the sibling tool get_daily_steps, which likely returns similar data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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_daily_steps. There is no mention of prerequisites or context-specific usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stress_dataC

Get stress level details for a specific date.

Args:
    cdate: Target date in YYYY-MM-DD format.
ParametersJSON Schema
NameRequiredDescriptionDefault
cdateYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description does not disclose any behavioral traits such as authentication requirements, rate limits, or the nature of the returned data (e.g., stress values, timestamps, aggregations). The description is too terse to inform the agent of important constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences, front-loading the purpose. However, it may be too brief given the lack of other context, but that is a completeness issue, not a conciseness one.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, no annotations, and only one parameter, the description fails to explain what 'stress level details' entails, what fields are returned, or how the data is structured. This is insufficient for an agent to use the tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds a format requirement (YYYY-MM-DD) for the 'cdate' parameter, which is missing from the schema. However, it does not explain the meaning of the date, any valid range, or defaults. Given 0% schema coverage, this provides minimal added value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get', the resource 'stress level details', and the constraint 'for a specific date'. However, it does not explicitly differentiate from the sibling tool 'get_all_day_stress', which might serve a similar purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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. For example, there is no mention of whether 'get_all_day_stress' covers a range of dates or if this is the only way to get single-date stress data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_user_summaryB

Get the user's daily activity summary (steps, calories, heart rate ranges, etc.).

Args:
    cdate: Target date in YYYY-MM-DD format.
ParametersJSON Schema
NameRequiredDescriptionDefault
cdateYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description does not disclose behavioral traits such as authentication requirements, rate limits, or side effects. It only describes the purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no fluff. The first sentence defines purpose, the second details the parameter. Both are necessary and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Missing details about return format, structure, or when to use this summary over individual metric tools. With 14 sibling tools, more context is needed for an agent to select correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema coverage is 0%, but the description adds format information for the only parameter (cdate: 'YYYY-MM-DD'), which is essential for correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get the user's daily activity summary' with specific examples (steps, calories, heart rate ranges). It distinguishes from sibling tools like get_daily_steps and get_heart_rates by indicating it's a composite summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives. The description does not mention that it provides an overview compared to more granular tools like get_daily_steps or get_heart_rates.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

B3.4/5.0
Disambiguation4/5

Most tools target distinct health metrics, but get_daily_steps vs get_steps_data and get_stress_data vs get_all_day_stress could confuse an agent due to overlapping purposes.

Naming Consistency5/5

All tools use snake_case with a consistent 'get_<resource>' pattern. Minor deviations like 'get_all_day_stress' vs 'get_stress_data' are inconsequential.

Tool Count4/5

15 tools is slightly above the typical sweet spot but still reasonable for covering diverse health metrics without feeling overly burdensome.

Completeness3/5

The tool set covers many health metrics but lacks write operations (e.g., logging activities) and misses common Garmin data like workouts or courses, leaving notable gaps.

Maintenance

ActivitySlowing
ResponsivenessSyncing

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

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Exposes Garmin Connect data and workout management to AI agents, supporting tools, resources, and prompts for health data, workout creation, and coaching workflows.
    1
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to query live Garmin Connect health and fitness data, including daily metrics, activities, sleep analysis, and trends via natural language.
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Exposes personal Garmin Connect data to MCP-capable clients like Claude and Gemini. Enables querying daily stats, heart rate, sleep, activities, and managing workouts.
    16
    MIT

Latest Blog Posts

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/rmc8/rmc_garmin_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server