# Reported issues for Hevy MCP Server

Pod holds 22 of 47 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.

Back to [Hevy MCP Server](/mcp/hevy-mcp-server).

## Most discussed

### Unable to connect to remote MCP using Claude desktop

**What happened:**
Adding the hosted endpoint as a Claude.ai custom connector fails with "Invalid authorization request." The /authorize page (where you paste the Hevy API key) never loads — the failure happens during OAuth discovery or dynamic client registration before that step.

No OAuth Client ID or Secret was entered in Advanced settings (left blank, expecting DCR to handle it).

**Expected:** Claude.ai should complete discovery via /.well-known/, register dynamically via /register, then r

[Read the thread](https://github.com/chrisdoc/hevy-mcp/issues/942) · 2026-08-07 · closed · external user · 5 comments

### wrangler config hardcodes account-specific values (KV ids, custom domain, otel destinations)

### Summary

`wrangler.jsonc` and `wrangler.preview.jsonc` on `main` hardcode values that only exist in the maintainer's Cloudflare account, so `wrangler deploy` from a clean clone or fork does not work without editing them first.

### Values that are account-specific

`wrangler.jsonc`:

```jsonc
"routes": [{ "pattern": "mcp.hevy-mcp.dev", "custom_domain": true }],
"observability": {
	"traces": { "destinations": ["otel"] },
	"logs":   { "destinations": ["otel-logs"] },
},
"kv_namespaces": [{ "bi

[Read the thread](https://github.com/chrisdoc/hevy-mcp/issues/777) · 2026-07-28 · closed · outside contributor · 5 comments

### test: reuse production output schemas in live canaries

## Objective

Eliminate duplicate live-test output contracts.

## Scope

Export/import production output schemas, validate `structuredContent`, retain text compatibility assertions, add named sanitized fixtures beginning with workout events, and categorize live canaries.

## Dependencies

- **Hard dependencies:** None.
- **Optional reuse:** TS-02 response helpers may be reused, but production-schema reuse and sanitized live fixtures must be independently mergeable.

## Acceptance criteria

- [ ]

[Read the thread](https://github.com/chrisdoc/hevy-mcp/issues/608) · 2026-07-10 · closed · outside contributor · 4 comments

### Review production dependency audit findings

## Summary

While setting up `hevy-mcp@1.25.3` from a fresh local install, `npm audit --omit=dev` reports production-scope vulnerabilities. This does not necessarily mean the stdio MCP server is directly exploitable in normal local use, but it does make the published runtime dependency surface look broader than expected for a stdio-only MCP server.

The main concern is that generator/tooling-oriented packages appear in the production dependency tree, which pulls in transitive packages currently 

[Read the thread](https://github.com/chrisdoc/hevy-mcp/issues/355) · 2026-06-19 · closed · external user · 5 comments

### Suggestion: Streamline MCP output to minimize token overhead

Hi! Thanks for the great MCP.

I have a suggestion regarding the returned data format. Right now, the responses are delivered as raw JSON strings. For many LLM use cases, these JSON keys and structures consume unnecessary tokens without adding much semantic value.

It would be great to have the option to receive data in a more compact, context-friendly format (like structured text or simplified Markdown). This would help keep the context window clean and reduce costs/latency.

What do you think 

[Read the thread](https://github.com/chrisdoc/hevy-mcp/issues/271) · 2026-02-25 · closed · external user · 6 comments

### MCP tool nullifies reps when repRange is provided, making routine reps invisible in app

## Problem

When creating or updating routines via the MCP tool with both `reps` and `repRange` set on a set, the tool explicitly nullifies `reps` before sending the request to the Hevy API. This makes it impossible to have reps display correctly in the Hevy app's routine view and workout view.

## Root Cause

In `src/tools/routines.ts`, the set construction logic enforces mutual exclusivity:

```typescript
reps: repRange ? null : (set.reps ?? null),
rep_range: repRange,
```

When `repRange` is 

[Read the thread](https://github.com/chrisdoc/hevy-mcp/issues/269) · 2026-02-23 · closed · external user · 5 comments

### Add date filtering parameters to get-routines endpoint

Currently, the get-routines tool only supports pagination parameters (page and pageSize), but doesn't allow filtering by date ranges. This results in retrieving all routines even when only recently updated ones are needed. Consequently, the context windows  is exceed

Super useful MCP, thanks again

[Read the thread](https://github.com/chrisdoc/hevy-mcp/issues/140) · 2025-10-23 · closed · external user · 5 comments

### Support rep range in "create" and "update" workouts

Hi, first of all this is so cool, thanks for making it.

It would be good if the MCP server could support "rep range" rather than just the static reps figure. It appears in the hevy API docs that this is a supported field https://api.hevyapp.com/docs/#/Routines/post_v1_routines

[Read the thread](https://github.com/chrisdoc/hevy-mcp/issues/108) · 2025-09-02 · closed · external user · 6 comments

## Most recent

### Thank you — works great with Claude Desktop

Hello. 
Used hevy-mcp today via Claude Desktop's custom connector to design and inject a full workout routine into Hevy end to end. Folder creation, exercise matching, tempo notes in the set notes, all of it worked smoothly. Appreciate you building and maintaining this. If you ever set up a way to support the project (sponsors, tip jar, etc.) let me know, happy to contribute.

[Read the thread](https://github.com/chrisdoc/hevy-mcp/issues/1077) · 2026-08-27 · closed · external user · 1 comment

### Worker: per-request API key re-validation doubles Hevy API traffic and turns transient Hevy errors into unlogged 502s

## Problem

In `packages/worker/src/worker.ts`, every `POST /mcp` calls `validateHevyApiKey` (via `getUserInfo`) before the request is served. Two consequences:

1. **Every MCP call costs two Hevy API calls** — the validation probe plus the actual tool call — doubling pressure on Hevy's rate limits for busy clients.
2. **Any validation failure that is not 401/403 becomes an opaque 502** ("Unable to validate the Hevy API key"). The validation client is constructed with `maxGetRetries: 0` and no `

[Read the thread](https://github.com/chrisdoc/hevy-mcp/issues/1073) · 2026-08-26 · closed · outside contributor · 2 comments

### get-training-summary returns zero workouts after a bulk import; workout list is not ordered by start time

### Summary

`get-training-summary` reports no activity for periods where workouts exist. It
assumes the workout list arrives in start-time order. The records come back in
creation order, and a bulk import pushes those two orderings apart.

### Steps to reproduce

1. Bulk import historical workouts dated older than your existing logged sessions.
2. Keep or log workouts from the last seven days.
3. Call `get-training-summary` with `weeks: 1`.

### Expected

A summary covering the sessions in that

[Read the thread](https://github.com/chrisdoc/hevy-mcp/issues/1050) · 2026-08-21 · closed · external user · 3 comments

### update-workout fails when Hevy requires undocumented is_private

## Summary

`update-workout` can fail with an opaque transient-error message when the caller changes only metadata such as `description`. The upstream Hevy API returns HTTP 500 if `is_private` is omitted, even though the public OpenAPI schema does not mark the field as required.

## Reproduction

1. Read a completed workout with `get-workout`.
2. Call `update-workout` with only a new `description`.
3. The MCP reads the current workout and builds a full PUT payload, but it includes `is_private` o

[Read the thread](https://github.com/chrisdoc/hevy-mcp/issues/1048) · 2026-08-20 · closed · outside contributor · 3 comments

### Can't connect to Hevy MCP no tool available

Since today Claude no longer can connect to the hevy mcp server.

It shows this error:
https://mcp.hevy-mcp.dev/mcp
Connection issue
Couldn’t connect to the server. Check that the URL points to a valid MCP server.

And this pop up in Claude: Your account was authorized, but hevy returned an error when connecting. You can try again, or check that the server is working. If this persists, share this reference with support: “ofid_34dfdc9982960e42”

[Read the thread](https://github.com/chrisdoc/hevy-mcp/issues/1044) · 2026-08-18 · closed · external user · 2 comments

### Hosted Worker: OAuth authorization succeeds but MCP connection then errors (Claude.ai custom connector)

**Environment:** Claude.ai custom connector, hosted endpoint `https://mcp.hevy-mcp.dev/mcp`

**Symptom:** Adding the connector in Claude.ai (Settings → Connectors) and completing the OAuth flow succeeds — Claude.ai confirms the account was authorized — but the connector then fails with:

> "Your account was authorized, but Hevy MCP (Chrisdoc) returned an error when connecting. You can try again, or check that the server is working."

Claude.ai support reference: `ofid_5815305cb4941bb7`

**What I

[Read the thread](https://github.com/chrisdoc/hevy-mcp/issues/1039) · 2026-08-16 · closed · external user · 3 comments

### get-routine fails 100% of the time on 5.0.x, rest_seconds typed as z.string() but the Hevy API returns a number

(summary by Claude)

## Summary
 
Since upgrading to 5.0.x, **every** `get-routine` call fails with the generic fallback error:
 
```
[get-routine] Error: The request failed unexpectedly. Please try again.
```
 
The cause is an output-schema type mismatch: `formattedRoutineExerciseSchema` declares `rest_seconds` as `z.string()`, but the Hevy API returns it as a **number**. The strict output validation added in 5.0.0 turns that mismatch into a hard tool failure.
 
`get-routine` is the only tool t

[Read the thread](https://github.com/chrisdoc/hevy-mcp/issues/834) · 2026-08-01 · closed · external user · 2 comments

### ci: OTel export job fails on every fork run (personal collector + missing token, if: always())

## Problem

The `otel-cicd-action` job in `.github/workflows/build-and-test.yml` exports the workflow trace to your personal collector:

```yaml
otel-cicd-action:
  if: always()
  name: OpenTelemetry Export Trace
  ...
  with:
    otlpEndpoint: "https://otel.chrisdoc.dev/v1/traces"
    otlpHeaders: "Authorization=Bearer ${{ secrets.OTEL_COLLECTOR_TOKEN }}"
```

On any fork or mirror, `OTEL_COLLECTOR_TOKEN` doesn't exist, so the header renders as `Authorization=Bearer ` and the export fails — and

[Read the thread](https://github.com/chrisdoc/hevy-mcp/issues/783) · 2026-07-30 · closed · outside contributor · 3 comments

### docs: clarify Google Antigravity setup options in README.md

### Description

The current Google Antigravity setup instructions in the `README.md` tell users to run `agy plugin install` and then configure their API key by manually setting up the complete server block in the global `~/.gemini/config/mcp_config.json` file.

However, having to manually write the full `mcpServers` configuration block (with `command`, `args`, and `env`) defeats the purpose of installing it as a plugin. 

### Proposed Changes
We should update the `README.md` to clearly define t

[Read the thread](https://github.com/chrisdoc/hevy-mcp/issues/745) · 2026-07-25 · closed · outside contributor · 1 comment

### docs: add Google Antigravity setup instructions

### Description

Currently, the `README.md` includes detailed instructions for connecting to the Hevy MCP server using **Codex**, **Claude Desktop**, and **Cursor**. However, there are no specific setup instructions for **Google Antigravity** (both `antigravity-cli` and the Antigravity IDE), which has first-class support for Model Context Protocol (MCP).

I would like to suggest adding support for Google Antigravity setup in the repository.

---

### The Goal: One-Line Installation

Instead of r

[Read the thread](https://github.com/chrisdoc/hevy-mcp/issues/742) · 2026-07-24 · closed · outside contributor · 1 comment

### Connect via ChatGPT Web

I'm trying to connect https://hevy.chrisdoc.dev/mcp as a custom MCP server in ChatGPT Web.

ChatGPT discovers the server successfully, but OAuth fails during dynamic client registration with:

`Dynamic client registration failed: registration endpoint returned 403`

Is the hosted server intended to support ChatGPT's MCP implementation, or only Codex/Claude?

[Read the thread](https://github.com/chrisdoc/hevy-mcp/issues/720) · 2026-07-22 · closed · external user · 2 comments

### test: add image-level MCP stdio boundary coverage

## Objective

Implement the named `TS-05-Docker-stdio` follow-up from #609 by running the built Docker image over real MCP stdio against an isolated loopback fixture, with no live Hevy secret available.

## Acceptance criteria

- [ ] Build the candidate Docker image and drive its installed server over real MCP stdio.
- [ ] Exercise initialize, inventory, representative successful and error tool calls, and close.
- [ ] Keep MCP JSON-RPC as the only stdout output and verify diagnostic output remai

[Read the thread](https://github.com/chrisdoc/hevy-mcp/issues/627) · 2026-07-11 · closed · outside contributor · 0 comments

### test: add nightly diagnostics redaction regression coverage

## Objective

Make live failures actionable without leaking credentials or user/upstream payload detail.

## Scope

Add structured category results, environment/version metadata, classification, concise schema paths, Axios/MCP error normalization, forbidden-value redaction tests, and artifact retention guidance.

## Dependencies

- **Hard dependencies:** None.
- **Optional reuse:** TS-04 schema categorization and TS-06 lane names may be reused, but redaction normalization and regression fixtures

[Read the thread](https://github.com/chrisdoc/hevy-mcp/issues/612) · 2026-07-10 · closed · outside contributor · 2 comments

### ci: establish explicit coverage denominator and ratchet

## Objective

Make coverage percentages represent all intended repository-owned production source, then prevent regression.

## Scope

Add an explicit include/exclude policy; merge or flag unit/MCP/stdio reports; record the merged-main baseline; configure project and patch policy; enumerate stronger expectations for risk-heavy modules.

## Dependencies

- **Hard dependencies:** TS-06 for stable lane names and reproducible report composition.
- **Optional/independent inputs:** TS-03 and TS-05 are

[Read the thread](https://github.com/chrisdoc/hevy-mcp/issues/611) · 2026-07-10 · closed · outside contributor · 2 comments

The remaining reports are on [the project's issue tracker](https://github.com/chrisdoc/hevy-mcp/issues).
