Search 1,492 filmed exercises by muscle, equipment, pattern and joints to avoid; get substitutes.
Runs on your machine from its package; the steps are below.
At most: only reads or looks up information.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
npx -y exercisebank-mcp
MCP client config
{
"mcpServers": {
"exercisebank": {
"command": "npx",
"args": [
"-y",
"exercisebank-mcp"
]
}
}
}ExerciseBank is an exercise library for developers of fitness, coaching, physiotherapy and AI-trainer apps: 1,492 exercises filmed with real people in one studio, each with a looping video clip, a start/end still, a hand-checked classification (muscles, equipment, movement pattern, difficulty, loaded joints, impact), coaching cues, English and French, and a ranked map of which exercises can replace which. One REST API, JSON, a free sandbox key with no card.
This repository is working code for it.
| Folder | What it shows |
|---|---|
packages/exercisebank/ | The official JS/TS client, on npm as exercisebank: search, detail, substitutes, signed media, catalogue sync |
packages/exercisebank-mcp/ | An MCP server, on npm as exercisebank-mcp: Claude, Cursor and other agents search the catalogue directly |
node/ | Search, substitutes and signed media in 25 lines, no dependencies; a daily catalogue sync with ETag |
python/ | The same as a small requests client |
ai-workout-generator/ | Claude builds a workout from real exercises through tool calls; your server attaches the videos |
players/ | Playing a signed clip on the web, React Native, Swift and Kotlin |
openapi.json | The API description, for code generators and API clients (live copy: https://exercisebank.net/openapi.json) |
https://exercisebank.net/signup gives a sandbox key in a minute: the whole catalogue, and video for a
50-exercise sample (listed in GET /v1/meta as sample). The examples read it from EB_KEY.
export EB_KEY=eb_live_…
node node/quickstart.mjs
media there says which assets
an exercise has ({ "mp4": true, "still": true }).POST /v1/media/urls, for a named person: header
X-End-User: <opaque stable id>, a hash of your own user id. Ask for what the screen shows.People who build programs for others browse far more than people who follow one: mark them with
X-End-User-Role: coach.
GET /v1/exercises/:id/substitutes answers with ranked replacements and the reason for each.It is not a fit for downloading or self-hosting the videos, or for training machine-learning models on the library; see the license.
POST /v1/feedback (docs)The example code is MIT licensed. The library itself is licensed through a plan.