WorkoutX Exercise API
Exercise API MCP: 1,900+ exercises with video, workout generator, supplements, dev tools.
사용해야 할까요
품질 및 안전성
발견 사항 (3)
- LOWfind_exercise_alternatives에서
- LOWfind_similar_exercises에서
- LOWestimate_calories에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"workoutx": {
"command": "npx",
"args": [
"workoutx-mcp"
]
}
}
}실행 가능한 패키지
2.1.0stdio원격 엔드포인트
https://api.workoutxapp.com/mcpstreamable-http할 수 있는 일
도구 목록
도구 (20)
🟢list_exercise_filters(lang)
Every valid value (with counts) for body parts, target muscles, equipment, categories and muscles. Call this before search_exercises when unsure of a value.
입력 스키마
{
"type": "object",
"properties": {
"lang": {
"type": "string",
"enum": [
"en",
"tr",
"de",
"es",
"fr",
"zh-SG",
"zh-HK"
],
"description": "Language for names, instructions and tips (default en)"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢search_exercises(name, bodyPart, target, muscle, equipment, ...)
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.
입력 스키마
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Partial name match, e.g. \"bench press\""
},
"bodyPart": {
"type": "string",
"description": "e.g. Chest, Back, Upper Legs, Waist"
},
"target": {
"type": "string",
"description": "Primary target, e.g. Pectorals, Glutes, Lats"
},
"muscle": {
"type": "string",
"description": "Matches primary or secondary muscles"
},
"equipment": {
"type": "string",
"description": "e.g. Barbell, Dumbbell, Body Weight, Cable"
},
"category": {
"type": "string",
"enum": [
"strength",
"flexibility",
"cardio",
"yoga",
"plyometric",
"balance"
]
},
"difficulty": {
"type": "string",
"enum": [
"beginner",
"intermediate",
"advanced"
]
},
"mechanic": {
"type": "string",
"enum": [
"compound",
"isolation"
]
},
"force": {
"type": "string",
"enum": [
"push",
"pull",
"static",
"carry"
]
},
"model": {
"type": "string",
"enum": [
"male",
"female"
],
"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."
},
"includeMedia": {
"type": "boolean",
"description": "false: no video links and no use of the distinct-exercise media limit (default true)"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"description": "Max results (default 10, plan caps apply)"
},
"offset": {
"type": "integer",
"minimum": 0
},
"lang": {
"type": "string",
"enum": [
"en",
"tr",
"de",
"es",
"fr",
"zh-SG",
"zh-HK"
],
"description": "Language for names, instructions and tips (default en)"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_exercise(id, lang)
One exercise by v2 id: instructions, tips, muscles, equipment, sets/reps guidance, calories and signed media links.
입력 스키마
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "v2 exercise id, e.g. \"ex_GE5XEP\""
},
"lang": {
"type": "string",
"enum": [
"en",
"tr",
"de",
"es",
"fr",
"zh-SG",
"zh-HK"
],
"description": "Language for names, instructions and tips (default en)"
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_exercise_media(id)
Fresh signed MP4 and thumbnail links for one exercise (links expire; call again rather than storing them).
입력 스키마
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "v2 exercise id, e.g. \"ex_GE5XEP\""
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢find_exercise_alternatives(id, equipment, excludeEquipment, model, limit, ...)
Ranked swaps that train the same muscles, e.g. when equipment is missing. Optionally require or exclude equipment.
입력 스키마
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "v2 exercise id, e.g. \"ex_GE5XEP\""
},
"equipment": {
"type": "string",
"description": "Only alternatives using this equipment (comma-separated)"
},
"excludeEquipment": {
"type": "string",
"description": "Leave out this equipment (comma-separated)"
},
"model": {
"type": "string",
"enum": [
"male",
"female",
"any"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "Max results (default 10, plan caps apply)"
},
"lang": {
"type": "string",
"enum": [
"en",
"tr",
"de",
"es",
"fr",
"zh-SG",
"zh-HK"
],
"description": "Language for names, instructions and tips (default en)"
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢find_similar_exercises(id, model, limit, lang)
Exercises most similar to the given one (same pattern, muscles and equipment), ranked by score.
입력 스키마
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "v2 exercise id, e.g. \"ex_GE5XEP\""
},
"model": {
"type": "string",
"enum": [
"male",
"female",
"any"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "Max results (default 10, plan caps apply)"
},
"lang": {
"type": "string",
"enum": [
"en",
"tr",
"de",
"es",
"fr",
"zh-SG",
"zh-HK"
],
"description": "Language for names, instructions and tips (default en)"
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢estimate_calories(id, weightKg, minutes)
Calories burned for an exercise from its MET value, body weight and duration.
입력 스키마
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "v2 exercise id, e.g. \"ex_GE5XEP\""
},
"weightKg": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Body weight in kg (default 70)"
},
"minutes": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Duration in minutes (default 10)"
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢map_v1_exercise(v1Id, lang)
Find the v2 exercise for an old v1 id (e.g. "0025"), with the match quality: exact, equivalent, alternative, closest or none.
입력 스키마
{
"type": "object",
"properties": {
"v1Id": {
"type": "string",
"minLength": 1,
"description": "v1 exercise id, e.g. \"0025\""
},
"lang": {
"type": "string",
"enum": [
"en",
"tr",
"de",
"es",
"fr",
"zh-SG",
"zh-HK"
],
"description": "Language for names, instructions and tips (default en)"
}
},
"required": [
"v1Id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢generate_workout(goal, level, duration, split, equipment, ...)
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.
입력 스키마
{
"type": "object",
"properties": {
"goal": {
"type": "string",
"enum": [
"muscle_gain",
"strength",
"fat_loss",
"endurance",
"mobility",
"general_fitness"
]
},
"level": {
"type": "string",
"enum": [
"beginner",
"intermediate",
"advanced"
]
},
"duration": {
"type": "integer",
"minimum": 15,
"maximum": 120,
"description": "Minutes (default 45)"
},
"split": {
"type": "string",
"enum": [
"full_body",
"upper",
"lower",
"push",
"pull",
"legs",
"core",
"conditioning",
"mobility",
"push_pull_legs",
"upper_lower"
]
},
"equipment": {
"type": "array",
"items": {
"type": "string"
},
"description": "Available equipment, e.g. [\"dumbbell\",\"bench\"]; empty = gym"
},
"bodyFocus": {
"type": "array",
"items": {
"type": "string"
},
"description": "Muscles or body parts to emphasise"
},
"exclude": {
"type": "array",
"items": {
"type": "string"
},
"description": "Exercise ids to leave out"
},
"avoidJoints": {
"type": "array",
"items": {
"type": "string",
"enum": [
"knee",
"shoulder",
"lumbar_spine",
"elbow",
"wrist",
"hip",
"ankle"
]
},
"description": "Joints to spare; exercises that load them are left out"
},
"format": {
"type": "string",
"enum": [
"auto",
"straight",
"superset",
"circuit"
]
},
"model": {
"type": "string",
"enum": [
"male",
"female"
],
"description": "Animation model"
},
"seed": {
"type": "string",
"description": "Same seed + same inputs = same workout"
},
"lang": {
"type": "string",
"enum": [
"en",
"tr",
"de",
"es",
"fr",
"zh-SG",
"zh-HK"
],
"description": "Language for names, instructions and tips (default en)"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢generate_program(goal, level, weeks, daysPerWeek, duration, ...)
A multi-week program with periodisation, deloads and weekly volume targets. Needs the Scale plan.
입력 스키마
{
"type": "object",
"properties": {
"goal": {
"type": "string",
"enum": [
"muscle_gain",
"strength",
"fat_loss",
"endurance",
"mobility",
"general_fitness"
]
},
"level": {
"type": "string",
"enum": [
"beginner",
"intermediate",
"advanced"
]
},
"weeks": {
"type": "integer",
"minimum": 2,
"maximum": 16,
"description": "Default 4"
},
"daysPerWeek": {
"type": "integer",
"minimum": 2,
"maximum": 6,
"description": "Default 3"
},
"duration": {
"type": "integer",
"minimum": 20,
"maximum": 120,
"description": "Minutes per session (default 60)"
},
"equipment": {
"type": "array",
"items": {
"type": "string"
}
},
"avoidJoints": {
"type": "array",
"items": {
"type": "string",
"enum": [
"knee",
"shoulder",
"lumbar_spine",
"elbow",
"wrist",
"hip",
"ankle"
]
},
"description": "Joints to spare; exercises that load them are left out"
},
"format": {
"type": "string",
"enum": [
"auto",
"straight",
"superset",
"circuit"
]
},
"model": {
"type": "string",
"enum": [
"male",
"female"
],
"description": "Animation model"
},
"seed": {
"type": "string"
},
"lang": {
"type": "string",
"enum": [
"en",
"tr",
"de",
"es",
"fr",
"zh-SG",
"zh-HK"
],
"description": "Language for names, instructions and tips (default en)"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢search_supplements(search, category, goal, timing, evidence, ...)
Supplements with evidence ratings, dosage and timing. Filter by category, goal, timing, evidence or free text. Needs the Growth plan or higher.
입력 스키마
{
"type": "object",
"properties": {
"search": {
"type": "string"
},
"category": {
"type": "string",
"description": "e.g. protein, creatine, pre-workout"
},
"goal": {
"type": "string",
"enum": [
"muscle_gain",
"strength",
"fat_loss",
"endurance",
"recovery",
"mobility",
"general_health"
]
},
"timing": {
"type": "string",
"description": "e.g. pre-workout, post-workout, morning"
},
"evidence": {
"type": "string",
"description": "e.g. strong, moderate"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"description": "Max results (default 200, plan caps apply)"
},
"offset": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_supplement_stack(goal, level)
A recommended stack for a goal with dosages and timing. Needs the Scale plan.
입력 스키마
{
"type": "object",
"properties": {
"goal": {
"type": "string",
"enum": [
"muscle_gain",
"strength",
"fat_loss",
"endurance",
"recovery",
"mobility",
"general_health"
]
},
"level": {
"type": "string",
"enum": [
"essential",
"standard",
"comprehensive"
]
}
},
"required": [
"goal"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢export_exercise_seed(bodyPart, target, equipment, category, model, ...)
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).
입력 스키마
{
"type": "object",
"properties": {
"bodyPart": {
"type": "string"
},
"target": {
"type": "string"
},
"equipment": {
"type": "string"
},
"category": {
"type": "string",
"enum": [
"strength",
"flexibility",
"cardio",
"yoga",
"plyometric",
"balance"
]
},
"model": {
"type": "string",
"enum": [
"male",
"female"
],
"description": "Animation model"
},
"fields": {
"type": "array",
"items": {
"type": "string",
"enum": [
"name",
"model",
"counterpartId",
"category",
"bodyPart",
"target",
"equipment",
"difficulty",
"mechanic",
"force",
"met",
"caloriesPerMinute",
"isUnilateral",
"recommendedSets",
"recommendedReps",
"description",
"instructions",
"tips"
]
},
"description": "Default: name, model, bodyPart, target, equipment, difficulty, category"
},
"format": {
"type": "string",
"enum": [
"json",
"csv"
],
"description": "Default json"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"description": "Max results (default 200, plan caps apply)"
},
"offset": {
"type": "integer",
"minimum": 0
},
"lang": {
"type": "string",
"enum": [
"en",
"tr",
"de",
"es",
"fr",
"zh-SG",
"zh-HK"
],
"description": "Language for names, instructions and tips (default en)"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_usage_stats(days)
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.
입력 스키마
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"minimum": 1,
"maximum": 60,
"description": "Window in days (default 30, max 60)"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_trending_exercises(limit, lang)
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.
입력 스키마
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "Max results (default 20, plan caps apply)"
},
"lang": {
"type": "string",
"enum": [
"en",
"tr",
"de",
"es",
"fr",
"zh-SG",
"zh-HK"
],
"description": "Language for names, instructions and tips (default en)"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_endpoint_reference(endpoint)
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.
입력 스키마
{
"type": "object",
"properties": {
"endpoint": {
"type": "string",
"maxLength": 300,
"description": "e.g. \"/v2/exercises\", \"exercises/{id}/alternatives\" or a full URL"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢generate_types(language, models)
Ready-to-paste TypeScript, Swift (Codable), Kotlin (kotlinx.serialization) or Dart models for v2 responses, generated from the OpenAPI spec. Uses one request.
입력 스키마
{
"type": "object",
"properties": {
"language": {
"type": "string",
"enum": [
"typescript",
"swift",
"kotlin",
"dart"
]
},
"models": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20,
"description": "Default: ExerciseV2, ExercisePageV2, WorkoutV2, ProgramV2. Others: MediaLinksV2, MuscleV2, RankedPageV2, CaloriesV2, SupplementV2, AccountUsageV2, TrendingV2…"
}
},
"required": [
"language"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_code_example(platform, topic)
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.
입력 스키마
{
"type": "object",
"properties": {
"platform": {
"type": "string",
"enum": [
"react-native",
"swift",
"flutter",
"nextjs",
"node",
"python"
]
},
"topic": {
"type": "string",
"enum": [
"list-exercises",
"play-video",
"workout-generator",
"handle-errors",
"backend-proxy"
]
}
},
"required": [
"platform",
"topic"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢diagnose_request(request, status, response)
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.
입력 스키마
{
"type": "object",
"properties": {
"request": {
"type": "string",
"minLength": 1,
"maxLength": 20000,
"description": "curl command, URL or \"GET /v2/...\" line, with headers if you have them"
},
"status": {
"type": "integer",
"minimum": 100,
"maximum": 599
},
"response": {
"type": "string",
"maxLength": 5000,
"description": "Response body, if any"
}
},
"required": [
"request"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢check_api_key
Confirm the configured API key works and show the plan and remaining quota. Uses one request.
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}커뮤니티
증거