A workout tracking and management MCP server that stores exercises and training reports in JSON format
Single tool 'workout' with extensive description and input schema, but significant quality gaps. Description is lengthy (1200+ chars) with embedded examples and usage docs that should be separate. Parameters are typed with descriptions, but lack enums where appropriate (e.g., 'action' is enum but could be clearer). No output schema documented, LLMs cannot infer response structure. Error handling is absent from tool definition. Tool name 'workout' lacks action verb prefix (should be 'track_workout' or 'log_workout'). Russian language for description and parameters makes it inaccessible to English-speaking LLM agents, internationalization unclear. The tool conflates multiple responsibilities (add/list/delete/clear) into a single parameterized handler rather than separate focused tools per pattern:tool.
Менеджер тренировок для отслеживания прогресса. Хранит упражнения с отчетами о тренировках в структурированном формате. СТРУКТУРА ДАННЫХ: Данные хранятся как массив упражнений, где каждое упражнение содержит: - id: уникальный идентификатор (строка-число) - exercise: название упражнения - reports: массив отчетов о тренировках Каждый отчет содержит: - date: дата в формате 'DD.MM' (например, '14.10') - reps: строка с подходами в формате '8x45, 8x52, 8x59' (повторения x вес в кг) Пример структуры: [{"id": "0", "exercise": "Вертикальный блок", "reports": [{"date": "14.10", "reps": "8x45, 8x52, 8x59"}]}] ДЕЙСТВИЯ: - add: добавить новый отчет к упражнению (если упражнение существует - добавляется отчет, если нет - создается новое упражнение). Требует: exercise (название) и reps (строка формата '8x45, 8x52'). Опционально: date (по умолчанию текущая дата). Пример: workout(action='add', exercise='Жим лежа', reps='10x80, 10x80, 8x85', date='17.12') - list: получить список названий всех упражнений. Опционально: limit (по умолчанию 50). Пример: workout(action='list', limit=20) - get_exercise: получить конкретное упражнение со всеми отчетами по названию. Требует: exercise (название). Пример: workout(action='get_exercise', exercise='Вертикальный блок') - delete_exercise: удалить упражнение. Требует: exercise_id. Пример: workout(action='delete_exercise', exercise_id='0') - clear: удалить все упражнения. Пример: workout(action='clear') ФОРМАТЫ: - reps: строка с подходами через запятую, каждый подход в формате 'повторенияxвес', например '8x45, 8x52, 8x59, 7x59' - date: строка в формате 'DD.MM', например '14.10' (14 октября) или '17.12' (17 декабря)
Tool name lacks action verb prefix. 'workout' is a noun, not a verb. Should be 'log_workout', 'track_workout', or 'add_workout_report' to clarify intent.
No output schema documented. Tool definition shows input schema but provides zero documentation of return value structure. LLMs cannot infer what fields the response contains, forcing them to guess at downstream extraction and chaining.
Tool combines five distinct actions (add, list, get_exercise, delete_exercise, clear) into a single parameterized handler. Violates pattern:tool (single responsibility). Should split into: log_workout_report, list_exercises, get_exercise_history, delete_exercise, clear_all_exercises.
Description exceeds 1024 character guideline (1200+ chars) and embeds usage examples, data structure docs, and format specs that should be separate parameter constraints or documentation. Wastes tokens and buries key intent.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 46 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 46 | - | v1 |
No error handling or recovery guidance in tool definition. No mention of what happens if 'exercise' not found, if 'date' format is invalid, if 'reps' malformed, or if file I/O fails. LLMs cannot self-correct.
Tool implemented in Russian language (descriptions, parameter docs). English-speaking LLM agents cannot understand intent, parameters, or constraints. Breaks multi-language agent usability.
'action' parameter is enum but lacks per-action documentation of which other parameters are required vs optional. LLMs may pass incomplete parameter sets (e.g., action='add' without 'reps').
No idempotency guarantees or destructiveness hints. 'clear' action is irreversible but not marked destructive. 'add' does not guarantee it won't create duplicates. Missing tool annotations per pattern:tool-annotations.
Date format constraint ('DD.MM') is documented in description text but not enforced via JSON Schema pattern field. LLMs cannot parse text constraints reliably and may pass invalid dates.
No pagination or result limiting on 'list' action. Response could contain hundreds of exercises with no guidance on truncation or offset handling.