Skip to main content
Glama
nitinchakravarthy

Workout Tracker MCP Server

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
MCP_HOSTNoHost for HTTP server (default: 0.0.0.0).
MCP_PORTNoPort for HTTP server (default: 8000).
MCP_TRANSPORTNoTransport mode: stdio or http (default: stdio).
AWS_ACCESS_KEY_IDYesYour AWS Access Key ID for DynamoDB access.
AWS_DEFAULT_REGIONYesAWS region for DynamoDB (e.g., us-west-2).
AWS_SECRET_ACCESS_KEYYesYour AWS Secret Access Key for DynamoDB access.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
log_workoutB
Log a workout session

Args:
    exercise: Name of the exercise performed
    sets: Number of sets completed
    reps: Number of repetitions per set

Returns:
    Confirmation message with workout details
calculate_volumeA
Calculate total workout volume (weight x sets x reps)

Args:
    weight: Weight used in pounds or kilograms
    sets: Number of sets
    reps: Number of repetitions per set

Returns:
    Dictionary with volume calculation details
save_workout_plan_to_dynamodbA
Save a workout plan to DynamoDB

Takes the JSON output from workout_plan_prompt and saves it to DynamoDB
following the schema defined in DYNAMODB_DATA_MODEL.md.

This creates all necessary entities:
- WorkoutPlan (plan metadata)
- WeekTemplate (one per week)
- WorkoutSession (one per workout day)
- PlannedExercise (one per exercise)

Args:
    workout_plan_json: JSON string of workout plan (output from workout_plan_prompt)
    user_id: User ID who owns this plan
    plan_id: Optional plan ID (auto-generated UUID if not provided)
    table_name: DynamoDB table name (default: WorkoutPlans)
    region: AWS region (default: us-west-2)

Returns:
    Dictionary with success status and statistics about created entities

Example:
    result = save_workout_plan_to_dynamodb(
        workout_plan_json='{"plan_metadata": {...}, "weeks": [...]}',
        user_id="user_123"
    )
get_workout_plan_from_dynamodbA
Retrieve a complete workout plan from DynamoDB

Fetches the entire workout plan structure including:
- Plan metadata (name, goal, duration, status, etc.)
- All weeks in the program
- All workout sessions for each week
- All exercises for each workout session

Args:
    user_id: User ID who owns the plan
    plan_id: Unique plan identifier
    table_name: DynamoDB table name (default: WorkoutPlans)
    region: AWS region (default: us-west-2)

Returns:
    Dictionary containing the complete workout plan with plan_metadata and weeks,
    or error information if the plan is not found or retrieval fails

Example:
    result = get_workout_plan_from_dynamodb(
        user_id="user_123",
        plan_id="plan_abc123"
    )
log_workout_session_to_dynamodbA
Log a completed workout session to DynamoDB

Records the actual workout performed including session metadata and all exercise sets.
This creates:
- WorkoutLog (session metadata: start/end time, duration, energy level, etc.)
- ExerciseSetLog (one per set performed with weight, reps, RPE, form rating, etc.)

The workout_log_json should contain:
{
    "plan_id": "plan_abc",
    "week_number": 1,
    "day_number": 1,
    "workout_date": "2026-01-06",
    "started_at": "2026-01-06T14:30:00Z",
    "completed_at": "2026-01-06T15:45:00Z",
    "duration_min": 75,
    "perceived_difficulty": 8,
    "energy_level": 7,
    "sleep_quality": 8,
    "pre_workout_nutrition": "protein shake + banana",
    "bodyweight_lbs": 185,
    "status": "completed",
    "exercises": [
        {
            "exercise_id": "bench_press_barbell",
            "exercise_name": "Barbell Bench Press",
            "sets": [
                {
                    "set_number": 1,
                    "set_type": "working",
                    "weight_lbs": 225,
                    "reps_completed": 5,
                    "reps_target": 5,
                    "rpe": 8,
                    "rir": 2,
                    "tempo_actual": "2-0-1-0",
                    "rest_seconds_actual": 180,
                    "form_rating": 9,
                    "notes": "Felt strong",
                    "failed": false,
                    "spotted": false
                }
            ]
        }
    ]
}

Args:
    workout_log_json: JSON string of workout log data
    user_id: User ID who performed the workout
    log_id: Optional log ID (auto-generated UUID if not provided)
    table_name: DynamoDB table name (default: WorkoutPlans)
    region: AWS region (default: us-west-2)

Returns:
    Dictionary with success status and statistics about logged entities

Example:
    result = log_workout_session_to_dynamodb(
        workout_log_json='{"plan_id": "plan_abc", "week_number": 1, ...}',
        user_id="user_123"
    )
get_all_exercisesA
Get a list of all exercises with pagination.

