WorkoutX Exercise API
Exercise API MCP: 1,900+ exercises with video, workout generator, supplements, dev tools.
我该使用它吗
质量与安全性
发现(3)
- LOW在 find_exercise_alternatives 中
- LOW在 find_similar_exercises 中
- LOW在 estimate_calories 中
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `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#"
}社区
证据