This server has solid naming conventions (verb_noun pattern consistently applied across all 25 tools) and non-empty descriptions for every tool. However, it suffers from critical gaps in schema definition quality, parameter documentation, and output structure. Input parameters use proper JSON Schema format with types (date, string, integer), and all parameters have descriptions explaining their purpose and format. The major weakness is lack of output schema documentation, no tool declares what fields or structure it returns, forcing LLMs to guess at response shape. Parameters generally lack constraints (enums, min/max bounds), and many tools have generic, terse descriptions (e.g., 'Get user profile information using Garth's UserProfile data class' is vague about what 'UserProfile' contains). Error handling is minimal, the requires_garth_session wrapper returns a plain string on token missing, but tools do not guide recovery for API failures. No tool documentation mentions idempotency, pagination, or result limits. The design is read-only (all 25 tools), which mitigates some security concerns, but authentication is via environment variable (GARTH_TOKEN) passed to garth.client.loads(), creating a single point of failure if the token leaks. Overall: workable definitions with good naming and basic typing, but insufficient schema completeness and output documentation for production-grade LLM integration.
Get daily body battery data for a given date and number of days. If no date is provided, the current date will be used. If no days are provided, 1 day will be used.
Get daily heart rate variability data for a given date and number of days. If no date is provided, the current date will be used. If no days are provided, 1 day will be used.
Get daily hydration data for a given date and number of days. If no date is provided, the current date will be used. If no days are provided, 1 day will be used.
Get daily sleep summary data for a given date and number of days. If no date is provided, the current date will be used. If no days are provided, 1 day will be used.
Get daily steps data for a given date and number of days. If no date is provided, the current date will be used. If no days are provided, 1 day will be used.
No output schema documentation for any tool. Tools return Garth dataclass instances or raw API responses, but LLMs have no formal schema to understand response structure, field types, or available chaining references.
Minimal descriptions for simple tools. 'Get user profile information using Garth's UserProfile data class' and 'Get connected devices from Garmin Connect' lack specificity about what data is returned, when to call them, and what the fields mean. Descriptions should explain WHAT, WHEN to use, and any prerequisites.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Get list of activities from Garmin Connect. start_date: Start date for activities (YYYY-MM-DD format) limit: Maximum number of activities to return
Get activities for a specific date from Garmin Connect. date: Date for activities (YYYY-MM-DD format)
Get detailed information for a specific activity. activity_id: Garmin Connect activity ID
Get lap/split data for a specific activity. activity_id: Garmin Connect activity ID
Get weather data for a specific activity. activity_id: Garmin Connect activity ID
Get blood pressure readings from Garmin Connect. date: Date for blood pressure data (YYYY-MM-DD format)
Get body composition data from Garmin Connect. date: Date for body composition data (YYYY-MM-DD format), if not provided returns latest
Get the data from a given Garmin Connect API endpoint. This is a generic tool that can be used to get data from any Garmin Connect API endpoint.
Get settings for a specific device. device_id: Device ID from Garmin Connect
Get connected devices from Garmin Connect.
Get gear information from Garmin Connect.
Get usage statistics for specific gear. gear_uuid: UUID of the gear item
Get respiration data from Garmin Connect. date: Date for respiration data (YYYY-MM-DD format)
Get SpO2 (blood oxygen) data from Garmin Connect. date: Date for SpO2 data (YYYY-MM-DD format)
Get detailed HRV data for a given date and number of days. If no date is provided, the current date will be used. If no days are provided, 1 day will be used.
Get nightly sleep data (appears truncated in source code)
Get user profile information using Garth's UserProfile data class.
Get user settings using Garth's UserSettings data class.
Get weekly intensity minutes data for a given date and number of weeks. If no date is provided, the current date will be used. If no weeks are provided, 1 week will be used.
Get weekly steps data for a given date and number of weeks. If no date is provided, the current date will be used. If no weeks are provided, 1 week will be used.
No parameter constraints or validation guidance. Numeric parameters (days, weeks, limit) lack min/max bounds. String date parameters describe format (YYYY-MM-DD) but don't specify valid ranges (e.g., 'days 1 - 30', 'weeks 1 - 52'). LLMs can pass absurd values (days=365, weeks=1000) without guidance.
No pagination or result limit documentation. Tools like get_activities and get_gear can return many results but lack documented limits, offset/limit parameters, or guidance on handling large datasets. High token cost and context dilution risk.
Error handling is minimal. requires_garth_session wrapper returns a plain string on missing token, but tools do not document how they handle API failures (network errors, rate limits, invalid dates). No guidance on recovery or retry logic.
get_connectapi_endpoint is a generic passthrough tool with vague purpose. Description says 'Get the data from a given Garmin Connect API endpoint. This is a generic tool...' but does not specify which endpoints are safe, what formats are expected, or when to use this vs. a specific tool. This invites misuse and makes the agent less predictable.
Date parameter handling is inconsistent. Some tools use 'end_date' as a date type (Python date object), others use 'date' as a string (YYYY-MM-DD format). This forces LLMs to guess the correct format per tool. Standardize to a single date representation or add type hints to descriptions.