OpenGym3D MCP server — the exercise library as native AI-assistant tools. Exposes the whole exercise database (metadata, form steps, muscle targets, and rendered asset URLs) to any MCP client over stdio.
Four read-only tools with clear verb-noun naming (list_, get_, search_, library_). Descriptions are present and reasonably detailed (80-180 chars), explaining WHAT each tool does. Input schemas are visible with type declarations and parameter descriptions. However, output schemas are undocumented, LLMs cannot predict response structure. Parameters lack enums where appropriate (e.g., equipment, difficulty, muscle could be constrained). Error handling is minimal: get_exercise returns a JSON error object but provides no recovery guidance. No tool annotations (readOnlyHint, idempotentHint) despite all being read-only. Composition is sound, tools are single-purpose and chainable via exercise_id.
Full record for one exercise by id (e.g. 'squat'): metadata, targeted muscles, step-by-step form instructions, equipment prop, and URLs for the animated GLB, thumbnail PNG, and watch-sized GIF/MP4.
Library overview: exercise count, muscles covered, equipment split.
List exercises, optionally filtered by muscle (matches primary or secondary, e.g. 'quads'), equipment ('None', 'Dumbbell', 'Barbell'), or difficulty ('Beginner', 'Intermediate').
Free-text search across exercise names, muscles, equipment, and form steps. Returns matching summaries.
Output schemas undocumented. LLMs cannot predict response structure (fields, types, nesting). All four tools return JSON strings but no schema is declared.
Parameters lack enum constraints. 'equipment', 'difficulty', and 'muscle' accept free-form strings; LLMs may hallucinate invalid values like 'Kettlebell' or 'Expert' instead of using documented enums.
Error handling lacks recovery guidance. get_exercise returns a JSON error object with available IDs, but does not suggest next steps (e.g., 'Try search_exercises() with a partial name').
No tool annotations. All four tools are read-only and idempotent, but lack readOnlyHint and idempotentHint annotations to signal safety to agents.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Parameter descriptions lack format/constraint details. 'muscle' says 'matches primary or secondary' but does not list valid muscle names or case sensitivity rules.