Args:
    limit: Maximum number of exercises to return (default: 20, max: 100)
    offset: Number of exercises to skip (default: 0)

Returns:
    A formatted string containing exercise information including name, body parts,
    target muscles, equipment, and instructions.
get_exercise_by_idA
Get detailed information about a specific exercise by its ID.

Args:
    exercise_id: The unique identifier of the exercise

Returns:
    Detailed exercise information including name, body parts, target muscles,
    equipment, instructions, and GIF URL.
search_exercisesA
Search for exercises by name or keyword with fuzzy matching.

Args:
    query: Search query (exercise name or keyword)
    limit: Maximum number of exercises to return (default: 20, max: 100)
    offset: Number of exercises to skip (default: 0)
    threshold: Fuzzy match threshold 0.0-1.0 (default: 0.3, lower = more results)

Returns:
    List of exercises matching the search query with relevance scoring.
get_exercises_by_body_partA
Get exercises targeting a specific body part.

Args:
    body_part: Body part to filter by (e.g., 'chest', 'back', 'legs', 'shoulders', 'arms')
    limit: Maximum number of exercises to return (default: 20, max: 100)
    offset: Number of exercises to skip (default: 0)

Returns:
    List of exercises for the specified body part.
get_exercises_by_target_muscleA
Get exercises targeting a specific muscle.

Args:
    target: Target muscle to filter by (e.g., 'biceps', 'triceps', 'quads', 'hamstrings')
    limit: Maximum number of exercises to return (default: 20, max: 100)
    offset: Number of exercises to skip (default: 0)

Returns:
    List of exercises targeting the specified muscle.
get_exercises_by_equipmentA
Get exercises that use specific equipment.

Args:
    equipment: Equipment to filter by (e.g., 'barbell', 'dumbbell', 'cable', 'body weight')
    limit: Maximum number of exercises to return (default: 20, max: 100)
    offset: Number of exercises to skip (default: 0)

Returns:
    List of exercises using the specified equipment.
list_body_partsB
Get a list of all available body parts in the database.

Returns:
    Comma-separated list of body parts that can be used for filtering.
list_target_musclesA
Get a list of all available target muscles in the database.

Returns:
    Comma-separated list of target muscles that can be used for filtering.
list_equipmentA
Get a list of all available equipment types in the database.

Returns:
    Comma-separated list of equipment types that can be used for filtering.

Prompts

Interactive templates invoked by user choice

NameDescription
workout_plan_prompt Generate a comprehensive, science-based workout plan with structured output for DynamoDB storage Args: goal: Primary training goal (strength, hypertrophy, powerlifting, endurance, athletic_performance) experience_level: Training experience (beginner, intermediate, advanced, elite) training_frequency: Days per week available for training (3-6) session_duration_min: Available time per session in minutes (45-120) equipment_available: Equipment access (full_gym, home_gym_barbell, home_gym_dumbbells, bodyweight_only) age: User's age for recovery and volume considerations gender: Biological sex for hormonal/recovery considerations (male, female) current_maxes: Current 1RM estimates (e.g., "Squat: 315, Bench: 225, Deadlift: 405") injuries_limitations: Any injuries or movement restrictions program_duration_weeks: Length of program (4-16 weeks recommended) Returns: A detailed prompt for generating a periodized workout plan with JSON-structured output
format_workout_plan Transform DynamoDB workout plan JSON into client-friendly, printable format Args: workout_plan_json: JSON string of workout plan in DynamoDB schema format (the output from workout_plan_prompt) Returns: A prompt that transforms technical JSON into a beautiful, readable workout plan that clients can print and take to the gym

Resources

Contextual data attached and managed by the client

NameDescription
get_exercise_listReturns a list of available exercises

TDQS

A3.5/5.0

Scored across 14 tools

Disambiguation2/5

log_workout and log_workout_session_to_dynamodb both log workouts but at different levels of detail and persistence, creating real ambiguity for an agent. The multiple get_exercises_by_* filters are largely distinct but could be confused with search_exercises, especially since they all return exercise lists.

Naming Consistency4/5

Tool names consistently use snake_case with a verb_noun pattern, such as list_*, get_*, log_*, and save_*. Minor deviations like calculate_volume (no resource object) and the long 'to_dynamodb'/'from_dynamodb' suffixes are still readable and predictable.

Tool Count4/5

With 14 tools, the count is on the higher end but still within a reasonable scope for an exercise database combined with workout plan and session logging. A few tools, especially the redundant log_workout, could be consolidated, but the overall count is not excessive.

Completeness2/5

The server provides save/get for workout plans and a session logger, but lacks list, update, and delete operations for plans or logs. There is also no way to retrieve a user's workout history, leaving significant lifecycle gaps that would cause agent failures in common tracking workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues