# WorkoutX Exercise API

> Exercise API MCP: 1,900+ exercises with video, workout generator, supplements, dev tools.

- name: io.github.furkanuruk/workoutx
- version: 2.1.0
- connection class: R1 (autonomous)
- trust: 97/100
- quality: 86/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.furkanuruk%2Fworkoutx
- tools: https://api.protogrid.dev/v1/servers/io.github.furkanuruk%2Fworkoutx/tools

**An agent can connect on its own if it already holds `X_WORKOUTX_KEY`, `X_WORKOUTX_KEY`.** Remote endpoint behind a static API key or header. The registry never sees the value; the agent fills the placeholder.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "workoutx": {
      "type": "http",
      "url": "https://api.workoutxapp.com/mcp",
      "headers": {
        "X-WorkoutX-Key": "${X_WORKOUTX_KEY}",
        "Authorization": "${X_WORKOUTX_KEY}"
      }
    }
  }
}
```

Placeholders to fill: `${X_WORKOUTX_KEY}`, `${X_WORKOUTX_KEY}`.

## Trust

- hygiene: 100
- liveness: 100
- freshness: 100
- provenance: 90
- drivers: +repository +namespace-matches-repo +website +reachable +uptime-100% +updated-16d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 86/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 88 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 23 of 23 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: find_similar_exercises (destructiveHint, idempotentHint); list_exercise_filters (destructiveHint, idempotentHint); get_exercise (destructiveHint, idempotentHint); …
- pass `tools.token_cost`: about 4,627 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump
- pass `tools.hidden_text`: no hidden text in tool names, descriptions, schemas or annotations

### stability: 100 (weight 15)

- pass `stability.changes`: 3 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name
- pass `stability.new_links`: no tool change named a new site

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: deps.dev does not know workoutx-mcp@2.1.0

- tools: 23, about 4,627 tokens to load them all
- tool set hash: 9119c6d2b4450be7bafec3034a5b06f3
- tools last changed: 2026-11-05T10:27:29.951Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.furkanuruk/workoutx.svg)](https://protogrid.dev/servers/io.github.furkanuruk/workoutx)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-11-05 `estimate_body_fat` added
  - Body fat estimates from published equations using tape measurements: Relative Fat Mass (height, waist), U.S. Navy (adds neck, plus hip for women) and Deurenberg (adds weight, age). For adults and general wellness only, not medical advice. No photo needed.
- 2026-11-05 `get_body_scan_sample_response` added
  - A realistic sample of any Body Scan API response, so you can build and test the UI without spending scan credits. Covers success, an unreliable photo, errors and progress results.
- 2026-11-05 `get_body_scan_integration` added
  - How to add the WorkoutX Body Scan API to an app: endpoint, auth, fields, response shape, errors and ready-to-paste code. It returns docs only and never takes a photo: your app sends photos straight to the Body Scan API.

Full history: https://api.protogrid.dev/v1/servers/io.github.furkanuruk%2Fworkoutx/changes

## Dependencies

- npm workoutx-mcp@2.1.0: unknown

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0.

## Remotes

- https://api.workoutxapp.com/mcp (streamable-http, auth api_key ${X_WORKOUTX_KEY}, reachable true, uptime30d 1)

## Packages

- npm workoutx-mcp@2.1.0 secrets: WORKOUTX_API_KEY

## Tools (23)

- `check_api_key`: Confirm the configured API key works and show the plan and remaining quota. Uses one request.
- `diagnose_request`: Paste a failing WorkoutX request (curl, URL or "GET /v2/...") and optionally the status and response body: explains what is wrong (wrong host, key in the URL, missing header, unknown or repeated parameter, invalid value, v1 id, plan gate, rate limit, quota, expired media link) and how to fix it. Only reads the text; never sends the request. Uses one request.
- `estimate_body_fat`: Body fat estimates from published equations using tape measurements: Relative Fat Mass (height, waist), U.S. Navy (adds neck, plus hip for women) and Deurenberg (adds weight, age). For adults and general wellness only, not medical advice. No photo needed.
- `estimate_calories`: Calories burned for an exercise from its MET value, body weight and duration.
- `export_exercise_seed`: Exercise ids, names, muscles and equipment without media, as JSON or CSV, to seed your own database or fixtures. Does not use the distinct-exercise media limit. Page with offset; plan caps per call apply (Free 10, Starter 100, others 200).
- `find_exercise_alternatives`: Ranked swaps that train the same muscles, e.g. when equipment is missing. Optionally require or exclude equipment.
- `find_similar_exercises`: Exercises most similar to the given one (same pattern, muscles and equipment), ranked by score.
- `generate_program`: A multi-week program with periodisation, deloads and weekly volume targets. Needs the Scale plan.
- `generate_types`: Ready-to-paste TypeScript, Swift (Codable), Kotlin (kotlinx.serialization) or Dart models for v2 responses, generated from the OpenAPI spec. Uses one request.
- `generate_workout`: One complete session built from movement patterns: warm-up, main work with sets/reps/rest, cool-down and swap suggestions. Needs the Growth plan or higher.
- `get_body_scan_integration`: How to add the WorkoutX Body Scan API to an app: endpoint, auth, fields, response shape, errors and ready-to-paste code. It returns docs only and never takes a photo: your app sends photos straight to the Body Scan API.
- `get_body_scan_sample_response`: A realistic sample of any Body Scan API response, so you can build and test the UI without spending scan credits. Covers success, an unreliable photo, errors and progress results.
- `get_code_example`: A working snippet for a platform and task: listing and paging exercises, playing the looping MP4 and refreshing its signed link, the workout generator, error and rate-limit handling, or a backend proxy that keeps your key off the device. Uses one request.
- `get_endpoint_reference`: Parameters, response shape, errors and a curl example for any v2 endpoint, straight from the OpenAPI spec. Call with no endpoint to list them all. Uses one request.
- `get_exercise`: One exercise by v2 id: instructions, tips, muscles, equipment, sets/reps guidance, calories and signed media links.
- `get_exercise_media`: Fresh signed MP4 and thumbnail links for one exercise (links expire; call again rather than storing them).
- `get_supplement_stack`: A recommended stack for a goal with dosages and timing. Needs the Scale plan.
- `get_trending_exercises`: The exercises and filters (body parts, muscles, equipment, categories) requested most across WorkoutX apps in the last 30 days. Anonymised: only values at least 3 different accounts asked for, filters as shares. Good for deciding what to feature in an app. Uses one request.
- `get_usage_stats`: Your account's API usage: requests, success rate, response times (avg and p95), errors by status code, top endpoints, daily counts, live quota, rate limit and media-limit usage. Use it to answer "why am I getting 429s?" or "when will my quota run out?". Uses one request.
- `list_exercise_filters`: Every valid value (with counts) for body parts, target muscles, equipment, categories and muscles. Call this before search_exercises when unsure of a value.
- `map_v1_exercise`: Find the v2 exercise for an old v1 id (e.g. "0025"), with the match quality: exact, equivalent, alternative, closest or none.
- `search_exercises`: Search 1,900+ exercises. Filters are optional and case-insensitive; combining two or more filters needs the Starter plan or higher. Results include instructions, tips, muscles, equipment, difficulty, calories and signed MP4/thumbnail links.
- `search_supplements`: Supplements with evidence ratings, dosage and timing. Filter by category, goal, timing, evidence or free text. Needs the Growth plan or higher.
