MuscleWiki API: Search exercises
Finds MuscleWiki exercises for a muscle in site order, optionally by equipment and difficulty, with target muscles, instructions, video and page links. Beginner also includes exercises labelled Novice.
Unofficial. Not affiliated with or endorsed by MuscleWiki.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Muscle, required
muscle Muscle or body area, for example "lower back".
biceps
- Equipment optional
equipment Equipment to use, for example "dumbbells".
any
One of
any,bodyweight,dumbbells,barbell,kettlebells,cables,machine,bands,stretches. Defaultany.- Difficulty optional
difficulty Experience level, for example "beginner".
any
One of
any,beginner,intermediate,advanced. Defaultany.- Max Results optional
max_results Maximum number of exercises, for example 20.
100
Whole number from 1 to 100. Default
20.
Input as JSON
{ "muscle": "biceps", "equipment": "any", "difficulty": "any", "max_results": 100}Output
{ "exercises": [ { "equipment": "Bodyweight", "difficulty": "Intermediate", "video_link": "https://musclewiki.com/api-next/videos/male-bodyweight-chinup-front.mp4" , "instructions": [ "Grab the bar shoulder width apart with a supinated grip (palms facing you)", "With your body hanging and arms fully extended, pull yourself up until your chin is past the bar.", "Slowly return to starting position. Repeat." ], "exercise_name": "Chin Ups", "target_muscles": [ "Lats", "Biceps", "Forearms" ], "exercise_page_link": "https://musclewiki.com/exercise/chin-ups" }, { "equipment": "Barbell", "difficulty": "Intermediate", "video_link": "https://musclewiki.com/api-next/videos/male-Barbell-barbell-curl-front.mp4" , "instructions": [ "While holding the upper arms stationary, curl the weights forward while contracting the biceps as you breathe out.", "Continue the movement until your biceps are fully contracted and the bar is at shoulder level.", "Hold the contracted position for a second and squeeze the biceps hard." ], "exercise_name": "Barbell Curl", "target_muscles": [ "Biceps" ], "exercise_page_link": "https://musclewiki.com/exercise/barbell-curl" }, { "equipment": "Dumbbells", "difficulty": "Beginner", "video_link": "https://musclewiki.com/api-next/videos/male-Dumbbells-dumbbell-preacher-curl-front.mp4" , "instructions": [ "Sit at preacher bench, hold dumbbells in each hand with arm extended, palm facing up.", "Curl dumbbells towards shoulder, keeping upper arm stationary and elbows in.", "Lower dumbbell slowly back to start." ], "exercise_name": "Dumbbell Preacher Curl", "target_muscles": [ "Biceps", "Short Head Bicep" ], "exercise_page_link": "https://musclewiki.com/exercise/dumbbell-preacher-curl" } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"musclewiki.com/search_exercises","input":{"muscle":"biceps","equipment":"any","difficulty":"any","max_results":100}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "musclewiki.com/search_exercises" , "input": { "muscle": "biceps", "equipment": "any", "difficulty": "any", "max_results": 100 }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "musclewiki.com/search_exercises" , "input": { "muscle": "biceps", "equipment": "any", "difficulty": "any", "max_results": 100 } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run musclewiki.com/search_exercises# with {"muscle":"biceps","equipment":"any","difficulty":"any","max_results":100}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "muscle" ], "properties": { "muscle": { "type": "string", "description": "Muscle or body area, for example \"lower back\"." }, "equipment": { "enum": [ "any", "bodyweight", "dumbbells", "barbell", "kettlebells", "cables", "machine", "bands", "stretches" ], "type": "string", "default": "any", "description": "Equipment to use, for example \"dumbbells\"." }, "difficulty": { "enum": [ "any", "beginner", "intermediate", "advanced" ], "type": "string", "default": "any", "description": "Experience level, for example \"beginner\"." }, "max_results": { "type": "integer", "default": 20, "maximum": 100, "minimum": 1, "description": "Maximum number of exercises, for example 20." } }}Output schema
{ "type": "object", "required": [ "exercises" ], "properties": { "exercises": { "type": "array", "items": { "type": "object", "required": [ "exercise_name", "target_muscles", "equipment", "difficulty", "instructions", "video_link", "exercise_page_link" ], "properties": { "equipment": { "type": [ "string", "null" ] }, "difficulty": { "type": [ "string", "null" ] }, "video_link": { "type": [ "string", "null" ] }, "instructions": { "type": "array", "items": { "type": "string" } }, "exercise_name": { "type": "string" }, "target_muscles": { "type": "array", "items": { "type": "string" } }, "exercise_page_link": { "type": "string" } }, "additionalProperties": false } } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
musclewiki.com/search_exercises- Returns
- exercise name, target muscles, equipment, difficulty, instructions, video link, page link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method musclewiki.com/search_exercises with the inputs above.
Ask your agent
- Find me beginner bodyweight exercises for the lower back, with instructions and video links
- What are some advanced barbell exercises that target the hamstrings? Give me about 10.
- Pull up MuscleWiki kettlebell exercises for glutes at intermediate level
- I only have resistance bands at home — list exercises for shoulders I can do, any difficulty
- Show me up to 30 cable exercises for chest from musclewiki.com with the target muscles and page links
See more
Searches a Wikipedia language edition by keywords and returns matching articles in relevance order, with descriptions, snippets, word counts, last edit dates and links.
wikipedia.org/search_articlesSearches IKEA products in a chosen country and returns current prices, details, photos and reviews in IKEA's result order.
ikea.com/search_productsFinds Serious Eats recipes and cooking guides for a dish or technique, in site search order. Results can also include related articles; times appear only when the site shows them.
seriouseats.com/search_recipesLooks up a MedlinePlus health topic for a condition or symptom and returns its overview, related topics, and encyclopedia sections when a matching article is linked.
medlineplus.gov/get_health_topicLists upcoming or past UFC events with fight cards, venue, start time and completed bout results, or returns one event by name. Upcoming events come soonest first and past events newest first.
ufc.com/list_eventsSearches Dailymotion videos by keywords, ordered by relevance, newest upload, or most views. Returns up to 100 public results.
dailymotion.com/search_videosSearches Walmart products by keywords with optional sort and price range, returning prices, ratings, sellers and availability in Walmart's order. Uses Walmart's default location (no ZIP-based pricing).
walmart.com/search_productsFinds free-to-use Wikimedia Commons images for a topic in Commons relevance order. Each image comes with its links, creator and licence details.
commons.wikimedia.org/search_free_images