whoop-chatgpt-app

whoop-chatgpt-app

MCP server that connects WHOOP health tracker data to ChatGPT, enabling read-only search, fetch, summary, and a React dashboard widget for recovery, sleep, strain, and workouts.

Category
Visit Server

README

WHOOP ChatGPT App

Node.js >= 20 TypeScript React MCP ChatGPT Apps SDK WHOOP API License: MIT

A ChatGPT Apps SDK project that connects WHOOP health tracker data to ChatGPT through a remote MCP server and renders an interactive WHOOP dashboard widget in ChatGPT.

The app is a read-only health-data connector. It can search WHOOP records, fetch individual records, summarize recent recovery/sleep/strain/workout data, and render a dashboard UI from either freshly loaded WHOOP data or previously returned structured content.

This project is for software integration and personal health-data exploration. It is not medical advice.

Screenshots

These screenshots use synthetic demo data and are safe to publish.

Desktop Mobile
WHOOP dashboard desktop screenshot WHOOP dashboard mobile screenshot

Features

  • ChatGPT Apps SDK-compatible MCP server at /mcp
  • Connector-style search and fetch tools for read-only WHOOP data retrieval
  • WHOOP OAuth helper for local development
  • React widget rendered inside ChatGPT
  • Dashboard cards for recovery, strain, sleep performance, and latest workout
  • Recent records timeline with filters for recovery, sleep, workout, and cycle strain
  • Widget actions for refresh, interpretation follow-up, and fullscreen display
  • Synthetic demo mode for safe screenshots and README assets

Architecture

ChatGPT
  |
  | remote MCP over HTTPS
  v
server/
  - MCP tools
  - WHOOP OAuth helper
  - WHOOP API client
  - widget resource registration
  |
  | embeds bundled widget resource
  v
web/
  - React dashboard widget
  - MCP Apps bridge integration

App shape:

  • Archetype: react-widget
  • Architecture: decoupled data/render
  • Connector surface: standard read-only search and fetch tools
  • Widget rendering: render_whoop_dashboard

Tools

All tools are read-only.

Tool Purpose
search(query) Finds recent WHOOP profile, recovery, cycle, sleep, and workout records.
fetch(id) Fetches one record returned by search.
get_whoop_summary(days, includeProfile) Returns a compact model-readable WHOOP summary.
render_whoop_dashboard(days, includeProfile, dashboard) Renders the React widget. It can load data directly using days/includeProfile, or render a dashboard object returned by get_whoop_summary.

Requirements

  • Node.js 20 or newer
  • npm
  • A WHOOP Developer app for live data
  • An HTTPS tunnel for ChatGPT Developer Mode testing, such as ngrok

Quick Start

npm install
cp .env.example .env
npm run build
npm start

The server listens on:

http://localhost:8787/mcp

WHOOP Setup

Create a WHOOP Developer app and configure these read scopes:

read:profile read:body_measurement read:cycles read:recovery read:sleep read:workout

For local development:

  1. Start a public HTTPS tunnel to port 8787.
  2. Set PUBLIC_BASE_URL to the tunnel origin.
  3. Set WHOOP_CLIENT_ID, WHOOP_CLIENT_SECRET, and WHOOP_REDIRECT_URI in .env.
  4. Register the same redirect URI in WHOOP, for example https://example.ngrok.app/oauth/callback.
  5. Restart the server.
  6. Open https://example.ngrok.app/oauth/start in your browser and link WHOOP.

The local OAuth helper stores the WHOOP access token in server memory. Restarting the server clears the link.

ChatGPT Developer Mode

ChatGPT requires a public HTTPS MCP URL for remote app testing.

npm start
ngrok http 8787

Use the tunneled MCP URL:

https://example.ngrok.app/mcp

In ChatGPT:

  1. Enable Developer Mode under Settings -> Apps & Connectors -> Advanced settings.
  2. Create a new app/connector.
  3. Paste the tunneled /mcp URL.
  4. Use No Auth for local development with CHATGPT_APP_AUTH=none.
  5. Refresh or reconnect the app after tool, metadata, or widget changes.

Example prompt:

Use the Whoop app to show my WHOOP dashboard for the last 7 days.

Environment Variables

Copy .env.example to .env and fill in local values.

Variable Required Description
PORT No Local HTTP port. Defaults to 8787.
PUBLIC_BASE_URL Yes for OAuth/ChatGPT Public origin for OAuth redirects and metadata.
WHOOP_CLIENT_ID Yes for OAuth WHOOP Developer app client ID.
WHOOP_CLIENT_SECRET Yes for OAuth WHOOP Developer app client secret. Do not commit it.
WHOOP_REDIRECT_URI Yes for OAuth Redirect URI registered in WHOOP.
CHATGPT_APP_AUTH No Use none for local Developer Mode testing.
WHOOP_ACCESS_TOKEN No Local single-user shortcut. Prefer OAuth for normal testing.
AUTHORIZATION_SERVER_URL Production only OAuth 2.1 authorization server for production ChatGPT linking.
WHOOP_API_BASE_URL No WHOOP API override for tests or proxies.

Development

npm run dev      # run the TypeScript server with tsx
npm run build    # build web widget and server
npm run check    # type-check web and server
npm start        # run the built server

MCP Inspector:

npx @modelcontextprotocol/inspector@latest --server-url http://localhost:8787/mcp --transport http

Project Structure

.
├── docs/screenshots/        # publishable screenshots with synthetic data
├── server/
│   └── src/
│       ├── index.ts         # MCP server, tools, OAuth routes, resource registration
│       ├── whoop-client.ts  # WHOOP API client
│       └── whoop-format.ts  # record formatting and dashboard summarization
├── web/
│   └── src/
│       ├── main.tsx         # React widget and Apps bridge integration
│       └── styles.css       # responsive widget styling
├── .env.example
├── package.json
└── README.md

Security and Privacy

  • .env is ignored by git.
  • Do not commit WHOOP client secrets, access tokens, refresh tokens, or tunnel URLs.
  • WHOOP tokens stay server-side and are never exposed to the widget.
  • The local OAuth helper stores tokens in memory only.
  • Screenshots in docs/screenshots use synthetic data.
  • Production apps should validate token issuer, audience/resource, expiry, and scopes before calling WHOOP.

Production Notes

The local setup uses CHATGPT_APP_AUTH=none so ChatGPT Developer Mode can connect while the server uses the locally linked WHOOP token. For production, put a ChatGPT-compatible OAuth 2.1 authorization layer in front of WHOOP and advertise OAuth security schemes from the MCP server.

Production hosting should include:

  • Stable public HTTPS endpoint
  • Secure secret storage
  • Token verification and refresh handling
  • Request logging without sensitive data
  • Rate-limit and WHOOP API error handling
  • Re-test in ChatGPT Developer Mode before submission

Open Source Checklist

Before publishing:

  • Confirm .env is not staged.
  • Replace any local tunnel URLs in docs or examples with placeholders.
  • Run npm run check.
  • Run npm run build.
  • Review screenshots for synthetic data only.

License

MIT. See LICENSE.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured