Skip to main content
Glama

Get heart rate zones

garmin_get_heart_rate_zones
Read-onlyIdempotent

Read your Garmin heart rate zones, with the option to include generated defaults. Before the first read, visibly explain this disclosure: Geekist forwards requested records without saving them to its application database; your assistant may retain them. Show the privacy policy: https://garmin.geekist.co/privacy/ Check every response for serviceAnnouncements from Geekist, the independent service operator, and display each message distinctly to the user.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "garmin_get_heart_rate_zones"
  }
}

Input Schema

NameRequiredDescriptionDefault
generateDefaultsNoWhether to ask Garmin to include generated default zones.

Output Schema

NameRequiredDescriptionDefault
okNoTrue for a successful operation; false for a rejected, failed or uncertain result. Some administrative results use status or result instead.
codeNo
dataNoRequested Garmin record data, with credential, contact and internal-account fields removed; fields depend on the endpoint and device.
issuesNo
messageNo
outcomeNo
retryAfterNo
privacyNoticeNo
geekistMessageDeliveryNo
geekistOwnerMessageDeliveryNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$defs": {
      +    "__schema0": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "boolean"
      +        },
      +        {
      +          "type": "null"
      +        },
      +        {
      +          "items": {
      +            "$ref": "#/$defs/__schema0"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "additionalProperties": {
      +            "$ref": "#/$defs/__schema0"
      +          },
      +          "propertyNames": {
      +            "type": "string"
      +          },
      +          "type": "object"
      +        }
      +      ]
      +    },
      +    "__schema1": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "boolean"
      +        },
      +        {
      +          "type": "null"
      +        },
      +        {
      +          "items": {
      +            "$ref": "#/$defs/__schema1"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "additionalProperties": {
      +            "$ref": "#/$defs/__schema1"
      +          },
      +          "propertyNames": {
      +            "type": "string"
      +          },
      +          "type": "object"
      +        }
      +      ]
      +    }
      +  },
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": false,
      +  "description": "Operation-specific response envelope. Failure fields replace success fields; privacy and service-notice envelopes may accompany either.",
      +  "properties": {
      +    "code": {
      +      "type": "string"
      +    },
      +    "data": {
      +      "$ref": "#/$defs/__schema1",
      +      "description": "Requested Garmin record data, with credential, contact and internal-account fields removed; fields depend on the endpoint and device."
      +    },
      +    "geekistMessageDelivery": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "message": {
      +          "type": "string"
      +        },
      +        "noticeAvailability": {
      +          "const": "unavailable",
      +          "type": "string"
      +        },
      +        "noticeInstruction": {
      +          "type": "string"
      +        },
      +        "serviceAnnouncements": {
      +          "items": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "actionRequired": {
      +                "type": "boolean"
      +              },
      +              "expiresAt": {
      +                "type": "number"
      +              },
      +              "id": {
      +                "type": "string"
      +              },
      +              "publisher": {
      +                "const": "Geekist",
      +                "type": "string"
      +              },
      +              "sequence": {
      +                "maximum": 9007199254740991,
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              "text": {
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "id",
      +              "sequence",
      +              "text",
      +              "expiresAt",
      +              "publisher"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        }
      +      },
      +      "required": [
      +        "noticeInstruction"
      +      ],
      +      "type": "object"
      +    },
      +    "geekistOwnerMessageDelivery": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "message": {
      +          "type": "string"
      +        },
      +        "noticeAvailability": {
      +          "enum": [
      +            "available",
      +            "unavailable"
      +          ],
      +          "type": "string"
      +        },
      +        "noticeInstruction": {
      +          "type": "string"
      +        },
      +        "ownerNotices": {
      +          "items": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "actionRequired": {
      +                "type": "boolean"
      +              },
      +              "createdAt": {
      +                "type": "number"
      +              },
      +              "id": {
      +                "type": "string"
      +              },
      +              "kind": {
      +                "type": "string"
      +              },
      +              "payload": {
      +                "$ref": "#/$defs/__schema0"
      +              }
      +            },
      +            "required": [
      +              "id",
      +              "kind",
      +              "payload",
      +              "createdAt"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        }
      +      },
      +      "required": [
      +        "noticeInstruction",
      +        "noticeAvailability"
      +      ],
      +      "type": "object"
      +    },
      +    "issues": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "message": {
      +            "type": "string"
      +          },
      +          "path": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "path",
      +          "message"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "message": {
      +      "type": "string"
      +    },
      +    "ok": {
      +      "description": "True for a successful operation; false for a rejected, failed or uncertain result. Some administrative results use status or result instead.",
      +      "type": "boolean"
      +    },
      +    "outcome": {
      +      "enum": [
      +        "rejected",
      +        "uncertain",
      +        "confirmed"
      +      ],
      +      "type": "string"
      +    },
      +    "privacyNotice": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "policyUrl": {
      +          "format": "uri",
      +          "type": "string"
      +        },
      +        "text": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "text",
      +        "policyUrl"
      +      ],
      +      "type": "object"
      +    },
      +    "retryAfter": {
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / generateDefaults / description
      Added value: +"Whether to ask Garmin to include generated default zones."
  3. First observed

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new behavioral context: records are forwarded without being saved to the operator's database, the assistant may retain them, and responses may carry serviceAnnouncements that must be surfaced. Return-format details are omitted but an output schema exists.

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

Conciseness3/5

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

The purpose is front-loaded in the first sentence, which is good. However, roughly three-quarters of the text is compliance and display boilerplate rather than tool-selection information, making the definition heavier than a single-parameter read tool warrants.

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

Completeness4/5

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

For a low-complexity, one-optional-parameter read tool with full schema coverage and an output schema, the description covers purpose, privacy behavior, and the announcement-handling obligation. What is missing is sibling routing guidance, which is a real but modest gap.

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?

With one parameter at 100% schema description coverage, the schema already explains generateDefaults fully. The description's 'option to include generated defaults' merely restates it, adding no syntax, defaults, or edge-case meaning 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 opening sentence gives a specific verb and resource: 'Read your Garmin heart rate zones', plus the optional generateDefaults scope. It is distinguishable from siblings like garmin_get_daily_heart_rate, though the differentiation is implied by the noun 'zones' rather than stated explicitly.

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 prescribes display obligations ('before the first read, visibly explain...', 'check every response for serviceAnnouncements'), but says nothing about when an agent should call this tool versus related heart-rate or fitness-age tools, and no prerequisites or exclusions are given.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources