Talk to your Hevy workout data from Claude, Cursor, Codex, and other MCP clients. Connect to the hosted MCP · Use the Hevy CLI · Watch the 18-second demo · Explore all 22 tools
$ npx -y skills add chrisdoc/hevy-mcp --agent claude-code
Run the curl in your terminal, the rest in Claude Code.
Repo: chrisdoc/hevy-mcp
What's inside
Talk to your Hevy workout data from Claude, Cursor, Codex, and other MCP clients.
Connect to the hosted MCP · Use the Hevy CLI · Watch the 18-second demo · Explore all 22 tools
Prefer the terminal? The separate
@chrisdoc/hevy-cli
package reads workouts, routines, exercises, and body measurements directly
from the Hevy API, and can create or update those resources with explicit
confirmation. Deletion is not supported.
npm install -g @chrisdoc/hevy-cli
export HEVY_API_KEY=your-hevy-api-key
hevy workouts list --page-size 10
hevy summary --weeks 4
Add --json to any command for scripts and pipelines. The CLI is a standalone
Hevy API client, not an MCP wrapper. See
packages/cli/README.md for the full command
reference, pagination behavior, and exit codes.
hevy-mcp is an open-source Model Context Protocol (MCP)
server for the Hevy fitness and workout tracking
app. It lets AI assistants read, analyze, create, and update your Hevy workouts,
routines, exercise templates, and body measurements through authenticated Hevy
API requests.
The repository is organized as a private workspace with explicit runtime
boundaries: @hevy-mcp/hevy-client owns the web-safe Hevy client,
@hevy-mcp/core owns MCP tools and server construction, hevy-mcp is the
published Node.js stdio adapter, and @hevy-mcp/worker is the private
Cloudflare HTTP/OAuth adapter. Only the Node workspace is publishable.
A Hevy API key, available with Hevy PRO, is required.
In the demo, the assistant retrieves real Hevy data and answers a multi-part training question with evidence from the user's workout history.
npx, bunx,
or the official Docker image.Try asking:
Analyze my training over the last six weeks. Show workouts per week, my most frequently trained exercises, any obvious gaps or inconsistencies, and cite the workout evidence you used.
Find my push-day routine and show its exercises and sets.
Compare my recent body measurements with my training consistency.
Create a completed workout from my saved routine. Ask me for any missing set results before writing it to Hevy.
The repository includes a Claude plugin that connects to the hosted OAuth-enabled MCP endpoint without embedding a user's Hevy API key.
In Claude, open Settings → Connectors → Add custom connector and enter:
https://mcp.hevy-mcp.dev/mcp
Complete the OAuth flow and enter the Hevy API key when prompted. The same remote endpoint can be used by Claude Desktop and other clients that support remote MCP connectors.
The Claude plugin is defined by .claude-plugin/plugin.json
and .mcp.json. Install it from this public repository or from
the Claude Plugin Directory after publication. It adds the hosted Hevy MCP
connector and the Hevy workout skill.
See the privacy policy for the hosted service's data handling details.
Create an API key in Hevy, then keep it somewhere secure. API access currently requires a Hevy PRO subscription.
hevy-mcp to your clientThe hosted Cloudflare endpoint is the fastest way to start. It runs remotely, so your client does not need Node.js, Bun, Docker, or a local server process.
Production URL:
https://mcp.hevy-mcp.dev/mcp
The endpoint uses Streamable HTTP. Send your Hevy API key as a bearer token on every request.
Codex CLI, the Codex desktop app, and the IDE extension share the same MCP configuration. Make your Hevy API key available in the environment that starts Codex, then add the hosted server:
export HEVY_API_KEY=your-hevy-api-key
codex mcp add hevy \
--url https://mcp.hevy-mcp.dev/mcp \
--bearer-token-env-var HEVY_API_KEY
Codex stores the environment variable name, not the key itself, in its MCP
configuration. Restart Codex or begin a new session, then run codex mcp list
to verify the server is configured.
Clients that accept a remote MCP URL and fixed headers commonly use this shape:
{
"mcpServers": {
"hevy": {
"url": "https://mcp.hevy-mcp.dev/mcp",
"headers": {
"Authorization": "Bearer your-hevy-api-key"
}
}
}
}
Exact configuration keys vary by client. The hosted server requires support for
Streamable HTTP and a fixed Authorization header.
[!IMPORTANT] Treat the bearer value like a password. The Worker validates it with Hevy for each request, does not store it, and forwards it to Hevy only as the required
api-keyheader.
Choose local stdio if you prefer to run the server on your own machine or your client cannot attach a fixed authorization header to remote MCP requests.
codex mcp add hevy \
--env HEVY_API_KEY=your-hevy-api-key \
-- npx -y hevy-mcp
Add this mcpServers entry to your client configuration:
{
"mcpServers": {
"hevy": {
"command": "npx",
"args": ["-y", "hevy-mcp"],
"env": {
"HEVY_API_KEY": "your-hevy-api-key"
}
}
}
}
There are two ways to configure the Hevy MCP server for Google Antigravity (agy):
This utilizes the built-in plugin system:
Install the plugin:
agy plugin install https://github.com/chrisdoc/hevy-mcp
Provide the HEVY_API_KEY in your host shell environment so the CLI child process can inherit it:
HEVY_API_KEY in your system/shell configurations:
~/.zshrc or ~/.bashrc):
export HEVY_API_KEY="your-actual-api-key"
[Environment]::SetEnvironmentVariable("HEVY_API_KEY", "your-actual-api-key", "User")
agy:
export HEVY_API_KEY="your-actual-api-key"
If you prefer configuring it statically via the global configuration file:
Open your global MCP configuration file:
~/.gemini/config/mcp_config.jsonAdd the hevy configuration block under the mcpServers key. Make sure to merge this entry with any existing servers you have configured rather than replacing the entire file contents:
{
"mcpServers": {
"hevy": {
"command": "npx",
"args": ["-y", "hevy-mcp"],
"env": {
"HEVY_API_KEY": "your-actual-api-key"
}
}
}
}
Common local configuration locations:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json~/.cursor/mcp.jsonRestart or reconnect the client after saving the file.
Configure your client to launch this command with HEVY_API_KEY in the child
process environment:
npx -y hevy-mcp
npx requires Node.js 20 or newer. Restart or reconnect your client after
saving its configuration.
Requires Bun:
{
"mcpServers": {
"hevy": {
"command": "bunx",
"args": ["hevy-mcp@latest"],
"env": {
"HEVY_API_KEY": "your-hevy-api-key"
}
}
}
}
Official images support linux/amd64 and linux/arm64. Keep stdin open with
-i because the container runs the stdio MCP server:
export HEVY_API_KEY=your-hevy-api-key
docker run -i --rm -e HEVY_API_KEY ghcr.io/chrisdoc/hevy-mcp:latest
For an MCP client, store the key in a protected environment file and configure the client to launch Docker:
{
"mcpServers": {
"hevy": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--env-file",
"/absolute/path/to/hevy-mcp.env",
"ghcr.io/chrisdoc/hevy-mcp:latest"
]
}
}
}
Pin an exact image tag such as ghcr.io/chrisdoc/hevy-mcp:X.Y.Z when you need
reproducible upgrades.
You can also add the npm server to supported clients with
add-mcp:
npx add-mcp hevy-mcp --env "HEVY_API_KEY=your-hevy-api-key"
Try one of these after restarting or reconnecting your MCP client:
Your assistant should ask for approval before mutation tools when the client supports tool confirmations.
Hosted: Your AI assistant → Streamable HTTP → Cloudflare Worker → Hevy API
Local: Your AI assistant → MCP over stdio → local hevy-mcp → Hevy API
The hosted endpoint creates a fresh MCP server and Hevy client for each request. It validates the supplied key with Hevy, keeps no shared user session, and does not persist the key. The local server follows the same tool contract but runs on your machine and receives the key through its child-process environment.
In either mode, read tools retrieve data; mutation tools create or replace data only when your assistant calls them.
These server-provided MCP prompts coordinate common multi-step workflows:
| Prompt | Arguments | Workflow |
|---|---|---|
analyze-workout-progress | Optional weeks from 1-12; default 4 | Calls get-training-summary, then analyzes workout activity and body-measurement trends from the returned evidence. |
create-workout-from-routine | Required routine_id and UTC start_time | Loads a routine, collects actual completed-set data and an end time, then creates a workout without inventing results. |
[!NOTE] With MCP SDK v1.29.0, clients invoking
analyze-workout-progresswith its default value must sendarguments: {}. Omitting the entireargumentsobject is rejected by that SDK version before the default is applied.
hevy-mcp registers 22 tools. Read-only tools are safe for exploration; create
and update tools are exposed with MCP mutation annotations so compatible clients
can request confirmation.
| Category | Tool | Description |
|---|---|---|
| Training analysis | get-training-summary | Summarize 1-12 weeks of workout activity and body-measurement trends in one call. |
| Workouts | get-workouts | List workouts from newest to oldest with exercise and timing details. |
| Workouts | get-workout | Get complete details for one workout by ID. |
| Workouts | get-workout-events | List workout update and delete events since a timestamp. |
| Workouts | create-workout | Create a completed workout in Hevy. |
| Workouts | update-workout | Patch workout metadata by ID; omitted fields and all exercises remain unchanged. |
| Workouts | replace-workout-exercises | Replace all exercises and sets while preserving workout metadata. |
| Routines | search-routines | Search routine titles and return compact metadata for discovery. |
| Routines | get-routines | List custom and default workout routines. |
| Routines | get-routine | Get one routine and its exercise configuration by ID. |
| Routines | create-routine | Create a reusable workout routine. |
| Routines | update-routine | Replace an existing routine's content. |
| Routine folders | get-routine-folder | Get one routine folder's metadata by ID. |
| Routine folders | create-routine-folder | Create a routine folder. |
| Exercise templates | get-exercise-template | Get complete metadata for one exercise template by ID. |
| Exercise templates | search-exercise-templates | Search the full exercise catalog by title substring. |
| Exercise templates | create-exercise-template | Create a custom exercise template. |
| Exercise history | get-exercise-history | Get past performed sets for one exercise template. |
| Body measurements | get-body-measurements | List dated body measurements. |
| Body measurements | get-body-measurement | Get the body measurement entry for one date. |
| Body measurements | create-body-measurement | Create a dated body measurement. |
| Body measurements | update-body-measurement | Update the body measurement for an existing date. |
The Hevy API currently exposes no delete endpoints for workouts, routines, routine folders, exercise templates, or body measurements, so there are no corresponding delete tools.
| Name | URI | Description |
|---|---|---|
user-profile | hevy://user | Authenticated Hevy user profile. |
workout-count | hevy://workout-count | Total number of workouts in the account. |
exercise-templates | hevy://exercise-templates | Full formatted exercise template catalog. |
routine-folders | hevy://routine-folders | Full formatted list of Hevy routine folders. |
The production MCP server is live at:
https://mcp.hevy-mcp.dev/mcp
It is the quickest way to use hevy-mcp: there is nothing to install or keep
running locally, and it exposes the same 22 tools as the npm package and Docker
image.
The Cloudflare Worker uses stateless Streamable HTTP at POST /mcp.
Clients must send their Hevy API key as a fixed authorization header:
{
"mcpServers": {
"hevy": {
"url": "https://mcp.hevy-mcp.dev/mcp",
"headers": {
"Authorization": "Bearer your-hevy-api-key"
}
}
}
}
The bearer value is your Hevy API key, not an OAuth token. The Worker validates
the key with Hevy on each request, does not store it, and forwards it upstream
only as Hevy's required api-key header.
The hosted production Worker is deployed with an OAUTH_KV namespace binding,
so it exposes a full OAuth 2.1 layer for clients that cannot send a fixed
header, such as Claude.ai custom connectors. Self-hosted Workers can opt in by
following the OAUTH_KV setup in CONTRIBUTING.md:
/.well-known//register) and PKCE token exchange (/token)/authorize page where you paste your Hevy API key once; the key is
validated with Hevy and stored encrypted inside the OAuth grantAdd the Worker URL ending in /mcp as a Claude.ai custom connector and
complete the authorization flow in the browser. Direct
Authorization: Bearer <hevy-api-key> requests keep working unchanged — the
OAuth layer is purely additive — and rotating your Hevy API key invalidates
every OAuth grant created with it.
OAuth access tokens last seven days and refresh tokens last 30 days. This reduces KV writes from frequent hourly refreshes while preserving automatic refresh for supported clients.
The endpoint does not expose legacy SSE or a GET event stream. Without the
opt-in OAuth layer, clients that require OAuth discovery, dynamic
registration, or token refresh are not compatible unless they can send the
fixed custom header above.
A clean clone can deploy the portable TypeScript Wrangler configuration with
npx wrangler deploy --x-new-config and receive a workers.dev URL. OAuth
requires your own OAUTH_KV namespace; custom domains, routes, and
observability destinations are optional account-owned settings. See
CONTRIBUTING.md for setup and
for the distinction between self-hosting and the maintainer-only named
environments.
See CONTRIBUTING.md to deploy the Cloudflare Worker for self-hosted Streamable HTTP.
| Setting | Default | Scope | Notes |
|---|---|---|---|
HEVY_API_KEY | None; required | Local stdio or HTTP | Hevy API key from the Hevy app. Never pass it in a URL. |
HEVY_MCP_API_TIMEOUT | 30000 ms | Local stdio | Positive Hevy API timeout in milliseconds. Invalid values fall back to 30 seconds. |
HEVY_MCP_DEBUG | Disabled | Local Node | Set to exactly 1 for privacy-bounded diagnostics on stderr. Stdout remains reserved for MCP JSON-RPC. |
HEVY_MCP_HTTP_BEARER_TOKEN | None | Non-loopback HTTP | Required when --host is not loopback; use a separate token, never the Hevy API key. |
HEVY_MCP_HTTP_MAX_SESSIONS | 100 | Local HTTP | Maximum established sessions, including sessions currently initializing; excess requests receive 429. |
HEVY_MCP_HTTP_MAX_INITIALIZING | 10 | Local HTTP | Maximum concurrent session initializations; excess requests receive 503 and are not queued. |
HEVY_MCP_HTTP_IDLE_TIMEOUT_MS | 1800000 ms | Local HTTP | Idle sessions are evicted after 30 minutes; each session request resets the timer. |
HEVY_MCP_HTTP_BODY_TIMEOUT_MS | 30000 ms | Local HTTP | Stalled request bodies receive 408; values are bounded to five minutes. |
HEVY_MCP_TELEMETRY | Enabled | Local Node | Set to exactly 0 before startup/import to disable Sentry and OTLP traces/metrics. |
HEVY_MCP_TELEMETRY_DIAGNOSTICS | Enabled | Local Node | Set to exactly 0 to keep structural telemetry while suppressing exception messages and stacks. |
XDG_CACHE_HOME | ~/.cache | Local stdio | Changes the root for the npm update-check cache at hevy-mcp/update-check.json. |
SENTRY_DSN | Packaged Sentry SaaS project DSN | Optional local Node telemetry | Sentry project DSN override. An empty value disables Sentry export. The Worker does not import Node telemetry. |
SENTRY_RELEASE | hevy-mcp@<installed-version> | Optional local Node telemetry | Overrides the release label attached to local Sentry error events. |
-h, --help | N/A | Local stdio CLI | Print supported options and exit. |
-v, --version | N/A | Local stdio CLI | Print the installed version and exit. |
The local Node executable uses stdio by default. Opt into local Streamable HTTP with:
HEVY_API_KEY=your-hevy-api-key npx hevy-mcp --transport http --host 127.0.0.1 --port 3000
The local MCP endpoint is http://127.0.0.1:3000/mcp; non-loopback binds
require the separate HEVY_MCP_HTTP_BEARER_TOKEN environment variable. A
Docker deployment must publish the port explicitly:
docker run --rm -p 3000:3000 -e HEVY_API_KEY -e HEVY_MCP_HTTP_BEARER_TOKEN \\
ghcr.io/chrisdoc/hevy-mcp:latest --transport http --host 0.0.0.0 --port 3000
This Node HTTP mode is distinct from the stateless Cloudflare Worker HTTP endpoint described above: the Node server owns stateful client sessions, while the Worker is designed for hosted deployment and does not import Node code.
search-exercise-templates and hevy://exercise-templates share a
server-scoped in-memory catalog cache:
Entries live for five minutes, and the cache holds at most one catalog.
Concurrent catalog requests share an in-flight fetch when possible.
search-exercise-templates accepts refresh: true to invalidate the cache.
Each hosted Worker request gets a fresh cache, preventing cross-key sharing.
The local Node package enables project telemetry by default. It is local Node
behavior only; the Cloudflare Worker does not import Node telemetry. Set
HEVY_MCP_TELEMETRY=0 before startup or import to disable all project
telemetry. Only the literal value 0 opts out: an unset value, an empty value,
1, false, and every other value remain enabled. The master setting takes
precedence over SENTRY_DSN and packaged or runtime OTEL_COLLECTOR_TOKEN
credentials, so the disabled path creates no telemetry exporters or periodic
metric readers and makes no telemetry network requests. SENTRY_DSN remains a
Sentry-only setting; when telemetry is enabled, an empty value disables only
Sentry export.
When enabled, actionable errors are sent to the Sentry project configured by
SENTRY_DSN; Sentry performance tracing is disabled. Exception messages and
stacks are bounded and scrubbed before export. Set
HEVY_MCP_TELEMETRY_DIAGNOSTICS=0 to keep structural traces and metrics while
suppressing those details. Traces and metrics continue to be sent to the
collector at
https://otel.chrisdoc.dev/v1/traces and
https://otel.chrisdoc.dev/v1/metrics, which forward to Honeycomb. Metrics
export every 30 seconds.
The API key is never exported and is not used to derive a user identity. A per-failure diagnostic ID and OTel trace ID may be attached to actionable errors for support correlation. Structured telemetry contains only bounded service, release, transport, tool, outcome, error, count, retry, duration, session, cache, workflow, API method, normalized endpoint, and status fields.
Exception messages and stacks are treated as diagnostic details: they are
length-limited, scrubbed for credentials, URLs, and local home paths, and
removed entirely when HEVY_MCP_TELEMETRY_DIAGNOSTICS=0. Prompts, tool
arguments, tool results, request bodies, API keys, raw identifiers/queries,
exact dates, workout/routine/folder/template/body-measurement content,
names/titles/descriptions/notes, measurement values, arbitrary client
metadata, and unnormalized endpoint paths remain prohibited.
HEVY_API_KEY out of source control, URLs, logs, and screenshots.Authorization: Bearer header. The
Worker validates each key with Hevy, does not store it, and sends it upstream
only as Hevy's api-key header.MCP_ALLOWED_ORIGINS..dev.vars.example to .dev.vars to disable
Origin validation for MCP Inspector. PR preview Workers use the same
development-only setting because their browser origins are dynamic. Never
set MCP_DISABLE_ORIGIN_CHECK=true on a production Worker.npx fails: confirm that Node.js 20 or newer is installed, then run
npx -y hevy-mcp --version in a terminal.codex mcp list, then start a new Codex
session after confirming the hevy entry exists.Authorization: Bearer <HEVY_API_KEY>.HEVY_API_KEY.HEVY_MCP_DEBUG=1. Diagnostic output goes to stderr
and does not interfere with MCP messages on stdout.If you find a bug or have a feature request, open an issue.
Contributions are welcome. Developer setup, testing lanes, generated-client workflows, Cloudflare Worker deployment, and pull request rules are documented in CONTRIBUTING.md.
.agents/
daemons/
docs-drift-maintainer/
DAEMON.md
pr-check-repair/
DAEMON.md
pr-merge-conflict-repair/
DAEMON.md
scripts/
find-conflicted-pulls.ts
pr-metadata/
DAEMON.md
triage-sentry-issues/
DAEMON.md
skills/
build-mcp-server/
references/
auth.md
deploy-cloudflare-workers.md
elicitation.md
remote-http-scaffold.md
resources-and-prompts.md
server-capabilities.md
tool-design.md
versions.md
SKILL.md
build-mcpb/
references/
local-security.md
manifest-schema.md
SKILL.md
code-review/
SKILL.md
improve-codebase-architecture/
HTML-REPORT.md
SKILL.md
sentry/
agents/
openai.yaml
assets/
sentry-small.svg
sentry.png
LICENSE.txt
SKILL.md
thermo-nuclear-code-quality-review/
SKILL.md
wayfinder/
SKILL.md
.changeset/
claude-plugin.md
config.json
README.md
remove-workflow-tests.md
.claude-plugin/
plugin.json
.cm/
gitstream.cm
plugins/
filters/
findDiffLocation/
index.js
package.json
.coderabbit.yaml
.deepsource.toml
.dependency-cruiser.cjs
.dev.vars.example
.dockerignore
.env.sample
.github/
actionlint.yaml
dependabot.yml
workers/
preview-bootstrap.ts
workflows/
build-and-test.yml
codeql.yml
copilot-setup-steps.yml
dependabot-changeset.yml
deploy-worker.yml
format-pr.yml
gitstream.yml
nightly-mcp-test.yml
publish-unit-test-results.yml
release.yml
stale.yml
token-cost.yml
workflow-lint.yml
.gitignore
.mcp.json
.npmrc
.nvmrc
.omp/
mcp.json
.oxfmtrc.json
.oxlintrc.json
.pinact.yaml
AGENTS.md
autoresearch.sh
CHANGELOG.md
CLAUDE.md
cloudflare.config.ts
codecov.yml
commitlint.config.js
CONTRIBUTING.md
Dockerfile
docs/
architecture.md
assets/
hevy-mcp-demo.gif
hevy-mcp-demo.mp4
clickstack-metrics.md
cloudflare-worker-version-attribution.md
contributor-onboarding.md
control-plane-baseline.md
deployment-modes.md
nx-dependency-cruiser-spike.md
privacy-policy.md
superpowers/
plans/
2026-07-04-run-integration-tests-conditionally.md
specs/
2026-07-04-run-integration-tests-conditionally-design.md
telemetry-dashboards.md
telemetry-data-dictionary.md
test-lanes.md
testing-strategy.md
token-cost-tracking.md
TYPE_SAFETY_GUIDE.md
greptile.json
hk.pkl
issue-artifacts/
941/
runtime-architecture-review-2026-08-07.html
lhm.plugin.json
LICENSE
mcp_config.json
mise.toml
nx.json
openapi-spec.json
package-lock.json
package.json
packages/
cli/
CHANGELOG.md
package.json
README.md
src/
arguments.test.ts
arguments.ts
auth.ts
cli.ts
commands/
index.test.ts
index.ts
errors.ts
input.test.ts
input.ts
main.test.ts
main.ts
output/
contracts.ts
human.ts
write.ts
routes.ts
tests/
npm-pack-smoke.mjs
tsconfig.json
tsdown.config.ts
core/
CHANGELOG.md
package.json
src/
execution.test.ts
execution.ts
index.ts
mutations.ts
observation.test.ts
observation.ts
prompts/
workouts.test.ts
workouts.ts
resources/
hevy.test.ts
hevy.ts
server-metadata.test.ts
server-metadata.ts
server.ts
tools/
annotations.test.ts
body-measurements.test.ts
body-measurements.ts
capabilities.ts
define-tool.ts
folders.test.ts
folders.ts
input-schemas.test.ts
input-schemas.ts
mutation-semantics.test.ts
mutation-semantics.ts
register.test.ts
register.ts
routine-discovery.test.ts
routine-discovery.ts
routines.test.ts
routines.ts
templates.test.ts
templates.ts
tool-runtime.test.ts
tool-runtime.ts
user.test.ts
user.ts
workflows.test.ts
workflows.ts
workouts.test.ts
workouts.ts
utils/
cache.test.ts
cache.ts
compact-json-schema.test.ts
compact-json-schema.ts
error-handler.test.ts
error-handler.ts
error-policy.ts
exercise-template-catalog.test.ts
exercise-template-catalog.ts
formatters.test.ts
hevy-error-policy.test.ts
hevy-error-policy.ts
json-parser.test.ts
json-parser.ts
mcp-client-logger.test.ts
mcp-client-logger.ts
output-schemas.test.ts
pagination.test.ts
pagination.ts
response-contracts.test.ts
response-contracts.ts
result-telemetry.ts
safe-error-diagnostic.test.ts
safe-error-diagnostic.ts
schemas.test.ts
schemas.ts
tool-annotations.ts
tool-helpers.ts
tool-taxonomy.ts
tsconfig.json
hevy-client/
CHANGELOG.md
kubb.config.ts
package.json
src/
endpoint-policy.test.ts
endpoint-policy.ts
execution.ts
generated/
.kubb/
config.ts
fetch.ts
client/
api/
getV1BodyMeasurements.ts
getV1BodyMeasurementsDate.ts
getV1ExerciseHistoryExercisetemplateid.ts
getV1ExerciseTemplates.ts
getV1ExerciseTemplatesExercisetemplateid.ts
getV1RoutineFolders.ts
getV1RoutineFoldersFolderid.ts
getV1Routines.ts
getV1RoutinesRoutineid.ts
getV1UserInfo.ts
getV1Workouts.ts
getV1WorkoutsCount.ts
getV1WorkoutsEvents.ts
getV1WorkoutsWorkoutid.ts
index.ts
postV1BodyMeasurements.ts
postV1ExerciseTemplates.ts
postV1RoutineFolders.ts
postV1Routines.ts
postV1Workouts.ts
putV1BodyMeasurementsDate.ts
putV1RoutinesRoutineid.ts
putV1WorkoutsWorkoutid.ts
bodyMeasurement.json
createCustomExerciseRequestBody.json
customExerciseType.json
deletedWorkout.json
equipmentCategory.json
exercise.json
exerciseHistoryEntry.json
exerciseTemplate.json
muscleGroup.json
paginatedWorkoutEvents.json
postRoutineFolderRequestBody.json
postRoutinesRequestBody.json
postRoutinesRequestExercise.json
postRoutinesRequestSet.json
postWorkoutsRequestBody.json
postWorkoutsRequestExercise.json
postWorkoutsRequestSet.json
putBodyMeasurement.json
putRoutinesRequestBody.json
putRoutinesRequestExercise.json
putRoutinesRequestSet.json
routine.json
routineFolder.json
schemas/
bodyMeasurementSchema.ts
createCustomExerciseRequestBodySchema.ts
customExerciseTypeSchema.ts
deletedWorkoutSchema.ts
equipmentCategorySchema.ts
exerciseHistoryEntrySchema.ts
exerciseSchema.ts
exerciseTemplateSchema.ts
getV1BodyMeasurementsDateSchema.ts
getV1BodyMeasurementsSchema.ts
getV1ExerciseHistoryExercisetemplateidSchema.ts
getV1ExerciseTemplatesExercisetemplateidSchema.ts
getV1ExerciseTemplatesSchema.ts
getV1RoutineFoldersFolderidSchema.ts
getV1RoutineFoldersSchema.ts
getV1RoutinesRoutineidSchema.ts
getV1RoutinesSchema.ts
getV1UserInfoSchema.ts
getV1WorkoutsCountSchema.ts
getV1WorkoutsEventsSchema.ts
getV1WorkoutsSchema.ts
getV1WorkoutsWorkoutidSchema.ts
index.ts
muscleGroupSchema.ts
paginatedWorkoutEventsSchema.ts
postRoutineFolderRequestBodySchema.ts
postRoutinesRequestBodySchema.ts
postRoutinesRequestExerciseSchema.ts
postRoutinesRequestSetSchema.ts
postV1BodyMeasurementsSchema.ts
postV1ExerciseTemplatesSchema.ts
postV1RoutineFoldersSchema.ts
postV1RoutinesSchema.ts
postV1WorkoutsSchema.ts
postWorkoutsRequestBodySchema.ts
postWorkoutsRequestExerciseSchema.ts
postWorkoutsRequestSetSchema.ts
putBodyMeasurementSchema.ts
putRoutinesRequestBodySchema.ts
putRoutinesRequestExerciseSchema.ts
putRoutinesRequestSetSchema.ts
putV1BodyMeasurementsDateSchema.ts
putV1RoutinesRoutineidSchema.ts
putV1WorkoutsWorkoutidSchema.ts
routineFolderSchema.ts
routineSchema.ts
setSchema.ts
updatedWorkoutSchema.ts
userInfoResponseSchema.ts
userInfoSchema.ts
workoutSchema.ts
set.json
types/
BodyMeasurement.ts
CreateCustomExerciseRequestBody.ts
CustomExerciseType.ts
DeletedWorkout.ts
EquipmentCategory.ts
Exercise.ts
ExerciseHistoryEntry.ts
ExerciseTemplate.ts
GetV1BodyMeasurements.ts
GetV1BodyMeasurementsDate.ts
GetV1ExerciseHistoryExercisetemplateid.ts
GetV1ExerciseTemplates.ts
GetV1ExerciseTemplatesExercisetemplateid.ts
GetV1RoutineFolders.ts
GetV1RoutineFoldersFolderid.ts
GetV1Routines.ts
GetV1RoutinesRoutineid.ts
GetV1UserInfo.ts
GetV1Workouts.ts
GetV1WorkoutsCount.ts
GetV1WorkoutsEvents.ts
GetV1WorkoutsWorkoutid.ts
index.ts
MuscleGroup.ts
PaginatedWorkoutEvents.ts
PostRoutineFolderRequestBody.ts
PostRoutinesRequestBody.ts
PostRoutinesRequestExercise.ts
PostRoutinesRequestSet.ts
PostV1BodyMeasurements.ts
PostV1ExerciseTemplates.ts
PostV1RoutineFolders.ts
PostV1Routines.ts
PostV1Workouts.ts
PostWorkoutsRequestBody.ts
PostWorkoutsRequestExercise.ts
PostWorkoutsRequestSet.ts
PutBodyMeasurement.ts
PutRoutinesRequestBody.ts
PutRoutinesRequestExercise.ts
... 226 moreFAQ
hevy-mcp is a Claude Code plugin with 2 hand-picked skills for data work, indexed on Flowy. Install it with the command on its page. It includes hevy-cli, hevy-workouts. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.