btwb-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| BTWB_EMAIL | No | Your BTWB login email (optional, for automatic cookie refresh). | |
| BTWB_SESSION_COOKIE | Yes | Your BTWB session cookie copied from the browser's Cookie request header. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_movementA | Search BTWB's movement library by name (e.g. 'Deadlift', 'Squat Clean'). Returns matching movements with their numeric IDs, which log_workout and get_movement_history both require. |
| log_workoutA | Log a single-movement result (e.g. a 1-rep max) to BTWB. Every entry logged through this tool is always posted with Privacy: Only Me - this is hardcoded and cannot be overridden. |
| log_rounds_workoutA | Log a multi-movement 'rounds' result (e.g. a For Time WOD with several movements per round) to BTWB - as opposed to log_workout, which only handles a single movement. Only 'For Time' workouts scored by total time are supported (other scoring types like AMRAP/total-reps are untested). workoutId/workoutSlug come from the workout's URL (beyondthewhiteboard.com/workouts/{workoutId}-{workoutSlug}/...). Every entry logged through this tool is always posted with Privacy: Only Me - this is hardcoded and cannot be overridden. |
| get_movement_historyA | Get the full logged history for a movement over a date range - every individual set (date, reps, weight), not just PRs - plus a computed 'Potential Max' trend line. Requires the BTWB member ID and the movement's numeric ID plus its URL slug (e.g. movementId 35, movementSlug 'deadlift' for beyondthewhiteboard.com/.../35-deadlift). |
| get_workout_sessionA | Get the full details of one already-logged BTWB result by its session ID (the number in a beyondthewhiteboard.com/workout_sessions/{id} URL): workout name, performed date/time, the movements/sets, the result/score, and level/WOD-rank stats. There's no search-by-date endpoint yet - you need the session ID already (e.g. from a URL, or from log_workout's redirectedTo field). |
| delete_workout_sessionA | Permanently delete an already-logged BTWB result by its session ID. This cannot be undone - BTWB has no trash/undo for deleted sessions. |
| refresh_session_cookieA | Manually re-authenticate to BTWB and replace the stored session cookie with a fresh one. Every other tool already does this automatically when it detects an expired session, so you normally don't need to call this directly - it's mainly useful to proactively refresh, or to test that BTWB_EMAIL and the Keychain-stored password are set up correctly. Requires BTWB_EMAIL and a password stored in Keychain (service: btwb-password) - see README "Automatic cookie refresh". |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 7 tools
Each tool targets a distinct resource and action: search_movement (library lookup) vs get_movement_history (per-set history), log_workout (single movement) vs log_rounds_workout (multi-movement rounds), get_workout_session (read) vs delete_workout_session (remove), plus a standalone auth utility. Descriptions proactively clarify overlaps, e.g. log_rounds_workout explicitly contrasts itself with log_workout.
All seven tools use consistent snake_case verb_noun phrasing (search_movement, log_workout, get_workout_session, delete_workout_session, refresh_session_cookie). No style mixing or vague verb-only names.
Seven tools is well-scoped for a workout-logging and movement-data integration; each tool earns its place with a clear role and no redundant entries.
The surface covers search, log (two variants), read, and delete, but has no update/edit for an already-logged result, and get_workout_session requires a known session ID with no search-by-date or list-sessions tool. Discovery of existing sessions/workouts is thus a notable gap.