find_exercises
Find exercises that target specific muscles with filters for equipment, difficulty, movement pattern, and exercise type to customize workout plans.
Instructions
Find exercises that target a specific muscle, with optional filters. Use search_muscles first if you don't know the muscle ID.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| muscle | Yes | Muscle ID or name (e.g. 'pectoralis_major_sternal') | |
| equipment | No | Filter by equipment type | |
| difficulty | No | Filter by difficulty level | |
| movement_pattern | No | Filter by movement pattern | |
| exercise_type | No | Filter by exercise type | |
| role | No | Filter by muscle role | |
| limit | No | Max results (default: 50) |
Implementation Reference
- src/tools.ts:49-99 (handler)The handler for the 'find_exercises' tool, which takes a muscle and optional filters, calls the client.findExercises method, and returns the result as JSON.
server.tool( "find_exercises", "Find exercises that target a specific muscle, with optional filters. " + "Use search_muscles first if you don't know the muscle ID.", { muscle: z.string().describe("Muscle ID or name (e.g. 'pectoralis_major_sternal')"), equipment: z .enum([ "barbell", "dumbbell", "kettlebell", "cable", "machine", "bodyweight", "band", "smith_machine", "trap_bar", "ez_bar", "suspension", "medicine_ball", "plate", "landmine", "none", ]) .optional() .describe("Filter by equipment type"), difficulty: z .enum(["beginner", "intermediate", "advanced"]) .optional() .describe("Filter by difficulty level"), movement_pattern: z .enum([ "horizontal_push", "horizontal_pull", "vertical_push", "vertical_pull", "squat", "hinge", "lunge", "carry", "rotation", "anti_rotation", "flexion", "extension", "isolation", "abduction", "adduction", ]) .optional() .describe("Filter by movement pattern"), exercise_type: z .enum(["compound", "isolation", "isometric"]) .optional() .describe("Filter by exercise type"), role: z .enum(["primary", "secondary", "stabilizer"]) .optional() .describe("Filter by muscle role"), limit: z .number() .int() .min(1) .max(200) .optional() .describe("Max results (default: 50)"), }, async ({ muscle, ...filters }) => { try { const result = await client.findExercises(muscle, filters); return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] }; } catch (err) { return { content: [{ type: "text", text: formatError(err) }], isError: true }; } }, ); - src/tools.ts:49-99 (registration)Registration of the 'find_exercises' tool using server.tool in src/tools.ts.
server.tool( "find_exercises", "Find exercises that target a specific muscle, with optional filters. " + "Use search_muscles first if you don't know the muscle ID.", { muscle: z.string().describe("Muscle ID or name (e.g. 'pectoralis_major_sternal')"), equipment: z .enum([ "barbell", "dumbbell", "kettlebell", "cable", "machine", "bodyweight", "band", "smith_machine", "trap_bar", "ez_bar", "suspension", "medicine_ball", "plate", "landmine", "none", ]) .optional() .describe("Filter by equipment type"), difficulty: z .enum(["beginner", "intermediate", "advanced"]) .optional() .describe("Filter by difficulty level"), movement_pattern: z .enum([ "horizontal_push", "horizontal_pull", "vertical_push", "vertical_pull", "squat", "hinge", "lunge", "carry", "rotation", "anti_rotation", "flexion", "extension", "isolation", "abduction", "adduction", ]) .optional() .describe("Filter by movement pattern"), exercise_type: z .enum(["compound", "isolation", "isometric"]) .optional() .describe("Filter by exercise type"), role: z .enum(["primary", "secondary", "stabilizer"]) .optional() .describe("Filter by muscle role"), limit: z .number() .int() .min(1) .max(200) .optional() .describe("Max results (default: 50)"), }, async ({ muscle, ...filters }) => { try { const result = await client.findExercises(muscle, filters); return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] }; } catch (err) { return { content: [{ type: "text", text: formatError(err) }], isError: true }; } }, );