Skip to main content
Glama

Hevy MCP Server

Talk to your Hevy workout data from Claude, Cursor, Codex, and other MCP clients.

npm version npm downloads Build and Test Codecov GitHub stars Hosted on Cloudflare License: MIT MCP Toplist

Connect to the hosted MCP · Use the Hevy CLI · Watch the 18-second demo · Explore all 22 tools

Hevy CLI

Prefer the terminal? The separate @chrisdoc/hevy-cli package reads workouts, routines, exercises, and body measurements directly from the Hevy API, and can create or update those resources with explicit confirmation. Deletion is not supported.

npm install -g @chrisdoc/hevy-cli
export HEVY_API_KEY=your-hevy-api-key

hevy workouts list --page-size 10
hevy summary --weeks 4

Add --json to any command for scripts and pipelines. The CLI is a standalone Hevy API client, not an MCP wrapper. See packages/cli/README.md for the full command reference, pagination behavior, and exit codes.

hevy-mcp is an open-source Model Context Protocol (MCP) server for the Hevy fitness and workout tracking app. It lets AI assistants read, analyze, create, and update your Hevy workouts, routines, exercise templates, and body measurements through authenticated Hevy API requests.

The repository is organized as a private workspace with explicit runtime boundaries: @hevy-mcp/hevy-client owns the web-safe Hevy client, @hevy-mcp/operations owns reusable Hevy domain operations, @hevy-mcp/core owns MCP tools and server construction, hevy-mcp is the published Node.js stdio adapter, @hevy-mcp/worker is the private Cloudflare HTTP/OAuth adapter, and @chrisdoc/hevy-cli is the standalone CLI. Node and CLI are the public packages.

Public client and operation APIs stay Promise-based. Request execution inside @hevy-mcp/hevy-client is an internal Effect seam; workout and routine list/get operations compose that seam and still expose a single Promise execute(). MCP tools in @hevy-mcp/core receive a request-local HevyClientService or HevyOperationsService from createCoreServiceLayer. The MCP catalog remains 22 tools.

A Hevy API key, available with Hevy PRO, is required.

Related MCP server: hevy-mcp

See it in action

Hevy MCP demo showing an AI assistant analyzing six weeks of Hevy training data

In the demo, the assistant retrieves real Hevy data and answers a multi-part training question with evidence from the user's workout history.

What can you do with it?

  • Analyze training progress: summarize 1-12 weeks of workouts and body measurements in one tool call.

  • Ask questions in plain language: find recent sessions, frequently trained exercises, consistency gaps, routine details, or exercise history.

  • Plan and log training: create or update workouts, routines, routine folders, custom exercises, and body measurements.

  • Search without huge responses: discover routines and exercise templates with compact, AI-friendly results.

  • Connect from your preferred MCP client: use the hosted Streamable HTTP endpoint or run locally with Codex, Claude Desktop, Cursor, and other clients.

  • Start without installing anything: connect directly to the production Cloudflare Worker—no Node.js, package download, or Docker container required.

  • Keep local control when you want it: run the same server with npx, bunx, or the official Docker image.

Try asking:

Analyze my training over the last six weeks. Show workouts per week, my most frequently trained exercises, any obvious gaps or inconsistencies, and cite the workout evidence you used.

Find my push-day routine and show its exercises and sets.

Compare my recent body measurements with my training consistency.

Create a completed workout from my saved routine. Ask me for any missing set results before writing it to Hevy.

Claude integration

The repository includes a Claude plugin that connects to the hosted OAuth-enabled MCP endpoint without embedding a user's Hevy API key.

Claude.ai and Claude Desktop

In Claude, open Settings → Connectors → Add custom connector and enter:

https://mcp.hevy-mcp.dev/mcp

Complete the OAuth flow and enter the Hevy API key when prompted. The same remote endpoint can be used by Claude Desktop and other clients that support remote MCP connectors.

Claude Code and Cowork

The Claude plugin is defined by .claude-plugin/plugin.json and .mcp.json. Install it from this public repository or from the Claude Plugin Directory after publication. It adds the hosted Hevy MCP connector and the Hevy workout skill.

See the privacy policy for the hosted service's data handling details.

Quick start

1. Get your Hevy API key

Create an API key in Hevy's API settings, then keep it somewhere secure. API access currently requires a Hevy PRO subscription.

2. Connect hevy-mcp to your client

The hosted Cloudflare endpoint is the fastest way to start. It runs remotely, so your client does not need Node.js, Bun, Docker, or a local server process.

Connect to the hosted endpoint

Production URL:

https://mcp.hevy-mcp.dev/mcp

The endpoint uses Streamable HTTP. Send your Hevy API key as a bearer token on every request.

Codex

Codex CLI, the Codex desktop app, and the IDE extension share the same MCP configuration. Make your Hevy API key available in the environment that starts Codex, then add the hosted server:

export HEVY_API_KEY=your-hevy-api-key
codex mcp add hevy \
  --url https://mcp.hevy-mcp.dev/mcp \
  --bearer-token-env-var HEVY_API_KEY

Codex stores the environment variable name, not the key itself, in its MCP configuration. Restart Codex or begin a new session, then run codex mcp list to verify the server is configured.

Other Streamable HTTP clients

Clients that accept a remote MCP URL and fixed headers commonly use this shape:

{
	"mcpServers": {
		"hevy": {
			"url": "https://mcp.hevy-mcp.dev/mcp",
			"headers": {
				"Authorization": "Bearer your-hevy-api-key"
			}
		}
	}
}

Exact configuration keys vary by client. The hosted server requires support for Streamable HTTP and a fixed Authorization header.

IMPORTANT

Treat the bearer value like a password. The Worker validates it with Hevy for each request, does not store it, and forwards it to Hevy only as the requiredapi-key header.

Run locally instead

Choose local stdio if you prefer to run the server on your own machine or your client cannot attach a fixed authorization header to remote MCP requests.

Codex
codex mcp add hevy \
  --env HEVY_API_KEY=your-hevy-api-key \
  -- npx -y hevy-mcp
Claude Desktop or Cursor

Add this mcpServers entry to your client configuration:

{
	"mcpServers": {
		"hevy": {
			"command": "npx",
			"args": ["-y", "hevy-mcp"],
			"env": {
				"HEVY_API_KEY": "your-hevy-api-key"
			}
		}
	}
}
Google Antigravity

There are two ways to configure the Hevy MCP server for Google Antigravity (agy):

This utilizes the built-in plugin system:

  1. Install the plugin:

    agy plugin install https://github.com/chrisdoc/hevy-mcp
  2. Provide the HEVY_API_KEY in your host shell environment so the CLI child process can inherit it:

    • Persistent: Save the environment variable HEVY_API_KEY in your system/shell configurations:

      • macOS / Linux: Add it to your shell profile configurations (e.g., ~/.zshrc or ~/.bashrc):

        export HEVY_API_KEY="your-actual-api-key"
      • Windows: Add it to your User or System Environment Variables. In PowerShell, you can run:

        [Environment]::SetEnvironmentVariable("HEVY_API_KEY", "your-actual-api-key", "User")
    • Temporary (Session-only): If you do not want to persist the key, export it in your active terminal session before running agy:

      export HEVY_API_KEY="your-actual-api-key"
