When I Work MCP server

Check shifts, time clock entries, time-off requests, swaps and availability, and manage shifts. Hosted by usefulapi — connect from Claude, Cursor, or any MCP client.

Claude

  1. Open Settings → Connectors → Add custom connector
  2. Paste this URL:
    https://when-i-work.usefulapi.io/mcp
  3. Authenticate with When I Work when prompted

Cursor · VS Code · Windsurf · Cline

Add to your MCP config, then reload & authorize:

{
  "mcpServers": {
    "when-i-work": {
      "url": "https://when-i-work.usefulapi.io/mcp"
    }
  }
}
live23 toolsFree 100 tool calls / monthPro $9/mo · $90/yr

Tools 23

ToolTypeWhat it does
wheniwork_get_accountread
Get the account
Fetch the When I Work account (workplace) the token acts on — company name, plan and settings; for a parent account also its child accounts. A cheap way to confirm the credentials work. When I Work: GET /2/account.
wheniwork_list_usersread
List users
List the employees, supervisors, managers and admins in the account, optionally limited to some schedules or searched by name/email. Role codes: 1 admin, 2 manager, 3 employee, 5 supervisor. When I Work: GET /2/users.
wheniwork_get_userread
Get one user
Fetch one user by id — name, email, role, positions, schedules, wage. When I Work: GET /2/users/{id}.
wheniwork_list_locationsread
List schedules (locations)
List the schedules in the account. The API calls a schedule a "location"; its id is the location_id every shift belongs to. When I Work: GET /2/locations.
wheniwork_list_positionsread
List positions
List the positions (job roles such as Cashier or Dishwasher) in the account. When I Work: GET /2/positions.
wheniwork_list_shiftsread
List shifts
List scheduled shifts in a time window — who works when, where and in which position — optionally including open shifts and unpublished drafts. Answers "who is on on Friday?" and "what open shifts are left?". When I Work: GET /2/shifts.
wheniwork_get_shiftread
Get one shift
Fetch one shift by id, including its breaks and publish state. When I Work: GET /2/shifts/{id}.
wheniwork_list_eligible_users_for_shiftread
List users eligible for an open shift
Find who could take an open shift — either an existing shift (shift_id) or a hypothetical one (start, end, position_id and location_id all required). When I Work: GET /2/shifts/eligible.
wheniwork_list_timesread
List clocked times (timesheets)
List clocked time entries — actual hours worked, clock-in/out times, length and approval state. Use only_open to see who is clocked in right now. When I Work: GET /2/times.
wheniwork_list_time_off_requestsread
List time-off requests
List time-off requests in a date range, with the requesting users. Status: 0 pending, 1 canceled, 2 accepted, 3 expired, 4 denied. When I Work: GET /2/requests.
wheniwork_get_time_off_requestread
Get one time-off request
Fetch one time-off request by id, with its message thread and users. When I Work: GET /2/requests/{request_id}.
wheniwork_list_time_off_typesread
List time-off types
List the time-off types (e.g. Personal, Sick, Holiday) and whether each allows paid time. Their ids are the type_id for a new request. When I Work: GET /2/requesttypes.
wheniwork_list_shift_swapsread
List shift swaps and drops
List shift requests: swaps, drops and alerts, with the shifts and users involved. Status: 0 pending, 1 approved, 2 declined, 3 completed, 4 canceled, 5 expired. Type: 1 swap, 2 drop, 3 alert. start and end must be given together. When I Work: GET /2/swaps.
wheniwork_list_availabilityread
List availability
List availability events — when people said they can or cannot work, including recurring patterns that fall in the window. Defaults to the caller, from now to two weeks out. When I Work: GET /2/availabilityevents.
wheniwork_list_annotationsread
List schedule annotations
List schedule annotations — announcements, business-closed days and blackout dates when time off is not allowed. Defaults to today through one year out. When I Work: GET /2/annotations.
wheniwork_create_shiftwrite
Create a shift
Create one shift on a schedule — assigned to a user, or open (user_id 0). Created as a draft unless published is true. Undo by editing it or unpublishing. When I Work: POST /2/shifts.
wheniwork_update_shiftwrite
Update a shift
Change a shift — reassign it, move it, change position or notes. When I Work requires start_time, end_time and location_id on every update, so fetch the shift first and pass them back. This tool never sends a breaks array; When I Work documents that breaks omitted from an update's breaks list are removed, so re-check the shift's breaks afterwards. When I Work: PUT /2/shifts/{id}.
wheniwork_publish_shiftswrite
Publish shifts
Publish draft shifts so employees can see them. Publishing does not itself send notifications. Undo with wheniwork_unpublish_shifts. When I Work: POST /2/shifts/publish.
wheniwork_unpublish_shiftswrite
Unpublish shifts
Return published shifts to draft, hiding them from employees. Undo with wheniwork_publish_shifts. When I Work: POST /2/shifts/unpublish.
wheniwork_create_time_off_requestwrite
Create a time-off request
Create a time-off request for a user (default the calling user). It starts pending; cancel it with wheniwork_update_time_off_request (status 1). Get type ids from wheniwork_list_time_off_types. When I Work: POST /2/requests.
wheniwork_update_time_off_requestwrite
Approve, deny or change a time-off request
Change a time-off request: set its status (0 pending, 1 canceled, 2 accepted/approved, 3 expired, 4 denied) and/or its dates or hours. Reversible — set the status back. start_time and end_time must be given together. When I Work: PUT /2/requests/{request_id}.
wheniwork_usage_statusmeta
Usage status (free-tier meter)
Report the caller's current free-tier usage this month: calls used, monthly limit, remaining, and whether the cap is reached. Read-only; does not count against the meter.
wheniwork_upgrademeta
Upgrade to Pro (unlimited)
Subscribe to the Pro plan for UNLIMITED When I Work tool calls (the free tier caps monthly usage). Choose monthly ($9/month) or yearly ($90/year — 2 months free) billing. Returns a Stripe Checkout link to open in your browser; after payment your account upgrades automatically. Read-only; does not count against the meter.

Pricing

PlanPriceLimit
Free$0100 tool calls / month
Proper user$9/mo · $90/yrUnlimited

This is a Model Context Protocol endpoint — meant to be connected from an AI client, not opened in a browser. An invalid_token response at the URL is the auth gate working as designed; clients authenticate automatically.

More Business Operations MCP servers

Beds24BoulevardBuildiumCurrent RMSDeputyFilloutFormbricksFormstackHostfullyHousecall ProKickservOfficeRnDRecruiteeShopmonkeySmoobuSortlyWorkizWufoo

All Business Operations servers →