1 000+ exercise line drawings: find an exercise, list by body part or equipment, show a workout.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
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.
The exercise for a name in English; word order, plurals, abbreviations such as db, kb and rdl, and a small misspelling are understood. A match is the exercise of that name, or the one it means when the name leaves out the equipment or a word such as biceps. Returns id, name, category, equipment, body part and the still's URL; where written, the pattern, the primary and secondary muscles, the cues and the common mistakes; and the URL of its guide page where it has one. When no exercise matches that closely, returns null and up to five exercises sharing words with the name. In a client with MCP Apps, such as Claude, every call shows the person its result as a card.
The exercise's name, such as goblet squat or db romanian deadlift.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http exercise-images https://mcp.exerciseimages.com/mcp
The exercise for a name in English; word order, plurals, abbreviations such as db, kb and rdl, and a small misspelling are understood. A match is the exercise of that name, or the one it means when the name leaves out the equipment or a word such as biceps. Returns id, name, category, equipment, body part and the still's URL; where written, the pattern, the primary and secondary muscles, the cues and the common mistakes; and the URL of its guide page where it has one. When no exercise matches that closely, returns null and up to five exercises sharing words with the name. In a client with MCP Apps, such as Claude, every call shows the person its result as a card.
| Argument | Type | Description |
|---|---|---|
| name* | string | The exercise's name, such as goblet squat or db romanian deadlift. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "The exercise's name, such as goblet squat or db romanian deadlift."
}
}
}The exercises matching every filter given, at least one. Returns their count and, for each in the library's order, id, name and the still's URL. In a client with MCP Apps, such as Claude, every call shows the person its result as a card.
| Argument | Type | Description |
|---|---|---|
| pattern | string | The movement pattern. |
| bodyPart | string | The body part. |
| equipment | string | The equipment. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"pattern": {
"enum": [
"squat",
"hinge",
"lunge",
"push horizontal",
"push vertical",
"pull horizontal",
"pull vertical",
"carry",
"knee extension",
"knee flexion",
"elbow flexion",
"elbow extension",
"wrist",
"shoulder raise",
"hip",
"ankle",
"neck",
"trunk flexion",
"rotation",
"anti-extension",
"anti-rotation",
"anti-lateral",
"jump",
"run",
"cardio",
"mobility",
"stretch"
],
"type": "string",
"description": "The movement pattern."
},
"bodyPart": {
"enum": [
"back",
"calves",
"chest",
"core",
"forearms",
"full-body",
"glutes",
"neck",
"shoulders",
"thighs",
"upper-arms"
],
"type": "string",
"description": "The body part."
},
"equipment": {
"enum": [
"ab-wheel",
"barbell",
"battle-rope",
"bike",
"bodyweight",
"bosu",
"cable",
"dumbbell",
"elliptical",
"ez-bar",
"foam-roller",
"jump-rope",
"kettlebell",
"machine",
"medicine-ball",
"none",
"parallettes",
"resistance-band",
"rower",
"sandbag",
"sled",
"smith-machine",
"stability-ball",
"stair-climber",
"suspension",
"trap-bar",
"treadmill",
"weight-plate"
],
"type": "string",
"description": "The equipment."
}
}
}Shows a training session, or a programme of several, as one card: each exercise with its drawing and what was prescribed, opening to its details when tapped. Exercises are named in English, in the call and on the card, and matched to the library's names, with word order, plurals, abbreviations and small misspellings understood; one that matches nothing is shown by its name with the closest exercises. Every field but an exercise's name is optional, so a plain list of exercises is a workout too. Returns the workout as text with each drawing's URL.
| Argument | Type | Description |
|---|---|---|
| aim | string | What the workout is for. |
| lang | string | The language of the card's own words, such as headings, rounds and rest: en or sv, English for any other. Exercise names stay English. |
| title | string | The title on top. |
| sessions* | array | One session, or a programme's sessions in order. |
| duration_min | number | The length in minutes. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"sessions"
],
"properties": {
"aim": {
"type": "string",
"maxLength": 300,
"minLength": 1,
"description": "What the workout is for."
},
"lang": {
"type": "string",
"maxLength": 35,
"description": "The language of the card's own words, such as headings, rounds and rest: en or sv, English for any other. Exercise names stay English."
},
"title": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "The title on top."
},
"sessions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"aim": {
"type": "string",
"maxLength": 300,
"minLength": 1,
"description": "What it is for."
},
"main": {
"type": "array",
"items": {
"type": "object",
"required": [
"steps"
],
"properties": {
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"move"
],
"properties": {
"cue": {
"type": "string",
"maxLength": 300,
"minLength": 1,
"description": "The coach's words on this exercise, shown when it is opened."
},
"load": {
"type": "string",
"maxLength": 60,
"minLength": 1,
"description": "The load in the person's terms, such as 20 kg, 45 lb, bodyweight or a light band."
},
"move": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "The exercise's name in English, shown as given."
},
"reps": {
"anyOf": [
{
"type": "integer",
"maximum": 10000,
"minimum": 1
},
{
"type": "string",
"maxLength": 40,
"minLength": 1
}
],
"description": "Reps per set: a number, or words such as 8 to 12 or 10 each side."
},
"sets": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Sets."
},
"rest_sec": {
"type": "integer",
"maximum": 3600,
"minimum": 0,
"description": "Rest between sets, in seconds."
},
"time_sec": {
"type": "number",
"maximum": 86400,
"description": "Time per set or interval, in seconds.",
"exclusiveMinimum": 0
},
"distance_m": {
"type": "number",
"maximum": 1000000,
"description": "Distance per set or interval, in metres.",
"exclusiveMinimum": 0
}
}
},
"maxItems": 30,
"minItems": 1,
"description": "The block's exercises, in order."
},
"format": {
"enum": [
"straight_sets",
"superset",
"circuit",
"intervals",
"continuous",
"drill",
"mobility"
],
"type": "string",
"description": "How the block is done; the card groups a superset's or a circuit's exercises."
},
"rest_sec": {
"type": "integer",
"maximum": 3600,
"minimum": 0,
"description": "Rest between rounds, in seconds."
},
"iterations": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Rounds of the block."
}
}
},
"maxItems": 20,
"description": "The main part, in blocks."
},
"title": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "The session's heading."
},
"warm_up": {
"type": "array",
"items": {
"type": "object",
"required": [
"steps"
],
"properties": {
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"move"
],
"properties": {
"cue": {
"type": "string",
"maxLength": 300,
"minLength": 1,
"description": "The coach's words on this exercise, shown when it is opened."
},
"load": {
"type": "string",
"maxLength": 60,
"minLength": 1,
"description": "The load in the person's terms, such as 20 kg, 45 lb, bodyweight or a light band."
},
"move": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "The exercise's name in English, shown as given."
},
"reps": {
"anyOf": [
{
"type": "integer",
"maximum": 10000,
"minimum": 1
},
{
"type": "string",
"maxLength": 40,
"minLength": 1
}
],
"description": "Reps per set: a number, or words such as 8 to 12 or 10 each side."
},
"sets": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Sets."
},
"rest_sec": {
"type": "integer",
"maximum": 3600,
"minimum": 0,
"description": "Rest between sets, in seconds."
},
"time_sec": {
"type": "number",
"maximum": 86400,
"description": "Time per set or interval, in seconds.",
"exclusiveMinimum": 0
},
"distance_m": {
"type": "number",
"maximum": 1000000,
"description": "Distance per set or interval, in metres.",
"exclusiveMinimum": 0
}
}
},
"maxItems": 30,
"minItems": 1,
"description": "The block's exercises, in order."
},
"format": {
"enum": [
"straight_sets",
"superset",
"circuit",
"intervals",
"continuous",
"drill",
"mobility"
],
"type": "string",
"description": "How the block is done; the card groups a superset's or a circuit's exercises."
},
"rest_sec": {
"type": "integer",
"maximum": 3600,
"minimum": 0,
"description": "Rest between rounds, in seconds."
},
"iterations": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Rounds of the block."
}
}
},
"maxItems": 20,
"description": "The warm-up, in blocks."
},
"cool_down": {
"type": "array",
"items": {
"type": "object",
"required": [
"steps"
],
"properties": {
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"move"
],
"properties": {
"cue": {
"type": "string",
"maxLength": 300,
"minLength": 1,
"description": "The coach's words on this exercise, shown when it is opened."
},
"load": {
"type": "string",
"maxLength": 60,
"minLength": 1,
"description": "The load in the person's terms, such as 20 kg, 45 lb, bodyweight or a light band."
},
"move": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "The exercise's name in English, shown as given."
},
"reps": {
"anyOf": [
{
"type": "integer",
"maximum": 10000,
"minimum": 1
},
{
"type": "string",
"maxLength": 40,
"minLength": 1
}
],
"description": "Reps per set: a number, or words such as 8 to 12 or 10 each side."
},
"sets": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Sets."
},
"rest_sec": {
"type": "integer",
"maximum": 3600,
"minimum": 0,
"description": "Rest between sets, in seconds."
},
"time_sec": {
"type": "number",
"maximum": 86400,
"description": "Time per set or interval, in seconds.",
"exclusiveMinimum": 0
},
"distance_m": {
"type": "number",
"maximum": 1000000,
"description": "Distance per set or interval, in metres.",
"exclusiveMinimum": 0
}
}
},
"maxItems": 30,
"minItems": 1,
"description": "The block's exercises, in order."
},
"format": {
"enum": [
"straight_sets",
"superset",
"circuit",
"intervals",
"continuous",
"drill",
"mobility"
],
"type": "string",
"description": "How the block is done; the card groups a superset's or a circuit's exercises."
},
"rest_sec": {
"type": "integer",
"maximum": 3600,
"minimum": 0,
"description": "Rest between rounds, in seconds."
},
"iterations": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Rounds of the block."
}
}
},
"maxItems": 20,
"description": "The cool-down, in blocks."
},
"duration_min": {
"type": "number",
"maximum": 1440,
"description": "Its length in minutes.",
"exclusiveMinimum": 0
}
}
},
"maxItems": 14,
"minItems": 1,
"description": "One session, or a programme's sessions in order."
},
"duration_min": {
"type": "number",
"maximum": 1440,
"description": "The length in minutes.",
"exclusiveMinimum": 0
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 13, 2026.