Option B: Manual Configuration (No Plugin)

If you prefer configuring it statically via the global configuration file:

  1. Open your global MCP configuration file:

    • Location: ~/.gemini/config/mcp_config.json

  2. Add the hevy configuration block under the mcpServers key. Make sure to merge this entry with any existing servers you have configured rather than replacing the entire file contents:

    {
        "mcpServers": {
            "hevy": {
                "command": "npx",
                "args": ["-y", "hevy-mcp"],
                "env": {
                    "HEVY_API_KEY": "your-actual-api-key"
                }
            }
        }
    }

Common local configuration locations:

  • Claude Desktop on macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Claude Desktop on Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Cursor: ~/.cursor/mcp.json

Restart or reconnect the client after saving the file.

Any stdio MCP client

Configure your client to launch this command with HEVY_API_KEY in the child process environment:

npx -y hevy-mcp

npx requires Node.js 20 or newer. Restart or reconnect your client after saving its configuration.

Requires Bun:

{
	"mcpServers": {
		"hevy": {
			"command": "bunx",
			"args": ["hevy-mcp@latest"],
			"env": {
				"HEVY_API_KEY": "your-hevy-api-key"
			}
		}
	}
}

Official images support linux/amd64 and linux/arm64. Keep stdin open with -i because the container runs the stdio MCP server:

export HEVY_API_KEY=your-hevy-api-key
docker run -i --rm -e HEVY_API_KEY ghcr.io/chrisdoc/hevy-mcp:latest

For an MCP client, store the key in a protected environment file and configure the client to launch Docker:

{
	"mcpServers": {
		"hevy": {
			"command": "docker",
			"args": [
				"run",
				"-i",
				"--rm",
				"--env-file",
				"/absolute/path/to/hevy-mcp.env",
				"ghcr.io/chrisdoc/hevy-mcp:latest"
			]
		}
	}
}

Pin an exact image tag such as ghcr.io/chrisdoc/hevy-mcp:X.Y.Z when you need reproducible upgrades.

You can also add the npm server to supported clients with add-mcp:

npx add-mcp hevy-mcp --env "HEVY_API_KEY=your-hevy-api-key"

3. Ask your first question

Try one of these after restarting or reconnecting your MCP client:

  • “Give me a training summary for the last four weeks.”

  • “What routines do I have saved on Hevy?”

  • “Show my three most recent workouts.”

  • “Find exercise templates containing squat.”

  • “Which Hevy account is connected?”

Your assistant should ask for approval before mutation tools when the client supports tool confirmations.

How it works

Hosted:  Your AI assistant  →  Streamable HTTP  →  Cloudflare Worker  →  Hevy API
Local:   Your AI assistant  →  MCP over stdio   →  local hevy-mcp     →  Hevy API

The hosted endpoint creates a fresh MCP server and Hevy client for each request. It validates the supplied key with Hevy, keeps no shared user session, and does not persist the key. The local server follows the same tool contract but runs on your machine and receives the key through its child-process environment.

In either mode, read tools retrieve data; mutation tools create or replace data only when your assistant calls them.

Guided prompts

These server-provided MCP prompts coordinate common multi-step workflows:

Prompt

Arguments

Workflow

analyze-workout-progress

Optional weeks from 1-12; default 4

Calls get-training-summary, then analyzes workout activity and body-measurement trends from the returned evidence.

create-workout-from-routine

Required routine_id and UTC start_time

Loads a routine, collects actual completed-set data and an end time, then creates a workout without inventing results.

NOTE

With MCP SDK v1.29.0, clients invokinganalyze-workout-progress with its default value must send arguments: {}. Omitting the entire arguments object is rejected by that SDK version before the default is applied.

Tools

hevy-mcp registers 22 tools. Read-only tools are safe for exploration; create and update tools are exposed with MCP mutation annotations so compatible clients can request confirmation.

Category

Tool

Description

Training analysis

get-training-summary

Summarize 1-12 weeks of workout activity and body-measurement trends in one call.

Workouts

get-workouts

List workouts in Hevy API order, not by start time, with exercise and timing details.

Workouts

get-workout

Get complete details for one workout by ID.

| Workouts | get-workout-events | List workout update and delete events since a timestamp. | | Workouts | create-workout | Create a completed workout in Hevy. | | Workouts | update-workout | Patch workout metadata by ID; is_private is required, while other omitted fields and all exercises remain unchanged. | | Workouts | replace-workout-exercises | Replace all exercises and sets; is_private is required and updated, while other workout metadata remains unchanged. | | Routines | search-routines | Search routine titles and return compact metadata for discovery. | | Routines | get-routines | List custom and default workout routines. | | Routines | get-routine | Get one routine and its exercise configuration by ID. | | Routines | create-routine | Create a reusable workout routine. | | Routines | update-routine | Replace an existing routine's content. |

| Routine folders | get-routine-folder | Get one routine folder's metadata by ID. | | Routine folders | create-routine-folder | Create a routine folder. |

| Exercise templates | get-exercise-template | Get complete metadata for one exercise template by ID. | | Exercise templates | search-exercise-templates | Search the full exercise catalog by title substring. | | Exercise templates | create-exercise-template | Create a custom exercise template. | | Exercise history | get-exercise-history | Get past performed sets for one exercise template. | | Body measurements | get-body-measurements | List dated body measurements. | | Body measurements | get-body-measurement | Get the body measurement entry for one date. | | Body measurements | create-body-measurement | Create a dated body measurement. | | Body measurements | update-body-measurement | Update the body measurement for an existing date. |

create-routine and update-routine require a top-level routine envelope with a non-empty exercises array; each exercise must contain at least one set, and fields use snake_case at every level:

{
	"routine": {
		"title": "Full Body A",
		"folder_id": 123,
		"notes": "First four exercises are the minimum viable workout",
		"exercises": [
			{
				"exercise_template_id": "30E293E3",
				"superset_id": null,
				"rest_seconds": 120,
				"notes": "Controlled active ROM",
				"sets": [
					{
						"type": "normal",
						"rep_range": {
							"start": 6,
							"end": 10
						}
					}
				]
			}
		]
	}
}

The Hevy API currently exposes no delete endpoints for workouts, routines, routine folders, exercise templates, or body measurements, so there are no corresponding delete tools.

Resources

Name

URI

Description

user-profile

hevy://user

Authenticated Hevy user profile.

workout-count

hevy://workout-count

Total number of workouts in the account.

exercise-templates

hevy://exercise-templates

Full formatted exercise template catalog.

routine-folders

hevy://routine-folders

Full formatted list of Hevy routine folders.

Hosted Cloudflare endpoint

The production MCP server is live at:

https://mcp.hevy-mcp.dev/mcp

It is the quickest way to use hevy-mcp: there is nothing to install or keep running locally, and it exposes the same 22 tools as the npm package and Docker image.

The Cloudflare Worker uses stateless Streamable HTTP at POST /mcp. Clients must send their Hevy API key as a fixed authorization header:

