Troubleshooting

Start here. Most reports turn out to be a client that needs restarting, or WHOOP behaving exactly as documented.

First: is it us or your client?

This one command settles it:

list tools
curl -s https://fitnesspeak.app/mcp \
  -H "Authorization: Bearer fp_live_YOUR_KEY_HERE" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
ResultMeaning
Six tools listedFitnessPeak is fine. The problem is client-side config — restart it, then re-check the file path and JSON.
401Key is wrong, truncated or revoked. Create a new one.
429Rate limited. Wait a minute.
Connection errorNetwork or DNS. Check you can reach fitnesspeak.app at all.

Common issues

My assistant says it can't find any FitnessPeak tools
Restart the client completely — most only read MCP config at startup, and on macOS closing the window isn't quitting. Then confirm the key works with the curl command on the docs page. If curl lists six tools, the problem is client-side config.
I get 401 unauthorized
The key is wrong, revoked, or truncated. Keys start with fp_live_ and are about 51 characters — check nothing was cut off when copying. Create a fresh key from the dashboard and try again.
Tools return “WHOOP is not connected”
Open your dashboard and click Connect WHOOP. If it already says connected, click Disconnect and reconnect — WHOOP may have revoked the grant from their side, which we can't detect until the next call.
The tables come back empty
Usually correct rather than broken. WHOOP only returns days the strap recorded and scored, so days you didn't wear it are absent, and last night may still be unscored. Try a wider range, like days: 30.
Some rows have dashes instead of numbers
That record is PENDING_SCORE or UNSCORABLE. WHOOP populates the score object only once it has scored the record, and we show a dash rather than inventing a zero.
Sleep times look shorter than the WHOOP app shows
Check whether you're comparing time asleep against time in bed. WHOOP doesn't return time asleep directly — it's in-bed minus awake, which is what the Asleep column shows.
A day is missing entirely from whoop_cycles
A WHOOP cycle runs wake-to-wake, not midnight-to-midnight, so a calendar day can hold zero or two cycles. Group by cycle rather than by date.
I get 429 rate limited
The limit is 120 calls per minute per key. If a script is looping, stop it. If it's genuine, email support and we'll look at raising it.
WHOOP itself is rate-limiting me
Wide ranges multiply requests — 365 days is up to 15 calls per tool because WHOOP pages at 25 records. Narrow the range or wait a minute.

Still stuck?

Email support@fitnesspeak.app with your client name and version, what you asked, and what came back. Don't include your API key — we don't need it and can't read it anyway.