ต้นแบบ · รุ่นทดลอง: มีทุก server ในทะเบียนทางการ อัปเดตทุก 30 นาที รีวิวและบัญชีผู้ใช้จะมาในขั้นถัดไป
PopNx MCPที่รวม MCP สำหรับคนใช้ AI · อธิบายเป็นภาษาคน

WHOOP MCP

โดย cunicopia-devรุ่น 0.1.0i★ –iรันบนเครื่อง
ชื่อใน registryio.github.cunicopia-dev/whoop-postgres-mcp

ติดตั้ง

ภาพรวม

คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)

Sync WHOOP recovery, sleep, strain, and workouts into Postgres and query them from any MCP client.

สามเสาของ PopNx MCP

สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน

ใช้ทำอะไรได้

ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry

  • การเชื่อมต่อ: รันบนเครื่อง
  • ช่องทาง (transport): stdio
  • หมวด: ฐานข้อมูลและชุดข้อมูล
  • ต้องใส่ค่าเหล่านี้: WHOOP_CLIENT_ID, WHOOP_CLIENT_SECRET, WHOOP_REDIRECT_URI, WHOOP_DB_URL

ติดตั้ง

เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง

ก่อนติดตั้ง

ค่าที่ติดป้ายความลับคือกุญแจของบัญชีคุณ อย่าส่งให้ใคร และอย่าวางในแชต

ต้องเตรียมก่อน

  • PyPIติดตั้ง uv ของ Python (มีคำสั่ง uvx) ในเครื่อง

คุณใช้แอปไหน

เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”

เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json

{
  "mcpServers": {
    "whoop-postgres": {
      "command": "uvx",
      "args": [
        "whoop-postgres-mcp"
      ],
      "env": {
        "WHOOP_CLIENT_ID": "ใส่ค่าของคุณ",
        "WHOOP_CLIENT_SECRET": "ใส่ค่าของคุณ",
        "WHOOP_REDIRECT_URI": "ใส่ค่าของคุณ",
        "WHOOP_DB_URL": "ใส่ค่าของคุณ"
      }
    }
  }
}

พิมพ์คำสั่งนี้ใน Terminal

claude mcp add whoop-postgres --env WHOOP_CLIENT_ID='ใส่ค่าของคุณ' --env WHOOP_CLIENT_SECRET='ใส่ค่าของคุณ' --env WHOOP_REDIRECT_URI='ใส่ค่าของคุณ' --env WHOOP_DB_URL='ใส่ค่าของคุณ' -- uvx whoop-postgres-mcp

เติมค่าที่เว้นว่างไว้ก่อนรัน

เปิดใน Cursor

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json