{
	"mcpServers": {
		"hevy": {
			"url": "https://mcp.hevy-mcp.dev/mcp",
			"headers": {
				"Authorization": "Bearer your-hevy-api-key"
			}
		}
	}
}

The bearer value is your Hevy API key, not an OAuth token. The Worker validates the key with Hevy on each request, does not store it, and forwards it upstream only as Hevy's required api-key header.

OAuth for Claude.ai and other remote MCP clients

The hosted production Worker is deployed with an OAUTH_KV namespace binding, so it exposes a full OAuth 2.1 layer for clients that cannot send a fixed header, such as Claude.ai custom connectors. Self-hosted Workers can opt in by following the OAUTH_KV setup in CONTRIBUTING.md:

  • RFC 8414 / RFC 9728 discovery metadata under /.well-known/

  • Client ID Metadata Documents (CIMD), with dynamic client registration (/register) as a fallback, and PKCE token exchange (/token)

  • An /authorize page where you paste your Hevy API key once; the key is validated with Hevy and stored encrypted inside the OAuth grant

Add the Worker URL ending in /mcp as a Claude.ai custom connector and complete the authorization flow in the browser. Direct Authorization: Bearer <hevy-api-key> requests keep working unchanged — the OAuth layer is purely additive — and rotating your Hevy API key invalidates every OAuth grant created with it.

OAuth access tokens last seven days and refresh tokens last 30 days. This reduces KV writes from frequent hourly refreshes while preserving automatic refresh for supported clients.

The endpoint does not expose legacy SSE or a GET event stream. Without the opt-in OAuth layer, clients that require OAuth discovery, dynamic registration, CIMD, or token refresh are not compatible unless they can send the fixed custom header above.

Self-host the Worker

A clean clone can deploy the portable TypeScript Wrangler configuration with npx wrangler deploy --x-new-config and receive a workers.dev URL. OAuth requires your own OAUTH_KV namespace; custom domains, routes, and observability destinations are optional account-owned settings. See CONTRIBUTING.md for setup and for the distinction between self-hosting and the maintainer-only named environments.

See CONTRIBUTING.md to deploy the Cloudflare Worker for self-hosted Streamable HTTP.

Advanced configuration

Setting

Default

Scope

Notes

HEVY_API_KEY

None; required

Local stdio or HTTP

Hevy API key from the Hevy app. Never pass it in a URL.

HEVY_MCP_API_TIMEOUT

60000 ms

Local stdio

Positive Hevy API timeout in milliseconds. Invalid values fall back to 60 seconds.

HEVY_MCP_DEBUG

Disabled

Local Node

Set to exactly 1 for privacy-bounded diagnostics on stderr. Stdout remains reserved for MCP JSON-RPC.

HEVY_MCP_HTTP_BEARER_TOKEN

None

Non-loopback HTTP

Required when --host is not loopback; use a separate token, never the Hevy API key.

HEVY_MCP_HTTP_MAX_SESSIONS

100

Local HTTP

Maximum established sessions, including sessions currently initializing; excess requests receive 429.

HEVY_MCP_HTTP_MAX_INITIALIZING

10

Local HTTP

Maximum concurrent session initializations; excess requests receive 503 and are not queued.

HEVY_MCP_HTTP_IDLE_TIMEOUT_MS

1800000 ms

Local HTTP

Idle sessions are evicted after 30 minutes; each session request resets the timer.

HEVY_MCP_HTTP_BODY_TIMEOUT_MS

30000 ms

Local HTTP

Stalled request bodies receive 408; values are bounded to five minutes.

HEVY_MCP_TELEMETRY

Enabled

Local Node

Set to exactly 0 before startup/import to disable Sentry and OTLP traces/metrics.

HEVY_MCP_TELEMETRY_DIAGNOSTICS

Enabled

Local Node

Set to exactly 0 to keep structural telemetry while suppressing exception messages and stacks.

XDG_CACHE_HOME

~/.cache

Local stdio

Changes the root for the npm update-check cache at hevy-mcp/update-check.json.

SENTRY_DSN

Packaged Sentry SaaS project DSN

Optional local Node telemetry

Sentry project DSN override. An empty value disables Sentry export. The Worker does not import Node telemetry.

SENTRY_RELEASE

hevy-mcp@<installed-version>

Optional local Node telemetry

Overrides the release label attached to local Sentry error events.

-h, --help

N/A

Local stdio CLI

Print supported options and exit.

-v, --version

N/A

Local stdio CLI

Print the installed version and exit.

The local Node executable uses stdio by default. Opt into local Streamable HTTP with:

HEVY_API_KEY=your-hevy-api-key npx hevy-mcp --transport http --host 127.0.0.1 --port 3000

The local MCP endpoint is http://127.0.0.1:3000/mcp; non-loopback binds require the separate HEVY_MCP_HTTP_BEARER_TOKEN environment variable. A Docker deployment must publish the port explicitly:

docker run --rm -p 3000:3000 -e HEVY_API_KEY -e HEVY_MCP_HTTP_BEARER_TOKEN \\
  ghcr.io/chrisdoc/hevy-mcp:latest --transport http --host 0.0.0.0 --port 3000

This Node HTTP mode is distinct from the stateless Cloudflare Worker HTTP endpoint described above: the Node server owns stateful client sessions, while the Worker is designed for hosted deployment and does not import Node code.

Cache behavior

search-exercise-templates and hevy://exercise-templates share a server-scoped in-memory catalog cache:

  • Entries live for five minutes, and the cache holds at most one catalog.

  • Concurrent catalog requests share an in-flight fetch when possible.

  • search-exercise-templates accepts refresh: true to invalidate the cache.

  • Each hosted Worker request gets a fresh cache, preventing cross-key sharing.

Local Node telemetry and privacy

The local Node package enables project telemetry by default. It is local Node behavior only; the Cloudflare Worker does not import Node telemetry. Set HEVY_MCP_TELEMETRY=0 before startup or import to disable all project telemetry. Only the literal value 0 opts out: an unset value, an empty value, 1, false, and every other value remain enabled. The master setting takes precedence over SENTRY_DSN and packaged or runtime OTEL_COLLECTOR_TOKEN credentials, so the disabled path creates no telemetry exporters or periodic metric readers and makes no telemetry network requests. SENTRY_DSN remains a Sentry-only setting; when telemetry is enabled, an empty value disables only Sentry export.

When enabled, actionable errors are sent to the Sentry project configured by SENTRY_DSN; Sentry performance tracing is disabled. Exception messages and stacks are bounded and scrubbed before export. Set HEVY_MCP_TELEMETRY_DIAGNOSTICS=0 to keep structural traces and metrics while suppressing those details. Traces and metrics continue to be sent to the collector at https://otel.chrisdoc.dev/v1/traces and https://otel.chrisdoc.dev/v1/metrics, which forward to Honeycomb. Metrics export every 30 seconds.

The API key is never exported and is not used to derive a user identity. A per-failure diagnostic ID and OTel trace ID may be attached to actionable errors for support correlation. Structured telemetry contains only bounded service, release, transport, tool, outcome, error, count, retry, duration, session, cache, workflow, API method, normalized endpoint, and status fields.

