{"_id":"@alacore/whoop-mcp-server","_rev":"2-6d8a4c39e7a2910bb50acc662c85f07f","name":"@alacore/whoop-mcp-server","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@alacore/whoop-mcp-server","version":"1.0.0","keywords":["mcp","whoop","api","oauth","modelcontextprotocol","claude"],"author":{"name":"Alex K.","email":"alacore@gmail.com"},"license":"MIT","_id":"@alacore/whoop-mcp-server@1.0.0","maintainers":[{"name":"alacore","email":"alacore@gmail.com"}],"homepage":"https://github.com/alacore/whoop-tracker-mcp-server#readme","bugs":{"url":"https://github.com/alacore/whoop-tracker-mcp-server/issues"},"bin":{"whoop-mcp":"dist/mcp-standalone.js"},"dist":{"shasum":"5e330ad727cde224f7b96344cf5b10d7fcb85c8a","tarball":"https://registry.npmjs.org/@alacore/whoop-mcp-server/-/whoop-mcp-server-1.0.0.tgz","fileCount":4,"integrity":"sha512-d33On2osYzsrGn2hia9Rn77Q5Yh4LefwhN4vwZ1EIpBymEqNQyvO0fX0vhryO9GNsU5mN6bITN2WQtA8liNI8g==","signatures":[{"sig":"MEUCIQDbavOSg2TYa1eONEoWKaNO7lCndPkKQXRivqE7QPyPNwIgGxID8PimpluO+6lVCYLAJo+WH/vvn1QFNn5d9XglrGU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36762},"main":"dist/mcp-standalone.js","engines":{"node":">=22.0.0","pnpm":">=10.0.0"},"gitHead":"70557092e57d0819f9ba95dac932572ea151d26c","scripts":{"dev":"tsx --env-file=.env src/mcp-standalone.ts","build":"tsc","start":"node dist/mcp-standalone.js"},"_npmUser":{"name":"alacore","email":"alacore@gmail.com"},"repository":{"url":"git+https://github.com/alacore/whoop-tracker-mcp-server.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP (Model Context Protocol) server for Whoop APIv2 integration","directories":{},"_nodeVersion":"22.19.0","dependencies":{"reflect-metadata":"^0.2.0","@modelcontextprotocol/sdk":"^1.17.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.15.1","devDependencies":{"tsx":"^4.11.2","dotenv":"^17.2.1","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/whoop-mcp-server_1.0.0_1757968601478_0.8230196936408909","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@alacore/whoop-mcp-server","version":"1.0.1","description":"MCP (Model Context Protocol) server for Whoop APIv2 integration","main":"dist/mcp-standalone.js","bin":{"whoop-mcp":"dist/mcp-standalone.js"},"repository":{"type":"git","url":"git+https://github.com/alacore/whoop-tracker-mcp-server.git"},"bugs":{"url":"https://github.com/alacore/whoop-tracker-mcp-server/issues"},"homepage":"https://github.com/alacore/whoop-tracker-mcp-server#readme","packageManager":"pnpm@10.15.1","engines":{"node":">=20.0.0","pnpm":">=10.0.0"},"scripts":{"build":"tsc","start":"node dist/mcp-standalone.js","dev":"tsx --env-file=.env src/mcp-standalone.ts"},"keywords":["mcp","whoop","api","oauth","modelcontextprotocol","claude"],"author":{"name":"Alex K.","email":"alacore@gmail.com"},"publishConfig":{"access":"public"},"license":"MIT","dependencies":{"@modelcontextprotocol/sdk":"^1.17.4","reflect-metadata":"^0.2.0"},"devDependencies":{"@types/node":"^22.0.0","dotenv":"^17.2.1","tsx":"^4.11.2","typescript":"^5.6.0"},"_id":"@alacore/whoop-mcp-server@1.0.1","gitHead":"f49769482849229398967e700c4e0b15e73ca768","_nodeVersion":"24.7.0","_npmVersion":"11.5.1","dist":{"integrity":"sha512-tbZ9ypTkDyEjGVnoFI/23n17950f4qwLzJMgHueFZscEEYF62Mjn/9oSeB4vNJVEvydL1w6GTbdkO8+xv7acJw==","shasum":"c3b7e4ee48702ee3070917afdb65444d23b4aef7","tarball":"https://registry.npmjs.org/@alacore/whoop-mcp-server/-/whoop-mcp-server-1.0.1.tgz","fileCount":4,"unpackedSize":36758,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDXtPVNP7JLHdeLAcShXbzEnyh6aR5Mf3f8N+Qnw4PGYwIhAJPtPH3KrcdoN3u6dsvkvz2j2yulhg1ibQ1mHW+cAdCe"}]},"_npmUser":{"name":"alacore","email":"alacore@gmail.com"},"directories":{},"maintainers":[{"name":"alacore","email":"alacore@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/whoop-mcp-server_1.0.1_1760002309581_0.401689483850153"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-15T20:36:41.337Z","modified":"2025-10-09T09:31:49.972Z","1.0.0":"2025-09-15T20:36:41.649Z","1.0.1":"2025-10-09T09:31:49.790Z"},"bugs":{"url":"https://github.com/alacore/whoop-tracker-mcp-server/issues"},"author":{"name":"Alex K.","email":"alacore@gmail.com"},"license":"MIT","homepage":"https://github.com/alacore/whoop-tracker-mcp-server#readme","keywords":["mcp","whoop","api","oauth","modelcontextprotocol","claude"],"repository":{"type":"git","url":"git+https://github.com/alacore/whoop-tracker-mcp-server.git"},"description":"MCP (Model Context Protocol) server for Whoop APIv2 integration","maintainers":[{"name":"alacore","email":"alacore@gmail.com"}],"readme":"# Whoop MCP Server\n\nA lightweight MCP (Model Context Protocol) server for integrating with the Whoop API v2. Built for use with Claude Desktop and other MCP clients.\n\n## Features\n\n- 🔐 OAuth 2.0 authentication with Whoop\n- 🔄 Automatic token refresh\n- 📊 Access to all major Whoop data endpoints:\n  - User profile and body measurements\n  - Sleep, recovery, and cycle data\n  - Workout information\n- 🐳 Docker support for easy deployment\n- 💾 Persistent token storage\n\n## Quick Start\n\n### Prerequisites\n\n- Node.js >= 22.0.0 (for Method 1) OR Docker (for Method 2)\n- pnpm >= 10.0.0 (for Method 1 only)\n- [Whoop Developer Account](https://developer-dashboard.whoop.com)\n\n### Setup for Claude Desktop\n\nChoose one of the two methods below to integrate with Claude Desktop. The MCP server runs as part of Claude Desktop - you don't need to start it separately.\n\n#### Method 1: Using Node.js\n\n1. **Clone and install:**\n\n   ```bash\n   git clone https://github.com/alacore/whoop-tracker-mcp-server.git\n   cd whoop-tracker-mcp-server\n   pnpm install\n   ```\n\n2. **Build the server:**\n   ```bash\n   pnpm run build\n   ```\n\n3. **Configure Claude Desktop** - see [Claude Desktop Configuration](#claude-desktop-configuration) section below\n\n#### Method 2: Using Docker\n\n1. **Clone the repository:**\n\n   ```bash\n   git clone https://github.com/alacore/whoop-tracker-mcp-server.git\n   cd whoop-tracker-mcp-server\n   ```\n\n2. **Build Docker image:**\n   ```bash\n   docker build -t whoop-mcp .\n   ```\n\n3. **Configure Claude Desktop** - see [Claude Desktop Configuration](#claude-desktop-configuration) section below\n\n### Development Mode (Optional)\n\nFor testing the MCP server independently or during development:\n\n1. **Configure environment:**\n\n   ```bash\n   cp .env.example .env\n   ```\n\n   Edit `.env` with your Whoop OAuth credentials:\n\n   ```env\n   WHOOP_CLIENT_ID=your_whoop_client_id\n   WHOOP_CLIENT_SECRET=your_whoop_client_secret\n   WHOOP_REDIRECT_URI=http://localhost:3000/callback\n   WHOOP_SCOPES=offline read:profile read:body_measurement read:cycles read:recovery read:sleep read:workout\n   ```\n\n2. **Run in development mode:**\n   ```bash\n   pnpm run dev\n   ```\n\n   Note: This runs the server standalone for testing. For actual use with Claude Desktop, follow the configuration instructions below.\n\n## Usage\n\n### Claude Desktop Configuration\n\n#### Method 1: Direct Node.js Execution\n\nAdd to your Claude Desktop configuration (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):\n\n```json\n{\n  \"mcpServers\": {\n    \"whoop\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/whoop-tracker-mcp-server/dist/mcp-standalone.js\"],\n      \"env\": {\n        \"WHOOP_CLIENT_ID\": \"your_client_id\",\n        \"WHOOP_CLIENT_SECRET\": \"your_client_secret\",\n        \"WHOOP_REDIRECT_URI\": \"http://localhost:3000/callback\",\n        \"WHOOP_SCOPES\": \"offline read:profile read:body_measurement read:cycles read:recovery read:sleep read:workout\"\n      }\n    }\n  }\n}\n```\n\n**Prerequisites:**\n- Node.js >= 22.0.0 installed\n- Built server (`pnpm run build`)\n- Replace `/path/to/whoop-tracker-mcp-server` with your actual project path\n\n**Note:** The `offline` scope in `WHOOP_SCOPES` is required to receive a refresh token during the OAuth2 flow, enabling automatic token renewal without re-authentication.\n\n#### Method 2: Docker Container\n\nFirst, build the Docker image:\n\n```bash\n# Build the Docker image\ndocker build -t whoop-mcp .\n```\n\nThen add to your Claude Desktop configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"whoop\": {\n      \"command\": \"docker\",\n      \"args\": [\n        \"run\",\n        \"--rm\",\n        \"-i\",\n        \"-e\",\n        \"WHOOP_CLIENT_ID=your_client_id\",\n        \"-e\",\n        \"WHOOP_CLIENT_SECRET=your_client_secret\",\n        \"-e\",\n        \"WHOOP_REDIRECT_URI=http://localhost:3000/callback\",\n        \"-e\",\n        \"WHOOP_SCOPES=offline read:profile read:body_measurement read:cycles read:recovery read:sleep read:workout\",\n        \"-v\",\n        \"${HOME}/.whoop-mcp:/home/node/.whoop-mcp\",\n        \"whoop-mcp\"\n      ]\n    }\n  }\n}\n```\n\n**Prerequisites:**\n- Docker installed and running\n- Built Docker image (`docker build -t whoop-mcp .`)\n\n**Notes:** \n- The `-v` flag mounts a local directory for persistent token storage across container restarts. First create the directory on your host machine (e.g., `mkdir -p ~/.whoop-mcp`), then mount it using the `-v` flag - this is where auth tokens will be stored\n- The `offline` scope in `WHOOP_SCOPES` is required to receive a refresh token during the OAuth2 flow, enabling automatic token renewal without re-authentication\n\n### Testing Your Setup\n\nTo test either configuration:\n\n1. Restart Claude Desktop after updating the configuration\n2. In Claude, use the Whoop tools:\n   - Start with `whoop_auth_url` to begin authentication\n   - Follow the OAuth flow to authorize\n   - Use other tools like `whoop_get_profile` to verify access\n\n## Available MCP Tools\n\n### Authentication\n\n- **whoop_auth_url** - Generate OAuth authorization URL\n- **whoop_exchange_token** - Exchange auth code for access token\n- **whoop_refresh_token** - Refresh expired access token\n\n### Data Access\n\n- **whoop_get_profile** - Get user profile\n- **whoop_get_body_measurement** - Get body measurements\n- **whoop_get_cycles** - Get physiological cycles\n- **whoop_get_recovery** - Get recovery data\n- **whoop_get_sleep** - Get sleep data\n- **whoop_get_workouts** - Get workout data\n\n## Authentication Flow\n\n1. Use `whoop_auth_url` to get authorization URL\n2. Open URL in browser and authorize\n3. Copy the `code` parameter from callback URL\n4. Use `whoop_exchange_token` with the code\n5. Tokens are automatically saved and refreshed\n\n## Development\n\n```bash\n# Development with hot reload\npnpm run dev\n\n# Build for production\npnpm run build\n\n# Run built version\npnpm start\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}