Skip to main content
Glama
ndeast

Hevy Workout Analytics MCP Server

by ndeast
README.md
# Hevy Workout Analytics MCP Server

An MCP (Model Context Protocol) server that provides Claude with SQL access to your Hevy workout data, plus rich context about your personal training conventions.

## Features

- 📊 **SQL Access**: Query your workout history with full SQL capabilities
- 🏋️ **Exercise Taxonomy**: Customizable muscle group mappings for exercises
- 📝 **Personal Conventions**: Track your specific rules (form resets, RPE usage, etc.)
- 🔒 **Read-Only**: Safe SQL execution with no write permissions
- 🎯 **Smart Analysis**: Let Claude write complex queries to answer nuanced questions

## Architecture

```
Hevy CSV Export → SQLite Database → MCP Server → Claude
                                          ↓
                                    Taxonomy & Conventions
```

## Installation

1. **Clone and install**:
```bash
git clone <repo-url>
cd hevy-history-mcp
pip install -e .
```

2. **Import your Hevy data**:
```bash
python scripts/import_csv.py /path/to/hevy_export.csv
```

3. **Configure Claude Desktop** (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
```json
{
  "mcpServers": {
    "hevy-history": {
      "command": "python",
      "args": ["-m", "hevy_mcp.server"],
      "env": {
        "HEVY_DB_PATH": "/path/to/hevy.db"
      }
    }
  }
}
```

## Usage

### Example Questions for Claude

- "Which triceps exercises progressed best in the last 6 months?"
- "Which exercises have plateaued?"
- "What are my PRs for compound lifts?"
- "Show volume trends for chest exercises"
- "Account for form resets when analyzing bench press progress"

### Available Tools

1. **execute_sql(query)** - Run read-only SQL queries
2. **get_schema()** - Get database schema with column descriptions
3. **get_exercise_taxonomy()** - View/understand exercise-to-muscle mappings
4. **get_tracking_conventions()** - Read your personal tracking rules

## Configuration

### Exercise Taxonomy (`taxonomy.yaml`)

Map exercises to muscle groups and specify compound movement credit:

```yaml
exercises:
  "Bench Press (Barbell)":
    primary: [chest]
    secondary: [triceps, front_delts]
    category: compound
  "Tricep Pushdown (Cable)":
    primary: [triceps]
    category: isolation
```

### Tracking Conventions (`conventions.yaml`)

Document your personal rules for analysis:

```yaml
form_resets:
  - exercise: "Bench Press (Barbell)"
    date: "2024-03-15"
    reason: "Reset to focus on form, reduced weight by 20%"

rpe_usage:
  - "I track RPE consistently for main compound lifts"
  - "Isolation work RPE is less consistent"

tracking_notes:
  - "Superset_id groups exercises done back-to-back"
  - "I rest-pause sets are marked in exercise_notes"
```

## Database Schema

The importer creates a `workout_sets` table with all Hevy CSV columns:

- `title` - Workout name
- `start_time`, `end_time` - Workout timestamps
- `exercise_title` - Exercise name
- `set_index` - Set number
- `weight_lbs`, `reps`, `distance_miles`, `duration_seconds` - Performance metrics
- `rpe` - Rate of Perceived Exertion
- `exercise_notes` - Per-exercise notes
- And more...

## Development

Run tests:
```bash
pytest
```

Format code:
```bash
black .
ruff check .
```

## License

MIT