Exception messages and stacks are treated as diagnostic details: they are length-limited, scrubbed for credentials, URLs, and local home paths, and removed entirely when HEVY_MCP_TELEMETRY_DIAGNOSTICS=0. Prompts, tool arguments, tool results, request bodies, API keys, raw identifiers/queries, exact dates, workout/routine/folder/template/body-measurement content, names/titles/descriptions/notes, measurement values, arbitrary client metadata, and unnormalized endpoint paths remain prohibited.

Security and mutations

  • Keep HEVY_API_KEY out of source control, URLs, logs, and screenshots.

  • Local clients provide the key through the child process environment.

  • Hosted clients send the key only in the Authorization: Bearer header. The Worker validates each key with Hevy, does not store it, and sends it upstream only as Hevy's api-key header.

  • Browser requests must come from an exact allowlisted origin. The default allowlist includes Claude.ai, ChatGPT, VS Code for the Web, and github.dev; self-hosted deployments can override it with MCP_ALLOWED_ORIGINS.

  • Local development can copy .dev.vars.example to .dev.vars to disable Origin validation for MCP Inspector. PR preview Workers use the same development-only setting because their browser origins are dynamic. Never set MCP_DISABLE_ORIGIN_CHECK=true on a production Worker.

  • Create operations can produce duplicates when retried. Update operations replace existing records. Review tool inputs and use client confirmations.

Troubleshooting

  • The server does not appear: restart or reconnect your MCP client after changing its configuration.

  • npx fails: confirm that Node.js 20 or newer is installed, then run npx -y hevy-mcp --version in a terminal.

  • Codex cannot see the server: run codex mcp list, then start a new Codex session after confirming the hevy entry exists.

  • Hevy API returns 401: the key is invalid, expired, revoked, or misconfigured. Verify or create an active key at Hevy's API settings, then restart the client.

  • Hosted authentication fails: confirm the key belongs to a Hevy PRO account and is sent as Authorization: Bearer <HEVY_API_KEY>.

  • Local authentication fails: confirm the key is active and available to the MCP child process as HEVY_API_KEY.

  • Need diagnostics: set HEVY_MCP_DEBUG=1. Diagnostic output goes to stderr and does not interfere with MCP messages on stdout.

If you find a bug or have a feature request, open an issue.

Contributing

Contributions are welcome. Developer setup, testing lanes, generated-client workflows, Cloudflare Worker deployment, and pull request rules are documented in CONTRIBUTING.md.

Use mise for the pinned Node.js and pnpm versions, then run the deterministic unit lane. It does not need a live Hevy API key:

mise install
mise exec -- pnpm install
mise exec -- pnpm run test:unit

License and acknowledgements

Available Tools

23 tools
create-body-measurementA

Create a body measurement entry for a given date. All measurement fields are optional; null values are treated as omitted, since the Hevy API does not support clearing individual fields. Returns 409 if an entry already exists for that date — use update-body-measurement instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesThe date of the body measurement (YYYY-MM-DD). Must be unique — returns 409 if an entry already exists for this date.
hipsNoHips circumference in centimeters
waistNoWaist circumference in centimeters
neckCmNoNeck circumference in centimeters
abdomenNoAbdomen circumference in centimeters
chestCmNoChest circumference in centimeters
leftCalfNoLeft calf circumference in centimeters
weightKgNoBody weight in kilograms
leftThighNoLeft thigh circumference in centimeters
rightCalfNoRight calf circumference in centimeters
fatPercentNoBody fat percentage
leanMassKgNoLean body mass in kilograms
rightThighNoRight thigh circumference in centimeters
shoulderCmNoShoulder circumference in centimeters
leftBicepCmNoLeft bicep circumference in centimeters
rightBicepCmNoRight bicep circumference in centimeters
leftForearmCmNoLeft forearm circumference in centimeters
rightForearmCmNoRight forearm circumference in centimeters

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses that null values are treated as omitted (not clearing individual fields) and that a 409 is returned on duplicate date. These are important behavioral traits beyond the annotations (all false). No contradictions with annotations.

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 three sentences, front-loading the main action. Every sentence provides necessary information without waste: creation, null handling, and conflict guidance.

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?

Given 18 parameters and no output schema, the description covers the essential aspects: unique constraint, optional fields, null handling, and alternative tool for updates. Minor gap: no mention of the success response (e.g., what is returned).

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 100% schema description coverage, the baseline is 3. The description adds the context that all measurement fields are optional and that nulls are omitted, which is not explicitly stated in the schema descriptions for individual parameters. This adds value beyond the schema.

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 action ('Create'), the resource ('body measurement entry'), and the key constraint ('for a given date'). It also distinguishes from the sibling tool 'update-body-measurement' by mentioning the 409 conflict and suggesting its use instead.

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 explicitly tells the agent to use 'update-body-measurement' if an entry already exists (returns 409), which provides clear guidance on when not to use this tool. However, it does not elaborate on other usage scenarios or prerequisites.

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

create-exercise-templateC

Create a custom exercise template with title, type, equipment, and muscle groups.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
muscleGroupYes
exerciseTypeYes
otherMusclesNo
equipmentCategoryYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations indicate the tool is not read-only and not destructive, which is consistent with a create operation. However, the description adds no additional behavioral context beyond what annotations already convey. No hidden behaviors are disclosed.

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 a single efficient sentence with no waste. It could be slightly expanded to add value, but it is well-structured 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?

Given the tool has 5 parameters (4 required) with enumerations and no output schema, the description is insufficient. It does not explain return value, error handling, or any constraints like uniqueness or required permissions. The completeness is inadequate for the complexity.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It names four of the five parameters (title, type, equipment, muscle groups) but omits the optional 'otherMuscles' and provides no additional meaning or constraints beyond the parameter names. This is minimal value.

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 'create' and resource 'exercise template', and lists the key fields (title, type, equipment, muscle groups). This distinguishes it from sibling tools like search-exercise-templates or other create tools.

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, nor any prerequisites or exclusions. The context of creating an exercise template is implied by the name, but no explicit when-to-use or when-not-to-use information is given.

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

create-routineA

Create a new workout routine in your Hevy account. Requires a title and at least one exercise with sets. Optionally assign to a folder. Returns the full routine details including the new routine ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNo
titleYes
folderIdNo
exercisesNo

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate write operation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds that it 'Returns the full routine details including the new routine ID,' which is useful but doesn't disclose other behavioral traits like authentication needs or 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 two sentences, front-loaded with the main action, and contains no wasted words. Every sentence adds value.

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 tool with 4 parameters, one required, and nested objects, the description covers the essential requirements and return value. However, it omits the notes parameter and could elaborate on folder behavior. Still, sufficient for an agent to understand the tool's role.

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 must compensate. It mentions the title is required, exercises need sets, and folder is optional, but doesn't detail the structure of exercises or other parameters like notes. This provides basic understanding but not thorough explanation.

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 'Create a new workout routine in your Hevy account.' It uses a specific verb ('Create') and resource ('workout routine'), and distinguishes from sibling tools like create-exercise-template or create-workout by specifying 'workout routine'.

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 explicitly states requirements: 'Requires a title and at least one exercise with sets. Optionally assign to a folder.' This gives clear context for when to use the tool, but doesn't mention when not to use or list alternative tools.

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

