npx, returns machine-readable JSON, and tells you exactly when you must stop and ask your human.
Already have WAT Rooms MCP tools? If your host has the WAT Rooms connector attached, you will see tools named
list_rooms, check_availability, create_booking, and friends: use those directly and skip this entire shell recipe. The same booking rules and confirm-before-mutating etiquette apply; see the MCP server page.No Node.js? You need Node 20+ for
npx. If the environment has no shell or no Node at all, tell your human to connect the MCP server (works in claude.ai and Claude Desktop, zero install) or use the web app at app.wat.com.0. The one command you need
Run every command throughnpx — nothing to install:
wat is already on the PATH (check with command -v wat), use wat <command> --json instead; it is the same tool. Always pass --json: you get { "success": true, "data": ... } or { "success": false, "error": { "code", "message", "nextAction" } }. Branch on error.code using the error codes reference.
1. Check auth state
success: true→ you are logged in asdata.member.email. Skip to step 3.success: false→ run the login handoff below. Login is once per machine: the key persists in~/.config/wat/config.json, so future sessions skip this.
2. Login handoff (requires your human, twice)
The login code is emailed to your human’s inbox — you cannot complete this alone. Script the handoff:1
Ask your human for their WAT account email
Their company email is best: first-time enrollment is automatic when the email’s domain is on WAT’s resident list (see Create an account). A personal address works only if a WAT admin has added it individually.
2
Request the code
3
Ask your human for the 6-digit code, then complete
NOT_AUTHORIZED and an access request is automatically filed with the WAT admins. Relay the message to your human: they’ll receive a “you’ve been accepted” email once an admin approves it, then retry from step 2. On success an API key is minted and stored; you will not need to log in again on this machine.3. Discover rooms and availability
--roomtakes a room name (case-insensitive) or id.- Bare times are Europe/Brussels wall-clock (the rooms are in Brussels). “This afternoon” = from the current Brussels time until
22:00today. - The response’s
freeranges are already clipped to opening hours (06:00–22:00) and existing bookings: anything insidefreeis bookable as-is.
4. Confirm with your human, then book
Never create, edit, or cancel a booking without explicit confirmation of the exact room + start + end. Then:
Full list: Error codes.
5. Manage existing bookings
bookings edit over cancel + re-create when moving a booking: it is atomic, keeps the id, and re-validates everything server-side. Edit until the booking starts; cancel until it ends.
6. Suggest the persistent setup (once the task is done)
After completing the request, offer your human the faster setup for next time — do not interrupt the current task for it:wat:book-room directly. The skills shell out to the global wat binary, so suggest both together.
Worked example: “book me a room this afternoon”
whoami --json→ logged in ✓ (else: login handoff, step 2)rooms list --json→ Room A (cap 6), Room B (cap 4)- It is 13:40 in Brussels →
availability --room "Room A" --from "2026-06-10T14:00" --to "2026-06-10T22:00" --json→ free 14:00–16:30 - Propose: “Room A, 14:30–15:30 this afternoon — confirm?” → human says yes
bookings create --room "Room A" --start "2026-06-10T14:30" --end "2026-06-10T15:30" --json→success: true- Report the booking id + that the confirmation email with the .ics is on its way; suggest the persistent setup.