Exercise API MCP: 1,900+ exercises with video, workout generator, supplements, dev tools.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
WorkoutX API key (free at https://workoutxapp.com/dashboard.html)
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Confirm the configured API key works and show the plan and remaining quota. Uses one request.
This tool takes no arguments.
Confirm the configured API key works and show the plan and remaining quota. Uses one request.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}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.
| Argument | Type | Description |
|---|---|---|
| status | integer | |
| request* | string | curl command, URL or "GET /v2/..." line, with headers if you have them |
| response | string | Response body, if any |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"request"
],
"properties": {
"status": {
"type": "integer",
"maximum": 599,
"minimum": 100
},
"request": {
"type": "string",
"maxLength": 20000,
"minLength": 1,
"description": "curl command, URL or \"GET /v2/...\" line, with headers if you have them"
},
"response": {
"type": "string",
"maxLength": 5000,
"description": "Response body, if any"
}
},
"additionalProperties": false
}Calories burned for an exercise from its MET value, body weight and duration.
| Argument | Type | Description |
|---|---|---|
| id* | string | v2 exercise id, e.g. "ex_GE5XEP" |
| minutes | number | Duration in minutes (default 10) |
| weightKg | number | Body weight in kg (default 70) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "v2 exercise id, e.g. \"ex_GE5XEP\""
},
"minutes": {
"type": "number",
"description": "Duration in minutes (default 10)",
"exclusiveMinimum": 0
},
"weightKg": {
"type": "number",
"description": "Body weight in kg (default 70)",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}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).
| Argument | Type | Description |
|---|---|---|
| lang | string | Language for names, instructions and tips (default en) |
| limit | integer | Max results (default 200, plan caps apply) |
| model | string | Animation model |
| fields | array | Default: name, model, bodyPart, target, equipment, difficulty, category |
| format | string | Default json |
| offset | integer | |
| target | string | |
| bodyPart | string | |
| category | string | |
| equipment | string |
Ranked swaps that train the same muscles, e.g. when equipment is missing. Optionally require or exclude equipment.
| Argument | Type | Description |
|---|---|---|
| id* | string | v2 exercise id, e.g. "ex_GE5XEP" |
| lang | string | Language for names, instructions and tips (default en) |
| limit | integer | Max results (default 10, plan caps apply) |
| model | string | |
| equipment | string | Only alternatives using this equipment (comma-separated) |
| excludeEquipment | string | Leave out this equipment (comma-separated) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "v2 exercise id, e.g. \"ex_GE5XEP\""
},
"lang": {
"enum": [
"en",
"tr",
"de",
"es",
"fr",
"zh-SG",
"zh-HK"
],
"type": "string",
"description": "Language for names, instructions and tips (default en)"
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Max results (default 10, plan caps apply)"
},
"model": {
"enum": [
"male",
"female",
"any"
],
"type": "string"
},
"equipment": {
"type": "string",
"description": "Only alternatives using this equipment (comma-separated)"
},
"excludeEquipment": {
"type": "string",
"description": "Leave out this equipment (comma-separated)"
}
},
"additionalProperties": false
}Exercises most similar to the given one (same pattern, muscles and equipment), ranked by score.
| Argument | Type | Description |
|---|---|---|
| id* | string | v2 exercise id, e.g. "ex_GE5XEP" |
| lang | string | Language for names, instructions and tips (default en) |
| limit | integer | Max results (default 10, plan caps apply) |
| model | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "v2 exercise id, e.g. \"ex_GE5XEP\""
},
"lang": {
"enum": [
"en",
"tr",
"de",
"es",
"fr",
"zh-SG",
"zh-HK"
],
"type": "string",
"description": "Language for names, instructions and tips (default en)"
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Max results (default 10, plan caps apply)"
},
"model": {
"enum": [
"male",
"female",
"any"
],
"type": "string"
}
},
"additionalProperties": false
}A multi-week program with periodisation, deloads and weekly volume targets. Needs the Scale plan.
| Argument | Type | Description |
|---|---|---|
| goal | string | |
| lang | string | Language for names, instructions and tips (default en) |
| seed | string | |
| level | string | |
| model | string | Animation model |
| weeks | integer | Default 4 |
| format | string | |
| duration | integer | Minutes per session (default 60) |
| equipment | array | |
| avoidJoints | array | Joints to spare; exercises that load them are left out |
| daysPerWeek | integer |
Ready-to-paste TypeScript, Swift (Codable), Kotlin (kotlinx.serialization) or Dart models for v2 responses, generated from the OpenAPI spec. Uses one request.
| Argument | Type | Description |
|---|---|---|
| models | array | Default: ExerciseV2, ExercisePageV2, WorkoutV2, ProgramV2. Others: MediaLinksV2, MuscleV2, RankedPageV2, CaloriesV2, SupplementV2, AccountUsageV2, TrendingV2… |
| language* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"language"
],
"properties": {
"models": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20,
"description": "Default: ExerciseV2, ExercisePageV2, WorkoutV2, ProgramV2. Others: MediaLinksV2, MuscleV2, RankedPageV2, CaloriesV2, SupplementV2, AccountUsageV2, TrendingV2…"
},
"language": {
"enum": [
"typescript",
"swift",
"kotlin",
"dart"
],
"type": "string"
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| goal | string | |
| lang | string | Language for names, instructions and tips (default en) |
| seed | string | Same seed + same inputs = same workout |
| level | string | |
| model | string | Animation model |
| split | string | |
| format | string | |
| exclude | array | Exercise ids to leave out |
| duration | integer | Minutes (default 45) |
| bodyFocus | array | Muscles or body parts to emphasise |
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.
| Argument | Type | Description |
|---|---|---|
| topic* | string | |
| platform* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"platform",
"topic"
],
"properties": {
"topic": {
"enum": [
"list-exercises",
"play-video",
"workout-generator",
"handle-errors",
"backend-proxy"
],
"type": "string"
},
"platform": {
"enum": [
"react-native",
"swift",
"flutter",
"nextjs",
"node",
"python"
],
"type": "string"
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| endpoint | string | e.g. "/v2/exercises", "exercises/{id}/alternatives" or a full URL |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"endpoint": {
"type": "string",
"maxLength": 300,
"description": "e.g. \"/v2/exercises\", \"exercises/{id}/alternatives\" or a full URL"
}
},
"additionalProperties": false
}One exercise by v2 id: instructions, tips, muscles, equipment, sets/reps guidance, calories and signed media links.
| Argument | Type | Description |
|---|---|---|
| id* | string | v2 exercise id, e.g. "ex_GE5XEP" |
| lang | string | Language for names, instructions and tips (default en) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "v2 exercise id, e.g. \"ex_GE5XEP\""
},
"lang": {
"enum": [
"en",
"tr",
"de",
"es",
"fr",
"zh-SG",
"zh-HK"
],
"type": "string",
"description": "Language for names, instructions and tips (default en)"
}
},
"additionalProperties": false
}Fresh signed MP4 and thumbnail links for one exercise (links expire; call again rather than storing them).
| Argument | Type | Description |
|---|---|---|
| id* | string | v2 exercise id, e.g. "ex_GE5XEP" |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "v2 exercise id, e.g. \"ex_GE5XEP\""
}
},
"additionalProperties": false
}A recommended stack for a goal with dosages and timing. Needs the Scale plan.
| Argument | Type | Description |
|---|---|---|
| goal* | string | |
| level | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"goal"
],
"properties": {
"goal": {
"enum": [
"muscle_gain",
"strength",
"fat_loss",
"endurance",
"recovery",
"mobility",
"general_health"
],
"type": "string"
},
"level": {
"enum": [
"essential",
"standard",
"comprehensive"
],
"type": "string"
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language for names, instructions and tips (default en) |
| limit | integer | Max results (default 20, plan caps apply) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"lang": {
"enum": [
"en",
"tr",
"de",
"es",
"fr",
"zh-SG",
"zh-HK"
],
"type": "string",
"description": "Language for names, instructions and tips (default en)"
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Max results (default 20, plan caps apply)"
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| days | integer | Window in days (default 30, max 60) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"days": {
"type": "integer",
"maximum": 60,
"minimum": 1,
"description": "Window in days (default 30, max 60)"
}
},
"additionalProperties": false
}Every valid value (with counts) for body parts, target muscles, equipment, categories and muscles. Call this before search_exercises when unsure of a value.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language for names, instructions and tips (default en) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"lang": {
"enum": [
"en",
"tr",
"de",
"es",
"fr",
"zh-SG",
"zh-HK"
],
"type": "string",
"description": "Language for names, instructions and tips (default en)"
}
},
"additionalProperties": false
}Find the v2 exercise for an old v1 id (e.g. "0025"), with the match quality: exact, equivalent, alternative, closest or none.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language for names, instructions and tips (default en) |
| v1Id* | string | v1 exercise id, e.g. "0025" |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"v1Id"
],
"properties": {
"lang": {
"enum": [
"en",
"tr",
"de",
"es",
"fr",
"zh-SG",
"zh-HK"
],
"type": "string",
"description": "Language for names, instructions and tips (default en)"
},
"v1Id": {
"type": "string",
"minLength": 1,
"description": "v1 exercise id, e.g. \"0025\""
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language for names, instructions and tips (default en) |
| name | string | Partial name match, e.g. "bench press" |
| force | string | |
| limit | integer | Max results (default 10, plan caps apply) |
| model | string | Animation model |
| fields | array | Only these top-level fields, e.g. ["name","target","equipment"]; id is always included. Smaller answers, fewer tokens. |
| muscle | string | Matches primary or secondary muscles |
| offset | integer | |
| target | string | Primary target, e.g. Pectorals, Glutes, Lats |
Supplements with evidence ratings, dosage and timing. Filter by category, goal, timing, evidence or free text. Needs the Growth plan or higher.
| Argument | Type | Description |
|---|---|---|
| goal | string | |
| limit | integer | Max results (default 200, plan caps apply) |
| offset | integer | |
| search | string | |
| timing | string | e.g. pre-workout, post-workout, morning |
| category | string | e.g. protein, creatine, pre-workout |
| evidence | string | e.g. strong, moderate |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"goal": {
"enum": [
"muscle_gain",
"strength",
"fat_loss",
"endurance",
"recovery",
"mobility",
"general_health"
],
"type": "string"
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Max results (default 200, plan caps apply)"
},
"offset": {
"type": "integer",
"minimum": 0
},
"search": {
"type": "string"
},
"timing": {
"type": "string",
"description": "e.g. pre-workout, post-workout, morning"
},
"category": {
"type": "string",
"description": "e.g. protein, creatine, pre-workout"
},
"evidence": {
"type": "string",
"description": "e.g. strong, moderate"
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"lang": {
"enum": [
"en",
"tr",
"de",
"es",
"fr",
"zh-SG",
"zh-HK"
],
"type": "string",
"description": "Language for names, instructions and tips (default en)"
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Max results (default 200, plan caps apply)"
},
"model": {
"enum": [
"male",
"female"
],
"type": "string",
"description": "Animation model"
},
"fields": {
"type": "array",
"items": {
"enum": [
"name",
"model",
"counterpartId",
"category",
"bodyPart",
"target",
"equipment",
"difficulty",
"mechanic",
"force",
"met",
"caloriesPerMinute",
"isUnilateral",
"recommendedSets",
"recommendedReps",
"description",
"instructions",
"tips"
],
"type": "string"
},
"description": "Default: name, model, bodyPart, target, equipment, difficulty, category"
},
"format": {
"enum": [
"json",
"csv"
],
"type": "string",
"description": "Default json"
},
"offset": {
"type": "integer",
"minimum": 0
},
"target": {
"type": "string"
},
"bodyPart": {
"type": "string"
},
"category": {
"enum": [
"strength",
"flexibility",
"cardio",
"yoga",
"plyometric",
"balance"
],
"type": "string"
},
"equipment": {
"type": "string"
}
},
"additionalProperties": false
}| Default 3 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"goal": {
"enum": [
"muscle_gain",
"strength",
"fat_loss",
"endurance",
"mobility",
"general_fitness"
],
"type": "string"
},
"lang": {
"enum": [
"en",
"tr",
"de",
"es",
"fr",
"zh-SG",
"zh-HK"
],
"type": "string",
"description": "Language for names, instructions and tips (default en)"
},
"seed": {
"type": "string"
},
"level": {
"enum": [
"beginner",
"intermediate",
"advanced"
],
"type": "string"
},
"model": {
"enum": [
"male",
"female"
],
"type": "string",
"description": "Animation model"
},
"weeks": {
"type": "integer",
"maximum": 16,
"minimum": 2,
"description": "Default 4"
},
"format": {
"enum": [
"auto",
"straight",
"superset",
"circuit"
],
"type": "string"
},
"duration": {
"type": "integer",
"maximum": 120,
"minimum": 20,
"description": "Minutes per session (default 60)"
},
"equipment": {
"type": "array",
"items": {
"type": "string"
}
},
"avoidJoints": {
"type": "array",
"items": {
"enum": [
"knee",
"shoulder",
"lumbar_spine",
"elbow",
"wrist",
"hip",
"ankle"
],
"type": "string"
},
"description": "Joints to spare; exercises that load them are left out"
},
"daysPerWeek": {
"type": "integer",
"maximum": 6,
"minimum": 2,
"description": "Default 3"
}
},
"additionalProperties": false
}| equipment |
| array |
| Available equipment, e.g. ["dumbbell","bench"]; empty = gym |
| avoidJoints | array | Joints to spare; exercises that load them are left out |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"goal": {
"enum": [
"muscle_gain",
"strength",
"fat_loss",
"endurance",
"mobility",
"general_fitness"
],
"type": "string"
},
"lang": {
"enum": [
"en",
"tr",
"de",
"es",
"fr",
"zh-SG",
"zh-HK"
],
"type": "string",
"description": "Language for names, instructions and tips (default en)"
},
"seed": {
"type": "string",
"description": "Same seed + same inputs = same workout"
},
"level": {
"enum": [
"beginner",
"intermediate",
"advanced"
],
"type": "string"
},
"model": {
"enum": [
"male",
"female"
],
"type": "string",
"description": "Animation model"
},
"split": {
"enum": [
"full_body",
"upper",
"lower",
"push",
"pull",
"legs",
"core",
"conditioning",
"mobility",
"push_pull_legs",
"upper_lower"
],
"type": "string"
},
"format": {
"enum": [
"auto",
"straight",
"superset",
"circuit"
],
"type": "string"
},
"exclude": {
"type": "array",
"items": {
"type": "string"
},
"description": "Exercise ids to leave out"
},
"duration": {
"type": "integer",
"maximum": 120,
"minimum": 15,
"description": "Minutes (default 45)"
},
"bodyFocus": {
"type": "array",
"items": {
"type": "string"
},
"description": "Muscles or body parts to emphasise"
},
"equipment": {
"type": "array",
"items": {
"type": "string"
},
"description": "Available equipment, e.g. [\"dumbbell\",\"bench\"]; empty = gym"
},
"avoidJoints": {
"type": "array",
"items": {
"enum": [
"knee",
"shoulder",
"lumbar_spine",
"elbow",
"wrist",
"hip",
"ankle"
],
"type": "string"
},
"description": "Joints to spare; exercises that load them are left out"
}
},
"additionalProperties": false
}| bodyPart | string | e.g. Chest, Back, Upper Legs, Waist |
| category | string |
| mechanic | string |
| equipment | string | e.g. Barbell, Dumbbell, Body Weight, Cable |
| difficulty | string |
| includeMedia | boolean | false: no video links and no use of the distinct-exercise media limit (default true) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"lang": {
"enum": [
"en",
"tr",
"de",
"es",
"fr",
"zh-SG",
"zh-HK"
],
"type": "string",
"description": "Language for names, instructions and tips (default en)"
},
"name": {
"type": "string",
"description": "Partial name match, e.g. \"bench press\""
},
"force": {
"enum": [
"push",
"pull",
"static",
"carry"
],
"type": "string"
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Max results (default 10, plan caps apply)"
},
"model": {
"enum": [
"male",
"female"
],
"type": "string",
"description": "Animation model"
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "Only these top-level fields, e.g. [\"name\",\"target\",\"equipment\"]; id is always included. Smaller answers, fewer tokens."
},
"muscle": {
"type": "string",
"description": "Matches primary or secondary muscles"
},
"offset": {
"type": "integer",
"minimum": 0
},
"target": {
"type": "string",
"description": "Primary target, e.g. Pectorals, Glutes, Lats"
},
"bodyPart": {
"type": "string",
"description": "e.g. Chest, Back, Upper Legs, Waist"
},
"category": {
"enum": [
"strength",
"flexibility",
"cardio",
"yoga",
"plyometric",
"balance"
],
"type": "string"
},
"mechanic": {
"enum": [
"compound",
"isolation"
],
"type": "string"
},
"equipment": {
"type": "string",
"description": "e.g. Barbell, Dumbbell, Body Weight, Cable"
},
"difficulty": {
"enum": [
"beginner",
"intermediate",
"advanced"
],
"type": "string"
},
"includeMedia": {
"type": "boolean",
"description": "false: no video links and no use of the distinct-exercise media limit (default true)"
}
},
"additionalProperties": false
}