create-routine-folderA

Create a new routine folder in your Hevy account. Requires a name for the folder. Returns the full folder details including the new folder ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

TDQS

A4.2/5.0
Behavior4/5

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

The description confirms the tool creates a new resource and returns the full folder details, including the new ID. Annotations indicate it is not read-only and not destructive, which is consistent. The description adds value by stating the return expectation, though it does not cover potential side effects like duplicate handling or rate limits.

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, consisting of two sentences (25 words) that are front-loaded with the purpose. Every sentence adds essential information: what it does, the required input, and the output. There is no redundancy or extraneous content.

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?

Given the tool's simplicity (one required parameter, no output schema, no nested objects), the description covers the core aspects: action, input, and expected return. It lacks details about error conditions or uniqueness constraints, but these are not essential for basic usage. The description is adequate for an agent to use the tool 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 input schema has a single required parameter 'name' with 0% description coverage. The description explains that the name is for the folder and is required, thus adding meaning beyond the schema. While it does not elaborate on constraints (e.g., uniqueness), it provides sufficient context for the agent to understand the parameter's role.

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 tool's purpose: creating a new routine folder in the Hevy account. It specifies the action ('create'), the resource ('routine folder'), and the scope ('your Hevy account'). This distinguishes it from sibling tools like 'create-routine' or 'create-workout'.

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 that the tool is used when you need to create a routine folder, but it does not provide guidance on when not to use it or alternatives. It lacks explicit context about prerequisites or scenarios where other tools (e.g., 'update-routine' or 'get-routine-folders') would be more appropriate.

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

create-workoutA

Create a new workout in your Hevy account. Requires title, start/end times, and at least one exercise with sets. Returns the complete workout details upon successful creation including the newly assigned workout ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
endTimeYes
exercisesNo
isPrivateNo
startTimeYes
descriptionNo

TDQS

A4/5.0
Behavior4/5

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

Description adds value beyond annotations by specifying that creation requires valid data and returns the newly assigned ID. Annotations already indicate readOnlyHint=false and destructiveHint=false, so no contradiction. However, it does not mention auth needs or rate limits, which would elevate transparency further.

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 sentences, front-loaded with purpose, then requirements, then output. No redundant words. Efficient and clear.

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?

Given no output schema, description appropriately states return value. Input complexity is high (nested arrays), but description covers core requirements. Missing details on description and isPrivate parameters, but overall adequate for a creation tool.

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 description must compensate. It mentions title, start/end times, and that exercises must have sets, covering 4 of 6 parameters (title, startTime, endTime, exercises). Missing description and isPrivate. This adds some meaning but is incomplete.

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?

Description clearly states the action 'Create a new workout', specifies the resource ('workout in your Hevy account'), and outlines requirements (title, times, exercises) and return value (workout details with ID). This distinguishes it from siblings like get-workout or update-workout.

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?

Description implies when to use (to create a workout) but does not explicitly state when not to use it or provide comparisons to siblings like create-routine or update-workout. No exclusions or alternatives mentioned, so guidance is limited.

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

get-body-measurementA
Read-only

Get a single body measurement by date. Returns all measurement fields for the specified date.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesThe date of the body measurement (YYYY-MM-DD)

Output Schema

ParametersJSON Schema
NameRequiredDescription
bodyMeasurementYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, and the description adds that it returns all measurement fields for the specified date. This adds useful context beyond the annotations.

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 sentences that are front-loaded and concise. Every sentence serves a purpose with no waste.

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?

Given the tool's simplicity, one parameter, and presence of an output schema, the description covers the core behavior. No additional information is needed.

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 coverage is 100%, with the date parameter fully described. The description confirms 'by date' but does not add significant new meaning beyond the schema.

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 states the tool gets a single body measurement by date, using a specific verb and resource. It distinguishes from the sibling 'get-body-measurements' by explicitly saying 'single'.

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 (when you need a measurement for a specific date) but does not explicitly mention alternatives or when not to use. The context is clear enough for a simple tool.

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

get-body-measurementsB
Read-only

Get a paginated list of body measurements for the authenticated user. Returns measurements including weight, body fat, and various circumference measurements.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
pageSizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
bodyMeasurementsYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the description's mention of pagination adds useful context beyond the safety profile. However, it does not disclose other behavioral details like default ordering or response limits.

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-load the action and resource, with no wasted words. It effectively communicates the core functionality.

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?

While an output schema exists, the description does not cover parameter semantics, which are essential for correct tool usage. The lack of parameter information makes the tool underspecified for an agent.

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

Parameters1/5

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

The description mentions pagination qualitatively but fails to explain the two parameters ('page' and 'pageSize') or their constraints (e.g., max pageSize=10). With 0% schema description coverage, this is a critical gap.

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 tool retrieves a paginated list of body measurements for the authenticated user, specifying included metrics (weight, body fat, circumference). This distinguishes it from siblings like 'get-body-measurement' (singular) and mutation tools like 'create-body-measurement'.

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 use for listing measurements but provides no explicit guidance on when to use this versus alternative listing tools (e.g., no comparison to search tools). No when-not-to conditions or prerequisites are mentioned.

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

get-exercise-historyA
Read-only

Get past sets for a specific exercise template, optionally filtered by start and end dates.

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateNoISO 8601 end date for filtering history
startDateNoISO 8601 start date for filtering history
exerciseTemplateIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
exerciseHistoryYes

TDQS

A3.6/5.0
Behavior3/5

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

The description does not reveal behavioral details beyond what annotations provide. The readOnlyHint=true annotation already indicates a safe read operation, so the description adds no extra context about pagination, ordering, authentication, or potential limits.

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 a single sentence of 13 words, front-loading the core purpose. Every word is necessary, with no redundancy or filler.

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?

Given the presence of an output schema (not shown), the description need not detail return values. For a simple query tool with a required parameter and two optional filters, the description is sufficiently complete. Minor improvement would be mentioning ordering or default range.

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 67% (startDate and endDate have descriptions, exerciseTemplateId has none). The description's phrase 'specific exercise template' implies exerciseTemplateId's role, but does not detail its format or source. Overall, marginal added value over schema.

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 'past sets for a specific exercise template', with optional date filtering. It distinguishes from sibling tools like 'get-exercise-template' which retrieves template metadata, and 'get-workout' which retrieves workout details, not set history.

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, such as when to fetch sets from a workout versus historical data. No exclusions or prerequisites mentioned, leaving the agent to infer usage from sibling tool names.

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

get-exercise-templateA
Read-only

Get complete details of a specific exercise template by its ID, including name, category, equipment, muscle groups, and notes.

