Skip to main content
Glama
diecoscai

@diecoscai/hevy-mcp

by diecoscai

@diecoscai/hevy-mcp

Model Context Protocol server for the Hevy fitness API. Manage workouts, routines, exercises, and body measurements from any MCP-compatible client — Claude Desktop, Claude Code, Cursor, VS Code, and anything else that speaks MCP over stdio.

npm version CI license node

Overview

This MCP server exposes the public Hevy API (api.hevyapp.com/v1) as 22 strongly-typed tools. LLM agents can list workouts, create routines, look up exercise templates, track body measurements, and follow a delta-sync feed — all without bespoke glue code on the client.

Design goals:

  • Safe by default. Write operations return a { dry_run: true, would_send: { ... } } preview unless HEVY_MCP_ALLOW_WRITES=1 is set. The Hevy API has no DELETE on any resource, so accidental writes are permanent; dry-run is the brake.

  • Validated at the edge. Every tool input is checked with Zod before a single byte crosses the network. Oversized titles, unknown fields, out-of-range page sizes, and invalid enums fail fast with SEP-1303-shaped errors the model can self-correct.

  • Zero extra setup. Authentication is a single environment variable — HEVY_API_KEY. No wizards, no config files; just paste the snippet for your client.

Schemas are generated from Hevy's own OpenAPI spec and re-synced automatically, so the server adapts to upstream changes instead of drifting. Writes are dry-run by default; every public endpoint is covered.

Related MCP server: production-grade-mcp-agentic-system

Project status

Maintenance mode. Feature-complete for Hevy's public API. Schemas are generated from Hevy's OpenAPI spec; a scheduled workflow re-syncs them weekly and opens a PR on any change, and a live integration run catches undocumented server changes. Bug reports and PRs welcome via the issue tracker.

Prerequisites

Quick setup

The fastest path is the setup subcommand — it validates your key and writes a config file the server picks up automatically:

npx @diecoscai/hevy-mcp setup

It prompts for your Hevy Pro API key (from https://hevy.com/settings?developer), checks it against the live API, asks whether to enable write operations, and saves everything to ~/.config/hevy-mcp/config.json (mode 0600). Then add the server to your MCP client with no env block needed:

{
  "mcpServers": {
    "hevy": {
      "command": "npx",
      "args": ["-y", "@diecoscai/hevy-mcp"]
    }
  }
}

Restart the client — the 22 Hevy tools appear in the tools panel.

Prefer environment variables? Skip setup and pass HEVY_API_KEY (and optionally HEVY_MCP_ALLOW_WRITES=1) in the env block instead — see Configuration. Env vars always take precedence over the config file.

Note on bare invocation. Running npx @diecoscai/hevy-mcp with no arguments starts a stdio MCP server and blocks, waiting for an MCP client to connect over its stdin/stdout. You don't run it in a terminal yourself — your MCP client spawns it. Use npx @diecoscai/hevy-mcp --help, --version, or setup for a non-blocking invocation.

Write tools are dry-run by default. The first time you ask the server to create or update anything (a workout, a routine, a body measurement) you'll see a preview payload, not a real change. Enable writes by answering "yes" during setup, or by setting HEVY_MCP_ALLOW_WRITES=1 in the env block — see Safety.

Run from source

You can also run the server directly from a local clone instead of via npx. Useful if you want to pin a specific commit, debug a tool locally, or run an unreleased version. Contributors should use Development below instead.

git clone https://github.com/diecoscai/hevy-mcp.git
cd hevy-mcp
npm ci
npm run build

Then point your MCP client at the built entry instead of npx @diecoscai/hevy-mcp:

{
  "mcpServers": {
    "hevy": {
      "command": "node",
      "args": ["/absolute/path/to/hevy-mcp/dist/index.js"],
      "env": {
        "HEVY_API_KEY": "PASTE_YOUR_KEY_HERE"
      }
    }
  }
}

The env block (including HEVY_MCP_ALLOW_WRITES) works identically to the npx snippets below.

Configuration

Each MCP client spawns the server as a stdio subprocess with HEVY_API_KEY in its env block.

Claude Desktop

Config path:

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

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

  • Linux: ~/.config/Claude/claude_desktop_config.json (Anthropic does not ship an official Linux build of Claude Desktop as of 2026; the path applies only to unofficial community builds.)

{
  "mcpServers": {
    "hevy": {
      "command": "npx",
      "args": ["-y", "@diecoscai/hevy-mcp"],
      "env": {
        "HEVY_API_KEY": "PASTE_YOUR_KEY_HERE"
      }
    }
  }
}

Add "HEVY_MCP_ALLOW_WRITES": "1" to the env block to enable write tools.

Claude Code CLI

claude mcp add hevy --env HEVY_API_KEY=PASTE_YOUR_KEY_HERE -- npx -y @diecoscai/hevy-mcp

To enable writes, append --env HEVY_MCP_ALLOW_WRITES=1.

Cursor

Config path: ~/.cursor/mcp.json. Same shape as Claude Desktop:

{
  "mcpServers": {
    "hevy": {
      "command": "npx",
      "args": ["-y", "@diecoscai/hevy-mcp"],
      "env": {
        "HEVY_API_KEY": "PASTE_YOUR_KEY_HERE"
      }
    }
  }
}

VS Code (native MCP support, 1.102+)

Create .vscode/mcp.json at the root of your workspace (or put the same shape under a user-level MCP config if your VS Code build supports one):

{
  "servers": {
    "hevy": {
      "command": "npx",
      "args": ["-y", "@diecoscai/hevy-mcp"],
      "env": {
        "HEVY_API_KEY": "PASTE_YOUR_KEY_HERE"
      }
    }
  }
}

If you use a third-party MCP extension that expects a different shape, check its docs — VS Code's native MCP integration landed in 1.102.

See docs/configuration.md for troubleshooting and client-specific notes, and docs/examples.md for end-to-end flows you can run with a connected MCP client.

Safety — dry-run writes

Every POST and PUT tool handler checks HEVY_MCP_ALLOW_WRITES at call time:

  • Unset (default) — the tool returns a preview instead of making the HTTP call:

    {
      "dry_run": true,
      "would_send": {
        "method": "POST",
        "path": "/v1/routine_folders",
        "body": { "routine_folder": { "title": "Push days" } }
      },
      "hint": "set HEVY_MCP_ALLOW_WRITES=1 to execute"
    }
  • Set to 1 — the tool performs the real request.

The Hevy API has no DELETE endpoint on any resource. A bad write cannot be rolled back from the client — it will persist on your account until you manually fix it in the Hevy app. Dry-run is the first line of defence; explicit opt-in for writes is the second.

Tool reference (summary)

The server exposes 23 tools grouped by resource. See docs/tools.md for input schemas and examples.

User

Tool

Description

hevy_get_user_info

Return the authenticated user (name, id, profile URL).

Workouts

Tool

Description

hevy_list_workouts

Paginated workouts (pageSize 1-10).

hevy_get_workout

Fetch one workout by UUID.

hevy_get_workout_count

Total number of workouts on the account.

hevy_get_workout_events

Delta-sync feed: updated / deleted events since a timestamp.

hevy_create_workout

Log a new workout (write — dry-run default).

hevy_update_workout

Full replace of an existing workout (write — dry-run default).

Routines

Tool

Description

hevy_list_routines

Paginated routines.

hevy_get_routine

Fetch one routine by UUID.

hevy_create_routine

Create a routine (write — dry-run default).

hevy_update_routine

Full replace of a routine (write — dry-run default).

Routine folders

Tool

Description

hevy_list_routine_folders

Paginated folders.

hevy_get_routine_folder

Fetch one folder by positive integer id.

hevy_create_routine_folder

Create a folder (write — dry-run default).

Exercise templates

Tool

Description

hevy_list_exercise_templates

Paginated exercise library — the only list that accepts pageSize up to 100.

hevy_search_exercise_templates

Search templates by name (case-insensitive substring). Resolves a human name (e.g. "bench press") to an exercise_template_id. Paginates the full catalog; results cached for an hour.

hevy_get_exercise_template

Fetch one template by id (8-char hex for built-ins, UUID for custom).

hevy_create_exercise_template

Create a custom exercise (write — dry-run default).

hevy_get_exercise_history

All logged sets for a given exercise template.

Body measurements

Tool

Description

hevy_list_body_measurements

Paginated measurements. Records are keyed by date.

hevy_get_body_measurement

Fetch the record for a single YYYY-MM-DD.

hevy_create_body_measurement

Create a new record (write — dry-run default). 409 if the date already exists.

hevy_update_body_measurement

Replace the record for a date — any field not sent is set to NULL (write — dry-run default).

Environment variables

Name

Required

Description

HEVY_API_KEY

required*

Hevy Pro API key (UUID v4). Typically passed through the env block of your MCP client config.

HEVY_MCP_ALLOW_WRITES

optional

Set to 1 to enable real POST / PUT calls. Any other value (including unset) keeps dry-run on.

HEVY_MCP_DISABLE_CACHE

optional

Set to 1 to disable the in-memory exercise-template cache (see below).

HEVY_MCP_CACHE_TTL_SECONDS

optional

Cache TTL in seconds. Default 3600. Ignored when the cache is disabled.

* HEVY_API_KEY is required unless you ran npx @diecoscai/hevy-mcp setup, which saves the key (and the writes setting) to ~/.config/hevy-mcp/config.json. Resolution order: the env var wins; the config file is the fallback. The same precedence applies to HEVY_MCP_ALLOW_WRITES vs the file's allowWrites.

Exercise-template cache

hevy_list_exercise_templates and hevy_get_exercise_template read through a per-process in-memory cache (Map with per-entry TTL, default 1 hour). The template catalog is large and near-static within a session, so repeated resolution — e.g. looking up an id while building a routine — costs one HTTP round-trip instead of many.

hevy_create_exercise_template invalidates the list portion of the cache on a successful write; singleton template entries are left alone (they can't be made stale by creating a different custom template). The cache is never persisted across processes.

Disable the cache entirely with HEVY_MCP_DISABLE_CACHE=1, or shorten / lengthen its lifetime with HEVY_MCP_CACHE_TTL_SECONDS.

Webhooks — intentionally not exposed

Hevy's public API (api.hevyapp.com/v1/*) does not document webhook subscriptions; the relevant endpoints live on the private web-session API (/webhook-subscription, /subscribe_to_webhook) which uses a different auth scheme (refresh-token bearer, not the api-key header this server uses). Exposing tools for them would either (a) ship handlers that throw "endpoint not available" to every user, or (b) force users to hand over a web session token just to register a URL.

If you need incremental sync, use hevy_get_workout_events with a since timestamp — it covers both updated and deleted workouts and is the only mechanism the public API offers for change detection.

If Hevy publishes webhooks in the public OpenAPI spec, subscription tools will land here with the same dry-run gate as the other writes.

Some other Hevy MCP servers expose webhook tools by reaching Hevy's private web-session API. This server deliberately stays on the documented public API.

Spec ≠ reality

The public OpenAPI doc (self-versioned 0.0.1) diverges from the live server in several places — wrong wrapper for POST /v1/exercise_templates, wrong enum values for CustomExerciseType, folder_id rejected on PUT /v1/routines/{id}, plain-text response on a successful template create, and more. This server implements what the real server accepts. The full list of confirmed divergences lives in docs/api-quirks.md and can be re-verified with the scripts/verify-api.sh probe suite (lives in the GitHub repo, not in the npm tarball).

Development

For contributors working on the server itself. If you only want to run the server locally against your own Hevy account, use Run from source instead.

git clone https://github.com/diecoscai/hevy-mcp.git
cd hevy-mcp
npm ci
npm run build
npm test

Useful scripts:

Script

Purpose

npm run dev

tsc --watch for the source.

npm run lint

Biome lint across src/ + tests/.

npm run format

Biome auto-format.

npm run check

Biome combined lint + format check.

npm run coverage

Vitest with V8 coverage.

npm run smoke

End-to-end: npm ci && build && test && lint + stdio probe + language gate.

npm run inspect

Launches the MCP Inspector against the built server.

Adding a tool:

  1. Add a Zod schema in src/validate.ts (.strict() on every object).

  2. Add the tool spec (name, description, JSON Schema inputSchema) to the TOOLS array in src/index.ts.

  3. Add a case in the dispatch switch; always call validateInput(name, rawArgs) before touching the network; wrap writes with guardWrite.

  4. Extend tests under tests/ (schema + negative probes at minimum).

  5. Update the table in this README.

See CONTRIBUTING.md for more.

Security

  • API keys live in your MCP client's config file (same threat model as any other key you'd paste there). The server never reads or writes a config file of its own.

  • Writes are dry-run by default; rotating a leaked key in the Hevy app and pasting the new one into your client config takes under a minute.

  • The server only ever calls documented /v1/* endpoints — no private API traffic, no telemetry, no third-party fan-out.

See docs/security.md for the full threat model.

Contributing

Contributions welcome. Please read CONTRIBUTING.md before opening a PR.

License

MIT.

Available Tools

23 tools
hevy_create_body_measurementA

Create one body-measurements record (POST /v1/body_measurements). Required: date (YYYY-MM-DD). All metric fields are optional and nullable: weight_kg, lean_mass_kg, fat_percent, neck_cm, shoulder_cm, chest_cm, left_bicep_cm, right_bicep_cm, left_forearm_cm, right_forearm_cm, abdomen, waist, hips, left_thigh, right_thigh, left_calf, right_calf. If a record already exists for that date, the server returns 409 — use hevy_update_body_measurement instead. Dry-run by default: returns { dry_run: true, executed: false, ... } unless HEVY_MCP_ALLOW_WRITES=1 is set on the server process.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesCalendar date in YYYY-MM-DD (rejected if not a real date).
hipsNo
waistNo
abdomenNo
neck_cmNo
chest_cmNo
left_calfNo
weight_kgNo
left_thighNo
right_calfNo
fat_percentNo
right_thighNo
shoulder_cmNo
lean_mass_kgNo
left_bicep_cmNo
right_bicep_cmNo
left_forearm_cmNo
right_forearm_cmNo

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It discloses POST mutation, dry-run by default (with enablement), duplicate detection (409), and suggests update tool. Missing details on authentication, rate limits, or idempotency, but is strong overall.

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 sentences long, front-loaded with purpose, then parameters, error handling, and dry-run behavior. No redundancy 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?

Given 18 parameters, no annotations, and no output schema, the description covers purpose, parameters, error handling, alternative tool, and dry-run. It could mention what the response contains (e.g., the created record) but is still fairly complete.

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 only 6% (only date described). The description lists all metric fields and clarifies they are optional and nullable, which adds value over the schema. However, no additional semantics or units beyond field names.

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 'Create one body-measurements record (POST /v1/body_measurements)', clearly specifying the verb and resource. It distinguishes from sibling hevy_update_body_measurement by referencing the alternative when a record already exists.

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

Usage Guidelines5/5

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

Explicit guidance: required date format, optional/nullable fields, mention of 409 conflict with alternative tool, dry-run default with write-enablement condition. Tells the agent when to use this tool and when to switch to update.

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

hevy_create_exercise_templateA

Create a custom exercise template (POST /v1/exercise_templates). Required: title, exercise_type, muscle_group, equipment_category. exercise_type enum (8): weight_reps, reps_only, bodyweight_reps, bodyweight_assisted_reps, duration, weight_duration, distance_duration, short_distance_weight. muscle_group enum (20): abdominals, shoulders, biceps, triceps, forearms, quadriceps, hamstrings, calves, glutes, abductors, adductors, lats, upper_back, traps, lower_back, chest, cardio, neck, full_body, other. equipment_category enum (9): none, barbell, dumbbell, kettlebell, machine, plate, resistance_band, suspension, other. other_muscles is an optional array of muscle_group values. Dry-run by default: returns { dry_run: true, executed: false, ... } unless HEVY_MCP_ALLOW_WRITES=1 is set on the server process.

ParametersJSON Schema
NameRequiredDescriptionDefault
exerciseYes

TDQS

A4.9/5.0
Behavior5/5

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

No annotations are provided, so the description fully carries the burden. It discloses the dry-run default, the requirement for a server env variable to actually create, and the expected response shape, ensuring the agent understands the tool's non-obvious behavior.

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 dense but well-structured, front-loading the action and then detailing enums and special behavior. It could be slightly more concise, but every sentence adds value.

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 nested object, multiple enums, and dry-run behavior, the description is thorough. It covers all essential aspects for correct invocation without relying on an 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?

Although schema description coverage is 0%, the description enumerates all enums (exercise_type, muscle_group, equipment_category) and explains the exercise object structure, including the optional other_muscles array, providing complete parameter semantics beyond the raw 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 a custom exercise template' and lists required fields (title, exercise_type, muscle_group, equipment_category), distinguishing it from sibling tools like hevy_list_exercise_templates and hevy_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 Guidelines5/5

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

It explicitly explains the dry-run default behavior and the environment variable (HEVY_MCP_ALLOW_WRITES=1) needed to execute actual writes, providing clear when-to-use and how-to-enable guidance.

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

hevy_create_routineA

Create a routine (POST /v1/routines). Required: title, exercises[]. Each exercise needs an exercise_template_id — call hevy_list_exercise_templates to find it. Optional folder_id (positive integer) places the routine in a folder (use hevy_list_routine_folders to discover folder ids). Set types: warmup|normal|failure|dropset. rep_range { start, end } is accepted on routine sets (NOT on workout sets). Dry-run by default: returns { dry_run: true, executed: false, ... } unless HEVY_MCP_ALLOW_WRITES=1 is set on the server process.

ParametersJSON Schema
NameRequiredDescriptionDefault
routineYes

TDQS

A3.7/5.0
Behavior4/5

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

The description discloses critical behavioral traits beyond the schema: dry-run mode by default, the environment variable HEVY_MCP_ALLOW_WRITES to enable actual writes, and that rep_range is only accepted on routine sets (not workout sets). This compensates for the lack of annotations. It does not mention error handling or response format on success, but the dry-run explanation is valuable.

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 paragraph of 6 sentences, front-loaded with the main action and endpoint. Every sentence adds unique information (required fields, references, set types, dry-run behavior). No redundant or filler content.

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

Completeness3/5

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

Given the complexity (nested object parameter) and missing annotations, the description covers essential usage but leaves gaps: it does not describe the success response format (routinely created object) or error conditions (e.g., duplicate titles, invalid folder_id). The dry-run behavior is well explained, but an agent may need more on what happens after a real write.

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

Parameters4/5

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

With 0% schema description coverage, the description adds significant meaning: it explains the required outer fields (title, exercises), the need for exercise_template_id, optional folder_id, set types (warmup|normal|failure|dropset), and the rep_range nuance. It does not detail all inner fields like notes or superset_id, but covers the key aspects.

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

Purpose4/5

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

The description clearly states the action (create a routine) and the HTTP method (POST /v1/routines). It lists required fields (title, exercises) and references sibling tools for lookups (hevy_list_exercise_templates, hevy_list_routine_folders), but does not explicitly differentiate from hevy_update_routine or hevy_create_workout beyond noting rep_range usage is routine-only.

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 creating routines and provides prerequisites (exercise_template_id, optional folder_id) with references to sibling tools for discovery. However, it does not explicitly state when to use this tool over alternatives like hevy_update_routine for modifications or hevy_create_workout for workouts, nor does it mention when not to use it.

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

hevy_create_routine_folderA

Create a routine folder (POST /v1/routine_folders). Takes only title. The new folder is inserted at index 0; existing folders shift down by one. There is no update or delete tool for folders — once created, the title is fixed. Dry-run by default: returns { dry_run: true, executed: false, ... } unless HEVY_MCP_ALLOW_WRITES=1 is set on the server process.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description fully carries the burden. It discloses that the new folder is inserted at index 0, shifting existing folders, and details the dry-run mechanism. This gives agents necessary understanding of 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.

Conciseness4/5

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

The description is efficient, starting with the core action and parameter, then explaining behavior and constraints in two sentences. 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 tool has one parameter, no output schema, and no annotations, the description covers the creation behavior, insertion index, and dry-run configuration. It lacks full response details for a successful write, but for a simple tool it is sufficiently complete.

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

Parameters3/5

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

The description confirms that 'title' is the only parameter and notes it's fixed after creation. However, it adds no additional semantic meaning beyond the schema constraints (e.g., uniqueness, format). With 0% schema coverage, the description compensates only modestly.

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 a routine folder') with the HTTP endpoint. It explicitly specifies that the only parameter is 'title' and distinguishes from siblings by noting there are no update or delete tools for folders.

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 usage context by explaining that the title is fixed after creation (no update/delete), implying caution. It also describes the dry-run behavior and how to enable writes via the environment variable, guiding when the tool actually performs writes.

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

hevy_create_workoutA

Create a workout (POST /v1/workouts). Required: title, start_time (ISO-8601), end_time (ISO-8601), exercises[]. Each exercise needs an exercise_template_id — call hevy_search_exercise_templates to resolve it from a name, or hevy_get_exercise_template if you already know the id. Set types: warmup|normal|failure|dropset. RPE is null or one of 6, 7, 7.5, 8, 8.5, 9, 9.5, 10. Superset ids must be contiguous across adjacent exercises. rep_range is routines-only and is rejected here. Dry-run by default: returns { dry_run: true, executed: false, ... } unless the env var HEVY_MCP_ALLOW_WRITES=1 is set on the server process.

ParametersJSON Schema
NameRequiredDescriptionDefault
workoutYes

TDQS

A4.9/5.0
Behavior5/5

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

The description discloses the dry-run behavior and the env var requirement for actual writes, which is critical behavioral info. It also mentions that rep_range is rejected. No annotations exist, so the description fully carries the transparency burden.

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 paragraph of moderate length that packs substantial information. It is front-loaded with key facts, but could be slightly more structured (e.g., bullet points) for easier scanning. Still, every sentence adds value.

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 complexity of the nested parameter and no output schema, the description covers all critical aspects: required fields, exercise template resolution, set configuration, superset rules, rejection of rep_range, and dry-run mode. It references sibling tools where needed.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate. It extensively explains the 'workout' object structure, required subfields, set types, RPE enum, superset_id constraints, and template ID formats, adding significant meaning beyond the bare 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 'Create a workout (POST /v1/workouts)' and lists required fields, distinguishing it from update or other operations. It provides specific verb and resource, with additional context on 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 Guidelines5/5

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

The description explicitly tells how to use the tool: required fields, resolving exercise_template_id via sibling tools, and notes that rep_range is rejected and dry-run is default. It gives clear context and alternatives for template lookup.

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

hevy_get_body_measurementA

Fetch one body-measurements record by date (GET /v1/body_measurements/{date}). Returns 404 if no record exists for that date.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

TDQS

A4/5.0
Behavior3/5

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

Mentions 404 return for missing date, but lacks detail on authentication or other behavioral aspects; annotations absent.

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?

One concise sentence, front-loaded with key information, 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?

Covers main purpose and result (record or 404), but doesn't describe record structure. Acceptable given no output schema.

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

Parameters4/5

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

Schema coverage 0%, but description adds meaning by explaining the date parameter's role as identifier and format. Single parameter, so adequate.

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 verb 'Fetch', resource 'body-measurements record', and identifier 'by date'. Distinct from sibling list/update tools.

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 for a specific date, but no explicit comparison with sibling list tool or when-not scenarios.

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

hevy_get_exercise_historyA

List every logged set for the given exercise template (one row per set, includes warmups/dropsets/failures). Two filter modes, combinable: pagination via page (1-indexed) and pageSize (1-10), and date-range filtering via start_date / end_date (ISO-8601 datetimes). Without start_date/end_date, results span all time, newest-first.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, 1-indexed (default 1).
end_dateNoOptional ISO-8601 datetime upper bound.
pageSizeNoItems per page (1-10, default 10). The Hevy server rejects >10 with HTTP 400.
start_dateNoOptional ISO-8601 datetime lower bound. Filters history to sets logged on or after this time.
exerciseTemplateIdYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, description carries full burden. It discloses that results include warmups/dropsets/failures, pagination details, date-range filtering, and default ordering (newest-first, all time). Does not mention rate limits or pagination error handling, but sufficiently covers behavior for a read operation.

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?

Three sentences, each earning its place: first states purpose, second explains filter modes, third describes default behavior. No wasted words, information front-loaded.

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 5 parameters and no output schema, description covers purpose, filtering, ordering, and row content. Lacks details on return format (e.g., pagination metadata) but is still fairly complete for a list tool. Minor gap in error behavior.

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

Parameters4/5

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

Schema descriptions cover 80% of parameters. Description adds value by explaining that filters are combinable, that without start_date/end_date results span all time, and defaults for page/pageSize. Could clarify that exerciseTemplateId is required, but overall adds meaningful 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 clearly states it lists logged sets for a specific exercise template, specifying verb (List), resource (exercise history), and what is included (warmups/dropsets/failures). This distinguishes it from sibling tools like hevy_list_workouts (workout-level) and hevy_get_workout (single workout).

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?

Description explains when to use: to get history for a given exercise template. Mentions two filter modes and default time span. Does not explicitly list when not to use or alternatives, but the purpose is clear enough to guide selection.

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

hevy_get_exercise_templateA

Fetch one exercise template by id. Accepts both 8-char uppercase hex (built-in) and lowercase UUID (custom).

ParametersJSON Schema
NameRequiredDescriptionDefault
exerciseTemplateIdYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It covers acceptable ID formats but does not disclose error behavior (e.g., on invalid/not found IDs) or any side effects. Adequate but not exhaustive.

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

Conciseness5/5

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

Two concise sentences, front-loaded with the primary purpose, 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 simple single-parameter tool and no output schema, the description covers the key input constraint. Could mention it returns the template object, but not essential.

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

Parameters4/5

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

Schema coverage is 0%, but description adds crucial context: acceptable formats (8-char uppercase hex and lowercase UUID). This adds significant meaning beyond the schema type definition.

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 verb 'Fetch' and resource 'one exercise template by id', and distinguishes from sibling tools like list/search by specifying a single ID. Also clarifies acceptable ID formats.

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 usage when a specific ID is known, but does not explicitly contrast with searching or listing. Mentions accepted formats, which helps avoid errors.

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

hevy_get_routineC

Fetch one routine by UUID.

ParametersJSON Schema
NameRequiredDescriptionDefault
routineIdYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavior. It only states the action without addressing side effects, read-only nature, error behavior (e.g., if routine not found), or authentication requirements. For a single-resource fetch, read-only is implied but not explicit.

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

Conciseness3/5

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

The description is a single sentence with no filler. However, it is overly sparse; while concise, it sacrifices useful detail. It is front-loaded with the core action but lacks elaboration.

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

Completeness2/5

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

Given no output schema and no annotations, the description is insufficiently complete. It does not describe the return format, possible errors, or any additional behavior. For a simple GET endpoint, it is acceptable but minimal.

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 parameter descriptions are 0% covered. The description adds that the routine is identified by UUID, but the schema already specifies format=uuid. It does not explain the purpose of 'routineId' beyond the tool name, nor does it compensate for missing schema descriptions.

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 'Fetch one routine by UUID' specifically names the action (fetch), resource (one routine), and identifier (UUID). It clearly distinguishes from sibling tools like 'hevy_list_routines' which fetches 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 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 (e.g., when to use 'hevy_list_routines' or 'hevy_get_routine_folder'). It does not specify prerequisites or context such as needing the UUID from a previous list call.

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

hevy_get_routine_folderB

Fetch one routine folder by its positive integer id.

ParametersJSON Schema
NameRequiredDescriptionDefault
folderIdYes

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries full burden. It does not mention failure modes (e.g., folder not found), authentication requirements, or any side effects. It only states what the tool does, not its 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 a single sentence containing exactly the necessary information. No wasted words, and it is front-loaded with the action and object.

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

Completeness3/5

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

Given the tool's simplicity (1 param, no nested objects, no output schema), the description is adequate but minimal. It does not explain the return value or error cases, which would be helpful for a complete understanding.

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 0% coverage, meaning no parameter descriptions. The description partially compensates by stating 'by its positive integer id', but it merely restates the schema constraints without adding new meaning. The required folderId parameter's purpose is clear, but no further 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 the verb (Fetch) and the resource (routine folder) with the specific identifier type (positive integer id). It distinguishes from sibling tools like hevy_list_routine_folders by specifying 'one' and providing the lookup method.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like hevy_list_routine_folders or hevy_get_routine. The agent is left to infer that this is for fetching a single folder by ID, but there is no mention of when this is appropriate.

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

hevy_get_user_infoA

Return the authenticated user (name, id, profile URL). Reads GET /v1/user/info. Requires a Hevy Pro api-key.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Describes read operation, lists returned fields, and mentions authentication. No side effects or errors, but adequate for a simple read-only tool.

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 action and return value. Every sentence provides essential information without redundancy.

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 zero parameters, no output schema, but many sibling tools, the description fully conveys purpose, prerequisites, and output format.

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 4 applies. Description does not need to add parameter details.

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 authenticated user's name, id, and profile URL. Distinguishes from siblings like workout and routine tools.

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?

Mentions prerequisite (Hevy Pro api-key) and endpoint. No explicit when/why usage, but the distinct resource (user info) makes context clear among siblings.

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

hevy_get_workoutA

Fetch one workout by UUID. Returns the full record including exercises and sets.

ParametersJSON Schema
NameRequiredDescriptionDefault
workoutIdYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description must disclose behavioral traits. It confirms the tool is a read operation returning full record details, but does not mention error behavior (e.g., what happens if UUID is invalid), idempotency, or any side effects. It is adequate for a simple fetch but could be more transparent.

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 short, well-structured sentences. Every word adds value, with the core action and return information front-loaded. No redundancy or verbosity.

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 fetch tool with one parameter and no output schema, the description is largely complete. It addresses the return content (full record, exercises, sets) and assumes standard behavior. Minor gaps include lack of error handling details and idempotency, but overall it is sufficient for such a straightforward operation.

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?

Schema description coverage is 0%, yet the description adds no new meaning beyond what the schema already provides (that 'workoutId' is a UUID). It fails to compensate for the lack of parameter documentation, merely restating the parameter's type.

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 ('Fetch'), resource ('one workout'), identifier ('by UUID'), and the scope of return data ('full record including exercises and sets'). It effectively distinguishes from sibling tools like hevy_list_workouts or hevy_get_workout_events.

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 when to use (having a UUID and needing full workout details) but does not explicitly state when not to use or provide direct comparisons to alternatives. Usage context is implied rather than explicitly guided.

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

hevy_get_workout_countA

Return { workout_count }: the total number of workouts on the account.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses that the tool returns the total number of workouts, but lacks details on caching, performance, or side effects. For a simple read operation, this is adequate but not comprehensive.

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 with no extraneous content. It efficiently conveys the tool's purpose and output format.

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 (no parameters, no output schema), the description is complete. It clearly states the return value and its meaning, fully meeting the needs for an agent to invoke this 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 no parameters, so the description cannot add parameter-specific information. Coverage is 100% by default. The description adds value by explaining the return shape, which is sufficient given zero parameters.

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

Purpose5/5

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

The description clearly states it returns the total number of workouts on the account, specifying the verb 'Return' and the resource '{ workout_count }'. It effectively distinguishes from sibling tools like hevy_list_workouts and hevy_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 the tool is for getting a count but provides no explicit guidance on when to use this tool versus alternatives like hevy_list_workouts or hevy_get_workout. The context is clear, but no exclusions or alternative comparisons are made.

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

hevy_get_workout_eventsA

Delta sync feed: events newer than since (ISO-8601). Each event is either { type: "updated", workout } or { type: "deleted", id, deleted_at }. To incrementally sync a local cache: on first call pass since=1970-01-01T00:00:00Z, then for each subsequent call pass the timestamp of the newest event you have seen. This is the ONLY way to detect deletions — the Hevy API has no DELETE endpoint, so deleted workouts surface here and nowhere else. pageSize 1-10.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, 1-indexed (default 1).
sinceNoISO-8601 datetime; only events after this are returned.
pageSizeNoItems per page (1-10, default 10). The Hevy server rejects >10 with HTTP 400.

TDQS

A4.9/5.0
Behavior5/5

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

Despite no annotations, the description fully discloses behavior: event structure (updated/deleted), pagination limits (pageSize 1-10 with HTTP 400 for >10), and the importance of since for detecting deletions. 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?

Three sentences, front-loaded with purpose, every sentence adds value. No redundancy or fluff. Highly 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?

For a tool with 3 parameters, no output schema, and no annotations, the description is self-contained. It explains the return format, usage pattern, and error condition. No missing information.

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

Parameters4/5

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

Schema coverage is 100% with descriptions for all 3 parameters. The description adds functional context (e.g., how to use since for sync, pageSize limit enforcement) beyond the schema, though schema already covers basic meaning. Baseline 3 with upgrade due to added usage 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?

The description clearly states it is a 'Delta sync feed' for workouts, returning events newer than a timestamp. It distinguishes from sibling tools like hevy_list_workouts by emphasizing deletion detection, making the purpose unambiguous.

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

Usage Guidelines5/5

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

Explicit instructions are given for incremental sync: first call with since=1970-01-01T00:00:00Z, subsequent calls with the newest seen timestamp. It also notes that this is the only way to detect deletions, guiding the agent to use this tool for that purpose.

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

hevy_list_body_measurementsA

List body measurements (GET /v1/body_measurements). Envelope: { page, page_count, body_measurements }. pageSize 1-10. Records are keyed by date (YYYY-MM-DD), not by id. No DELETE endpoint exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, 1-indexed (default 1).
pageSizeNoItems per page (1-10, default 10). The Hevy server rejects >10 with HTTP 400.

TDQS

A4.1/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavioral traits: read-only (GET), pagination constraints (pageSize 1-10, server rejects >10), response envelope structure, and keying by date with no DELETE endpoint. This is comprehensive.

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 three sentences, front-loaded with the core action, and each sentence adds non-redundant value. It is concise but could be slightly more structured (e.g., bullet points) for easier scanning.

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 (2 optional parameters, no output schema), the description covers the response format, pagination, keying, and lack of delete. It does not explain how to filter by date or handle missing data, but these are reasonable omissions for a list endpoint.

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% and descriptions already cover parameters. The description adds minor extra context about pageSize range and rejection behavior, but does not significantly enhance understanding 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 tool lists body measurements, specifies the HTTP method (GET), response envelope, pagination limits, and unique keying by date. It distinguishes itself from other tools by mentioning no DELETE endpoint and the keying scheme, providing high clarity.

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 it is a read-only list operation and mentions no DELETE endpoint, but does not explicitly state when to use this tool versus sibling tools like hevy_get_body_measurement or hevy_create_body_measurement. No alternatives or exclusions are provided.

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

hevy_list_exercise_templatesA

List exercise templates (built-in + custom). Envelope: { page, page_count, exercise_templates }. pageSize is 1-100 — this is the ONE endpoint with a larger cap; every other list is capped at 10. Built-in ids are 8-char uppercase hex; custom ids are lowercase UUIDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, 1-indexed (default 1).
pageSizeNoItems per page (1-100, default 10). Exercise templates are the only endpoint that accepts up to 100.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description fully covers behavioral traits: envelope structure, page size cap (unique among siblings), and ID format differences. Lacks mention of authentication or rate limits, but those are standard.

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 dense sentences with no fluff. Could be slightly more structured (e.g., bullet points) but remains efficient and front-loaded.

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 list endpoint with 2 params and no output schema, the description adequately covers response structure, id patterns, and unique cap. No major 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?

Schema coverage is 100% with clear descriptions. The description adds value by highlighting the pageSize cap as unique and noting 1-indexed pages, exceeding the baseline 3.

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 'list exercise templates (built-in + custom)' with a specific verb and resource, and distinguishes it from sibling tools like search and get by noting unique properties.

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 listing all templates but does not explicitly contrast with search or get endpoints, nor does it provide 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.

hevy_list_routine_foldersB

List routine folders. pageSize 1-10. Envelope: { page, page_count, routine_folders }. No DELETE endpoint.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, 1-indexed (default 1).
pageSizeNoItems per page (1-10, default 10). The Hevy server rejects >10 with HTTP 400.

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description provides some behavioral context: pagination constraints (pageSize 1-10) and return envelope structure. However, the note 'No DELETE endpoint' is tangential and not clearly relevant to the tool's behavior.

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

Conciseness4/5

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

Very concise and front-loaded with the main action. The inclusion of 'No DELETE endpoint' is slightly out of place and adds a minor distraction, but overall efficient.

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 list tool with pagination, the description adequately covers the purpose, pagination limits, and return structure (envelope). Lacks error handling or empty list behavior, but acceptable for a read-only list operation.

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?

Both parameters are fully described in the schema (100% coverage). The description only repeats schema info (pageSize range) and adds no new semantic meaning for parameters.

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

Purpose4/5

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

The description clearly states 'List routine folders' with a specific verb and resource. While it doesn't explicitly distinguish from hevy_get_routine_folder, the name itself differentiates list vs get operations.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives like hevy_get_routine_folder or hevy_create_routine_folder. No context about prerequisites or typical use cases.

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

hevy_list_routinesB

List routines. pageSize 1-10 (max enforced by server). Envelope: { page, page_count, routines }. No DELETE endpoint.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, 1-indexed (default 1).
pageSizeNoItems per page (1-10, default 10). The Hevy server rejects >10 with HTTP 400.

TDQS

B3.2/5.0
Behavior3/5

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

No annotations are provided, so the description must disclose behavioral traits. It adds the envelope structure and server-enforced pageSize limit, but does not explicitly state safety (e.g., read-only) 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.

Conciseness4/5

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

Very short with three sentences, front-loaded with purpose. No wasted words, though the 'No DELETE endpoint' note is slightly out of place.

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 list tool with 2 parameters and no output schema, the description provides the envelope structure and server behavior, making it fairly complete. Missing details like sorting or array size are minor.

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 100%, so baseline is 3. The description repeats the pageSize limit from the schema and adds envelope info, but does not add meaningful new parameter context.

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

Purpose4/5

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

The description clearly states 'List routines' which is a specific verb and resource. The tool name and context distinguish it from siblings like 'hevy_get_routine' and 'hevy_list_workouts', though no explicit differentiation is given.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. The only extra note about 'No DELETE endpoint' is tangential and does not help with usage decisions.

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

hevy_list_workoutsA

List workouts newest-first, paginated. Use this to discover workout ids; fetch a single full record with hevy_get_workout, or just the count with hevy_get_workout_count. pageSize is 1-10 (Hevy returns 400 for >10). Response envelope: { page, page_count, workouts: [...] }. Empty account returns workouts: []. No DELETE endpoint exists on the Hevy API.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, 1-indexed (default 1).
pageSizeNoItems per page (1-10, default 10). The Hevy server rejects >10 with HTTP 400.

TDQS

A4.9/5.0
Behavior5/5

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

Despite no annotations, the description discloses key behavioral traits: pagination order ('newest-first'), error behavior ('Hevy returns 400 for >10'), empty state ('Empty account returns workouts: []'), and a limitation ('No DELETE endpoint exists on the Hevy API'). It also describes the response envelope structure. This fully compensates for missing 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 a concise three-sentence paragraph that front-loads the main purpose. Every sentence serves a distinct role: stating the action, providing usage guidance, and detailing behavioral/structural notes. No fluff.

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 has only 2 well-described parameters and no output schema, the description covers all essential aspects: pagination, error handling, empty state, and relationship to sibling tools. It is complete enough for an agent to use the tool correctly without additional context.

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

Parameters4/5

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

Schema coverage is 100%, so the description does not need to explain parameters in depth, but it adds value by mentioning the error response for pageSize >10, which reinforces the schema's description. It does not add additional parameter semantics beyond that, but the baseline is 3 and the added context justifies a 4.

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 starts with 'List workouts newest-first, paginated,' immediately establishing the specific verb (list), resource (workouts), ordering, and pagination. It further distinguishes itself by explicitly stating its use case: 'Use this to discover workout ids; fetch a single full record with hevy_get_workout, or just the count with hevy_get_workout_count,' differentiating it from siblings.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool (to discover workout ids) and when to use alternatives (hevy_get_workout, hevy_get_workout_count). It also provides a crucial constraint: 'pageSize is 1-10 (Hevy returns 400 for >10),' guiding the agent on parameter limits. No misleading advice.

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

hevy_search_exercise_templatesA

Find exercise templates by name. Paginates the full catalog (built-in + custom) and returns templates whose title contains the query, case-insensitive. Use this to resolve an exercise_template_id from a human name (e.g. "bench press") before composing a workout or routine. Response: { query, total_matches, exercise_templates: [...], truncated }. total_matches counts every match across the pages scanned; the scan stops after 30 pages of 100 — if the catalog is larger, truncated is true and total_matches is a lower bound. The catalog is cached for an hour.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum matches to return (default 25). total_matches reports the full count.
queryYesCase-insensitive substring matched against the template title.

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavioral traits: case-insensitive substring matching, pagination limited to 30 pages of 100, truncation flag, total_matches as lower bound when truncated, and a one-hour catalog cache. This goes beyond basic disclosures.

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 concise sentences plus a brief response format explanation. Every sentence adds value—no fluff, front-loaded with core purpose, and efficiently covers behavior and usage context.

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 moderate complexity (search with pagination and truncation) and the absence of an output schema, the description thoroughly explains response fields (query, total_matches, exercise_templates, truncated) and the truncation behavior. It fully equips the agent to understand outcomes and limitations.

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?

Both parameters have schema descriptions, but the description adds significant value: it clarifies query is 'case-insensitive substring matched against the template title' and provides default value for limit (25) and explains that total_matches reports the full count even if truncated.

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 'Find exercise templates by name' and specifies it paginates the full catalog, returning case-insensitive substring matches. It distinguishes from siblings by explicitly saying to use it to resolve an exercise_template_id from a human name before composing a workout or routine, differentiating it from listing all templates or getting by ID.

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 explains when to use this tool: 'Use this to resolve an exercise_template_id from a human name... before composing a workout or routine.' It implies not to use it if you already have the ID, but does not provide explicit exclusions or alternatives.

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

hevy_update_body_measurementA

Full replace of the body-measurements record for a date (PUT /v1/body_measurements/{date}). FULL REPLACE — any metric field NOT sent in body_measurement is overwritten to NULL on the server. To "update just one metric": call hevy_get_body_measurement for that date first, modify the metric you want, then send ALL fields back. Dry-run by default: returns { dry_run: true, executed: false, ... } unless HEVY_MCP_ALLOW_WRITES=1 is set on the server process.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
body_measurementYes

TDQS

A4.6/5.0
Behavior5/5

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

No annotations exist, so the description carries full burden. It fully discloses the destructive null-overwrite behavior, the dry-run safety mechanism, and the configuration requirement (HEVY_MCP_ALLOW_WRITES). This gives the agent a complete understanding of the tool's side effects and safety constraints.

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

Conciseness5/5

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

The description is compact yet comprehensive. It starts with the core action, follows with the critical null-overwrite warning, provides a practical pattern for partial updates, and finishes with the dry-run behavior. Every sentence is purposeful and front-loaded for quick comprehension.

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 complexity (nested object, destructive operation, dry-run), the description covers most key aspects. It omits details about the return format beyond the dry-run example and does not mention error handling or authentication prerequisites. However, for a tool with sibling tools that provide additional context, this is nearly complete.

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 0%, meaning the description must compensate. While it clarifies that body_measurement is an object whose missing fields become null, it does not list or explain individual fields beyond their presence in the schema. The description adds context about the replace semantics but lacks detailed parameter descriptions, so it only partially compensates for the absent schema documentation.

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 is a 'full replace' of body measurements for a date, using PUT. It explicitly distinguishes from a partial update and explains that unspecified fields are overwritten to NULL, leaving no ambiguity about the operation.

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

Usage Guidelines5/5

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

The description provides explicit guidance: for a partial update, it instructs to first call hevy_get_body_measurement, modify, then send all fields. It also warns about the destructive null-overwrite behavior and mentions the dry-run default and the required environment variable to enable writes, giving clear when-to-use and when-not-to-use advice.

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

hevy_update_routineA

Full replace of a routine (PUT /v1/routines/{id}). Omitted fields are dropped — to preserve a field, send it back unchanged. Each exercise needs an exercise_template_id (find via hevy_list_exercise_templates). Note: folder_id is NOT accepted on update; the Hevy API rejects it with 400. The routine's folder cannot be changed through this tool. Dry-run by default: returns { dry_run: true, executed: false, ... } unless HEVY_MCP_ALLOW_WRITES=1 is set on the server process.

ParametersJSON Schema
NameRequiredDescriptionDefault
routineYes
routineIdYes

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations, the description discloses critical behavioral traits: the full-replace destructive nature, the rejection of folder_id (400 error), and the dry-run safety mechanism. 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?

Three sentences efficiently cover purpose, key constraints, and safety behavior. Critical information is front-loaded. 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?

Covers dry-run behavior, auth env var, and the folder_id limitation. No output schema exists, but description does not specify the success response format (probably returns updated routine). Slight gap, but non-critical.

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%, but description adds value by explaining that exercise_template_id is needed and that folder_id is not accepted. However, it does not explain the structure of the routine object or other nested fields (e.g., sets, rep_range). Partially compensates.

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 that the tool performs a full replace (PUT) of a routine, explicitly noting that omitted fields are dropped. Distinguishes from sibling create/get tools by specifying update semantics.

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 context: mentions dry-run default, env variable for writes, and that folder_id is not accepted. Guides to use hevy_list_exercise_templates for exercise_template_id. Lacks explicit when-not-to-use comparison with similar tools.

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

hevy_update_workoutA

Full replace of a workout (PUT /v1/workouts/{id}). Any field not re-sent is dropped — to preserve a field, send it back unchanged. Each exercise needs an exercise_template_id (find via hevy_list_exercise_templates or hevy_get_exercise_template). Dry-run by default: returns { dry_run: true, executed: false, ... } unless HEVY_MCP_ALLOW_WRITES=1 is set on the server process. No DELETE endpoint exists on the Hevy API.

ParametersJSON Schema
NameRequiredDescriptionDefault
workoutYes
workoutIdYes

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations, the description fully discloses critical behaviors: full replace semantics, dry-run default (with env var to enable writes), and the absence of a DELETE endpoint. This provides excellent transparency beyond what the schema offers.

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 (5 sentences) and front-loads the key replace behavior. It covers essential points without verbosity, though it could be slightly more structured by separating parameter guidance from behavior.

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 complexity (nested objects, no output schema, no annotations), the description covers all critical aspects: HTTP method, replace semantics, dry-run behavior, template ID source, and notes on API limitations. It is sufficiently complete 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.

Parameters3/5

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

The schema has some descriptions (e.g., ISO-8601 for times, exercise_template_id format), but description coverage is low (0% per context). The description adds value by noting that exercise_template_id can be found via other tools, but does not explain other nested parameters like sets properties. The replace behavior is explained but not parameter-specific.

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 'Full replace of a workout (PUT /v1/workouts/{id})' and explains that any field not re-sent is dropped. It distinguishes from potentially confusing partial updates, making the purpose unambiguous.

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 explains the replace behavior and references sibling tools for finding exercise_template_id, guiding parameter preparation. However, it does not explicitly compare to other workout tools (e.g., hevy_create_workout) or state when this tool should be avoided, though the replace semantics imply it's for full updates.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 23 tool updatesv0.5.0
    • First observedhevy_create_body_measurement
    • First observedhevy_create_exercise_template
    • First observedhevy_create_routine
    • First observedhevy_create_routine_folder
    • First observedhevy_create_workout
    • First observedhevy_get_body_measurement
    • First observedhevy_get_exercise_history
    • First observedhevy_get_exercise_template
    • First observedhevy_get_routine
    • First observedhevy_get_routine_folder
    • First observedhevy_get_user_info
    • First observedhevy_get_workout
    • First observedhevy_get_workout_count
    • First observedhevy_get_workout_events
    • First observedhevy_list_body_measurements
    • First observedhevy_list_exercise_templates
    • First observedhevy_list_routine_folders
    • First observedhevy_list_routines
    • First observedhevy_list_workouts
    • First observedhevy_search_exercise_templates
    • First observedhevy_update_body_measurement
    • First observedhevy_update_routine
    • First observedhevy_update_workout

TDQS

A4/5.0
Disambiguation5/5

Each tool has a distinct purpose: user info, workouts, routines, folders, exercise templates, and body measurements are clearly separated. Even similar tools like list vs search templates are distinguishable by their descriptions.

Naming Consistency5/5

All tools use the 'hevy_verb_noun' pattern in snake_case, with verbs like get, list, create, update, search. The naming is uniform and predictable.

Tool Count5/5

23 tools cover the Hevy API's main domains (user, workouts, routines, exercise templates, body measurements) without being excessive. Each tool has a clear role.

Completeness4/5

Most CRUD operations are present, but deletions are missing (API limitation) and folder updates are not supported. These are minor gaps given the API constraints.

Maintenance

ActivityInactive
ResponsivenessNo issues

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

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/diecoscai/hevy-mcp'

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