Skip to main content
Glama
README.md
# WHOOP MCP

Servidor [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) para la **API de WHOOP v2**. Permite que Claude (Desktop, Code, etc.) consulte tus datos de WHOOP: recovery, sueño, ciclos fisiológicos, entrenamientos, perfil y medidas corporales.

## Herramientas disponibles

| Herramienta | Descripción |
|---|---|
| `get_user_profile` | Perfil básico (nombre, email, user_id) |
| `get_body_measurements` | Altura, peso y FC máxima |
| `get_cycles` | Ciclos fisiológicos (strain, calorías, FC) con filtro por fechas |
| `get_cycle_by_id` | Un ciclo concreto por ID |
| `get_recoveries` | Recoveries (score, HRV, FC en reposo, SpO2, temperatura) |
| `get_recovery_for_cycle` | Recovery asociada a un ciclo |
| `get_sleeps` | Sesiones de sueño (etapas, eficiencia, rendimiento) |
| `get_sleep_by_id` | Una sesión de sueño concreta por UUID |
| `get_sleep_for_cycle` | Sueño asociado a un ciclo |
| `get_workouts` | Entrenamientos (deporte, strain, zonas de FC, distancia) |
| `get_workout_by_id` | Un entrenamiento concreto por UUID |

Las herramientas de colección aceptan `start`, `end` (ISO 8601), `limit` (máx. 25) y `nextToken` para paginar.

## Instalación

```bash
npm install
npm run build
```

## Autenticación

Necesitas una app de desarrollador de WHOOP:

1. Entra en el [WHOOP Developer Dashboard](https://developer.whoop.com) y crea una app.
2. Añade `http://localhost:8917/callback` como **Redirect URI**.
3. Apunta el `Client ID` y el `Client Secret`.

### Opción A (recomendada): refresh token con renovación automática

```bash
export WHOOP_CLIENT_ID="tu_client_id"
export WHOOP_CLIENT_SECRET="tu_client_secret"
npm run auth
```

El script abre la URL de autorización de WHOOP, captura el redirect en local e imprime el `WHOOP_REFRESH_TOKEN`. Con las tres variables definidas, el servidor renueva el access token automáticamente (WHOOP rota el refresh token en cada renovación; el servidor lo gestiona en memoria durante la sesión).

### Opción B: access token estático

```bash
export WHOOP_ACCESS_TOKEN="tu_access_token"
```

Caduca en ~1 hora; útil solo para pruebas.

## Configuración en Claude

### Claude Desktop (`claude_desktop_config.json`)

```json
{
  "mcpServers": {
    "whoop": {
      "command": "node",
      "args": ["/ruta/a/WhoopMCP/dist/index.js"],
      "env": {
        "WHOOP_CLIENT_ID": "tu_client_id",
        "WHOOP_CLIENT_SECRET": "tu_client_secret",
        "WHOOP_REFRESH_TOKEN": "tu_refresh_token"
      }
    }
  }
}
```

### Claude Code

```bash
claude mcp add whoop \
  -e WHOOP_CLIENT_ID=tu_client_id \
  -e WHOOP_CLIENT_SECRET=tu_client_secret \
  -e WHOOP_REFRESH_TOKEN=tu_refresh_token \
  -- node /ruta/a/WhoopMCP/dist/index.js
```

## Ejemplos de uso

Una vez conectado, puedes pedirle a Claude cosas como:

- «¿Cómo fue mi recovery esta semana?»
- «Compara mi sueño de los últimos 7 días»
- «¿Cuál fue mi entrenamiento con más strain este mes?»

## Desarrollo

```bash
npm run dev        # ejecuta el servidor con tsx (sin compilar)
npm run typecheck  # comprobación de tipos
```

## Notas

- Usa la **API v2** de WHOOP (`https://api.prod.whoop.com/developer/v2`); la v1 está obsoleta desde octubre de 2025.
- Todas las herramientas son de **solo lectura**.
- Los errores de la API (401, 404, rate limit…) se devuelven como resultados de error legibles, no como fallos del servidor.

TDQS

A3.8/5.0

Scored across 11 tools

Disambiguation5/5

Each tool retrieves a distinct type of WHOOP data (cycles, recoveries, sleep, workouts, body measurements, user profile) with clear singular/plural distinctions and no overlap in functionality.

Naming Consistency5/5

All tools follow a consistent 'get_[entity]' or 'get_[entity]_by_id' pattern with snake_case, making it predictable and easy to understand.

Tool Count5/5

11 tools cover the core WHOOP data types without being excessive or insufficient, perfectly scoped for a fitness-tracking data retrieval server.

Completeness5/5

The tool set provides comprehensive read access to all major WHOOP entities (cycles, recoveries, sleep, workouts, body measurements, user profile) with list and individual retrieval methods, leaving no obvious gaps for querying.

Maintenance

ActivityStale
ResponsivenessNo issues