ParametersJSON Schema
NameRequiredDescriptionDefault
exerciseTemplateIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
exerciseTemplateYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true. Description adds that it returns 'complete details' with specific fields. No contradictions. Additional behavioral context like error handling or ID format not provided, but acceptable given annotations.

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, front-loaded with purpose, lists included fields concisely. No wasted words.

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 simple get-by-ID tool with output schema present, description covers purpose and returned fields. Lacks details like error behavior or ID format, but these are secondary.

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

Parameters2/5

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

Schema has 0% description coverage for the single parameter exerciseTemplateId. Description does not explain its meaning beyond the name and the fact it's an ID. No format, example, or additional context.

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?

Description states verb 'get', resource 'exercise template', scope 'by its ID', and lists specific fields returned (name, category, equipment, muscle groups, notes). Clearly distinguishes from siblings like get-exercise-templates (list) and search-exercise-templates.

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?

Implicitly clear: use when you have an ID and need full details. No explicit when-not-to-use or alternatives, but context from siblings and name makes it obvious.

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

get-exercise-templatesA
Read-only

Get a paginated list of exercise templates (default and custom) with details like name, category, equipment, and muscle groups. Useful for browsing or searching available exercises.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
pageSizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
exerciseTemplatesYes

TDQS

A3.7/5.0
Behavior3/5

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

The readOnlyHint annotation is already present, and the description adds context about pagination but does not elaborate on behavioral details like authorization or rate limits. Given annotations cover the safety profile, the description provides adequate but not exceptional transparency.

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 main action. It efficiently conveys the tool's purpose without unnecessary verbiage.

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 basic purpose and result, but lacks details on pagination behavior or error handling. Since an output schema exists, return values are documented elsewhere, yet some operational context is missing.

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

Parameters2/5

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

With 0% schema description coverage, the description must compensate but only mentions 'paginated list' without explaining page and pageSize parameters. It does not add meaning beyond the schema, leaving agents to infer parameter semantics from names alone.

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 tool retrieves a paginated list of exercise templates, specifying types (default/custom) and example details. It distinguishes itself from sibling tools like get-exercise-template (singular) and search-exercise-templates by focusing on browsing a list.

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 indicates it's useful for browsing or searching, providing clear usage context. However, it does not explicitly mention when not to use it or compare with search-exercise-templates, lacking full guidance on alternatives.

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

get-routineA
Read-only

Get a routine by its ID using the direct endpoint. Returns all details for the specified routine.

ParametersJSON Schema
NameRequiredDescriptionDefault
routineIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
routineYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the description's mention of 'Returns all details' adds some context. However, it does not disclose any additional behavioral traits such as authentication requirements or response structure beyond the output schema.

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 wasted words. The purpose is front-loaded, making it easy to scan.

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 simple get-by-ID tool with one parameter and an output schema, the description is largely complete. It could mention that the output schema documents the returned details, but this is not necessary given the context.

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

Parameters2/5

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

Schema description coverage is 0%, and the description only refers to 'by its ID' without elaborating on the routineId parameter's format, example values, or source. This provides minimal value beyond the schema's type and minLength.

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 'routine by its ID', and specifies that it returns all details. This accurately distinguishes it from sibling tools like 'get-routines' (plural) and 'get-routine-folder'.

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 usage when a specific routine ID is known, but does not explicitly mention when not to use it or suggest alternatives like 'get-routines' for listing. The context is clear but lacks exclusions.

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

get-routine-folderA
Read-only

Get complete details of a specific routine folder by its ID, including name, creation date, and associated routines.

ParametersJSON Schema
NameRequiredDescriptionDefault
folderIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
routineFolderYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, indicating a safe read operation. The description adds value by specifying the returned data (name, creation date, associated routines), going beyond annotations. No behavioral contradictions.

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 a single, well-structured sentence that immediately states the tool's purpose. It is concise with no redundant words or unnecessary details.

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?

Given the tool's simplicity (one parameter, no nested objects) and the presence of an output schema, the description is fairly complete. It mentions key return fields, though it could elaborate on the structure of 'associated routines'.

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

Parameters2/5

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

The schema has one parameter (folderId) with 0% documentation. The description only says 'by its ID', adding minimal meaning. It fails to explain parameter constraints (e.g., expected format, example values) or how it relates to folder ID semantics.

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 it retrieves complete details of a specific routine folder by ID, listing included fields (name, creation date, associated routines). This distinguishes it from sibling tools like 'get-routine-folders' (which lists all folders) and 'get-routine' (which retrieves a routine).

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 when you have a folder ID and need details, but it does not explicitly state when to use this tool versus alternatives, nor does it provide conditions or exclusions. No mention of prerequisites or when not to use.

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

get-routine-foldersA
Read-only

Get a paginated list of your routine folders, including both default and custom folders. Useful for organizing and browsing your workout routines.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
pageSizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
routineFoldersYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the read-only behavior is covered. The description adds pagination context but does not disclose other traits like rate limits or response format beyond what the output schema provides.

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 consists of two concise sentences, front-loading the primary function and adding a brief usage note with no redundant or unnecessary words.

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?

With an output schema present, the description adequately covers the tool's purpose. It mentions default and custom folders and pagination, but lacks details on parameter usage and edge cases like empty results, which would improve completeness.

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

Parameters2/5

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

Schema description coverage is 0%, yet the description does not explain the 'page' and 'pageSize' parameters, leaving their purpose and behavior undocumented. Common pagination parameters may be inferred, but the description should add value here.

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 action ('Get a paginated list') and resource ('your routine folders'), and distinguishes from siblings like 'get-routine-folder' (singular) and 'create-routine-folder' by specifying it returns both default and custom folders.

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 organizing and browsing routines but does not explicitly state when to use this tool versus alternatives like 'get-routine-folder' or provide exclusions. No when-not-to-use guidance.

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

get-routinesA
Read-only

Get a paginated list of your workout routines, including custom and default routines. Useful for browsing or searching your available routines.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
pageSizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
routinesYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, indicating a safe read operation. The description adds that the list is paginated and includes custom and default routines, which is useful context. However, it does not disclose pagination details (e.g., page numbering, sorting) or authentication requirements. Given the annotations, the description adds moderate value but could say more about behavior.

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 two sentences: the first states the function, the second adds a use case. Every word is necessary; no repetition or fluff. It is appropriately sized and front-loaded with the core purpose.

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?

Given the tool's simplicity (two optional parameters, output schema exists, annotations present), the description covers the main purpose and usage context. It mentions that custom and default routines are included. While it could mention sorting or folder context, the output schema likely provides return value details, so completeness is high but not maximal.

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

Parameters1/5

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

The schema description coverage is 0%, but the description does not explain the parameters 'page' and 'pageSize' at all. It only mentions 'paginated list' without linking to the parameters. The description fails to compensate for the lack of schema descriptions, leaving the agent to infer parameter usage from the schema defaults and constraints alone.

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 a paginated list of your workout routines, including custom and default routines.' It uses a specific verb ('Get'), resource ('routines'), and scope ('paginated list, including custom and default'). It distinguishes itself from siblings like 'get-routine' (singular) and 'get-routine-folders' by focusing on listing all routines.

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 says 'Useful for browsing or searching your available routines,' which provides a clear use case. While it does not explicitly state when not to use it (e.g., for a specific routine, use get-routine), the context is clear and the sibling tools imply alternatives. No exclusions are given, but the guidance is sufficient.

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

get-user-infoA
Read-only

Get the authenticated user's account info, including user ID, display name, and public profile URL. Useful for verifying which account the API key belongs to.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
userYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already set readOnlyHint=true. The description reinforces this by describing a read operation and adds context about returned fields and purpose. No additional behavioral traits needed; no contradictions.

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 sentences with no wasted words. The first sentence states the core action and outputs; the second provides a concrete use case. Well-structured and front-loaded.

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?

Given the simplicity of the tool (zero parameters, output schema exists), the description covers everything needed: purpose, output fields, and use case. It is complete and leaves no gaps.

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?

No parameters exist, and schema coverage is 100%. The description does not need to add parameter details; it correctly focuses on the output. Baseline score of 4 for zero-parameter tools is appropriate.

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 authenticated user's account info' and lists specific fields (user ID, display name, public profile URL). It is unambiguous and distinct from sibling tools, which are all about body measurements, exercises, routines, and workouts.

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 provides a clear use case: 'Useful for verifying which account the API key belongs to.' While it does not explicitly mention when not to use or alternatives, the context makes it obvious as there are no sibling tools for user info.

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

get-workoutA
Read-only

Get complete details of a specific workout by ID. Returns all workout information including title, description, start/end times, and detailed exercise data.

ParametersJSON Schema
NameRequiredDescriptionDefault
workoutIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
workoutYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true, so description adds limited behavioral context beyond stating what data is returned. No mention of error handling, auth, or other constraints, but with annotations this is acceptable.

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 sentences, front-loaded with core action, no fluff. Efficiently states purpose and return contents.

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 simple single-parameter tool with an output schema, the description covers the main return fields. Could mention error behavior (e.g., 404 if ID not found) but overall adequate given low complexity.

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

Parameters2/5

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

Schema coverage is 0%, yet description only says 'by ID' without explaining format, source, or constraints for workoutId. The parameter name is somewhat self-explanatory but description should compensate more.

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 uses a specific verb 'Get' and resource 'workout', specifying retrieval by ID. It clearly distinguishes from siblings like 'get-workouts' (plural) which lists workouts, not a single one.

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?

Implies usage when needing full details of a specific workout, but lacks explicit when-not-to-use or mention of alternatives like 'get-workouts' or 'get-workout-count'.

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

get-workout-countA
Read-only

Get the total number of workouts on the account. Useful for pagination or statistics.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, making the safe read nature clear. The description adds that it returns a count, but no further behavioral context (e.g., response format, pagination details) beyond what annotations provide.

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?

A single sentence that perfectly conveys the purpose and use cases with zero waste. Front-loaded and efficient.

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?

Given no parameters, an output schema existing, and annotations covering safety, the description is fully complete for an agent. It adds the needed context for pagination/statistics use cases.

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?

No parameters exist, so baseline is 4. The description doesn't add parameter info (unnecessary) and remains clear about the tool's function.

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?

Clearly states it returns the total number of workouts on the account, distinguishing from sibling tools like get-workouts (list) and get-workout (single). The verb 'get' and noun 'total number of workouts' specify exactly what the tool does.

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?

Explicitly mentions usefulness for pagination or statistics, providing clear context for when to use. Does not explicitly exclude other scenarios or compare to siblings, but the guidance is helpful enough.

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

get-workout-eventsA
Read-only

Retrieve a paged list of workout events (updates or deletes) since a given date. Events are ordered from newest to oldest. The intention is to allow clients to keep their local cache of workouts up to date without having to fetch the entire list of workouts.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
sinceNo1970-01-01T00:00:00Z
pageSizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
eventsYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, and the description confirms it is a read operation. The description adds ordering (newest to oldest) and paging behavior, which is valuable beyond the annotation.

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 concise with three sentences. The first sentence states the core function, the second adds ordering, and the third explains the intent. No unnecessary words.

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?

Given the existence of an output schema and the context of sibling tools, the description adequately explains the tool's purpose and behavior for cache synchronization. It could include more parameter details but is complete for the intended use.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not detail individual parameters. It implicitly references 'since' and paging but lacks specifics on defaults, formats, or constraints that would help the agent.

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 tool retrieves a paged list of workout events (updates or deletes) since a given date, ordered newest to oldest. It differentiates from siblings like get-workout and get-workouts by focusing on incremental cache updates.

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 explicitly states the intended use case: allow clients to keep their local cache up to date without fetching entire list. It does not explicitly exclude other uses, but the guidance is clear and contextually appropriate.

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

get-workoutsA
Read-only

Get a paginated list of workouts. Returns workout details including title, description, start/end times, and exercises performed. Results are ordered from newest to oldest.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
pageSizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
workoutsYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true (safe read). The description adds context about pagination behavior and ordering (newest first), which goes beyond annotations and helps the agent understand the tool's behavior. However, it does not mention potential edge cases like empty lists or error handling.

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?

Two sentences, front-loaded with the main purpose. No wasted words, but could be slightly more concise by merging the second and third parts. Overall well-structured.

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?