{
  "mcpServers": {
    "whoop-postgres": {
      "command": "uvx",
      "args": [
        "whoop-postgres-mcp"
      ],
      "env": {
        "WHOOP_CLIENT_ID": "ใส่ค่าของคุณ",
        "WHOOP_CLIENT_SECRET": "ใส่ค่าของคุณ",
        "WHOOP_REDIRECT_URI": "ใส่ค่าของคุณ",
        "WHOOP_DB_URL": "ใส่ค่าของคุณ"
      }
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

เปิดใน VS Code

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .vscode/mcp.json ของโปรเจกต์

{
  "servers": {
    "whoop-postgres": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "whoop-postgres-mcp"
      ],
      "env": {
        "WHOOP_CLIENT_ID": "ใส่ค่าของคุณ",
        "WHOOP_CLIENT_SECRET": "ใส่ค่าของคุณ",
        "WHOOP_REDIRECT_URI": "ใส่ค่าของคุณ",
        "WHOOP_DB_URL": "ใส่ค่าของคุณ"
      }
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น

ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี

ค่าที่ต้องใส่เอง

  • WHOOP_CLIENT_ID ความลับ จำเป็น env
    Client ID of your WHOOP developer app (developer.whoop.com).
  • WHOOP_CLIENT_SECRET ความลับ จำเป็น env
    Client secret of your WHOOP developer app.
  • WHOOP_REDIRECT_URI จำเป็น env
    OAuth redirect URI, exactly as registered on the WHOOP app (e.g. http://localhost:8765/callback).
  • WHOOP_DB_URL ความลับ จำเป็น env
    Postgres DSN the server syncs into and reads from (e.g. postgresql://user:pass@localhost:5432/whoop). Tokens are stored in this database.

ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README

ทำอะไรได้บ้าง

รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง

ผลตรวจเบื้องต้นi

เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 6 พ.ย. 2569

  • ✓ ผ่าน

    ตัวตนผู้ทำตรงกับ repo

    ชื่อใน registry ยืนยันด้วยบัญชี GitHub cunicopia-dev ซึ่งเป็นเจ้าของ repo

  • … ยังไม่ตรวจ

    ยังมีคนดูแล

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • … ยังไม่ตรวจ

    มีสัญญาอนุญาต (license)

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • – ไม่เกี่ยว

    endpoint ตอบ

    ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต

  • – ไม่เกี่ยว

    ล็อกอินแบบ OAuth

    ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน

  • … ยังไม่ตรวจ

    คำอธิบายเครื่องมือไม่มีคำสั่งแอบแฝง

    รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต

เทียบกับตัวอื่นในหมวด ฐานข้อมูลและชุดข้อมูลi

  • ดาวมากกว่า 0% ของอีก 953 ตัวในหมวดนี้
  • ส่งรุ่นใหม่เข้า registry ล่าสุดกว่า 37% ของอีก 953 ตัวในหมวดนี้
  • ผลตรวจเบื้องต้นดีกว่าหรือเท่ากับ 100% ของอีก 953 ตัวในหมวดนี้

เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo

คำถามที่พบบ่อย

WHOOP MCP ปลอดภัยไหม?

จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น

ต้องใช้กุญแจหรือรหัสอะไรบ้าง?

ต้องใส่ค่าเหล่านี้: WHOOP_CLIENT_ID, WHOOP_CLIENT_SECRET, WHOOP_REDIRECT_URI, WHOOP_DB_URL

ตัวนี้รันบนเครื่องหรือบนคลาวด์?

รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)

ยังมีคนดูแลอยู่ไหม?

repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.1.0) เข้า registry 2 เดือนที่ผ่านมา

ใช้กับโปรแกรมไหนได้บ้าง?

โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Python (uv) ในเครื่องด้วย

มีตัวไหนใช้แทนได้บ้าง?

ในหมวดเดียวกันมี Supabase, MongoDB MCP Server, Elasticsearch MCP Server

ตัวที่ใช้แทนได้

server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว

อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi

Supabase

โดย supabase

server ทางการของ Supabase ให้ AI สร้างตาราง ถามข้อมูล และดูการตั้งค่าโปรเจกต์ในฐานข้อมูล Supabase ของคุณ

บนเครื่องหรือคลาวด์★ 2,993Apache-2.0อัปเดต เมื่อวาน
ติดตั้ง

MongoDB MCP Server

โดย mongodb-js

MongoDB Model Context Protocol Server

รันบนเครื่อง★ 1,157Apache-2.0อัปเดต เมื่อวานซืน
ติดตั้ง

Elasticsearch MCP Server

โดย cr7258

MCP server for interacting with Elasticsearch

รันบนเครื่อง★ 315Apache-2.0อัปเดต 14 เดือนที่ผ่านมา
ติดตั้ง

README จากผู้ทำ

เปิดอ่าน README

ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ

whoop-mcp

An [MCP](https://modelcontextprotocol.io) server that syncs your WHOOP data into Postgres and lets AI agents query it.

WHOOP's public API is rate-limited, cursor-paginated, and returns one record at a time. That is fine for a sync job and terrible for an agent that wants to answer "how does my HRV this week compare to my baseline?". So this server splits the job in two:

  • a sync path that pulls cycles, recovery, sleep, workouts, and body measurements from the WHOOP API into a documented Postgres schema, keeping the raw JSON of every record alongside the typed columns;
  • a query path of MCP tools that read Postgres only. They are fast, never hit WHOOP's rate limits, and keep working offline once data is synced.

Your data lands in a database you own, in a schema you can read with any SQL client, and nothing leaves your machine except calls to WHOOP itself.

Python 3.12+ · MIT · stdio MCP server + CLI · Postgres storage


Contents

  • Tools
  • Install
  • Quickstart
  • Configuration
  • Register with an MCP client
  • How sync works
  • Security model
  • Development
  • Project layout
  • License

Tools

Two write-side tools talk to the WHOOP API; everything else reads Postgres only.

ToolArgsWhat it does
whoop_auth_urlnoneReturns the OAuth authorization URL to open in a browser.
whoop_connectcodeExchanges the OAuth code for tokens, stores them, returns the connected user.
whoop_syncdays=7, full=falsePulls data from WHOOP into Postgres. Returns per-collection counts and errors.
whoop_statusnonePer-collection sync health: last sync, watermark, row count, last error.
whoop_overviewdays=7Latest recovery and vitals vs. 30-day baseline, last night's sleep, recent workouts and strain.
whoop_recoverydays=7, limit=50Recent recovery scores, resting HR, HRV, SpO2, skin temperature.
whoop_sleepdays=7, limit=50Recent sleeps and naps with stage breakdown, need, performance, efficiency.
whoop_workoutsdays=14, limit=50Recent workouts with strain, HR, energy, distance, and zone minutes.
whoop_cyclesdays=7, limit=50Recent physiological cycles (WHOOP days) with day strain and HR.
whoop_baselinenone30-day mean and standard deviation per vital.

days is capped at 365 and limit at 200. All tools return JSON text.

Install

uv tool install whoop-postgres-mcp      # or: pipx install whoop-postgres-mcp

Or run it without installing:

uvx whoop-postgres-mcp --help

You also need a Postgres database (any recent version; 14+ is fine) and a WHOOP developer app. docs/SETUP.md walks through both.

Quickstart

export WHOOP_CLIENT_ID=...

export WHOOP_CLIENT_SECRET=... export WHOOP_REDIRECT_URI=http://localhost:8765/callback export WHOOP_DB_URL=postgresql://whoop:whoop@localhost:5432/whoop

whoop-mcp init-db # create the whoop schema (idempotent) whoop-mcp auth-url # print the URL to visit; approve access in a browser whoop-mcp connect # paste the code from the redirect URL whoop-mcp sync --all # first backfill; later runs: whoop-mcp sync --days 7 whoop-mcp # serve MCP over stdio

The same flow is available as MCP tools (whoop_auth_url, whoop_connect, whoop_sync) so an agent can drive the whole setup.

Configuration

All configuration is by environment variable. The server validates every variable at startup and exits with a message naming each missing one.

VariableRequiredMeaning
WHOOP_CLIENT_IDyesClient ID of your WHOOP developer app.
WHOOP_CLIENT_SECRETyesClient secret of your WHOOP developer app.
WHOOP_REDIRECT_URIyesRedirect URI, exactly as registered on the app. Any URL works; the server does not listen on it. You copy the code from the address bar.
WHOOP_DB_URLyesPostgres DSN, e.g. postgresql://user:pass@host:5432/db. Tokens and data live here.

Register with an MCP client

Claude Code:

claude mcp add whoop -e WHOOP_CLIENT_ID=... -e WHOOP_CLIENT_SECRET=... \

-e WHOOP_REDIRECT_URI=http://localhost:8765/callback \ -e WHOOP_DB_URL=postgresql://whoop:whoop@localhost:5432/whoop \ -- uvx whoop-postgres-mcp

Claude Desktop (claude_desktop_config.json) or any client that takes a stdio command:

{

"mcpServers": { "whoop": { "command": "uvx", "args": ["whoop-postgres-mcp"], "env": { "WHOOP_CLIENT_ID": "...", "WHOOP_CLIENT_SECRET": "...", "WHOOP_REDIRECT_URI": "http://localhost:8765/callback", "WHOOP_DB_URL": "postgresql://whoop:whoop@localhost:5432/whoop" } } } }

How sync works

WHOOP's collection endpoints filter on when a record *occurred*, not when it was last modified, and records change after creation (a sleep is created as PENDING_SCORE and scored later). The sync therefore:

  1. always re-fetches the last days days, which catches late re-scores;
  2. tracks a per-collection watermark (newest_updated_at in whoop_sync_state). If the last sync is older than days, the window is stretched back to the watermark minus a two-day lookback so a gap never leaves a hole;
  3. upserts every record on its natural key (id, or cycle_id for recovery), so overlapping windows are harmless and re-running is safe;
  4. records per-collection errors in whoop_sync_state and carries on with the other collections rather than aborting the run.

full=true (or whoop-mcp sync --all) drops the lower bound and walks the account's entire history. Body measurements are a single current record and are refreshed on every sync.

Token refresh is proactive (five minutes before expiry) and serialized through a Postgres advisory lock, so the MCP server and a cron-driven whoop-mcp sync can share one token row without racing.

The full data model is documented in docs/SCHEMA.md.

Security model

  • Database access is token access. OAuth tokens are stored in plaintext in whoop.whoop_tokens. Anyone who can read that table can call the WHOOP API as you until the refresh token is revoked. Restrict database grants accordingly and treat WHOOP_DB_URL as a secret.
  • Read tools never reach the network. Only whoop_connect and whoop_sync talk to WHOOP. Everything else is a SQL query against your database.
  • Nothing is written outside Postgres. No files, no caches, no telemetry.
  • Scopes are read-only. The app requests read:* scopes plus offline for refresh tokens. It cannot modify anything in your WHOOP account.
  • To revoke access, delete the row from whoop_tokens and remove the app from your WHOOP account settings.

Development

git clone https://github.com/cunicopia-dev/whoop-mcp

cd whoop-mcp uv venv && source .venv/bin/activate uv pip install -e ".[dev]"

ruff check . mypy src pytest # pure-logic tests WHOOP_TEST_DB_URL=postgresql://whoop:whoop@localhost:5432/whoop pytest # + live DB tests

The live tests apply the schema and truncate every table in the target database before each test. Point them at a scratch database.

A throwaway Postgres for local testing:

docker run -d --rm --name whoop-pg -e POSTGRES_USER=whoop -e POSTGRES_PASSWORD=whoop \

-e POSTGRES_DB=whoop -p 5432:5432 postgres:16-alpine

Project layout

src/whoop_mcp/

config.py environment variables, validated at startup auth.py OAuth2 flow, token persistence, locked refresh client.py httpx client: pagination, backoff, Retry-After schema.sql the Postgres DDL (applied by whoop-mcp init-db) db.py connection + schema helpers sync.py incremental sync with per-collection watermarks queries.py read-side SQL behind the MCP tools server.py MCP server over stdio + CLI entry point docs/ SETUP.md WHOOP app registration, OAuth walkthrough, DB init, first sync SCHEMA.md column-by-column data model tests/ config, schema, client, auth, sync, and stdio protocol tests

License

MIT. See LICENSE.

ถาม PopNx