Given the presence of an output schema (which describes return values), the description provides sufficient context about what the workout details include (title, description, times, exercises). It does not mention pagination metadata, but the output schema likely covers that. Missing any mention of scope (e.g., all user's workouts) is a minor gap.

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

Parameters2/5

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

Schema description coverage is 0% (no parameter descriptions in schema). The description only says 'paginated list', implying page and pageSize parameters, but does not explain their constraints (e.g., page is a positive integer, pageSize max 10). The agent must infer from schema defaults and constraints, which is insufficient for a 0% coverage.

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 it returns a paginated list of workouts with ordering from newest to oldest. This distinguishes it from sibling tools like 'get-workout' (single workout) and 'get-workout-count' (count only). The verb 'Get' and resource 'list of workouts' are specific and clear.

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?

No explicit guidance on when to use this tool vs alternatives (e.g., get-workout for a single workout, get-workout-count for counts). The context is implied by tool names, but the description does not explicitly state usage boundaries.

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

search-exercise-templatesA
Read-only

Search exercise templates by name with optional muscle group filter. Fetches all templates from the Hevy API on first call, caches the catalog in memory with a bounded TTL cache, and reuses it for subsequent searches. Use refresh:true to force a re-fetch.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesCase-insensitive substring to match against exercise template titles
refreshNoSet to true to invalidate the catalog cache and re-fetch all templates from the API
primaryMuscleGroupNoOptional filter to restrict results to a specific primary muscle group

Output Schema

ParametersJSON Schema
NameRequiredDescription
exerciseTemplatesYes

TDQS

A4.1/5.0
Behavior4/5

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

The description discloses caching behavior: first call fetches all templates, caches with bounded TTL, and reuse. It also explains the refresh parameter. This adds value beyond annotations (readOnlyHint). However, it does not specify TTL duration or cache limits.

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 three sentences, front-loaded with the core purpose, and every sentence adds value. No wasted words or repetition.

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?

Given the schema covers all parameters, annotations provide readOnlyHint, and an output schema exists, the description provides sufficient context about caching behavior and refresh mechanism. No obvious gaps for a search tool.

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 coverage is 100%, so baseline is 3. The description adds minimal value: it mentions the muscle group filter and refresh behavior, but these are also described in the schema. No new parameter semantics are introduced.

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 purpose: 'Search exercise templates by name with optional muscle group filter.' It uses a specific verb (search) and resource (exercise templates), and distinguishes from sibling tools that fetch by ID or list all.

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 through context (search by name, optional filter) but does not explicitly advise when to use this tool over siblings like get-exercise-templates. No when-not or alternative guidance is provided.

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

update-body-measurementA
DestructiveIdempotent

Update an existing body measurement entry for a given date. Only the fields you provide are sent and updated; null values are treated as omitted, since the Hevy API does not support clearing individual fields. Requires at least one measurement field. Returns 404 if no entry exists for the date.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesThe date of the body measurement to update (YYYY-MM-DD). Must already exist — returns 404 otherwise.
hipsNoHips circumference in centimeters
waistNoWaist circumference in centimeters
neckCmNoNeck circumference in centimeters
abdomenNoAbdomen circumference in centimeters
chestCmNoChest circumference in centimeters
leftCalfNoLeft calf circumference in centimeters
weightKgNoBody weight in kilograms
leftThighNoLeft thigh circumference in centimeters
rightCalfNoRight calf circumference in centimeters
fatPercentNoBody fat percentage
leanMassKgNoLean body mass in kilograms
rightThighNoRight thigh circumference in centimeters
shoulderCmNoShoulder circumference in centimeters
leftBicepCmNoLeft bicep circumference in centimeters
rightBicepCmNoRight bicep circumference in centimeters
leftForearmCmNoLeft forearm circumference in centimeters
rightForearmCmNoRight forearm circumference in centimeters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations indicate destructive and idempotent. Description adds critical details: partial update semantics, null handling, minimum field requirement, and 404 response. No contradictions.

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?

Four short, direct sentences. Front-loaded with purpose, then key constraints. No fluff.

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 mutation tool with 18 parameters, the description covers essential behavior, prerequisites, and error case. Could mention successful return value, but not mandatory given no output schema.

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 has 100% coverage with descriptions. The description adds value beyond schema: clarifies null meaning, imposes 'at least one measurement field' constraint, and explains partial update behavior.

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 it updates an existing body measurement entry for a given date. The phrase 'existing' distinguishes it from create-body-measurement. It explains partial update behavior and prerequisites.

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?

Provides explicit guidance: only updates existing entries, requires at least one measurement field, nulls omitted, returns 404 if missing. Lacks explicit comparison to alternatives, but the sibling list suggests create-body-measurement for new entries.

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

update-routineA
DestructiveIdempotent

Update an existing routine by ID. You can modify the title, notes, and exercise configurations. Returns the updated routine with all changes applied.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNo
titleYes
exercisesNo
routineIdYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations provide destructiveHint=true and idempotentHint=true. Description confirms mutation ('Update', 'changes applied'). No contradictions, but no additional behavioral context beyond annotations.

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 purpose. Every word adds value; no redundancy.

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 mutation tool with annotations. Lacks details on exercises parameter constraints (e.g., required fields) and validation rules. Output schema would help but is absent.

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

Parameters2/5

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

Schema coverage is 0%, making description critical. Description only lists 'title, notes, and exercise configurations' but does not explain routineId or elaborate on exercise structure. Missing detail for complex nested params.

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?

Description clearly states action 'Update', resource 'routine by ID', and what can be modified (title, notes, exercise configurations). Returns updated routine. Distinguishes from siblings like create-routine or get-routine.

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?

Implies use for existing routines needing modification ('existing routine by ID'). Does not explicitly contrast with create or read tools, but context is clear.

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

update-workoutA
DestructiveIdempotent

Update an existing workout by ID. You can modify the title, description, start/end times, privacy setting, and exercise data. Returns the updated workout with all changes applied.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
endTimeYes
exercisesNo
isPrivateNo
startTimeYes
workoutIdYes
descriptionNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and idempotentHint=true. The description adds that the tool 'Returns the updated workout with all changes applied', which is useful but does not elaborate on additional side effects, authorization needs, or constraints beyond what annotations and schema imply.

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 two sentences (24 words), front-loaded with the core action, and contains no redundant or superfluous information. Every phrase adds necessary context.

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 7 parameters, a complex nested exercises schema, no output schema, and no parameter descriptions, the description is too minimal. It fails to explain update behavior (partial vs full replacement), optionality of fields, or exercise/set structure, leaving significant gaps for an AI agent.

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 carries the burden. It lists modifiable fields but does not explain parameter formats (e.g., ISO8601 for dates) or the structure of 'exercises' and nested objects. This adds marginal value over property names, earning a baseline score.

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 'Update an existing workout by ID' with a specific verb and resource, and enumerates modifiable fields (title, description, times, privacy, exercises). This distinguishes it from sibling tools like create-workout or get-workout.

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 by stating 'Update an existing workout' but does not explicitly guide when to use this tool versus alternatives like create-workout. No exclusions or prerequisites are mentioned, relying on the tool name for differentiation.

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

TDQS

A3.6/5.0
Disambiguation5/5

Each tool targets a distinct resource-action pair (e.g., create-routine, get-workout). There is no ambiguity between tools; even similar tools like get-exercise-templates and search-exercise-templates have clear differences in behavior (search offers filtering and caching, get returns all).

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., create_body_measurement, get_routine_folders). No mixing of conventions or irregular verbs. The naming is predictable and easy to understand.

Tool Count4/5

26 tools is on the higher end but reasonable for a fitness tracking server covering routines, workouts, exercises, body measurements, webhooks, and user info. The count could be slightly reduced by consolidating some tools, but it remains well-scoped overall.

Completeness2/5

Significant lifecycle gaps exist: there are no delete tools for routines or workouts, and no update/delete tools for exercise templates. The surface allows creating and reading but not full CRUD, which will cause failures when agents need to remove or modify these resources.

Maintenance

ActivityActive
ResponsivenessResponsive

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
    D
    maintenance
    An MCP server that connects AI clients to the Hevy workout tracking app, allowing users to manage routines and exercises. It enables reading workout history and logging new fitness sessions through simple natural language commands.
  • A
    license
    Not graded
    quality
    C
    maintenance
    Python MCP server for the Hevy fitness app. Gives Claude full access to your Hevy data. Log workouts, manage routines, track body measurements, browse exercises, and more. Covers all 25 endpoints of the official Hevy API.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    An MCP server that interfaces with the Hevy fitness tracking API, enabling AI assistants to manage workouts, routines, exercise templates, and more via natural language.
    26
    6,107
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A Model Context Protocol (MCP) server that provides AI assistants with access to the Hevy fitness tracking API. This allows you to log workouts, manage routines, browse exercises, and track your fitness progress directly through AI chat interfaces.
    17
    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/chrisdoc/hevy-mcp'

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